Name: series-workflowbxf66 Phase: Succeeded StartedAt: 2026-08-12 21:10:13 +0000 UTC FinishedAt: 2026-08-13 01:16:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[0] Phase: Succeeded StartedAt: 2026-08-12 21:10:13 +0000 UTC FinishedAt: 2026-08-12 21:36:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 21:10:13 +0000 UTC FinishedAt: 2026-08-12 21:36:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7b53449540502cb21b32bca62a6258e22cd97bbe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7b53449540502cb21b32bca62a6258e22cd97bbe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "518ca1cb-5b3a-48a2-87ad-b2a3574944db" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "inet_getpeer", "inet_peer_xrlim_allow" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2luZXRfZ2V0cGVlciYjMzQ7LAogICAgJiMzNDtpbmV0X3BlZXJfeHJsaW1fYWxsb3cmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgYGluZXRfcGVlcmAgdHJhY2tpbmcgbWVjaGFuaXNtIGJ5IGFkZGluZyBhIGhhc2ggZmllbGQgdG8gb3B0aW1pemUgcmVkLWJsYWNrIHRyZWUgbG9va3VwcyBhbmQgZml4aW5nIGEgY29tcGFyaXNvbiBidWcgYmV0d2VlbiBJUHY0IGFuZCBJUHY2IGFkZHJlc3Nlcy4gVGhlIG5ldyBoYXNoIGZ1bmN0aW9uIChgaW5ldHBlZXJfYWRkcl9oYXNoYCkgYW5kIHRoZSBtb2RpZmllZCBjb21wYXJpc29uIGZ1bmN0aW9uIChgaW5ldHBlZXJfZW50cnlfY21wYCkgZXhwbGljaXRseSBvbmx5IHJlYWQgdGhlIGluaXRpYWxpemVkIGZpZWxkcyBvZiB0aGUgYGluZXRwZWVyX2FkZHJgIHVuaW9uIChgYTQuYWRkcmAgYW5kIGBhNC52aWZgIGZvciBJUHY0LCBhbmQgYGE2LnM2X2FkZHIzMmAgZm9yIElQdjYpLiBXaGlsZSB0aGUgYGluZXRwZWVyX2FkZHJgIHVuaW9uIGNvbnRhaW5zIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBmb3IgSVB2NCBhZGRyZXNzZXMsIHRoaXMgcGFkZGluZyBpcyBuZXZlciByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBgaW5ldF9wZWVyYCBzdHJ1Y3R1cmUgaXMgcHVyZWx5IGFuIGludGVybmFsIGtlcm5lbCB0cmFja2luZyBzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBoYXNoLWJhc2VkIGxvb2t1cCBmb3IgaW5ldF9wZWVyIHN0cnVjdHVyZXMsIG1vZGlmeWluZyBpbmV0X2dldHBlZXIgdG8gdXNlIHNpcGhhc2ggZm9yIHRyZWUgaW5zZXJ0aW9uIGFuZCBsb29rdXAuIEl0IGFsc28gY2hhbmdlcyBpbmV0X3BlZXJfeHJsaW1fYWxsb3cgdG8gcmV0dXJuIGZhbHNlIHdoZW4gcGVlciBpcyBOVUxMLCBhbmQgbGltaXRzIHRoZSBhbGxvY2F0aW9uIG9mIG5ldyBwZWVycyBiYXNlZCBvbiBpbmV0X3BlZXJfdGhyZXNob2xkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIElQdjQvSVB2NiBuZXR3b3JraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgSUNNUCByYXRlIGxpbWl0aW5nIGFuZCBJUCBmcmFnbWVudGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYWNmN2Y0MDAyMTNlMTExMWU4NmZhMjQ0NWY2MWZhNzY0NzQ0ODUyMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDIxOjMzOjA1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmggYi9pbmNsdWRlL25ldC9pbmV0cGVlci5oXG5pbmRleCBmNDc1NzU3ZGFhZmJhLi40MTRlOWFkZjRjNTExIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaFxuQEAgLTM1LDYgJiM0MzszNSw3IEBAIHN0cnVjdCBpbmV0cGVlcl9hZGRyIHtcbiBcbiBzdHJ1Y3QgaW5ldF9wZWVyIHtcbiBcdHN0cnVjdCByYl9ub2RlXHRcdHJiX25vZGU7XG4mIzQzO1x0dTY0XHRcdFx0aGFzaDtcbiBcdHN0cnVjdCBpbmV0cGVlcl9hZGRyXHRkYWRkcjtcbiBcbiBcdHUzMlx0XHRcdG1ldHJpY3NbUlRBWF9NQVhdO1xuQEAgLTEyNSw2ICYjNDM7MTI2LDkgQEAgc3RhdGljIGlubGluZSBpbnQgaW5ldHBlZXJfYWRkcl9jbXAoY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmEsXG4ge1xuIFx0aW50IGksIG47XG4gXG4mIzQzO1x0aWYgKGEtXHUwMDNlZmFtaWx5ICE9IGItXHUwMDNlZmFtaWx5KVxuJiM0MztcdFx0cmV0dXJuIGEtXHUwMDNlZmFtaWx5IFx1MDAzYyBiLVx1MDAzZWZhbWlseSA/IC0xIDogMTtcbiYjNDM7XG4gXHRpZiAoYS1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVClcbiBcdFx0biA9IHNpemVvZihhLVx1MDAzZWE0KSAvIHNpemVvZih1MzIpO1xuIFx0ZWxzZVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRwZWVyLmMgYi9uZXQvaXB2NC9pbmV0cGVlci5jXG5pbmRleCA1Yjk1N2E4MzFlN2MzLi45Njg3MWY1MjAxMGYzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaW5ldHBlZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaW5ldHBlZXIuY1xuQEAgLTIxLDYgJiM0MzsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldHBlZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zZWN1cmVfc2VxLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2lwaGFzaC5oXHUwMDNlXG4gXG4gLypcbiAgKiAgVGhlb3J5IG9mIG9wZXJhdGlvbnMuXG5AQCAtNTIsNiAmIzQzOzUzLDMyIEBAXG4gICovXG4gXG4gc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwZWVyX2NhY2hlcCBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO3N0YXRpYyBzaXBoYXNoX2FsaWduZWRfa2V5X3QgaW5ldHBlZXJfaGFzaF9rZXkgX19yZWFkX21vc3RseTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB1NjQgaW5ldHBlZXJfYWRkcl9oYXNoKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGEtXHUwMDNlZmFtaWx5ID09IEFGX0lORVQpXG4mIzQzO1x0XHRyZXR1cm4gc2lwaGFzaF8ydTMyKChfX2ZvcmNlIHUzMilhLVx1MDAzZWE0LmFkZHIsIGEtXHUwMDNlYTQudmlmLFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZpbmV0cGVlcl9oYXNoX2tleSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzaXBoYXNoXzR1MzIoKF9fZm9yY2UgdTMyKWEtXHUwMDNlYTYuczZfYWRkcjMyWzBdLFxuJiM0MztcdFx0XHQgICAgKF9fZm9yY2UgdTMyKWEtXHUwMDNlYTYuczZfYWRkcjMyWzFdLFxuJiM0MztcdFx0XHQgICAgKF9fZm9yY2UgdTMyKWEtXHUwMDNlYTYuczZfYWRkcjMyWzJdLFxuJiM0MztcdFx0XHQgICAgKF9fZm9yY2UgdTMyKWEtXHUwMDNlYTYuczZfYWRkcjMyWzNdLFxuJiM0MztcdFx0XHQgICAgXHUwMDI2aW5ldHBlZXJfaGFzaF9rZXkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGluZXRwZWVyX2VudHJ5X2NtcCh1NjQgZGhhc2gsXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcbiYjNDM7XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRfcGVlciAqcClcbiYjNDM7e1xuJiM0MztcdGlmIChkaGFzaCBcdTAwM2MgcC1cdTAwM2VoYXNoKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdGlmIChkaGFzaCBcdTAwM2UgcC1cdTAwM2VoYXNoKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpbmV0cGVlcl9hZGRyX2NtcChkYWRkciwgXHUwMDI2cC1cdTAwM2VkYWRkcik7XG4mIzQzO31cbiBcbiB2b2lkIGluZXRfcGVlcl9iYXNlX2luaXQoc3RydWN0IGluZXRfcGVlcl9iYXNlICpicClcbiB7XG5AQCAtNzMsNiAmIzQzOzEwMCw4IEBAIHZvaWQgX19pbml0IGluZXRfaW5pdHBlZXJzKHZvaWQpXG4ge1xuIFx0dTY0IG5yX2VudHJpZXM7XG4gXG4mIzQzO1x0Z2V0X3JhbmRvbV9ieXRlcyhcdTAwMjZpbmV0cGVlcl9oYXNoX2tleSwgc2l6ZW9mKGluZXRwZWVyX2hhc2hfa2V5KSk7XG4mIzQzO1xuIFx0IC8qIDElIG9mIHBoeXNpY2FsIG1lbW9yeSAqL1xuIFx0bnJfZW50cmllcyA9IGRpdjY0X3VsKCh1NjQpdG90YWxyYW1fcGFnZXMoKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiBcdFx0XHQgICAgICAxMDAgKiBMMV9DQUNIRV9BTElHTihzaXplb2Yoc3RydWN0IGluZXRfcGVlcikpKTtcbkBAIC04NCw2ICYjNDM7MTEzLDcgQEAgdm9pZCBfX2luaXQgaW5ldF9pbml0cGVlcnModm9pZClcbiBcbiAvKiBDYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgb3IgYmFzZS1cdTAwM2Vsb2NrIGhlbGQgKi9cbiBzdGF0aWMgc3RydWN0IGluZXRfcGVlciAqbG9va3VwKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcbiYjNDM7XHRcdFx0XHR1NjQgZGhhc2gsXG4gXHRcdFx0XHRzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4gXHRcdFx0XHR1bnNpZ25lZCBpbnQgc2VxLFxuIFx0XHRcdFx0c3RydWN0IGluZXRfcGVlciAqZ2Nfc3RhY2tbXSxcbkBAIC0xMDUsNyAmIzQzOzEzNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5ldF9wZWVyICpsb29rdXAoY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHRwYXJlbnQgPSBuZXh0O1xuIFx0XHRwID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgaW5ldF9wZWVyLCByYl9ub2RlKTtcbi1cdFx0Y21wID0gaW5ldHBlZXJfYWRkcl9jbXAoZGFkZHIsIFx1MDAyNnAtXHUwMDNlZGFkZHIpO1xuJiM0MztcdFx0Y21wID0gaW5ldHBlZXJfZW50cnlfY21wKGRoYXNoLCBkYWRkciwgcCk7XG4gXHRcdGlmIChjbXAgPT0gMCkge1xuIFx0XHRcdG5vdyA9IGppZmZpZXM7XG4gXHRcdFx0aWYgKFJFQURfT05DRShwLVx1MDAzZWR0aW1lKSAhPSBub3cpXG5AQCAtMTcwLDYgJiM0MzsyMDAsNyBAQCBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIpXG4ge1xuIFx0c3RydWN0IGluZXRfcGVlciAqcCwgKmdjX3N0YWNrW1BFRVJfTUFYX0dDXTtcbiYjNDM7XHR1NjQgZGhhc2ggPSBpbmV0cGVlcl9hZGRyX2hhc2goZGFkZHIpO1xuIFx0c3RydWN0IHJiX25vZGUgKipwcCwgKnBhcmVudDtcbiBcdHVuc2lnbmVkIGludCBnY19jbnQsIHNlcTtcbiBcbkBAIC0xNzcsNyAmIzQzOzIwOCw3IEBAIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4gXHQgKiBCZWNhdXNlIG9mIGEgY29uY3VycmVudCB3cml0ZXIsIHdlIG1pZ2h0IG5vdCBmaW5kIGFuIGV4aXN0aW5nIGVudHJ5LlxuIFx0ICovXG4gXHRzZXEgPSByZWFkX3NlcWJlZ2luKFx1MDAyNmJhc2UtXHUwMDNlbG9jayk7XG4tXHRwID0gbG9va3VwKGRhZGRyLCBiYXNlLCBzZXEsIE5VTEwsIFx1MDAyNmdjX2NudCwgXHUwMDI2cGFyZW50LCBcdTAwMjZwcCk7XG4mIzQzO1x0cCA9IGxvb2t1cChkYWRkciwgZGhhc2gsIGJhc2UsIHNlcSwgTlVMTCwgXHUwMDI2Z2NfY250LCBcdTAwMjZwYXJlbnQsIFx1MDAyNnBwKTtcbiBcbiBcdC8qIE1ha2Ugc3VyZSB0cmVlIHdhcyBub3QgbW9kaWZpZWQgZHVyaW5nIG91ciBsb29rdXAuICovXG4gXHRpZiAocCBcdTAwMjZcdTAwMjYgIXJlYWRfc2VxcmV0cnkoXHUwMDI2YmFzZS1cdTAwM2Vsb2NrLCBzZXEpKVxuQEAgLTE5MCwxMSAmIzQzOzIyMSwxMyBAQCBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuIFx0d3JpdGVfc2VxbG9ja19iaChcdTAwMjZiYXNlLVx1MDAzZWxvY2spO1xuIFxuIFx0Z2NfY250ID0gMDtcbi1cdHAgPSBsb29rdXAoZGFkZHIsIGJhc2UsIHNlcSwgZ2Nfc3RhY2ssIFx1MDAyNmdjX2NudCwgXHUwMDI2cGFyZW50LCBcdTAwMjZwcCk7XG4mIzQzO1x0cCA9IGxvb2t1cChkYWRkciwgZGhhc2gsIGJhc2UsIHNlcSwgZ2Nfc3RhY2ssIFx1MDAyNmdjX2NudCwgXHUwMDI2cGFyZW50LCBcdTAwMjZwcCk7XG4gXHRpZiAoIXApIHtcbi1cdFx0cCA9IGttZW1fY2FjaGVfYWxsb2MocGVlcl9jYWNoZXAsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0aWYgKCh1NjQpYmFzZS1cdTAwM2V0b3RhbCBcdTAwM2MgMlVMTCAqIFJFQURfT05DRShpbmV0X3BlZXJfdGhyZXNob2xkKSlcbiYjNDM7XHRcdFx0cCA9IGttZW1fY2FjaGVfYWxsb2MocGVlcl9jYWNoZXAsIEdGUF9BVE9NSUMpO1xuIFx0XHRpZiAocCkge1xuIFx0XHRcdHAtXHUwMDNlZGFkZHIgPSAqZGFkZHI7XG4mIzQzO1x0XHRcdHAtXHUwMDNlaGFzaCA9IGRoYXNoO1xuIFx0XHRcdHAtXHUwMDNlZHRpbWUgPSAoX191MzIpamlmZmllcztcbiBcdFx0XHRyZWZjb3VudF9zZXQoXHUwMDI2cC1cdTAwM2VyZWZjbnQsIDEpO1xuIFx0XHRcdGF0b21pY19zZXQoXHUwMDI2cC1cdTAwM2VyaWQsIDApO1xuQEAgLTI0OCw3ICYjNDM7MjgxLDcgQEAgYm9vbCBpbmV0X3BlZXJfeHJsaW1fYWxsb3coc3RydWN0IGluZXRfcGVlciAqcGVlciwgaW50IHRpbWVvdXQpXG4gXHRib29sIHJjID0gZmFsc2U7XG4gXG4gXHRpZiAoIXBlZXIpXG4tXHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0dG9rZW4gPSBvdG9rZW4gPSBSRUFEX09OQ0UocGVlci1cdTAwM2VyYXRlX3Rva2Vucyk7XG4gXHRub3cgPSBqaWZmaWVzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpbmV0X2dldHBlZXImIzM0OywKICAgICYjMzQ7aW5ldF9wZWVyX3hybGltX2FsbG93JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBoYXNoLWJhc2VkIGxvb2t1cCBmb3IgaW5ldF9wZWVyIHN0cnVjdHVyZXMsIG1vZGlmeWluZyBpbmV0X2dldHBlZXIgdG8gdXNlIHNpcGhhc2ggZm9yIHRyZWUgaW5zZXJ0aW9uIGFuZCBsb29rdXAuIEl0IGFsc28gY2hhbmdlcyBpbmV0X3BlZXJfeHJsaW1fYWxsb3cgdG8gcmV0dXJuIGZhbHNlIHdoZW4gcGVlciBpcyBOVUxMLCBhbmQgbGltaXRzIHRoZSBhbGxvY2F0aW9uIG9mIG5ldyBwZWVycyBiYXNlZCBvbiBpbmV0X3BlZXJfdGhyZXNob2xkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIElQdjQvSVB2NiBuZXR3b3JraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgSUNNUCByYXRlIGxpbWl0aW5nIGFuZCBJUCBmcmFnbWVudGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWNmN2Y0MDAyMTNlMTExMWU4NmZhMjQ0NWY2MWZhNzY0NzQ0ODUyMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDIxOjMzOjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaCBiL2luY2x1ZGUvbmV0L2luZXRwZWVyLmgKaW5kZXggZjQ3NTc1N2RhYWZiYS4uNDE0ZTlhZGY0YzUxMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pbmV0cGVlci5oCkBAIC0zNSw2ICYjNDM7MzUsNyBAQCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciB7CiAKIHN0cnVjdCBpbmV0X3BlZXIgewogCXN0cnVjdCByYl9ub2RlCQlyYl9ub2RlOwomIzQzOwl1NjQJCQloYXNoOwogCXN0cnVjdCBpbmV0cGVlcl9hZGRyCWRhZGRyOwogCiAJdTMyCQkJbWV0cmljc1tSVEFYX01BWF07CkBAIC0xMjUsNiAmIzQzOzEyNiw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGluZXRwZWVyX2FkZHJfY21wKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphLAogewogCWludCBpLCBuOwogCiYjNDM7CWlmIChhLSZndDtmYW1pbHkgIT0gYi0mZ3Q7ZmFtaWx5KQomIzQzOwkJcmV0dXJuIGEtJmd0O2ZhbWlseSAmbHQ7IGItJmd0O2ZhbWlseSA/IC0xIDogMTsKJiM0MzsKIAlpZiAoYS0mZ3Q7ZmFtaWx5ID09IEFGX0lORVQpCiAJCW4gPSBzaXplb2YoYS0mZ3Q7YTQpIC8gc2l6ZW9mKHUzMik7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldHBlZXIuYyBiL25ldC9pcHY0L2luZXRwZWVyLmMKaW5kZXggNWI5NTdhODMxZTdjMy4uOTY4NzFmNTIwMTBmMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldHBlZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pbmV0cGVlci5jCkBAIC0yMSw2ICYjNDM7MjEsNyBAQAogI2luY2x1ZGUgJmx0O25ldC9pcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pbmV0cGVlci5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zZWN1cmVfc2VxLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NpcGhhc2guaCZndDsKIAogLyoKICAqICBUaGVvcnkgb2Ygb3BlcmF0aW9ucy4KQEAgLTUyLDYgJiM0Mzs1MywzMiBAQAogICovCiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGVlcl9jYWNoZXAgX19yb19hZnRlcl9pbml0OwomIzQzO3N0YXRpYyBzaXBoYXNoX2FsaWduZWRfa2V5X3QgaW5ldHBlZXJfaGFzaF9rZXkgX19yZWFkX21vc3RseTsKJiM0MzsKJiM0MztzdGF0aWMgdTY0IGluZXRwZWVyX2FkZHJfaGFzaChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSkKJiM0Mzt7CiYjNDM7CWlmIChhLSZndDtmYW1pbHkgPT0gQUZfSU5FVCkKJiM0MzsJCXJldHVybiBzaXBoYXNoXzJ1MzIoKF9fZm9yY2UgdTMyKWEtJmd0O2E0LmFkZHIsIGEtJmd0O2E0LnZpZiwKJiM0MzsJCQkJICAgICZhbXA7aW5ldHBlZXJfaGFzaF9rZXkpOwomIzQzOwomIzQzOwlyZXR1cm4gc2lwaGFzaF80dTMyKChfX2ZvcmNlIHUzMilhLSZndDthNi5zNl9hZGRyMzJbMF0sCiYjNDM7CQkJICAgIChfX2ZvcmNlIHUzMilhLSZndDthNi5zNl9hZGRyMzJbMV0sCiYjNDM7CQkJICAgIChfX2ZvcmNlIHUzMilhLSZndDthNi5zNl9hZGRyMzJbMl0sCiYjNDM7CQkJICAgIChfX2ZvcmNlIHUzMilhLSZndDthNi5zNl9hZGRyMzJbM10sCiYjNDM7CQkJICAgICZhbXA7aW5ldHBlZXJfaGFzaF9rZXkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGluZXRwZWVyX2VudHJ5X2NtcCh1NjQgZGhhc2gsCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLAomIzQzOwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbmV0X3BlZXIgKnApCiYjNDM7ewomIzQzOwlpZiAoZGhhc2ggJmx0OyBwLSZndDtoYXNoKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlpZiAoZGhhc2ggJmd0OyBwLSZndDtoYXNoKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CXJldHVybiBpbmV0cGVlcl9hZGRyX2NtcChkYWRkciwgJmFtcDtwLSZndDtkYWRkcik7CiYjNDM7fQogCiB2b2lkIGluZXRfcGVlcl9iYXNlX2luaXQoc3RydWN0IGluZXRfcGVlcl9iYXNlICpicCkKIHsKQEAgLTczLDYgJiM0MzsxMDAsOCBAQCB2b2lkIF9faW5pdCBpbmV0X2luaXRwZWVycyh2b2lkKQogewogCXU2NCBucl9lbnRyaWVzOwogCiYjNDM7CWdldF9yYW5kb21fYnl0ZXMoJmFtcDtpbmV0cGVlcl9oYXNoX2tleSwgc2l6ZW9mKGluZXRwZWVyX2hhc2hfa2V5KSk7CiYjNDM7CiAJIC8qIDElIG9mIHBoeXNpY2FsIG1lbW9yeSAqLwogCW5yX2VudHJpZXMgPSBkaXY2NF91bCgodTY0KXRvdGFscmFtX3BhZ2VzKCkgJmx0OyZsdDsgUEFHRV9TSElGVCwKIAkJCSAgICAgIDEwMCAqIEwxX0NBQ0hFX0FMSUdOKHNpemVvZihzdHJ1Y3QgaW5ldF9wZWVyKSkpOwpAQCAtODQsNiAmIzQzOzExMyw3IEBAIHZvaWQgX19pbml0IGluZXRfaW5pdHBlZXJzKHZvaWQpCiAKIC8qIENhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSBvciBiYXNlLSZndDtsb2NrIGhlbGQgKi8KIHN0YXRpYyBzdHJ1Y3QgaW5ldF9wZWVyICpsb29rdXAoY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLAomIzQzOwkJCQl1NjQgZGhhc2gsCiAJCQkJc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLAogCQkJCXVuc2lnbmVkIGludCBzZXEsCiAJCQkJc3RydWN0IGluZXRfcGVlciAqZ2Nfc3RhY2tbXSwKQEAgLTEwNSw3ICYjNDM7MTM1LDcgQEAgc3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsCiAJCQlicmVhazsKIAkJcGFyZW50ID0gbmV4dDsKIAkJcCA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGluZXRfcGVlciwgcmJfbm9kZSk7Ci0JCWNtcCA9IGluZXRwZWVyX2FkZHJfY21wKGRhZGRyLCAmYW1wO3AtJmd0O2RhZGRyKTsKJiM0MzsJCWNtcCA9IGluZXRwZWVyX2VudHJ5X2NtcChkaGFzaCwgZGFkZHIsIHApOwogCQlpZiAoY21wID09IDApIHsKIAkJCW5vdyA9IGppZmZpZXM7CiAJCQlpZiAoUkVBRF9PTkNFKHAtJmd0O2R0aW1lKSAhPSBub3cpCkBAIC0xNzAsNiAmIzQzOzIwMCw3IEBAIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyKQogewogCXN0cnVjdCBpbmV0X3BlZXIgKnAsICpnY19zdGFja1tQRUVSX01BWF9HQ107CiYjNDM7CXU2NCBkaGFzaCA9IGluZXRwZWVyX2FkZHJfaGFzaChkYWRkcik7CiAJc3RydWN0IHJiX25vZGUgKipwcCwgKnBhcmVudDsKIAl1bnNpZ25lZCBpbnQgZ2NfY250LCBzZXE7CiAKQEAgLTE3Nyw3ICYjNDM7MjA4LDcgQEAgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSwKIAkgKiBCZWNhdXNlIG9mIGEgY29uY3VycmVudCB3cml0ZXIsIHdlIG1pZ2h0IG5vdCBmaW5kIGFuIGV4aXN0aW5nIGVudHJ5LgogCSAqLwogCXNlcSA9IHJlYWRfc2VxYmVnaW4oJmFtcDtiYXNlLSZndDtsb2NrKTsKLQlwID0gbG9va3VwKGRhZGRyLCBiYXNlLCBzZXEsIE5VTEwsICZhbXA7Z2NfY250LCAmYW1wO3BhcmVudCwgJmFtcDtwcCk7CiYjNDM7CXAgPSBsb29rdXAoZGFkZHIsIGRoYXNoLCBiYXNlLCBzZXEsIE5VTEwsICZhbXA7Z2NfY250LCAmYW1wO3BhcmVudCwgJmFtcDtwcCk7CiAKIAkvKiBNYWtlIHN1cmUgdHJlZSB3YXMgbm90IG1vZGlmaWVkIGR1cmluZyBvdXIgbG9va3VwLiAqLwogCWlmIChwICZhbXA7JmFtcDsgIXJlYWRfc2VxcmV0cnkoJmFtcDtiYXNlLSZndDtsb2NrLCBzZXEpKQpAQCAtMTkwLDExICYjNDM7MjIxLDEzIEBAIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsCiAJd3JpdGVfc2VxbG9ja19iaCgmYW1wO2Jhc2UtJmd0O2xvY2spOwogCiAJZ2NfY250ID0gMDsKLQlwID0gbG9va3VwKGRhZGRyLCBiYXNlLCBzZXEsIGdjX3N0YWNrLCAmYW1wO2djX2NudCwgJmFtcDtwYXJlbnQsICZhbXA7cHApOwomIzQzOwlwID0gbG9va3VwKGRhZGRyLCBkaGFzaCwgYmFzZSwgc2VxLCBnY19zdGFjaywgJmFtcDtnY19jbnQsICZhbXA7cGFyZW50LCAmYW1wO3BwKTsKIAlpZiAoIXApIHsKLQkJcCA9IGttZW1fY2FjaGVfYWxsb2MocGVlcl9jYWNoZXAsIEdGUF9BVE9NSUMpOwomIzQzOwkJaWYgKCh1NjQpYmFzZS0mZ3Q7dG90YWwgJmx0OyAyVUxMICogUkVBRF9PTkNFKGluZXRfcGVlcl90aHJlc2hvbGQpKQomIzQzOwkJCXAgPSBrbWVtX2NhY2hlX2FsbG9jKHBlZXJfY2FjaGVwLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHApIHsKIAkJCXAtJmd0O2RhZGRyID0gKmRhZGRyOwomIzQzOwkJCXAtJmd0O2hhc2ggPSBkaGFzaDsKIAkJCXAtJmd0O2R0aW1lID0gKF9fdTMyKWppZmZpZXM7CiAJCQlyZWZjb3VudF9zZXQoJmFtcDtwLSZndDtyZWZjbnQsIDEpOwogCQkJYXRvbWljX3NldCgmYW1wO3AtJmd0O3JpZCwgMCk7CkBAIC0yNDgsNyAmIzQzOzI4MSw3IEBAIGJvb2wgaW5ldF9wZWVyX3hybGltX2FsbG93KHN0cnVjdCBpbmV0X3BlZXIgKnBlZXIsIGludCB0aW1lb3V0KQogCWJvb2wgcmMgPSBmYWxzZTsKIAogCWlmICghcGVlcikKLQkJcmV0dXJuIHRydWU7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAKIAl0b2tlbiA9IG90b2tlbiA9IFJFQURfT05DRShwZWVyLSZndDtyYXRlX3Rva2Vucyk7CiAJbm93ID0gamlmZmllczsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzMAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEluZXRwZWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgbmV0L2lwdjQvaW5ldHBlZXIuY2AgYW5kIGBpbmNsdWRlL25ldC9pbmV0cGVlci5oYC4gU2VlbXMgbGlrZSB0aGV5JiMzOTtyZSBhZGRpbmcgYSBgaGFzaGAgZmllbGQgdG8gdGhlIGBzdHJ1Y3QgaW5ldF9wZWVyYCBhbmQgdXNpbmcgYHNpcGhhc2hgIHRvIGdlbmVyYXRlIGEgaGFzaCBvZiB0aGUgSVAgYWRkcmVzcywgc3RvcmluZyBpdCBpbiB0aGF0IGZpZWxkLiBUaGF04oCZcyBpbnRlcmVzdGluZy4gQSBoYXNoLWJhc2VkIGxvb2t1cCBjb3VsZCBzcGVlZCB0aGluZ3MgdXAgY29uc2lkZXJhYmx5LCBkZXBlbmRpbmcgb24gaG93IHRoZXnigJl2ZSBpbXBsZW1lbnRlZCB0aGUgY29sbGlzaW9uIGhhbmRsaW5nLiBUaGV5JiMzOTt2ZSBhbHNvIG1vZGlmaWVkIGBpbmV0cGVlcl9hZGRyX2NtcGAgdG8gY2hlY2sgdGhlIGZhbWlseSBmaXJzdCwgd2hpY2ggaXMgYSBnb29kIG9wdGltaXphdGlvbi4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiBob3cgYGluZXRfZ2V0cGVlcmAgaGFuZGxlcyBsb29rdXBzIGFuZCBpbnNlcnRpb24sIGxldmVyYWdpbmcgdGhpcyBuZXcgaGFzaCBmaWVsZC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24uIFRoZSBvdGhlciBtb2RpZmljYXRpb24sIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgLCBqdXN0IHNlZW1zIHRvIHJldHVybiBgZmFsc2VgIGlmIHRoZSBwZWVyIGlzIG51bGwsIHdoaWNoLCBob25lc3RseSwgc2VlbXMgbGlrZSBhIGJ1ZyBmaXgg4oCTIGJldHRlciBzYWZlIHRoYW4gc29ycnksIGFuZCBpdCBzaG91bGQgcHJldmVudCBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZS4KCkxldCYjMzk7cyBzZWXigKYgdGhleSYjMzk7dmUgYWxzbyB0b3VjaGVkIGBpbmV0cGVlcl9hZGRyX2hhc2hgLCBgaW5ldHBlZXJfZW50cnlfY21wYCwgYGluZXRfaW5pdHBlZXJzYCwgYW5kIHRoZSBgbG9va3VwYCBmdW5jdGlvbi4gU28gaXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgYWxsIHN0YXRpYyBvciBpbmxpbmUgaGVscGVyIGZ1bmN0aW9ucywgd2hpY2ggSSBuZWVkIHRvIGV4YW1pbmUgZm9yIHJlYWNoYWJpbGl0eS4KCk9rYXksIGxldCYjMzk7cyBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGNhbGxzIHRvIGBpbmV0X2dldHBlZXJgIGFuZCBgaW5ldF9wZWVyX3hybGltX2FsbG93YCB0byBnZXQgYSBzZW5zZSBvZiB0aGUgY29udGV4dCBhbmQgaW1wYWN0LiBUaG9zZSBhcmUgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucywgc28gdGhleSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0aGF0IEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfZ2V0cGVlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pbmV0cGVlci5oPTkzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGluNl9hZGRyICppbmV0cGVlcl9nZXRfYWRkcl92NihzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIpXG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC05OC0vKiBjYW4gYmUgY2FsbGVkIHdpdGggb3Igd2l0aG91dCBsb2NhbCBCSCBiZWluZyBkaXNhYmxlZCAqL1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDo5OTpzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDAtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcik7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwMS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTAyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTAzLVx0XHRcdFx0XHRcdF9fYmUzMiB2NGRhZGRyLFxuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTEwLVx0ZGFkZHIuZmFtaWx5ID0gQUZfSU5FVDtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTExOlx0cmV0dXJuIGluZXRfZ2V0cGVlcihiYXNlLCBcdTAwMjZkYWRkcik7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTExMi19XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTExMy1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTE0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y2KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTE1LVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdjZkYWRkcilcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEyMC1cdGRhZGRyLmZhbWlseSA9IEFGX0lORVQ2O1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMjE6XHRyZXR1cm4gaW5ldF9nZXRwZWVyKGJhc2UsIFx1MDAyNmRhZGRyKTtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTIyLX1cbi0tXG5uZXQvaXB2NC9pY21wLmM9MzExPXN0YXRpYyBib29sIGljbXB2NF94cmxpbV9hbGxvdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydGFibGUgKnJ0LFxuLS1cbm5ldC9pcHY0L2ljbXAuYy0zMzMtXG5uZXQvaXB2NC9pY21wLmM6MzM0Olx0cGVlciA9IGluZXRfZ2V0cGVlcl92NChuZXQtXHUwMDNlaXB2NC5wZWVycywgZmw0LVx1MDAzZWRhZGRyLFxubmV0L2lwdjQvaWNtcC5jLTMzNS1cdFx0XHQgICAgICAgbDNtZGV2X21hc3Rlcl9pZmluZGV4X3JjdShkZXYpKTtcbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jPTE2Mj1zdGF0aWMgdm9pZCBpbmV0X3BlZXJfZ2Moc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmMtMTk4LS8qIE11c3QgYmUgY2FsbGVkIHVuZGVyIFJDVSA6IE5vIHJlZmNvdW50IGNoYW5nZSBpcyBkb25lIGhlcmUuICovXG5uZXQvaXB2NC9pbmV0cGVlci5jOjE5OTpzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxubmV0L2lwdjQvaW5ldHBlZXIuYy0yMDAtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcilcbi0tXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jPTgzPXN0YXRpYyB2b2lkIGlwNF9mcmFnX2luaXQoc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqcSwgY29uc3Qgdm9pZCAqYSlcbi0tXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTkzLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jOjk0Olx0XHRwID0gaW5ldF9nZXRwZWVyX3Y0KG5ldC1cdTAwM2VpcHY0LnBlZXJzLCBrZXktXHUwMDNlc2FkZHIsIGtleS1cdTAwM2V2aWYpO1xubmV0L2lwdjQvaXBfZnJhZ21lbnQuYy05NS1cdFx0aWYgKHAgXHUwMDI2XHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2cC1cdTAwM2VyZWZjbnQpKVxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9OTAyPXZvaWQgaXBfcnRfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtOTIwLVx0bmV0ID0gZGV2X25ldChydC1cdTAwM2Vkc3QuZGV2KTtcbm5ldC9pcHY0L3JvdXRlLmM6OTIxOlx0cGVlciA9IGluZXRfZ2V0cGVlcl92NChuZXQtXHUwMDNlaXB2NC5wZWVycywgaXBfaGRyKHNrYiktXHUwMDNlc2FkZHIsIHZpZik7XG5uZXQvaXB2NC9yb3V0ZS5jLTkyMi1cdGlmICghcGVlcikge1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9OTY1PXN0YXRpYyBpbnQgaXBfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTEwMjItXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2NC9yb3V0ZS5jOjEwMjM6XHRwZWVyID0gaW5ldF9nZXRwZWVyX3Y0KG5ldC1cdTAwM2VpcHY0LnBlZXJzLCBpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbm5ldC9pcHY0L3JvdXRlLmMtMTAyNC1cdFx0XHQgICAgICAgbDNtZGV2X21hc3Rlcl9pZmluZGV4X3JjdShza2ItXHUwMDNlZGV2KSk7XG4tLVxubmV0L2lwdjYvaWNtcC5jPTE5NT1zdGF0aWMgYm9vbCBpY21wdjZfeHJsaW1fYWxsb3coc3RydWN0IHNvY2sgKnNrLCB1OCB0eXBlLFxuLS1cbm5ldC9pcHY2L2ljbXAuYy0yMjUtXHRcdH0gZWxzZSB7XG5uZXQvaXB2Ni9pY21wLmM6MjI2Olx0XHRcdHBlZXIgPSBpbmV0X2dldHBlZXJfdjYobmV0LVx1MDAzZWlwdjYucGVlcnMsIFx1MDAyNmZsNi1cdTAwM2VkYWRkcik7XG5uZXQvaXB2Ni9pY21wLmMtMjI3LVx0XHRcdHJlcyA9IGluZXRfcGVlcl94cmxpbV9hbGxvdyhwZWVyLCB0bW8pO1xuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz01MTk9aW50IGlwNl9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTYzOC1cdFx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jOjYzOTpcdFx0cGVlciA9IGluZXRfZ2V0cGVlcl92NihuZXQtXHUwMDNlaXB2Ni5wZWVycywgXHUwMDI2aGRyLVx1MDAzZWRhZGRyKTtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy02NDAtXG4tLVxubmV0L2lwdjYvbmRpc2MuYz0xNjU1PXZvaWQgbmRpc2Nfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnRhcmdldClcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTE3MDgtXG5uZXQvaXB2Ni9uZGlzYy5jOjE3MDk6XHRwZWVyID0gaW5ldF9nZXRwZWVyX3Y2KG5ldC1cdTAwM2VpcHY2LnBlZXJzLCBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyKTtcbm5ldC9pcHY2L25kaXNjLmMtMTcxMC1cdGlmICghcGVlcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzEzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgaW5ldF9nZXRwZWVyYCBQYXRjaCoqCgpPa2F5LCBzbyBgaW5ldF9nZXRwZWVyYC4uLiB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLiBJdCYjMzk7cyB1c2VkIGV2ZXJ5d2hlcmUg4oCTIElDTVAgcmF0ZSBsaW1pdGluZywgSVAgZnJhZ21lbnRhdGlvbiwgaGFuZGxpbmcgcm91dGluZyByZWRpcmVjdHMsIHRoZSB3aG9sZSBzaGViYW5nLiBEZWZpbml0ZWx5IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcsIGdpdmVuIGl0cyByZWFjaC4gQW5kIHRoZSBwYXRjaD8gSXQmIzM5O3MgY2hhbmdpbmcgYGluZXRfcGVlcl94cmxpbV9hbGxvd2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMuCgpXYWl0LCB0aGUgcGF0Y2ggaXMgbWFraW5nIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIHJldHVybiBgZmFsc2VgIGlmIHRoZSBgcGVlcmAgaXMgTlVMTC4gVGhhdCYjMzk7cy4uLiBpbnRlcmVzdGluZy4gQW5kIGRlZmluaXRlbHkgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBlc3BlY2lhbGx5IHdoZW4geW91IGNvbnNpZGVyIGl0IGhhcyBpbXBhY3Qgb24gdGhpbmdzIGxpa2UgSUNNUCByYXRlIGxpbWl0aW5nLiBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBmdXJ0aGVyLiBCZWZvcmUgaXQgcmV0dXJuZWQgYHRydWVgIGlmIGBwZWVyYCB3YXMgYE5VTExgLiBUaGF0IGNoYW5nZSB3YXJyYW50cyBzY3J1dGlueS4KCk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGBpbmV0X2dldHBlZXJgIGNhbiByZXR1cm4gTlVMTCBub3cgdW5kZXIgdGhlIG5ldyBsb2dpYywgc3BlY2lmaWNhbGx5IGlmIHRoZSBwZWVyIHRocmVzaG9sZCBpcyBleGNlZWRlZCwgdGhhdCYjMzk7cyB3aGF0IHRoYXQgY29kZSBpcyBpbXBseWluZy4KClRoZSBwYXRjaCBpdHNlbGYgc2F5czoKCmBgYGMKIAlnY19jbnQgPSAwOwotCXAgPSBsb29rdXAoZGFkZHIsIGJhc2UsIHNlcSwgZ2Nfc3RhY2ssICZhbXA7Z2NfY250LCAmYW1wO3BhcmVudCwgJmFtcDtwcCk7CiYjNDM7CXAgPSBsb29rdXAoZGFkZHIsIGRoYXNoLCBiYXNlLCBzZXEsIGdjX3N0YWNrLCAmYW1wO2djX2NudCwgJmFtcDtwYXJlbnQsICZhbXA7cHApOwogCWlmICghcCkgewotCQlwID0ga21lbV9jYWNoZV9hbGxvYyhwZWVyX2NhY2hlcCwgR0ZQX0FUT01JQyk7CiYjNDM7CQlpZiAoKHU2NCliYXNlLSZndDt0b3RhbCAmbHQ7IDJVTEwgKiBSRUFEX09OQ0UoaW5ldF9wZWVyX3RocmVzaG9sZCkpCiYjNDM7CQkJcCA9IGttZW1fY2FjaGVfYWxsb2MocGVlcl9jYWNoZXAsIEdGUF9BVE9NSUMpOwogCQlpZiAocCkgewpgYGAKClNvIGl0IGxvb2tzIGxpa2UgaWYgdGhlIHRocmVzaG9sZCBpcyBleGNlZWRlZCwgdGhlIGFsbG9jYXRpb24gaXMgc2tpcHBlZCBhbmQgTlVMTCBpcyByZXR1cm5lZCBmcm9tIGBpbmV0X2dldHBlZXJgLgoKUmlnaHQsIGFuZCBgaW5ldF9wZWVyX3hybGltX2FsbG93YCAqbm93KiByZXR1cm5zIGBmYWxzZWAgaWYgYHBlZXJgIGlzIE5VTEwuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIGNvbm5lY3Rpb24gaGVyZS4gSWYgdGhlIHBlZXIgdGhyZXNob2xkIGlzIGV4Y2VlZGVkLCBgaW5ldF9nZXRwZWVyYCByZXR1cm5zIE5VTEwsIGFuZCB0aGVuIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIHJldHVybnMgYGZhbHNlYCwgbWVhbmluZyB0aGUgcGFja2V0IGlzICpub3QgYWxsb3dlZCouIFRoaXMgbWVhbnMgaWYgdGhlIHRocmVzaG9sZCBpcyBleGNlZWRlZCwgSUNNUCByYXRlIGxpbWl0aW5nIHdpbGwgc3RhcnQgKmRyb3BwaW5nKiBwYWNrZXRzIGJlY2F1c2UgaXQmIzM5O3MgaW50ZXJwcmV0ZWQgYXMgJiMzNDtub3QgYWxsb3dlZCYjMzQ7LiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgYmVoYXZpb3IgY2hhbmdlLgoKTGV0JiMzOTtzIGNvbmZpcm0gaG93IGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfcGVlcl94cmxpbV9hbGxvdyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pbmV0cGVlci5oPTE0OT12b2lkIGluZXRfcHV0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyICpwKTtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTUwOmJvb2wgaW5ldF9wZWVyX3hybGltX2FsbG93KHN0cnVjdCBpbmV0X3BlZXIgKnBlZXIsIGludCB0aW1lb3V0KTtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTUxLVxuLS1cbm5ldC9pcHY0L2ljbXAuYz0zMTE9c3RhdGljIGJvb2wgaWNtcHY0X3hybGltX2FsbG93KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHJ0YWJsZSAqcnQsXG4tLVxubmV0L2lwdjQvaWNtcC5jLTMzNS1cdFx0XHQgICAgICAgbDNtZGV2X21hc3Rlcl9pZmluZGV4X3JjdShkZXYpKTtcbm5ldC9pcHY0L2ljbXAuYzozMzY6XHRyYyA9IGluZXRfcGVlcl94cmxpbV9hbGxvdyhwZWVyLCBwZWVyX3RpbWVvdXQpO1xubmV0L2lwdjQvaWNtcC5jLTMzNy1cbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jPTI1ND12b2lkIGluZXRfcHV0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyICpwKVxuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmMtMjc3LSNkZWZpbmUgWFJMSU1fQlVSU1RfRkFDVE9SIDZcbm5ldC9pcHY0L2luZXRwZWVyLmM6Mjc4OmJvb2wgaW5ldF9wZWVyX3hybGltX2FsbG93KHN0cnVjdCBpbmV0X3BlZXIgKnBlZXIsIGludCB0aW1lb3V0KVxubmV0L2lwdjQvaW5ldHBlZXIuYy0yNzkte1xuLS1cbm5ldC9pcHY2L2ljbXAuYz0xOTU9c3RhdGljIGJvb2wgaWNtcHY2X3hybGltX2FsbG93KHN0cnVjdCBzb2NrICpzaywgdTggdHlwZSxcbi0tXG5uZXQvaXB2Ni9pY21wLmMtMjI2LVx0XHRcdHBlZXIgPSBpbmV0X2dldHBlZXJfdjYobmV0LVx1MDAzZWlwdjYucGVlcnMsIFx1MDAyNmZsNi1cdTAwM2VkYWRkcik7XG5uZXQvaXB2Ni9pY21wLmM6MjI3Olx0XHRcdHJlcyA9IGluZXRfcGVlcl94cmxpbV9hbGxvdyhwZWVyLCB0bW8pO1xubmV0L2lwdjYvaWNtcC5jLTIyOC1cdFx0fVxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz01MTk9aW50IGlwNl9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTY0My1cdFx0ICovXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6NjQ0Olx0XHRpZiAocGVlciBcdTAwMjZcdTAwMjYgaW5ldF9wZWVyX3hybGltX2FsbG93KHBlZXIsIDEqSFopKVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTY0NS1cdFx0XHRuZGlzY19zZW5kX3JlZGlyZWN0KHNrYiwgdGFyZ2V0KTtcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTE2NTU9dm9pZCBuZGlzY19zZW5kX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdGFyZ2V0KVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTcxMS1cdFx0Z290byByZWxlYXNlO1xubmV0L2lwdjYvbmRpc2MuYzoxNzEyOlx0cmV0ID0gaW5ldF9wZWVyX3hybGltX2FsbG93KHBlZXIsIDEqSFopO1xubmV0L2lwdjYvbmRpc2MuYy0xNzEzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjQKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUmVjZW50IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSBrZXkgYXJlYXMsIHNwZWNpZmljYWxseSBgaW5ldF9nZXRwZWVyYCBhbmQgYGluZXRfcGVlcl94cmxpbV9hbGxvd2AuIEkgc2VlIGl0JiMzOTtzIGFsc28gYWRkZWQgYGluZXRwZWVyX2FkZHJfaGFzaGAgYW5kIGBpbmV0cGVlcl9lbnRyeV9jbXBgIHRvIGBuZXQvaXB2NC9pbmV0cGVlci5jYCwgYW5kIG1vZGlmaWVkIGBpbmV0cGVlcl9hZGRyX2NtcGAgaW4gYGluY2x1ZGUvbmV0L2luZXRwZWVyLmhgLiBObyBvYnZpb3VzIHJlZCBmbGFncyBmcm9tIGEgY3Vyc29yeSBnbGFuY2UsIHNvIGl0IGxvb2tzIGxpa2UgaXTigJlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIHdvcmsgYXMgaW50ZW5kZWQuCgpUaGUgZnVuY3Rpb25zIHRoYXQgKnJlYWxseSogbmVlZCBhIGNsb3NlciBsb29rLCB0aG91Z2gsIGFyZTogYGluZXRfZ2V0cGVlcmAsIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgLCB0aGVuIGFsc28gYGljbXB2NF94cmxpbV9hbGxvd2AsIGBpY21wdjZfeHJsaW1fYWxsb3dgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIG9uZXMgdG91Y2hpbmcgcm91dGluZywgbGlrZSBgaXA0X2ZyYWdfaW5pdGAsIGBpcF9ydF9zZW5kX3JlZGlyZWN0YCwgYGlwX2Vycm9yYCwgYGlwNl9mb3J3YXJkYCBhbmQgYG5kaXNjX3NlbmRfcmVkaXJlY3RgLgoKV2FpdCwgbGV0JiMzOTtzIHN0ZXAgYmFjayAtIGBpbmV0X2dldHBlZXJgIGlzIHRoZSBjZW50cmFsIGFjY2VzcyBwb2ludCBoZXJlLiBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24gZmlyc3QsIGVzcGVjaWFsbHkgdG8gc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG90aGVyIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBjb25kaXRpb25hbCBjb25maWdzIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSBiZWhhdmlvci4gTGV0IG1lIHNlZSwgYGluZXRwZWVyLmNgIGlzIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSBpbiBgbmV0L2lwdjQvTWFrZWZpbGVgPyBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LiBPa2F5LCB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBteSBkZWVwZXIgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0cGVlclxcLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGUtNS1cbm5ldC9pcHY0L01ha2VmaWxlOjY6b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS03LVx0ICAgICBpcF9pbnB1dC5vIGlwX2ZyYWdtZW50Lm8gaXBfZm9yd2FyZC5vIGlwX29wdGlvbnMubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMjgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgSVB2NCBQZWVyIEluZm9ybWF0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gYGluZXRwZWVyLm9gIGlzIGRlZmluaXRlbHkgY29tcGlsZWQgYXV0b21hdGljYWxseSBmb3IgSVB2NCDigJMgdGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gSVB2NCYjMzk7cyBkZXBlbmRlbmNlIG9uIGBDT05GSUdfSU5FVGAuIEkgbmVlZCB0byBkaWcgaW50byB0aGlzIGZ1cnRoZXIuCgpNeSBmb2N1cyBzaG91bGQgYmUgb24gaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBhbmQgdXRpbGl6ZXMgcGVlciBpbmZvcm1hdGlvbiwgc3BlY2lmaWNhbGx5IGZvciBJUHY0LiBJ4oCZbGwgc3RhcnQgYnkgZXhhbWluaW5nIGBpbmV0X2dldHBlZXJgIGFuZCBgaW5ldF9wZWVyX3hybGltX2FsbG93YCB3aXRoaW4gYEZvY3VzU3ltYm9sc2AuIEl0JiMzOTtzIGFsc28gd29ydGggbm90aW5nIHRoYXQgYGluZXRfaW5pdHBlZXJzYCBpcyBjYWxsZWQgZHVyaW5nIGtlcm5lbCBpbml0aWFsaXphdGlvbi4gVGhpcyB3b3VsZCBiZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgdGhlIHJldmVyc2UgZW5naW5lZXJpbmcgcHJvY2Vzcy4KCkFscmlnaHQsIGxldCYjMzk7cyBjb25zb2xpZGF0ZSB0aGVzZSBmaW5kaW5ncy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGluZGljYXRlcyB0aGF0IHRoZXNlIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBmbGFnIHRoZXNlIHdpdGggYFdvcnRoRnV6emluZzogdHJ1ZWAuIE15IGBGb2N1c1N5bWJvbHNgIGxpc3QgaW5jbHVkZXM6IGBpbmV0X2dldHBlZXJgLCBgaW5ldF9wZWVyX3hybGltX2FsbG93YCwgYGljbXB2NF94cmxpbV9hbGxvd2AsIGFuZCBgaWNtcHY2X3hybGltX2FsbG93YC4KCkkmIzM5O2xsIGFsc28ga2VlcCBpbiBtaW5kIHRoYXQgSSYjMzk7bGwgbmVlZCBgSU5FVGAgYW5kIGBJUFY2YCBlbmFibGVkIGZvciBhbnkgdGVzdGluZyB0byBiZSByZWxldmFudC4KCldhaXQsIGxvb2tpbmcgYXQgYGljbXB2NF94cmxpbV9hbGxvd2AgYWdhaW4sIEkgcmVhbGl6ZSBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gUHJvYmFibHkgbm90IHRoZSAqYmVzdCogc3ltYm9sIHRvIGNhbGwgb3V0LCBidXQgaXTigJlzIGZpbmUgZm9yIG5vdywgYW5kIGl0IG1heSBzdGlsbCBvZmZlciBzb21lIHZhbHVlLiBJIGtub3cgYGluZXRfZ2V0cGVlcmAgYW5kIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIGFyZSBleHBvcnRlZC9nbG9iYWwsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIHNpZ25hdHVyZXMgb2YgYGluZXRfZ2V0cGVlcmAgYW5kIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgaW5wdXRzIGFuZCBvdXRwdXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaW5ldF9wZWVyIFxcKmluZXRfZ2V0cGVlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pbmV0cGVlci5oPTkzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGluNl9hZGRyICppbmV0cGVlcl9nZXRfYWRkcl92NihzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIpXG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC05OC0vKiBjYW4gYmUgY2FsbGVkIHdpdGggb3Igd2l0aG91dCBsb2NhbCBCSCBiZWluZyBkaXNhYmxlZCAqL1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDo5OTpzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDAtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcik7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwMS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTAyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTAzLVx0XHRcdFx0XHRcdF9fYmUzMiB2NGRhZGRyLFxuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTEzLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjYoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMTUtXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICp2NmRhZGRyKVxuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmM9MTYyPXN0YXRpYyB2b2lkIGluZXRfcGVlcl9nYyhzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4tLVxubmV0L2lwdjQvaW5ldHBlZXIuYy0xOTgtLyogTXVzdCBiZSBjYWxsZWQgdW5kZXIgUkNVIDogTm8gcmVmY291bnQgY2hhbmdlIGlzIGRvbmUgaGVyZS4gKi9cbm5ldC9pcHY0L2luZXRwZWVyLmM6MTk5OnN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG5uZXQvaXB2NC9pbmV0cGVlci5jLTIwMC1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDY2CgkJCQkJCQlvdXRwdXQ6IDE0OAoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgaW5ldF9wZWVyYCBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyB3ZSBoYW5kbGUgdGhlIGBpbmV0X3BlZXJgIHN0cnVjdHVyZXMsIHNwZWNpZmljYWxseSB0aGUgbG9va3VwIG1lY2hhbmlzbS4gVGhlIGtleSBmdW5jdGlvbnMgaW1wYWN0ZWQgYXBwZWFyIHRvIGJlIGBpbmV0X2dldHBlZXJgIGFuZCBgaW5ldF9wZWVyX3hybGltX2FsbG93YC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRvIGluY2x1ZGUgdGhvc2UgaW4gbXkgYW5hbHlzaXMuIEkgc2hvdWxkIGFsc28gY2hlY2sgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGZ1bmN0aW9ucy4KCkFoLCByaWdodCwgYGluZXRfZ2V0cGVlcl92NGAgYW5kIGBpbmV0X2dldHBlZXJfdjZgIGFyZSBpbmxpbmVkOyB0aGV5IGFyZSBub3QgZnVuY3Rpb25zIG9mIHRoZWlyIG93bi4gQW5kIHNvbWUgYXJlIHN0YXRpYywgbGlrZSBgbG9va3VwYCwgYGluZXRwZWVyX2FkZHJfaGFzaGAsIGFuZCBgaW5ldHBlZXJfZW50cnlfY21wYC4gVGhleSB3b24mIzM5O3QgYmUgZXhwb3NlZCBmb3IgbW9kaWZpY2F0aW9uLgoKU28sIGBpbmV0X2dldHBlZXJgIGFuZCBgaW5ldF9wZWVyX3hybGltX2FsbG93YCBhcmUgdGhlIGNyaXRpY2FsIG9uZXMgdG8gZm9jdXMgb24gaGVyZS4KClRoZSByZWFsIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhlIHN3aXRjaCB0byBhIGhhc2gtYmFzZWQgbG9va3VwIHVzaW5nIGBzaXBoYXNoYCBmb3IgdGhlIGBpbmV0X3BlZXJgIHN0cnVjdHVyZXMuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBzaGlmdCBmcm9tIHdoYXRldmVyIHRoZSBwcmV2aW91cyBtZXRob2Qgd2FzLiBUaGlzIGlzIGdvaW5nIHRvIGltcGFjdCBob3cgbmV3IHBlZXJzIGFyZSBhZGRlZCBhbmQgaG93IGV4aXN0aW5nIHBlZXJzIGFyZSBsb29rZWQgdXAsIHdoaWNoIGlzIGZ1bmRhbWVudGFsIHRvIElQdjQvSVB2NiBuZXR3b3JraW5nIGxvZ2ljLCBlc3BlY2lhbGx5IHdpdGggSUNNUCByYXRlIGxpbWl0aW5nIGFuZCBJUCBmcmFnbWVudGF0aW9uLiBUaGUgY2hhbmdlIHRvIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIHJldHVybmluZyBgZmFsc2VgIHdoZW4gYHBlZXJgIGlzIGBOVUxMYCBpcyBhbHNvIG5vdGV3b3J0aHkgYmVjYXVzZSBpdCBzdWdnZXN0cyBhIHNwZWNpZmljIGhhbmRsaW5nIG9mIHRoZSBwZWVyIG5vdCBiZWluZyBmb3VuZCwgd2hpY2ggY291bGQgaGF2ZSBrbm9jay1vbiBlZmZlY3RzLiBGdXJ0aGVybW9yZSwgdGhlIGludHJvZHVjdGlvbiBvZiBhIHRocmVzaG9sZCBmb3IgcGVlciBhbGxvY2F0aW9uIHZpYSBgaW5ldF9wZWVyX3RocmVzaG9sZGAgbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLgoKTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgc2VlIHdoYXQgdGhlIGRvd25zdHJlYW0gaW1wYWN0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5ldF9nZXRwZWVyJiMzNDssCiAgICAmIzM0O2luZXRfcGVlcl94cmxpbV9hbGxvdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGFzaC1iYXNlZCBsb29rdXAgZm9yIGluZXRfcGVlciBzdHJ1Y3R1cmVzLCBtb2RpZnlpbmcgaW5ldF9nZXRwZWVyIHRvIHVzZSBzaXBoYXNoIGZvciB0cmVlIGluc2VydGlvbiBhbmQgbG9va3VwLiBJdCBhbHNvIGNoYW5nZXMgaW5ldF9wZWVyX3hybGltX2FsbG93IHRvIHJldHVybiBmYWxzZSB3aGVuIHBlZXIgaXMgTlVMTCwgYW5kIGxpbWl0cyB0aGUgYWxsb2NhdGlvbiBvZiBuZXcgcGVlcnMgYmFzZWQgb24gaW5ldF9wZWVyX3RocmVzaG9sZC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBJUHY0L0lQdjYgbmV0d29ya2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IElDTVAgcmF0ZSBsaW1pdGluZyBhbmQgSVAgZnJhZ21lbnRhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5ldF9nZXRwZWVyJiMzNDssCiAgICAmIzM0O2luZXRfcGVlcl94cmxpbV9hbGxvdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGFzaC1iYXNlZCBsb29rdXAgZm9yIGluZXRfcGVlciBzdHJ1Y3R1cmVzLCBtb2RpZnlpbmcgaW5ldF9nZXRwZWVyIHRvIHVzZSBzaXBoYXNoIGZvciB0cmVlIGluc2VydGlvbiBhbmQgbG9va3VwLiBJdCBhbHNvIGNoYW5nZXMgaW5ldF9wZWVyX3hybGltX2FsbG93IHRvIHJldHVybiBmYWxzZSB3aGVuIHBlZXIgaXMgTlVMTCwgYW5kIGxpbWl0cyB0aGUgYWxsb2NhdGlvbiBvZiBuZXcgcGVlcnMgYmFzZWQgb24gaW5ldF9wZWVyX3RocmVzaG9sZC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBJUHY0L0lQdjYgbmV0d29ya2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IElDTVAgcmF0ZSBsaW1pdGluZyBhbmQgSVAgZnJhZ21lbnRhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgYGluZXRfcGVlcmAgdHJhY2tpbmcgbWVjaGFuaXNtIGJ5IGFkZGluZyBhIGhhc2ggZmllbGQgdG8gb3B0aW1pemUgcmVkLWJsYWNrIHRyZWUgbG9va3VwcyBhbmQgZml4aW5nIGEgY29tcGFyaXNvbiBidWcgYmV0d2VlbiBJUHY0IGFuZCBJUHY2IGFkZHJlc3Nlcy4gVGhlIG5ldyBoYXNoIGZ1bmN0aW9uIChgaW5ldHBlZXJfYWRkcl9oYXNoYCkgYW5kIHRoZSBtb2RpZmllZCBjb21wYXJpc29uIGZ1bmN0aW9uIChgaW5ldHBlZXJfZW50cnlfY21wYCkgZXhwbGljaXRseSBvbmx5IHJlYWQgdGhlIGluaXRpYWxpemVkIGZpZWxkcyBvZiB0aGUgYGluZXRwZWVyX2FkZHJgIHVuaW9uIChgYTQuYWRkcmAgYW5kIGBhNC52aWZgIGZvciBJUHY0LCBhbmQgYGE2LnM2X2FkZHIzMmAgZm9yIElQdjYpLiBXaGlsZSB0aGUgYGluZXRwZWVyX2FkZHJgIHVuaW9uIGNvbnRhaW5zIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBmb3IgSVB2NCBhZGRyZXNzZXMsIHRoaXMgcGFkZGluZyBpcyBuZXZlciByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBgaW5ldF9wZWVyYCBzdHJ1Y3R1cmUgaXMgcHVyZWx5IGFuIGludGVybmFsIGtlcm5lbCB0cmFja2luZyBzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFjZjdmNDAwMjEzZTExMTFlODZmYTI0NDVmNjFmYTc2NDc0NDg1MjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAyMTozMzowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmggYi9pbmNsdWRlL25ldC9pbmV0cGVlci5oCmluZGV4IGY0NzU3NTdkYWFmYmEuLjQxNGU5YWRmNGM1MTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaApAQCAtMzUsNiAmIzQzOzM1LDcgQEAgc3RydWN0IGluZXRwZWVyX2FkZHIgewogCiBzdHJ1Y3QgaW5ldF9wZWVyIHsKIAlzdHJ1Y3QgcmJfbm9kZQkJcmJfbm9kZTsKJiM0MzsJdTY0CQkJaGFzaDsKIAlzdHJ1Y3QgaW5ldHBlZXJfYWRkcglkYWRkcjsKIAogCXUzMgkJCW1ldHJpY3NbUlRBWF9NQVhdOwpAQCAtMTI1LDYgJiM0MzsxMjYsOSBAQCBzdGF0aWMgaW5saW5lIGludCBpbmV0cGVlcl9hZGRyX2NtcChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSwKIHsKIAlpbnQgaSwgbjsKIAomIzQzOwlpZiAoYS0mZ3Q7ZmFtaWx5ICE9IGItJmd0O2ZhbWlseSkKJiM0MzsJCXJldHVybiBhLSZndDtmYW1pbHkgJmx0OyBiLSZndDtmYW1pbHkgPyAtMSA6IDE7CiYjNDM7CiAJaWYgKGEtJmd0O2ZhbWlseSA9PSBBRl9JTkVUKQogCQluID0gc2l6ZW9mKGEtJmd0O2E0KSAvIHNpemVvZih1MzIpOwogCWVsc2UKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRwZWVyLmMgYi9uZXQvaXB2NC9pbmV0cGVlci5jCmluZGV4IDViOTU3YTgzMWU3YzMuLjk2ODcxZjUyMDEwZjMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRwZWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaW5ldHBlZXIuYwpAQCAtMjEsNiAmIzQzOzIxLDcgQEAKICNpbmNsdWRlICZsdDtuZXQvaXAuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaW5ldHBlZXIuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvc2VjdXJlX3NlcS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXBoYXNoLmgmZ3Q7CiAKIC8qCiAgKiAgVGhlb3J5IG9mIG9wZXJhdGlvbnMuCkBAIC01Miw2ICYjNDM7NTMsMzIgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBlZXJfY2FjaGVwIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MztzdGF0aWMgc2lwaGFzaF9hbGlnbmVkX2tleV90IGluZXRwZWVyX2hhc2hfa2V5IF9fcmVhZF9tb3N0bHk7CiYjNDM7CiYjNDM7c3RhdGljIHU2NCBpbmV0cGVlcl9hZGRyX2hhc2goY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmEpCiYjNDM7ewomIzQzOwlpZiAoYS0mZ3Q7ZmFtaWx5ID09IEFGX0lORVQpCiYjNDM7CQlyZXR1cm4gc2lwaGFzaF8ydTMyKChfX2ZvcmNlIHUzMilhLSZndDthNC5hZGRyLCBhLSZndDthNC52aWYsCiYjNDM7CQkJCSAgICAmYW1wO2luZXRwZWVyX2hhc2hfa2V5KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNpcGhhc2hfNHUzMigoX19mb3JjZSB1MzIpYS0mZ3Q7YTYuczZfYWRkcjMyWzBdLAomIzQzOwkJCSAgICAoX19mb3JjZSB1MzIpYS0mZ3Q7YTYuczZfYWRkcjMyWzFdLAomIzQzOwkJCSAgICAoX19mb3JjZSB1MzIpYS0mZ3Q7YTYuczZfYWRkcjMyWzJdLAomIzQzOwkJCSAgICAoX19mb3JjZSB1MzIpYS0mZ3Q7YTYuczZfYWRkcjMyWzNdLAomIzQzOwkJCSAgICAmYW1wO2luZXRwZWVyX2hhc2hfa2V5KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpbmV0cGVlcl9lbnRyeV9jbXAodTY0IGRoYXNoLAomIzQzOwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkciwKJiM0MzsJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW5ldF9wZWVyICpwKQomIzQzO3sKJiM0MzsJaWYgKGRoYXNoICZsdDsgcC0mZ3Q7aGFzaCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKGRoYXNoICZndDsgcC0mZ3Q7aGFzaCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwlyZXR1cm4gaW5ldHBlZXJfYWRkcl9jbXAoZGFkZHIsICZhbXA7cC0mZ3Q7ZGFkZHIpOwomIzQzO30KIAogdm9pZCBpbmV0X3BlZXJfYmFzZV9pbml0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYnApCiB7CkBAIC03Myw2ICYjNDM7MTAwLDggQEAgdm9pZCBfX2luaXQgaW5ldF9pbml0cGVlcnModm9pZCkKIHsKIAl1NjQgbnJfZW50cmllczsKIAomIzQzOwlnZXRfcmFuZG9tX2J5dGVzKCZhbXA7aW5ldHBlZXJfaGFzaF9rZXksIHNpemVvZihpbmV0cGVlcl9oYXNoX2tleSkpOwomIzQzOwogCSAvKiAxJSBvZiBwaHlzaWNhbCBtZW1vcnkgKi8KIAlucl9lbnRyaWVzID0gZGl2NjRfdWwoKHU2NCl0b3RhbHJhbV9wYWdlcygpICZsdDsmbHQ7IFBBR0VfU0hJRlQsCiAJCQkgICAgICAxMDAgKiBMMV9DQUNIRV9BTElHTihzaXplb2Yoc3RydWN0IGluZXRfcGVlcikpKTsKQEAgLTg0LDYgJiM0MzsxMTMsNyBAQCB2b2lkIF9faW5pdCBpbmV0X2luaXRwZWVycyh2b2lkKQogCiAvKiBDYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgb3IgYmFzZS0mZ3Q7bG9jayBoZWxkICovCiBzdGF0aWMgc3RydWN0IGluZXRfcGVlciAqbG9va3VwKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkciwKJiM0MzsJCQkJdTY0IGRoYXNoLAogCQkJCXN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSwKIAkJCQl1bnNpZ25lZCBpbnQgc2VxLAogCQkJCXN0cnVjdCBpbmV0X3BlZXIgKmdjX3N0YWNrW10sCkBAIC0xMDUsNyAmIzQzOzEzNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5ldF9wZWVyICpsb29rdXAoY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLAogCQkJYnJlYWs7CiAJCXBhcmVudCA9IG5leHQ7CiAJCXAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBpbmV0X3BlZXIsIHJiX25vZGUpOwotCQljbXAgPSBpbmV0cGVlcl9hZGRyX2NtcChkYWRkciwgJmFtcDtwLSZndDtkYWRkcik7CiYjNDM7CQljbXAgPSBpbmV0cGVlcl9lbnRyeV9jbXAoZGhhc2gsIGRhZGRyLCBwKTsKIAkJaWYgKGNtcCA9PSAwKSB7CiAJCQlub3cgPSBqaWZmaWVzOwogCQkJaWYgKFJFQURfT05DRShwLSZndDtkdGltZSkgIT0gbm93KQpAQCAtMTcwLDYgJiM0MzsyMDAsNyBAQCBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcikKIHsKIAlzdHJ1Y3QgaW5ldF9wZWVyICpwLCAqZ2Nfc3RhY2tbUEVFUl9NQVhfR0NdOwomIzQzOwl1NjQgZGhhc2ggPSBpbmV0cGVlcl9hZGRyX2hhc2goZGFkZHIpOwogCXN0cnVjdCByYl9ub2RlICoqcHAsICpwYXJlbnQ7CiAJdW5zaWduZWQgaW50IGdjX2NudCwgc2VxOwogCkBAIC0xNzcsNyAmIzQzOzIwOCw3IEBAIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsCiAJICogQmVjYXVzZSBvZiBhIGNvbmN1cnJlbnQgd3JpdGVyLCB3ZSBtaWdodCBub3QgZmluZCBhbiBleGlzdGluZyBlbnRyeS4KIAkgKi8KIAlzZXEgPSByZWFkX3NlcWJlZ2luKCZhbXA7YmFzZS0mZ3Q7bG9jayk7Ci0JcCA9IGxvb2t1cChkYWRkciwgYmFzZSwgc2VxLCBOVUxMLCAmYW1wO2djX2NudCwgJmFtcDtwYXJlbnQsICZhbXA7cHApOwomIzQzOwlwID0gbG9va3VwKGRhZGRyLCBkaGFzaCwgYmFzZSwgc2VxLCBOVUxMLCAmYW1wO2djX2NudCwgJmFtcDtwYXJlbnQsICZhbXA7cHApOwogCiAJLyogTWFrZSBzdXJlIHRyZWUgd2FzIG5vdCBtb2RpZmllZCBkdXJpbmcgb3VyIGxvb2t1cC4gKi8KIAlpZiAocCAmYW1wOyZhbXA7ICFyZWFkX3NlcXJldHJ5KCZhbXA7YmFzZS0mZ3Q7bG9jaywgc2VxKSkKQEAgLTE5MCwxMSAmIzQzOzIyMSwxMyBAQCBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLAogCXdyaXRlX3NlcWxvY2tfYmgoJmFtcDtiYXNlLSZndDtsb2NrKTsKIAogCWdjX2NudCA9IDA7Ci0JcCA9IGxvb2t1cChkYWRkciwgYmFzZSwgc2VxLCBnY19zdGFjaywgJmFtcDtnY19jbnQsICZhbXA7cGFyZW50LCAmYW1wO3BwKTsKJiM0MzsJcCA9IGxvb2t1cChkYWRkciwgZGhhc2gsIGJhc2UsIHNlcSwgZ2Nfc3RhY2ssICZhbXA7Z2NfY250LCAmYW1wO3BhcmVudCwgJmFtcDtwcCk7CiAJaWYgKCFwKSB7Ci0JCXAgPSBrbWVtX2NhY2hlX2FsbG9jKHBlZXJfY2FjaGVwLCBHRlBfQVRPTUlDKTsKJiM0MzsJCWlmICgodTY0KWJhc2UtJmd0O3RvdGFsICZsdDsgMlVMTCAqIFJFQURfT05DRShpbmV0X3BlZXJfdGhyZXNob2xkKSkKJiM0MzsJCQlwID0ga21lbV9jYWNoZV9hbGxvYyhwZWVyX2NhY2hlcCwgR0ZQX0FUT01JQyk7CiAJCWlmIChwKSB7CiAJCQlwLSZndDtkYWRkciA9ICpkYWRkcjsKJiM0MzsJCQlwLSZndDtoYXNoID0gZGhhc2g7CiAJCQlwLSZndDtkdGltZSA9IChfX3UzMilqaWZmaWVzOwogCQkJcmVmY291bnRfc2V0KCZhbXA7cC0mZ3Q7cmVmY250LCAxKTsKIAkJCWF0b21pY19zZXQoJmFtcDtwLSZndDtyaWQsIDApOwpAQCAtMjQ4LDcgJiM0MzsyODEsNyBAQCBib29sIGluZXRfcGVlcl94cmxpbV9hbGxvdyhzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyLCBpbnQgdGltZW91dCkKIAlib29sIHJjID0gZmFsc2U7CiAKIAlpZiAoIXBlZXIpCi0JCXJldHVybiB0cnVlOwomIzQzOwkJcmV0dXJuIGZhbHNlOwogCiAJdG9rZW4gPSBvdG9rZW4gPSBSRUFEX09OQ0UocGVlci0mZ3Q7cmF0ZV90b2tlbnMpOwogCW5vdyA9IGppZmZpZXM7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjI3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhlIEluZXRwZWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYGluZXRwZWVyLmNgIGFuZCBgaW5ldHBlZXIuaGAuIEl0IHNlZW1zIHRoZXkmIzM5O3JlIGFkZGluZyBhIGBoYXNoYCBmaWVsZCB0byB0aGUgYHN0cnVjdCBpbmV0X3BlZXJgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBhIGBpbmV0cGVlcl9hZGRyX2hhc2goKWAgZnVuY3Rpb24gZm9yIGhhc2hpbmcgdGhlIGBkYWRkcmAgZmllbGQsIHdoaWNoIGlzIGEgYHN0cnVjdCBpbmV0cGVlcl9hZGRyYC4gU21hcnQgbW92ZSB0byB1c2UgYHNpcGhhc2hfMnUzMmAgYW5kIGBzaXBoYXNoXzR1MzJgIGZvciBJUHY0IGFuZCBJUHY2IHJlc3BlY3RpdmVseSDigJMgdGhhdCYjMzk7cyBhIGdvb2QgY2hvaWNlIGZvciBjcnlwdG9ncmFwaGljIGhhc2hpbmcuCgpSaWdodCwgc28gYHN0cnVjdCBpbmV0cGVlcl9hZGRyYCBpcyBkZWZpbmVkIGluIHRoZSBoZWFkZXIsIGxldCBtZSBwdWxsIHRoYXQgdXAgcXVpY2tseS4uLiBva2F5LCBoZXJlIGl0IGlzOgoKYGBgYwpzdHJ1Y3QgaW5ldHBlZXJfYWRkciB7CiAgICB1bmlvbiB7CiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgX19iZTMyIGFkZHI7CiAgICAgICAgICAgIF9fdTMyIHZpZjsKICAgICAgICB9IGE0OwogICAgICAgIHN0cnVjdCBpbjZfYWRkciBhNjsKICAgIH07CiAgICBfX3UxNiBmYW1pbHk7Cn07CmBgYAoKV2FpdCBhIHNlY29uZC4uLiBgaW5ldHBlZXJfYWRkcl9oYXNoYCBoYXNoZXMgYGE0LmFkZHJgIGFuZCBgYTQudmlmYCBmb3IgSVB2NCwgYW5kIHRoZW4gYGE2LnM2X2FkZHIzMmAgZm9yIElQdjYsIHJpZ2h0PyBCdXQgdGhlIGBmYW1pbHlgIGZpZWxkIGlzICpub3QqIGluY2x1ZGVkIGluIHRoZSBoYXNoIGNvbXB1dGF0aW9uISBJdCYjMzk7cyBqdXN0IHVzZWQgZm9yIGJyYW5jaGluZy4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBpc3N1ZS4gV2hhdCBpZiB0d28gZGlmZmVyZW50IGBpbmV0cGVlcl9hZGRyYCBpbnN0YW5jZXMgaGFwcGVuIHRvIHByb2R1Y2UgdGhlIHNhbWUgaGFzaCB2YWx1ZSBldmVuIHRob3VnaCB0aGVpciBgZmFtaWx5YCBpcyBkaWZmZXJlbnQ/CgpPa2F5LCBhbmQgc29tZXRoaW5nIGVsc2UgaXMgbmFnZ2luZyBhdCBtZS4gSXQmIzM5O3MgdGhlIGB2aWZgIGZpZWxkIOKAkyBpbiBJUHY0LiBJcyB0aGF0IGFsd2F5cyBpbml0aWFsaXplZD8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgc3RydWN0IGluZXRwZWVyX2FkZHJgIGlzIGFjdHVhbGx5ICppbml0aWFsaXplZCouIElmIGB2aWZgIGlzbiYjMzk7dCBmdWxseSBzZXQsIHRoZW4gd2UgY291bGQgYmUgaGFzaGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCBjb3VsZCBsZWFkIHRvIGFsbCBzb3J0cyBvZiBwcm9ibGVtcy4KCk5vdyB3aGVyZSBpcyBgdmlmYCBiZWluZyB1c2VkPyBJIHNlZW0gdG8gcmVjYWxsIHRoYXQmIzM5O3MgcmVsYXRlZCB0byBWUkYgb3IgTDMgZG9tYWlucy4uLiBPa2F5LCB0aW1lIHRvIGdvIHNlYXJjaGluZyBmb3IgaG93IGBzdHJ1Y3QgaW5ldHBlZXJfYWRkcmAgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgaW4gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBpbmV0cGVlcl9hZGRyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2luZXRwZWVyLmg9MjA9c3RydWN0IGlwdjRfYWRkcl9rZXkge1xuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMjYtXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjI3OnN0cnVjdCBpbmV0cGVlcl9hZGRyIHtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMjgtXHR1bmlvbiB7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0zNj1zdHJ1Y3QgaW5ldF9wZWVyIHtcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTM4LVx0dTY0XHRcdFx0aGFzaDtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6Mzk6XHRzdHJ1Y3QgaW5ldHBlZXJfYWRkclx0ZGFkZHI7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTQwLVxuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg9NzA9dm9pZCBpbmV0X2luaXRwZWVycyh2b2lkKSBfX2luaXQ7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC03My1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6NzQ6c3RhdGljIGlubGluZSB2b2lkIGluZXRwZWVyX3NldF9hZGRyX3Y0KHN0cnVjdCBpbmV0cGVlcl9hZGRyICppYWRkciwgX19iZTMyIGlwKVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC03NS17XG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC04MC1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6ODE6c3RhdGljIGlubGluZSBfX2JlMzIgaW5ldHBlZXJfZ2V0X2FkZHJfdjQoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyKVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC04Mi17XG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC04NS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6ODY6c3RhdGljIGlubGluZSB2b2lkIGluZXRwZWVyX3NldF9hZGRyX3Y2KHN0cnVjdCBpbmV0cGVlcl9hZGRyICppYWRkcixcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtODctXHRcdFx0XHRcdHN0cnVjdCBpbjZfYWRkciAqaW42KVxuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtOTItXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjkzOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluNl9hZGRyICppbmV0cGVlcl9nZXRfYWRkcl92NihzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIpXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTk0LXtcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oPTk5PXN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjEwMDpcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyKTtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTAxLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0xMDI9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjQoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTA1LXtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTA2Olx0c3RydWN0IGluZXRwZWVyX2FkZHIgZGFkZHI7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwNy1cbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oPTExND1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMTYte1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMTc6XHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBkYWRkcjtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTE4LVxuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTIzLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMjQ6c3RhdGljIGlubGluZSBpbnQgaW5ldHBlZXJfYWRkcl9jbXAoY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmEsXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjEyNTpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYilcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTI2LXtcbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jPTU2PXN0YXRpYyBzaXBoYXNoX2FsaWduZWRfa2V5X3QgaW5ldHBlZXJfaGFzaF9rZXkgX19yZWFkX21vc3RseTtcbm5ldC9pcHY0L2luZXRwZWVyLmMtNTctXG5uZXQvaXB2NC9pbmV0cGVlci5jOjU4OnN0YXRpYyB1NjQgaW5ldHBlZXJfYWRkcl9oYXNoKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphKVxubmV0L2lwdjQvaW5ldHBlZXIuYy01OS17XG4tLVxubmV0L2lwdjQvaW5ldHBlZXIuYz03MT1zdGF0aWMgaW50IGluZXRwZWVyX2VudHJ5X2NtcCh1NjQgZGhhc2gsXG5uZXQvaXB2NC9pbmV0cGVlci5jOjcyOlx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcbm5ldC9pcHY0L2luZXRwZWVyLmMtNzMtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRfcGVlciAqcClcbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jPTk5PXZvaWQgX19pbml0IGluZXRfaW5pdHBlZXJzKHZvaWQpXG4tLVxubmV0L2lwdjQvaW5ldHBlZXIuYy0xMTQtLyogQ2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpIG9yIGJhc2UtXHUwMDNlbG9jayBoZWxkICovXG5uZXQvaXB2NC9pbmV0cGVlci5jOjExNTpzdGF0aWMgc3RydWN0IGluZXRfcGVlciAqbG9va3VwKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcbm5ldC9pcHY0L2luZXRwZWVyLmMtMTE2LVx0XHRcdFx0dTY0IGRoYXNoLFxuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmM9MTk5PXN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG5uZXQvaXB2NC9pbmV0cGVlci5jOjIwMDpcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyKVxubmV0L2lwdjQvaW5ldHBlZXIuYy0yMDEte1xuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjMtXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI0OnN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKl9fdGNwX2dldF9tZXRyaWNzKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpzYWRkcixcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MjU6XHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yNi1cdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBoYXNoKTtcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTQxPXN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayB7XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy00My1cdHN0cnVjdCBuZXRcdFx0XHQqdGNwbV9uZXQ7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjQ0Olx0c3RydWN0IGluZXRwZWVyX2FkZHJcdFx0dGNwbV9zYWRkcjtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6NDU6XHRzdHJ1Y3QgaW5ldHBlZXJfYWRkclx0XHR0Y3BtX2RhZGRyO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYy00Ni1cdHVuc2lnbmVkIGxvbmdcdFx0XHR0Y3BtX3N0YW1wO1xuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9NzQ9c3RhdGljIHZvaWQgdGNwX21ldHJpY19zZXQoc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0bSxcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgxLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo4MjpzdGF0aWMgYm9vbCBhZGRyX3NhbWUoY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmEsXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjgzOlx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYilcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODQte1xuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9MTYzPXN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRjcG1fbmV3KHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MTY0Olx0XHRcdFx0XHQgIHN0cnVjdCBpbmV0cGVlcl9hZGRyICpzYWRkcixcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MTY1Olx0XHRcdFx0XHQgIHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMTY2LVx0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBoYXNoKVxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9MjIyPXN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRjcF9nZXRfZW5jb2RlKHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG0sIGludCBkZXB0aClcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTIzMC1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MjMxOnN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKl9fdGNwX2dldF9tZXRyaWNzKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpzYWRkcixcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MjMyOlx0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjMzLVx0XHRcdFx0XHRcdCAgIHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGhhc2gpXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz0yNDk9c3RhdGljIHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqX190Y3BfZ2V0X21ldHJpY3NfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI1Mi1cdHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG07XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI1MzpcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjU0LVx0dW5zaWduZWQgaW50IGhhc2g7XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz0yOTE9c3RhdGljIHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdGNwX2dldF9tZXRyaWNzKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI5NS1cdHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG07XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI5NjpcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjk3LVx0dW5zaWduZWQgaW50IGhhc2g7XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz03Njc9c3RhdGljIGludCB0Y3BfbWV0cmljc19ubF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MDEtXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjgwMjpzdGF0aWMgaW50IF9fcGFyc2VfbmxfYWRkcihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYWRkcixcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODAzLVx0XHRcdCAgIHVuc2lnbmVkIGludCAqaGFzaCwgaW50IG9wdGlvbmFsLCBpbnQgdjQsIGludCB2Nilcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgyNi1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODI3OnN0YXRpYyBpbnQgcGFyc2VfbmxfYWRkcihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYWRkcixcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODI4LVx0XHRcdCB1bnNpZ25lZCBpbnQgKmhhc2gsIGludCBvcHRpb25hbClcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgzNC1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODM1OnN0YXRpYyBpbnQgcGFyc2Vfbmxfc2FkZHIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGluZXRwZWVyX2FkZHIgKmFkZHIpXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgzNi17XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz04NDI9c3RhdGljIGludCB0Y3BfbWV0cmljc19ubF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04NDQtXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo4NDU6XHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBzYWRkciwgZGFkZHI7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTg0Ni1cdHVuc2lnbmVkIGludCBoYXNoO1xuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9OTI4PXN0YXRpYyBpbnQgdGNwX21ldHJpY3NfbmxfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtOTMyLVx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrIF9fcmN1ICoqcHA7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjkzMzpcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtOTM0LVx0dW5zaWduZWQgaW50IGhhc2g7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNTIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9uczoKCioqRGlnZ2luZyBpbnRvIEluZXRwZWVyJiMzOTtzIElQdjQgSGFuZGxpbmcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBpbmV0cGVlcmAgaXMgbWFuYWdpbmcgSVB2NCBhZGRyZXNzZXMuIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCBpbnRvIGBpbmNsdWRlL25ldC9pbmV0cGVlci5oYCB0byBzZWUgaG93IGBpbmV0cGVlcl9nZXRfYWRkcl92NGAgYW5kIGBpbmV0cGVlcl9zZXRfYWRkcl92NGAgYXJlIGRlZmluZWQuIEkmIzM5O20gcmVhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGRldGFpbHMgb2YgdGhlaXIgQVBJIGFuZCBob3cgdGhleSYjMzk7cmUgaW50ZW5kZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgYnJvYWRlciBpbmV0cGVlciBmcmFtZXdvcmsuIEkgd2FudCB0byBzZWUgaWYgdGhlIGltcGxlbWVudGF0aW9uIGhpbnRzIGF0IGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBvciBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBpbnRlcmVzdGluZyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCBhcm91bmQuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYWNjZXNzb3JzIGZpdCBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiB0aGUgcGVlciB0cmFja2luZyBtZWNoYW5pc20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRwZWVyX3NldF9hZGRyX3Y0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2luZXRwZWVyLmg9NzA9dm9pZCBpbmV0X2luaXRwZWVycyh2b2lkKSBfX2luaXQ7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC03My1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6NzQ6c3RhdGljIGlubGluZSB2b2lkIGluZXRwZWVyX3NldF9hZGRyX3Y0KHN0cnVjdCBpbmV0cGVlcl9hZGRyICppYWRkciwgX19iZTMyIGlwKVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC03NS17XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz0yNDk9c3RhdGljIHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqX190Y3BfZ2V0X21ldHJpY3NfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI2MC1cdGNhc2UgQUZfSU5FVDpcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MjYxOlx0XHRpbmV0cGVlcl9zZXRfYWRkcl92NChcdTAwMjZzYWRkciwgaW5ldF9yc2socmVxKS1cdTAwM2Vpcl9sb2NfYWRkcik7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI2MjpcdFx0aW5ldHBlZXJfc2V0X2FkZHJfdjQoXHUwMDI2ZGFkZHIsIGluZXRfcnNrKHJlcSktXHUwMDNlaXJfcm10X2FkZHIpO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yNjMtXHRcdGhhc2ggPSBpcHY0X2FkZHJfaGFzaChpbmV0X3JzayhyZXEpLVx1MDAzZWlyX3JtdF9hZGRyKTtcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTI5MT1zdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0Y3BfZ2V0X21ldHJpY3Moc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMzAwLVx0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUKSB7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjMwMTpcdFx0aW5ldHBlZXJfc2V0X2FkZHJfdjQoXHUwMDI2c2FkZHIsIGluZXRfc2soc2spLVx1MDAzZWluZXRfc2FkZHIpO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYzozMDI6XHRcdGluZXRwZWVyX3NldF9hZGRyX3Y0KFx1MDAyNmRhZGRyLCBpbmV0X3NrKHNrKS1cdTAwM2VpbmV0X2RhZGRyKTtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMzAzLVx0XHRoYXNoID0gaXB2NF9hZGRyX2hhc2goaW5ldF9zayhzayktXHUwMDNlaW5ldF9kYWRkcik7XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0zMDctXHRcdGlmIChpcHY2X2FkZHJfdjRtYXBwZWQoXHUwMDI2c2stXHUwMDNlc2tfdjZfZGFkZHIpKSB7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjMwODpcdFx0XHRpbmV0cGVlcl9zZXRfYWRkcl92NChcdTAwMjZzYWRkciwgaW5ldF9zayhzayktXHUwMDNlaW5ldF9zYWRkcik7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjMwOTpcdFx0XHRpbmV0cGVlcl9zZXRfYWRkcl92NChcdTAwMjZkYWRkciwgaW5ldF9zayhzayktXHUwMDNlaW5ldF9kYWRkcik7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTMxMC1cdFx0XHRoYXNoID0gaXB2NF9hZGRyX2hhc2goaW5ldF9zayhzayktXHUwMDNlaW5ldF9kYWRkcik7XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz04MDI9c3RhdGljIGludCBfX3BhcnNlX25sX2FkZHIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGluZXRwZWVyX2FkZHIgKmFkZHIsXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MDgtXHRpZiAoYSkge1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo4MDk6XHRcdGluZXRwZWVyX3NldF9hZGRyX3Y0KGFkZHIsIG5sYV9nZXRfaW5fYWRkcihhKSk7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgxMC1cdFx0aWYgKGhhc2gpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlBlZXJpbmcgaW50byBgaW5ldHBlZXIuaGAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBzb21lIGtlcm5lbCBpbnRlcm5hbHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYGluY2x1ZGUvbmV0L2luZXRwZWVyLmhgIGZpbGUsIGFuZCBJJiMzOTttIGZvY3VzaW5nIG15IGF0dGVudGlvbiBvbiBsaW5lcyA3NCB0aHJvdWdoIDgwLiBUaGF0IHJlZ2lvbiBsaWtlbHkgaG9sZHMgc29tZSBjcnVjaWFsIGRlZmluaXRpb25zIG9yIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBJUCBwZWVyIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgdHJhY2tpbmcgb2YgcmVtb3RlIGhvc3RzLCBjb25uZWN0aW9uIHN0YXRlcywgb3IgcGVyaGFwcyBldmVuIGNvbmdlc3Rpb24gY29udHJvbCBwYXJhbWV0ZXJzLiBJdCYjMzk7cyBwcm9iYWJseSBhIHN0cnVjdHVyZSB0aGF0IGRlZmluZXMgaG93IHRoZSBrZXJuZWwgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IGFuIElQIGFkZHJlc3MsIHRoZSByb3V0aW5nIGRlY2lzaW9ucywgYW5kIGFueSBhc3NvY2lhdGVkIHN0YXRlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgY29udGFpbmVkIGluIHRob3NlIGxpbmVzLiBIb3BlZnVsbHksIEkmIzM5O2xsIGZpbmQgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZXJlLiBUaGlzIGluZm9ybWF0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGRlYWxzIHdpdGggbmV0d29yayBjb25uZWN0aW9ucyBhdCBhIGdyYW51bGFyIGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2luZXRwZWVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcwOlx0dm9pZCBpbmV0X2luaXRwZWVycyh2b2lkKSBfX2luaXQ7XG4gIDcxOlx0XG4gIDcyOlx0I2RlZmluZSBJTkVUUEVFUl9NRVRSSUNTX05FV1x0KH4odTMyKSAwKVxuICA3MzpcdFxuICA3NDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0cGVlcl9zZXRfYWRkcl92NChzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIsIF9fYmUzMiBpcClcbiAgNzU6XHR7XG4gIDc2Olx0XHRpYWRkci1cdTAwM2VhNC5hZGRyID0gaXA7XG4gIDc3Olx0XHRpYWRkci1cdTAwM2VhNC52aWYgPSAwO1xuICA3ODpcdFx0aWFkZHItXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbiAgNzk6XHR9XG4gIDgwOlx0XG4gIDgxOlx0c3RhdGljIGlubGluZSBfX2JlMzIgaW5ldHBlZXJfZ2V0X2FkZHJfdjQoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyKVxuICA4MjpcdHtcbiAgODM6XHRcdHJldHVybiBpYWRkci1cdTAwM2VhNC5hZGRyO1xuICA4NDpcdH1cbiAgODU6XHRcbiAgODY6XHRzdGF0aWMgaW5saW5lIHZvaWQgaW5ldHBlZXJfc2V0X2FkZHJfdjYoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyLFxuICA4NzpcdFx0XHRcdFx0XHRzdHJ1Y3QgaW42X2FkZHIgKmluNilcbiAgODg6XHR7XG4gIDg5Olx0XHRpYWRkci1cdTAwM2VhNiA9ICppbjY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MDAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBBZGRyZXNzIFN0cnVjdHVyZSBJbml0aWFsaXphdGlvbioqCgpIbW0sIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IHRoZXNlIElQIGFkZHJlc3Mgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBpbmV0cGVlcmAgc3Vic3lzdGVtLiBJIHNlZSBgaW5ldHBlZXJfc2V0X2FkZHJfdjRgIGlzIGV4cGxpY2l0bHkgc2V0dGluZyBgaWFkZHItJmd0O2E0LnZpZiA9IDBgLiBUaGF0JiMzOTtzIGltcG9ydGFudDsgaXQmIzM5O3MgY2xlYXJpbmcgdGhlIFZpcnR1YWwgSW50ZXJmYWNlIGZpZWxkIHdpdGhpbiB0aGUgSVB2NCBhZGRyZXNzIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLgoKQnV0IHdoYXQgYWJvdXQgSVB2Nj8gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdHMgY29ycmVzcG9uZGluZyBmdW5jdGlvbiwgYGluZXRwZWVyX3NldF9hZGRyX3Y2YCwgaGFuZGxlcyBpdHMgVmlydHVhbCBJbnRlcmZhY2UgZmllbGQuIERvZXMgaXQgZm9sbG93IGEgc2ltaWxhciBhcHByb2FjaCwgYW5kIG1vcmUgYnJvYWRseSwgaG93IGRvZXMgdGhlIGNvZGViYXNlIGVuc3VyZSBjb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSB0d28gdmVyc2lvbiYjMzk7cyBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24/IFdoYXQgb3RoZXIgYXNzb2NpYXRlZCBmaWVsZHMgbmVlZCB0byBiZSBsb29rZWQgYXQgdG8gZW5zdXJlIGNvbnNpc3RlbmN5PyBJdCYjMzk7cyBjcnVjaWFsIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IHN1YnRsZSBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBvciBwb3RlbnRpYWwgYnVncyBhcmlzaW5nIGZyb20gZGlmZmVyaW5nIGluaXRpYWxpemF0aW9uIHByYWN0aWNlcyBhY3Jvc3MgSVB2NCBhbmQgSVB2NiBpbXBsZW1lbnRhdGlvbnMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaW5ldHBlZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODY6XHRzdGF0aWMgaW5saW5lIHZvaWQgaW5ldHBlZXJfc2V0X2FkZHJfdjYoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyLFxuICA4NzpcdFx0XHRcdFx0XHRzdHJ1Y3QgaW42X2FkZHIgKmluNilcbiAgODg6XHR7XG4gIDg5Olx0XHRpYWRkci1cdTAwM2VhNiA9ICppbjY7XG4gIDkwOlx0XHRpYWRkci1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUNjtcbiAgOTE6XHR9XG4gIDkyOlx0XG4gIDkzOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgaW42X2FkZHIgKmluZXRwZWVyX2dldF9hZGRyX3Y2KHN0cnVjdCBpbmV0cGVlcl9hZGRyICppYWRkcilcbiAgOTQ6XHR7XG4gIDk1Olx0XHRyZXR1cm4gXHUwMDI2aWFkZHItXHUwMDNlYTY7XG4gIDk2Olx0fVxuICA5NzpcdFxuICA5ODpcdC8qIGNhbiBiZSBjYWxsZWQgd2l0aCBvciB3aXRob3V0IGxvY2FsIEJIIGJlaW5nIGRpc2FibGVkICovXG4gIDk5Olx0c3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcbiAxMDA6XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyKTtcbiAxMDE6XHRcbiAxMDI6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NChzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4gMTAzOlx0XHRcdFx0XHRcdFx0X19iZTMyIHY0ZGFkZHIsXG4gMTA0Olx0XHRcdFx0XHRcdFx0aW50IHZpZilcbiAxMDU6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMjEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBQZWVyIFJlc29sdXRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiB0aGUgZnVuY3Rpb24gYGluZXRfZ2V0cGVlcl92NGAgYWN0dWFsbHkgYWNjZXB0cyBhIGB2aWZgIGFyZ3VtZW50ISBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBJJiMzOTtkIGNvbXBsZXRlbHkgZ2xvc3NlZCBvdmVyIHRoYXQgd2hlbiBJIHdhcyBpbml0aWFsbHkgcmV2aWV3aW5nIHRoZSBjb2RlLiBUaGlzIGNoYW5nZXMgdGhpbmdzLiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB2aXJ0dWFsIGludGVyZmFjZSBhZmZlY3RzIHRoZSBwZWVyIHJlc29sdXRpb24gcHJvY2Vzcy4gUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGJvdGggYGluZXRfZ2V0cGVlcl92NGAgKmFuZCogYGluZXRfZ2V0cGVlcl92NmAuIEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgdGhlc2UgZnVuY3Rpb25zIHV0aWxpemUgdGhlIGB2aWZgIHBhcmFtZXRlciB0byBkZXRlcm1pbmUgdGhlIHJlbW90ZSBwZWVyJiMzOTtzIGFkZHJlc3MuIFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBjcnVjaWFsIHRvIHRoZSBiZWhhdmlvciBJJiMzOTttIGxvb2tpbmcgaW50by4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb25zIHVzZSB0aGUgYHZpZmAgaW4gYSB3YXkgSSB0aGluayB0aGV5IGRvLiBJIGhhdmUgYXNzdW1wdGlvbnMsIGJ1dCBJIG5lZWQgY29uZmlybWF0aW9uLiBUaW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pbmV0cGVlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDI6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NChzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4gMTAzOlx0XHRcdFx0XHRcdFx0X19iZTMyIHY0ZGFkZHIsXG4gMTA0Olx0XHRcdFx0XHRcdFx0aW50IHZpZilcbiAxMDU6XHR7XG4gMTA2Olx0XHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBkYWRkcjtcbiAxMDc6XHRcbiAxMDg6XHRcdGRhZGRyLmE0LmFkZHIgPSB2NGRhZGRyO1xuIDEwOTpcdFx0ZGFkZHIuYTQudmlmID0gdmlmO1xuIDExMDpcdFx0ZGFkZHIuZmFtaWx5ID0gQUZfSU5FVDtcbiAxMTE6XHRcdHJldHVybiBpbmV0X2dldHBlZXIoYmFzZSwgXHUwMDI2ZGFkZHIpO1xuIDExMjpcdH1cbiAxMTM6XHRcbiAxMTQ6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4gMTE1Olx0XHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICp2NmRhZGRyKVxuIDExNjpcdHtcbiAxMTc6XHRcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIGRhZGRyO1xuIDExODpcdFxuIDExOTpcdFx0ZGFkZHIuYTYgPSAqdjZkYWRkcjtcbiAxMjA6XHRcdGRhZGRyLmZhbWlseSA9IEFGX0lORVQ2O1xuIDEyMTpcdFx0cmV0dXJuIGluZXRfZ2V0cGVlcihiYXNlLCBcdTAwMjZkYWRkcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MTkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMzQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmF2ZWxpbmcgdGhlIEluaXRpYWxpemF0aW9uIG9mIGBpbmV0cGVlcl9hZGRyYCBhbmQgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgY29uY2VybiBjZW50ZXJlZCBhcm91bmQgaG93IHRoZSBgaW5ldHBlZXJfYWRkcmAgc3RydWN0IGlzIGluaXRpYWxpemVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBpbmV0X2dldHBlZXJfdjRgLiBJIHNlZSB0aGF0IGBkYWRkci5hNC5hZGRyYCBhbmQgYGRhZGRyLmE0LnZpZmAgYXJlIGFzc2lnbmVkLCBhbmQgdGhlbiB0aGUgYGZhbWlseWAgZmllbGQgaXMgc2V0IHRvIGBBRl9JTkVUYC4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIGlmIHRoYXQmIzM5O3Mgc3VmZmljaWVudCB0byBmdWxseSBpbml0aWFsaXplIHRoZSB1bmlvbi4gQSBxdWljayBjaGVjayBvZiB0aGUgc3RydWN0IGRlZmluaXRpb24gY29uZmlybXMgdGhhdCB0aGUgYHVuaW9uYCBpcyAxNiBieXRlcyB3aWRlLCB3aGlsZSBpbml0aWFsaXppbmcgYC5hNGAgb25seSB0b3VjaGVzIDggYnl0ZXMuIFRoaXMgbWVhbnMgdGhlIG90aGVyIDggYnl0ZXMgcmVtYWluIHVuaW5pdGlhbGl6ZWQuCgpUaGUgY29yZSBvZiB0aGUgaXNzdWUgYm9pbHMgZG93biB0byB3aGV0aGVyIGFueSBmdW5jdGlvbiByZWFkcyB0aGUgKnVuaW5pdGlhbGl6ZWQqIHBvcnRpb24gb2YgdGhlIGBpbmV0cGVlcl9hZGRyYCBzdHJ1Y3QsIHdoaWNoIGNhbiBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVucHJlZGljdGFibGUgYmVoYXZpb3IuCgpJIGRvdmUgaW50byBgaW5ldHBlZXJfYWRkcl9oYXNoYC4gVGhhbmtmdWxseSwgaXQgb25seSBoYXNoZXMgYGE0LmFkZHJgIGFuZCBgYTQudmlmYCBmb3IgYEFGX0lORVRgLCB3aGljaCBhcmUgdGhlIGluaXRpYWxpemVkIHBhcnRzLiBGb3IgYEFGX0lORVQ2YCwgdGhlIGVudGlyZSBgYTZgIHN0cnVjdCBpcyBoYXNoZWQsIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyByZWFkLiBUaGlzIGlzIGdvb2QuCgpJIG1vdmVkIG9uIHRvIGBpbmV0X2dldHBlZXJfdjZgIGFuZCBgaW5ldHBlZXJfc2V0X2FkZHJfdjZgLCB3aGljaCBpbml0aWFsaXplcyBhbGwgMTYgYnl0ZXMgb2YgdGhlIHVuaW9uIHdpdGggYC5hNmAuIEdvb2QuCgpOZXh0LCBJIGNvbnNpZGVyZWQgcGFkZGluZy4gVGhlIHN0cnVjdCBjb250YWlucyBhIDE2LWJ5dGUgdW5pb24gYW5kIGEgMi1ieXRlIGZhbWlseSwgbWFraW5nIHRoZSB0b3RhbCBzaXplIDE4IGJ5dGVzLCBwb3RlbnRpYWxseSBwYWRkZWQgdG8gMjAgb3IgMjQgYnl0ZXMsIGRlcGVuZGluZyBvbiBhbGlnbm1lbnQuIEltcG9ydGFudGx5LCBgaW5ldHBlZXJfYWRkcl9oYXNoYCBhbmQgYGluZXRwZWVyX2FkZHJfY21wYCBpZ25vcmUgdGhlc2UgcGFkZGluZyBieXRlcywgc28gdGhleSBhcmVuJiMzOTt0IGEgY29uY2Vybi4KClRoZW4sIEkgaW52ZXN0aWdhdGVkIGBpbmV0cGVlcl9hZGRyX2NtcGAsIHdoaWNoIGNvbXBhcmVzIHRoZSBgaW5ldHBlZXJfYWRkcmAgc3RydWN0cy4gRm9yIGBBRl9JTkVUYCwgaXQgY29tcGFyZXMgYHM2X2FkZHIzMlswXWAgYW5kIGBzNl9hZGRyMzJbMV1gLCB3aGljaCBhbGlhcyBleGFjdGx5IHRvIGBhNC5hZGRyYCBhbmQgYGE0LnZpZmAuIENyaXRpY2FsbHksIGl0IGRvZXMgKm5vdCogY29tcGFyZSB0aGUgdW5pbml0aWFsaXplZCA4IGJ5dGVzLCBub3IgdGhlIHBhZGRpbmcuIFRoaXMgaXMgZmluZS4KCkkgd29uZGVyZWQgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyBhdmVudWVzIGZvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJIG5vdGVkIHRoYXQgYGluZXRwZWVyX2FkZHJfaGFzaGAgZXhwbGljaXRseSBvbmx5IHJlYWRzIHRoZSBpbml0aWFsaXplZCBmaWVsZHMuCgpBZnRlciBzY3J1dGluaXppbmcgYHRjcF9tZXRyaWNzLmNgIGFuZCBpdHMgdXNlIG9mIGBpbmV0cGVlcl9hZGRyYCB0aHJvdWdoIHRoZSBgaW5ldHBlZXJfc2V0X2FkZHJfdjRgIGZ1bmN0aW9uLCBJIGZvdW5kIHRoYXQgdGhleSAqZG8qIHVzZSBgaW5ldHBlZXJfYWRkcmAsIGJ1dCBgdGNwX21ldHJpY3MuY2AgdWx0aW1hdGVseSB1c2VzIGEgZGlyZWN0IElQdjQgb3IgSVB2NiBoYXNoIGZ1bmN0aW9uLiBTbyBpdCBkb2VzIG5vdCB1c2UgdGhlIGZ1bmN0aW9uIGJlaW5nIGRpc2N1c3NlZCBoZXJlLiBJdCAqZG9lcyogaG93ZXZlciB1c2UgYGluZXRwZWVyX2FkZHJfY21wYCB3aXRoIGBzYWRkcmAgYW5kIGBkYWRkcmAgd2hpY2ggYXJlIG9ubHkgcGFydGlhbGx5IGluaXRpYWxpemVkLCBidXQgYXMgYmVmb3JlLCBgaW5ldHBlZXJfYWRkcl9jbXBgIG9ubHkgY29tcGFyZXMgdGhlIGluaXRpYWxpemVkIGJ5dGVzLiBTbyB0aGlzIHNlZW1zIHNhZmUuCgpJIGhhZCBhIG1vbWVudCBvZiBkb3VidDogV2hhdCBpZiBgYS0mZ3Q7ZmFtaWx5YCB3YXMgdW5pbml0aWFsaXplZD8gVGhhbmtmdWxseSwgYGluZXRwZWVyX3NldF9hZGRyX3Y0YCwgYGluZXRfZ2V0cGVlcl92NGAgYW5kIGBpbmV0X2dldHBlZXJfdjZgICpkbyogaW5pdGlhbGl6ZSB0aGUgYGZhbWlseWAgZmllbGQsIHNvIGl0IGlzIHNldC4KCkZpbmFsbHksIEkgY29uc2lkZXJlZCB0aGUgcGF0Y2hlZCBsb2dpYyByZXBsYWNpbmcgYHJiX3RyZWVgIGxvb2t1cHMgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGluZXRwZWVyX2VudHJ5X2NtcGAuIFRoaXMgb3B0aW1pemF0aW9uIGNvbXBhcmVzIGhhc2hlcyAqYmVmb3JlKiBjb21wYXJpbmcgdGhlIGZ1bGwgYWRkcmVzc2VzIHVzaW5nIGBpbmV0cGVlcl9hZGRyX2NtcGAuIFRoZSBoYXNoIGlzIGNhbGN1bGF0ZWQgdXNpbmcgYGluZXRwZWVyX2FkZHJfaGFzaChkYWRkcilgLiBHaXZlbiB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGE0LmFkZHJgLCBgYTQudmlmYCBhbmQgYGE2YCBpbiB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb25zLCBJIGNvbmNsdWRlIHRoYXQgdGhlcmUmIzM5O3Mgbm8gY2hhbmNlIHRoZSBoYXNoIGNhbGN1bGF0aW9uIHJlYWRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKU28sIGl0IHNlZW1zIHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLCBvciBieSB0aGUgc3RydWN0dXJlJiMzOTtzIGluaXRpYWxpemF0aW9uLCBiZWNhdXNlIGZ1bmN0aW9ucyBvbmx5IHVzZSB0aGUgaW5pdGlhbGl6ZWQgc2VjdGlvbnMgb2YgdGhlIHVuaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaW5ldHBlZXJfYWRkciBbYS16QS1aMC05X10mIzQzOzsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0xMDI9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjQoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTA1LXtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTA2Olx0c3RydWN0IGluZXRwZWVyX2FkZHIgZGFkZHI7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwNy1cbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oPTExND1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMTYte1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMTc6XHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBkYWRkcjtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI2MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqUmV2aXNpdGluZyBgdGNwX21ldHJpY3MuY2AqKgoKT2theSwgdGltZSB0byBjaXJjbGUgYmFjayB0byBgdGNwX21ldHJpY3MuY2AuIEkmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIGNvbmdlc3Rpb24gY29udHJvbCBzaWRlLCBidXQgdGhlcmUmIzM5O3MgYWx3YXlzIHRoZSBjaGFuY2UgSSBtaXNzZWQgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGluIHRoZSBtZXRyaWMgY29sbGVjdGlvbiBvciByZXBvcnRpbmcuIEl0JiMzOTtzIGVhc3kgdG8gZ2V0IHR1bm5lbCB2aXNpb24gd2hlbiBkZWJ1Z2dpbmcgYSBzcGVjaWZpYyBpc3N1ZSwgc28gYSBmcmVzaCBsb29rIGF0IHRoZSBjb3JlIGRhdGEgZ2F0aGVyaW5nIGlzIHdhcnJhbnRlZC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgZGF0YSBJJiMzOTttIHVzaW5nIGZvciBhbmFseXNpcyBpcyBib3RoIGFjY3VyYXRlIGFuZCBjb21wcmVoZW5zaXZlLiBNYXliZSB0aGVyZSYjMzk7cyBhIHN1YnRsZSBpbnRlcmFjdGlvbiBJIG92ZXJsb29rZWQsIG9yIHBlcmhhcHMgYSBwcmV2aW91c2x5IGRpc21pc3NlZCBlZGdlIGNhc2UgaXMgbm93IHJlbGV2YW50IGluIGxpZ2h0IG9mIHJlY2VudCBmaW5kaW5ncy4gQSBtZXRob2RpY2FsIHJldmlldyBzaG91bGQgaGVscCBtZSBwaW5wb2ludCBhbnkgZGF0YSBpbnRlZ3JpdHkgaXNzdWVzIG9yIGlkZW50aWZ5IHBvdGVudGlhbCBtZXRyaWNzIHRoYXQgY291bGQgcHJvdmlkZSBhZGRpdGlvbmFsIGluc2lnaHRzIGludG8gdGhlIGN1cnJlbnQgcHJvYmxlbS4gVGltZSB0byBkaXZlIGJhY2sgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBpbmV0cGVlcl9hZGRyIFthLXpBLVowLTlfXSYjNDM7LCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfbWV0cmljcy5jPTI0OT1zdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICpfX3RjcF9nZXRfbWV0cmljc19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjUyLVx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0bTtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MjUzOlx0c3RydWN0IGluZXRwZWVyX2FkZHIgc2FkZHIsIGRhZGRyO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yNTQtXHR1bnNpZ25lZCBpbnQgaGFzaDtcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTI5MT1zdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0Y3BfZ2V0X21ldHJpY3Moc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjk1LVx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0bTtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6Mjk2Olx0c3RydWN0IGluZXRwZWVyX2FkZHIgc2FkZHIsIGRhZGRyO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yOTctXHR1bnNpZ25lZCBpbnQgaGFzaDtcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTg0Mj1zdGF0aWMgaW50IHRjcF9tZXRyaWNzX25sX2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTg0NC1cdHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG07XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjg0NTpcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODQ2LVx0dW5zaWduZWQgaW50IGhhc2g7XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz05Mjg9c3RhdGljIGludCB0Y3BfbWV0cmljc19ubF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy05MzItXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgX19yY3UgKipwcDtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6OTMzOlx0c3RydWN0IGluZXRwZWVyX2FkZHIgc2FkZHIsIGRhZGRyO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYy05MzQtXHR1bnNpZ25lZCBpbnQgaGFzaDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NzQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgTmV0d29yayBJbnRlcmZhY2UgTWV0cmljcyBSZXRyaWV2YWwgYW5kIERlbGV0aW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgVENQIG1ldHJpY3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHRjcF9tZXRyaWNzX25sX2NtZF9nZXRgIGFuZCBgdGNwX21ldHJpY3NfbmxfY21kX2RlbGAgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHdlJiMzOTtyZSByZXRyaWV2aW5nIHRoZSBuZXR3b3JrIGluZm9ybWF0aW9uIGFuZCBob3cgd2UgYXJlIGRlbGV0aW5nIGl0LiBJIHdhbnQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgZWRnZSBjYXNlcyBhcmUsIHdoZXJlIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3MgbWlnaHQgYmUsIGFuZCB3aGV0aGVyIG91ciBlcnJvciBoYW5kbGluZyBpcyByb2J1c3QgZW5vdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBhbnkgb2J2aW91cyBpbmVmZmljaWVuY2llcywgZXNwZWNpYWxseSBnaXZlbiB0aGUgc2NhbGUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX21ldHJpY3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg0MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODQyOlx0c3RhdGljIGludCB0Y3BfbWV0cmljc19ubF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gODQzOlx0e1xuIDg0NDpcdFx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0bTtcbiA4NDU6XHRcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcbiA4NDY6XHRcdHVuc2lnbmVkIGludCBoYXNoO1xuIDg0NzpcdFx0c3RydWN0IHNrX2J1ZmYgKm1zZztcbiA4NDg6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGdlbmxfaW5mb19uZXQoaW5mbyk7XG4gODQ5Olx0XHR2b2lkICpyZXBseTtcbiA4NTA6XHRcdGludCByZXQ7XG4gODUxOlx0XHRib29sIHNyYyA9IHRydWU7XG4gODUyOlx0XG4gODUzOlx0XHRyZXQgPSBwYXJzZV9ubF9hZGRyKGluZm8sIFx1MDAyNmRhZGRyLCBcdTAwMjZoYXNoLCAwKTtcbiA4NTQ6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gODU1Olx0XHRcdHJldHVybiByZXQ7XG4gODU2Olx0XG4gODU3Olx0XHRyZXQgPSBwYXJzZV9ubF9zYWRkcihpbmZvLCBcdTAwMjZzYWRkcik7XG4gODU4Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDg1OTpcdFx0XHRzcmMgPSBmYWxzZTtcbiA4NjA6XHRcbiA4NjE6XHRcdG1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xuIDg2MjpcdFx0aWYgKCFtc2cpXG4gODYzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDg2NDpcdFxuIDg2NTpcdFx0cmVwbHkgPSBnZW5sbXNnX3B1dF9yZXBseShtc2csIGluZm8sIFx1MDAyNnRjcF9tZXRyaWNzX25sX2ZhbWlseSwgMCxcbiA4NjY6XHRcdFx0XHRcdCAgaW5mby1cdTAwM2VnZW5saGRyLVx1MDAzZWNtZCk7XG4gODY3Olx0XHRpZiAoIXJlcGx5KVxuIDg2ODpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA4Njk6XHRcbiA4NzA6XHRcdGhhc2ggXj0gbmV0X2hhc2hfbWl4KG5ldCk7XG4gODcxOlx0XHRoYXNoID0gaGFzaF8zMihoYXNoLCB0Y3BfbWV0cmljc19oYXNoX2xvZyk7XG4gODcyOlx0XHRyZXQgPSAtRVNSQ0g7XG4gODczOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gODc0Olx0XHRmb3IgKHRtID0gcmN1X2RlcmVmZXJlbmNlKHRjcF9tZXRyaWNzX2hhc2hbaGFzaF0uY2hhaW4pOyB0bTtcbiA4NzU6XHRcdCAgICAgdG0gPSByY3VfZGVyZWZlcmVuY2UodG0tXHUwMDNldGNwbV9uZXh0KSkge1xuIDg3NjpcdFx0XHRpZiAoYWRkcl9zYW1lKFx1MDAyNnRtLVx1MDAzZXRjcG1fZGFkZHIsIFx1MDAyNmRhZGRyKSBcdTAwMjZcdTAwMjZcbiA4Nzc6XHRcdFx0ICAgICghc3JjIHx8IGFkZHJfc2FtZShcdTAwMjZ0bS1cdTAwM2V0Y3BtX3NhZGRyLCBcdTAwMjZzYWRkcikpIFx1MDAyNlx1MDAyNlxuIDg3ODpcdFx0XHQgICAgbmV0X2VxKHRtX25ldCh0bSksIG5ldCkpIHtcbiA4Nzk6XHRcdFx0XHRyZXQgPSB0Y3BfbWV0cmljc19maWxsX2luZm8obXNnLCB0bSk7XG4gODgwOlx0XHRcdFx0YnJlYWs7XG4gODgxOlx0XHRcdH1cbiA4ODI6XHRcdH1cbiA4ODM6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDg4NDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA4ODU6XHRcdFx0Z290byBvdXRfZnJlZTtcbiA4ODY6XHRcbiA4ODc6XHRcdGdlbmxtc2dfZW5kKG1zZywgcmVwbHkpO1xuIDg4ODpcdFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTtcbiA4ODk6XHRcbiA4OTA6XHRubGFfcHV0X2ZhaWx1cmU6XG4gODkxOlx0XHRyZXQgPSAtRU1TR1NJWkU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTg3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipUaW1lIHRvIEV4YW1pbmUgVGhvc2UgQWRkcmVzcyBQYXJzZXJzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdGFrZSBhIGZyZXNoIGxvb2sgYXQgYHBhcnNlX25sX2FkZHJgIGFuZCBgcGFyc2Vfbmxfc2FkZHJgLiBJJiMzOTt2ZSB3b3JrZWQgd2l0aCBudW1lcm91cyBhZGRyZXNzIHBhcnNpbmcgcm91dGluZXMgb3ZlciB0aGUgeWVhcnMsIGFuZCBldmVuIHdpdGggcm9idXN0IGxpYnJhcmllcywgaXQmIzM5O3MgYWx3YXlzIGNydWNpYWwgdG8gcmV2aXNpdCB0aGUgdW5kZXJseWluZyBsb2dpYy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGVzZSBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9ucyBhcmUgc3RpbGwgcGVyZm9ybWluZyBvcHRpbWFsbHksIGhhbmRsaW5nIGVkZ2UgY2FzZXMgY29ycmVjdGx5LCBhbmQgYXJlbiYjMzk7dCBpbnRyb2R1Y2luZyBhbnkgc3VidGxlIGJ1Z3MgSSYjMzk7dmUgbWlzc2VkIHByZXZpb3VzbHkuIFRoZXJlIGFyZSBhbHdheXMgaW1wcm92ZW1lbnRzIHRvIGJlIG1hZGUsIGFuZCBnaXZlbiB0aGUgaW1wb3J0YW5jZSBvZiBhY2N1cmF0ZSBhZGRyZXNzIGludGVycHJldGF0aW9uIGluIHRoaXMgc3lzdGVtLCB0aG9yb3VnaG5lc3MgaXMga2V5LiBBIHJvdXRpbmUgcmVmcmVzaCB3aWxsIGRvIHVzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX21ldHJpY3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODAyOlx0c3RhdGljIGludCBfX3BhcnNlX25sX2FkZHIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGluZXRwZWVyX2FkZHIgKmFkZHIsXG4gODAzOlx0XHRcdFx0ICAgdW5zaWduZWQgaW50ICpoYXNoLCBpbnQgb3B0aW9uYWwsIGludCB2NCwgaW50IHY2KVxuIDgwNDpcdHtcbiA4MDU6XHRcdHN0cnVjdCBubGF0dHIgKmE7XG4gODA2Olx0XG4gODA3Olx0XHRhID0gaW5mby1cdTAwM2VhdHRyc1t2NF07XG4gODA4Olx0XHRpZiAoYSkge1xuIDgwOTpcdFx0XHRpbmV0cGVlcl9zZXRfYWRkcl92NChhZGRyLCBubGFfZ2V0X2luX2FkZHIoYSkpO1xuIDgxMDpcdFx0XHRpZiAoaGFzaClcbiA4MTE6XHRcdFx0XHQqaGFzaCA9IGlwdjRfYWRkcl9oYXNoKGluZXRwZWVyX2dldF9hZGRyX3Y0KGFkZHIpKTtcbiA4MTI6XHRcdFx0cmV0dXJuIDA7XG4gODEzOlx0XHR9XG4gODE0Olx0XHRhID0gaW5mby1cdTAwM2VhdHRyc1t2Nl07XG4gODE1Olx0XHRpZiAoYSkge1xuIDgxNjpcdFx0XHRzdHJ1Y3QgaW42X2FkZHIgaW42O1xuIDgxNzpcdFxuIDgxODpcdFx0XHRpbjYgPSBubGFfZ2V0X2luNl9hZGRyKGEpO1xuIDgxOTpcdFx0XHRpbmV0cGVlcl9zZXRfYWRkcl92NihhZGRyLCBcdTAwMjZpbjYpO1xuIDgyMDpcdFx0XHRpZiAoaGFzaClcbiA4MjE6XHRcdFx0XHQqaGFzaCA9IGlwdjZfYWRkcl9oYXNoKGluZXRwZWVyX2dldF9hZGRyX3Y2KGFkZHIpKTtcbiA4MjI6XHRcdFx0cmV0dXJuIDA7XG4gODIzOlx0XHR9XG4gODI0Olx0XHRyZXR1cm4gb3B0aW9uYWwgPyAxIDogLUVBRk5PU1VQUE9SVDtcbiA4MjU6XHR9XG4gODI2Olx0XG4gODI3Olx0c3RhdGljIGludCBwYXJzZV9ubF9hZGRyKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBpbmV0cGVlcl9hZGRyICphZGRyLFxuIDgyODpcdFx0XHRcdCB1bnNpZ25lZCBpbnQgKmhhc2gsIGludCBvcHRpb25hbClcbiA4Mjk6XHR7XG4gODMwOlx0XHRyZXR1cm4gX19wYXJzZV9ubF9hZGRyKGluZm8sIGFkZHIsIGhhc2gsIG9wdGlvbmFsLFxuIDgzMTpcdFx0XHRcdCAgICAgICBUQ1BfTUVUUklDU19BVFRSX0FERFJfSVBWNCxcbiA4MzI6XHRcdFx0XHQgICAgICAgVENQX01FVFJJQ1NfQVRUUl9BRERSX0lQVjYpO1xuIDgzMzpcdH1cbiA4MzQ6XHRcbiA4MzU6XHRzdGF0aWMgaW50IHBhcnNlX25sX3NhZGRyKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBpbmV0cGVlcl9hZGRyICphZGRyKVxuIDgzNjpcdHtcbiA4Mzc6XHRcdHJldHVybiBfX3BhcnNlX25sX2FkZHIoaW5mbywgYWRkciwgTlVMTCwgMCxcbiA4Mzg6XHRcdFx0XHQgICAgICAgVENQX01FVFJJQ1NfQVRUUl9TQUREUl9JUFY0LFxuIDgzOTpcdFx0XHRcdCAgICAgICBUQ1BfTUVUUklDU19BVFRSX1NBRERSX0lQVjYpO1xuIDg0MDpcdH1cbiA4NDE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBNZW1vcnkgU2FmZXR5IElzc3VlcyBpbiBBZGRyZXNzIENvbXBhcmlzb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgcGFyc2VfbmxfYWRkcmAgaGFuZGxlcyBuZXR3b3JrIGFkZHJlc3Nlcy4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBpbml0aWFsaXppbmcgdGhlIGBhZGRyYCBzdHJ1Y3R1cmUsIGVpdGhlciBhcyBJUHY0IG9yIElQdjYsIHVzaW5nIGZ1bmN0aW9ucyBsaWtlIGBpbmV0cGVlcl9zZXRfYWRkcl92NGAgb3IgYGluZXRwZWVyX3NldF9hZGRyX3Y2YC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGx1cmtpbmcgaW4gdGhpcyBwcm9jZXNzPyBJIG1lYW4sIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvbXBhcmluZyBhZGRyZXNzZXMsIGFuZCB0aGF0IGhhcyB0byBiZSByb2NrIHNvbGlkLgoKVGhlIG5leHQgc3RlcCBpcyB0aGUgYGFkZHJfc2FtZWAgZnVuY3Rpb24sIHdoaWNoLCBJIHByZXN1bWUsIGlzIHRoZSBvbmUgYWN0dWFsbHkgZG9pbmcgdGhlIGNvbXBhcmlzb24uIEdvb2QsIGl0IHV0aWxpemVzIGBpbmV0cGVlcl9hZGRyX2NtcGAgZm9yIHRoZSBsb3ctbGV2ZWwgYml0LWJ5LWJpdCBjb21wYXJpc29uLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLCBhbmQgaXQgbWVhbnMgdGhlIGNvbXBhcmlzb24gb25seSBsb29rcyBhdCB0aGUgaW5pdGlhbGl6ZWQgYnl0ZXMuIFNvLCB0aGF0JiMzOTtzIGJldHRlciwgYnV0IGxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nLi4uCgpPa2F5LCBob2xkIG9uLCBJIG5lZWQgdG8gem9vbSBvdXQgYSBiaXQuIFdoYXQgYWJvdXQgdGhlIGluZm9ybWF0aW9uIHVzZWQgZm9yIFRDUCBtZXRyaWNzLCBsaWtlIGluIGB0Y3BfbWV0cmljc19maWxsX2luZm9gPyBEb2VzICp0aGF0KiBmdW5jdGlvbiBjb3B5IHRoZSBgc3RydWN0IGluZXRwZWVyX2FkZHJgIHRvIHVzZXIgc3BhY2U/IElmIHNvLCB3ZSYjMzk7cmUgYmFjayB0byBzcXVhcmUgb25lLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoYXQgY29kZSBwYXRoIHZlcnkgY2FyZWZ1bGx5IGZvciBwb3RlbnRpYWwgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoYXQgY291bGQgYmUgYSBjcml0aWNhbCB2dWxuZXJhYmlsaXR5LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHRyYWNlIHRoZSBkYXRhIGZsb3cgdG8gZW5zdXJlIHdlJiMzOTtyZSBzYWZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9tZXRyaWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5MDpcdFx0XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA2OTE6XHRcdFx0XHRcdG4mIzQzOyYjNDM7O1xuIDY5MjpcdFx0XHRcdFx0dmFsID0gbWF4KHZhbCAvIDEwMDAsIDFVKTtcbiA2OTM6XHRcdFx0XHR9XG4gNjk0Olx0XHRcdFx0aWYgKGkgPT0gVENQX01FVFJJQ19SVFRWQVIpIHtcbiA2OTU6XHRcdFx0XHRcdGlmIChubGFfcHV0X3UzMihtc2csIFRDUF9NRVRSSUNfUlRUVkFSX1VTICYjNDM7IDEsXG4gNjk2Olx0XHRcdFx0XHRcdFx0dmFsKSBcdTAwM2MgMClcbiA2OTc6XHRcdFx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gNjk4Olx0XHRcdFx0XHRuJiM0MzsmIzQzOztcbiA2OTk6XHRcdFx0XHRcdHZhbCA9IG1heCh2YWwgLyAxMDAwLCAxVSk7XG4gNzAwOlx0XHRcdFx0fVxuIDcwMTpcdFx0XHRcdGlmIChubGFfcHV0X3UzMihtc2csIGkgJiM0MzsgMSwgdmFsKSBcdTAwM2MgMClcbiA3MDI6XHRcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDcwMzpcdFx0XHRcdG4mIzQzOyYjNDM7O1xuIDcwNDpcdFx0XHR9XG4gNzA1Olx0XHRcdGlmIChuKVxuIDcwNjpcdFx0XHRcdG5sYV9uZXN0X2VuZChtc2csIG5lc3QpO1xuIDcwNzpcdFx0XHRlbHNlXG4gNzA4Olx0XHRcdFx0bmxhX25lc3RfY2FuY2VsKG1zZywgbmVzdCk7XG4gNzA5Olx0XHR9XG4gNzEwOlx0XG4gNzExOlx0XHR7XG4gNzEyOlx0XHRcdHN0cnVjdCB0Y3BfZmFzdG9wZW5fbWV0cmljcyB0Zm9tX2NvcHlbMV0sICp0Zm9tO1xuIDcxMzpcdFx0XHR1bnNpZ25lZCBpbnQgc2VxO1xuIDcxNDpcdFxuIDcxNTpcdFx0XHRkbyB7XG4gNzE2Olx0XHRcdFx0c2VxID0gcmVhZF9zZXFiZWdpbihcdTAwMjZmYXN0b3Blbl9zZXFsb2NrKTtcbiA3MTc6XHRcdFx0XHR0Zm9tX2NvcHlbMF0gPSB0bS1cdTAwM2V0Y3BtX2Zhc3RvcGVuO1xuIDcxODpcdFx0XHR9IHdoaWxlIChyZWFkX3NlcXJldHJ5KFx1MDAyNmZhc3RvcGVuX3NlcWxvY2ssIHNlcSkpO1xuIDcxOTpcdFxuIDcyMDpcdFx0XHR0Zm9tID0gdGZvbV9jb3B5O1xuIDcyMTpcdFx0XHRpZiAodGZvbS1cdTAwM2Vtc3MgXHUwMDI2XHUwMDI2XG4gNzIyOlx0XHRcdCAgICBubGFfcHV0X3UxNihtc2csIFRDUF9NRVRSSUNTX0FUVFJfRk9QRU5fTVNTLFxuIDcyMzpcdFx0XHRcdFx0dGZvbS1cdTAwM2Vtc3MpIFx1MDAzYyAwKVxuIDcyNDpcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDcyNTpcdFx0XHRpZiAodGZvbS1cdTAwM2VzeW5fbG9zcyBcdTAwMjZcdTAwMjZcbiA3MjY6XHRcdFx0ICAgIChubGFfcHV0X3UxNihtc2csIFRDUF9NRVRSSUNTX0FUVFJfRk9QRU5fU1lOX0RST1BTLFxuIDcyNzpcdFx0XHRcdFx0dGZvbS1cdTAwM2VzeW5fbG9zcykgXHUwMDNjIDAgfHxcbiA3Mjg6XHRcdFx0ICAgICBubGFfcHV0X21zZWNzKG1zZywgVENQX01FVFJJQ1NfQVRUUl9GT1BFTl9TWU5fRFJPUF9UUyxcbiA3Mjk6XHRcdFx0XHRcdGppZmZpZXMgLSB0Zm9tLVx1MDAzZWxhc3Rfc3luX2xvc3MsXG4gNzMwOlx0XHRcdFx0XHRUQ1BfTUVUUklDU19BVFRSX1BBRCkgXHUwMDNjIDApKVxuIDczMTpcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDczMjpcdFx0XHRpZiAodGZvbS1cdTAwM2Vjb29raWUubGVuIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuIDczMzpcdFx0XHQgICAgbmxhX3B1dChtc2csIFRDUF9NRVRSSUNTX0FUVFJfRk9QRU5fQ09PS0lFLFxuIDczNDpcdFx0XHRcdCAgICB0Zm9tLVx1MDAzZWNvb2tpZS5sZW4sIHRmb20tXHUwMDNlY29va2llLnZhbCkgXHUwMDNjIDApXG4gNzM1Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gNzM2Olx0XHR9XG4gNzM3Olx0XG4gNzM4Olx0XHRyZXR1cm4gMDtcbiA3Mzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGB0Y3BfbWV0cmljc19maWxsX2luZm9gKioKCk9rYXksIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgdGhvcm91Z2ggbG9vayBhdCB0aGUgYHRjcF9tZXRyaWNzX2ZpbGxfaW5mb2AgZnVuY3Rpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgYWx3YXlzIG9uIHRoZSBmdW5jdGlvbiYjMzk7cyBlbnRyeSBwb2ludCwgdW5kZXJzdGFuZGluZyBpdHMgaW1tZWRpYXRlIGlucHV0cyBhbmQgaW50ZW5kZWQgcHVycG9zZS4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBzaWduYXR1cmUsIGFudGljaXBhdGluZyBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCwgYW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgZGVzaWduZWQgdG8gKmRvKi4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBjb3JlIHJlc3BvbnNpYmlsaXR5IG9mIHRoaXMgcm91dGluZS4gSXMgaXQgc2ltcGx5IGNvbGxlY3RpbmcgZGF0YT8gSXMgaXQgcGVyZm9ybWluZyBjYWxjdWxhdGlvbnM/IElzIGl0IHdyaXRpbmcgdG8gc29tZSBzaGFyZWQgbWVtb3J5IG9yIGFuIG91dHB1dCBidWZmZXI/IFRoZSBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyBpdCBkZWFscyB3aXRoIFRDUCBtZXRyaWNzLCBzbyBJJiMzOTttIGV4cGVjdGluZyBwZXJmb3JtYW5jZSBkYXRhLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGUgKmNvbnRleHQqIG9mIHRob3NlIG1ldHJpY3MuIElzIGl0IGNvbm5lY3Rpb24tc3BlY2lmaWM/IFN5c3RlbS13aWRlPyBGbG93LWJhc2VkPyBHcmFzcGluZyB0aGlzIGNvbnRleHQgZnJvbSB0aGUgb3V0c2V0IHdpbGwgc2hhcGUgaG93IEkgYW5hbHl6ZSB0aGUgY29kZS4gSSYjMzk7bSBhbHJlYWR5IGZvcm1pbmcgaHlwb3RoZXNlcyBhYm91dCBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJlc3QsIGxpa2UgbG9ja2luZyBzdHJhdGVnaWVzLCBkYXRhIGFnZ3JlZ2F0aW9uLCBhbmQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyByZWxhdGVkIHRvIHRoZSBmcmVxdWVuY3kgb2YgaXRzIGV4ZWN1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfbWV0cmljcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NDA6XHQjZW5kaWZcbiA2NDE6XHR9O1xuIDY0MjpcdFxuIDY0MzpcdC8qIEFkZCBhdHRyaWJ1dGVzLCBjYWxsZXIgY2FuY2VscyBpdHMgaGVhZGVyIG9uIGZhaWx1cmUgKi9cbiA2NDQ6XHRzdGF0aWMgaW50IHRjcF9tZXRyaWNzX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxuIDY0NTpcdFx0XHRcdFx0IHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG0pXG4gNjQ2Olx0e1xuIDY0NzpcdFx0c3RydWN0IG5sYXR0ciAqbmVzdDtcbiA2NDg6XHRcdGludCBpO1xuIDY0OTpcdFxuIDY1MDpcdFx0c3dpdGNoICh0bS1cdTAwM2V0Y3BtX2RhZGRyLmZhbWlseSkge1xuIDY1MTpcdFx0Y2FzZSBBRl9JTkVUOlxuIDY1MjpcdFx0XHRpZiAobmxhX3B1dF9pbl9hZGRyKG1zZywgVENQX01FVFJJQ1NfQVRUUl9BRERSX0lQVjQsXG4gNjUzOlx0XHRcdFx0XHQgICAgaW5ldHBlZXJfZ2V0X2FkZHJfdjQoXHUwMDI2dG0tXHUwMDNldGNwbV9kYWRkcikpIFx1MDAzYyAwKVxuIDY1NDpcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDY1NTpcdFx0XHRpZiAobmxhX3B1dF9pbl9hZGRyKG1zZywgVENQX01FVFJJQ1NfQVRUUl9TQUREUl9JUFY0LFxuIDY1NjpcdFx0XHRcdFx0ICAgIGluZXRwZWVyX2dldF9hZGRyX3Y0KFx1MDAyNnRtLVx1MDAzZXRjcG1fc2FkZHIpKSBcdTAwM2MgMClcbiA2NTc6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA2NTg6XHRcdFx0YnJlYWs7XG4gNjU5Olx0XHRjYXNlIEFGX0lORVQ2OlxuIDY2MDpcdFx0XHRpZiAobmxhX3B1dF9pbjZfYWRkcihtc2csIFRDUF9NRVRSSUNTX0FUVFJfQUREUl9JUFY2LFxuIDY2MTpcdFx0XHRcdFx0ICAgICBpbmV0cGVlcl9nZXRfYWRkcl92NihcdTAwMjZ0bS1cdTAwM2V0Y3BtX2RhZGRyKSkgXHUwMDNjIDApXG4gNjYyOlx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gNjYzOlx0XHRcdGlmIChubGFfcHV0X2luNl9hZGRyKG1zZywgVENQX01FVFJJQ1NfQVRUUl9TQUREUl9JUFY2LFxuIDY2NDpcdFx0XHRcdFx0ICAgICBpbmV0cGVlcl9nZXRfYWRkcl92NihcdTAwMjZ0bS1cdTAwM2V0Y3BtX3NhZGRyKSkgXHUwMDNjIDApXG4gNjY1Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gNjY2Olx0XHRcdGJyZWFrO1xuIDY2NzpcdFx0ZGVmYXVsdDpcbiA2Njg6XHRcdFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XG4gNjY5Olx0XHR9XG4gNjcwOlx0XG4gNjcxOlx0XHRpZiAobmxhX3B1dF9tc2Vjcyhtc2csIFRDUF9NRVRSSUNTX0FUVFJfQUdFLFxuIDY3MjpcdFx0XHRcdCAgamlmZmllcyAtIFJFQURfT05DRSh0bS1cdTAwM2V0Y3BtX3N0YW1wKSxcbiA2NzM6XHRcdFx0XHQgIFRDUF9NRVRSSUNTX0FUVFJfUEFEKSBcdTAwM2MgMClcbiA2NzQ6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gNjc1Olx0XG4gNjc2Olx0XHR7XG4gNjc3Olx0XHRcdGludCBuID0gMDtcbiA2Nzg6XHRcbiA2Nzk6XHRcdFx0bmVzdCA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhtc2csIFRDUF9NRVRSSUNTX0FUVFJfVkFMUyk7XG4gNjgwOlx0XHRcdGlmICghbmVzdClcbiA2ODE6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA2ODI6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVENQX01FVFJJQ19NQVhfS0VSTkVMICYjNDM7IDE7IGkmIzQzOyYjNDM7KSB7XG4gNjgzOlx0XHRcdFx0dTMyIHZhbCA9IHRjcF9tZXRyaWNfZ2V0KHRtLCBpKTtcbiA2ODQ6XHRcbiA2ODU6XHRcdFx0XHRpZiAoIXZhbClcbiA2ODY6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDY4NzpcdFx0XHRcdGlmIChpID09IFRDUF9NRVRSSUNfUlRUKSB7XG4gNjg4Olx0XHRcdFx0XHRpZiAobmxhX3B1dF91MzIobXNnLCBUQ1BfTUVUUklDX1JUVF9VUyAmIzQzOyAxLFxuIDY4OTpcdFx0XHRcdFx0XHRcdHZhbCkgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzAxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTgzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmUgaW4gYGluZXRwZWVyX2FkZHJgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgaG93IGBpbmV0cGVlcl9nZXRfYWRkcl92NGAgb25seSBjb3BpZXMgcGFydCBvZiBgc3RydWN0IGluZXRwZWVyX2FkZHJgLCBzcGVjaWZpY2FsbHkgYGE0LmFkZHJgLCBhcyBpdCByZXR1cm5zIGEgYF9fYmUzMmAuIEhvd2V2ZXIsIHRoZSBjb2RlIHNuaXBwZXQgZnJvbSB0aGUgcGF0Y2ggcmV2ZWFscyBhIGRpZmZlcmVudCBzY2VuYXJpby4gYHAtJmd0O2RhZGRyID0gKmRhZGRyO2AgY29waWVzIHRoZSAqZW50aXJlKiBgc3RydWN0IGluZXRwZWVyX2FkZHJgLCB3aGljaCBpbmNsdWRlcyBwYWRkaW5nIGFuZCBhIHVuaW9uLCBwb3RlbnRpYWxseSBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIGJ5dGVzLgoKTXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEgbGVha3MgdG8gdXNlciBzcGFjZS4gIEkgbmVlZCB0byBhc2NlcnRhaW4gaWYgYHAtJmd0O2RhZGRyYCBvciB0aGUgZW5jbG9zaW5nIGBzdHJ1Y3QgaW5ldF9wZWVyYCBhcmUgZXZlciBjb3BpZWQgb3V0c2lkZSB0aGUga2VybmVsLiAgVGhlIGNvbmNsdXNpb24sIHRoYW5rZnVsbHksIGlzIHRoYXQgYHN0cnVjdCBpbmV0X3BlZXJgIGlzIGludGVybmFsIHRvIHRoZSBrZXJuZWwmIzM5O3MgSVAgcGVlciB0cmFja2luZyBzeXN0ZW0gKHVzZWQsIGUuZy4sIGZvciBJUCBJRCBnZW5lcmF0aW9uIGFuZCByb3V0aW5nIG1ldHJpY3MpIGFuZCBpcyAqbm90KiBleHBvc2VkIHRvIHVzZXIgc3BhY2UgZGlyZWN0bHkuCgpPa2F5LCBzbyBub3QgZGlyZWN0bHkgZXhwb3NlZC4gV2hhdCBhYm91dCB0aGUgcHJvY2Vzc2luZyB3aXRoaW4gdGhlIGtlcm5lbD8gSXMgYHAtJmd0O2RhZGRyYCBoYXNoZWQsIGNvbXBhcmVkLCBvciBvdGhlcndpc2UgdXNlZCBpbiBhIHdheSB0aGF0IHdvdWxkIG1ha2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbWF0aWM/ICBUaGUgYHAtJmd0O2RhZGRyYCBpcyBub3QgZGlyZWN0bHkgaGFzaGVkLiBJbnN0ZWFkLCBhIHByZWNvbXB1dGVkIGhhc2ggYHAtJmd0O2hhc2hgIGlzIHN0b3JlZC4KClRoZSBjcml0aWNhbCBjb21wYXJpc29uIHBvaW50IGlzIGBpbmV0cGVlcl9lbnRyeV9jbXBgLiAgVGhlIGZ1bmN0aW9uIGZpcnN0IGNvbXBhcmVzIHByZWNvbXB1dGVkIGhhc2hlcy4gSWYgdGhvc2UgbWF0Y2gsIGBpbmV0cGVlcl9hZGRyX2NtcGAgaXMgY2FsbGVkLiBOb3csIGBpbmV0cGVlcl9hZGRyX2NtcGAgb25seSBjb21wYXJlcyB0aGUgKmluaXRpYWxpemVkKiBieXRlcyBvZiBgZGFkZHJgLCBtZWFuaW5nIHRob3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSB0aGUgcGFkZGluZyBvciB0aGUgdW5pb24gc2hvdWxkIG5vdCBiZSBwcm9ibGVtYXRpYyBpbiBhIGNvbXBhcmlzb24uCgpIb3dldmVyLCBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBpbmV0cGVlcl9hZGRyYCBpdHNlbGYuIFRoZSBgaW5ldHBlZXJfYWRkcl9oYXNoYCBmdW5jdGlvbiB1dGlsaXplcyB0aGUgYGE0LnZpZmAgZmllbGQgKGFtb25nIG90aGVyIGZpZWxkcykgd2hlbiBgQUZfSU5FVGAgaXMgdXNlZC4gSSBhbSBjaGVja2luZyB0aGUgZnVuY3Rpb24gY2FsbHMgdG8gYGluZXRfZ2V0cGVlcl92NGAgYW5kIGBpbmV0cGVlcl9zZXRfYWRkcl92NGAgd2hlcmUgdGhlIGBzdHJ1Y3QgaW5ldHBlZXJfYWRkcmAgaXMgc2V0LiBUaGUgdmFsdWUgb2YgYGE0LnZpZmAgaXMgc2V0IGluIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zLiBTbywgdGhhdCYjMzk7cyBub3QgYSBjb25jZXJuLgoKTm93LCBsZXQmIzM5O3MgZXhwbG9yZSBvdGhlciBjb2RlIHBhdGhzIGludm9sdmluZyBgc3RydWN0IGluZXRwZWVyX2FkZHJgLiBJJiMzOTt2ZSByZXZpc2l0ZWQgYG5ldC9pcHY0L3RjcF9tZXRyaWNzLmNgIHRvIGV4YW1pbmUgaG93IGBzdHJ1Y3QgaW5ldHBlZXJfYWRkcmAgaXMgY3JlYXRlZCBhbmQgdXNlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBUQ1AgbWV0cmljcy4gRnVuY3Rpb25zIGxpa2UgYF9fdGNwX2dldF9tZXRyaWNzX3JlcWAsIGB0Y3BfZ2V0X21ldHJpY3NgLCBgdGNwX21ldHJpY3NfbmxfY21kX2dldGAsIGFuZCBgdGNwX21ldHJpY3NfbmxfY21kX2RlbGAgYXJlIHJlbGV2YW50IGhlcmUuIEkmIzM5O3ZlIGZvdW5kIHRob3NlIGZ1bmN0aW9ucyBpbml0aWFsaXplIGBzdHJ1Y3QgaW5ldHBlZXJfYWRkcmAgdXNpbmcgYGluZXRwZWVyX3NldF9hZGRyX3Y0YCBvciBgaW5ldHBlZXJfc2V0X2FkZHJfdjZgLiBTbywgdGhlIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgaW4gdGhlIHN0YW5kYXJkIGNvZGUgcGF0aHMuCgpIb3dldmVyLCB0aGUgYW5hbHlzaXMgb2YgYHRjcF9tZXRyaWNzX25sX2NtZF9nZXRgIGFuZCBgdGNwX21ldHJpY3NfbmxfY21kX2RlbGAgcmV2ZWFscyBhIHBvdGVudGlhbCBpc3N1ZS4gVGhlIGZ1bmN0aW9uIGBwYXJzZV9ubF9zYWRkcmAgaW5pdGlhbGl6ZXMgYHNhZGRyYC4gQSBmYWlsdXJlIG9mIGBwYXJzZV9ubF9zYWRkcmAgY2FuIGxlYWQgdG8gYW4gdW5pbml0aWFsaXplZCBgc2FkZHJgLiBJdCBpcyB0aGVuIHVzZWQgaW4gYSBjb21wYXJpc29uIHdpdGhpbiBhIGxvb3AsIGJ1dCB0aGUgY29kZSBjb3JyZWN0bHkgc2hvcnQtY2lyY3VpdHMgdGhlIGNvbXBhcmlzb24gaWYgdGhlIGBzYWRkcmAgdmFsdWUgaXMgbm90IGluaXRpYWxpemVkLCBwcmV2ZW50aW5nIGEgcmVhZCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCBpcyBhIHJlbGllZi4KClRoZXJlZm9yZSwgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIEkmIzM5O3ZlIGNvbmNsdWRlZCB0aGVyZSYjMzk7cyBubyBwYXRoIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gYHN0cnVjdCBpbmV0cGVlcl9hZGRyYCBjYW4gYmUgbGVha2VkIHRvIHVzZXIgc3BhY2Ugb3IgY2F1c2UgYSBrZXJuZWwgdnVsbmVyYWJpbGl0eS4gVGhlIHBhZGRpbmcgYW5kIHVuaW9uIHdpdGhpbiB0aGUgc3RydWN0LCB3aGlsZSB0ZWNobmljYWxseSB1bmluaXRpYWxpemVkIGR1cmluZyBjb3B5LCBhcmUgc2FmZWx5IGhhbmRsZWQgYnkgc3Vic2VxdWVudCBjb2RlIHRoYXQgZWl0aGVyIGF2b2lkcyB0aGVpciB1c2Ugb3IgZW5zdXJlcyBwcm9wZXIgaW5pdGlhbGl6YXRpb24gYmVmb3JlIHVzYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaW5ldHBlZXJfYWRkciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pbmV0cGVlci5oPTIwPXN0cnVjdCBpcHY0X2FkZHJfa2V5IHtcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTI2LVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoyNzpzdHJ1Y3QgaW5ldHBlZXJfYWRkciB7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTI4LVx0dW5pb24ge1xuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg9MzY9c3RydWN0IGluZXRfcGVlciB7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0zOC1cdHU2NFx0XHRcdGhhc2g7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjM5Olx0c3RydWN0IGluZXRwZWVyX2FkZHJcdGRhZGRyO1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC00MC1cbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oPTcwPXZvaWQgaW5ldF9pbml0cGVlcnModm9pZCkgX19pbml0O1xuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtNzMtXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjc0OnN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0cGVlcl9zZXRfYWRkcl92NChzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIsIF9fYmUzMiBpcClcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtNzUte1xuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtODAtXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjgxOnN0YXRpYyBpbmxpbmUgX19iZTMyIGluZXRwZWVyX2dldF9hZGRyX3Y0KHN0cnVjdCBpbmV0cGVlcl9hZGRyICppYWRkcilcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtODIte1xuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtODUtXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjg2OnN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0cGVlcl9zZXRfYWRkcl92NihzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIsXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTg3LVx0XHRcdFx0XHRzdHJ1Y3QgaW42X2FkZHIgKmluNilcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTkyLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDo5MzpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbjZfYWRkciAqaW5ldHBlZXJfZ2V0X2FkZHJfdjYoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyKVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC05NC17XG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD05OT1zdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMDA6XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcik7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwMS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg9MTAyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwNS17XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjEwNjpcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIGRhZGRyO1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDctXG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0xMTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjYoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTE2LXtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTE3Olx0c3RydWN0IGluZXRwZWVyX2FkZHIgZGFkZHI7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTExOC1cbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEyMy1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTI0OnN0YXRpYyBpbmxpbmUgaW50IGluZXRwZWVyX2FkZHJfY21wKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphLFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMjU6XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmIpXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEyNi17XG4tLVxubmV0L2lwdjQvaW5ldHBlZXIuYz01Nj1zdGF0aWMgc2lwaGFzaF9hbGlnbmVkX2tleV90IGluZXRwZWVyX2hhc2hfa2V5IF9fcmVhZF9tb3N0bHk7XG5uZXQvaXB2NC9pbmV0cGVlci5jLTU3LVxubmV0L2lwdjQvaW5ldHBlZXIuYzo1ODpzdGF0aWMgdTY0IGluZXRwZWVyX2FkZHJfaGFzaChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSlcbm5ldC9pcHY0L2luZXRwZWVyLmMtNTkte1xuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmM9NzE9c3RhdGljIGludCBpbmV0cGVlcl9lbnRyeV9jbXAodTY0IGRoYXNoLFxubmV0L2lwdjQvaW5ldHBlZXIuYzo3MjpcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG5uZXQvaXB2NC9pbmV0cGVlci5jLTczLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0X3BlZXIgKnApXG4tLVxubmV0L2lwdjQvaW5ldHBlZXIuYz05OT12b2lkIF9faW5pdCBpbmV0X2luaXRwZWVycyh2b2lkKVxuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmMtMTE0LS8qIENhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSBvciBiYXNlLVx1MDAzZWxvY2sgaGVsZCAqL1xubmV0L2lwdjQvaW5ldHBlZXIuYzoxMTU6c3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG5uZXQvaXB2NC9pbmV0cGVlci5jLTExNi1cdFx0XHRcdHU2NCBkaGFzaCxcbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jPTE5OT1zdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxubmV0L2lwdjQvaW5ldHBlZXIuYzoyMDA6XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcilcbm5ldC9pcHY0L2luZXRwZWVyLmMtMjAxLXtcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTIzLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoyNDpzdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICpfX3RjcF9nZXRfbWV0cmljcyhjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqc2FkZHIsXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI1Olx0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjYtXHRcdFx0XHRcdFx0ICAgc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgaGFzaCk7XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz00MT1zdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sge1xuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtNDMtXHRzdHJ1Y3QgbmV0XHRcdFx0KnRjcG1fbmV0O1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo0NDpcdHN0cnVjdCBpbmV0cGVlcl9hZGRyXHRcdHRjcG1fc2FkZHI7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjQ1Olx0c3RydWN0IGluZXRwZWVyX2FkZHJcdFx0dGNwbV9kYWRkcjtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtNDYtXHR1bnNpZ25lZCBsb25nXHRcdFx0dGNwbV9zdGFtcDtcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTc0PXN0YXRpYyB2b2lkIHRjcF9tZXRyaWNfc2V0KHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG0sXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODI6c3RhdGljIGJvb2wgYWRkcl9zYW1lKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphLFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo4MzpcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmIpXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTg0LXtcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTE2Mz1zdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0Y3BtX25ldyhzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjE2NDpcdFx0XHRcdFx0ICBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqc2FkZHIsXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjE2NTpcdFx0XHRcdFx0ICBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTE2Ni1cdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgaGFzaClcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTIyMj1zdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0Y3BfZ2V0X2VuY29kZShzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtLCBpbnQgZGVwdGgpXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yMzAtXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjIzMTpzdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICpfX3RjcF9nZXRfbWV0cmljcyhjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqc2FkZHIsXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjIzMjpcdFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTIzMy1cdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBoYXNoKVxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9MjQ5PXN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKl9fdGNwX2dldF9tZXRyaWNzX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yNTItXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoyNTM6XHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBzYWRkciwgZGFkZHI7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI1NC1cdHVuc2lnbmVkIGludCBoYXNoO1xuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9MjkxPXN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRjcF9nZXRfbWV0cmljcyhzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yOTUtXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoyOTY6XHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBzYWRkciwgZGFkZHI7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI5Ny1cdHVuc2lnbmVkIGludCBoYXNoO1xuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9NzY3PXN0YXRpYyBpbnQgdGNwX21ldHJpY3NfbmxfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODAxLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo4MDI6c3RhdGljIGludCBfX3BhcnNlX25sX2FkZHIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGluZXRwZWVyX2FkZHIgKmFkZHIsXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgwMy1cdFx0XHQgICB1bnNpZ25lZCBpbnQgKmhhc2gsIGludCBvcHRpb25hbCwgaW50IHY0LCBpbnQgdjYpXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MjYtXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjgyNzpzdGF0aWMgaW50IHBhcnNlX25sX2FkZHIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGluZXRwZWVyX2FkZHIgKmFkZHIsXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgyOC1cdFx0XHQgdW5zaWduZWQgaW50ICpoYXNoLCBpbnQgb3B0aW9uYWwpXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MzQtXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjgzNTpzdGF0aWMgaW50IHBhcnNlX25sX3NhZGRyKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBpbmV0cGVlcl9hZGRyICphZGRyKVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MzYte1xuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9ODQyPXN0YXRpYyBpbnQgdGNwX21ldHJpY3NfbmxfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODQ0LVx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0bTtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODQ1Olx0c3RydWN0IGluZXRwZWVyX2FkZHIgc2FkZHIsIGRhZGRyO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04NDYtXHR1bnNpZ25lZCBpbnQgaGFzaDtcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTkyOD1zdGF0aWMgaW50IHRjcF9tZXRyaWNzX25sX2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTkzMi1cdHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayBfX3JjdSAqKnBwO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo5MzM6XHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBzYWRkciwgZGFkZHI7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTkzNC1cdHVuc2lnbmVkIGludCBoYXNoO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU1OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmluaXRpYWxpemVkIEJ5dGVzIGluIGB0Y3BfbWV0cmljc19ibG9ja2AgLSBBIFF1aWNrIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGB0Y3BfbWV0cmljc19ibG9ja2Agc3RydWN0LCBhbmQgaXQmIzM5O3MgdXNpbmcgdGhlIGBpbmV0cGVlcl9hZGRyYCBzdHJ1Y3QgZm9yIGJvdGggc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMuIEhhbmcgb24sIHRoZSBgaW5ldHBlZXJfYWRkcmAgaXMgdXNlZCBpbiBhIGZldyBwbGFjZXMsIHNwZWNpZmljYWxseSwgaW5zaWRlIG9mIGB0Y3BfbWV0cmljc19ibG9ja2AsIGJ1dCBpZiBJIHJlY2FsbCwgYHRjcG1fbmV3YCBhbGxvY2F0ZXMgdGhlIGB0Y3BfbWV0cmljc19ibG9ja2AgYW5kIHRoZW4gY29waWVzIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBmcm9tIG90aGVyIHN0cnVjdHVyZXMuIFJpZ2h0LiBTbywgYHNhZGRyYCBhbmQgYGRhZGRyYCBhcmUgY29waWVkIGludG8gYHRjcG1fc2FkZHJgIGFuZCBgdGNwbV9kYWRkcmAsIGFuZCBpZiB0aG9zZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3Mgc3RydWN0dXJlcyBoYXZlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMsIHdvdWxkbiYjMzk7dCB0aGUgY29waWVzIGluaGVyaXQgdGhvc2UgdW5pbml0aWFsaXplZCB2YWx1ZXM/CgpUaGUgcXVlc3Rpb24gaXMsIGFyZSB0aGVzZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGJ5dGVzIGV2ZXIgZXhwb3NlZCB0byB1c2VyIHNwYWNlPyBJIHJlbWVtYmVyIHdlIGNoZWNrZWQgYHRjcF9tZXRyaWNzX2ZpbGxfaW5mb2AgZWFybGllciwgdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhlIG5ldGxpbmsgbWVzc2FnZS4gTG9va2luZyBhdCBpdCBhZ2FpbiwgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlIGBpbmV0cGVlcl9nZXRfYWRkcl92NGAgYW5kIGBpbmV0cGVlcl9nZXRfYWRkcl92NmAgZnVuY3Rpb25zLCBiYXNlZCBvbiB0aGUgYWRkcmVzcyBmYW1pbHksIHRvIHJldHJpZXZlIHRoZSBJUCBhZGRyZXNzZXMuIGBpbmV0cGVlcl9nZXRfYWRkcl92NGAgcmV0dXJucyBhIGBfX2JlMzJgLCBzbyBpdCYjMzk7cyBqdXN0IGNvcHlpbmcgdGhlIDQtYnl0ZSBJUHY0IGFkZHJlc3MsIHdoaWNoIHNob3VsZCBiZSBmaW5lLiAgTm93LCBgaW5ldHBlZXJfZ2V0X2FkZHJfdjZgLCB0aGF0IHJldHVybnMgYSBgc3RydWN0IGluNl9hZGRyICpgLiBUaGF0IGlzIDE2IGJ5dGVzLiBIbW1tLCBzbyBpdCYjMzk7cyBvbmx5IGNvcHlpbmcgdGhlIElQIGFkZHJlc3MgcG9ydGlvbiBvZiB0aGUgc3RydWN0dXJlLiBJIHRoaW5rIHRoYXQmIzM5O3Mgc2FmZSwgc2luY2UgaXQgZG9lc24mIzM5O3QgZXhwb3NlIGFueSBvZiB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSB2aWEgbmV0bGluay4KCkJ1dCB3YWl0LCB3aGF0IGFib3V0IGB0Y3BfbWV0cmljc19ubF9kdW1wYD8gIFRoYXQgZHVtcHMgdGhlIGJsb2NrIHZpYSBuZXRsaW5rIGFzIHdlbGwsIGFuZCB0aGVyZSYjMzk7cyBhIGNoYW5jZSBJIG1pZ2h0IGJlIG1pc3Npbmcgc29tZXRoaW5nIHRoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZnVuY3Rpb24gZG9lc24mIzM5O3QgZG8gYW55dGhpbmcgZGlmZmVyZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9tZXRyaWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc2NzpcdHN0YXRpYyBpbnQgdGNwX21ldHJpY3NfbmxfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDc2ODpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gNzY5Olx0e1xuIDc3MDpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbiA3NzE6XHRcdHVuc2lnbmVkIGludCBtYXhfcm93cyA9IDFVIFx1MDAzY1x1MDAzYyB0Y3BfbWV0cmljc19oYXNoX2xvZztcbiA3NzI6XHRcdHVuc2lnbmVkIGludCByb3csIHNfcm93ID0gY2ItXHUwMDNlYXJnc1swXTtcbiA3NzM6XHRcdGludCBzX2NvbCA9IGNiLVx1MDAzZWFyZ3NbMV0sIGNvbCA9IHNfY29sO1xuIDc3NDpcdFx0aW50IHJlcyA9IDA7XG4gNzc1Olx0XG4gNzc2Olx0XHRmb3IgKHJvdyA9IHNfcm93OyByb3cgXHUwMDNjIG1heF9yb3dzOyByb3cmIzQzOyYjNDM7LCBzX2NvbCA9IDApIHtcbiA3Nzc6XHRcdFx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0bTtcbiA3Nzg6XHRcdFx0c3RydWN0IHRjcG1faGFzaF9idWNrZXQgKmhiID0gdGNwX21ldHJpY3NfaGFzaCAmIzQzOyByb3c7XG4gNzc5Olx0XG4gNzgwOlx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiA3ODE6XHRcdFx0Zm9yIChjb2wgPSAwLCB0bSA9IHJjdV9kZXJlZmVyZW5jZShoYi1cdTAwM2VjaGFpbik7IHRtO1xuIDc4MjpcdFx0XHQgICAgIHRtID0gcmN1X2RlcmVmZXJlbmNlKHRtLVx1MDAzZXRjcG1fbmV4dCksIGNvbCYjNDM7JiM0MzspIHtcbiA3ODM6XHRcdFx0XHRpZiAoIW5ldF9lcSh0bV9uZXQodG0pLCBuZXQpKVxuIDc4NDpcdFx0XHRcdFx0Y29udGludWU7XG4gNzg1Olx0XHRcdFx0aWYgKGNvbCBcdTAwM2Mgc19jb2wpXG4gNzg2Olx0XHRcdFx0XHRjb250aW51ZTtcbiA3ODc6XHRcdFx0XHRyZXMgPSB0Y3BfbWV0cmljc19kdW1wX2luZm8oc2tiLCBjYiwgdG0pO1xuIDc4ODpcdFx0XHRcdGlmIChyZXMgXHUwMDNjIDApIHtcbiA3ODk6XHRcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDc5MDpcdFx0XHRcdFx0Z290byBkb25lO1xuIDc5MTpcdFx0XHRcdH1cbiA3OTI6XHRcdFx0fVxuIDc5MzpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA3OTQ6XHRcdH1cbiA3OTU6XHRcbiA3OTY6XHRkb25lOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBpbmV0cGVlcl9hZGRyX2NtcCoqCgpPa2F5LCBzbyBgdGNwX21ldHJpY3NfZHVtcF9pbmZvYCBjYWxscyBgdGNwX21ldHJpY3NfZmlsbF9pbmZvYC4gUmlnaHQuIE5vIGltbWVkaWF0ZSBsZWFrIHRoZXJlLiBUaGF0JiMzOTtzIGdvb2QgdG8gZXN0YWJsaXNoLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgYW5kIG1ldGljdWxvdXNseSByZXZpZXcgdGhpcyBwYXRjaC4gQWgsIGl0JiMzOTtzIG1vZGlmeWluZyBgaW5ldHBlZXJfYWRkcl9jbXBgLiBPa2F5LCBnb3QgaXQuCgpIbW0uIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBmdW5jdGlvbiBgaW5ldHBlZXJfYWRkcl9jbXBgICpkaWRuJiMzOTt0KiBpbmNsdWRlIGEgY2hlY2sgZm9yIHRoZSBhZGRyZXNzIGZhbWlsaWVzIGJlaW5nIGRpZmZlcmVudC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gV2Ugc2hvdWxkIGRlZmluaXRlbHkgZ28gYmFjayBhbmQgbG9vayBhdCB0aGUgb3JpZ2luYWwgYGluZXRwZWVyX2FkZHJfY21wYCBiZWZvcmUgdGhlIHBhdGNoIHdhcyBhcHBsaWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBleGFjdGx5IGhhcyBjaGFuZ2VkIGluIGl0cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pbmV0cGVlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjQ6XHRzdGF0aWMgaW5saW5lIGludCBpbmV0cGVlcl9hZGRyX2NtcChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSxcbiAxMjU6XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYilcbiAxMjY6XHR7XG4gMTI3Olx0XHRpbnQgaSwgbjtcbiAxMjg6XHRcbiAxMjk6XHRcdGlmIChhLVx1MDAzZWZhbWlseSAhPSBiLVx1MDAzZWZhbWlseSlcbiAxMzA6XHRcdFx0cmV0dXJuIGEtXHUwMDNlZmFtaWx5IFx1MDAzYyBiLVx1MDAzZWZhbWlseSA/IC0xIDogMTtcbiAxMzE6XHRcbiAxMzI6XHRcdGlmIChhLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUKVxuIDEzMzpcdFx0XHRuID0gc2l6ZW9mKGEtXHUwMDNlYTQpIC8gc2l6ZW9mKHUzMik7XG4gMTM0Olx0XHRlbHNlXG4gMTM1Olx0XHRcdG4gPSBzaXplb2YoYS1cdTAwM2VhNikgLyBzaXplb2YodTMyKTtcbiAxMzY6XHRcbiAxMzc6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkmIzQzOyYjNDM7KSB7XG4gMTM4Olx0XHRcdGlmIChhLVx1MDAzZWtleVtpXSA9PSBiLVx1MDAzZWtleVtpXSlcbiAxMzk6XHRcdFx0XHRjb250aW51ZTtcbiAxNDA6XHRcdFx0aWYgKGEtXHUwMDNla2V5W2ldIFx1MDAzYyBiLVx1MDAzZWtleVtpXSlcbiAxNDE6XHRcdFx0XHRyZXR1cm4gLTE7XG4gMTQyOlx0XHRcdHJldHVybiAxO1xuIDE0MzpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTg1NwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEzOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IElQdjQvSVB2NiBBZGRyZXNzIENvbXBhcmlzb24gYW5kIEhhc2hpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIE15IGByZWFkLWZpbGVgIG91dHB1dCBhbHJlYWR5IHNob3dzIHRoZSBmYW1pbHkgY2hlY2sgaW4gYGluZXRwZWVyX2FkZHJfY21wYC4gSXQgc2VlbXMgdGhlIHBhdGNoIGlzIGFscmVhZHkgYXBwbGllZCBpbiB0aGUgdHJlZSBJJiMzOTttIHJlYWRpbmcuIEluaXRpYWxseSwgdGhlIGNvZGUgZGlkbiYjMzk7dCBleHBsaWNpdGx5IGNvbXBhcmUgdGhlIGFkZHJlc3MgZmFtaWxpZXMuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIHdvdWxkIHNlbGVjdCB0aGUgY29tcGFyaXNvbiBzaXplIChgbmApIGJhc2VkIG9uIHRoZSBmYW1pbHkgYW5kIHRoZW4gdXNlIHRoYXQgc2l6ZSB0byBjb21wYXJlIG1lbW9yeS4gVGhhdCBjb3VsZCBsZWFkIHRvIGEgY29tcGFyaXNvbiBiZXR3ZWVuIGFuIElQdjQgYWRkcmVzcyBhbmQgdGhlIGluaXRpYWwgYnl0ZXMgb2YgYW4gSVB2Ni4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGEgYnVnIGZpeCB0byBjb21wYXJlIHRoZSBmYW1pbGllcy4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHByb2JsZW1zLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIGNvZGUgYWRkcyBhIGhhc2ggZnVuY3Rpb24gKGBpbmV0cGVlcl9hZGRyX2hhc2hgKSwgdXNpbmcgYHNpcGhhc2hfMnUzMmAgZm9yIElQdjQgYW5kIGBzaXBoYXNoXzR1MzJgIGZvciBJUHY2LCBidXQgY3J1Y2lhbGx5LCBpdCBvbmx5IGhhc2hlcyBpbml0aWFsaXplZCBmaWVsZHMsIHNvIHRoYXQgbG9va3Mgc2FmZS4KClRoZSBwYXRjaCBhbHNvIHJlcGxhY2VzIGBpbmV0cGVlcl9hZGRyX2NtcGAgd2l0aCBgaW5ldHBlZXJfZW50cnlfY21wYCBpbnNpZGUgdGhlIGBsb29rdXBgIGZ1bmN0aW9uLiBBZGRpdGlvbmFsbHksIGBkaGFzaGAgYW5kIGBwLSZndDtoYXNoYCB3ZXJlIGFkZGVkIHRvIHRoZSBgaW5ldF9wZWVyYCBzdHJ1Y3QuIFRoaXMgaXMgcmVsYXRlZCB0byB0aGUgaGFzaGluZywgc28gbm8gaXNzdWVzIHRoZXJlLgoKVGhlIHBhdGNoIGluY2x1ZGVzIGEgY2hlY2sgYWdhaW5zdCBhIHRocmVzaG9sZCwgbGltaXRpbmcgYWxsb2NhdGlvbiBvZiBuZXcgcGVlcnMuIEl0IGluaXRpYWxpemVzIHRoZSBgZGFkZHJgIGZpZWxkIHdpdGggYSBzdHJ1Y3QgYXNzaWdubWVudCBhbmQgYWxzbyBzZXRzIHRoZSBoYXNoLiBUaGlzIHN0cnVjdCBhc3NpZ25tZW50IGNvdWxkIGJlIGEgcHJvYmxlbSwgc2luY2UgdGhlIGBpbmV0cGVlcl9hZGRyYCBzdHJ1Y3QgaGFzIHBhZGRpbmcgdGhhdCYjMzk7cyB1bmluaXRpYWxpemVkIGlmIG9ubHkgdGhlIGBBRl9JTkVUYCBmYW1pbHkgaXMgdXNlZC4gS01TQU4gc2hvdWxkIGNhdGNoIGFueSByZWFkcywgYnV0IGxldCYjMzk7cyBiZSBzdXJlLgoKTGV0JiMzOTtzIHNlZToKKiAgIEluIGBpbmV0cGVlcl9hZGRyX2hhc2hgLCBvbmx5IHRoZSBgYTQuYWRkcmAgYW5kIGBhNC52aWZgIGFyZSByZWFkLgoqICAgSW4gYGluZXRwZWVyX2FkZHJfY21wYCwgb25seSBgYTQuYWRkcmAgYW5kIGBhNC52aWZgIGFyZSByZWFkIChhbGlhc2VkIHZpYSBgczZfYWRkcjMyYCB3aGVuIHByb2Nlc3NpbmcgSVB2NikuCiogICBJbiBgdGNwX21ldHJpY3NfZmlsbF9pbmZvYCwgb25seSBgYTQuYWRkcmAgaXMgcmVhZC4KClNvIHRoZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgZnJvbSB0aGUgc3RydWN0IGFzc2lnbm1lbnQgaW4gYGluZXRfZ2V0cGVlcmAgaXMgbmV2ZXIgYWN0dWFsbHkgcmVhZCBvciBsZWFrZWQgaW4gdGhlc2UgZnVuY3Rpb25zLiBJJiMzOTtkIHN0aWxsIGxpa2UgdG8gbG9vayBhdCBvdGhlciB1c2VycyBvZiBgc3RydWN0IGluZXRfcGVlcmAsIGJ1dCBzbyBmYXIsIHRoaXMgbG9va3MgbGlrZSBhIGNsZWFuIGJ1ZyBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBpbmV0X3BlZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0yNz1zdHJ1Y3QgaW5ldHBlZXJfYWRkciB7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0zNS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MzY6c3RydWN0IGluZXRfcGVlciB7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTM3LVx0c3RydWN0IHJiX25vZGVcdFx0cmJfbm9kZTtcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTYxLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDo2MjpzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2Uge1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC02My1cdHN0cnVjdCByYl9yb290XHRcdHJiX3Jvb3Q7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC02Ny1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6Njg6dm9pZCBpbmV0X3BlZXJfYmFzZV9pbml0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqKTtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtNjktXG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD05Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbjZfYWRkciAqaW5ldHBlZXJfZ2V0X2FkZHJfdjYoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyKVxuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtOTgtLyogY2FuIGJlIGNhbGxlZCB3aXRoIG9yIHdpdGhvdXQgbG9jYWwgQkggYmVpbmcgZGlzYWJsZWQgKi9cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6OTk6c3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTAwLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIpO1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDEtXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjEwMjpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NChzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwMy1cdFx0XHRcdFx0XHRfX2JlMzIgdjRkYWRkcixcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTExMy1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTE0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y2KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTE1LVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdjZkYWRkcilcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oPTEyND1zdGF0aWMgaW5saW5lIGludCBpbmV0cGVlcl9hZGRyX2NtcChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSxcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTE0OC0vKiBjYW4gYmUgY2FsbGVkIGZyb20gQkggY29udGV4dCBvciBvdXRzaWRlICovXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjE0OTp2b2lkIGluZXRfcHV0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyICpwKTtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTUwOmJvb2wgaW5ldF9wZWVyX3hybGltX2FsbG93KHN0cnVjdCBpbmV0X3BlZXIgKnBlZXIsIGludCB0aW1lb3V0KTtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTUxLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxNTI6dm9pZCBpbmV0cGVlcl9pbnZhbGlkYXRlX3RyZWUoc3RydWN0IGluZXRfcGVlcl9iYXNlICopO1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xNTMtXG4tLVxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oPTM5MT1zdHJ1Y3QgZmliNl90YWJsZSB7XG4tLVxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTM5NS1cdHN0cnVjdCBmaWI2X25vZGVcdHRiNl9yb290O1xuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oOjM5NjpcdHN0cnVjdCBpbmV0X3BlZXJfYmFzZVx0dGI2X3BlZXJzO1xuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTM5Ny1cdHVuc2lnbmVkIGludFx0XHRmbGFncztcbi0tXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0Lmg9NTU9c3RydWN0IG5ldG5zX2lwdjQge1xuLS1cbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0xMzYtXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0Lmg6MTM3Olx0c3RydWN0IGluZXRfcGVlcl9iYXNlXHQqcGVlcnM7XG5pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgtMTM4LVx0c3RydWN0IGZxZGlyXHRcdCpmcWRpcjtcbi0tXG5pbmNsdWRlL25ldC9uZXRucy9pcHY2Lmg9NjY9c3RydWN0IG5ldG5zX2lwdjYge1xuLS1cbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaC03Mi1cdHN0cnVjdCBpcHY2X2RldmNvbmZcdCpkZXZjb25mX2RmbHQ7XG5pbmNsdWRlL25ldC9uZXRucy9pcHY2Lmg6NzM6XHRzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2VcdCpwZWVycztcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaC03NC1cdHN0cnVjdCBmcWRpclx0XHQqZnFkaXI7XG4tLVxubmV0L2lwdjQvaWNtcC5jPTMxMT1zdGF0aWMgYm9vbCBpY21wdjRfeHJsaW1fYWxsb3coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcnRhYmxlICpydCxcbi0tXG5uZXQvaXB2NC9pY21wLmMtMzE1LVx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gXHUwMDI2cnQtXHUwMDNlZHN0O1xubmV0L2lwdjQvaWNtcC5jOjMxNjpcdHN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7XG5uZXQvaXB2NC9pY21wLmMtMzE3LVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jLTQ3LSAqICAzLiAgR2xvYmFsIHZhcmlhYmxlIHBlZXJfdG90YWwgaXMgbW9kaWZpZWQgdW5kZXIgdGhlIHBvb2wgbG9jay5cbm5ldC9pcHY0L2luZXRwZWVyLmM6NDg6ICogIDQuICBzdHJ1Y3QgaW5ldF9wZWVyIGZpZWxkcyBtb2RpZmljYXRpb246XG5uZXQvaXB2NC9pbmV0cGVlci5jLTQ5LSAqXHRcdHJiX25vZGU6IHBvb2wgbG9ja1xuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmM9NzE9c3RhdGljIGludCBpbmV0cGVlcl9lbnRyeV9jbXAodTY0IGRoYXNoLFxubmV0L2lwdjQvaW5ldHBlZXIuYy03Mi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG5uZXQvaXB2NC9pbmV0cGVlci5jOjczOlx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0X3BlZXIgKnApXG5uZXQvaXB2NC9pbmV0cGVlci5jLTc0LXtcbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jLTgyLVxubmV0L2lwdjQvaW5ldHBlZXIuYzo4Mzp2b2lkIGluZXRfcGVlcl9iYXNlX2luaXQoc3RydWN0IGluZXRfcGVlcl9iYXNlICpicClcbm5ldC9pcHY0L2luZXRwZWVyLmMtODQte1xuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmM9OTk9dm9pZCBfX2luaXQgaW5ldF9pbml0cGVlcnModm9pZClcbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jLTEwNi1cdG5yX2VudHJpZXMgPSBkaXY2NF91bCgodTY0KXRvdGFscmFtX3BhZ2VzKCkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG5uZXQvaXB2NC9pbmV0cGVlci5jOjEwNzpcdFx0XHQgICAgICAxMDAgKiBMMV9DQUNIRV9BTElHTihzaXplb2Yoc3RydWN0IGluZXRfcGVlcikpKTtcbm5ldC9pcHY0L2luZXRwZWVyLmMtMTA4LVxuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmMtMTE0LS8qIENhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSBvciBiYXNlLVx1MDAzZWxvY2sgaGVsZCAqL1xubmV0L2lwdjQvaW5ldHBlZXIuYzoxMTU6c3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG5uZXQvaXB2NC9pbmV0cGVlci5jLTExNi1cdFx0XHRcdHU2NCBkaGFzaCxcbm5ldC9pcHY0L2luZXRwZWVyLmM6MTE3Olx0XHRcdFx0c3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxubmV0L2lwdjQvaW5ldHBlZXIuYy0xMTgtXHRcdFx0XHR1bnNpZ25lZCBpbnQgc2VxLFxubmV0L2lwdjQvaW5ldHBlZXIuYzoxMTk6XHRcdFx0XHRzdHJ1Y3QgaW5ldF9wZWVyICpnY19zdGFja1tdLFxubmV0L2lwdjQvaW5ldHBlZXIuYy0xMjAtXHRcdFx0XHR1bnNpZ25lZCBpbnQgKmdjX2NudCxcbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jLTEyNC1cdHN0cnVjdCByYl9ub2RlICoqcHAsICpwYXJlbnQsICpuZXh0O1xubmV0L2lwdjQvaW5ldHBlZXIuYzoxMjU6XHRzdHJ1Y3QgaW5ldF9wZWVyICpwO1xubmV0L2lwdjQvaW5ldHBlZXIuYy0xMjYtXHR1MzIgbm93O1xuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmMtMTM2LVx0XHRwYXJlbnQgPSBuZXh0O1xubmV0L2lwdjQvaW5ldHBlZXIuYzoxMzc6XHRcdHAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBpbmV0X3BlZXIsIHJiX25vZGUpO1xubmV0L2lwdjQvaW5ldHBlZXIuYy0xMzgtXHRcdGNtcCA9IGluZXRwZWVyX2VudHJ5X2NtcChkaGFzaCwgZGFkZHIsIHApO1xuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmMtMTYxLS8qIHBlcmZvcm0gZ2FyYmFnZSBjb2xsZWN0IG9uIGFsbCBpdGVtcyBzdGFja2VkIGR1cmluZyBhIGxvb2t1cCAqL1xubmV0L2lwdjQvaW5ldHBlZXIuYzoxNjI6c3RhdGljIHZvaWQgaW5ldF9wZWVyX2djKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcbm5ldC9pcHY0L2luZXRwZWVyLmM6MTYzOlx0XHRcdCBzdHJ1Y3QgaW5ldF9wZWVyICpnY19zdGFja1tdLFxubmV0L2lwdjQvaW5ldHBlZXIuYy0xNjQtXHRcdFx0IHVuc2lnbmVkIGludCBnY19jbnQpXG4tLVxubmV0L2lwdjQvaW5ldHBlZXIuYy0xNjYtXHRpbnQgcGVlcl90aHJlc2hvbGQsIHBlZXJfbWF4dHRsLCBwZWVyX21pbnR0bDtcbm5ldC9pcHY0L2luZXRwZWVyLmM6MTY3Olx0c3RydWN0IGluZXRfcGVlciAqcDtcbm5ldC9pcHY0L2luZXRwZWVyLmMtMTY4LVx0X191MzIgZGVsdGEsIHR0bDtcbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jLTE5OC0vKiBNdXN0IGJlIGNhbGxlZCB1bmRlciBSQ1UgOiBObyByZWZjb3VudCBjaGFuZ2UgaXMgZG9uZSBoZXJlLiAqL1xubmV0L2lwdjQvaW5ldHBlZXIuYzoxOTk6c3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcbm5ldC9pcHY0L2luZXRwZWVyLmMtMjAwLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIpXG5uZXQvaXB2NC9pbmV0cGVlci5jLTIwMS17XG5uZXQvaXB2NC9pbmV0cGVlci5jOjIwMjpcdHN0cnVjdCBpbmV0X3BlZXIgKnAsICpnY19zdGFja1tQRUVSX01BWF9HQ107XG5uZXQvaXB2NC9pbmV0cGVlci5jLTIwMy1cdHU2NCBkaGFzaCA9IGluZXRwZWVyX2FkZHJfaGFzaChkYWRkcik7XG4tLVxubmV0L2lwdjQvaW5ldHBlZXIuYy0yNTMtXG5uZXQvaXB2NC9pbmV0cGVlci5jOjI1NDp2b2lkIGluZXRfcHV0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyICpwKVxubmV0L2lwdjQvaW5ldHBlZXIuYy0yNTUte1xuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmMtMjc3LSNkZWZpbmUgWFJMSU1fQlVSU1RfRkFDVE9SIDZcbm5ldC9pcHY0L2luZXRwZWVyLmM6Mjc4OmJvb2wgaW5ldF9wZWVyX3hybGltX2FsbG93KHN0cnVjdCBpbmV0X3BlZXIgKnBlZXIsIGludCB0aW1lb3V0KVxubmV0L2lwdjQvaW5ldHBlZXIuYy0yNzkte1xuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmMtMzAzLVxubmV0L2lwdjQvaW5ldHBlZXIuYzozMDQ6dm9pZCBpbmV0cGVlcl9pbnZhbGlkYXRlX3RyZWUoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlKVxubmV0L2lwdjQvaW5ldHBlZXIuYy0zMDUte1xuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmMtMzA4LVx0d2hpbGUgKHApIHtcbm5ldC9pcHY0L2luZXRwZWVyLmM6MzA5Olx0XHRzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyID0gcmJfZW50cnkocCwgc3RydWN0IGluZXRfcGVlciwgcmJfbm9kZSk7XG5uZXQvaXB2NC9pbmV0cGVlci5jLTMxMC1cbi0tXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jPTYxPXN0cnVjdCBpcHEge1xuLS1cbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtNjctXHR1bnNpZ25lZCBpbnQgICAgcmlkO1xubmV0L2lwdjQvaXBfZnJhZ21lbnQuYzo2ODpcdHN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7XG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTY5LX07XG4tLVxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYz04Mz1zdGF0aWMgdm9pZCBpcDRfZnJhZ19pbml0KHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnEsIGNvbnN0IHZvaWQgKmEpXG4tLVxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYy04Ny1cdHN0cnVjdCBuZXQgKm5ldCA9IHEtXHUwMDNlZnFkaXItXHUwMDNlbmV0O1xubmV0L2lwdjQvaXBfZnJhZ21lbnQuYzo4ODpcdHN0cnVjdCBpbmV0X3BlZXIgKnAgPSBOVUxMO1xubmV0L2lwdjQvaXBfZnJhZ21lbnQuYy04OS1cbi0tXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jPTIyMD1zdGF0aWMgaW50IGlwX2ZyYWdfdG9vX2ZhcihzdHJ1Y3QgaXBxICpxcClcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtMjIxLXtcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmM6MjIyOlx0c3RydWN0IGluZXRfcGVlciAqcGVlciA9IHFwLVx1MDAzZXBlZXI7XG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTIyMy1cdHVuc2lnbmVkIGludCBtYXggPSBxcC1cdTAwM2VxLmZxZGlyLVx1MDAzZW1heF9kaXN0O1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9OTAyPXZvaWQgaXBfcnRfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtOTA1LVx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xubmV0L2lwdjQvcm91dGUuYzo5MDY6XHRzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyO1xubmV0L2lwdjQvcm91dGUuYy05MDctXHRzdHJ1Y3QgbmV0ICpuZXQ7XG4tLVxubmV0L2lwdjQvcm91dGUuYz05NjU9c3RhdGljIGludCBpcF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtOTY5LVx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xubmV0L2lwdjQvcm91dGUuYzo5NzA6XHRzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyO1xubmV0L2lwdjQvcm91dGUuYy05NzEtXHR1bnNpZ25lZCBsb25nIG5vdztcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTM3MTI9c3RhdGljIGludCBfX25ldF9pbml0IGlwdjRfaW5ldHBlZXJfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvaXB2NC9yb3V0ZS5jLTM3MTMte1xubmV0L2lwdjQvcm91dGUuYzozNzE0Olx0c3RydWN0IGluZXRfcGVlcl9iYXNlICpicCA9IGttYWxsb2Nfb2JqKCpicCk7XG5uZXQvaXB2NC9yb3V0ZS5jLTM3MTUtXG4tLVxubmV0L2lwdjQvcm91dGUuYz0zNzIzPXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXB2NF9pbmV0cGVlcl9leGl0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9pcHY0L3JvdXRlLmMtMzcyNC17XG5uZXQvaXB2NC9yb3V0ZS5jOjM3MjU6XHRzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJwID0gbmV0LVx1MDAzZWlwdjQucGVlcnM7XG5uZXQvaXB2NC9yb3V0ZS5jLTM3MjYtXG4tLVxubmV0L2lwdjYvaWNtcC5jPTE5NT1zdGF0aWMgYm9vbCBpY21wdjZfeHJsaW1fYWxsb3coc3RydWN0IHNvY2sgKnNrLCB1OCB0eXBlLFxuLS1cbm5ldC9pcHY2L2ljbXAuYy0yMjAtXHRcdGludCB0bW8gPSBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjYuc3lzY3RsLmljbXB2Nl90aW1lKTtcbm5ldC9pcHY2L2ljbXAuYzoyMjE6XHRcdHN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7XG5uZXQvaXB2Ni9pY21wLmMtMjIyLVxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz01MTk9aW50IGlwNl9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTYyMy1cdFx0c3RydWN0IGluNl9hZGRyICp0YXJnZXQgPSBOVUxMO1xubmV0L2lwdjYvaXA2X291dHB1dC5jOjYyNDpcdFx0c3RydWN0IGluZXRfcGVlciAqcGVlcjtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy02MjUtXHRcdHN0cnVjdCBydDZfaW5mbyAqcnQ7XG4tLVxubmV0L2lwdjYvbmRpc2MuYz0xNjU1PXZvaWQgbmRpc2Nfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnRhcmdldClcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTE2NjAtXHRpbnQgb3B0bGVuID0gMDtcbm5ldC9pcHY2L25kaXNjLmM6MTY2MTpcdHN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7XG5uZXQvaXB2Ni9uZGlzYy5jLTE2NjItXHRzdHJ1Y3Qgc2tfYnVmZiAqYnVmZjtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTY3OTk9c3RhdGljIGludCBfX25ldF9pbml0IGlwdjZfaW5ldHBlZXJfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvaXB2Ni9yb3V0ZS5jLTY4MDAte1xubmV0L2lwdjYvcm91dGUuYzo2ODAxOlx0c3RydWN0IGluZXRfcGVlcl9iYXNlICpicCA9IGttYWxsb2Nfb2JqKCpicCk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTY4MDItXG4tLVxubmV0L2lwdjYvcm91dGUuYz02ODEwPXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXB2Nl9pbmV0cGVlcl9leGl0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9pcHY2L3JvdXRlLmMtNjgxMS17XG5uZXQvaXB2Ni9yb3V0ZS5jOjY4MTI6XHRzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJwID0gbmV0LVx1MDAzZWlwdjYucGVlcnM7XG5uZXQvaXB2Ni9yb3V0ZS5jLTY4MTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNDcxCgkJCQkJCQlvdXRwdXQ6IDIzNQoJCQkJCQkJdGhvdWdodHM6IDk3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYHN0cnVjdCBpbmV0X3BlZXJgLiBJdCYjMzk7cyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCBmb3IgdGhpbmdzIGxpa2UgSUNNUCByYXRlIGxpbWl0aW5nIGFuZCByb3V0aW5nIHJlZGlyZWN0cywgbm90aGluZyB1c2VyLXNwYWNlIGRpcmVjdGx5IHRvdWNoZXMuIFRoZSBjb3JlIGNoYW5nZSBoZXJlIHNlZW1zIHRvIGJlIGFkZGluZyBhIGBoYXNoYCBmaWVsZCB0byB0aGUgc3RydWN0IHRvIHNwZWVkIHVwIGxvb2t1cHMgaW4gdGhlIHJlZC1ibGFjayB0cmVlLCB3aGljaCBpcyBhIGdvb2Qgb3B0aW1pemF0aW9uLgoKTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGhhc2ggaXMgZGVyaXZlZCBmcm9tIGBkYWRkcmAsIGFuZCB0aGF0JiMzOTtzIGluaXRpYWxpemVkLCBzbyB0aGF0JiMzOTtzIGdvb2QuIFRoZSBwYXRjaCBhbHNvIGluY2x1ZGVzIGEgYGZhbWlseWAgY2hlY2sgaW4gYGluZXRwZWVyX2FkZHJfY21wYC4gYGZhbWlseWAgaXMgKmFsc28qIGFsd2F5cyBpbml0aWFsaXplZC4gV2UmIzM5O3ZlIGdvdCBhIHRocmVzaG9sZCBjaGVjayBiZWZvcmUgYWxsb2NhdGlvbiwgYnV0IHRoYXQgc2hvdWxkbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgcmVhZCBpc3N1ZXMuCgpOb3csIHRoZXJlJiMzOTtzIHNvbWUgcGFkZGluZyBpbiBgc3RydWN0IGluZXRwZWVyX2FkZHJgIGZvciBJUHY0LCBidXQgdGhhdCBwYWRkaW5nJiMzOTtzIG9ubHkgKmNvcGllZCogd2hlbiBgcC0mZ3Q7ZGFkZHIgPSAqZGFkZHI7YCBleGVjdXRlcy4gQ3J1Y2lhbGx5LCBpdCYjMzk7cyAqbmV2ZXIqIHJlYWQgb3IgZXhwb3NlZC4gS01TQU4sIG9mIGNvdXJzZSwgaXMgd2hhdCB3ZSB1c2UgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTaW5jZSB0aGUgcGFkZGluZyBpcyBuZXZlciByZWFkLCBLTVNBTiB3aWxsIHJlbWFpbiBzaWxlbnQsIHdoaWNoIGlzIHdoYXQgd2Ugd2FudC4KCk5vdywgd2FpdCBhIG1pbnV0ZS4uLiBLTVNBTiAqZG9lcyogY29tcGxhaW4gYWJvdXQgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBicmFuY2hlcyBvciBtZW1vcnkgYWNjZXNzZXMsIGFuZCBhbHNvIHdoZW4gY29weWluZyB0byB1c2VyIHNwYWNlLiBPa2F5LCBzbyB3ZSBoYXZlIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlIHRoYXQgdGhpcyBwYWRkaW5nIGlzIG5ldmVyIHVzZWQsIGV2ZW4gYnkgYWNjaWRlbnQsIGluIGEgY29uZGl0aW9uYWwuIExldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2guIFRoZSBoYXNoIGZ1bmN0aW9uIGFuZCB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbiBleHBsaWNpdGx5IHJlYWQgb25seSBpbml0aWFsaXplZCBmaWVsZHMuIEFuZCBvZiBjb3Vyc2UsIG5vdGhpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gc2hvdWxkbiYjMzk7dCBmbGFnIGFueXRoaW5nLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2UgZXhwZWN0LgoKU28sIGluIHNob3J0LCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gdGVzdGluZy4gVGhlc2UgYXJlIHB1cmVseSBpbnRlcm5hbCBsb2dpYyBvcHRpbWl6YXRpb25zIGFuZCBidWcgZml4ZXMgZm9yIHRoZSBJUHY0IHZzIElQdjYgY29tcGFyaXNvbi4KCk5vdywganVzdCB0byBiZSAqZXh0cmEqIGNhdXRpb3VzLCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBwb3RlbnRpYWwgZm9yIG91dC1vZi1ib3VuZHMgcmVhZHMgaW4gdGhvc2UgaGFzaCBmdW5jdGlvbnMgYW5kIGNvbXBhcmlzb25zLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRob3NlIGBzaXBoYXNoXzJ1MzJgIGFuZCBgc2lwaGFzaF80dTMyYCBmdW5jdGlvbnMgYXJlbiYjMzk7dCBkb2luZyBhbnl0aGluZyBuYXN0eS4gT2theSwgdGhleSB0YWtlIGB1MzJgIHZhbHVlcyAqYnkgdmFsdWUqLiBgYTQuYWRkcmAgaXMgYF9fYmUzMmAgKDQgYnl0ZXMpLCBgYTQudmlmYCBpcyBgX191MzJgICg0IGJ5dGVzKS4gIFNvLCBubyBvdXQtb2YtYm91bmRzIHJlYWQgd2l0aCBgc2lwaGFzaF8ydTMyYC4gU2FtZSB3aXRoIGBzaXBoYXNoXzR1MzJgOyB0aGUgYXJyYXkgYGE2LnM2X2FkZHIzMmAgaXMgYW4gYXJyYXkgb2YgZm91ciBgdTMyYHMsIGFuZCB0aGV5JiMzOTtyZSBwYXNzZWQgYnkgdmFsdWUuIFNvLCBubyBvdXQtb2YtYm91bmRzIHJlYWRzIHRoZXJlLCBlaXRoZXIuIFRoYXQmIzM5O3MgZ29vZC4KCk5vdywgZm9yIGBpbmV0cGVlcl9hZGRyX2NtcGAsIGxldCYjMzk7cyBjaGVjayBpdCBpbiBkZXRhaWw6CldoZW4gY29tcGFyaW5nIEFGX0lORVQgYWRkcmVzc2VzLCBgbiA9IDJgLiBUaGUgY29kZSBjb21wYXJlcyBgYTYuczZfYWRkcjMyWzBdYCBhbmQgYFsxXWAuIGBhNi5zNl9hZGRyMzJbMF1gIGFsaWFzZXMgd2l0aCBgYTQuYWRkcmAsIGFuZCBgYTYuczZfYWRkcjMyWzFdYCBhbGlhc2VzIHdpdGggYGE0LnZpZmAuICBUaGlzICppcyogc2FmZSBhbmQgb25seSByZWFkcyBpbml0aWFsaXplZCBtZW1vcnkuCgpTbywgdG8gc3VtbWFyaXplIGV2ZXJ5dGhpbmc6IFRoZSBwYXRjaCBpcyBhIG1vZGlmaWNhdGlvbiBvZiBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcyBhbmQgbG9naWMgZm9yIElQIHBlZXIgdHJhY2tpbmcsIGFkZGluZyBhIGhhc2ggZmllbGQgdG8gb3B0aW1pemUgdGhlIFJCLXRyZWUgYW5kIGZpeGluZyB0aGF0IElQdjQvSVB2NiBjb21wYXJpc29uLiBBbGwgdGhlIGZpZWxkcyB1c2VkIGZvciBoYXNoaW5nIGFuZCBjb21wYXJpbmcgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyBuZXcgZGF0YSBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZWQgaW4gYW55IGJyYW5jaGVzIG9yIGNhbGN1bGF0aW9ucy4gVGhlcmVmb3JlLCBhIHNwZWNpYWxpemVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpc24mIzM5O3QgbmVlZGVkLiBTdGFuZGFyZCBLQVNBTiB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCBtaWdodCBleGlzdC4gR29vZCwgdGhpcyBsb29rcyBzb2xpZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIGBpbmV0X3BlZXJgIHRyYWNraW5nIG1lY2hhbmlzbSBieSBhZGRpbmcgYSBoYXNoIGZpZWxkIHRvIG9wdGltaXplIHJlZC1ibGFjayB0cmVlIGxvb2t1cHMgYW5kIGZpeGluZyBhIGNvbXBhcmlzb24gYnVnIGJldHdlZW4gSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMuIFRoZSBuZXcgaGFzaCBmdW5jdGlvbiAoYGluZXRwZWVyX2FkZHJfaGFzaGApIGFuZCB0aGUgbW9kaWZpZWQgY29tcGFyaXNvbiBmdW5jdGlvbiAoYGluZXRwZWVyX2VudHJ5X2NtcGApIGV4cGxpY2l0bHkgb25seSByZWFkIHRoZSBpbml0aWFsaXplZCBmaWVsZHMgb2YgdGhlIGBpbmV0cGVlcl9hZGRyYCB1bmlvbiAoYGE0LmFkZHJgIGFuZCBgYTQudmlmYCBmb3IgSVB2NCwgYW5kIGBhNi5zNl9hZGRyMzJgIGZvciBJUHY2KS4gV2hpbGUgdGhlIGBpbmV0cGVlcl9hZGRyYCB1bmlvbiBjb250YWlucyB1bmluaXRpYWxpemVkIHBhZGRpbmcgZm9yIElQdjQgYWRkcmVzc2VzLCB0aGlzIHBhZGRpbmcgaXMgbmV2ZXIgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYGluZXRfcGVlcmAgc3RydWN0dXJlIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBrZXJuZWwgdHJhY2tpbmcgc3RydWN0dXJlIGFuZCBpcyBub3QgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIGBpbmV0X3BlZXJgIHRyYWNraW5nIG1lY2hhbmlzbSBieSBhZGRpbmcgYSBoYXNoIGZpZWxkIHRvIG9wdGltaXplIHJlZC1ibGFjayB0cmVlIGxvb2t1cHMgYW5kIGZpeGluZyBhIGNvbXBhcmlzb24gYnVnIGJldHdlZW4gSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMuIFRoZSBuZXcgaGFzaCBmdW5jdGlvbiAoYGluZXRwZWVyX2FkZHJfaGFzaGApIGFuZCB0aGUgbW9kaWZpZWQgY29tcGFyaXNvbiBmdW5jdGlvbiAoYGluZXRwZWVyX2VudHJ5X2NtcGApIGV4cGxpY2l0bHkgb25seSByZWFkIHRoZSBpbml0aWFsaXplZCBmaWVsZHMgb2YgdGhlIGBpbmV0cGVlcl9hZGRyYCB1bmlvbiAoYGE0LmFkZHJgIGFuZCBgYTQudmlmYCBmb3IgSVB2NCwgYW5kIGBhNi5zNl9hZGRyMzJgIGZvciBJUHY2KS4gV2hpbGUgdGhlIGBpbmV0cGVlcl9hZGRyYCB1bmlvbiBjb250YWlucyB1bmluaXRpYWxpemVkIHBhZGRpbmcgZm9yIElQdjQgYWRkcmVzc2VzLCB0aGlzIHBhZGRpbmcgaXMgbmV2ZXIgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYGluZXRfcGVlcmAgc3RydWN0dXJlIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBrZXJuZWwgdHJhY2tpbmcgc3RydWN0dXJlIGFuZCBpcyBub3QgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozMzowNi4wNDA4NDk3MjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODg3NzYzNjU3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImluZXRfZ2V0cGVlclwiLFxuICAgIFwiaW5ldF9wZWVyX3hybGltX2FsbG93XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgYGluZXRfcGVlcmAgdHJhY2tpbmcgbWVjaGFuaXNtIGJ5IGFkZGluZyBhIGhhc2ggZmllbGQgdG8gb3B0aW1pemUgcmVkLWJsYWNrIHRyZWUgbG9va3VwcyBhbmQgZml4aW5nIGEgY29tcGFyaXNvbiBidWcgYmV0d2VlbiBJUHY0IGFuZCBJUHY2IGFkZHJlc3Nlcy4gVGhlIG5ldyBoYXNoIGZ1bmN0aW9uIChgaW5ldHBlZXJfYWRkcl9oYXNoYCkgYW5kIHRoZSBtb2RpZmllZCBjb21wYXJpc29uIGZ1bmN0aW9uIChgaW5ldHBlZXJfZW50cnlfY21wYCkgZXhwbGljaXRseSBvbmx5IHJlYWQgdGhlIGluaXRpYWxpemVkIGZpZWxkcyBvZiB0aGUgYGluZXRwZWVyX2FkZHJgIHVuaW9uIChgYTQuYWRkcmAgYW5kIGBhNC52aWZgIGZvciBJUHY0LCBhbmQgYGE2LnM2X2FkZHIzMmAgZm9yIElQdjYpLiBXaGlsZSB0aGUgYGluZXRwZWVyX2FkZHJgIHVuaW9uIGNvbnRhaW5zIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBmb3IgSVB2NCBhZGRyZXNzZXMsIHRoaXMgcGFkZGluZyBpcyBuZXZlciByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBgaW5ldF9wZWVyYCBzdHJ1Y3R1cmUgaXMgcHVyZWx5IGFuIGludGVybmFsIGtlcm5lbCB0cmFja2luZyBzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhhc2gtYmFzZWQgbG9va3VwIGZvciBpbmV0X3BlZXIgc3RydWN0dXJlcywgbW9kaWZ5aW5nIGluZXRfZ2V0cGVlciB0byB1c2Ugc2lwaGFzaCBmb3IgdHJlZSBpbnNlcnRpb24gYW5kIGxvb2t1cC4gSXQgYWxzbyBjaGFuZ2VzIGluZXRfcGVlcl94cmxpbV9hbGxvdyB0byByZXR1cm4gZmFsc2Ugd2hlbiBwZWVyIGlzIE5VTEwsIGFuZCBsaW1pdHMgdGhlIGFsbG9jYXRpb24gb2YgbmV3IHBlZXJzIGJhc2VkIG9uIGluZXRfcGVlcl90aHJlc2hvbGQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgSVB2NC9JUHY2IG5ldHdvcmtpbmcgbG9naWMsIHNwZWNpZmljYWxseSBJQ01QIHJhdGUgbGltaXRpbmcgYW5kIElQIGZyYWdtZW50YXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjMzOjA2LjA0MDg1NDUzNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEyMDQ2NTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWNmN2Y0MDAyMTNlMTExMWU4NmZhMjQ0NWY2MWZhNzY0NzQ0ODUyMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAyMTozMzowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0cGVlci5oIGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaFxcbmluZGV4IGY0NzU3NTdkYWFmYmEuLjQxNGU5YWRmNGM1MTEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2luZXRwZWVyLmhcXG5AQCAtMzUsNiArMzUsNyBAQCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciB7XFxuIFxcbiBzdHJ1Y3QgaW5ldF9wZWVyIHtcXG4gXFx0c3RydWN0IHJiX25vZGVcXHRcXHRyYl9ub2RlO1xcbitcXHR1NjRcXHRcXHRcXHRoYXNoO1xcbiBcXHRzdHJ1Y3QgaW5ldHBlZXJfYWRkclxcdGRhZGRyO1xcbiBcXG4gXFx0dTMyXFx0XFx0XFx0bWV0cmljc1tSVEFYX01BWF07XFxuQEAgLTEyNSw2ICsxMjYsOSBAQCBzdGF0aWMgaW5saW5lIGludCBpbmV0cGVlcl9hZGRyX2NtcChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSxcXG4ge1xcbiBcXHRpbnQgaSwgbjtcXG4gXFxuK1xcdGlmIChhLVxcdTAwM2VmYW1pbHkgIT0gYi1cXHUwMDNlZmFtaWx5KVxcbitcXHRcXHRyZXR1cm4gYS1cXHUwMDNlZmFtaWx5IFxcdTAwM2MgYi1cXHUwMDNlZmFtaWx5ID8gLTEgOiAxO1xcbitcXG4gXFx0aWYgKGEtXFx1MDAzZWZhbWlseSA9PSBBRl9JTkVUKVxcbiBcXHRcXHRuID0gc2l6ZW9mKGEtXFx1MDAzZWE0KSAvIHNpemVvZih1MzIpO1xcbiBcXHRlbHNlXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRwZWVyLmMgYi9uZXQvaXB2NC9pbmV0cGVlci5jXFxuaW5kZXggNWI5NTdhODMxZTdjMy4uOTY4NzFmNTIwMTBmMyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pbmV0cGVlci5jXFxuKysrIGIvbmV0L2lwdjQvaW5ldHBlZXIuY1xcbkBAIC0yMSw2ICsyMSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0cGVlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3NlY3VyZV9zZXEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NpcGhhc2guaFxcdTAwM2VcXG4gXFxuIC8qXFxuICAqICBUaGVvcnkgb2Ygb3BlcmF0aW9ucy5cXG5AQCAtNTIsNiArNTMsMzIgQEBcXG4gICovXFxuIFxcbiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBlZXJfY2FjaGVwIF9fcm9fYWZ0ZXJfaW5pdDtcXG4rc3RhdGljIHNpcGhhc2hfYWxpZ25lZF9rZXlfdCBpbmV0cGVlcl9oYXNoX2tleSBfX3JlYWRfbW9zdGx5O1xcbitcXG4rc3RhdGljIHU2NCBpbmV0cGVlcl9hZGRyX2hhc2goY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmEpXFxuK3tcXG4rXFx0aWYgKGEtXFx1MDAzZWZhbWlseSA9PSBBRl9JTkVUKVxcbitcXHRcXHRyZXR1cm4gc2lwaGFzaF8ydTMyKChfX2ZvcmNlIHUzMilhLVxcdTAwM2VhNC5hZGRyLCBhLVxcdTAwM2VhNC52aWYsXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2aW5ldHBlZXJfaGFzaF9rZXkpO1xcbitcXG4rXFx0cmV0dXJuIHNpcGhhc2hfNHUzMigoX19mb3JjZSB1MzIpYS1cXHUwMDNlYTYuczZfYWRkcjMyWzBdLFxcbitcXHRcXHRcXHQgICAgKF9fZm9yY2UgdTMyKWEtXFx1MDAzZWE2LnM2X2FkZHIzMlsxXSxcXG4rXFx0XFx0XFx0ICAgIChfX2ZvcmNlIHUzMilhLVxcdTAwM2VhNi5zNl9hZGRyMzJbMl0sXFxuK1xcdFxcdFxcdCAgICAoX19mb3JjZSB1MzIpYS1cXHUwMDNlYTYuczZfYWRkcjMyWzNdLFxcbitcXHRcXHRcXHQgICAgXFx1MDAyNmluZXRwZWVyX2hhc2hfa2V5KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpbmV0cGVlcl9lbnRyeV9jbXAodTY0IGRoYXNoLFxcbitcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXFxuK1xcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0X3BlZXIgKnApXFxuK3tcXG4rXFx0aWYgKGRoYXNoIFxcdTAwM2MgcC1cXHUwMDNlaGFzaClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRpZiAoZGhhc2ggXFx1MDAzZSBwLVxcdTAwM2VoYXNoKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdHJldHVybiBpbmV0cGVlcl9hZGRyX2NtcChkYWRkciwgXFx1MDAyNnAtXFx1MDAzZWRhZGRyKTtcXG4rfVxcbiBcXG4gdm9pZCBpbmV0X3BlZXJfYmFzZV9pbml0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYnApXFxuIHtcXG5AQCAtNzMsNiArMTAwLDggQEAgdm9pZCBfX2luaXQgaW5ldF9pbml0cGVlcnModm9pZClcXG4ge1xcbiBcXHR1NjQgbnJfZW50cmllcztcXG4gXFxuK1xcdGdldF9yYW5kb21fYnl0ZXMoXFx1MDAyNmluZXRwZWVyX2hhc2hfa2V5LCBzaXplb2YoaW5ldHBlZXJfaGFzaF9rZXkpKTtcXG4rXFxuIFxcdCAvKiAxJSBvZiBwaHlzaWNhbCBtZW1vcnkgKi9cXG4gXFx0bnJfZW50cmllcyA9IGRpdjY0X3VsKCh1NjQpdG90YWxyYW1fcGFnZXMoKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbiBcXHRcXHRcXHQgICAgICAxMDAgKiBMMV9DQUNIRV9BTElHTihzaXplb2Yoc3RydWN0IGluZXRfcGVlcikpKTtcXG5AQCAtODQsNiArMTEzLDcgQEAgdm9pZCBfX2luaXQgaW5ldF9pbml0cGVlcnModm9pZClcXG4gXFxuIC8qIENhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSBvciBiYXNlLVxcdTAwM2Vsb2NrIGhlbGQgKi9cXG4gc3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXFxuK1xcdFxcdFxcdFxcdHU2NCBkaGFzaCxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbiBcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgc2VxLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5ldF9wZWVyICpnY19zdGFja1tdLFxcbkBAIC0xMDUsNyArMTM1LDcgQEAgc3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRwYXJlbnQgPSBuZXh0O1xcbiBcXHRcXHRwID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgaW5ldF9wZWVyLCByYl9ub2RlKTtcXG4tXFx0XFx0Y21wID0gaW5ldHBlZXJfYWRkcl9jbXAoZGFkZHIsIFxcdTAwMjZwLVxcdTAwM2VkYWRkcik7XFxuK1xcdFxcdGNtcCA9IGluZXRwZWVyX2VudHJ5X2NtcChkaGFzaCwgZGFkZHIsIHApO1xcbiBcXHRcXHRpZiAoY21wID09IDApIHtcXG4gXFx0XFx0XFx0bm93ID0gamlmZmllcztcXG4gXFx0XFx0XFx0aWYgKFJFQURfT05DRShwLVxcdTAwM2VkdGltZSkgIT0gbm93KVxcbkBAIC0xNzAsNiArMjAwLDcgQEAgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG4gXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcilcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5ldF9wZWVyICpwLCAqZ2Nfc3RhY2tbUEVFUl9NQVhfR0NdO1xcbitcXHR1NjQgZGhhc2ggPSBpbmV0cGVlcl9hZGRyX2hhc2goZGFkZHIpO1xcbiBcXHRzdHJ1Y3QgcmJfbm9kZSAqKnBwLCAqcGFyZW50O1xcbiBcXHR1bnNpZ25lZCBpbnQgZ2NfY250LCBzZXE7XFxuIFxcbkBAIC0xNzcsNyArMjA4LDcgQEAgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG4gXFx0ICogQmVjYXVzZSBvZiBhIGNvbmN1cnJlbnQgd3JpdGVyLCB3ZSBtaWdodCBub3QgZmluZCBhbiBleGlzdGluZyBlbnRyeS5cXG4gXFx0ICovXFxuIFxcdHNlcSA9IHJlYWRfc2VxYmVnaW4oXFx1MDAyNmJhc2UtXFx1MDAzZWxvY2spO1xcbi1cXHRwID0gbG9va3VwKGRhZGRyLCBiYXNlLCBzZXEsIE5VTEwsIFxcdTAwMjZnY19jbnQsIFxcdTAwMjZwYXJlbnQsIFxcdTAwMjZwcCk7XFxuK1xcdHAgPSBsb29rdXAoZGFkZHIsIGRoYXNoLCBiYXNlLCBzZXEsIE5VTEwsIFxcdTAwMjZnY19jbnQsIFxcdTAwMjZwYXJlbnQsIFxcdTAwMjZwcCk7XFxuIFxcbiBcXHQvKiBNYWtlIHN1cmUgdHJlZSB3YXMgbm90IG1vZGlmaWVkIGR1cmluZyBvdXIgbG9va3VwLiAqL1xcbiBcXHRpZiAocCBcXHUwMDI2XFx1MDAyNiAhcmVhZF9zZXFyZXRyeShcXHUwMDI2YmFzZS1cXHUwMDNlbG9jaywgc2VxKSlcXG5AQCAtMTkwLDExICsyMjEsMTMgQEAgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG4gXFx0d3JpdGVfc2VxbG9ja19iaChcXHUwMDI2YmFzZS1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHRnY19jbnQgPSAwO1xcbi1cXHRwID0gbG9va3VwKGRhZGRyLCBiYXNlLCBzZXEsIGdjX3N0YWNrLCBcXHUwMDI2Z2NfY250LCBcXHUwMDI2cGFyZW50LCBcXHUwMDI2cHApO1xcbitcXHRwID0gbG9va3VwKGRhZGRyLCBkaGFzaCwgYmFzZSwgc2VxLCBnY19zdGFjaywgXFx1MDAyNmdjX2NudCwgXFx1MDAyNnBhcmVudCwgXFx1MDAyNnBwKTtcXG4gXFx0aWYgKCFwKSB7XFxuLVxcdFxcdHAgPSBrbWVtX2NhY2hlX2FsbG9jKHBlZXJfY2FjaGVwLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0aWYgKCh1NjQpYmFzZS1cXHUwMDNldG90YWwgXFx1MDAzYyAyVUxMICogUkVBRF9PTkNFKGluZXRfcGVlcl90aHJlc2hvbGQpKVxcbitcXHRcXHRcXHRwID0ga21lbV9jYWNoZV9hbGxvYyhwZWVyX2NhY2hlcCwgR0ZQX0FUT01JQyk7XFxuIFxcdFxcdGlmIChwKSB7XFxuIFxcdFxcdFxcdHAtXFx1MDAzZWRhZGRyID0gKmRhZGRyO1xcbitcXHRcXHRcXHRwLVxcdTAwM2VoYXNoID0gZGhhc2g7XFxuIFxcdFxcdFxcdHAtXFx1MDAzZWR0aW1lID0gKF9fdTMyKWppZmZpZXM7XFxuIFxcdFxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2cC1cXHUwMDNlcmVmY250LCAxKTtcXG4gXFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cC1cXHUwMDNlcmlkLCAwKTtcXG5AQCAtMjQ4LDcgKzI4MSw3IEBAIGJvb2wgaW5ldF9wZWVyX3hybGltX2FsbG93KHN0cnVjdCBpbmV0X3BlZXIgKnBlZXIsIGludCB0aW1lb3V0KVxcbiBcXHRib29sIHJjID0gZmFsc2U7XFxuIFxcbiBcXHRpZiAoIXBlZXIpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHR0b2tlbiA9IG90b2tlbiA9IFJFQURfT05DRShwZWVyLVxcdTAwM2VyYXRlX3Rva2Vucyk7XFxuIFxcdG5vdyA9IGppZmZpZXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjMzOjA2LjQ1MzY4NDU1MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM5NTY1MjYxNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbmV0X2dldHBlZXJcIixcbiAgICBcImluZXRfcGVlcl94cmxpbV9hbGxvd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBoYXNoLWJhc2VkIGxvb2t1cCBmb3IgaW5ldF9wZWVyIHN0cnVjdHVyZXMsIG1vZGlmeWluZyBpbmV0X2dldHBlZXIgdG8gdXNlIHNpcGhhc2ggZm9yIHRyZWUgaW5zZXJ0aW9uIGFuZCBsb29rdXAuIEl0IGFsc28gY2hhbmdlcyBpbmV0X3BlZXJfeHJsaW1fYWxsb3cgdG8gcmV0dXJuIGZhbHNlIHdoZW4gcGVlciBpcyBOVUxMLCBhbmQgbGltaXRzIHRoZSBhbGxvY2F0aW9uIG9mIG5ldyBwZWVycyBiYXNlZCBvbiBpbmV0X3BlZXJfdGhyZXNob2xkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIElQdjQvSVB2NiBuZXR3b3JraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgSUNNUCByYXRlIGxpbWl0aW5nIGFuZCBJUCBmcmFnbWVudGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhY2Y3ZjQwMDIxM2UxMTExZTg2ZmEyNDQ1ZjYxZmE3NjQ3NDQ4NTIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMjE6MzM6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0cGVlci5oIGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaFxuaW5kZXggZjQ3NTc1N2RhYWZiYS4uNDE0ZTlhZGY0YzUxMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmhcbisrKyBiL2luY2x1ZGUvbmV0L2luZXRwZWVyLmhcbkBAIC0zNSw2ICszNSw3IEBAIHN0cnVjdCBpbmV0cGVlcl9hZGRyIHtcbiBcbiBzdHJ1Y3QgaW5ldF9wZWVyIHtcbiBcdHN0cnVjdCByYl9ub2RlXHRcdHJiX25vZGU7XG4rXHR1NjRcdFx0XHRoYXNoO1xuIFx0c3RydWN0IGluZXRwZWVyX2FkZHJcdGRhZGRyO1xuIFxuIFx0dTMyXHRcdFx0bWV0cmljc1tSVEFYX01BWF07XG5AQCAtMTI1LDYgKzEyNiw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGluZXRwZWVyX2FkZHJfY21wKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphLFxuIHtcbiBcdGludCBpLCBuO1xuIFxuK1x0aWYgKGEtXHUwMDNlZmFtaWx5ICE9IGItXHUwMDNlZmFtaWx5KVxuK1x0XHRyZXR1cm4gYS1cdTAwM2VmYW1pbHkgXHUwMDNjIGItXHUwMDNlZmFtaWx5ID8gLTEgOiAxO1xuK1xuIFx0aWYgKGEtXHUwMDNlZmFtaWx5ID09IEFGX0lORVQpXG4gXHRcdG4gPSBzaXplb2YoYS1cdTAwM2VhNCkgLyBzaXplb2YodTMyKTtcbiBcdGVsc2VcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0cGVlci5jIGIvbmV0L2lwdjQvaW5ldHBlZXIuY1xuaW5kZXggNWI5NTdhODMxZTdjMy4uOTY4NzFmNTIwMTBmMyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2luZXRwZWVyLmNcbisrKyBiL25ldC9pcHY0L2luZXRwZWVyLmNcbkBAIC0yMSw2ICsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldHBlZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zZWN1cmVfc2VxLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXBoYXNoLmhcdTAwM2VcbiBcbiAvKlxuICAqICBUaGVvcnkgb2Ygb3BlcmF0aW9ucy5cbkBAIC01Miw2ICs1MywzMiBAQFxuICAqL1xuIFxuIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGVlcl9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xuK3N0YXRpYyBzaXBoYXNoX2FsaWduZWRfa2V5X3QgaW5ldHBlZXJfaGFzaF9rZXkgX19yZWFkX21vc3RseTtcbitcbitzdGF0aWMgdTY0IGluZXRwZWVyX2FkZHJfaGFzaChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSlcbit7XG4rXHRpZiAoYS1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVClcbitcdFx0cmV0dXJuIHNpcGhhc2hfMnUzMigoX19mb3JjZSB1MzIpYS1cdTAwM2VhNC5hZGRyLCBhLVx1MDAzZWE0LnZpZixcbitcdFx0XHRcdCAgICBcdTAwMjZpbmV0cGVlcl9oYXNoX2tleSk7XG4rXG4rXHRyZXR1cm4gc2lwaGFzaF80dTMyKChfX2ZvcmNlIHUzMilhLVx1MDAzZWE2LnM2X2FkZHIzMlswXSxcbitcdFx0XHQgICAgKF9fZm9yY2UgdTMyKWEtXHUwMDNlYTYuczZfYWRkcjMyWzFdLFxuK1x0XHRcdCAgICAoX19mb3JjZSB1MzIpYS1cdTAwM2VhNi5zNl9hZGRyMzJbMl0sXG4rXHRcdFx0ICAgIChfX2ZvcmNlIHUzMilhLVx1MDAzZWE2LnM2X2FkZHIzMlszXSxcbitcdFx0XHQgICAgXHUwMDI2aW5ldHBlZXJfaGFzaF9rZXkpO1xuK31cbitcbitzdGF0aWMgaW50IGluZXRwZWVyX2VudHJ5X2NtcCh1NjQgZGhhc2gsXG4rXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLFxuK1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0X3BlZXIgKnApXG4re1xuK1x0aWYgKGRoYXNoIFx1MDAzYyBwLVx1MDAzZWhhc2gpXG4rXHRcdHJldHVybiAtMTtcbitcdGlmIChkaGFzaCBcdTAwM2UgcC1cdTAwM2VoYXNoKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdHJldHVybiBpbmV0cGVlcl9hZGRyX2NtcChkYWRkciwgXHUwMDI2cC1cdTAwM2VkYWRkcik7XG4rfVxuIFxuIHZvaWQgaW5ldF9wZWVyX2Jhc2VfaW5pdChzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJwKVxuIHtcbkBAIC03Myw2ICsxMDAsOCBAQCB2b2lkIF9faW5pdCBpbmV0X2luaXRwZWVycyh2b2lkKVxuIHtcbiBcdHU2NCBucl9lbnRyaWVzO1xuIFxuK1x0Z2V0X3JhbmRvbV9ieXRlcyhcdTAwMjZpbmV0cGVlcl9oYXNoX2tleSwgc2l6ZW9mKGluZXRwZWVyX2hhc2hfa2V5KSk7XG4rXG4gXHQgLyogMSUgb2YgcGh5c2ljYWwgbWVtb3J5ICovXG4gXHRucl9lbnRyaWVzID0gZGl2NjRfdWwoKHU2NCl0b3RhbHJhbV9wYWdlcygpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIFx0XHRcdCAgICAgIDEwMCAqIEwxX0NBQ0hFX0FMSUdOKHNpemVvZihzdHJ1Y3QgaW5ldF9wZWVyKSkpO1xuQEAgLTg0LDYgKzExMyw3IEBAIHZvaWQgX19pbml0IGluZXRfaW5pdHBlZXJzKHZvaWQpXG4gXG4gLyogQ2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpIG9yIGJhc2UtXHUwMDNlbG9jayBoZWxkICovXG4gc3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG4rXHRcdFx0XHR1NjQgZGhhc2gsXG4gXHRcdFx0XHRzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4gXHRcdFx0XHR1bnNpZ25lZCBpbnQgc2VxLFxuIFx0XHRcdFx0c3RydWN0IGluZXRfcGVlciAqZ2Nfc3RhY2tbXSxcbkBAIC0xMDUsNyArMTM1LDcgQEAgc3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHBhcmVudCA9IG5leHQ7XG4gXHRcdHAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBpbmV0X3BlZXIsIHJiX25vZGUpO1xuLVx0XHRjbXAgPSBpbmV0cGVlcl9hZGRyX2NtcChkYWRkciwgXHUwMDI2cC1cdTAwM2VkYWRkcik7XG4rXHRcdGNtcCA9IGluZXRwZWVyX2VudHJ5X2NtcChkaGFzaCwgZGFkZHIsIHApO1xuIFx0XHRpZiAoY21wID09IDApIHtcbiBcdFx0XHRub3cgPSBqaWZmaWVzO1xuIFx0XHRcdGlmIChSRUFEX09OQ0UocC1cdTAwM2VkdGltZSkgIT0gbm93KVxuQEAgLTE3MCw2ICsyMDAsNyBAQCBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIpXG4ge1xuIFx0c3RydWN0IGluZXRfcGVlciAqcCwgKmdjX3N0YWNrW1BFRVJfTUFYX0dDXTtcbitcdHU2NCBkaGFzaCA9IGluZXRwZWVyX2FkZHJfaGFzaChkYWRkcik7XG4gXHRzdHJ1Y3QgcmJfbm9kZSAqKnBwLCAqcGFyZW50O1xuIFx0dW5zaWduZWQgaW50IGdjX2NudCwgc2VxO1xuIFxuQEAgLTE3Nyw3ICsyMDgsNyBAQCBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuIFx0ICogQmVjYXVzZSBvZiBhIGNvbmN1cnJlbnQgd3JpdGVyLCB3ZSBtaWdodCBub3QgZmluZCBhbiBleGlzdGluZyBlbnRyeS5cbiBcdCAqL1xuIFx0c2VxID0gcmVhZF9zZXFiZWdpbihcdTAwMjZiYXNlLVx1MDAzZWxvY2spO1xuLVx0cCA9IGxvb2t1cChkYWRkciwgYmFzZSwgc2VxLCBOVUxMLCBcdTAwMjZnY19jbnQsIFx1MDAyNnBhcmVudCwgXHUwMDI2cHApO1xuK1x0cCA9IGxvb2t1cChkYWRkciwgZGhhc2gsIGJhc2UsIHNlcSwgTlVMTCwgXHUwMDI2Z2NfY250LCBcdTAwMjZwYXJlbnQsIFx1MDAyNnBwKTtcbiBcbiBcdC8qIE1ha2Ugc3VyZSB0cmVlIHdhcyBub3QgbW9kaWZpZWQgZHVyaW5nIG91ciBsb29rdXAuICovXG4gXHRpZiAocCBcdTAwMjZcdTAwMjYgIXJlYWRfc2VxcmV0cnkoXHUwMDI2YmFzZS1cdTAwM2Vsb2NrLCBzZXEpKVxuQEAgLTE5MCwxMSArMjIxLDEzIEBAIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4gXHR3cml0ZV9zZXFsb2NrX2JoKFx1MDAyNmJhc2UtXHUwMDNlbG9jayk7XG4gXG4gXHRnY19jbnQgPSAwO1xuLVx0cCA9IGxvb2t1cChkYWRkciwgYmFzZSwgc2VxLCBnY19zdGFjaywgXHUwMDI2Z2NfY250LCBcdTAwMjZwYXJlbnQsIFx1MDAyNnBwKTtcbitcdHAgPSBsb29rdXAoZGFkZHIsIGRoYXNoLCBiYXNlLCBzZXEsIGdjX3N0YWNrLCBcdTAwMjZnY19jbnQsIFx1MDAyNnBhcmVudCwgXHUwMDI2cHApO1xuIFx0aWYgKCFwKSB7XG4tXHRcdHAgPSBrbWVtX2NhY2hlX2FsbG9jKHBlZXJfY2FjaGVwLCBHRlBfQVRPTUlDKTtcbitcdFx0aWYgKCh1NjQpYmFzZS1cdTAwM2V0b3RhbCBcdTAwM2MgMlVMTCAqIFJFQURfT05DRShpbmV0X3BlZXJfdGhyZXNob2xkKSlcbitcdFx0XHRwID0ga21lbV9jYWNoZV9hbGxvYyhwZWVyX2NhY2hlcCwgR0ZQX0FUT01JQyk7XG4gXHRcdGlmIChwKSB7XG4gXHRcdFx0cC1cdTAwM2VkYWRkciA9ICpkYWRkcjtcbitcdFx0XHRwLVx1MDAzZWhhc2ggPSBkaGFzaDtcbiBcdFx0XHRwLVx1MDAzZWR0aW1lID0gKF9fdTMyKWppZmZpZXM7XG4gXHRcdFx0cmVmY291bnRfc2V0KFx1MDAyNnAtXHUwMDNlcmVmY250LCAxKTtcbiBcdFx0XHRhdG9taWNfc2V0KFx1MDAyNnAtXHUwMDNlcmlkLCAwKTtcbkBAIC0yNDgsNyArMjgxLDcgQEAgYm9vbCBpbmV0X3BlZXJfeHJsaW1fYWxsb3coc3RydWN0IGluZXRfcGVlciAqcGVlciwgaW50IHRpbWVvdXQpXG4gXHRib29sIHJjID0gZmFsc2U7XG4gXG4gXHRpZiAoIXBlZXIpXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHR0b2tlbiA9IG90b2tlbiA9IFJFQURfT05DRShwZWVyLVx1MDAzZXJhdGVfdG9rZW5zKTtcbiBcdG5vdyA9IGppZmZpZXM7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozMzowNi40NTM2ODU4NDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDU4OTE0NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW5ldHBlZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgbmV0L2lwdjQvaW5ldHBlZXIuY2AgYW5kIGBpbmNsdWRlL25ldC9pbmV0cGVlci5oYC4gU2VlbXMgbGlrZSB0aGV5J3JlIGFkZGluZyBhIGBoYXNoYCBmaWVsZCB0byB0aGUgYHN0cnVjdCBpbmV0X3BlZXJgIGFuZCB1c2luZyBgc2lwaGFzaGAgdG8gZ2VuZXJhdGUgYSBoYXNoIG9mIHRoZSBJUCBhZGRyZXNzLCBzdG9yaW5nIGl0IGluIHRoYXQgZmllbGQuIFRoYXTigJlzIGludGVyZXN0aW5nLiBBIGhhc2gtYmFzZWQgbG9va3VwIGNvdWxkIHNwZWVkIHRoaW5ncyB1cCBjb25zaWRlcmFibHksIGRlcGVuZGluZyBvbiBob3cgdGhleeKAmXZlIGltcGxlbWVudGVkIHRoZSBjb2xsaXNpb24gaGFuZGxpbmcuIFRoZXkndmUgYWxzbyBtb2RpZmllZCBgaW5ldHBlZXJfYWRkcl9jbXBgIHRvIGNoZWNrIHRoZSBmYW1pbHkgZmlyc3QsIHdoaWNoIGlzIGEgZ29vZCBvcHRpbWl6YXRpb24uXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiBob3cgYGluZXRfZ2V0cGVlcmAgaGFuZGxlcyBsb29rdXBzIGFuZCBpbnNlcnRpb24sIGxldmVyYWdpbmcgdGhpcyBuZXcgaGFzaCBmaWVsZC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24uIFRoZSBvdGhlciBtb2RpZmljYXRpb24sIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgLCBqdXN0IHNlZW1zIHRvIHJldHVybiBgZmFsc2VgIGlmIHRoZSBwZWVyIGlzIG51bGwsIHdoaWNoLCBob25lc3RseSwgc2VlbXMgbGlrZSBhIGJ1ZyBmaXgg4oCTIGJldHRlciBzYWZlIHRoYW4gc29ycnksIGFuZCBpdCBzaG91bGQgcHJldmVudCBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZS5cblxuTGV0J3Mgc2Vl4oCmIHRoZXkndmUgYWxzbyB0b3VjaGVkIGBpbmV0cGVlcl9hZGRyX2hhc2hgLCBgaW5ldHBlZXJfZW50cnlfY21wYCwgYGluZXRfaW5pdHBlZXJzYCwgYW5kIHRoZSBgbG9va3VwYCBmdW5jdGlvbi4gU28gaXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgYWxsIHN0YXRpYyBvciBpbmxpbmUgaGVscGVyIGZ1bmN0aW9ucywgd2hpY2ggSSBuZWVkIHRvIGV4YW1pbmUgZm9yIHJlYWNoYWJpbGl0eS5cblxuT2theSwgbGV0J3Mgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBjYWxscyB0byBgaW5ldF9nZXRwZWVyYCBhbmQgYGluZXRfcGVlcl94cmxpbV9hbGxvd2AgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlIGNvbnRleHQgYW5kIGltcGFjdC4gVGhvc2UgYXJlIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMsIHNvIHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBJIHNob3VsZCBiZSBmb2N1c2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzMCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjMzOjExLjkxMjYwMzA5MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU5NDQ1MDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfZ2V0cGVlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pbmV0cGVlci5oPTkzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGluNl9hZGRyICppbmV0cGVlcl9nZXRfYWRkcl92NihzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIpXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTk4LS8qIGNhbiBiZSBjYWxsZWQgd2l0aCBvciB3aXRob3V0IGxvY2FsIEJIIGJlaW5nIGRpc2FibGVkICovXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDo5OTpzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTAwLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIpO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTAxLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTAyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwMy1cXHRcXHRcXHRcXHRcXHRcXHRfX2JlMzIgdjRkYWRkcixcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTEwLVxcdGRhZGRyLmZhbWlseSA9IEFGX0lORVQ7XFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMTE6XFx0cmV0dXJuIGluZXRfZ2V0cGVlcihiYXNlLCBcXHUwMDI2ZGFkZHIpO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTEyLX1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTExMy1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjExNDpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMTUtXFx0XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICp2NmRhZGRyKVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMjAtXFx0ZGFkZHIuZmFtaWx5ID0gQUZfSU5FVDY7XFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMjE6XFx0cmV0dXJuIGluZXRfZ2V0cGVlcihiYXNlLCBcXHUwMDI2ZGFkZHIpO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTIyLX1cXG4tLVxcbm5ldC9pcHY0L2ljbXAuYz0zMTE9c3RhdGljIGJvb2wgaWNtcHY0X3hybGltX2FsbG93KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHJ0YWJsZSAqcnQsXFxuLS1cXG5uZXQvaXB2NC9pY21wLmMtMzMzLVxcbm5ldC9pcHY0L2ljbXAuYzozMzQ6XFx0cGVlciA9IGluZXRfZ2V0cGVlcl92NChuZXQtXFx1MDAzZWlwdjQucGVlcnMsIGZsNC1cXHUwMDNlZGFkZHIsXFxubmV0L2lwdjQvaWNtcC5jLTMzNS1cXHRcXHRcXHQgICAgICAgbDNtZGV2X21hc3Rlcl9pZmluZGV4X3JjdShkZXYpKTtcXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmM9MTYyPXN0YXRpYyB2b2lkIGluZXRfcGVlcl9nYyhzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTE5OC0vKiBNdXN0IGJlIGNhbGxlZCB1bmRlciBSQ1UgOiBObyByZWZjb3VudCBjaGFuZ2UgaXMgZG9uZSBoZXJlLiAqL1xcbm5ldC9pcHY0L2luZXRwZWVyLmM6MTk5OnN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0yMDAtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcilcXG4tLVxcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmM9ODM9c3RhdGljIHZvaWQgaXA0X2ZyYWdfaW5pdChzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxLCBjb25zdCB2b2lkICphKVxcbi0tXFxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYy05My1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYzo5NDpcXHRcXHRwID0gaW5ldF9nZXRwZWVyX3Y0KG5ldC1cXHUwMDNlaXB2NC5wZWVycywga2V5LVxcdTAwM2VzYWRkciwga2V5LVxcdTAwM2V2aWYpO1xcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtOTUtXFx0XFx0aWYgKHAgXFx1MDAyNlxcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2cC1cXHUwMDNlcmVmY250KSlcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9OTAyPXZvaWQgaXBfcnRfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy05MjAtXFx0bmV0ID0gZGV2X25ldChydC1cXHUwMDNlZHN0LmRldik7XFxubmV0L2lwdjQvcm91dGUuYzo5MjE6XFx0cGVlciA9IGluZXRfZ2V0cGVlcl92NChuZXQtXFx1MDAzZWlwdjQucGVlcnMsIGlwX2hkcihza2IpLVxcdTAwM2VzYWRkciwgdmlmKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTkyMi1cXHRpZiAoIXBlZXIpIHtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9OTY1PXN0YXRpYyBpbnQgaXBfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTAyMi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjQvcm91dGUuYzoxMDIzOlxcdHBlZXIgPSBpbmV0X2dldHBlZXJfdjQobmV0LVxcdTAwM2VpcHY0LnBlZXJzLCBpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsXFxubmV0L2lwdjQvcm91dGUuYy0xMDI0LVxcdFxcdFxcdCAgICAgICBsM21kZXZfbWFzdGVyX2lmaW5kZXhfcmN1KHNrYi1cXHUwMDNlZGV2KSk7XFxuLS1cXG5uZXQvaXB2Ni9pY21wLmM9MTk1PXN0YXRpYyBib29sIGljbXB2Nl94cmxpbV9hbGxvdyhzdHJ1Y3Qgc29jayAqc2ssIHU4IHR5cGUsXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmMtMjI1LVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjYvaWNtcC5jOjIyNjpcXHRcXHRcXHRwZWVyID0gaW5ldF9nZXRwZWVyX3Y2KG5ldC1cXHUwMDNlaXB2Ni5wZWVycywgXFx1MDAyNmZsNi1cXHUwMDNlZGFkZHIpO1xcbm5ldC9pcHY2L2ljbXAuYy0yMjctXFx0XFx0XFx0cmVzID0gaW5ldF9wZWVyX3hybGltX2FsbG93KHBlZXIsIHRtbyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9NTE5PWludCBpcDZfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTYzOC1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjYzOTpcXHRcXHRwZWVyID0gaW5ldF9nZXRwZWVyX3Y2KG5ldC1cXHUwMDNlaXB2Ni5wZWVycywgXFx1MDAyNmhkci1cXHUwMDNlZGFkZHIpO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy02NDAtXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTE2NTU9dm9pZCBuZGlzY19zZW5kX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdGFyZ2V0KVxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy0xNzA4LVxcbm5ldC9pcHY2L25kaXNjLmM6MTcwOTpcXHRwZWVyID0gaW5ldF9nZXRwZWVyX3Y2KG5ldC1cXHUwMDNlaXB2Ni5wZWVycywgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyKTtcXG5uZXQvaXB2Ni9uZGlzYy5jLTE3MTAtXFx0aWYgKCFwZWVyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozMzoxMy42NzIwNTQwODlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mjg0NTA3Nzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgaW5ldF9nZXRwZWVyYCBQYXRjaCoqXG5cbk9rYXksIHNvIGBpbmV0X2dldHBlZXJgLi4uIHRoYXQncyBhIGtleSBmdW5jdGlvbi4gSXQncyB1c2VkIGV2ZXJ5d2hlcmUg4oCTIElDTVAgcmF0ZSBsaW1pdGluZywgSVAgZnJhZ21lbnRhdGlvbiwgaGFuZGxpbmcgcm91dGluZyByZWRpcmVjdHMsIHRoZSB3aG9sZSBzaGViYW5nLiBEZWZpbml0ZWx5IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcsIGdpdmVuIGl0cyByZWFjaC4gQW5kIHRoZSBwYXRjaD8gSXQncyBjaGFuZ2luZyBgaW5ldF9wZWVyX3hybGltX2FsbG93YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcy5cblxuV2FpdCwgdGhlIHBhdGNoIGlzIG1ha2luZyBgaW5ldF9wZWVyX3hybGltX2FsbG93YCByZXR1cm4gYGZhbHNlYCBpZiB0aGUgYHBlZXJgIGlzIE5VTEwuIFRoYXQncy4uLiBpbnRlcmVzdGluZy4gQW5kIGRlZmluaXRlbHkgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBlc3BlY2lhbGx5IHdoZW4geW91IGNvbnNpZGVyIGl0IGhhcyBpbXBhY3Qgb24gdGhpbmdzIGxpa2UgSUNNUCByYXRlIGxpbWl0aW5nLiBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBmdXJ0aGVyLiBCZWZvcmUgaXQgcmV0dXJuZWQgYHRydWVgIGlmIGBwZWVyYCB3YXMgYE5VTExgLiBUaGF0IGNoYW5nZSB3YXJyYW50cyBzY3J1dGlueS5cblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYGluZXRfZ2V0cGVlcmAgY2FuIHJldHVybiBOVUxMIG5vdyB1bmRlciB0aGUgbmV3IGxvZ2ljLCBzcGVjaWZpY2FsbHkgaWYgdGhlIHBlZXIgdGhyZXNob2xkIGlzIGV4Y2VlZGVkLCB0aGF0J3Mgd2hhdCB0aGF0IGNvZGUgaXMgaW1wbHlpbmcuXG5cblRoZSBwYXRjaCBpdHNlbGYgc2F5czpcblxuYGBgY1xuIFx0Z2NfY250ID0gMDtcbi1cdHAgPSBsb29rdXAoZGFkZHIsIGJhc2UsIHNlcSwgZ2Nfc3RhY2ssIFx1MDAyNmdjX2NudCwgXHUwMDI2cGFyZW50LCBcdTAwMjZwcCk7XG4rXHRwID0gbG9va3VwKGRhZGRyLCBkaGFzaCwgYmFzZSwgc2VxLCBnY19zdGFjaywgXHUwMDI2Z2NfY250LCBcdTAwMjZwYXJlbnQsIFx1MDAyNnBwKTtcbiBcdGlmICghcCkge1xuLVx0XHRwID0ga21lbV9jYWNoZV9hbGxvYyhwZWVyX2NhY2hlcCwgR0ZQX0FUT01JQyk7XG4rXHRcdGlmICgodTY0KWJhc2UtXHUwMDNldG90YWwgXHUwMDNjIDJVTEwgKiBSRUFEX09OQ0UoaW5ldF9wZWVyX3RocmVzaG9sZCkpXG4rXHRcdFx0cCA9IGttZW1fY2FjaGVfYWxsb2MocGVlcl9jYWNoZXAsIEdGUF9BVE9NSUMpO1xuIFx0XHRpZiAocCkge1xuYGBgXG5cblNvIGl0IGxvb2tzIGxpa2UgaWYgdGhlIHRocmVzaG9sZCBpcyBleGNlZWRlZCwgdGhlIGFsbG9jYXRpb24gaXMgc2tpcHBlZCBhbmQgTlVMTCBpcyByZXR1cm5lZCBmcm9tIGBpbmV0X2dldHBlZXJgLlxuXG5SaWdodCwgYW5kIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgICpub3cqIHJldHVybnMgYGZhbHNlYCBpZiBgcGVlcmAgaXMgTlVMTC4gVGhhdCdzIHRoZSBjcml0aWNhbCBjb25uZWN0aW9uIGhlcmUuIElmIHRoZSBwZWVyIHRocmVzaG9sZCBpcyBleGNlZWRlZCwgYGluZXRfZ2V0cGVlcmAgcmV0dXJucyBOVUxMLCBhbmQgdGhlbiBgaW5ldF9wZWVyX3hybGltX2FsbG93YCByZXR1cm5zIGBmYWxzZWAsIG1lYW5pbmcgdGhlIHBhY2tldCBpcyAqbm90IGFsbG93ZWQqLiBUaGlzIG1lYW5zIGlmIHRoZSB0aHJlc2hvbGQgaXMgZXhjZWVkZWQsIElDTVAgcmF0ZSBsaW1pdGluZyB3aWxsIHN0YXJ0ICpkcm9wcGluZyogcGFja2V0cyBiZWNhdXNlIGl0J3MgaW50ZXJwcmV0ZWQgYXMgXCJub3QgYWxsb3dlZFwiLiBUaGF0J3MgYSBkZWZpbml0ZSBiZWhhdmlvciBjaGFuZ2UuXG5cbkxldCdzIGNvbmZpcm0gaG93IGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzEzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjMzOjIwLjk1NjU2NDQ4M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY2MTMzMzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfcGVlcl94cmxpbV9hbGxvd1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pbmV0cGVlci5oPTE0OT12b2lkIGluZXRfcHV0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyICpwKTtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjE1MDpib29sIGluZXRfcGVlcl94cmxpbV9hbGxvdyhzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyLCBpbnQgdGltZW91dCk7XFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xNTEtXFxuLS1cXG5uZXQvaXB2NC9pY21wLmM9MzExPXN0YXRpYyBib29sIGljbXB2NF94cmxpbV9hbGxvdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydGFibGUgKnJ0LFxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTMzNS1cXHRcXHRcXHQgICAgICAgbDNtZGV2X21hc3Rlcl9pZmluZGV4X3JjdShkZXYpKTtcXG5uZXQvaXB2NC9pY21wLmM6MzM2OlxcdHJjID0gaW5ldF9wZWVyX3hybGltX2FsbG93KHBlZXIsIHBlZXJfdGltZW91dCk7XFxubmV0L2lwdjQvaWNtcC5jLTMzNy1cXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmM9MjU0PXZvaWQgaW5ldF9wdXRwZWVyKHN0cnVjdCBpbmV0X3BlZXIgKnApXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTI3Ny0jZGVmaW5lIFhSTElNX0JVUlNUX0ZBQ1RPUiA2XFxubmV0L2lwdjQvaW5ldHBlZXIuYzoyNzg6Ym9vbCBpbmV0X3BlZXJfeHJsaW1fYWxsb3coc3RydWN0IGluZXRfcGVlciAqcGVlciwgaW50IHRpbWVvdXQpXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0yNzkte1xcbi0tXFxubmV0L2lwdjYvaWNtcC5jPTE5NT1zdGF0aWMgYm9vbCBpY21wdjZfeHJsaW1fYWxsb3coc3RydWN0IHNvY2sgKnNrLCB1OCB0eXBlLFxcbi0tXFxubmV0L2lwdjYvaWNtcC5jLTIyNi1cXHRcXHRcXHRwZWVyID0gaW5ldF9nZXRwZWVyX3Y2KG5ldC1cXHUwMDNlaXB2Ni5wZWVycywgXFx1MDAyNmZsNi1cXHUwMDNlZGFkZHIpO1xcbm5ldC9pcHY2L2ljbXAuYzoyMjc6XFx0XFx0XFx0cmVzID0gaW5ldF9wZWVyX3hybGltX2FsbG93KHBlZXIsIHRtbyk7XFxubmV0L2lwdjYvaWNtcC5jLTIyOC1cXHRcXHR9XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9NTE5PWludCBpcDZfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTY0My1cXHRcXHQgKi9cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6NjQ0OlxcdFxcdGlmIChwZWVyIFxcdTAwMjZcXHUwMDI2IGluZXRfcGVlcl94cmxpbV9hbGxvdyhwZWVyLCAxKkhaKSlcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtNjQ1LVxcdFxcdFxcdG5kaXNjX3NlbmRfcmVkaXJlY3Qoc2tiLCB0YXJnZXQpO1xcbi0tXFxubmV0L2lwdjYvbmRpc2MuYz0xNjU1PXZvaWQgbmRpc2Nfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnRhcmdldClcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTcxMS1cXHRcXHRnb3RvIHJlbGVhc2U7XFxubmV0L2lwdjYvbmRpc2MuYzoxNzEyOlxcdHJldCA9IGluZXRfcGVlcl94cmxpbV9hbGxvdyhwZWVyLCAxKkhaKTtcXG5uZXQvaXB2Ni9uZGlzYy5jLTE3MTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjMzOjIyLjgyMjcwNzU1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNDE0MTA5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUmVjZW50IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIGtleSBhcmVhcywgc3BlY2lmaWNhbGx5IGBpbmV0X2dldHBlZXJgIGFuZCBgaW5ldF9wZWVyX3hybGltX2FsbG93YC4gSSBzZWUgaXQncyBhbHNvIGFkZGVkIGBpbmV0cGVlcl9hZGRyX2hhc2hgIGFuZCBgaW5ldHBlZXJfZW50cnlfY21wYCB0byBgbmV0L2lwdjQvaW5ldHBlZXIuY2AsIGFuZCBtb2RpZmllZCBgaW5ldHBlZXJfYWRkcl9jbXBgIGluIGBpbmNsdWRlL25ldC9pbmV0cGVlci5oYC4gTm8gb2J2aW91cyByZWQgZmxhZ3MgZnJvbSBhIGN1cnNvcnkgZ2xhbmNlLCBzbyBpdCBsb29rcyBsaWtlIGl04oCZcyByZWFjaGFibGUgYW5kIHNob3VsZCB3b3JrIGFzIGludGVuZGVkLlxuXG5UaGUgZnVuY3Rpb25zIHRoYXQgKnJlYWxseSogbmVlZCBhIGNsb3NlciBsb29rLCB0aG91Z2gsIGFyZTogYGluZXRfZ2V0cGVlcmAsIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgLCB0aGVuIGFsc28gYGljbXB2NF94cmxpbV9hbGxvd2AsIGBpY21wdjZfeHJsaW1fYWxsb3dgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIG9uZXMgdG91Y2hpbmcgcm91dGluZywgbGlrZSBgaXA0X2ZyYWdfaW5pdGAsIGBpcF9ydF9zZW5kX3JlZGlyZWN0YCwgYGlwX2Vycm9yYCwgYGlwNl9mb3J3YXJkYCBhbmQgYG5kaXNjX3NlbmRfcmVkaXJlY3RgLlxuXG5XYWl0LCBsZXQncyBzdGVwIGJhY2sgLSBgaW5ldF9nZXRwZWVyYCBpcyB0aGUgY2VudHJhbCBhY2Nlc3MgcG9pbnQgaGVyZS4gVGhhdCdzIHRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24gZmlyc3QsIGVzcGVjaWFsbHkgdG8gc2VlIHdoYXQncyBjaGFuZ2VkIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3RoZXIgZnVuY3Rpb25zLiBMZXQncyBtYWtlIHN1cmUgdGhhdCB0aGVyZSBhcmUgbm8gY29uZGl0aW9uYWwgY29uZmlncyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGUgYmVoYXZpb3IuIExldCBtZSBzZWUsIGBpbmV0cGVlci5jYCBpcyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHkgaW4gYG5ldC9pcHY0L01ha2VmaWxlYD8gR29vZCwgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gT2theSwgdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBteSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM2NCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozMzoyNy44NjQxMjExMTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0MDI0NDkxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0cGVlclxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZS01LVxcbm5ldC9pcHY0L01ha2VmaWxlOjY6b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS03LVxcdCAgICAgaXBfaW5wdXQubyBpcF9mcmFnbWVudC5vIGlwX2ZvcndhcmQubyBpcF9vcHRpb25zLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozMzozMC43MDQzNzEzNzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTY3MjE3MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIElQdjQgUGVlciBJbmZvcm1hdGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gYGluZXRwZWVyLm9gIGlzIGRlZmluaXRlbHkgY29tcGlsZWQgYXV0b21hdGljYWxseSBmb3IgSVB2NCDigJMgdGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gSVB2NCdzIGRlcGVuZGVuY2Ugb24gYENPTkZJR19JTkVUYC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgZnVydGhlci5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgYW5kIHV0aWxpemVzIHBlZXIgaW5mb3JtYXRpb24sIHNwZWNpZmljYWxseSBmb3IgSVB2NC4gSeKAmWxsIHN0YXJ0IGJ5IGV4YW1pbmluZyBgaW5ldF9nZXRwZWVyYCBhbmQgYGluZXRfcGVlcl94cmxpbV9hbGxvd2Agd2l0aGluIGBGb2N1c1N5bWJvbHNgLiBJdCdzIGFsc28gd29ydGggbm90aW5nIHRoYXQgYGluZXRfaW5pdHBlZXJzYCBpcyBjYWxsZWQgZHVyaW5nIGtlcm5lbCBpbml0aWFsaXphdGlvbi4gVGhpcyB3b3VsZCBiZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgdGhlIHJldmVyc2UgZW5naW5lZXJpbmcgcHJvY2Vzcy5cblxuQWxyaWdodCwgbGV0J3MgY29uc29saWRhdGUgdGhlc2UgZmluZGluZ3MuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGVzZSBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gSSdsbCBmbGFnIHRoZXNlIHdpdGggYFdvcnRoRnV6emluZzogdHJ1ZWAuIE15IGBGb2N1c1N5bWJvbHNgIGxpc3QgaW5jbHVkZXM6IGBpbmV0X2dldHBlZXJgLCBgaW5ldF9wZWVyX3hybGltX2FsbG93YCwgYGljbXB2NF94cmxpbV9hbGxvd2AsIGFuZCBgaWNtcHY2X3hybGltX2FsbG93YC5cblxuSSdsbCBhbHNvIGtlZXAgaW4gbWluZCB0aGF0IEknbGwgbmVlZCBgSU5FVGAgYW5kIGBJUFY2YCBlbmFibGVkIGZvciBhbnkgdGVzdGluZyB0byBiZSByZWxldmFudC5cblxuV2FpdCwgbG9va2luZyBhdCBgaWNtcHY0X3hybGltX2FsbG93YCBhZ2FpbiwgSSByZWFsaXplIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIFByb2JhYmx5IG5vdCB0aGUgKmJlc3QqIHN5bWJvbCB0byBjYWxsIG91dCwgYnV0IGl04oCZcyBmaW5lIGZvciBub3csIGFuZCBpdCBtYXkgc3RpbGwgb2ZmZXIgc29tZSB2YWx1ZS4gSSBrbm93IGBpbmV0X2dldHBlZXJgIGFuZCBgaW5ldF9wZWVyX3hybGltX2FsbG93YCBhcmUgZXhwb3J0ZWQvZ2xvYmFsLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIHNpZ25hdHVyZXMgb2YgYGluZXRfZ2V0cGVlcmAgYW5kIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgaW5wdXRzIGFuZCBvdXRwdXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDI4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjMzOjM1Ljg3MTU5MTgxMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NzQ0ODA3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgaW5ldF9wZWVyIFxcXFwqaW5ldF9nZXRwZWVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2luZXRwZWVyLmg9OTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW42X2FkZHIgKmluZXRwZWVyX2dldF9hZGRyX3Y2KHN0cnVjdCBpbmV0cGVlcl9hZGRyICppYWRkcilcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtOTgtLyogY2FuIGJlIGNhbGxlZCB3aXRoIG9yIHdpdGhvdXQgbG9jYWwgQkggYmVpbmcgZGlzYWJsZWQgKi9cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjk5OnN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDAtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcik7XFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDEtXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMDI6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjQoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTAzLVxcdFxcdFxcdFxcdFxcdFxcdF9fYmUzMiB2NGRhZGRyLFxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMTMtXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjYoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTE1LVxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdjZkYWRkcilcXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmM9MTYyPXN0YXRpYyB2b2lkIGluZXRfcGVlcl9nYyhzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTE5OC0vKiBNdXN0IGJlIGNhbGxlZCB1bmRlciBSQ1UgOiBObyByZWZjb3VudCBjaGFuZ2UgaXMgZG9uZSBoZXJlLiAqL1xcbm5ldC9pcHY0L2luZXRwZWVyLmM6MTk5OnN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0yMDAtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzM6MzguMzY5MDQ3NjY4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1Njg4OTgxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGluZXRfcGVlcmAgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IHdlIGhhbmRsZSB0aGUgYGluZXRfcGVlcmAgc3RydWN0dXJlcywgc3BlY2lmaWNhbGx5IHRoZSBsb29rdXAgbWVjaGFuaXNtLiBUaGUga2V5IGZ1bmN0aW9ucyBpbXBhY3RlZCBhcHBlYXIgdG8gYmUgYGluZXRfZ2V0cGVlcmAgYW5kIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdG8gaW5jbHVkZSB0aG9zZSBpbiBteSBhbmFseXNpcy4gSSBzaG91bGQgYWxzbyBjaGVjayBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcG90ZW50aWFsbHkgcmVsZXZhbnQgZnVuY3Rpb25zLlxuXG5BaCwgcmlnaHQsIGBpbmV0X2dldHBlZXJfdjRgIGFuZCBgaW5ldF9nZXRwZWVyX3Y2YCBhcmUgaW5saW5lZDsgdGhleSBhcmUgbm90IGZ1bmN0aW9ucyBvZiB0aGVpciBvd24uIEFuZCBzb21lIGFyZSBzdGF0aWMsIGxpa2UgYGxvb2t1cGAsIGBpbmV0cGVlcl9hZGRyX2hhc2hgLCBhbmQgYGluZXRwZWVyX2VudHJ5X2NtcGAuIFRoZXkgd29uJ3QgYmUgZXhwb3NlZCBmb3IgbW9kaWZpY2F0aW9uLlxuXG5TbywgYGluZXRfZ2V0cGVlcmAgYW5kIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIGFyZSB0aGUgY3JpdGljYWwgb25lcyB0byBmb2N1cyBvbiBoZXJlLlxuXG5UaGUgcmVhbCBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoZSBzd2l0Y2ggdG8gYSBoYXNoLWJhc2VkIGxvb2t1cCB1c2luZyBgc2lwaGFzaGAgZm9yIHRoZSBgaW5ldF9wZWVyYCBzdHJ1Y3R1cmVzLiBUaGF0J3MgYSBzaWduaWZpY2FudCBzaGlmdCBmcm9tIHdoYXRldmVyIHRoZSBwcmV2aW91cyBtZXRob2Qgd2FzLiBUaGlzIGlzIGdvaW5nIHRvIGltcGFjdCBob3cgbmV3IHBlZXJzIGFyZSBhZGRlZCBhbmQgaG93IGV4aXN0aW5nIHBlZXJzIGFyZSBsb29rZWQgdXAsIHdoaWNoIGlzIGZ1bmRhbWVudGFsIHRvIElQdjQvSVB2NiBuZXR3b3JraW5nIGxvZ2ljLCBlc3BlY2lhbGx5IHdpdGggSUNNUCByYXRlIGxpbWl0aW5nIGFuZCBJUCBmcmFnbWVudGF0aW9uLiBUaGUgY2hhbmdlIHRvIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIHJldHVybmluZyBgZmFsc2VgIHdoZW4gYHBlZXJgIGlzIGBOVUxMYCBpcyBhbHNvIG5vdGV3b3J0aHkgYmVjYXVzZSBpdCBzdWdnZXN0cyBhIHNwZWNpZmljIGhhbmRsaW5nIG9mIHRoZSBwZWVyIG5vdCBiZWluZyBmb3VuZCwgd2hpY2ggY291bGQgaGF2ZSBrbm9jay1vbiBlZmZlY3RzLiBGdXJ0aGVybW9yZSwgdGhlIGludHJvZHVjdGlvbiBvZiBhIHRocmVzaG9sZCBmb3IgcGVlciBhbGxvY2F0aW9uIHZpYSBgaW5ldF9wZWVyX3RocmVzaG9sZGAgbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLlxuXG5MZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIHNlZSB3aGF0IHRoZSBkb3duc3RyZWFtIGltcGFjdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA2NiwiT3V0cHV0VG9rZW5zIjoxNDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzM6NDUuOTM3OTQ3ODg1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA5OTU1NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbmV0X2dldHBlZXJcIixcbiAgICBcImluZXRfcGVlcl94cmxpbV9hbGxvd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBoYXNoLWJhc2VkIGxvb2t1cCBmb3IgaW5ldF9wZWVyIHN0cnVjdHVyZXMsIG1vZGlmeWluZyBpbmV0X2dldHBlZXIgdG8gdXNlIHNpcGhhc2ggZm9yIHRyZWUgaW5zZXJ0aW9uIGFuZCBsb29rdXAuIEl0IGFsc28gY2hhbmdlcyBpbmV0X3BlZXJfeHJsaW1fYWxsb3cgdG8gcmV0dXJuIGZhbHNlIHdoZW4gcGVlciBpcyBOVUxMLCBhbmQgbGltaXRzIHRoZSBhbGxvY2F0aW9uIG9mIG5ldyBwZWVycyBiYXNlZCBvbiBpbmV0X3BlZXJfdGhyZXNob2xkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIElQdjQvSVB2NiBuZXR3b3JraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgSUNNUCByYXRlIGxpbWl0aW5nIGFuZCBJUCBmcmFnbWVudGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbmV0X2dldHBlZXJcIixcbiAgICBcImluZXRfcGVlcl94cmxpbV9hbGxvd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBoYXNoLWJhc2VkIGxvb2t1cCBmb3IgaW5ldF9wZWVyIHN0cnVjdHVyZXMsIG1vZGlmeWluZyBpbmV0X2dldHBlZXIgdG8gdXNlIHNpcGhhc2ggZm9yIHRyZWUgaW5zZXJ0aW9uIGFuZCBsb29rdXAuIEl0IGFsc28gY2hhbmdlcyBpbmV0X3BlZXJfeHJsaW1fYWxsb3cgdG8gcmV0dXJuIGZhbHNlIHdoZW4gcGVlciBpcyBOVUxMLCBhbmQgbGltaXRzIHRoZSBhbGxvY2F0aW9uIG9mIG5ldyBwZWVycyBiYXNlZCBvbiBpbmV0X3BlZXJfdGhyZXNob2xkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIElQdjQvSVB2NiBuZXR3b3JraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgSUNNUCByYXRlIGxpbWl0aW5nIGFuZCBJUCBmcmFnbWVudGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozMzo0Ni4wMTg5NTA0ODJaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODc5ODI1MzMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjMzOjQ2LjAxOTQ1NTA0MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDg3OTc3NDUwNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBgaW5ldF9wZWVyYCB0cmFja2luZyBtZWNoYW5pc20gYnkgYWRkaW5nIGEgaGFzaCBmaWVsZCB0byBvcHRpbWl6ZSByZWQtYmxhY2sgdHJlZSBsb29rdXBzIGFuZCBmaXhpbmcgYSBjb21wYXJpc29uIGJ1ZyBiZXR3ZWVuIElQdjQgYW5kIElQdjYgYWRkcmVzc2VzLiBUaGUgbmV3IGhhc2ggZnVuY3Rpb24gKGBpbmV0cGVlcl9hZGRyX2hhc2hgKSBhbmQgdGhlIG1vZGlmaWVkIGNvbXBhcmlzb24gZnVuY3Rpb24gKGBpbmV0cGVlcl9lbnRyeV9jbXBgKSBleHBsaWNpdGx5IG9ubHkgcmVhZCB0aGUgaW5pdGlhbGl6ZWQgZmllbGRzIG9mIHRoZSBgaW5ldHBlZXJfYWRkcmAgdW5pb24gKGBhNC5hZGRyYCBhbmQgYGE0LnZpZmAgZm9yIElQdjQsIGFuZCBgYTYuczZfYWRkcjMyYCBmb3IgSVB2NikuIFdoaWxlIHRoZSBgaW5ldHBlZXJfYWRkcmAgdW5pb24gY29udGFpbnMgdW5pbml0aWFsaXplZCBwYWRkaW5nIGZvciBJUHY0IGFkZHJlc3NlcywgdGhpcyBwYWRkaW5nIGlzIG5ldmVyIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGBpbmV0X3BlZXJgIHN0cnVjdHVyZSBpcyBwdXJlbHkgYW4gaW50ZXJuYWwga2VybmVsIHRyYWNraW5nIHN0cnVjdHVyZSBhbmQgaXMgbm90IGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhY2Y3ZjQwMDIxM2UxMTExZTg2ZmEyNDQ1ZjYxZmE3NjQ3NDQ4NTIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMjE6MzM6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0cGVlci5oIGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaFxuaW5kZXggZjQ3NTc1N2RhYWZiYS4uNDE0ZTlhZGY0YzUxMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmhcbisrKyBiL2luY2x1ZGUvbmV0L2luZXRwZWVyLmhcbkBAIC0zNSw2ICszNSw3IEBAIHN0cnVjdCBpbmV0cGVlcl9hZGRyIHtcbiBcbiBzdHJ1Y3QgaW5ldF9wZWVyIHtcbiBcdHN0cnVjdCByYl9ub2RlXHRcdHJiX25vZGU7XG4rXHR1NjRcdFx0XHRoYXNoO1xuIFx0c3RydWN0IGluZXRwZWVyX2FkZHJcdGRhZGRyO1xuIFxuIFx0dTMyXHRcdFx0bWV0cmljc1tSVEFYX01BWF07XG5AQCAtMTI1LDYgKzEyNiw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGluZXRwZWVyX2FkZHJfY21wKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphLFxuIHtcbiBcdGludCBpLCBuO1xuIFxuK1x0aWYgKGEtXHUwMDNlZmFtaWx5ICE9IGItXHUwMDNlZmFtaWx5KVxuK1x0XHRyZXR1cm4gYS1cdTAwM2VmYW1pbHkgXHUwMDNjIGItXHUwMDNlZmFtaWx5ID8gLTEgOiAxO1xuK1xuIFx0aWYgKGEtXHUwMDNlZmFtaWx5ID09IEFGX0lORVQpXG4gXHRcdG4gPSBzaXplb2YoYS1cdTAwM2VhNCkgLyBzaXplb2YodTMyKTtcbiBcdGVsc2VcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0cGVlci5jIGIvbmV0L2lwdjQvaW5ldHBlZXIuY1xuaW5kZXggNWI5NTdhODMxZTdjMy4uOTY4NzFmNTIwMTBmMyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2luZXRwZWVyLmNcbisrKyBiL25ldC9pcHY0L2luZXRwZWVyLmNcbkBAIC0yMSw2ICsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldHBlZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zZWN1cmVfc2VxLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXBoYXNoLmhcdTAwM2VcbiBcbiAvKlxuICAqICBUaGVvcnkgb2Ygb3BlcmF0aW9ucy5cbkBAIC01Miw2ICs1MywzMiBAQFxuICAqL1xuIFxuIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGVlcl9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xuK3N0YXRpYyBzaXBoYXNoX2FsaWduZWRfa2V5X3QgaW5ldHBlZXJfaGFzaF9rZXkgX19yZWFkX21vc3RseTtcbitcbitzdGF0aWMgdTY0IGluZXRwZWVyX2FkZHJfaGFzaChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSlcbit7XG4rXHRpZiAoYS1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVClcbitcdFx0cmV0dXJuIHNpcGhhc2hfMnUzMigoX19mb3JjZSB1MzIpYS1cdTAwM2VhNC5hZGRyLCBhLVx1MDAzZWE0LnZpZixcbitcdFx0XHRcdCAgICBcdTAwMjZpbmV0cGVlcl9oYXNoX2tleSk7XG4rXG4rXHRyZXR1cm4gc2lwaGFzaF80dTMyKChfX2ZvcmNlIHUzMilhLVx1MDAzZWE2LnM2X2FkZHIzMlswXSxcbitcdFx0XHQgICAgKF9fZm9yY2UgdTMyKWEtXHUwMDNlYTYuczZfYWRkcjMyWzFdLFxuK1x0XHRcdCAgICAoX19mb3JjZSB1MzIpYS1cdTAwM2VhNi5zNl9hZGRyMzJbMl0sXG4rXHRcdFx0ICAgIChfX2ZvcmNlIHUzMilhLVx1MDAzZWE2LnM2X2FkZHIzMlszXSxcbitcdFx0XHQgICAgXHUwMDI2aW5ldHBlZXJfaGFzaF9rZXkpO1xuK31cbitcbitzdGF0aWMgaW50IGluZXRwZWVyX2VudHJ5X2NtcCh1NjQgZGhhc2gsXG4rXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLFxuK1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0X3BlZXIgKnApXG4re1xuK1x0aWYgKGRoYXNoIFx1MDAzYyBwLVx1MDAzZWhhc2gpXG4rXHRcdHJldHVybiAtMTtcbitcdGlmIChkaGFzaCBcdTAwM2UgcC1cdTAwM2VoYXNoKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdHJldHVybiBpbmV0cGVlcl9hZGRyX2NtcChkYWRkciwgXHUwMDI2cC1cdTAwM2VkYWRkcik7XG4rfVxuIFxuIHZvaWQgaW5ldF9wZWVyX2Jhc2VfaW5pdChzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJwKVxuIHtcbkBAIC03Myw2ICsxMDAsOCBAQCB2b2lkIF9faW5pdCBpbmV0X2luaXRwZWVycyh2b2lkKVxuIHtcbiBcdHU2NCBucl9lbnRyaWVzO1xuIFxuK1x0Z2V0X3JhbmRvbV9ieXRlcyhcdTAwMjZpbmV0cGVlcl9oYXNoX2tleSwgc2l6ZW9mKGluZXRwZWVyX2hhc2hfa2V5KSk7XG4rXG4gXHQgLyogMSUgb2YgcGh5c2ljYWwgbWVtb3J5ICovXG4gXHRucl9lbnRyaWVzID0gZGl2NjRfdWwoKHU2NCl0b3RhbHJhbV9wYWdlcygpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIFx0XHRcdCAgICAgIDEwMCAqIEwxX0NBQ0hFX0FMSUdOKHNpemVvZihzdHJ1Y3QgaW5ldF9wZWVyKSkpO1xuQEAgLTg0LDYgKzExMyw3IEBAIHZvaWQgX19pbml0IGluZXRfaW5pdHBlZXJzKHZvaWQpXG4gXG4gLyogQ2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpIG9yIGJhc2UtXHUwMDNlbG9jayBoZWxkICovXG4gc3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG4rXHRcdFx0XHR1NjQgZGhhc2gsXG4gXHRcdFx0XHRzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4gXHRcdFx0XHR1bnNpZ25lZCBpbnQgc2VxLFxuIFx0XHRcdFx0c3RydWN0IGluZXRfcGVlciAqZ2Nfc3RhY2tbXSxcbkBAIC0xMDUsNyArMTM1LDcgQEAgc3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHBhcmVudCA9IG5leHQ7XG4gXHRcdHAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBpbmV0X3BlZXIsIHJiX25vZGUpO1xuLVx0XHRjbXAgPSBpbmV0cGVlcl9hZGRyX2NtcChkYWRkciwgXHUwMDI2cC1cdTAwM2VkYWRkcik7XG4rXHRcdGNtcCA9IGluZXRwZWVyX2VudHJ5X2NtcChkaGFzaCwgZGFkZHIsIHApO1xuIFx0XHRpZiAoY21wID09IDApIHtcbiBcdFx0XHRub3cgPSBqaWZmaWVzO1xuIFx0XHRcdGlmIChSRUFEX09OQ0UocC1cdTAwM2VkdGltZSkgIT0gbm93KVxuQEAgLTE3MCw2ICsyMDAsNyBAQCBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIpXG4ge1xuIFx0c3RydWN0IGluZXRfcGVlciAqcCwgKmdjX3N0YWNrW1BFRVJfTUFYX0dDXTtcbitcdHU2NCBkaGFzaCA9IGluZXRwZWVyX2FkZHJfaGFzaChkYWRkcik7XG4gXHRzdHJ1Y3QgcmJfbm9kZSAqKnBwLCAqcGFyZW50O1xuIFx0dW5zaWduZWQgaW50IGdjX2NudCwgc2VxO1xuIFxuQEAgLTE3Nyw3ICsyMDgsNyBAQCBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuIFx0ICogQmVjYXVzZSBvZiBhIGNvbmN1cnJlbnQgd3JpdGVyLCB3ZSBtaWdodCBub3QgZmluZCBhbiBleGlzdGluZyBlbnRyeS5cbiBcdCAqL1xuIFx0c2VxID0gcmVhZF9zZXFiZWdpbihcdTAwMjZiYXNlLVx1MDAzZWxvY2spO1xuLVx0cCA9IGxvb2t1cChkYWRkciwgYmFzZSwgc2VxLCBOVUxMLCBcdTAwMjZnY19jbnQsIFx1MDAyNnBhcmVudCwgXHUwMDI2cHApO1xuK1x0cCA9IGxvb2t1cChkYWRkciwgZGhhc2gsIGJhc2UsIHNlcSwgTlVMTCwgXHUwMDI2Z2NfY250LCBcdTAwMjZwYXJlbnQsIFx1MDAyNnBwKTtcbiBcbiBcdC8qIE1ha2Ugc3VyZSB0cmVlIHdhcyBub3QgbW9kaWZpZWQgZHVyaW5nIG91ciBsb29rdXAuICovXG4gXHRpZiAocCBcdTAwMjZcdTAwMjYgIXJlYWRfc2VxcmV0cnkoXHUwMDI2YmFzZS1cdTAwM2Vsb2NrLCBzZXEpKVxuQEAgLTE5MCwxMSArMjIxLDEzIEBAIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4gXHR3cml0ZV9zZXFsb2NrX2JoKFx1MDAyNmJhc2UtXHUwMDNlbG9jayk7XG4gXG4gXHRnY19jbnQgPSAwO1xuLVx0cCA9IGxvb2t1cChkYWRkciwgYmFzZSwgc2VxLCBnY19zdGFjaywgXHUwMDI2Z2NfY250LCBcdTAwMjZwYXJlbnQsIFx1MDAyNnBwKTtcbitcdHAgPSBsb29rdXAoZGFkZHIsIGRoYXNoLCBiYXNlLCBzZXEsIGdjX3N0YWNrLCBcdTAwMjZnY19jbnQsIFx1MDAyNnBhcmVudCwgXHUwMDI2cHApO1xuIFx0aWYgKCFwKSB7XG4tXHRcdHAgPSBrbWVtX2NhY2hlX2FsbG9jKHBlZXJfY2FjaGVwLCBHRlBfQVRPTUlDKTtcbitcdFx0aWYgKCh1NjQpYmFzZS1cdTAwM2V0b3RhbCBcdTAwM2MgMlVMTCAqIFJFQURfT05DRShpbmV0X3BlZXJfdGhyZXNob2xkKSlcbitcdFx0XHRwID0ga21lbV9jYWNoZV9hbGxvYyhwZWVyX2NhY2hlcCwgR0ZQX0FUT01JQyk7XG4gXHRcdGlmIChwKSB7XG4gXHRcdFx0cC1cdTAwM2VkYWRkciA9ICpkYWRkcjtcbitcdFx0XHRwLVx1MDAzZWhhc2ggPSBkaGFzaDtcbiBcdFx0XHRwLVx1MDAzZWR0aW1lID0gKF9fdTMyKWppZmZpZXM7XG4gXHRcdFx0cmVmY291bnRfc2V0KFx1MDAyNnAtXHUwMDNlcmVmY250LCAxKTtcbiBcdFx0XHRhdG9taWNfc2V0KFx1MDAyNnAtXHUwMDNlcmlkLCAwKTtcbkBAIC0yNDgsNyArMjgxLDcgQEAgYm9vbCBpbmV0X3BlZXJfeHJsaW1fYWxsb3coc3RydWN0IGluZXRfcGVlciAqcGVlciwgaW50IHRpbWVvdXQpXG4gXHRib29sIHJjID0gZmFsc2U7XG4gXG4gXHRpZiAoIXBlZXIpXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHR0b2tlbiA9IG90b2tlbiA9IFJFQURfT05DRShwZWVyLVx1MDAzZXJhdGVfdG9rZW5zKTtcbiBcdG5vdyA9IGppZmZpZXM7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozMzo0Ni4wMTk0NTY4MzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMwMjg0NDMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBJbmV0cGVlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIHRvdWNoaW5nIGBpbmV0cGVlci5jYCBhbmQgYGluZXRwZWVyLmhgLiBJdCBzZWVtcyB0aGV5J3JlIGFkZGluZyBhIGBoYXNoYCBmaWVsZCB0byB0aGUgYHN0cnVjdCBpbmV0X3BlZXJgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCB0aGV5J3ZlIGludHJvZHVjZWQgYSBgaW5ldHBlZXJfYWRkcl9oYXNoKClgIGZ1bmN0aW9uIGZvciBoYXNoaW5nIHRoZSBgZGFkZHJgIGZpZWxkLCB3aGljaCBpcyBhIGBzdHJ1Y3QgaW5ldHBlZXJfYWRkcmAuIFNtYXJ0IG1vdmUgdG8gdXNlIGBzaXBoYXNoXzJ1MzJgIGFuZCBgc2lwaGFzaF80dTMyYCBmb3IgSVB2NCBhbmQgSVB2NiByZXNwZWN0aXZlbHkg4oCTIHRoYXQncyBhIGdvb2QgY2hvaWNlIGZvciBjcnlwdG9ncmFwaGljIGhhc2hpbmcuXG5cblJpZ2h0LCBzbyBgc3RydWN0IGluZXRwZWVyX2FkZHJgIGlzIGRlZmluZWQgaW4gdGhlIGhlYWRlciwgbGV0IG1lIHB1bGwgdGhhdCB1cCBxdWlja2x5Li4uIG9rYXksIGhlcmUgaXQgaXM6XG5cbmBgYGNcbnN0cnVjdCBpbmV0cGVlcl9hZGRyIHtcbiAgICB1bmlvbiB7XG4gICAgICAgIHN0cnVjdCB7XG4gICAgICAgICAgICBfX2JlMzIgYWRkcjtcbiAgICAgICAgICAgIF9fdTMyIHZpZjtcbiAgICAgICAgfSBhNDtcbiAgICAgICAgc3RydWN0IGluNl9hZGRyIGE2O1xuICAgIH07XG4gICAgX191MTYgZmFtaWx5O1xufTtcbmBgYFxuXG5XYWl0IGEgc2Vjb25kLi4uIGBpbmV0cGVlcl9hZGRyX2hhc2hgIGhhc2hlcyBgYTQuYWRkcmAgYW5kIGBhNC52aWZgIGZvciBJUHY0LCBhbmQgdGhlbiBgYTYuczZfYWRkcjMyYCBmb3IgSVB2NiwgcmlnaHQ/IEJ1dCB0aGUgYGZhbWlseWAgZmllbGQgaXMgKm5vdCogaW5jbHVkZWQgaW4gdGhlIGhhc2ggY29tcHV0YXRpb24hIEl0J3MganVzdCB1c2VkIGZvciBicmFuY2hpbmcuIFRoYXQncyBhIHBvdGVudGlhbCBpc3N1ZS4gV2hhdCBpZiB0d28gZGlmZmVyZW50IGBpbmV0cGVlcl9hZGRyYCBpbnN0YW5jZXMgaGFwcGVuIHRvIHByb2R1Y2UgdGhlIHNhbWUgaGFzaCB2YWx1ZSBldmVuIHRob3VnaCB0aGVpciBgZmFtaWx5YCBpcyBkaWZmZXJlbnQ/XG5cbk9rYXksIGFuZCBzb21ldGhpbmcgZWxzZSBpcyBuYWdnaW5nIGF0IG1lLiBJdCdzIHRoZSBgdmlmYCBmaWVsZCDigJMgaW4gSVB2NC4gSXMgdGhhdCBhbHdheXMgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byBjaGVjayBob3cgYHN0cnVjdCBpbmV0cGVlcl9hZGRyYCBpcyBhY3R1YWxseSAqaW5pdGlhbGl6ZWQqLiBJZiBgdmlmYCBpc24ndCBmdWxseSBzZXQsIHRoZW4gd2UgY291bGQgYmUgaGFzaGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCBjb3VsZCBsZWFkIHRvIGFsbCBzb3J0cyBvZiBwcm9ibGVtcy5cblxuTm93IHdoZXJlIGlzIGB2aWZgIGJlaW5nIHVzZWQ/IEkgc2VlbSB0byByZWNhbGwgdGhhdCdzIHJlbGF0ZWQgdG8gVlJGIG9yIEwzIGRvbWFpbnMuLi4gT2theSwgdGltZSB0byBnbyBzZWFyY2hpbmcgZm9yIGhvdyBgc3RydWN0IGluZXRwZWVyX2FkZHJgIGlzIGJlaW5nIGluaXRpYWxpemVkIGluIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjI3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzM6NTIuMzIyMzA0Mzc2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk0MjM0MDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBpbmV0cGVlcl9hZGRyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2luZXRwZWVyLmg9MjA9c3RydWN0IGlwdjRfYWRkcl9rZXkge1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0yNi1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjI3OnN0cnVjdCBpbmV0cGVlcl9hZGRyIHtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTI4LVxcdHVuaW9uIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg9MzY9c3RydWN0IGluZXRfcGVlciB7XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTM4LVxcdHU2NFxcdFxcdFxcdGhhc2g7XFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDozOTpcXHRzdHJ1Y3QgaW5ldHBlZXJfYWRkclxcdGRhZGRyO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtNDAtXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oPTcwPXZvaWQgaW5ldF9pbml0cGVlcnModm9pZCkgX19pbml0O1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC03My1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjc0OnN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0cGVlcl9zZXRfYWRkcl92NChzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIsIF9fYmUzMiBpcClcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTc1LXtcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtODAtXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDo4MTpzdGF0aWMgaW5saW5lIF9fYmUzMiBpbmV0cGVlcl9nZXRfYWRkcl92NChzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIpXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC04Mi17XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTg1LVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6ODY6c3RhdGljIGlubGluZSB2b2lkIGluZXRwZWVyX3NldF9hZGRyX3Y2KHN0cnVjdCBpbmV0cGVlcl9hZGRyICppYWRkcixcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTg3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpbjZfYWRkciAqaW42KVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC05Mi1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjkzOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluNl9hZGRyICppbmV0cGVlcl9nZXRfYWRkcl92NihzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIpXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC05NC17XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oPTk5PXN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMDA6XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcik7XFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDEtXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0xMDI9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjQoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDUte1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTA2OlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIGRhZGRyO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTA3LVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0xMTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjYoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMTYte1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTE3OlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIGRhZGRyO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTE4LVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMjMtXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMjQ6c3RhdGljIGlubGluZSBpbnQgaW5ldHBlZXJfYWRkcl9jbXAoY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmEsXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMjU6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpiKVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTI2LXtcXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmM9NTY9c3RhdGljIHNpcGhhc2hfYWxpZ25lZF9rZXlfdCBpbmV0cGVlcl9oYXNoX2tleSBfX3JlYWRfbW9zdGx5O1xcbm5ldC9pcHY0L2luZXRwZWVyLmMtNTctXFxubmV0L2lwdjQvaW5ldHBlZXIuYzo1ODpzdGF0aWMgdTY0IGluZXRwZWVyX2FkZHJfaGFzaChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSlcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTU5LXtcXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmM9NzE9c3RhdGljIGludCBpbmV0cGVlcl9lbnRyeV9jbXAodTY0IGRoYXNoLFxcbm5ldC9pcHY0L2luZXRwZWVyLmM6NzI6XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLFxcbm5ldC9pcHY0L2luZXRwZWVyLmMtNzMtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRfcGVlciAqcClcXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmM9OTk9dm9pZCBfX2luaXQgaW5ldF9pbml0cGVlcnModm9pZClcXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmMtMTE0LS8qIENhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSBvciBiYXNlLVxcdTAwM2Vsb2NrIGhlbGQgKi9cXG5uZXQvaXB2NC9pbmV0cGVlci5jOjExNTpzdGF0aWMgc3RydWN0IGluZXRfcGVlciAqbG9va3VwKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTExNi1cXHRcXHRcXHRcXHR1NjQgZGhhc2gsXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jPTE5OT1zdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbm5ldC9pcHY0L2luZXRwZWVyLmM6MjAwOlxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIpXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0yMDEte1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yMy1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI0OnN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKl9fdGNwX2dldF9tZXRyaWNzKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpzYWRkcixcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI1OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGhhc2gpO1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz00MT1zdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sge1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy00My1cXHRzdHJ1Y3QgbmV0XFx0XFx0XFx0KnRjcG1fbmV0O1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6NDQ6XFx0c3RydWN0IGluZXRwZWVyX2FkZHJcXHRcXHR0Y3BtX3NhZGRyO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6NDU6XFx0c3RydWN0IGluZXRwZWVyX2FkZHJcXHRcXHR0Y3BtX2RhZGRyO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtNDYtXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdHRjcG1fc3RhbXA7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTc0PXN0YXRpYyB2b2lkIHRjcF9tZXRyaWNfc2V0KHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG0sXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgxLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODI6c3RhdGljIGJvb2wgYWRkcl9zYW1lKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphLFxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODM6XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmIpXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04NC17XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTE2Mz1zdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0Y3BtX25ldyhzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoxNjQ6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqc2FkZHIsXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoxNjU6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0xNjYtXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgaGFzaClcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9MjIyPXN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRjcF9nZXRfZW5jb2RlKHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG0sIGludCBkZXB0aClcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjMwLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MjMxOnN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKl9fdGNwX2dldF9tZXRyaWNzKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpzYWRkcixcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjIzMjpcXHRcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yMzMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgaGFzaClcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9MjQ5PXN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKl9fdGNwX2dldF9tZXRyaWNzX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI1Mi1cXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MjUzOlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI1NC1cXHR1bnNpZ25lZCBpbnQgaGFzaDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9MjkxPXN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRjcF9nZXRfbWV0cmljcyhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI5NS1cXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6Mjk2OlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI5Ny1cXHR1bnNpZ25lZCBpbnQgaGFzaDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9NzY3PXN0YXRpYyBpbnQgdGNwX21ldHJpY3NfbmxfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MDEtXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo4MDI6c3RhdGljIGludCBfX3BhcnNlX25sX2FkZHIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGluZXRwZWVyX2FkZHIgKmFkZHIsXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MDMtXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50ICpoYXNoLCBpbnQgb3B0aW9uYWwsIGludCB2NCwgaW50IHY2KVxcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MjYtXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo4Mjc6c3RhdGljIGludCBwYXJzZV9ubF9hZGRyKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBpbmV0cGVlcl9hZGRyICphZGRyLFxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODI4LVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgKmhhc2gsIGludCBvcHRpb25hbClcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODM0LVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODM1OnN0YXRpYyBpbnQgcGFyc2Vfbmxfc2FkZHIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGluZXRwZWVyX2FkZHIgKmFkZHIpXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MzYte1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz04NDI9c3RhdGljIGludCB0Y3BfbWV0cmljc19ubF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTg0NC1cXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODQ1OlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTg0Ni1cXHR1bnNpZ25lZCBpbnQgaGFzaDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9OTI4PXN0YXRpYyBpbnQgdGNwX21ldHJpY3NfbmxfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy05MzItXFx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrIF9fcmN1ICoqcHA7XFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo5MzM6XFx0c3RydWN0IGluZXRwZWVyX2FkZHIgc2FkZHIsIGRhZGRyO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtOTM0LVxcdHVuc2lnbmVkIGludCBoYXNoO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozMzo1My45MTY1NTIzODlaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4NDIzODA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zOlxuXG4qKkRpZ2dpbmcgaW50byBJbmV0cGVlcidzIElQdjQgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYGluZXRwZWVyYCBpcyBtYW5hZ2luZyBJUHY0IGFkZHJlc3Nlcy4gSSdtIGhlYWRpbmcgc3RyYWlnaHQgaW50byBgaW5jbHVkZS9uZXQvaW5ldHBlZXIuaGAgdG8gc2VlIGhvdyBgaW5ldHBlZXJfZ2V0X2FkZHJfdjRgIGFuZCBgaW5ldHBlZXJfc2V0X2FkZHJfdjRgIGFyZSBkZWZpbmVkLiBJJ20gcmVhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGRldGFpbHMgb2YgdGhlaXIgQVBJIGFuZCBob3cgdGhleSdyZSBpbnRlbmRlZCB0byBpbnRlcmFjdCB3aXRoIHRoZSBicm9hZGVyIGluZXRwZWVyIGZyYW1ld29yay4gSSB3YW50IHRvIHNlZSBpZiB0aGUgaW1wbGVtZW50YXRpb24gaGludHMgYXQgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIG9yIGlmIHRoZXJlJ3MgYW55dGhpbmcgaW50ZXJlc3RpbmcgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBwYXNzZWQgYXJvdW5kLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGFjY2Vzc29ycyBmaXQgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgdGhlIHBlZXIgdHJhY2tpbmcgbWVjaGFuaXNtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDUyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzM6NTcuMTAwODA5MTU0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAwODEyODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRwZWVyX3NldF9hZGRyX3Y0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2luZXRwZWVyLmg9NzA9dm9pZCBpbmV0X2luaXRwZWVycyh2b2lkKSBfX2luaXQ7XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTczLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6NzQ6c3RhdGljIGlubGluZSB2b2lkIGluZXRwZWVyX3NldF9hZGRyX3Y0KHN0cnVjdCBpbmV0cGVlcl9hZGRyICppYWRkciwgX19iZTMyIGlwKVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtNzUte1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz0yNDk9c3RhdGljIHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqX190Y3BfZ2V0X21ldHJpY3NfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjYwLVxcdGNhc2UgQUZfSU5FVDpcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI2MTpcXHRcXHRpbmV0cGVlcl9zZXRfYWRkcl92NChcXHUwMDI2c2FkZHIsIGluZXRfcnNrKHJlcSktXFx1MDAzZWlyX2xvY19hZGRyKTtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI2MjpcXHRcXHRpbmV0cGVlcl9zZXRfYWRkcl92NChcXHUwMDI2ZGFkZHIsIGluZXRfcnNrKHJlcSktXFx1MDAzZWlyX3JtdF9hZGRyKTtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI2My1cXHRcXHRoYXNoID0gaXB2NF9hZGRyX2hhc2goaW5ldF9yc2socmVxKS1cXHUwMDNlaXJfcm10X2FkZHIpO1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz0yOTE9c3RhdGljIHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdGNwX2dldF9tZXRyaWNzKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMzAwLVxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQpIHtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjMwMTpcXHRcXHRpbmV0cGVlcl9zZXRfYWRkcl92NChcXHUwMDI2c2FkZHIsIGluZXRfc2soc2spLVxcdTAwM2VpbmV0X3NhZGRyKTtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjMwMjpcXHRcXHRpbmV0cGVlcl9zZXRfYWRkcl92NChcXHUwMDI2ZGFkZHIsIGluZXRfc2soc2spLVxcdTAwM2VpbmV0X2RhZGRyKTtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTMwMy1cXHRcXHRoYXNoID0gaXB2NF9hZGRyX2hhc2goaW5ldF9zayhzayktXFx1MDAzZWluZXRfZGFkZHIpO1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0zMDctXFx0XFx0aWYgKGlwdjZfYWRkcl92NG1hcHBlZChcXHUwMDI2c2stXFx1MDAzZXNrX3Y2X2RhZGRyKSkge1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MzA4OlxcdFxcdFxcdGluZXRwZWVyX3NldF9hZGRyX3Y0KFxcdTAwMjZzYWRkciwgaW5ldF9zayhzayktXFx1MDAzZWluZXRfc2FkZHIpO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MzA5OlxcdFxcdFxcdGluZXRwZWVyX3NldF9hZGRyX3Y0KFxcdTAwMjZkYWRkciwgaW5ldF9zayhzayktXFx1MDAzZWluZXRfZGFkZHIpO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMzEwLVxcdFxcdFxcdGhhc2ggPSBpcHY0X2FkZHJfaGFzaChpbmV0X3NrKHNrKS1cXHUwMDNlaW5ldF9kYWRkcik7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTgwMj1zdGF0aWMgaW50IF9fcGFyc2VfbmxfYWRkcihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYWRkcixcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODA4LVxcdGlmIChhKSB7XFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo4MDk6XFx0XFx0aW5ldHBlZXJfc2V0X2FkZHJfdjQoYWRkciwgbmxhX2dldF9pbl9hZGRyKGEpKTtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgxMC1cXHRcXHRpZiAoaGFzaClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzM6NTguNzAxNjI4NDg3WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjcxODcwNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqUGVlcmluZyBpbnRvIGBpbmV0cGVlci5oYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gc29tZSBrZXJuZWwgaW50ZXJuYWxzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgYGluY2x1ZGUvbmV0L2luZXRwZWVyLmhgIGZpbGUsIGFuZCBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIG9uIGxpbmVzIDc0IHRocm91Z2ggODAuIFRoYXQgcmVnaW9uIGxpa2VseSBob2xkcyBzb21lIGNydWNpYWwgZGVmaW5pdGlvbnMgb3Igc3RydWN0dXJlcyByZWxhdGVkIHRvIElQIHBlZXIgbWFuYWdlbWVudCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSB0cmFja2luZyBvZiByZW1vdGUgaG9zdHMsIGNvbm5lY3Rpb24gc3RhdGVzLCBvciBwZXJoYXBzIGV2ZW4gY29uZ2VzdGlvbiBjb250cm9sIHBhcmFtZXRlcnMuIEl0J3MgcHJvYmFibHkgYSBzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIGhvdyB0aGUga2VybmVsIHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCBhbiBJUCBhZGRyZXNzLCB0aGUgcm91dGluZyBkZWNpc2lvbnMsIGFuZCBhbnkgYXNzb2NpYXRlZCBzdGF0ZS4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgY29udGFpbmVkIGluIHRob3NlIGxpbmVzLiBIb3BlZnVsbHksIEknbGwgZmluZCB3aGF0IEknbSBsb29raW5nIGZvciB0aGVyZS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBkZWFscyB3aXRoIG5ldHdvcmsgY29ubmVjdGlvbnMgYXQgYSBncmFudWxhciBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM0OjAxLjgyODgyMjM5NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9pbmV0cGVlci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDcwOlxcdHZvaWQgaW5ldF9pbml0cGVlcnModm9pZCkgX19pbml0O1xcbiAgNzE6XFx0XFxuICA3MjpcXHQjZGVmaW5lIElORVRQRUVSX01FVFJJQ1NfTkVXXFx0KH4odTMyKSAwKVxcbiAgNzM6XFx0XFxuICA3NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaW5ldHBlZXJfc2V0X2FkZHJfdjQoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyLCBfX2JlMzIgaXApXFxuICA3NTpcXHR7XFxuICA3NjpcXHRcXHRpYWRkci1cXHUwMDNlYTQuYWRkciA9IGlwO1xcbiAgNzc6XFx0XFx0aWFkZHItXFx1MDAzZWE0LnZpZiA9IDA7XFxuICA3ODpcXHRcXHRpYWRkci1cXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcXG4gIDc5OlxcdH1cXG4gIDgwOlxcdFxcbiAgODE6XFx0c3RhdGljIGlubGluZSBfX2JlMzIgaW5ldHBlZXJfZ2V0X2FkZHJfdjQoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyKVxcbiAgODI6XFx0e1xcbiAgODM6XFx0XFx0cmV0dXJuIGlhZGRyLVxcdTAwM2VhNC5hZGRyO1xcbiAgODQ6XFx0fVxcbiAgODU6XFx0XFxuICA4NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaW5ldHBlZXJfc2V0X2FkZHJfdjYoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyLFxcbiAgODc6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGluNl9hZGRyICppbjYpXFxuICA4ODpcXHR7XFxuICA4OTpcXHRcXHRpYWRkci1cXHUwMDNlYTYgPSAqaW42O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNDowMS44Mjg4ODY0MjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3NTQxOTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQWRkcmVzcyBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb24qKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuIEknbSBmb2N1c2luZyBvbiBob3cgdGhlc2UgSVAgYWRkcmVzcyBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGluZXRwZWVyYCBzdWJzeXN0ZW0uIEkgc2VlIGBpbmV0cGVlcl9zZXRfYWRkcl92NGAgaXMgZXhwbGljaXRseSBzZXR0aW5nIGBpYWRkci1cdTAwM2VhNC52aWYgPSAwYC4gVGhhdCdzIGltcG9ydGFudDsgaXQncyBjbGVhcmluZyB0aGUgVmlydHVhbCBJbnRlcmZhY2UgZmllbGQgd2l0aGluIHRoZSBJUHY0IGFkZHJlc3Mgc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuXG5cbkJ1dCB3aGF0IGFib3V0IElQdjY/IEkgbmVlZCB0byBjaGVjayBob3cgaXRzIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24sIGBpbmV0cGVlcl9zZXRfYWRkcl92NmAsIGhhbmRsZXMgaXRzIFZpcnR1YWwgSW50ZXJmYWNlIGZpZWxkLiBEb2VzIGl0IGZvbGxvdyBhIHNpbWlsYXIgYXBwcm9hY2gsIGFuZCBtb3JlIGJyb2FkbHksIGhvdyBkb2VzIHRoZSBjb2RlYmFzZSBlbnN1cmUgY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgdHdvIHZlcnNpb24ncyBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24/IFdoYXQgb3RoZXIgYXNzb2NpYXRlZCBmaWVsZHMgbmVlZCB0byBiZSBsb29rZWQgYXQgdG8gZW5zdXJlIGNvbnNpc3RlbmN5PyBJdCdzIGNydWNpYWwgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlbid0IGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3Igb3IgcG90ZW50aWFsIGJ1Z3MgYXJpc2luZyBmcm9tIGRpZmZlcmluZyBpbml0aWFsaXphdGlvbiBwcmFjdGljZXMgYWNyb3NzIElQdjQgYW5kIElQdjYgaW1wbGVtZW50YXRpb25zLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kIGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjAwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNDowNi45MDQzMDg0NjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvaW5ldHBlZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA4NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaW5ldHBlZXJfc2V0X2FkZHJfdjYoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyLFxcbiAgODc6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGluNl9hZGRyICppbjYpXFxuICA4ODpcXHR7XFxuICA4OTpcXHRcXHRpYWRkci1cXHUwMDNlYTYgPSAqaW42O1xcbiAgOTA6XFx0XFx0aWFkZHItXFx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xcbiAgOTE6XFx0fVxcbiAgOTI6XFx0XFxuICA5MzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpbjZfYWRkciAqaW5ldHBlZXJfZ2V0X2FkZHJfdjYoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyKVxcbiAgOTQ6XFx0e1xcbiAgOTU6XFx0XFx0cmV0dXJuIFxcdTAwMjZpYWRkci1cXHUwMDNlYTY7XFxuICA5NjpcXHR9XFxuICA5NzpcXHRcXG4gIDk4OlxcdC8qIGNhbiBiZSBjYWxsZWQgd2l0aCBvciB3aXRob3V0IGxvY2FsIEJIIGJlaW5nIGRpc2FibGVkICovXFxuICA5OTpcXHRzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbiAxMDA6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcik7XFxuIDEwMTpcXHRcXG4gMTAyOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG4gMTAzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdF9fYmUzMiB2NGRhZGRyLFxcbiAxMDQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IHZpZilcXG4gMTA1OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzQ6MDYuOTA0Mzc3MzU1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDUyNTExNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFBlZXIgUmVzb2x1dGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gdGhlIGZ1bmN0aW9uIGBpbmV0X2dldHBlZXJfdjRgIGFjdHVhbGx5IGFjY2VwdHMgYSBgdmlmYCBhcmd1bWVudCEgVGhhdCdzIGludGVyZXN0aW5nOyBJJ2QgY29tcGxldGVseSBnbG9zc2VkIG92ZXIgdGhhdCB3aGVuIEkgd2FzIGluaXRpYWxseSByZXZpZXdpbmcgdGhlIGNvZGUuIFRoaXMgY2hhbmdlcyB0aGluZ3MuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHZpcnR1YWwgaW50ZXJmYWNlIGFmZmVjdHMgdGhlIHBlZXIgcmVzb2x1dGlvbiBwcm9jZXNzLiBSaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBib3RoIGBpbmV0X2dldHBlZXJfdjRgICphbmQqIGBpbmV0X2dldHBlZXJfdjZgLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIGZ1bmN0aW9ucyB1dGlsaXplIHRoZSBgdmlmYCBwYXJhbWV0ZXIgdG8gZGV0ZXJtaW5lIHRoZSByZW1vdGUgcGVlcidzIGFkZHJlc3MuIFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBjcnVjaWFsIHRvIHRoZSBiZWhhdmlvciBJJ20gbG9va2luZyBpbnRvLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBmdW5jdGlvbnMgdXNlIHRoZSBgdmlmYCBpbiBhIHdheSBJIHRoaW5rIHRoZXkgZG8uIEkgaGF2ZSBhc3N1bXB0aW9ucywgYnV0IEkgbmVlZCBjb25maXJtYXRpb24uIFRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjIxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNDoxMC41MDk2MzA5NjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2luZXRwZWVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTAyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAyOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG4gMTAzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdF9fYmUzMiB2NGRhZGRyLFxcbiAxMDQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IHZpZilcXG4gMTA1OlxcdHtcXG4gMTA2OlxcdFxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIGRhZGRyO1xcbiAxMDc6XFx0XFxuIDEwODpcXHRcXHRkYWRkci5hNC5hZGRyID0gdjRkYWRkcjtcXG4gMTA5OlxcdFxcdGRhZGRyLmE0LnZpZiA9IHZpZjtcXG4gMTEwOlxcdFxcdGRhZGRyLmZhbWlseSA9IEFGX0lORVQ7XFxuIDExMTpcXHRcXHRyZXR1cm4gaW5ldF9nZXRwZWVyKGJhc2UsIFxcdTAwMjZkYWRkcik7XFxuIDExMjpcXHR9XFxuIDExMzpcXHRcXG4gMTE0OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y2KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG4gMTE1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdjZkYWRkcilcXG4gMTE2OlxcdHtcXG4gMTE3OlxcdFxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIGRhZGRyO1xcbiAxMTg6XFx0XFxuIDExOTpcXHRcXHRkYWRkci5hNiA9ICp2NmRhZGRyO1xcbiAxMjA6XFx0XFx0ZGFkZHIuZmFtaWx5ID0gQUZfSU5FVDY7XFxuIDEyMTpcXHRcXHRyZXR1cm4gaW5ldF9nZXRwZWVyKGJhc2UsIFxcdTAwMjZkYWRkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM0OjEwLjUwOTc1MjcwOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDk2ODY5ODgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJhdmVsaW5nIHRoZSBJbml0aWFsaXphdGlvbiBvZiBgaW5ldHBlZXJfYWRkcmAgYW5kIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSZWFkcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCBjb25jZXJuIGNlbnRlcmVkIGFyb3VuZCBob3cgdGhlIGBpbmV0cGVlcl9hZGRyYCBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYGluZXRfZ2V0cGVlcl92NGAuIEkgc2VlIHRoYXQgYGRhZGRyLmE0LmFkZHJgIGFuZCBgZGFkZHIuYTQudmlmYCBhcmUgYXNzaWduZWQsIGFuZCB0aGVuIHRoZSBgZmFtaWx5YCBmaWVsZCBpcyBzZXQgdG8gYEFGX0lORVRgLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgaWYgdGhhdCdzIHN1ZmZpY2llbnQgdG8gZnVsbHkgaW5pdGlhbGl6ZSB0aGUgdW5pb24uIEEgcXVpY2sgY2hlY2sgb2YgdGhlIHN0cnVjdCBkZWZpbml0aW9uIGNvbmZpcm1zIHRoYXQgdGhlIGB1bmlvbmAgaXMgMTYgYnl0ZXMgd2lkZSwgd2hpbGUgaW5pdGlhbGl6aW5nIGAuYTRgIG9ubHkgdG91Y2hlcyA4IGJ5dGVzLiBUaGlzIG1lYW5zIHRoZSBvdGhlciA4IGJ5dGVzIHJlbWFpbiB1bmluaXRpYWxpemVkLlxuXG5UaGUgY29yZSBvZiB0aGUgaXNzdWUgYm9pbHMgZG93biB0byB3aGV0aGVyIGFueSBmdW5jdGlvbiByZWFkcyB0aGUgKnVuaW5pdGlhbGl6ZWQqIHBvcnRpb24gb2YgdGhlIGBpbmV0cGVlcl9hZGRyYCBzdHJ1Y3QsIHdoaWNoIGNhbiBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVucHJlZGljdGFibGUgYmVoYXZpb3IuXG5cbkkgZG92ZSBpbnRvIGBpbmV0cGVlcl9hZGRyX2hhc2hgLiBUaGFua2Z1bGx5LCBpdCBvbmx5IGhhc2hlcyBgYTQuYWRkcmAgYW5kIGBhNC52aWZgIGZvciBgQUZfSU5FVGAsIHdoaWNoIGFyZSB0aGUgaW5pdGlhbGl6ZWQgcGFydHMuIEZvciBgQUZfSU5FVDZgLCB0aGUgZW50aXJlIGBhNmAgc3RydWN0IGlzIGhhc2hlZCwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQuIFRoaXMgaXMgZ29vZC5cblxuSSBtb3ZlZCBvbiB0byBgaW5ldF9nZXRwZWVyX3Y2YCBhbmQgYGluZXRwZWVyX3NldF9hZGRyX3Y2YCwgd2hpY2ggaW5pdGlhbGl6ZXMgYWxsIDE2IGJ5dGVzIG9mIHRoZSB1bmlvbiB3aXRoIGAuYTZgLiBHb29kLlxuXG5OZXh0LCBJIGNvbnNpZGVyZWQgcGFkZGluZy4gVGhlIHN0cnVjdCBjb250YWlucyBhIDE2LWJ5dGUgdW5pb24gYW5kIGEgMi1ieXRlIGZhbWlseSwgbWFraW5nIHRoZSB0b3RhbCBzaXplIDE4IGJ5dGVzLCBwb3RlbnRpYWxseSBwYWRkZWQgdG8gMjAgb3IgMjQgYnl0ZXMsIGRlcGVuZGluZyBvbiBhbGlnbm1lbnQuIEltcG9ydGFudGx5LCBgaW5ldHBlZXJfYWRkcl9oYXNoYCBhbmQgYGluZXRwZWVyX2FkZHJfY21wYCBpZ25vcmUgdGhlc2UgcGFkZGluZyBieXRlcywgc28gdGhleSBhcmVuJ3QgYSBjb25jZXJuLlxuXG5UaGVuLCBJIGludmVzdGlnYXRlZCBgaW5ldHBlZXJfYWRkcl9jbXBgLCB3aGljaCBjb21wYXJlcyB0aGUgYGluZXRwZWVyX2FkZHJgIHN0cnVjdHMuIEZvciBgQUZfSU5FVGAsIGl0IGNvbXBhcmVzIGBzNl9hZGRyMzJbMF1gIGFuZCBgczZfYWRkcjMyWzFdYCwgd2hpY2ggYWxpYXMgZXhhY3RseSB0byBgYTQuYWRkcmAgYW5kIGBhNC52aWZgLiBDcml0aWNhbGx5LCBpdCBkb2VzICpub3QqIGNvbXBhcmUgdGhlIHVuaW5pdGlhbGl6ZWQgOCBieXRlcywgbm9yIHRoZSBwYWRkaW5nLiBUaGlzIGlzIGZpbmUuXG5cbkkgd29uZGVyZWQgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyBhdmVudWVzIGZvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJIG5vdGVkIHRoYXQgYGluZXRwZWVyX2FkZHJfaGFzaGAgZXhwbGljaXRseSBvbmx5IHJlYWRzIHRoZSBpbml0aWFsaXplZCBmaWVsZHMuXG5cbkFmdGVyIHNjcnV0aW5pemluZyBgdGNwX21ldHJpY3MuY2AgYW5kIGl0cyB1c2Ugb2YgYGluZXRwZWVyX2FkZHJgIHRocm91Z2ggdGhlIGBpbmV0cGVlcl9zZXRfYWRkcl92NGAgZnVuY3Rpb24sIEkgZm91bmQgdGhhdCB0aGV5ICpkbyogdXNlIGBpbmV0cGVlcl9hZGRyYCwgYnV0IGB0Y3BfbWV0cmljcy5jYCB1bHRpbWF0ZWx5IHVzZXMgYSBkaXJlY3QgSVB2NCBvciBJUHY2IGhhc2ggZnVuY3Rpb24uIFNvIGl0IGRvZXMgbm90IHVzZSB0aGUgZnVuY3Rpb24gYmVpbmcgZGlzY3Vzc2VkIGhlcmUuIEl0ICpkb2VzKiBob3dldmVyIHVzZSBgaW5ldHBlZXJfYWRkcl9jbXBgIHdpdGggYHNhZGRyYCBhbmQgYGRhZGRyYCB3aGljaCBhcmUgb25seSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQsIGJ1dCBhcyBiZWZvcmUsIGBpbmV0cGVlcl9hZGRyX2NtcGAgb25seSBjb21wYXJlcyB0aGUgaW5pdGlhbGl6ZWQgYnl0ZXMuIFNvIHRoaXMgc2VlbXMgc2FmZS5cblxuSSBoYWQgYSBtb21lbnQgb2YgZG91YnQ6IFdoYXQgaWYgYGEtXHUwMDNlZmFtaWx5YCB3YXMgdW5pbml0aWFsaXplZD8gVGhhbmtmdWxseSwgYGluZXRwZWVyX3NldF9hZGRyX3Y0YCwgYGluZXRfZ2V0cGVlcl92NGAgYW5kIGBpbmV0X2dldHBlZXJfdjZgICpkbyogaW5pdGlhbGl6ZSB0aGUgYGZhbWlseWAgZmllbGQsIHNvIGl0IGlzIHNldC5cblxuRmluYWxseSwgSSBjb25zaWRlcmVkIHRoZSBwYXRjaGVkIGxvZ2ljIHJlcGxhY2luZyBgcmJfdHJlZWAgbG9va3VwcyBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgaW5ldHBlZXJfZW50cnlfY21wYC4gVGhpcyBvcHRpbWl6YXRpb24gY29tcGFyZXMgaGFzaGVzICpiZWZvcmUqIGNvbXBhcmluZyB0aGUgZnVsbCBhZGRyZXNzZXMgdXNpbmcgYGluZXRwZWVyX2FkZHJfY21wYC4gVGhlIGhhc2ggaXMgY2FsY3VsYXRlZCB1c2luZyBgaW5ldHBlZXJfYWRkcl9oYXNoKGRhZGRyKWAuIEdpdmVuIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgYTQuYWRkcmAsIGBhNC52aWZgIGFuZCBgYTZgIGluIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbnMsIEkgY29uY2x1ZGUgdGhhdCB0aGVyZSdzIG5vIGNoYW5jZSB0aGUgaGFzaCBjYWxjdWxhdGlvbiByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuU28sIGl0IHNlZW1zIHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLCBvciBieSB0aGUgc3RydWN0dXJlJ3MgaW5pdGlhbGl6YXRpb24sIGJlY2F1c2UgZnVuY3Rpb25zIG9ubHkgdXNlIHRoZSBpbml0aWFsaXplZCBzZWN0aW9ucyBvZiB0aGUgdW5pb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzQ6MzUuNDc4NDU1NDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODE0MzYyNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGluZXRwZWVyX2FkZHIgW2EtekEtWjAtOV9dKztcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0xMDI9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjQoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDUte1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTA2OlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIGRhZGRyO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTA3LVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0xMTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjYoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMTYte1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTE3OlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIGRhZGRyO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTE4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNDozOC4zNTk4OTc0NzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1MzI4NjUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipSZXZpc2l0aW5nIGB0Y3BfbWV0cmljcy5jYCoqXG5cbk9rYXksIHRpbWUgdG8gY2lyY2xlIGJhY2sgdG8gYHRjcF9tZXRyaWNzLmNgLiBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIGNvbmdlc3Rpb24gY29udHJvbCBzaWRlLCBidXQgdGhlcmUncyBhbHdheXMgdGhlIGNoYW5jZSBJIG1pc3NlZCBzb21ldGhpbmcgZnVuZGFtZW50YWwgaW4gdGhlIG1ldHJpYyBjb2xsZWN0aW9uIG9yIHJlcG9ydGluZy4gSXQncyBlYXN5IHRvIGdldCB0dW5uZWwgdmlzaW9uIHdoZW4gZGVidWdnaW5nIGEgc3BlY2lmaWMgaXNzdWUsIHNvIGEgZnJlc2ggbG9vayBhdCB0aGUgY29yZSBkYXRhIGdhdGhlcmluZyBpcyB3YXJyYW50ZWQuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGRhdGEgSSdtIHVzaW5nIGZvciBhbmFseXNpcyBpcyBib3RoIGFjY3VyYXRlIGFuZCBjb21wcmVoZW5zaXZlLiBNYXliZSB0aGVyZSdzIGEgc3VidGxlIGludGVyYWN0aW9uIEkgb3Zlcmxvb2tlZCwgb3IgcGVyaGFwcyBhIHByZXZpb3VzbHkgZGlzbWlzc2VkIGVkZ2UgY2FzZSBpcyBub3cgcmVsZXZhbnQgaW4gbGlnaHQgb2YgcmVjZW50IGZpbmRpbmdzLiBBIG1ldGhvZGljYWwgcmV2aWV3IHNob3VsZCBoZWxwIG1lIHBpbnBvaW50IGFueSBkYXRhIGludGVncml0eSBpc3N1ZXMgb3IgaWRlbnRpZnkgcG90ZW50aWFsIG1ldHJpY3MgdGhhdCBjb3VsZCBwcm92aWRlIGFkZGl0aW9uYWwgaW5zaWdodHMgaW50byB0aGUgY3VycmVudCBwcm9ibGVtLiBUaW1lIHRvIGRpdmUgYmFjayBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNjIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNDo0Mi4xMTMxODc3MjNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTI0NzU4ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGluZXRwZWVyX2FkZHIgW2EtekEtWjAtOV9dKyxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX21ldHJpY3MuYz0yNDk9c3RhdGljIHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqX190Y3BfZ2V0X21ldHJpY3NfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjUyLVxcdHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG07XFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoyNTM6XFx0c3RydWN0IGluZXRwZWVyX2FkZHIgc2FkZHIsIGRhZGRyO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjU0LVxcdHVuc2lnbmVkIGludCBoYXNoO1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz0yOTE9c3RhdGljIHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdGNwX2dldF9tZXRyaWNzKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjk1LVxcdHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG07XFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoyOTY6XFx0c3RydWN0IGluZXRwZWVyX2FkZHIgc2FkZHIsIGRhZGRyO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjk3LVxcdHVuc2lnbmVkIGludCBoYXNoO1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz04NDI9c3RhdGljIGludCB0Y3BfbWV0cmljc19ubF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTg0NC1cXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODQ1OlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTg0Ni1cXHR1bnNpZ25lZCBpbnQgaGFzaDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9OTI4PXN0YXRpYyBpbnQgdGNwX21ldHJpY3NfbmxfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy05MzItXFx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrIF9fcmN1ICoqcHA7XFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo5MzM6XFx0c3RydWN0IGluZXRwZWVyX2FkZHIgc2FkZHIsIGRhZGRyO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtOTM0LVxcdHVuc2lnbmVkIGludCBoYXNoO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNDo0NC40MDU2Njk3OTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MTE5OTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIE5ldHdvcmsgSW50ZXJmYWNlIE1ldHJpY3MgUmV0cmlldmFsIGFuZCBEZWxldGlvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiBob3cgd2UncmUgaGFuZGxpbmcgVENQIG1ldHJpY3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHRjcF9tZXRyaWNzX25sX2NtZF9nZXRgIGFuZCBgdGNwX21ldHJpY3NfbmxfY21kX2RlbGAgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHdlJ3JlIHJldHJpZXZpbmcgdGhlIG5ldHdvcmsgaW5mb3JtYXRpb24gYW5kIGhvdyB3ZSBhcmUgZGVsZXRpbmcgaXQuIEkgd2FudCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBlZGdlIGNhc2VzIGFyZSwgd2hlcmUgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBtaWdodCBiZSwgYW5kIHdoZXRoZXIgb3VyIGVycm9yIGhhbmRsaW5nIGlzIHJvYnVzdCBlbm91Z2guIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgbm90IG1pc3NpbmcgYW55IG9idmlvdXMgaW5lZmZpY2llbmNpZXMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHNjYWxlIHdlJ3JlIGRlYWxpbmcgd2l0aC4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk3NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM0OjQ3Ljg0Njg3Mjg5M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwX21ldHJpY3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDI6XFx0c3RhdGljIGludCB0Y3BfbWV0cmljc19ubF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIDg0MzpcXHR7XFxuIDg0NDpcXHRcXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtO1xcbiA4NDU6XFx0XFx0c3RydWN0IGluZXRwZWVyX2FkZHIgc2FkZHIsIGRhZGRyO1xcbiA4NDY6XFx0XFx0dW5zaWduZWQgaW50IGhhc2g7XFxuIDg0NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xcbiA4NDg6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZ2VubF9pbmZvX25ldChpbmZvKTtcXG4gODQ5OlxcdFxcdHZvaWQgKnJlcGx5O1xcbiA4NTA6XFx0XFx0aW50IHJldDtcXG4gODUxOlxcdFxcdGJvb2wgc3JjID0gdHJ1ZTtcXG4gODUyOlxcdFxcbiA4NTM6XFx0XFx0cmV0ID0gcGFyc2VfbmxfYWRkcihpbmZvLCBcXHUwMDI2ZGFkZHIsIFxcdTAwMjZoYXNoLCAwKTtcXG4gODU0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4NTU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODU2OlxcdFxcbiA4NTc6XFx0XFx0cmV0ID0gcGFyc2Vfbmxfc2FkZHIoaW5mbywgXFx1MDAyNnNhZGRyKTtcXG4gODU4OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4NTk6XFx0XFx0XFx0c3JjID0gZmFsc2U7XFxuIDg2MDpcXHRcXG4gODYxOlxcdFxcdG1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xcbiA4NjI6XFx0XFx0aWYgKCFtc2cpXFxuIDg2MzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODY0OlxcdFxcbiA4NjU6XFx0XFx0cmVwbHkgPSBnZW5sbXNnX3B1dF9yZXBseShtc2csIGluZm8sIFxcdTAwMjZ0Y3BfbWV0cmljc19ubF9mYW1pbHksIDAsXFxuIDg2NjpcXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZWdlbmxoZHItXFx1MDAzZWNtZCk7XFxuIDg2NzpcXHRcXHRpZiAoIXJlcGx5KVxcbiA4Njg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDg2OTpcXHRcXG4gODcwOlxcdFxcdGhhc2ggXj0gbmV0X2hhc2hfbWl4KG5ldCk7XFxuIDg3MTpcXHRcXHRoYXNoID0gaGFzaF8zMihoYXNoLCB0Y3BfbWV0cmljc19oYXNoX2xvZyk7XFxuIDg3MjpcXHRcXHRyZXQgPSAtRVNSQ0g7XFxuIDg3MzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDg3NDpcXHRcXHRmb3IgKHRtID0gcmN1X2RlcmVmZXJlbmNlKHRjcF9tZXRyaWNzX2hhc2hbaGFzaF0uY2hhaW4pOyB0bTtcXG4gODc1OlxcdFxcdCAgICAgdG0gPSByY3VfZGVyZWZlcmVuY2UodG0tXFx1MDAzZXRjcG1fbmV4dCkpIHtcXG4gODc2OlxcdFxcdFxcdGlmIChhZGRyX3NhbWUoXFx1MDAyNnRtLVxcdTAwM2V0Y3BtX2RhZGRyLCBcXHUwMDI2ZGFkZHIpIFxcdTAwMjZcXHUwMDI2XFxuIDg3NzpcXHRcXHRcXHQgICAgKCFzcmMgfHwgYWRkcl9zYW1lKFxcdTAwMjZ0bS1cXHUwMDNldGNwbV9zYWRkciwgXFx1MDAyNnNhZGRyKSkgXFx1MDAyNlxcdTAwMjZcXG4gODc4OlxcdFxcdFxcdCAgICBuZXRfZXEodG1fbmV0KHRtKSwgbmV0KSkge1xcbiA4Nzk6XFx0XFx0XFx0XFx0cmV0ID0gdGNwX21ldHJpY3NfZmlsbF9pbmZvKG1zZywgdG0pO1xcbiA4ODA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDg4MTpcXHRcXHRcXHR9XFxuIDg4MjpcXHRcXHR9XFxuIDg4MzpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gODg0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4ODU6XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4gODg2OlxcdFxcbiA4ODc6XFx0XFx0Z2VubG1zZ19lbmQobXNnLCByZXBseSk7XFxuIDg4ODpcXHRcXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xcbiA4ODk6XFx0XFxuIDg5MDpcXHRubGFfcHV0X2ZhaWx1cmU6XFxuIDg5MTpcXHRcXHRyZXQgPSAtRU1TR1NJWkU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM0OjQ3Ljg0NzAyNDE1M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU1OTI1MDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKlRpbWUgdG8gRXhhbWluZSBUaG9zZSBBZGRyZXNzIFBhcnNlcnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdGFrZSBhIGZyZXNoIGxvb2sgYXQgYHBhcnNlX25sX2FkZHJgIGFuZCBgcGFyc2Vfbmxfc2FkZHJgLiBJJ3ZlIHdvcmtlZCB3aXRoIG51bWVyb3VzIGFkZHJlc3MgcGFyc2luZyByb3V0aW5lcyBvdmVyIHRoZSB5ZWFycywgYW5kIGV2ZW4gd2l0aCByb2J1c3QgbGlicmFyaWVzLCBpdCdzIGFsd2F5cyBjcnVjaWFsIHRvIHJldmlzaXQgdGhlIHVuZGVybHlpbmcgbG9naWMuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlc2UgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbnMgYXJlIHN0aWxsIHBlcmZvcm1pbmcgb3B0aW1hbGx5LCBoYW5kbGluZyBlZGdlIGNhc2VzIGNvcnJlY3RseSwgYW5kIGFyZW4ndCBpbnRyb2R1Y2luZyBhbnkgc3VidGxlIGJ1Z3MgSSd2ZSBtaXNzZWQgcHJldmlvdXNseS4gVGhlcmUgYXJlIGFsd2F5cyBpbXByb3ZlbWVudHMgdG8gYmUgbWFkZSwgYW5kIGdpdmVuIHRoZSBpbXBvcnRhbmNlIG9mIGFjY3VyYXRlIGFkZHJlc3MgaW50ZXJwcmV0YXRpb24gaW4gdGhpcyBzeXN0ZW0sIHRob3JvdWdobmVzcyBpcyBrZXkuIEEgcm91dGluZSByZWZyZXNoIHdpbGwgZG8gdXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5ODcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM0OjUxLjEwMjk1MTk0N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwX21ldHJpY3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDIsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDI6XFx0c3RhdGljIGludCBfX3BhcnNlX25sX2FkZHIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGluZXRwZWVyX2FkZHIgKmFkZHIsXFxuIDgwMzpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgKmhhc2gsIGludCBvcHRpb25hbCwgaW50IHY0LCBpbnQgdjYpXFxuIDgwNDpcXHR7XFxuIDgwNTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICphO1xcbiA4MDY6XFx0XFxuIDgwNzpcXHRcXHRhID0gaW5mby1cXHUwMDNlYXR0cnNbdjRdO1xcbiA4MDg6XFx0XFx0aWYgKGEpIHtcXG4gODA5OlxcdFxcdFxcdGluZXRwZWVyX3NldF9hZGRyX3Y0KGFkZHIsIG5sYV9nZXRfaW5fYWRkcihhKSk7XFxuIDgxMDpcXHRcXHRcXHRpZiAoaGFzaClcXG4gODExOlxcdFxcdFxcdFxcdCpoYXNoID0gaXB2NF9hZGRyX2hhc2goaW5ldHBlZXJfZ2V0X2FkZHJfdjQoYWRkcikpO1xcbiA4MTI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDgxMzpcXHRcXHR9XFxuIDgxNDpcXHRcXHRhID0gaW5mby1cXHUwMDNlYXR0cnNbdjZdO1xcbiA4MTU6XFx0XFx0aWYgKGEpIHtcXG4gODE2OlxcdFxcdFxcdHN0cnVjdCBpbjZfYWRkciBpbjY7XFxuIDgxNzpcXHRcXG4gODE4OlxcdFxcdFxcdGluNiA9IG5sYV9nZXRfaW42X2FkZHIoYSk7XFxuIDgxOTpcXHRcXHRcXHRpbmV0cGVlcl9zZXRfYWRkcl92NihhZGRyLCBcXHUwMDI2aW42KTtcXG4gODIwOlxcdFxcdFxcdGlmIChoYXNoKVxcbiA4MjE6XFx0XFx0XFx0XFx0Kmhhc2ggPSBpcHY2X2FkZHJfaGFzaChpbmV0cGVlcl9nZXRfYWRkcl92NihhZGRyKSk7XFxuIDgyMjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODIzOlxcdFxcdH1cXG4gODI0OlxcdFxcdHJldHVybiBvcHRpb25hbCA/IDEgOiAtRUFGTk9TVVBQT1JUO1xcbiA4MjU6XFx0fVxcbiA4MjY6XFx0XFxuIDgyNzpcXHRzdGF0aWMgaW50IHBhcnNlX25sX2FkZHIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGluZXRwZWVyX2FkZHIgKmFkZHIsXFxuIDgyODpcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50ICpoYXNoLCBpbnQgb3B0aW9uYWwpXFxuIDgyOTpcXHR7XFxuIDgzMDpcXHRcXHRyZXR1cm4gX19wYXJzZV9ubF9hZGRyKGluZm8sIGFkZHIsIGhhc2gsIG9wdGlvbmFsLFxcbiA4MzE6XFx0XFx0XFx0XFx0ICAgICAgIFRDUF9NRVRSSUNTX0FUVFJfQUREUl9JUFY0LFxcbiA4MzI6XFx0XFx0XFx0XFx0ICAgICAgIFRDUF9NRVRSSUNTX0FUVFJfQUREUl9JUFY2KTtcXG4gODMzOlxcdH1cXG4gODM0OlxcdFxcbiA4MzU6XFx0c3RhdGljIGludCBwYXJzZV9ubF9zYWRkcihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYWRkcilcXG4gODM2OlxcdHtcXG4gODM3OlxcdFxcdHJldHVybiBfX3BhcnNlX25sX2FkZHIoaW5mbywgYWRkciwgTlVMTCwgMCxcXG4gODM4OlxcdFxcdFxcdFxcdCAgICAgICBUQ1BfTUVUUklDU19BVFRSX1NBRERSX0lQVjQsXFxuIDgzOTpcXHRcXHRcXHRcXHQgICAgICAgVENQX01FVFJJQ1NfQVRUUl9TQUREUl9JUFY2KTtcXG4gODQwOlxcdH1cXG4gODQxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNDo1MS4xMDMwODA3ODdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2ODM4NzA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIE1lbW9yeSBTYWZldHkgSXNzdWVzIGluIEFkZHJlc3MgQ29tcGFyaXNvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgcGFyc2VfbmxfYWRkcmAgaGFuZGxlcyBuZXR3b3JrIGFkZHJlc3Nlcy4gSXQgc2VlbXMgbGlrZSBpdCdzIGluaXRpYWxpemluZyB0aGUgYGFkZHJgIHN0cnVjdHVyZSwgZWl0aGVyIGFzIElQdjQgb3IgSVB2NiwgdXNpbmcgZnVuY3Rpb25zIGxpa2UgYGluZXRwZWVyX3NldF9hZGRyX3Y0YCBvciBgaW5ldHBlZXJfc2V0X2FkZHJfdjZgLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgbHVya2luZyBpbiB0aGlzIHByb2Nlc3M/IEkgbWVhbiwgd2UncmUgdGFsa2luZyBhYm91dCBjb21wYXJpbmcgYWRkcmVzc2VzLCBhbmQgdGhhdCBoYXMgdG8gYmUgcm9jayBzb2xpZC5cblxuVGhlIG5leHQgc3RlcCBpcyB0aGUgYGFkZHJfc2FtZWAgZnVuY3Rpb24sIHdoaWNoLCBJIHByZXN1bWUsIGlzIHRoZSBvbmUgYWN0dWFsbHkgZG9pbmcgdGhlIGNvbXBhcmlzb24uIEdvb2QsIGl0IHV0aWxpemVzIGBpbmV0cGVlcl9hZGRyX2NtcGAgZm9yIHRoZSBsb3ctbGV2ZWwgYml0LWJ5LWJpdCBjb21wYXJpc29uLiBUaGF0J3MgYSBnb29kIHNpZ24sIGFuZCBpdCBtZWFucyB0aGUgY29tcGFyaXNvbiBvbmx5IGxvb2tzIGF0IHRoZSBpbml0aWFsaXplZCBieXRlcy4gU28sIHRoYXQncyBiZXR0ZXIsIGJ1dCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZy4uLlxuXG5Pa2F5LCBob2xkIG9uLCBJIG5lZWQgdG8gem9vbSBvdXQgYSBiaXQuIFdoYXQgYWJvdXQgdGhlIGluZm9ybWF0aW9uIHVzZWQgZm9yIFRDUCBtZXRyaWNzLCBsaWtlIGluIGB0Y3BfbWV0cmljc19maWxsX2luZm9gPyBEb2VzICp0aGF0KiBmdW5jdGlvbiBjb3B5IHRoZSBgc3RydWN0IGluZXRwZWVyX2FkZHJgIHRvIHVzZXIgc3BhY2U/IElmIHNvLCB3ZSdyZSBiYWNrIHRvIHNxdWFyZSBvbmUsIGFuZCBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGF0IGNvZGUgcGF0aCB2ZXJ5IGNhcmVmdWxseSBmb3IgcG90ZW50aWFsIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0IGNvdWxkIGJlIGEgY3JpdGljYWwgdnVsbmVyYWJpbGl0eS4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHRyYWNlIHRoZSBkYXRhIGZsb3cgdG8gZW5zdXJlIHdlJ3JlIHNhZmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODU0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzQ6NTUuNDcxNDgzMTk4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfbWV0cmljcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY5MDpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjkxOlxcdFxcdFxcdFxcdFxcdG4rKztcXG4gNjkyOlxcdFxcdFxcdFxcdFxcdHZhbCA9IG1heCh2YWwgLyAxMDAwLCAxVSk7XFxuIDY5MzpcXHRcXHRcXHRcXHR9XFxuIDY5NDpcXHRcXHRcXHRcXHRpZiAoaSA9PSBUQ1BfTUVUUklDX1JUVFZBUikge1xcbiA2OTU6XFx0XFx0XFx0XFx0XFx0aWYgKG5sYV9wdXRfdTMyKG1zZywgVENQX01FVFJJQ19SVFRWQVJfVVMgKyAxLFxcbiA2OTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dmFsKSBcXHUwMDNjIDApXFxuIDY5NzpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjk4OlxcdFxcdFxcdFxcdFxcdG4rKztcXG4gNjk5OlxcdFxcdFxcdFxcdFxcdHZhbCA9IG1heCh2YWwgLyAxMDAwLCAxVSk7XFxuIDcwMDpcXHRcXHRcXHRcXHR9XFxuIDcwMTpcXHRcXHRcXHRcXHRpZiAobmxhX3B1dF91MzIobXNnLCBpICsgMSwgdmFsKSBcXHUwMDNjIDApXFxuIDcwMjpcXHRcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNzAzOlxcdFxcdFxcdFxcdG4rKztcXG4gNzA0OlxcdFxcdFxcdH1cXG4gNzA1OlxcdFxcdFxcdGlmIChuKVxcbiA3MDY6XFx0XFx0XFx0XFx0bmxhX25lc3RfZW5kKG1zZywgbmVzdCk7XFxuIDcwNzpcXHRcXHRcXHRlbHNlXFxuIDcwODpcXHRcXHRcXHRcXHRubGFfbmVzdF9jYW5jZWwobXNnLCBuZXN0KTtcXG4gNzA5OlxcdFxcdH1cXG4gNzEwOlxcdFxcbiA3MTE6XFx0XFx0e1xcbiA3MTI6XFx0XFx0XFx0c3RydWN0IHRjcF9mYXN0b3Blbl9tZXRyaWNzIHRmb21fY29weVsxXSwgKnRmb207XFxuIDcxMzpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgc2VxO1xcbiA3MTQ6XFx0XFxuIDcxNTpcXHRcXHRcXHRkbyB7XFxuIDcxNjpcXHRcXHRcXHRcXHRzZXEgPSByZWFkX3NlcWJlZ2luKFxcdTAwMjZmYXN0b3Blbl9zZXFsb2NrKTtcXG4gNzE3OlxcdFxcdFxcdFxcdHRmb21fY29weVswXSA9IHRtLVxcdTAwM2V0Y3BtX2Zhc3RvcGVuO1xcbiA3MTg6XFx0XFx0XFx0fSB3aGlsZSAocmVhZF9zZXFyZXRyeShcXHUwMDI2ZmFzdG9wZW5fc2VxbG9jaywgc2VxKSk7XFxuIDcxOTpcXHRcXG4gNzIwOlxcdFxcdFxcdHRmb20gPSB0Zm9tX2NvcHk7XFxuIDcyMTpcXHRcXHRcXHRpZiAodGZvbS1cXHUwMDNlbXNzIFxcdTAwMjZcXHUwMDI2XFxuIDcyMjpcXHRcXHRcXHQgICAgbmxhX3B1dF91MTYobXNnLCBUQ1BfTUVUUklDU19BVFRSX0ZPUEVOX01TUyxcXG4gNzIzOlxcdFxcdFxcdFxcdFxcdHRmb20tXFx1MDAzZW1zcykgXFx1MDAzYyAwKVxcbiA3MjQ6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDcyNTpcXHRcXHRcXHRpZiAodGZvbS1cXHUwMDNlc3luX2xvc3MgXFx1MDAyNlxcdTAwMjZcXG4gNzI2OlxcdFxcdFxcdCAgICAobmxhX3B1dF91MTYobXNnLCBUQ1BfTUVUUklDU19BVFRSX0ZPUEVOX1NZTl9EUk9QUyxcXG4gNzI3OlxcdFxcdFxcdFxcdFxcdHRmb20tXFx1MDAzZXN5bl9sb3NzKSBcXHUwMDNjIDAgfHxcXG4gNzI4OlxcdFxcdFxcdCAgICAgbmxhX3B1dF9tc2Vjcyhtc2csIFRDUF9NRVRSSUNTX0FUVFJfRk9QRU5fU1lOX0RST1BfVFMsXFxuIDcyOTpcXHRcXHRcXHRcXHRcXHRqaWZmaWVzIC0gdGZvbS1cXHUwMDNlbGFzdF9zeW5fbG9zcyxcXG4gNzMwOlxcdFxcdFxcdFxcdFxcdFRDUF9NRVRSSUNTX0FUVFJfUEFEKSBcXHUwMDNjIDApKVxcbiA3MzE6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDczMjpcXHRcXHRcXHRpZiAodGZvbS1cXHUwMDNlY29va2llLmxlbiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4gNzMzOlxcdFxcdFxcdCAgICBubGFfcHV0KG1zZywgVENQX01FVFJJQ1NfQVRUUl9GT1BFTl9DT09LSUUsXFxuIDczNDpcXHRcXHRcXHRcXHQgICAgdGZvbS1cXHUwMDNlY29va2llLmxlbiwgdGZvbS1cXHUwMDNlY29va2llLnZhbCkgXFx1MDAzYyAwKVxcbiA3MzU6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDczNjpcXHRcXHR9XFxuIDczNzpcXHRcXG4gNzM4OlxcdFxcdHJldHVybiAwO1xcbiA3Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM0OjU1LjQ3MTU4ODk4OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDc2MDI0ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGB0Y3BfbWV0cmljc19maWxsX2luZm9gKipcblxuT2theSwgbGV0J3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGxvb2sgYXQgdGhlIGB0Y3BfbWV0cmljc19maWxsX2luZm9gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIGFsd2F5cyBvbiB0aGUgZnVuY3Rpb24ncyBlbnRyeSBwb2ludCwgdW5kZXJzdGFuZGluZyBpdHMgaW1tZWRpYXRlIGlucHV0cyBhbmQgaW50ZW5kZWQgcHVycG9zZS4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHNpZ25hdHVyZSwgYW50aWNpcGF0aW5nIHBvdGVudGlhbCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgcGFzc2VkLCBhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBkZXNpZ25lZCB0byAqZG8qLiBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGNvcmUgcmVzcG9uc2liaWxpdHkgb2YgdGhpcyByb3V0aW5lLiBJcyBpdCBzaW1wbHkgY29sbGVjdGluZyBkYXRhPyBJcyBpdCBwZXJmb3JtaW5nIGNhbGN1bGF0aW9ucz8gSXMgaXQgd3JpdGluZyB0byBzb21lIHNoYXJlZCBtZW1vcnkgb3IgYW4gb3V0cHV0IGJ1ZmZlcj8gVGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl0IGRlYWxzIHdpdGggVENQIG1ldHJpY3MsIHNvIEknbSBleHBlY3RpbmcgcGVyZm9ybWFuY2UgZGF0YSwgYnV0IEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhlICpjb250ZXh0KiBvZiB0aG9zZSBtZXRyaWNzLiBJcyBpdCBjb25uZWN0aW9uLXNwZWNpZmljPyBTeXN0ZW0td2lkZT8gRmxvdy1iYXNlZD8gR3Jhc3BpbmcgdGhpcyBjb250ZXh0IGZyb20gdGhlIG91dHNldCB3aWxsIHNoYXBlIGhvdyBJIGFuYWx5emUgdGhlIGNvZGUuIEknbSBhbHJlYWR5IGZvcm1pbmcgaHlwb3RoZXNlcyBhYm91dCBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJlc3QsIGxpa2UgbG9ja2luZyBzdHJhdGVnaWVzLCBkYXRhIGFnZ3JlZ2F0aW9uLCBhbmQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyByZWxhdGVkIHRvIHRoZSBmcmVxdWVuY3kgb2YgaXRzIGV4ZWN1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxNDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM1OjAwLjU0NzYxNjM0OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwX21ldHJpY3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NDA6XFx0I2VuZGlmXFxuIDY0MTpcXHR9O1xcbiA2NDI6XFx0XFxuIDY0MzpcXHQvKiBBZGQgYXR0cmlidXRlcywgY2FsbGVyIGNhbmNlbHMgaXRzIGhlYWRlciBvbiBmYWlsdXJlICovXFxuIDY0NDpcXHRzdGF0aWMgaW50IHRjcF9tZXRyaWNzX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbiA2NDU6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG0pXFxuIDY0NjpcXHR7XFxuIDY0NzpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xcbiA2NDg6XFx0XFx0aW50IGk7XFxuIDY0OTpcXHRcXG4gNjUwOlxcdFxcdHN3aXRjaCAodG0tXFx1MDAzZXRjcG1fZGFkZHIuZmFtaWx5KSB7XFxuIDY1MTpcXHRcXHRjYXNlIEFGX0lORVQ6XFxuIDY1MjpcXHRcXHRcXHRpZiAobmxhX3B1dF9pbl9hZGRyKG1zZywgVENQX01FVFJJQ1NfQVRUUl9BRERSX0lQVjQsXFxuIDY1MzpcXHRcXHRcXHRcXHRcXHQgICAgaW5ldHBlZXJfZ2V0X2FkZHJfdjQoXFx1MDAyNnRtLVxcdTAwM2V0Y3BtX2RhZGRyKSkgXFx1MDAzYyAwKVxcbiA2NTQ6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDY1NTpcXHRcXHRcXHRpZiAobmxhX3B1dF9pbl9hZGRyKG1zZywgVENQX01FVFJJQ1NfQVRUUl9TQUREUl9JUFY0LFxcbiA2NTY6XFx0XFx0XFx0XFx0XFx0ICAgIGluZXRwZWVyX2dldF9hZGRyX3Y0KFxcdTAwMjZ0bS1cXHUwMDNldGNwbV9zYWRkcikpIFxcdTAwM2MgMClcXG4gNjU3OlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiA2NTg6XFx0XFx0XFx0YnJlYWs7XFxuIDY1OTpcXHRcXHRjYXNlIEFGX0lORVQ2OlxcbiA2NjA6XFx0XFx0XFx0aWYgKG5sYV9wdXRfaW42X2FkZHIobXNnLCBUQ1BfTUVUUklDU19BVFRSX0FERFJfSVBWNixcXG4gNjYxOlxcdFxcdFxcdFxcdFxcdCAgICAgaW5ldHBlZXJfZ2V0X2FkZHJfdjYoXFx1MDAyNnRtLVxcdTAwM2V0Y3BtX2RhZGRyKSkgXFx1MDAzYyAwKVxcbiA2NjI6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDY2MzpcXHRcXHRcXHRpZiAobmxhX3B1dF9pbjZfYWRkcihtc2csIFRDUF9NRVRSSUNTX0FUVFJfU0FERFJfSVBWNixcXG4gNjY0OlxcdFxcdFxcdFxcdFxcdCAgICAgaW5ldHBlZXJfZ2V0X2FkZHJfdjYoXFx1MDAyNnRtLVxcdTAwM2V0Y3BtX3NhZGRyKSkgXFx1MDAzYyAwKVxcbiA2NjU6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDY2NjpcXHRcXHRcXHRicmVhaztcXG4gNjY3OlxcdFxcdGRlZmF1bHQ6XFxuIDY2ODpcXHRcXHRcXHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcXG4gNjY5OlxcdFxcdH1cXG4gNjcwOlxcdFxcbiA2NzE6XFx0XFx0aWYgKG5sYV9wdXRfbXNlY3MobXNnLCBUQ1BfTUVUUklDU19BVFRSX0FHRSxcXG4gNjcyOlxcdFxcdFxcdFxcdCAgamlmZmllcyAtIFJFQURfT05DRSh0bS1cXHUwMDNldGNwbV9zdGFtcCksXFxuIDY3MzpcXHRcXHRcXHRcXHQgIFRDUF9NRVRSSUNTX0FUVFJfUEFEKSBcXHUwMDNjIDApXFxuIDY3NDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjc1OlxcdFxcbiA2NzY6XFx0XFx0e1xcbiA2Nzc6XFx0XFx0XFx0aW50IG4gPSAwO1xcbiA2Nzg6XFx0XFxuIDY3OTpcXHRcXHRcXHRuZXN0ID0gbmxhX25lc3Rfc3RhcnRfbm9mbGFnKG1zZywgVENQX01FVFJJQ1NfQVRUUl9WQUxTKTtcXG4gNjgwOlxcdFxcdFxcdGlmICghbmVzdClcXG4gNjgxOlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiA2ODI6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFRDUF9NRVRSSUNfTUFYX0tFUk5FTCArIDE7IGkrKykge1xcbiA2ODM6XFx0XFx0XFx0XFx0dTMyIHZhbCA9IHRjcF9tZXRyaWNfZ2V0KHRtLCBpKTtcXG4gNjg0OlxcdFxcbiA2ODU6XFx0XFx0XFx0XFx0aWYgKCF2YWwpXFxuIDY4NjpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNjg3OlxcdFxcdFxcdFxcdGlmIChpID09IFRDUF9NRVRSSUNfUlRUKSB7XFxuIDY4ODpcXHRcXHRcXHRcXHRcXHRpZiAobmxhX3B1dF91MzIobXNnLCBUQ1BfTUVUUklDX1JUVF9VUyArIDEsXFxuIDY4OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHR2YWwpIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzU6MDAuNTQ3NzM3NTY4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTc5MzIxNDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBFeHBvc3VyZSBpbiBgaW5ldHBlZXJfYWRkcmAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgaG93IGBpbmV0cGVlcl9nZXRfYWRkcl92NGAgb25seSBjb3BpZXMgcGFydCBvZiBgc3RydWN0IGluZXRwZWVyX2FkZHJgLCBzcGVjaWZpY2FsbHkgYGE0LmFkZHJgLCBhcyBpdCByZXR1cm5zIGEgYF9fYmUzMmAuIEhvd2V2ZXIsIHRoZSBjb2RlIHNuaXBwZXQgZnJvbSB0aGUgcGF0Y2ggcmV2ZWFscyBhIGRpZmZlcmVudCBzY2VuYXJpby4gYHAtXHUwMDNlZGFkZHIgPSAqZGFkZHI7YCBjb3BpZXMgdGhlICplbnRpcmUqIGBzdHJ1Y3QgaW5ldHBlZXJfYWRkcmAsIHdoaWNoIGluY2x1ZGVzIHBhZGRpbmcgYW5kIGEgdW5pb24sIHBvdGVudGlhbGx5IGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cbk15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuICBJIG5lZWQgdG8gYXNjZXJ0YWluIGlmIGBwLVx1MDAzZWRhZGRyYCBvciB0aGUgZW5jbG9zaW5nIGBzdHJ1Y3QgaW5ldF9wZWVyYCBhcmUgZXZlciBjb3BpZWQgb3V0c2lkZSB0aGUga2VybmVsLiAgVGhlIGNvbmNsdXNpb24sIHRoYW5rZnVsbHksIGlzIHRoYXQgYHN0cnVjdCBpbmV0X3BlZXJgIGlzIGludGVybmFsIHRvIHRoZSBrZXJuZWwncyBJUCBwZWVyIHRyYWNraW5nIHN5c3RlbSAodXNlZCwgZS5nLiwgZm9yIElQIElEIGdlbmVyYXRpb24gYW5kIHJvdXRpbmcgbWV0cmljcykgYW5kIGlzICpub3QqIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBkaXJlY3RseS5cblxuT2theSwgc28gbm90IGRpcmVjdGx5IGV4cG9zZWQuIFdoYXQgYWJvdXQgdGhlIHByb2Nlc3Npbmcgd2l0aGluIHRoZSBrZXJuZWw/IElzIGBwLVx1MDAzZWRhZGRyYCBoYXNoZWQsIGNvbXBhcmVkLCBvciBvdGhlcndpc2UgdXNlZCBpbiBhIHdheSB0aGF0IHdvdWxkIG1ha2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbWF0aWM/ICBUaGUgYHAtXHUwMDNlZGFkZHJgIGlzIG5vdCBkaXJlY3RseSBoYXNoZWQuIEluc3RlYWQsIGEgcHJlY29tcHV0ZWQgaGFzaCBgcC1cdTAwM2VoYXNoYCBpcyBzdG9yZWQuXG5cblRoZSBjcml0aWNhbCBjb21wYXJpc29uIHBvaW50IGlzIGBpbmV0cGVlcl9lbnRyeV9jbXBgLiAgVGhlIGZ1bmN0aW9uIGZpcnN0IGNvbXBhcmVzIHByZWNvbXB1dGVkIGhhc2hlcy4gSWYgdGhvc2UgbWF0Y2gsIGBpbmV0cGVlcl9hZGRyX2NtcGAgaXMgY2FsbGVkLiBOb3csIGBpbmV0cGVlcl9hZGRyX2NtcGAgb25seSBjb21wYXJlcyB0aGUgKmluaXRpYWxpemVkKiBieXRlcyBvZiBgZGFkZHJgLCBtZWFuaW5nIHRob3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSB0aGUgcGFkZGluZyBvciB0aGUgdW5pb24gc2hvdWxkIG5vdCBiZSBwcm9ibGVtYXRpYyBpbiBhIGNvbXBhcmlzb24uXG5cbkhvd2V2ZXIsIEkgbmVlZCB0byBjb25maXJtIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IGluZXRwZWVyX2FkZHJgIGl0c2VsZi4gVGhlIGBpbmV0cGVlcl9hZGRyX2hhc2hgIGZ1bmN0aW9uIHV0aWxpemVzIHRoZSBgYTQudmlmYCBmaWVsZCAoYW1vbmcgb3RoZXIgZmllbGRzKSB3aGVuIGBBRl9JTkVUYCBpcyB1c2VkLiBJIGFtIGNoZWNraW5nIHRoZSBmdW5jdGlvbiBjYWxscyB0byBgaW5ldF9nZXRwZWVyX3Y0YCBhbmQgYGluZXRwZWVyX3NldF9hZGRyX3Y0YCB3aGVyZSB0aGUgYHN0cnVjdCBpbmV0cGVlcl9hZGRyYCBpcyBzZXQuIFRoZSB2YWx1ZSBvZiBgYTQudmlmYCBpcyBzZXQgaW4gYm90aCBvZiB0aGVzZSBmdW5jdGlvbnMuIFNvLCB0aGF0J3Mgbm90IGEgY29uY2Vybi5cblxuTm93LCBsZXQncyBleHBsb3JlIG90aGVyIGNvZGUgcGF0aHMgaW52b2x2aW5nIGBzdHJ1Y3QgaW5ldHBlZXJfYWRkcmAuIEkndmUgcmV2aXNpdGVkIGBuZXQvaXB2NC90Y3BfbWV0cmljcy5jYCB0byBleGFtaW5lIGhvdyBgc3RydWN0IGluZXRwZWVyX2FkZHJgIGlzIGNyZWF0ZWQgYW5kIHVzZWQsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gVENQIG1ldHJpY3MuIEZ1bmN0aW9ucyBsaWtlIGBfX3RjcF9nZXRfbWV0cmljc19yZXFgLCBgdGNwX2dldF9tZXRyaWNzYCwgYHRjcF9tZXRyaWNzX25sX2NtZF9nZXRgLCBhbmQgYHRjcF9tZXRyaWNzX25sX2NtZF9kZWxgIGFyZSByZWxldmFudCBoZXJlLiBJJ3ZlIGZvdW5kIHRob3NlIGZ1bmN0aW9ucyBpbml0aWFsaXplIGBzdHJ1Y3QgaW5ldHBlZXJfYWRkcmAgdXNpbmcgYGluZXRwZWVyX3NldF9hZGRyX3Y0YCBvciBgaW5ldHBlZXJfc2V0X2FkZHJfdjZgLiBTbywgdGhlIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgaW4gdGhlIHN0YW5kYXJkIGNvZGUgcGF0aHMuXG5cbkhvd2V2ZXIsIHRoZSBhbmFseXNpcyBvZiBgdGNwX21ldHJpY3NfbmxfY21kX2dldGAgYW5kIGB0Y3BfbWV0cmljc19ubF9jbWRfZGVsYCByZXZlYWxzIGEgcG90ZW50aWFsIGlzc3VlLiBUaGUgZnVuY3Rpb24gYHBhcnNlX25sX3NhZGRyYCBpbml0aWFsaXplcyBgc2FkZHJgLiBBIGZhaWx1cmUgb2YgYHBhcnNlX25sX3NhZGRyYCBjYW4gbGVhZCB0byBhbiB1bmluaXRpYWxpemVkIGBzYWRkcmAuIEl0IGlzIHRoZW4gdXNlZCBpbiBhIGNvbXBhcmlzb24gd2l0aGluIGEgbG9vcCwgYnV0IHRoZSBjb2RlIGNvcnJlY3RseSBzaG9ydC1jaXJjdWl0cyB0aGUgY29tcGFyaXNvbiBpZiB0aGUgYHNhZGRyYCB2YWx1ZSBpcyBub3QgaW5pdGlhbGl6ZWQsIHByZXZlbnRpbmcgYSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0IGlzIGEgcmVsaWVmLlxuXG5UaGVyZWZvcmUsIGFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3LCBJJ3ZlIGNvbmNsdWRlZCB0aGVyZSdzIG5vIHBhdGggd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSBgc3RydWN0IGluZXRwZWVyX2FkZHJgIGNhbiBiZSBsZWFrZWQgdG8gdXNlciBzcGFjZSBvciBjYXVzZSBhIGtlcm5lbCB2dWxuZXJhYmlsaXR5LiBUaGUgcGFkZGluZyBhbmQgdW5pb24gd2l0aGluIHRoZSBzdHJ1Y3QsIHdoaWxlIHRlY2huaWNhbGx5IHVuaW5pdGlhbGl6ZWQgZHVyaW5nIGNvcHksIGFyZSBzYWZlbHkgaGFuZGxlZCBieSBzdWJzZXF1ZW50IGNvZGUgdGhhdCBlaXRoZXIgYXZvaWRzIHRoZWlyIHVzZSBvciBlbnN1cmVzIHByb3BlciBpbml0aWFsaXphdGlvbiBiZWZvcmUgdXNhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzAxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM1OjE4LjcyNzA2OTAzMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1ODEzNzgxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgaW5ldHBlZXJfYWRkclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pbmV0cGVlci5oPTIwPXN0cnVjdCBpcHY0X2FkZHJfa2V5IHtcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMjYtXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoyNzpzdHJ1Y3QgaW5ldHBlZXJfYWRkciB7XFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0yOC1cXHR1bmlvbiB7XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oPTM2PXN0cnVjdCBpbmV0X3BlZXIge1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0zOC1cXHR1NjRcXHRcXHRcXHRoYXNoO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6Mzk6XFx0c3RydWN0IGluZXRwZWVyX2FkZHJcXHRkYWRkcjtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTQwLVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD03MD12b2lkIGluZXRfaW5pdHBlZXJzKHZvaWQpIF9faW5pdDtcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtNzMtXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDo3NDpzdGF0aWMgaW5saW5lIHZvaWQgaW5ldHBlZXJfc2V0X2FkZHJfdjQoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyLCBfX2JlMzIgaXApXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC03NS17XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTgwLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6ODE6c3RhdGljIGlubGluZSBfX2JlMzIgaW5ldHBlZXJfZ2V0X2FkZHJfdjQoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyKVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtODIte1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC04NS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjg2OnN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0cGVlcl9zZXRfYWRkcl92NihzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIsXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC04Ny1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW42X2FkZHIgKmluNilcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtOTItXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDo5MzpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbjZfYWRkciAqaW5ldHBlZXJfZ2V0X2FkZHJfdjYoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyKVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtOTQte1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD05OT1zdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTAwOlxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIpO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTAxLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg9MTAyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTA1LXtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjEwNjpcXHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBkYWRkcjtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwNy1cXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg9MTE0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y2KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTE2LXtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjExNzpcXHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBkYWRkcjtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTExOC1cXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTIzLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTI0OnN0YXRpYyBpbmxpbmUgaW50IGluZXRwZWVyX2FkZHJfY21wKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphLFxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTI1OlxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYilcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEyNi17XFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jPTU2PXN0YXRpYyBzaXBoYXNoX2FsaWduZWRfa2V5X3QgaW5ldHBlZXJfaGFzaF9rZXkgX19yZWFkX21vc3RseTtcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTU3LVxcbm5ldC9pcHY0L2luZXRwZWVyLmM6NTg6c3RhdGljIHU2NCBpbmV0cGVlcl9hZGRyX2hhc2goY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmEpXFxubmV0L2lwdjQvaW5ldHBlZXIuYy01OS17XFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jPTcxPXN0YXRpYyBpbnQgaW5ldHBlZXJfZW50cnlfY21wKHU2NCBkaGFzaCxcXG5uZXQvaXB2NC9pbmV0cGVlci5jOjcyOlxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTczLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0X3BlZXIgKnApXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jPTk5PXZvaWQgX19pbml0IGluZXRfaW5pdHBlZXJzKHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTExNC0vKiBDYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgb3IgYmFzZS1cXHUwMDNlbG9jayBoZWxkICovXFxubmV0L2lwdjQvaW5ldHBlZXIuYzoxMTU6c3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0xMTYtXFx0XFx0XFx0XFx0dTY0IGRoYXNoLFxcbi0tXFxubmV0L2lwdjQvaW5ldHBlZXIuYz0xOTk9c3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG5uZXQvaXB2NC9pbmV0cGVlci5jOjIwMDpcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyKVxcbm5ldC9pcHY0L2luZXRwZWVyLmMtMjAxLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjMtXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoyNDpzdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICpfX3RjcF9nZXRfbWV0cmljcyhjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqc2FkZHIsXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoyNTpcXHRcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yNi1cXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBoYXNoKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9NDE9c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrIHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtNDMtXFx0c3RydWN0IG5ldFxcdFxcdFxcdCp0Y3BtX25ldDtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjQ0OlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyXFx0XFx0dGNwbV9zYWRkcjtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjQ1OlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyXFx0XFx0dGNwbV9kYWRkcjtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTQ2LVxcdHVuc2lnbmVkIGxvbmdcXHRcXHRcXHR0Y3BtX3N0YW1wO1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz03ND1zdGF0aWMgdm9pZCB0Y3BfbWV0cmljX3NldChzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtLFxcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjgyOnN0YXRpYyBib29sIGFkZHJfc2FtZShjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSxcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjgzOlxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpiKVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODQte1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz0xNjM9c3RhdGljIHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdGNwbV9uZXcoc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MTY0OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGluZXRwZWVyX2FkZHIgKnNhZGRyLFxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MTY1OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLFxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMTY2LVxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGhhc2gpXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTIyMj1zdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0Y3BfZ2V0X2VuY29kZShzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtLCBpbnQgZGVwdGgpXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTIzMC1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjIzMTpzdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICpfX3RjcF9nZXRfbWV0cmljcyhjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqc2FkZHIsXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoyMzI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLFxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjMzLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGhhc2gpXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTI0OT1zdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICpfX3RjcF9nZXRfbWV0cmljc19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yNTItXFx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0bTtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI1MzpcXHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBzYWRkciwgZGFkZHI7XFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yNTQtXFx0dW5zaWduZWQgaW50IGhhc2g7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTI5MT1zdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0Y3BfZ2V0X21ldHJpY3Moc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yOTUtXFx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0bTtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI5NjpcXHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBzYWRkciwgZGFkZHI7XFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yOTctXFx0dW5zaWduZWQgaW50IGhhc2g7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTc2Nz1zdGF0aWMgaW50IHRjcF9tZXRyaWNzX25sX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODAxLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODAyOnN0YXRpYyBpbnQgX19wYXJzZV9ubF9hZGRyKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBpbmV0cGVlcl9hZGRyICphZGRyLFxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODAzLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCAqaGFzaCwgaW50IG9wdGlvbmFsLCBpbnQgdjQsIGludCB2NilcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODI2LVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODI3OnN0YXRpYyBpbnQgcGFyc2VfbmxfYWRkcihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYWRkcixcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgyOC1cXHRcXHRcXHQgdW5zaWduZWQgaW50ICpoYXNoLCBpbnQgb3B0aW9uYWwpXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgzNC1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjgzNTpzdGF0aWMgaW50IHBhcnNlX25sX3NhZGRyKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBpbmV0cGVlcl9hZGRyICphZGRyKVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODM2LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9ODQyPXN0YXRpYyBpbnQgdGNwX21ldHJpY3NfbmxfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04NDQtXFx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0bTtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjg0NTpcXHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBzYWRkciwgZGFkZHI7XFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04NDYtXFx0dW5zaWduZWQgaW50IGhhc2g7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTkyOD1zdGF0aWMgaW50IHRjcF9tZXRyaWNzX25sX2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtOTMyLVxcdHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayBfX3JjdSAqKnBwO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6OTMzOlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTkzNC1cXHR1bnNpZ25lZCBpbnQgaGFzaDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzU6MjAuMjg1MjE2MjM0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxMjYwNzU0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5pbml0aWFsaXplZCBCeXRlcyBpbiBgdGNwX21ldHJpY3NfYmxvY2tgIC0gQSBRdWljayBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYHRjcF9tZXRyaWNzX2Jsb2NrYCBzdHJ1Y3QsIGFuZCBpdCdzIHVzaW5nIHRoZSBgaW5ldHBlZXJfYWRkcmAgc3RydWN0IGZvciBib3RoIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBIYW5nIG9uLCB0aGUgYGluZXRwZWVyX2FkZHJgIGlzIHVzZWQgaW4gYSBmZXcgcGxhY2VzLCBzcGVjaWZpY2FsbHksIGluc2lkZSBvZiBgdGNwX21ldHJpY3NfYmxvY2tgLCBidXQgaWYgSSByZWNhbGwsIGB0Y3BtX25ld2AgYWxsb2NhdGVzIHRoZSBgdGNwX21ldHJpY3NfYmxvY2tgIGFuZCB0aGVuIGNvcGllcyB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgZnJvbSBvdGhlciBzdHJ1Y3R1cmVzLiBSaWdodC4gU28sIGBzYWRkcmAgYW5kIGBkYWRkcmAgYXJlIGNvcGllZCBpbnRvIGB0Y3BtX3NhZGRyYCBhbmQgYHRjcG1fZGFkZHJgLCBhbmQgaWYgdGhvc2Ugc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzIHN0cnVjdHVyZXMgaGF2ZSB1bmluaXRpYWxpemVkIGJ5dGVzLCB3b3VsZG4ndCB0aGUgY29waWVzIGluaGVyaXQgdGhvc2UgdW5pbml0aWFsaXplZCB2YWx1ZXM/XG5cblRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXNlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZXZlciBleHBvc2VkIHRvIHVzZXIgc3BhY2U/IEkgcmVtZW1iZXIgd2UgY2hlY2tlZCBgdGNwX21ldHJpY3NfZmlsbF9pbmZvYCBlYXJsaWVyLCB0aGF0J3MgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIHRoZSBuZXRsaW5rIG1lc3NhZ2UuIExvb2tpbmcgYXQgaXQgYWdhaW4sIHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBgaW5ldHBlZXJfZ2V0X2FkZHJfdjRgIGFuZCBgaW5ldHBlZXJfZ2V0X2FkZHJfdjZgIGZ1bmN0aW9ucywgYmFzZWQgb24gdGhlIGFkZHJlc3MgZmFtaWx5LCB0byByZXRyaWV2ZSB0aGUgSVAgYWRkcmVzc2VzLiBgaW5ldHBlZXJfZ2V0X2FkZHJfdjRgIHJldHVybnMgYSBgX19iZTMyYCwgc28gaXQncyBqdXN0IGNvcHlpbmcgdGhlIDQtYnl0ZSBJUHY0IGFkZHJlc3MsIHdoaWNoIHNob3VsZCBiZSBmaW5lLiAgTm93LCBgaW5ldHBlZXJfZ2V0X2FkZHJfdjZgLCB0aGF0IHJldHVybnMgYSBgc3RydWN0IGluNl9hZGRyICpgLiBUaGF0IGlzIDE2IGJ5dGVzLiBIbW1tLCBzbyBpdCdzIG9ubHkgY29weWluZyB0aGUgSVAgYWRkcmVzcyBwb3J0aW9uIG9mIHRoZSBzdHJ1Y3R1cmUuIEkgdGhpbmsgdGhhdCdzIHNhZmUsIHNpbmNlIGl0IGRvZXNuJ3QgZXhwb3NlIGFueSBvZiB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSB2aWEgbmV0bGluay5cblxuQnV0IHdhaXQsIHdoYXQgYWJvdXQgYHRjcF9tZXRyaWNzX25sX2R1bXBgPyAgVGhhdCBkdW1wcyB0aGUgYmxvY2sgdmlhIG5ldGxpbmsgYXMgd2VsbCwgYW5kIHRoZXJlJ3MgYSBjaGFuY2UgSSBtaWdodCBiZSBtaXNzaW5nIHNvbWV0aGluZyB0aGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGZ1bmN0aW9uIGRvZXNuJ3QgZG8gYW55dGhpbmcgZGlmZmVyZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU1OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNToyOS40MTEyOTQxNTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9tZXRyaWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzY3LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzY3OlxcdHN0YXRpYyBpbnQgdGNwX21ldHJpY3NfbmxfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA3Njg6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gNzY5OlxcdHtcXG4gNzcwOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbiA3NzE6XFx0XFx0dW5zaWduZWQgaW50IG1heF9yb3dzID0gMVUgXFx1MDAzY1xcdTAwM2MgdGNwX21ldHJpY3NfaGFzaF9sb2c7XFxuIDc3MjpcXHRcXHR1bnNpZ25lZCBpbnQgcm93LCBzX3JvdyA9IGNiLVxcdTAwM2VhcmdzWzBdO1xcbiA3NzM6XFx0XFx0aW50IHNfY29sID0gY2ItXFx1MDAzZWFyZ3NbMV0sIGNvbCA9IHNfY29sO1xcbiA3NzQ6XFx0XFx0aW50IHJlcyA9IDA7XFxuIDc3NTpcXHRcXG4gNzc2OlxcdFxcdGZvciAocm93ID0gc19yb3c7IHJvdyBcXHUwMDNjIG1heF9yb3dzOyByb3crKywgc19jb2wgPSAwKSB7XFxuIDc3NzpcXHRcXHRcXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtO1xcbiA3Nzg6XFx0XFx0XFx0c3RydWN0IHRjcG1faGFzaF9idWNrZXQgKmhiID0gdGNwX21ldHJpY3NfaGFzaCArIHJvdztcXG4gNzc5OlxcdFxcbiA3ODA6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA3ODE6XFx0XFx0XFx0Zm9yIChjb2wgPSAwLCB0bSA9IHJjdV9kZXJlZmVyZW5jZShoYi1cXHUwMDNlY2hhaW4pOyB0bTtcXG4gNzgyOlxcdFxcdFxcdCAgICAgdG0gPSByY3VfZGVyZWZlcmVuY2UodG0tXFx1MDAzZXRjcG1fbmV4dCksIGNvbCsrKSB7XFxuIDc4MzpcXHRcXHRcXHRcXHRpZiAoIW5ldF9lcSh0bV9uZXQodG0pLCBuZXQpKVxcbiA3ODQ6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDc4NTpcXHRcXHRcXHRcXHRpZiAoY29sIFxcdTAwM2Mgc19jb2wpXFxuIDc4NjpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzg3OlxcdFxcdFxcdFxcdHJlcyA9IHRjcF9tZXRyaWNzX2R1bXBfaW5mbyhza2IsIGNiLCB0bSk7XFxuIDc4ODpcXHRcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2MgMCkge1xcbiA3ODk6XFx0XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDc5MDpcXHRcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDc5MTpcXHRcXHRcXHRcXHR9XFxuIDc5MjpcXHRcXHRcXHR9XFxuIDc5MzpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNzk0OlxcdFxcdH1cXG4gNzk1OlxcdFxcbiA3OTY6XFx0ZG9uZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzU6MjkuNDExNDAzNTA1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNTU1NTcwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogaW5ldHBlZXJfYWRkcl9jbXAqKlxuXG5Pa2F5LCBzbyBgdGNwX21ldHJpY3NfZHVtcF9pbmZvYCBjYWxscyBgdGNwX21ldHJpY3NfZmlsbF9pbmZvYC4gUmlnaHQuIE5vIGltbWVkaWF0ZSBsZWFrIHRoZXJlLiBUaGF0J3MgZ29vZCB0byBlc3RhYmxpc2guXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIG1ldGljdWxvdXNseSByZXZpZXcgdGhpcyBwYXRjaC4gQWgsIGl0J3MgbW9kaWZ5aW5nIGBpbmV0cGVlcl9hZGRyX2NtcGAuIE9rYXksIGdvdCBpdC5cblxuSG1tLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgZnVuY3Rpb24gYGluZXRwZWVyX2FkZHJfY21wYCAqZGlkbid0KiBpbmNsdWRlIGEgY2hlY2sgZm9yIHRoZSBhZGRyZXNzIGZhbWlsaWVzIGJlaW5nIGRpZmZlcmVudC4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBXZSBzaG91bGQgZGVmaW5pdGVseSBnbyBiYWNrIGFuZCBsb29rIGF0IHRoZSBvcmlnaW5hbCBgaW5ldHBlZXJfYWRkcl9jbXBgIGJlZm9yZSB0aGUgcGF0Y2ggd2FzIGFwcGxpZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGV4YWN0bHkgaGFzIGNoYW5nZWQgaW4gaXRzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE0MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM1OjM0Ljc2Njk2Mzk1NloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9pbmV0cGVlci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyNDpcXHRzdGF0aWMgaW5saW5lIGludCBpbmV0cGVlcl9hZGRyX2NtcChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSxcXG4gMTI1OlxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYilcXG4gMTI2OlxcdHtcXG4gMTI3OlxcdFxcdGludCBpLCBuO1xcbiAxMjg6XFx0XFxuIDEyOTpcXHRcXHRpZiAoYS1cXHUwMDNlZmFtaWx5ICE9IGItXFx1MDAzZWZhbWlseSlcXG4gMTMwOlxcdFxcdFxcdHJldHVybiBhLVxcdTAwM2VmYW1pbHkgXFx1MDAzYyBiLVxcdTAwM2VmYW1pbHkgPyAtMSA6IDE7XFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdGlmIChhLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVClcXG4gMTMzOlxcdFxcdFxcdG4gPSBzaXplb2YoYS1cXHUwMDNlYTQpIC8gc2l6ZW9mKHUzMik7XFxuIDEzNDpcXHRcXHRlbHNlXFxuIDEzNTpcXHRcXHRcXHRuID0gc2l6ZW9mKGEtXFx1MDAzZWE2KSAvIHNpemVvZih1MzIpO1xcbiAxMzY6XFx0XFxuIDEzNzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbjsgaSsrKSB7XFxuIDEzODpcXHRcXHRcXHRpZiAoYS1cXHUwMDNla2V5W2ldID09IGItXFx1MDAzZWtleVtpXSlcXG4gMTM5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxNDA6XFx0XFx0XFx0aWYgKGEtXFx1MDAzZWtleVtpXSBcXHUwMDNjIGItXFx1MDAzZWtleVtpXSlcXG4gMTQxOlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gMTQyOlxcdFxcdFxcdHJldHVybiAxO1xcbiAxNDM6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNTozNC43NjcwNDE5MzZaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI2ODAyNjUxMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IElQdjQvSVB2NiBBZGRyZXNzIENvbXBhcmlzb24gYW5kIEhhc2hpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBNeSBgcmVhZC1maWxlYCBvdXRwdXQgYWxyZWFkeSBzaG93cyB0aGUgZmFtaWx5IGNoZWNrIGluIGBpbmV0cGVlcl9hZGRyX2NtcGAuIEl0IHNlZW1zIHRoZSBwYXRjaCBpcyBhbHJlYWR5IGFwcGxpZWQgaW4gdGhlIHRyZWUgSSdtIHJlYWRpbmcuIEluaXRpYWxseSwgdGhlIGNvZGUgZGlkbid0IGV4cGxpY2l0bHkgY29tcGFyZSB0aGUgYWRkcmVzcyBmYW1pbGllcy4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGNvZGUgd291bGQgc2VsZWN0IHRoZSBjb21wYXJpc29uIHNpemUgKGBuYCkgYmFzZWQgb24gdGhlIGZhbWlseSBhbmQgdGhlbiB1c2UgdGhhdCBzaXplIHRvIGNvbXBhcmUgbWVtb3J5LiBUaGF0IGNvdWxkIGxlYWQgdG8gYSBjb21wYXJpc29uIGJldHdlZW4gYW4gSVB2NCBhZGRyZXNzIGFuZCB0aGUgaW5pdGlhbCBieXRlcyBvZiBhbiBJUHY2LiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgYSBidWcgZml4IHRvIGNvbXBhcmUgdGhlIGZhbWlsaWVzLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHByb2JsZW1zLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIGNvZGUgYWRkcyBhIGhhc2ggZnVuY3Rpb24gKGBpbmV0cGVlcl9hZGRyX2hhc2hgKSwgdXNpbmcgYHNpcGhhc2hfMnUzMmAgZm9yIElQdjQgYW5kIGBzaXBoYXNoXzR1MzJgIGZvciBJUHY2LCBidXQgY3J1Y2lhbGx5LCBpdCBvbmx5IGhhc2hlcyBpbml0aWFsaXplZCBmaWVsZHMsIHNvIHRoYXQgbG9va3Mgc2FmZS5cblxuVGhlIHBhdGNoIGFsc28gcmVwbGFjZXMgYGluZXRwZWVyX2FkZHJfY21wYCB3aXRoIGBpbmV0cGVlcl9lbnRyeV9jbXBgIGluc2lkZSB0aGUgYGxvb2t1cGAgZnVuY3Rpb24uIEFkZGl0aW9uYWxseSwgYGRoYXNoYCBhbmQgYHAtXHUwMDNlaGFzaGAgd2VyZSBhZGRlZCB0byB0aGUgYGluZXRfcGVlcmAgc3RydWN0LiBUaGlzIGlzIHJlbGF0ZWQgdG8gdGhlIGhhc2hpbmcsIHNvIG5vIGlzc3VlcyB0aGVyZS5cblxuVGhlIHBhdGNoIGluY2x1ZGVzIGEgY2hlY2sgYWdhaW5zdCBhIHRocmVzaG9sZCwgbGltaXRpbmcgYWxsb2NhdGlvbiBvZiBuZXcgcGVlcnMuIEl0IGluaXRpYWxpemVzIHRoZSBgZGFkZHJgIGZpZWxkIHdpdGggYSBzdHJ1Y3QgYXNzaWdubWVudCBhbmQgYWxzbyBzZXRzIHRoZSBoYXNoLiBUaGlzIHN0cnVjdCBhc3NpZ25tZW50IGNvdWxkIGJlIGEgcHJvYmxlbSwgc2luY2UgdGhlIGBpbmV0cGVlcl9hZGRyYCBzdHJ1Y3QgaGFzIHBhZGRpbmcgdGhhdCdzIHVuaW5pdGlhbGl6ZWQgaWYgb25seSB0aGUgYEFGX0lORVRgIGZhbWlseSBpcyB1c2VkLiBLTVNBTiBzaG91bGQgY2F0Y2ggYW55IHJlYWRzLCBidXQgbGV0J3MgYmUgc3VyZS5cblxuTGV0J3Mgc2VlOlxuKiAgIEluIGBpbmV0cGVlcl9hZGRyX2hhc2hgLCBvbmx5IHRoZSBgYTQuYWRkcmAgYW5kIGBhNC52aWZgIGFyZSByZWFkLlxuKiAgIEluIGBpbmV0cGVlcl9hZGRyX2NtcGAsIG9ubHkgYGE0LmFkZHJgIGFuZCBgYTQudmlmYCBhcmUgcmVhZCAoYWxpYXNlZCB2aWEgYHM2X2FkZHIzMmAgd2hlbiBwcm9jZXNzaW5nIElQdjYpLlxuKiAgIEluIGB0Y3BfbWV0cmljc19maWxsX2luZm9gLCBvbmx5IGBhNC5hZGRyYCBpcyByZWFkLlxuXG5TbyB0aGUgdW5pbml0aWFsaXplZCBwYWRkaW5nIGZyb20gdGhlIHN0cnVjdCBhc3NpZ25tZW50IGluIGBpbmV0X2dldHBlZXJgIGlzIG5ldmVyIGFjdHVhbGx5IHJlYWQgb3IgbGVha2VkIGluIHRoZXNlIGZ1bmN0aW9ucy4gSSdkIHN0aWxsIGxpa2UgdG8gbG9vayBhdCBvdGhlciB1c2VycyBvZiBgc3RydWN0IGluZXRfcGVlcmAsIGJ1dCBzbyBmYXIsIHRoaXMgbG9va3MgbGlrZSBhIGNsZWFuIGJ1ZyBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODU3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM1OjU3LjQ0NzMxMDc2NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNTU5NjU0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgaW5ldF9wZWVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2luZXRwZWVyLmg9Mjc9c3RydWN0IGluZXRwZWVyX2FkZHIge1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0zNS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjM2OnN0cnVjdCBpbmV0X3BlZXIge1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMzctXFx0c3RydWN0IHJiX25vZGVcXHRcXHRyYl9ub2RlO1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC02MS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjYyOnN0cnVjdCBpbmV0X3BlZXJfYmFzZSB7XFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC02My1cXHRzdHJ1Y3QgcmJfcm9vdFxcdFxcdHJiX3Jvb3Q7XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTY3LVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6Njg6dm9pZCBpbmV0X3BlZXJfYmFzZV9pbml0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqKTtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTY5LVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD05Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbjZfYWRkciAqaW5ldHBlZXJfZ2V0X2FkZHJfdjYoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyKVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC05OC0vKiBjYW4gYmUgY2FsbGVkIHdpdGggb3Igd2l0aG91dCBsb2NhbCBCSCBiZWluZyBkaXNhYmxlZCAqL1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6OTk6c3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwMC1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyKTtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwMS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjEwMjpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NChzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDMtXFx0XFx0XFx0XFx0XFx0XFx0X19iZTMyIHY0ZGFkZHIsXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTExMy1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjExNDpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMTUtXFx0XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICp2NmRhZGRyKVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0xMjQ9c3RhdGljIGlubGluZSBpbnQgaW5ldHBlZXJfYWRkcl9jbXAoY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmEsXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTE0OC0vKiBjYW4gYmUgY2FsbGVkIGZyb20gQkggY29udGV4dCBvciBvdXRzaWRlICovXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxNDk6dm9pZCBpbmV0X3B1dHBlZXIoc3RydWN0IGluZXRfcGVlciAqcCk7XFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxNTA6Ym9vbCBpbmV0X3BlZXJfeHJsaW1fYWxsb3coc3RydWN0IGluZXRfcGVlciAqcGVlciwgaW50IHRpbWVvdXQpO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTUxLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTUyOnZvaWQgaW5ldHBlZXJfaW52YWxpZGF0ZV90cmVlKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqKTtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTE1My1cXG4tLVxcbmluY2x1ZGUvbmV0L2lwNl9maWIuaD0zOTE9c3RydWN0IGZpYjZfdGFibGUge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTM5NS1cXHRzdHJ1Y3QgZmliNl9ub2RlXFx0dGI2X3Jvb3Q7XFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oOjM5NjpcXHRzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2VcXHR0YjZfcGVlcnM7XFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTM5Ny1cXHR1bnNpZ25lZCBpbnRcXHRcXHRmbGFncztcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaD01NT1zdHJ1Y3QgbmV0bnNfaXB2NCB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgtMTM2LVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaDoxMzc6XFx0c3RydWN0IGluZXRfcGVlcl9iYXNlXFx0KnBlZXJzO1xcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0xMzgtXFx0c3RydWN0IGZxZGlyXFx0XFx0KmZxZGlyO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2Ni5oPTY2PXN0cnVjdCBuZXRuc19pcHY2IHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaC03Mi1cXHRzdHJ1Y3QgaXB2Nl9kZXZjb25mXFx0KmRldmNvbmZfZGZsdDtcXG5pbmNsdWRlL25ldC9uZXRucy9pcHY2Lmg6NzM6XFx0c3RydWN0IGluZXRfcGVlcl9iYXNlXFx0KnBlZXJzO1xcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaC03NC1cXHRzdHJ1Y3QgZnFkaXJcXHRcXHQqZnFkaXI7XFxuLS1cXG5uZXQvaXB2NC9pY21wLmM9MzExPXN0YXRpYyBib29sIGljbXB2NF94cmxpbV9hbGxvdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydGFibGUgKnJ0LFxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTMxNS1cXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBcXHUwMDI2cnQtXFx1MDAzZWRzdDtcXG5uZXQvaXB2NC9pY21wLmM6MzE2OlxcdHN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7XFxubmV0L2lwdjQvaWNtcC5jLTMxNy1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbi0tXFxubmV0L2lwdjQvaW5ldHBlZXIuYy00Ny0gKiAgMy4gIEdsb2JhbCB2YXJpYWJsZSBwZWVyX3RvdGFsIGlzIG1vZGlmaWVkIHVuZGVyIHRoZSBwb29sIGxvY2suXFxubmV0L2lwdjQvaW5ldHBlZXIuYzo0ODogKiAgNC4gIHN0cnVjdCBpbmV0X3BlZXIgZmllbGRzIG1vZGlmaWNhdGlvbjpcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTQ5LSAqXFx0XFx0cmJfbm9kZTogcG9vbCBsb2NrXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jPTcxPXN0YXRpYyBpbnQgaW5ldHBlZXJfZW50cnlfY21wKHU2NCBkaGFzaCxcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTcyLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcXG5uZXQvaXB2NC9pbmV0cGVlci5jOjczOlxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0X3BlZXIgKnApXFxubmV0L2lwdjQvaW5ldHBlZXIuYy03NC17XFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTgyLVxcbm5ldC9pcHY0L2luZXRwZWVyLmM6ODM6dm9pZCBpbmV0X3BlZXJfYmFzZV9pbml0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYnApXFxubmV0L2lwdjQvaW5ldHBlZXIuYy04NC17XFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jPTk5PXZvaWQgX19pbml0IGluZXRfaW5pdHBlZXJzKHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTEwNi1cXHRucl9lbnRyaWVzID0gZGl2NjRfdWwoKHU2NCl0b3RhbHJhbV9wYWdlcygpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxubmV0L2lwdjQvaW5ldHBlZXIuYzoxMDc6XFx0XFx0XFx0ICAgICAgMTAwICogTDFfQ0FDSEVfQUxJR04oc2l6ZW9mKHN0cnVjdCBpbmV0X3BlZXIpKSk7XFxubmV0L2lwdjQvaW5ldHBlZXIuYy0xMDgtXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTExNC0vKiBDYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgb3IgYmFzZS1cXHUwMDNlbG9jayBoZWxkICovXFxubmV0L2lwdjQvaW5ldHBlZXIuYzoxMTU6c3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0xMTYtXFx0XFx0XFx0XFx0dTY0IGRoYXNoLFxcbm5ldC9pcHY0L2luZXRwZWVyLmM6MTE3OlxcdFxcdFxcdFxcdHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTExOC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgc2VxLFxcbm5ldC9pcHY0L2luZXRwZWVyLmM6MTE5OlxcdFxcdFxcdFxcdHN0cnVjdCBpbmV0X3BlZXIgKmdjX3N0YWNrW10sXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0xMjAtXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50ICpnY19jbnQsXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTEyNC1cXHRzdHJ1Y3QgcmJfbm9kZSAqKnBwLCAqcGFyZW50LCAqbmV4dDtcXG5uZXQvaXB2NC9pbmV0cGVlci5jOjEyNTpcXHRzdHJ1Y3QgaW5ldF9wZWVyICpwO1xcbm5ldC9pcHY0L2luZXRwZWVyLmMtMTI2LVxcdHUzMiBub3c7XFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTEzNi1cXHRcXHRwYXJlbnQgPSBuZXh0O1xcbm5ldC9pcHY0L2luZXRwZWVyLmM6MTM3OlxcdFxcdHAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBpbmV0X3BlZXIsIHJiX25vZGUpO1xcbm5ldC9pcHY0L2luZXRwZWVyLmMtMTM4LVxcdFxcdGNtcCA9IGluZXRwZWVyX2VudHJ5X2NtcChkaGFzaCwgZGFkZHIsIHApO1xcbi0tXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0xNjEtLyogcGVyZm9ybSBnYXJiYWdlIGNvbGxlY3Qgb24gYWxsIGl0ZW1zIHN0YWNrZWQgZHVyaW5nIGEgbG9va3VwICovXFxubmV0L2lwdjQvaW5ldHBlZXIuYzoxNjI6c3RhdGljIHZvaWQgaW5ldF9wZWVyX2djKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG5uZXQvaXB2NC9pbmV0cGVlci5jOjE2MzpcXHRcXHRcXHQgc3RydWN0IGluZXRfcGVlciAqZ2Nfc3RhY2tbXSxcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTE2NC1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGdjX2NudClcXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmMtMTY2LVxcdGludCBwZWVyX3RocmVzaG9sZCwgcGVlcl9tYXh0dGwsIHBlZXJfbWludHRsO1xcbm5ldC9pcHY0L2luZXRwZWVyLmM6MTY3OlxcdHN0cnVjdCBpbmV0X3BlZXIgKnA7XFxubmV0L2lwdjQvaW5ldHBlZXIuYy0xNjgtXFx0X191MzIgZGVsdGEsIHR0bDtcXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmMtMTk4LS8qIE11c3QgYmUgY2FsbGVkIHVuZGVyIFJDVSA6IE5vIHJlZmNvdW50IGNoYW5nZSBpcyBkb25lIGhlcmUuICovXFxubmV0L2lwdjQvaW5ldHBlZXIuYzoxOTk6c3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTIwMC1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyKVxcbm5ldC9pcHY0L2luZXRwZWVyLmMtMjAxLXtcXG5uZXQvaXB2NC9pbmV0cGVlci5jOjIwMjpcXHRzdHJ1Y3QgaW5ldF9wZWVyICpwLCAqZ2Nfc3RhY2tbUEVFUl9NQVhfR0NdO1xcbm5ldC9pcHY0L2luZXRwZWVyLmMtMjAzLVxcdHU2NCBkaGFzaCA9IGluZXRwZWVyX2FkZHJfaGFzaChkYWRkcik7XFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTI1My1cXG5uZXQvaXB2NC9pbmV0cGVlci5jOjI1NDp2b2lkIGluZXRfcHV0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyICpwKVxcbm5ldC9pcHY0L2luZXRwZWVyLmMtMjU1LXtcXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmMtMjc3LSNkZWZpbmUgWFJMSU1fQlVSU1RfRkFDVE9SIDZcXG5uZXQvaXB2NC9pbmV0cGVlci5jOjI3ODpib29sIGluZXRfcGVlcl94cmxpbV9hbGxvdyhzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyLCBpbnQgdGltZW91dClcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTI3OS17XFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTMwMy1cXG5uZXQvaXB2NC9pbmV0cGVlci5jOjMwNDp2b2lkIGluZXRwZWVyX2ludmFsaWRhdGVfdHJlZShzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UpXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0zMDUte1xcbi0tXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0zMDgtXFx0d2hpbGUgKHApIHtcXG5uZXQvaXB2NC9pbmV0cGVlci5jOjMwOTpcXHRcXHRzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyID0gcmJfZW50cnkocCwgc3RydWN0IGluZXRfcGVlciwgcmJfbm9kZSk7XFxubmV0L2lwdjQvaW5ldHBlZXIuYy0zMTAtXFxuLS1cXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jPTYxPXN0cnVjdCBpcHEge1xcbi0tXFxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYy02Ny1cXHR1bnNpZ25lZCBpbnQgICAgcmlkO1xcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmM6Njg6XFx0c3RydWN0IGluZXRfcGVlciAqcGVlcjtcXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTY5LX07XFxuLS1cXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jPTgzPXN0YXRpYyB2b2lkIGlwNF9mcmFnX2luaXQoc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqcSwgY29uc3Qgdm9pZCAqYSlcXG4tLVxcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtODctXFx0c3RydWN0IG5ldCAqbmV0ID0gcS1cXHUwMDNlZnFkaXItXFx1MDAzZW5ldDtcXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jOjg4OlxcdHN0cnVjdCBpbmV0X3BlZXIgKnAgPSBOVUxMO1xcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtODktXFxuLS1cXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jPTIyMD1zdGF0aWMgaW50IGlwX2ZyYWdfdG9vX2ZhcihzdHJ1Y3QgaXBxICpxcClcXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTIyMS17XFxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYzoyMjI6XFx0c3RydWN0IGluZXRfcGVlciAqcGVlciA9IHFwLVxcdTAwM2VwZWVyO1xcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtMjIzLVxcdHVuc2lnbmVkIGludCBtYXggPSBxcC1cXHUwMDNlcS5mcWRpci1cXHUwMDNlbWF4X2Rpc3Q7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTkwMj12b2lkIGlwX3J0X3NlbmRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtOTA1LVxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjtcXG5uZXQvaXB2NC9yb3V0ZS5jOjkwNjpcXHRzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyO1xcbm5ldC9pcHY0L3JvdXRlLmMtOTA3LVxcdHN0cnVjdCBuZXQgKm5ldDtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9OTY1PXN0YXRpYyBpbnQgaXBfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtOTY5LVxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjtcXG5uZXQvaXB2NC9yb3V0ZS5jOjk3MDpcXHRzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyO1xcbm5ldC9pcHY0L3JvdXRlLmMtOTcxLVxcdHVuc2lnbmVkIGxvbmcgbm93O1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0zNzEyPXN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcHY0X2luZXRwZWVyX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9pcHY0L3JvdXRlLmMtMzcxMy17XFxubmV0L2lwdjQvcm91dGUuYzozNzE0OlxcdHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYnAgPSBrbWFsbG9jX29iaigqYnApO1xcbm5ldC9pcHY0L3JvdXRlLmMtMzcxNS1cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MzcyMz1zdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwdjRfaW5ldHBlZXJfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2lwdjQvcm91dGUuYy0zNzI0LXtcXG5uZXQvaXB2NC9yb3V0ZS5jOjM3MjU6XFx0c3RydWN0IGluZXRfcGVlcl9iYXNlICpicCA9IG5ldC1cXHUwMDNlaXB2NC5wZWVycztcXG5uZXQvaXB2NC9yb3V0ZS5jLTM3MjYtXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmM9MTk1PXN0YXRpYyBib29sIGljbXB2Nl94cmxpbV9hbGxvdyhzdHJ1Y3Qgc29jayAqc2ssIHU4IHR5cGUsXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmMtMjIwLVxcdFxcdGludCB0bW8gPSBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LnN5c2N0bC5pY21wdjZfdGltZSk7XFxubmV0L2lwdjYvaWNtcC5jOjIyMTpcXHRcXHRzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyO1xcbm5ldC9pcHY2L2ljbXAuYy0yMjItXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9NTE5PWludCBpcDZfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTYyMy1cXHRcXHRzdHJ1Y3QgaW42X2FkZHIgKnRhcmdldCA9IE5VTEw7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjYyNDpcXHRcXHRzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy02MjUtXFx0XFx0c3RydWN0IHJ0Nl9pbmZvICpydDtcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MTY1NT12b2lkIG5kaXNjX3NlbmRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICp0YXJnZXQpXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTE2NjAtXFx0aW50IG9wdGxlbiA9IDA7XFxubmV0L2lwdjYvbmRpc2MuYzoxNjYxOlxcdHN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7XFxubmV0L2lwdjYvbmRpc2MuYy0xNjYyLVxcdHN0cnVjdCBza19idWZmICpidWZmO1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz02Nzk5PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcHY2X2luZXRwZWVyX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9pcHY2L3JvdXRlLmMtNjgwMC17XFxubmV0L2lwdjYvcm91dGUuYzo2ODAxOlxcdHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYnAgPSBrbWFsbG9jX29iaigqYnApO1xcbm5ldC9pcHY2L3JvdXRlLmMtNjgwMi1cXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NjgxMD1zdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwdjZfaW5ldHBlZXJfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2lwdjYvcm91dGUuYy02ODExLXtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjY4MTI6XFx0c3RydWN0IGluZXRfcGVlcl9iYXNlICpicCA9IG5ldC1cXHUwMDNlaXB2Ni5wZWVycztcXG5uZXQvaXB2Ni9yb3V0ZS5jLTY4MTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM1OjU5LjM1MjkzMjgxOVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTQ2NDIzNzQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBzdHJ1Y3QgaW5ldF9wZWVyYC4gSXQncyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCBmb3IgdGhpbmdzIGxpa2UgSUNNUCByYXRlIGxpbWl0aW5nIGFuZCByb3V0aW5nIHJlZGlyZWN0cywgbm90aGluZyB1c2VyLXNwYWNlIGRpcmVjdGx5IHRvdWNoZXMuIFRoZSBjb3JlIGNoYW5nZSBoZXJlIHNlZW1zIHRvIGJlIGFkZGluZyBhIGBoYXNoYCBmaWVsZCB0byB0aGUgc3RydWN0IHRvIHNwZWVkIHVwIGxvb2t1cHMgaW4gdGhlIHJlZC1ibGFjayB0cmVlLCB3aGljaCBpcyBhIGdvb2Qgb3B0aW1pemF0aW9uLlxuXG5NeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBoYXNoIGlzIGRlcml2ZWQgZnJvbSBgZGFkZHJgLCBhbmQgdGhhdCdzIGluaXRpYWxpemVkLCBzbyB0aGF0J3MgZ29vZC4gVGhlIHBhdGNoIGFsc28gaW5jbHVkZXMgYSBgZmFtaWx5YCBjaGVjayBpbiBgaW5ldHBlZXJfYWRkcl9jbXBgLiBgZmFtaWx5YCBpcyAqYWxzbyogYWx3YXlzIGluaXRpYWxpemVkLiBXZSd2ZSBnb3QgYSB0aHJlc2hvbGQgY2hlY2sgYmVmb3JlIGFsbG9jYXRpb24sIGJ1dCB0aGF0IHNob3VsZG4ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgcmVhZCBpc3N1ZXMuXG5cbk5vdywgdGhlcmUncyBzb21lIHBhZGRpbmcgaW4gYHN0cnVjdCBpbmV0cGVlcl9hZGRyYCBmb3IgSVB2NCwgYnV0IHRoYXQgcGFkZGluZydzIG9ubHkgKmNvcGllZCogd2hlbiBgcC1cdTAwM2VkYWRkciA9ICpkYWRkcjtgIGV4ZWN1dGVzLiBDcnVjaWFsbHksIGl0J3MgKm5ldmVyKiByZWFkIG9yIGV4cG9zZWQuIEtNU0FOLCBvZiBjb3Vyc2UsIGlzIHdoYXQgd2UgdXNlIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gU2luY2UgdGhlIHBhZGRpbmcgaXMgbmV2ZXIgcmVhZCwgS01TQU4gd2lsbCByZW1haW4gc2lsZW50LCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZS4uLiBLTVNBTiAqZG9lcyogY29tcGxhaW4gYWJvdXQgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBicmFuY2hlcyBvciBtZW1vcnkgYWNjZXNzZXMsIGFuZCBhbHNvIHdoZW4gY29weWluZyB0byB1c2VyIHNwYWNlLiBPa2F5LCBzbyB3ZSBoYXZlIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlIHRoYXQgdGhpcyBwYWRkaW5nIGlzIG5ldmVyIHVzZWQsIGV2ZW4gYnkgYWNjaWRlbnQsIGluIGEgY29uZGl0aW9uYWwuIExldCdzIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhlIGhhc2ggZnVuY3Rpb24gYW5kIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGV4cGxpY2l0bHkgcmVhZCBvbmx5IGluaXRpYWxpemVkIGZpZWxkcy4gQW5kIG9mIGNvdXJzZSwgbm90aGluZyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBzaG91bGRuJ3QgZmxhZyBhbnl0aGluZywgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIGV4cGVjdC5cblxuU28sIGluIHNob3J0LCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiB0ZXN0aW5nLiBUaGVzZSBhcmUgcHVyZWx5IGludGVybmFsIGxvZ2ljIG9wdGltaXphdGlvbnMgYW5kIGJ1ZyBmaXhlcyBmb3IgdGhlIElQdjQgdnMgSVB2NiBjb21wYXJpc29uLlxuXG5Ob3csIGp1c3QgdG8gYmUgKmV4dHJhKiBjYXV0aW91cywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBwb3RlbnRpYWwgZm9yIG91dC1vZi1ib3VuZHMgcmVhZHMgaW4gdGhvc2UgaGFzaCBmdW5jdGlvbnMgYW5kIGNvbXBhcmlzb25zLiBMZXQncyBtYWtlIHN1cmUgdGhvc2UgYHNpcGhhc2hfMnUzMmAgYW5kIGBzaXBoYXNoXzR1MzJgIGZ1bmN0aW9ucyBhcmVuJ3QgZG9pbmcgYW55dGhpbmcgbmFzdHkuIE9rYXksIHRoZXkgdGFrZSBgdTMyYCB2YWx1ZXMgKmJ5IHZhbHVlKi4gYGE0LmFkZHJgIGlzIGBfX2JlMzJgICg0IGJ5dGVzKSwgYGE0LnZpZmAgaXMgYF9fdTMyYCAoNCBieXRlcykuICBTbywgbm8gb3V0LW9mLWJvdW5kcyByZWFkIHdpdGggYHNpcGhhc2hfMnUzMmAuIFNhbWUgd2l0aCBgc2lwaGFzaF80dTMyYDsgdGhlIGFycmF5IGBhNi5zNl9hZGRyMzJgIGlzIGFuIGFycmF5IG9mIGZvdXIgYHUzMmBzLCBhbmQgdGhleSdyZSBwYXNzZWQgYnkgdmFsdWUuIFNvLCBubyBvdXQtb2YtYm91bmRzIHJlYWRzIHRoZXJlLCBlaXRoZXIuIFRoYXQncyBnb29kLlxuXG5Ob3csIGZvciBgaW5ldHBlZXJfYWRkcl9jbXBgLCBsZXQncyBjaGVjayBpdCBpbiBkZXRhaWw6XG5XaGVuIGNvbXBhcmluZyBBRl9JTkVUIGFkZHJlc3NlcywgYG4gPSAyYC4gVGhlIGNvZGUgY29tcGFyZXMgYGE2LnM2X2FkZHIzMlswXWAgYW5kIGBbMV1gLiBgYTYuczZfYWRkcjMyWzBdYCBhbGlhc2VzIHdpdGggYGE0LmFkZHJgLCBhbmQgYGE2LnM2X2FkZHIzMlsxXWAgYWxpYXNlcyB3aXRoIGBhNC52aWZgLiAgVGhpcyAqaXMqIHNhZmUgYW5kIG9ubHkgcmVhZHMgaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5TbywgdG8gc3VtbWFyaXplIGV2ZXJ5dGhpbmc6IFRoZSBwYXRjaCBpcyBhIG1vZGlmaWNhdGlvbiBvZiBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcyBhbmQgbG9naWMgZm9yIElQIHBlZXIgdHJhY2tpbmcsIGFkZGluZyBhIGhhc2ggZmllbGQgdG8gb3B0aW1pemUgdGhlIFJCLXRyZWUgYW5kIGZpeGluZyB0aGF0IElQdjQvSVB2NiBjb21wYXJpc29uLiBBbGwgdGhlIGZpZWxkcyB1c2VkIGZvciBoYXNoaW5nIGFuZCBjb21wYXJpbmcgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyBuZXcgZGF0YSBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlZCBpbiBhbnkgYnJhbmNoZXMgb3IgY2FsY3VsYXRpb25zLiBUaGVyZWZvcmUsIGEgc3BlY2lhbGl6ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbid0IG5lZWRlZC4gU3RhbmRhcmQgS0FTQU4gd2lsbCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHRoYXQgbWlnaHQgZXhpc3QuIEdvb2QsIHRoaXMgbG9va3Mgc29saWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDcxLCJPdXRwdXRUb2tlbnMiOjIzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNjoxNC44MTcxNzQ1NDJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBgaW5ldF9wZWVyYCB0cmFja2luZyBtZWNoYW5pc20gYnkgYWRkaW5nIGEgaGFzaCBmaWVsZCB0byBvcHRpbWl6ZSByZWQtYmxhY2sgdHJlZSBsb29rdXBzIGFuZCBmaXhpbmcgYSBjb21wYXJpc29uIGJ1ZyBiZXR3ZWVuIElQdjQgYW5kIElQdjYgYWRkcmVzc2VzLiBUaGUgbmV3IGhhc2ggZnVuY3Rpb24gKGBpbmV0cGVlcl9hZGRyX2hhc2hgKSBhbmQgdGhlIG1vZGlmaWVkIGNvbXBhcmlzb24gZnVuY3Rpb24gKGBpbmV0cGVlcl9lbnRyeV9jbXBgKSBleHBsaWNpdGx5IG9ubHkgcmVhZCB0aGUgaW5pdGlhbGl6ZWQgZmllbGRzIG9mIHRoZSBgaW5ldHBlZXJfYWRkcmAgdW5pb24gKGBhNC5hZGRyYCBhbmQgYGE0LnZpZmAgZm9yIElQdjQsIGFuZCBgYTYuczZfYWRkcjMyYCBmb3IgSVB2NikuIFdoaWxlIHRoZSBgaW5ldHBlZXJfYWRkcmAgdW5pb24gY29udGFpbnMgdW5pbml0aWFsaXplZCBwYWRkaW5nIGZvciBJUHY0IGFkZHJlc3NlcywgdGhpcyBwYWRkaW5nIGlzIG5ldmVyIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGBpbmV0X3BlZXJgIHN0cnVjdHVyZSBpcyBwdXJlbHkgYW4gaW50ZXJuYWwga2VybmVsIHRyYWNraW5nIHN0cnVjdHVyZSBhbmQgaXMgbm90IGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgYGluZXRfcGVlcmAgdHJhY2tpbmcgbWVjaGFuaXNtIGJ5IGFkZGluZyBhIGhhc2ggZmllbGQgdG8gb3B0aW1pemUgcmVkLWJsYWNrIHRyZWUgbG9va3VwcyBhbmQgZml4aW5nIGEgY29tcGFyaXNvbiBidWcgYmV0d2VlbiBJUHY0IGFuZCBJUHY2IGFkZHJlc3Nlcy4gVGhlIG5ldyBoYXNoIGZ1bmN0aW9uIChgaW5ldHBlZXJfYWRkcl9oYXNoYCkgYW5kIHRoZSBtb2RpZmllZCBjb21wYXJpc29uIGZ1bmN0aW9uIChgaW5ldHBlZXJfZW50cnlfY21wYCkgZXhwbGljaXRseSBvbmx5IHJlYWQgdGhlIGluaXRpYWxpemVkIGZpZWxkcyBvZiB0aGUgYGluZXRwZWVyX2FkZHJgIHVuaW9uIChgYTQuYWRkcmAgYW5kIGBhNC52aWZgIGZvciBJUHY0LCBhbmQgYGE2LnM2X2FkZHIzMmAgZm9yIElQdjYpLiBXaGlsZSB0aGUgYGluZXRwZWVyX2FkZHJgIHVuaW9uIGNvbnRhaW5zIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBmb3IgSVB2NCBhZGRyZXNzZXMsIHRoaXMgcGFkZGluZyBpcyBuZXZlciByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBgaW5ldF9wZWVyYCBzdHJ1Y3R1cmUgaXMgcHVyZWx5IGFuIGludGVybmFsIGtlcm5lbCB0cmFja2luZyBzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbxf66[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 21:10:13 +0000 UTC FinishedAt: 2026-08-12 21:36:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7b53449540502cb21b32bca62a6258e22cd97bbe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7b53449540502cb21b32bca62a6258e22cd97bbe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "518ca1cb-5b3a-48a2-87ad-b2a3574944db" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "inet_getpeer", "inet_peer_xrlim_allow" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2luZXRfZ2V0cGVlciYjMzQ7LAogICAgJiMzNDtpbmV0X3BlZXJfeHJsaW1fYWxsb3cmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgYGluZXRfcGVlcmAgdHJhY2tpbmcgbWVjaGFuaXNtIGJ5IGFkZGluZyBhIGhhc2ggZmllbGQgdG8gb3B0aW1pemUgcmVkLWJsYWNrIHRyZWUgbG9va3VwcyBhbmQgZml4aW5nIGEgY29tcGFyaXNvbiBidWcgYmV0d2VlbiBJUHY0IGFuZCBJUHY2IGFkZHJlc3Nlcy4gVGhlIG5ldyBoYXNoIGZ1bmN0aW9uIChgaW5ldHBlZXJfYWRkcl9oYXNoYCkgYW5kIHRoZSBtb2RpZmllZCBjb21wYXJpc29uIGZ1bmN0aW9uIChgaW5ldHBlZXJfZW50cnlfY21wYCkgZXhwbGljaXRseSBvbmx5IHJlYWQgdGhlIGluaXRpYWxpemVkIGZpZWxkcyBvZiB0aGUgYGluZXRwZWVyX2FkZHJgIHVuaW9uIChgYTQuYWRkcmAgYW5kIGBhNC52aWZgIGZvciBJUHY0LCBhbmQgYGE2LnM2X2FkZHIzMmAgZm9yIElQdjYpLiBXaGlsZSB0aGUgYGluZXRwZWVyX2FkZHJgIHVuaW9uIGNvbnRhaW5zIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBmb3IgSVB2NCBhZGRyZXNzZXMsIHRoaXMgcGFkZGluZyBpcyBuZXZlciByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBgaW5ldF9wZWVyYCBzdHJ1Y3R1cmUgaXMgcHVyZWx5IGFuIGludGVybmFsIGtlcm5lbCB0cmFja2luZyBzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBoYXNoLWJhc2VkIGxvb2t1cCBmb3IgaW5ldF9wZWVyIHN0cnVjdHVyZXMsIG1vZGlmeWluZyBpbmV0X2dldHBlZXIgdG8gdXNlIHNpcGhhc2ggZm9yIHRyZWUgaW5zZXJ0aW9uIGFuZCBsb29rdXAuIEl0IGFsc28gY2hhbmdlcyBpbmV0X3BlZXJfeHJsaW1fYWxsb3cgdG8gcmV0dXJuIGZhbHNlIHdoZW4gcGVlciBpcyBOVUxMLCBhbmQgbGltaXRzIHRoZSBhbGxvY2F0aW9uIG9mIG5ldyBwZWVycyBiYXNlZCBvbiBpbmV0X3BlZXJfdGhyZXNob2xkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIElQdjQvSVB2NiBuZXR3b3JraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgSUNNUCByYXRlIGxpbWl0aW5nIGFuZCBJUCBmcmFnbWVudGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYWNmN2Y0MDAyMTNlMTExMWU4NmZhMjQ0NWY2MWZhNzY0NzQ0ODUyMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDIxOjMzOjA1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmggYi9pbmNsdWRlL25ldC9pbmV0cGVlci5oXG5pbmRleCBmNDc1NzU3ZGFhZmJhLi40MTRlOWFkZjRjNTExIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaFxuQEAgLTM1LDYgJiM0MzszNSw3IEBAIHN0cnVjdCBpbmV0cGVlcl9hZGRyIHtcbiBcbiBzdHJ1Y3QgaW5ldF9wZWVyIHtcbiBcdHN0cnVjdCByYl9ub2RlXHRcdHJiX25vZGU7XG4mIzQzO1x0dTY0XHRcdFx0aGFzaDtcbiBcdHN0cnVjdCBpbmV0cGVlcl9hZGRyXHRkYWRkcjtcbiBcbiBcdHUzMlx0XHRcdG1ldHJpY3NbUlRBWF9NQVhdO1xuQEAgLTEyNSw2ICYjNDM7MTI2LDkgQEAgc3RhdGljIGlubGluZSBpbnQgaW5ldHBlZXJfYWRkcl9jbXAoY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmEsXG4ge1xuIFx0aW50IGksIG47XG4gXG4mIzQzO1x0aWYgKGEtXHUwMDNlZmFtaWx5ICE9IGItXHUwMDNlZmFtaWx5KVxuJiM0MztcdFx0cmV0dXJuIGEtXHUwMDNlZmFtaWx5IFx1MDAzYyBiLVx1MDAzZWZhbWlseSA/IC0xIDogMTtcbiYjNDM7XG4gXHRpZiAoYS1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVClcbiBcdFx0biA9IHNpemVvZihhLVx1MDAzZWE0KSAvIHNpemVvZih1MzIpO1xuIFx0ZWxzZVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRwZWVyLmMgYi9uZXQvaXB2NC9pbmV0cGVlci5jXG5pbmRleCA1Yjk1N2E4MzFlN2MzLi45Njg3MWY1MjAxMGYzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaW5ldHBlZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaW5ldHBlZXIuY1xuQEAgLTIxLDYgJiM0MzsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldHBlZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zZWN1cmVfc2VxLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2lwaGFzaC5oXHUwMDNlXG4gXG4gLypcbiAgKiAgVGhlb3J5IG9mIG9wZXJhdGlvbnMuXG5AQCAtNTIsNiAmIzQzOzUzLDMyIEBAXG4gICovXG4gXG4gc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwZWVyX2NhY2hlcCBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO3N0YXRpYyBzaXBoYXNoX2FsaWduZWRfa2V5X3QgaW5ldHBlZXJfaGFzaF9rZXkgX19yZWFkX21vc3RseTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB1NjQgaW5ldHBlZXJfYWRkcl9oYXNoKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGEtXHUwMDNlZmFtaWx5ID09IEFGX0lORVQpXG4mIzQzO1x0XHRyZXR1cm4gc2lwaGFzaF8ydTMyKChfX2ZvcmNlIHUzMilhLVx1MDAzZWE0LmFkZHIsIGEtXHUwMDNlYTQudmlmLFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZpbmV0cGVlcl9oYXNoX2tleSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzaXBoYXNoXzR1MzIoKF9fZm9yY2UgdTMyKWEtXHUwMDNlYTYuczZfYWRkcjMyWzBdLFxuJiM0MztcdFx0XHQgICAgKF9fZm9yY2UgdTMyKWEtXHUwMDNlYTYuczZfYWRkcjMyWzFdLFxuJiM0MztcdFx0XHQgICAgKF9fZm9yY2UgdTMyKWEtXHUwMDNlYTYuczZfYWRkcjMyWzJdLFxuJiM0MztcdFx0XHQgICAgKF9fZm9yY2UgdTMyKWEtXHUwMDNlYTYuczZfYWRkcjMyWzNdLFxuJiM0MztcdFx0XHQgICAgXHUwMDI2aW5ldHBlZXJfaGFzaF9rZXkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGluZXRwZWVyX2VudHJ5X2NtcCh1NjQgZGhhc2gsXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcbiYjNDM7XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRfcGVlciAqcClcbiYjNDM7e1xuJiM0MztcdGlmIChkaGFzaCBcdTAwM2MgcC1cdTAwM2VoYXNoKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdGlmIChkaGFzaCBcdTAwM2UgcC1cdTAwM2VoYXNoKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpbmV0cGVlcl9hZGRyX2NtcChkYWRkciwgXHUwMDI2cC1cdTAwM2VkYWRkcik7XG4mIzQzO31cbiBcbiB2b2lkIGluZXRfcGVlcl9iYXNlX2luaXQoc3RydWN0IGluZXRfcGVlcl9iYXNlICpicClcbiB7XG5AQCAtNzMsNiAmIzQzOzEwMCw4IEBAIHZvaWQgX19pbml0IGluZXRfaW5pdHBlZXJzKHZvaWQpXG4ge1xuIFx0dTY0IG5yX2VudHJpZXM7XG4gXG4mIzQzO1x0Z2V0X3JhbmRvbV9ieXRlcyhcdTAwMjZpbmV0cGVlcl9oYXNoX2tleSwgc2l6ZW9mKGluZXRwZWVyX2hhc2hfa2V5KSk7XG4mIzQzO1xuIFx0IC8qIDElIG9mIHBoeXNpY2FsIG1lbW9yeSAqL1xuIFx0bnJfZW50cmllcyA9IGRpdjY0X3VsKCh1NjQpdG90YWxyYW1fcGFnZXMoKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiBcdFx0XHQgICAgICAxMDAgKiBMMV9DQUNIRV9BTElHTihzaXplb2Yoc3RydWN0IGluZXRfcGVlcikpKTtcbkBAIC04NCw2ICYjNDM7MTEzLDcgQEAgdm9pZCBfX2luaXQgaW5ldF9pbml0cGVlcnModm9pZClcbiBcbiAvKiBDYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgb3IgYmFzZS1cdTAwM2Vsb2NrIGhlbGQgKi9cbiBzdGF0aWMgc3RydWN0IGluZXRfcGVlciAqbG9va3VwKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcbiYjNDM7XHRcdFx0XHR1NjQgZGhhc2gsXG4gXHRcdFx0XHRzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4gXHRcdFx0XHR1bnNpZ25lZCBpbnQgc2VxLFxuIFx0XHRcdFx0c3RydWN0IGluZXRfcGVlciAqZ2Nfc3RhY2tbXSxcbkBAIC0xMDUsNyAmIzQzOzEzNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5ldF9wZWVyICpsb29rdXAoY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHRwYXJlbnQgPSBuZXh0O1xuIFx0XHRwID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgaW5ldF9wZWVyLCByYl9ub2RlKTtcbi1cdFx0Y21wID0gaW5ldHBlZXJfYWRkcl9jbXAoZGFkZHIsIFx1MDAyNnAtXHUwMDNlZGFkZHIpO1xuJiM0MztcdFx0Y21wID0gaW5ldHBlZXJfZW50cnlfY21wKGRoYXNoLCBkYWRkciwgcCk7XG4gXHRcdGlmIChjbXAgPT0gMCkge1xuIFx0XHRcdG5vdyA9IGppZmZpZXM7XG4gXHRcdFx0aWYgKFJFQURfT05DRShwLVx1MDAzZWR0aW1lKSAhPSBub3cpXG5AQCAtMTcwLDYgJiM0MzsyMDAsNyBAQCBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIpXG4ge1xuIFx0c3RydWN0IGluZXRfcGVlciAqcCwgKmdjX3N0YWNrW1BFRVJfTUFYX0dDXTtcbiYjNDM7XHR1NjQgZGhhc2ggPSBpbmV0cGVlcl9hZGRyX2hhc2goZGFkZHIpO1xuIFx0c3RydWN0IHJiX25vZGUgKipwcCwgKnBhcmVudDtcbiBcdHVuc2lnbmVkIGludCBnY19jbnQsIHNlcTtcbiBcbkBAIC0xNzcsNyAmIzQzOzIwOCw3IEBAIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4gXHQgKiBCZWNhdXNlIG9mIGEgY29uY3VycmVudCB3cml0ZXIsIHdlIG1pZ2h0IG5vdCBmaW5kIGFuIGV4aXN0aW5nIGVudHJ5LlxuIFx0ICovXG4gXHRzZXEgPSByZWFkX3NlcWJlZ2luKFx1MDAyNmJhc2UtXHUwMDNlbG9jayk7XG4tXHRwID0gbG9va3VwKGRhZGRyLCBiYXNlLCBzZXEsIE5VTEwsIFx1MDAyNmdjX2NudCwgXHUwMDI2cGFyZW50LCBcdTAwMjZwcCk7XG4mIzQzO1x0cCA9IGxvb2t1cChkYWRkciwgZGhhc2gsIGJhc2UsIHNlcSwgTlVMTCwgXHUwMDI2Z2NfY250LCBcdTAwMjZwYXJlbnQsIFx1MDAyNnBwKTtcbiBcbiBcdC8qIE1ha2Ugc3VyZSB0cmVlIHdhcyBub3QgbW9kaWZpZWQgZHVyaW5nIG91ciBsb29rdXAuICovXG4gXHRpZiAocCBcdTAwMjZcdTAwMjYgIXJlYWRfc2VxcmV0cnkoXHUwMDI2YmFzZS1cdTAwM2Vsb2NrLCBzZXEpKVxuQEAgLTE5MCwxMSAmIzQzOzIyMSwxMyBAQCBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuIFx0d3JpdGVfc2VxbG9ja19iaChcdTAwMjZiYXNlLVx1MDAzZWxvY2spO1xuIFxuIFx0Z2NfY250ID0gMDtcbi1cdHAgPSBsb29rdXAoZGFkZHIsIGJhc2UsIHNlcSwgZ2Nfc3RhY2ssIFx1MDAyNmdjX2NudCwgXHUwMDI2cGFyZW50LCBcdTAwMjZwcCk7XG4mIzQzO1x0cCA9IGxvb2t1cChkYWRkciwgZGhhc2gsIGJhc2UsIHNlcSwgZ2Nfc3RhY2ssIFx1MDAyNmdjX2NudCwgXHUwMDI2cGFyZW50LCBcdTAwMjZwcCk7XG4gXHRpZiAoIXApIHtcbi1cdFx0cCA9IGttZW1fY2FjaGVfYWxsb2MocGVlcl9jYWNoZXAsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0aWYgKCh1NjQpYmFzZS1cdTAwM2V0b3RhbCBcdTAwM2MgMlVMTCAqIFJFQURfT05DRShpbmV0X3BlZXJfdGhyZXNob2xkKSlcbiYjNDM7XHRcdFx0cCA9IGttZW1fY2FjaGVfYWxsb2MocGVlcl9jYWNoZXAsIEdGUF9BVE9NSUMpO1xuIFx0XHRpZiAocCkge1xuIFx0XHRcdHAtXHUwMDNlZGFkZHIgPSAqZGFkZHI7XG4mIzQzO1x0XHRcdHAtXHUwMDNlaGFzaCA9IGRoYXNoO1xuIFx0XHRcdHAtXHUwMDNlZHRpbWUgPSAoX191MzIpamlmZmllcztcbiBcdFx0XHRyZWZjb3VudF9zZXQoXHUwMDI2cC1cdTAwM2VyZWZjbnQsIDEpO1xuIFx0XHRcdGF0b21pY19zZXQoXHUwMDI2cC1cdTAwM2VyaWQsIDApO1xuQEAgLTI0OCw3ICYjNDM7MjgxLDcgQEAgYm9vbCBpbmV0X3BlZXJfeHJsaW1fYWxsb3coc3RydWN0IGluZXRfcGVlciAqcGVlciwgaW50IHRpbWVvdXQpXG4gXHRib29sIHJjID0gZmFsc2U7XG4gXG4gXHRpZiAoIXBlZXIpXG4tXHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0dG9rZW4gPSBvdG9rZW4gPSBSRUFEX09OQ0UocGVlci1cdTAwM2VyYXRlX3Rva2Vucyk7XG4gXHRub3cgPSBqaWZmaWVzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpbmV0X2dldHBlZXImIzM0OywKICAgICYjMzQ7aW5ldF9wZWVyX3hybGltX2FsbG93JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBoYXNoLWJhc2VkIGxvb2t1cCBmb3IgaW5ldF9wZWVyIHN0cnVjdHVyZXMsIG1vZGlmeWluZyBpbmV0X2dldHBlZXIgdG8gdXNlIHNpcGhhc2ggZm9yIHRyZWUgaW5zZXJ0aW9uIGFuZCBsb29rdXAuIEl0IGFsc28gY2hhbmdlcyBpbmV0X3BlZXJfeHJsaW1fYWxsb3cgdG8gcmV0dXJuIGZhbHNlIHdoZW4gcGVlciBpcyBOVUxMLCBhbmQgbGltaXRzIHRoZSBhbGxvY2F0aW9uIG9mIG5ldyBwZWVycyBiYXNlZCBvbiBpbmV0X3BlZXJfdGhyZXNob2xkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIElQdjQvSVB2NiBuZXR3b3JraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgSUNNUCByYXRlIGxpbWl0aW5nIGFuZCBJUCBmcmFnbWVudGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWNmN2Y0MDAyMTNlMTExMWU4NmZhMjQ0NWY2MWZhNzY0NzQ0ODUyMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDIxOjMzOjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaCBiL2luY2x1ZGUvbmV0L2luZXRwZWVyLmgKaW5kZXggZjQ3NTc1N2RhYWZiYS4uNDE0ZTlhZGY0YzUxMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pbmV0cGVlci5oCkBAIC0zNSw2ICYjNDM7MzUsNyBAQCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciB7CiAKIHN0cnVjdCBpbmV0X3BlZXIgewogCXN0cnVjdCByYl9ub2RlCQlyYl9ub2RlOwomIzQzOwl1NjQJCQloYXNoOwogCXN0cnVjdCBpbmV0cGVlcl9hZGRyCWRhZGRyOwogCiAJdTMyCQkJbWV0cmljc1tSVEFYX01BWF07CkBAIC0xMjUsNiAmIzQzOzEyNiw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGluZXRwZWVyX2FkZHJfY21wKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphLAogewogCWludCBpLCBuOwogCiYjNDM7CWlmIChhLSZndDtmYW1pbHkgIT0gYi0mZ3Q7ZmFtaWx5KQomIzQzOwkJcmV0dXJuIGEtJmd0O2ZhbWlseSAmbHQ7IGItJmd0O2ZhbWlseSA/IC0xIDogMTsKJiM0MzsKIAlpZiAoYS0mZ3Q7ZmFtaWx5ID09IEFGX0lORVQpCiAJCW4gPSBzaXplb2YoYS0mZ3Q7YTQpIC8gc2l6ZW9mKHUzMik7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldHBlZXIuYyBiL25ldC9pcHY0L2luZXRwZWVyLmMKaW5kZXggNWI5NTdhODMxZTdjMy4uOTY4NzFmNTIwMTBmMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldHBlZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pbmV0cGVlci5jCkBAIC0yMSw2ICYjNDM7MjEsNyBAQAogI2luY2x1ZGUgJmx0O25ldC9pcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pbmV0cGVlci5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zZWN1cmVfc2VxLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NpcGhhc2guaCZndDsKIAogLyoKICAqICBUaGVvcnkgb2Ygb3BlcmF0aW9ucy4KQEAgLTUyLDYgJiM0Mzs1MywzMiBAQAogICovCiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGVlcl9jYWNoZXAgX19yb19hZnRlcl9pbml0OwomIzQzO3N0YXRpYyBzaXBoYXNoX2FsaWduZWRfa2V5X3QgaW5ldHBlZXJfaGFzaF9rZXkgX19yZWFkX21vc3RseTsKJiM0MzsKJiM0MztzdGF0aWMgdTY0IGluZXRwZWVyX2FkZHJfaGFzaChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSkKJiM0Mzt7CiYjNDM7CWlmIChhLSZndDtmYW1pbHkgPT0gQUZfSU5FVCkKJiM0MzsJCXJldHVybiBzaXBoYXNoXzJ1MzIoKF9fZm9yY2UgdTMyKWEtJmd0O2E0LmFkZHIsIGEtJmd0O2E0LnZpZiwKJiM0MzsJCQkJICAgICZhbXA7aW5ldHBlZXJfaGFzaF9rZXkpOwomIzQzOwomIzQzOwlyZXR1cm4gc2lwaGFzaF80dTMyKChfX2ZvcmNlIHUzMilhLSZndDthNi5zNl9hZGRyMzJbMF0sCiYjNDM7CQkJICAgIChfX2ZvcmNlIHUzMilhLSZndDthNi5zNl9hZGRyMzJbMV0sCiYjNDM7CQkJICAgIChfX2ZvcmNlIHUzMilhLSZndDthNi5zNl9hZGRyMzJbMl0sCiYjNDM7CQkJICAgIChfX2ZvcmNlIHUzMilhLSZndDthNi5zNl9hZGRyMzJbM10sCiYjNDM7CQkJICAgICZhbXA7aW5ldHBlZXJfaGFzaF9rZXkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGluZXRwZWVyX2VudHJ5X2NtcCh1NjQgZGhhc2gsCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLAomIzQzOwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbmV0X3BlZXIgKnApCiYjNDM7ewomIzQzOwlpZiAoZGhhc2ggJmx0OyBwLSZndDtoYXNoKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlpZiAoZGhhc2ggJmd0OyBwLSZndDtoYXNoKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CXJldHVybiBpbmV0cGVlcl9hZGRyX2NtcChkYWRkciwgJmFtcDtwLSZndDtkYWRkcik7CiYjNDM7fQogCiB2b2lkIGluZXRfcGVlcl9iYXNlX2luaXQoc3RydWN0IGluZXRfcGVlcl9iYXNlICpicCkKIHsKQEAgLTczLDYgJiM0MzsxMDAsOCBAQCB2b2lkIF9faW5pdCBpbmV0X2luaXRwZWVycyh2b2lkKQogewogCXU2NCBucl9lbnRyaWVzOwogCiYjNDM7CWdldF9yYW5kb21fYnl0ZXMoJmFtcDtpbmV0cGVlcl9oYXNoX2tleSwgc2l6ZW9mKGluZXRwZWVyX2hhc2hfa2V5KSk7CiYjNDM7CiAJIC8qIDElIG9mIHBoeXNpY2FsIG1lbW9yeSAqLwogCW5yX2VudHJpZXMgPSBkaXY2NF91bCgodTY0KXRvdGFscmFtX3BhZ2VzKCkgJmx0OyZsdDsgUEFHRV9TSElGVCwKIAkJCSAgICAgIDEwMCAqIEwxX0NBQ0hFX0FMSUdOKHNpemVvZihzdHJ1Y3QgaW5ldF9wZWVyKSkpOwpAQCAtODQsNiAmIzQzOzExMyw3IEBAIHZvaWQgX19pbml0IGluZXRfaW5pdHBlZXJzKHZvaWQpCiAKIC8qIENhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSBvciBiYXNlLSZndDtsb2NrIGhlbGQgKi8KIHN0YXRpYyBzdHJ1Y3QgaW5ldF9wZWVyICpsb29rdXAoY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLAomIzQzOwkJCQl1NjQgZGhhc2gsCiAJCQkJc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLAogCQkJCXVuc2lnbmVkIGludCBzZXEsCiAJCQkJc3RydWN0IGluZXRfcGVlciAqZ2Nfc3RhY2tbXSwKQEAgLTEwNSw3ICYjNDM7MTM1LDcgQEAgc3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsCiAJCQlicmVhazsKIAkJcGFyZW50ID0gbmV4dDsKIAkJcCA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGluZXRfcGVlciwgcmJfbm9kZSk7Ci0JCWNtcCA9IGluZXRwZWVyX2FkZHJfY21wKGRhZGRyLCAmYW1wO3AtJmd0O2RhZGRyKTsKJiM0MzsJCWNtcCA9IGluZXRwZWVyX2VudHJ5X2NtcChkaGFzaCwgZGFkZHIsIHApOwogCQlpZiAoY21wID09IDApIHsKIAkJCW5vdyA9IGppZmZpZXM7CiAJCQlpZiAoUkVBRF9PTkNFKHAtJmd0O2R0aW1lKSAhPSBub3cpCkBAIC0xNzAsNiAmIzQzOzIwMCw3IEBAIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyKQogewogCXN0cnVjdCBpbmV0X3BlZXIgKnAsICpnY19zdGFja1tQRUVSX01BWF9HQ107CiYjNDM7CXU2NCBkaGFzaCA9IGluZXRwZWVyX2FkZHJfaGFzaChkYWRkcik7CiAJc3RydWN0IHJiX25vZGUgKipwcCwgKnBhcmVudDsKIAl1bnNpZ25lZCBpbnQgZ2NfY250LCBzZXE7CiAKQEAgLTE3Nyw3ICYjNDM7MjA4LDcgQEAgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSwKIAkgKiBCZWNhdXNlIG9mIGEgY29uY3VycmVudCB3cml0ZXIsIHdlIG1pZ2h0IG5vdCBmaW5kIGFuIGV4aXN0aW5nIGVudHJ5LgogCSAqLwogCXNlcSA9IHJlYWRfc2VxYmVnaW4oJmFtcDtiYXNlLSZndDtsb2NrKTsKLQlwID0gbG9va3VwKGRhZGRyLCBiYXNlLCBzZXEsIE5VTEwsICZhbXA7Z2NfY250LCAmYW1wO3BhcmVudCwgJmFtcDtwcCk7CiYjNDM7CXAgPSBsb29rdXAoZGFkZHIsIGRoYXNoLCBiYXNlLCBzZXEsIE5VTEwsICZhbXA7Z2NfY250LCAmYW1wO3BhcmVudCwgJmFtcDtwcCk7CiAKIAkvKiBNYWtlIHN1cmUgdHJlZSB3YXMgbm90IG1vZGlmaWVkIGR1cmluZyBvdXIgbG9va3VwLiAqLwogCWlmIChwICZhbXA7JmFtcDsgIXJlYWRfc2VxcmV0cnkoJmFtcDtiYXNlLSZndDtsb2NrLCBzZXEpKQpAQCAtMTkwLDExICYjNDM7MjIxLDEzIEBAIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsCiAJd3JpdGVfc2VxbG9ja19iaCgmYW1wO2Jhc2UtJmd0O2xvY2spOwogCiAJZ2NfY250ID0gMDsKLQlwID0gbG9va3VwKGRhZGRyLCBiYXNlLCBzZXEsIGdjX3N0YWNrLCAmYW1wO2djX2NudCwgJmFtcDtwYXJlbnQsICZhbXA7cHApOwomIzQzOwlwID0gbG9va3VwKGRhZGRyLCBkaGFzaCwgYmFzZSwgc2VxLCBnY19zdGFjaywgJmFtcDtnY19jbnQsICZhbXA7cGFyZW50LCAmYW1wO3BwKTsKIAlpZiAoIXApIHsKLQkJcCA9IGttZW1fY2FjaGVfYWxsb2MocGVlcl9jYWNoZXAsIEdGUF9BVE9NSUMpOwomIzQzOwkJaWYgKCh1NjQpYmFzZS0mZ3Q7dG90YWwgJmx0OyAyVUxMICogUkVBRF9PTkNFKGluZXRfcGVlcl90aHJlc2hvbGQpKQomIzQzOwkJCXAgPSBrbWVtX2NhY2hlX2FsbG9jKHBlZXJfY2FjaGVwLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHApIHsKIAkJCXAtJmd0O2RhZGRyID0gKmRhZGRyOwomIzQzOwkJCXAtJmd0O2hhc2ggPSBkaGFzaDsKIAkJCXAtJmd0O2R0aW1lID0gKF9fdTMyKWppZmZpZXM7CiAJCQlyZWZjb3VudF9zZXQoJmFtcDtwLSZndDtyZWZjbnQsIDEpOwogCQkJYXRvbWljX3NldCgmYW1wO3AtJmd0O3JpZCwgMCk7CkBAIC0yNDgsNyAmIzQzOzI4MSw3IEBAIGJvb2wgaW5ldF9wZWVyX3hybGltX2FsbG93KHN0cnVjdCBpbmV0X3BlZXIgKnBlZXIsIGludCB0aW1lb3V0KQogCWJvb2wgcmMgPSBmYWxzZTsKIAogCWlmICghcGVlcikKLQkJcmV0dXJuIHRydWU7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAKIAl0b2tlbiA9IG90b2tlbiA9IFJFQURfT05DRShwZWVyLSZndDtyYXRlX3Rva2Vucyk7CiAJbm93ID0gamlmZmllczsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzMAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEluZXRwZWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgbmV0L2lwdjQvaW5ldHBlZXIuY2AgYW5kIGBpbmNsdWRlL25ldC9pbmV0cGVlci5oYC4gU2VlbXMgbGlrZSB0aGV5JiMzOTtyZSBhZGRpbmcgYSBgaGFzaGAgZmllbGQgdG8gdGhlIGBzdHJ1Y3QgaW5ldF9wZWVyYCBhbmQgdXNpbmcgYHNpcGhhc2hgIHRvIGdlbmVyYXRlIGEgaGFzaCBvZiB0aGUgSVAgYWRkcmVzcywgc3RvcmluZyBpdCBpbiB0aGF0IGZpZWxkLiBUaGF04oCZcyBpbnRlcmVzdGluZy4gQSBoYXNoLWJhc2VkIGxvb2t1cCBjb3VsZCBzcGVlZCB0aGluZ3MgdXAgY29uc2lkZXJhYmx5LCBkZXBlbmRpbmcgb24gaG93IHRoZXnigJl2ZSBpbXBsZW1lbnRlZCB0aGUgY29sbGlzaW9uIGhhbmRsaW5nLiBUaGV5JiMzOTt2ZSBhbHNvIG1vZGlmaWVkIGBpbmV0cGVlcl9hZGRyX2NtcGAgdG8gY2hlY2sgdGhlIGZhbWlseSBmaXJzdCwgd2hpY2ggaXMgYSBnb29kIG9wdGltaXphdGlvbi4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiBob3cgYGluZXRfZ2V0cGVlcmAgaGFuZGxlcyBsb29rdXBzIGFuZCBpbnNlcnRpb24sIGxldmVyYWdpbmcgdGhpcyBuZXcgaGFzaCBmaWVsZC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24uIFRoZSBvdGhlciBtb2RpZmljYXRpb24sIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgLCBqdXN0IHNlZW1zIHRvIHJldHVybiBgZmFsc2VgIGlmIHRoZSBwZWVyIGlzIG51bGwsIHdoaWNoLCBob25lc3RseSwgc2VlbXMgbGlrZSBhIGJ1ZyBmaXgg4oCTIGJldHRlciBzYWZlIHRoYW4gc29ycnksIGFuZCBpdCBzaG91bGQgcHJldmVudCBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZS4KCkxldCYjMzk7cyBzZWXigKYgdGhleSYjMzk7dmUgYWxzbyB0b3VjaGVkIGBpbmV0cGVlcl9hZGRyX2hhc2hgLCBgaW5ldHBlZXJfZW50cnlfY21wYCwgYGluZXRfaW5pdHBlZXJzYCwgYW5kIHRoZSBgbG9va3VwYCBmdW5jdGlvbi4gU28gaXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgYWxsIHN0YXRpYyBvciBpbmxpbmUgaGVscGVyIGZ1bmN0aW9ucywgd2hpY2ggSSBuZWVkIHRvIGV4YW1pbmUgZm9yIHJlYWNoYWJpbGl0eS4KCk9rYXksIGxldCYjMzk7cyBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGNhbGxzIHRvIGBpbmV0X2dldHBlZXJgIGFuZCBgaW5ldF9wZWVyX3hybGltX2FsbG93YCB0byBnZXQgYSBzZW5zZSBvZiB0aGUgY29udGV4dCBhbmQgaW1wYWN0LiBUaG9zZSBhcmUgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucywgc28gdGhleSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0aGF0IEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfZ2V0cGVlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pbmV0cGVlci5oPTkzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGluNl9hZGRyICppbmV0cGVlcl9nZXRfYWRkcl92NihzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIpXG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC05OC0vKiBjYW4gYmUgY2FsbGVkIHdpdGggb3Igd2l0aG91dCBsb2NhbCBCSCBiZWluZyBkaXNhYmxlZCAqL1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDo5OTpzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDAtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcik7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwMS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTAyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTAzLVx0XHRcdFx0XHRcdF9fYmUzMiB2NGRhZGRyLFxuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTEwLVx0ZGFkZHIuZmFtaWx5ID0gQUZfSU5FVDtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTExOlx0cmV0dXJuIGluZXRfZ2V0cGVlcihiYXNlLCBcdTAwMjZkYWRkcik7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTExMi19XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTExMy1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTE0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y2KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTE1LVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdjZkYWRkcilcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEyMC1cdGRhZGRyLmZhbWlseSA9IEFGX0lORVQ2O1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMjE6XHRyZXR1cm4gaW5ldF9nZXRwZWVyKGJhc2UsIFx1MDAyNmRhZGRyKTtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTIyLX1cbi0tXG5uZXQvaXB2NC9pY21wLmM9MzExPXN0YXRpYyBib29sIGljbXB2NF94cmxpbV9hbGxvdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydGFibGUgKnJ0LFxuLS1cbm5ldC9pcHY0L2ljbXAuYy0zMzMtXG5uZXQvaXB2NC9pY21wLmM6MzM0Olx0cGVlciA9IGluZXRfZ2V0cGVlcl92NChuZXQtXHUwMDNlaXB2NC5wZWVycywgZmw0LVx1MDAzZWRhZGRyLFxubmV0L2lwdjQvaWNtcC5jLTMzNS1cdFx0XHQgICAgICAgbDNtZGV2X21hc3Rlcl9pZmluZGV4X3JjdShkZXYpKTtcbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jPTE2Mj1zdGF0aWMgdm9pZCBpbmV0X3BlZXJfZ2Moc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmMtMTk4LS8qIE11c3QgYmUgY2FsbGVkIHVuZGVyIFJDVSA6IE5vIHJlZmNvdW50IGNoYW5nZSBpcyBkb25lIGhlcmUuICovXG5uZXQvaXB2NC9pbmV0cGVlci5jOjE5OTpzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxubmV0L2lwdjQvaW5ldHBlZXIuYy0yMDAtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcilcbi0tXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jPTgzPXN0YXRpYyB2b2lkIGlwNF9mcmFnX2luaXQoc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqcSwgY29uc3Qgdm9pZCAqYSlcbi0tXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTkzLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jOjk0Olx0XHRwID0gaW5ldF9nZXRwZWVyX3Y0KG5ldC1cdTAwM2VpcHY0LnBlZXJzLCBrZXktXHUwMDNlc2FkZHIsIGtleS1cdTAwM2V2aWYpO1xubmV0L2lwdjQvaXBfZnJhZ21lbnQuYy05NS1cdFx0aWYgKHAgXHUwMDI2XHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2cC1cdTAwM2VyZWZjbnQpKVxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9OTAyPXZvaWQgaXBfcnRfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtOTIwLVx0bmV0ID0gZGV2X25ldChydC1cdTAwM2Vkc3QuZGV2KTtcbm5ldC9pcHY0L3JvdXRlLmM6OTIxOlx0cGVlciA9IGluZXRfZ2V0cGVlcl92NChuZXQtXHUwMDNlaXB2NC5wZWVycywgaXBfaGRyKHNrYiktXHUwMDNlc2FkZHIsIHZpZik7XG5uZXQvaXB2NC9yb3V0ZS5jLTkyMi1cdGlmICghcGVlcikge1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9OTY1PXN0YXRpYyBpbnQgaXBfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTEwMjItXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2NC9yb3V0ZS5jOjEwMjM6XHRwZWVyID0gaW5ldF9nZXRwZWVyX3Y0KG5ldC1cdTAwM2VpcHY0LnBlZXJzLCBpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbm5ldC9pcHY0L3JvdXRlLmMtMTAyNC1cdFx0XHQgICAgICAgbDNtZGV2X21hc3Rlcl9pZmluZGV4X3JjdShza2ItXHUwMDNlZGV2KSk7XG4tLVxubmV0L2lwdjYvaWNtcC5jPTE5NT1zdGF0aWMgYm9vbCBpY21wdjZfeHJsaW1fYWxsb3coc3RydWN0IHNvY2sgKnNrLCB1OCB0eXBlLFxuLS1cbm5ldC9pcHY2L2ljbXAuYy0yMjUtXHRcdH0gZWxzZSB7XG5uZXQvaXB2Ni9pY21wLmM6MjI2Olx0XHRcdHBlZXIgPSBpbmV0X2dldHBlZXJfdjYobmV0LVx1MDAzZWlwdjYucGVlcnMsIFx1MDAyNmZsNi1cdTAwM2VkYWRkcik7XG5uZXQvaXB2Ni9pY21wLmMtMjI3LVx0XHRcdHJlcyA9IGluZXRfcGVlcl94cmxpbV9hbGxvdyhwZWVyLCB0bW8pO1xuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz01MTk9aW50IGlwNl9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTYzOC1cdFx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jOjYzOTpcdFx0cGVlciA9IGluZXRfZ2V0cGVlcl92NihuZXQtXHUwMDNlaXB2Ni5wZWVycywgXHUwMDI2aGRyLVx1MDAzZWRhZGRyKTtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy02NDAtXG4tLVxubmV0L2lwdjYvbmRpc2MuYz0xNjU1PXZvaWQgbmRpc2Nfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnRhcmdldClcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTE3MDgtXG5uZXQvaXB2Ni9uZGlzYy5jOjE3MDk6XHRwZWVyID0gaW5ldF9nZXRwZWVyX3Y2KG5ldC1cdTAwM2VpcHY2LnBlZXJzLCBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyKTtcbm5ldC9pcHY2L25kaXNjLmMtMTcxMC1cdGlmICghcGVlcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzEzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgaW5ldF9nZXRwZWVyYCBQYXRjaCoqCgpPa2F5LCBzbyBgaW5ldF9nZXRwZWVyYC4uLiB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLiBJdCYjMzk7cyB1c2VkIGV2ZXJ5d2hlcmUg4oCTIElDTVAgcmF0ZSBsaW1pdGluZywgSVAgZnJhZ21lbnRhdGlvbiwgaGFuZGxpbmcgcm91dGluZyByZWRpcmVjdHMsIHRoZSB3aG9sZSBzaGViYW5nLiBEZWZpbml0ZWx5IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcsIGdpdmVuIGl0cyByZWFjaC4gQW5kIHRoZSBwYXRjaD8gSXQmIzM5O3MgY2hhbmdpbmcgYGluZXRfcGVlcl94cmxpbV9hbGxvd2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMuCgpXYWl0LCB0aGUgcGF0Y2ggaXMgbWFraW5nIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIHJldHVybiBgZmFsc2VgIGlmIHRoZSBgcGVlcmAgaXMgTlVMTC4gVGhhdCYjMzk7cy4uLiBpbnRlcmVzdGluZy4gQW5kIGRlZmluaXRlbHkgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBlc3BlY2lhbGx5IHdoZW4geW91IGNvbnNpZGVyIGl0IGhhcyBpbXBhY3Qgb24gdGhpbmdzIGxpa2UgSUNNUCByYXRlIGxpbWl0aW5nLiBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBmdXJ0aGVyLiBCZWZvcmUgaXQgcmV0dXJuZWQgYHRydWVgIGlmIGBwZWVyYCB3YXMgYE5VTExgLiBUaGF0IGNoYW5nZSB3YXJyYW50cyBzY3J1dGlueS4KCk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGBpbmV0X2dldHBlZXJgIGNhbiByZXR1cm4gTlVMTCBub3cgdW5kZXIgdGhlIG5ldyBsb2dpYywgc3BlY2lmaWNhbGx5IGlmIHRoZSBwZWVyIHRocmVzaG9sZCBpcyBleGNlZWRlZCwgdGhhdCYjMzk7cyB3aGF0IHRoYXQgY29kZSBpcyBpbXBseWluZy4KClRoZSBwYXRjaCBpdHNlbGYgc2F5czoKCmBgYGMKIAlnY19jbnQgPSAwOwotCXAgPSBsb29rdXAoZGFkZHIsIGJhc2UsIHNlcSwgZ2Nfc3RhY2ssICZhbXA7Z2NfY250LCAmYW1wO3BhcmVudCwgJmFtcDtwcCk7CiYjNDM7CXAgPSBsb29rdXAoZGFkZHIsIGRoYXNoLCBiYXNlLCBzZXEsIGdjX3N0YWNrLCAmYW1wO2djX2NudCwgJmFtcDtwYXJlbnQsICZhbXA7cHApOwogCWlmICghcCkgewotCQlwID0ga21lbV9jYWNoZV9hbGxvYyhwZWVyX2NhY2hlcCwgR0ZQX0FUT01JQyk7CiYjNDM7CQlpZiAoKHU2NCliYXNlLSZndDt0b3RhbCAmbHQ7IDJVTEwgKiBSRUFEX09OQ0UoaW5ldF9wZWVyX3RocmVzaG9sZCkpCiYjNDM7CQkJcCA9IGttZW1fY2FjaGVfYWxsb2MocGVlcl9jYWNoZXAsIEdGUF9BVE9NSUMpOwogCQlpZiAocCkgewpgYGAKClNvIGl0IGxvb2tzIGxpa2UgaWYgdGhlIHRocmVzaG9sZCBpcyBleGNlZWRlZCwgdGhlIGFsbG9jYXRpb24gaXMgc2tpcHBlZCBhbmQgTlVMTCBpcyByZXR1cm5lZCBmcm9tIGBpbmV0X2dldHBlZXJgLgoKUmlnaHQsIGFuZCBgaW5ldF9wZWVyX3hybGltX2FsbG93YCAqbm93KiByZXR1cm5zIGBmYWxzZWAgaWYgYHBlZXJgIGlzIE5VTEwuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIGNvbm5lY3Rpb24gaGVyZS4gSWYgdGhlIHBlZXIgdGhyZXNob2xkIGlzIGV4Y2VlZGVkLCBgaW5ldF9nZXRwZWVyYCByZXR1cm5zIE5VTEwsIGFuZCB0aGVuIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIHJldHVybnMgYGZhbHNlYCwgbWVhbmluZyB0aGUgcGFja2V0IGlzICpub3QgYWxsb3dlZCouIFRoaXMgbWVhbnMgaWYgdGhlIHRocmVzaG9sZCBpcyBleGNlZWRlZCwgSUNNUCByYXRlIGxpbWl0aW5nIHdpbGwgc3RhcnQgKmRyb3BwaW5nKiBwYWNrZXRzIGJlY2F1c2UgaXQmIzM5O3MgaW50ZXJwcmV0ZWQgYXMgJiMzNDtub3QgYWxsb3dlZCYjMzQ7LiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgYmVoYXZpb3IgY2hhbmdlLgoKTGV0JiMzOTtzIGNvbmZpcm0gaG93IGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfcGVlcl94cmxpbV9hbGxvdyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pbmV0cGVlci5oPTE0OT12b2lkIGluZXRfcHV0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyICpwKTtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTUwOmJvb2wgaW5ldF9wZWVyX3hybGltX2FsbG93KHN0cnVjdCBpbmV0X3BlZXIgKnBlZXIsIGludCB0aW1lb3V0KTtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTUxLVxuLS1cbm5ldC9pcHY0L2ljbXAuYz0zMTE9c3RhdGljIGJvb2wgaWNtcHY0X3hybGltX2FsbG93KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHJ0YWJsZSAqcnQsXG4tLVxubmV0L2lwdjQvaWNtcC5jLTMzNS1cdFx0XHQgICAgICAgbDNtZGV2X21hc3Rlcl9pZmluZGV4X3JjdShkZXYpKTtcbm5ldC9pcHY0L2ljbXAuYzozMzY6XHRyYyA9IGluZXRfcGVlcl94cmxpbV9hbGxvdyhwZWVyLCBwZWVyX3RpbWVvdXQpO1xubmV0L2lwdjQvaWNtcC5jLTMzNy1cbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jPTI1ND12b2lkIGluZXRfcHV0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyICpwKVxuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmMtMjc3LSNkZWZpbmUgWFJMSU1fQlVSU1RfRkFDVE9SIDZcbm5ldC9pcHY0L2luZXRwZWVyLmM6Mjc4OmJvb2wgaW5ldF9wZWVyX3hybGltX2FsbG93KHN0cnVjdCBpbmV0X3BlZXIgKnBlZXIsIGludCB0aW1lb3V0KVxubmV0L2lwdjQvaW5ldHBlZXIuYy0yNzkte1xuLS1cbm5ldC9pcHY2L2ljbXAuYz0xOTU9c3RhdGljIGJvb2wgaWNtcHY2X3hybGltX2FsbG93KHN0cnVjdCBzb2NrICpzaywgdTggdHlwZSxcbi0tXG5uZXQvaXB2Ni9pY21wLmMtMjI2LVx0XHRcdHBlZXIgPSBpbmV0X2dldHBlZXJfdjYobmV0LVx1MDAzZWlwdjYucGVlcnMsIFx1MDAyNmZsNi1cdTAwM2VkYWRkcik7XG5uZXQvaXB2Ni9pY21wLmM6MjI3Olx0XHRcdHJlcyA9IGluZXRfcGVlcl94cmxpbV9hbGxvdyhwZWVyLCB0bW8pO1xubmV0L2lwdjYvaWNtcC5jLTIyOC1cdFx0fVxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz01MTk9aW50IGlwNl9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTY0My1cdFx0ICovXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6NjQ0Olx0XHRpZiAocGVlciBcdTAwMjZcdTAwMjYgaW5ldF9wZWVyX3hybGltX2FsbG93KHBlZXIsIDEqSFopKVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTY0NS1cdFx0XHRuZGlzY19zZW5kX3JlZGlyZWN0KHNrYiwgdGFyZ2V0KTtcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTE2NTU9dm9pZCBuZGlzY19zZW5kX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdGFyZ2V0KVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTcxMS1cdFx0Z290byByZWxlYXNlO1xubmV0L2lwdjYvbmRpc2MuYzoxNzEyOlx0cmV0ID0gaW5ldF9wZWVyX3hybGltX2FsbG93KHBlZXIsIDEqSFopO1xubmV0L2lwdjYvbmRpc2MuYy0xNzEzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjQKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUmVjZW50IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSBrZXkgYXJlYXMsIHNwZWNpZmljYWxseSBgaW5ldF9nZXRwZWVyYCBhbmQgYGluZXRfcGVlcl94cmxpbV9hbGxvd2AuIEkgc2VlIGl0JiMzOTtzIGFsc28gYWRkZWQgYGluZXRwZWVyX2FkZHJfaGFzaGAgYW5kIGBpbmV0cGVlcl9lbnRyeV9jbXBgIHRvIGBuZXQvaXB2NC9pbmV0cGVlci5jYCwgYW5kIG1vZGlmaWVkIGBpbmV0cGVlcl9hZGRyX2NtcGAgaW4gYGluY2x1ZGUvbmV0L2luZXRwZWVyLmhgLiBObyBvYnZpb3VzIHJlZCBmbGFncyBmcm9tIGEgY3Vyc29yeSBnbGFuY2UsIHNvIGl0IGxvb2tzIGxpa2UgaXTigJlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIHdvcmsgYXMgaW50ZW5kZWQuCgpUaGUgZnVuY3Rpb25zIHRoYXQgKnJlYWxseSogbmVlZCBhIGNsb3NlciBsb29rLCB0aG91Z2gsIGFyZTogYGluZXRfZ2V0cGVlcmAsIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgLCB0aGVuIGFsc28gYGljbXB2NF94cmxpbV9hbGxvd2AsIGBpY21wdjZfeHJsaW1fYWxsb3dgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIG9uZXMgdG91Y2hpbmcgcm91dGluZywgbGlrZSBgaXA0X2ZyYWdfaW5pdGAsIGBpcF9ydF9zZW5kX3JlZGlyZWN0YCwgYGlwX2Vycm9yYCwgYGlwNl9mb3J3YXJkYCBhbmQgYG5kaXNjX3NlbmRfcmVkaXJlY3RgLgoKV2FpdCwgbGV0JiMzOTtzIHN0ZXAgYmFjayAtIGBpbmV0X2dldHBlZXJgIGlzIHRoZSBjZW50cmFsIGFjY2VzcyBwb2ludCBoZXJlLiBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24gZmlyc3QsIGVzcGVjaWFsbHkgdG8gc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG90aGVyIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBjb25kaXRpb25hbCBjb25maWdzIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSBiZWhhdmlvci4gTGV0IG1lIHNlZSwgYGluZXRwZWVyLmNgIGlzIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSBpbiBgbmV0L2lwdjQvTWFrZWZpbGVgPyBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LiBPa2F5LCB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBteSBkZWVwZXIgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0cGVlclxcLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGUtNS1cbm5ldC9pcHY0L01ha2VmaWxlOjY6b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS03LVx0ICAgICBpcF9pbnB1dC5vIGlwX2ZyYWdtZW50Lm8gaXBfZm9yd2FyZC5vIGlwX29wdGlvbnMubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMjgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgSVB2NCBQZWVyIEluZm9ybWF0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gYGluZXRwZWVyLm9gIGlzIGRlZmluaXRlbHkgY29tcGlsZWQgYXV0b21hdGljYWxseSBmb3IgSVB2NCDigJMgdGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gSVB2NCYjMzk7cyBkZXBlbmRlbmNlIG9uIGBDT05GSUdfSU5FVGAuIEkgbmVlZCB0byBkaWcgaW50byB0aGlzIGZ1cnRoZXIuCgpNeSBmb2N1cyBzaG91bGQgYmUgb24gaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBhbmQgdXRpbGl6ZXMgcGVlciBpbmZvcm1hdGlvbiwgc3BlY2lmaWNhbGx5IGZvciBJUHY0LiBJ4oCZbGwgc3RhcnQgYnkgZXhhbWluaW5nIGBpbmV0X2dldHBlZXJgIGFuZCBgaW5ldF9wZWVyX3hybGltX2FsbG93YCB3aXRoaW4gYEZvY3VzU3ltYm9sc2AuIEl0JiMzOTtzIGFsc28gd29ydGggbm90aW5nIHRoYXQgYGluZXRfaW5pdHBlZXJzYCBpcyBjYWxsZWQgZHVyaW5nIGtlcm5lbCBpbml0aWFsaXphdGlvbi4gVGhpcyB3b3VsZCBiZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgdGhlIHJldmVyc2UgZW5naW5lZXJpbmcgcHJvY2Vzcy4KCkFscmlnaHQsIGxldCYjMzk7cyBjb25zb2xpZGF0ZSB0aGVzZSBmaW5kaW5ncy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGluZGljYXRlcyB0aGF0IHRoZXNlIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBmbGFnIHRoZXNlIHdpdGggYFdvcnRoRnV6emluZzogdHJ1ZWAuIE15IGBGb2N1c1N5bWJvbHNgIGxpc3QgaW5jbHVkZXM6IGBpbmV0X2dldHBlZXJgLCBgaW5ldF9wZWVyX3hybGltX2FsbG93YCwgYGljbXB2NF94cmxpbV9hbGxvd2AsIGFuZCBgaWNtcHY2X3hybGltX2FsbG93YC4KCkkmIzM5O2xsIGFsc28ga2VlcCBpbiBtaW5kIHRoYXQgSSYjMzk7bGwgbmVlZCBgSU5FVGAgYW5kIGBJUFY2YCBlbmFibGVkIGZvciBhbnkgdGVzdGluZyB0byBiZSByZWxldmFudC4KCldhaXQsIGxvb2tpbmcgYXQgYGljbXB2NF94cmxpbV9hbGxvd2AgYWdhaW4sIEkgcmVhbGl6ZSBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gUHJvYmFibHkgbm90IHRoZSAqYmVzdCogc3ltYm9sIHRvIGNhbGwgb3V0LCBidXQgaXTigJlzIGZpbmUgZm9yIG5vdywgYW5kIGl0IG1heSBzdGlsbCBvZmZlciBzb21lIHZhbHVlLiBJIGtub3cgYGluZXRfZ2V0cGVlcmAgYW5kIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIGFyZSBleHBvcnRlZC9nbG9iYWwsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIHNpZ25hdHVyZXMgb2YgYGluZXRfZ2V0cGVlcmAgYW5kIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgaW5wdXRzIGFuZCBvdXRwdXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaW5ldF9wZWVyIFxcKmluZXRfZ2V0cGVlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pbmV0cGVlci5oPTkzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGluNl9hZGRyICppbmV0cGVlcl9nZXRfYWRkcl92NihzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIpXG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC05OC0vKiBjYW4gYmUgY2FsbGVkIHdpdGggb3Igd2l0aG91dCBsb2NhbCBCSCBiZWluZyBkaXNhYmxlZCAqL1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDo5OTpzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDAtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcik7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwMS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTAyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTAzLVx0XHRcdFx0XHRcdF9fYmUzMiB2NGRhZGRyLFxuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTEzLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjYoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMTUtXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICp2NmRhZGRyKVxuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmM9MTYyPXN0YXRpYyB2b2lkIGluZXRfcGVlcl9nYyhzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4tLVxubmV0L2lwdjQvaW5ldHBlZXIuYy0xOTgtLyogTXVzdCBiZSBjYWxsZWQgdW5kZXIgUkNVIDogTm8gcmVmY291bnQgY2hhbmdlIGlzIGRvbmUgaGVyZS4gKi9cbm5ldC9pcHY0L2luZXRwZWVyLmM6MTk5OnN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG5uZXQvaXB2NC9pbmV0cGVlci5jLTIwMC1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDY2CgkJCQkJCQlvdXRwdXQ6IDE0OAoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgaW5ldF9wZWVyYCBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyB3ZSBoYW5kbGUgdGhlIGBpbmV0X3BlZXJgIHN0cnVjdHVyZXMsIHNwZWNpZmljYWxseSB0aGUgbG9va3VwIG1lY2hhbmlzbS4gVGhlIGtleSBmdW5jdGlvbnMgaW1wYWN0ZWQgYXBwZWFyIHRvIGJlIGBpbmV0X2dldHBlZXJgIGFuZCBgaW5ldF9wZWVyX3hybGltX2FsbG93YC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRvIGluY2x1ZGUgdGhvc2UgaW4gbXkgYW5hbHlzaXMuIEkgc2hvdWxkIGFsc28gY2hlY2sgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGZ1bmN0aW9ucy4KCkFoLCByaWdodCwgYGluZXRfZ2V0cGVlcl92NGAgYW5kIGBpbmV0X2dldHBlZXJfdjZgIGFyZSBpbmxpbmVkOyB0aGV5IGFyZSBub3QgZnVuY3Rpb25zIG9mIHRoZWlyIG93bi4gQW5kIHNvbWUgYXJlIHN0YXRpYywgbGlrZSBgbG9va3VwYCwgYGluZXRwZWVyX2FkZHJfaGFzaGAsIGFuZCBgaW5ldHBlZXJfZW50cnlfY21wYC4gVGhleSB3b24mIzM5O3QgYmUgZXhwb3NlZCBmb3IgbW9kaWZpY2F0aW9uLgoKU28sIGBpbmV0X2dldHBlZXJgIGFuZCBgaW5ldF9wZWVyX3hybGltX2FsbG93YCBhcmUgdGhlIGNyaXRpY2FsIG9uZXMgdG8gZm9jdXMgb24gaGVyZS4KClRoZSByZWFsIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhlIHN3aXRjaCB0byBhIGhhc2gtYmFzZWQgbG9va3VwIHVzaW5nIGBzaXBoYXNoYCBmb3IgdGhlIGBpbmV0X3BlZXJgIHN0cnVjdHVyZXMuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBzaGlmdCBmcm9tIHdoYXRldmVyIHRoZSBwcmV2aW91cyBtZXRob2Qgd2FzLiBUaGlzIGlzIGdvaW5nIHRvIGltcGFjdCBob3cgbmV3IHBlZXJzIGFyZSBhZGRlZCBhbmQgaG93IGV4aXN0aW5nIHBlZXJzIGFyZSBsb29rZWQgdXAsIHdoaWNoIGlzIGZ1bmRhbWVudGFsIHRvIElQdjQvSVB2NiBuZXR3b3JraW5nIGxvZ2ljLCBlc3BlY2lhbGx5IHdpdGggSUNNUCByYXRlIGxpbWl0aW5nIGFuZCBJUCBmcmFnbWVudGF0aW9uLiBUaGUgY2hhbmdlIHRvIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIHJldHVybmluZyBgZmFsc2VgIHdoZW4gYHBlZXJgIGlzIGBOVUxMYCBpcyBhbHNvIG5vdGV3b3J0aHkgYmVjYXVzZSBpdCBzdWdnZXN0cyBhIHNwZWNpZmljIGhhbmRsaW5nIG9mIHRoZSBwZWVyIG5vdCBiZWluZyBmb3VuZCwgd2hpY2ggY291bGQgaGF2ZSBrbm9jay1vbiBlZmZlY3RzLiBGdXJ0aGVybW9yZSwgdGhlIGludHJvZHVjdGlvbiBvZiBhIHRocmVzaG9sZCBmb3IgcGVlciBhbGxvY2F0aW9uIHZpYSBgaW5ldF9wZWVyX3RocmVzaG9sZGAgbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLgoKTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgc2VlIHdoYXQgdGhlIGRvd25zdHJlYW0gaW1wYWN0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5ldF9nZXRwZWVyJiMzNDssCiAgICAmIzM0O2luZXRfcGVlcl94cmxpbV9hbGxvdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGFzaC1iYXNlZCBsb29rdXAgZm9yIGluZXRfcGVlciBzdHJ1Y3R1cmVzLCBtb2RpZnlpbmcgaW5ldF9nZXRwZWVyIHRvIHVzZSBzaXBoYXNoIGZvciB0cmVlIGluc2VydGlvbiBhbmQgbG9va3VwLiBJdCBhbHNvIGNoYW5nZXMgaW5ldF9wZWVyX3hybGltX2FsbG93IHRvIHJldHVybiBmYWxzZSB3aGVuIHBlZXIgaXMgTlVMTCwgYW5kIGxpbWl0cyB0aGUgYWxsb2NhdGlvbiBvZiBuZXcgcGVlcnMgYmFzZWQgb24gaW5ldF9wZWVyX3RocmVzaG9sZC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBJUHY0L0lQdjYgbmV0d29ya2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IElDTVAgcmF0ZSBsaW1pdGluZyBhbmQgSVAgZnJhZ21lbnRhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5ldF9nZXRwZWVyJiMzNDssCiAgICAmIzM0O2luZXRfcGVlcl94cmxpbV9hbGxvdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGFzaC1iYXNlZCBsb29rdXAgZm9yIGluZXRfcGVlciBzdHJ1Y3R1cmVzLCBtb2RpZnlpbmcgaW5ldF9nZXRwZWVyIHRvIHVzZSBzaXBoYXNoIGZvciB0cmVlIGluc2VydGlvbiBhbmQgbG9va3VwLiBJdCBhbHNvIGNoYW5nZXMgaW5ldF9wZWVyX3hybGltX2FsbG93IHRvIHJldHVybiBmYWxzZSB3aGVuIHBlZXIgaXMgTlVMTCwgYW5kIGxpbWl0cyB0aGUgYWxsb2NhdGlvbiBvZiBuZXcgcGVlcnMgYmFzZWQgb24gaW5ldF9wZWVyX3RocmVzaG9sZC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBJUHY0L0lQdjYgbmV0d29ya2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IElDTVAgcmF0ZSBsaW1pdGluZyBhbmQgSVAgZnJhZ21lbnRhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgYGluZXRfcGVlcmAgdHJhY2tpbmcgbWVjaGFuaXNtIGJ5IGFkZGluZyBhIGhhc2ggZmllbGQgdG8gb3B0aW1pemUgcmVkLWJsYWNrIHRyZWUgbG9va3VwcyBhbmQgZml4aW5nIGEgY29tcGFyaXNvbiBidWcgYmV0d2VlbiBJUHY0IGFuZCBJUHY2IGFkZHJlc3Nlcy4gVGhlIG5ldyBoYXNoIGZ1bmN0aW9uIChgaW5ldHBlZXJfYWRkcl9oYXNoYCkgYW5kIHRoZSBtb2RpZmllZCBjb21wYXJpc29uIGZ1bmN0aW9uIChgaW5ldHBlZXJfZW50cnlfY21wYCkgZXhwbGljaXRseSBvbmx5IHJlYWQgdGhlIGluaXRpYWxpemVkIGZpZWxkcyBvZiB0aGUgYGluZXRwZWVyX2FkZHJgIHVuaW9uIChgYTQuYWRkcmAgYW5kIGBhNC52aWZgIGZvciBJUHY0LCBhbmQgYGE2LnM2X2FkZHIzMmAgZm9yIElQdjYpLiBXaGlsZSB0aGUgYGluZXRwZWVyX2FkZHJgIHVuaW9uIGNvbnRhaW5zIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBmb3IgSVB2NCBhZGRyZXNzZXMsIHRoaXMgcGFkZGluZyBpcyBuZXZlciByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBgaW5ldF9wZWVyYCBzdHJ1Y3R1cmUgaXMgcHVyZWx5IGFuIGludGVybmFsIGtlcm5lbCB0cmFja2luZyBzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFjZjdmNDAwMjEzZTExMTFlODZmYTI0NDVmNjFmYTc2NDc0NDg1MjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAyMTozMzowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmggYi9pbmNsdWRlL25ldC9pbmV0cGVlci5oCmluZGV4IGY0NzU3NTdkYWFmYmEuLjQxNGU5YWRmNGM1MTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaApAQCAtMzUsNiAmIzQzOzM1LDcgQEAgc3RydWN0IGluZXRwZWVyX2FkZHIgewogCiBzdHJ1Y3QgaW5ldF9wZWVyIHsKIAlzdHJ1Y3QgcmJfbm9kZQkJcmJfbm9kZTsKJiM0MzsJdTY0CQkJaGFzaDsKIAlzdHJ1Y3QgaW5ldHBlZXJfYWRkcglkYWRkcjsKIAogCXUzMgkJCW1ldHJpY3NbUlRBWF9NQVhdOwpAQCAtMTI1LDYgJiM0MzsxMjYsOSBAQCBzdGF0aWMgaW5saW5lIGludCBpbmV0cGVlcl9hZGRyX2NtcChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSwKIHsKIAlpbnQgaSwgbjsKIAomIzQzOwlpZiAoYS0mZ3Q7ZmFtaWx5ICE9IGItJmd0O2ZhbWlseSkKJiM0MzsJCXJldHVybiBhLSZndDtmYW1pbHkgJmx0OyBiLSZndDtmYW1pbHkgPyAtMSA6IDE7CiYjNDM7CiAJaWYgKGEtJmd0O2ZhbWlseSA9PSBBRl9JTkVUKQogCQluID0gc2l6ZW9mKGEtJmd0O2E0KSAvIHNpemVvZih1MzIpOwogCWVsc2UKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRwZWVyLmMgYi9uZXQvaXB2NC9pbmV0cGVlci5jCmluZGV4IDViOTU3YTgzMWU3YzMuLjk2ODcxZjUyMDEwZjMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRwZWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaW5ldHBlZXIuYwpAQCAtMjEsNiAmIzQzOzIxLDcgQEAKICNpbmNsdWRlICZsdDtuZXQvaXAuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaW5ldHBlZXIuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvc2VjdXJlX3NlcS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXBoYXNoLmgmZ3Q7CiAKIC8qCiAgKiAgVGhlb3J5IG9mIG9wZXJhdGlvbnMuCkBAIC01Miw2ICYjNDM7NTMsMzIgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBlZXJfY2FjaGVwIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MztzdGF0aWMgc2lwaGFzaF9hbGlnbmVkX2tleV90IGluZXRwZWVyX2hhc2hfa2V5IF9fcmVhZF9tb3N0bHk7CiYjNDM7CiYjNDM7c3RhdGljIHU2NCBpbmV0cGVlcl9hZGRyX2hhc2goY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmEpCiYjNDM7ewomIzQzOwlpZiAoYS0mZ3Q7ZmFtaWx5ID09IEFGX0lORVQpCiYjNDM7CQlyZXR1cm4gc2lwaGFzaF8ydTMyKChfX2ZvcmNlIHUzMilhLSZndDthNC5hZGRyLCBhLSZndDthNC52aWYsCiYjNDM7CQkJCSAgICAmYW1wO2luZXRwZWVyX2hhc2hfa2V5KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNpcGhhc2hfNHUzMigoX19mb3JjZSB1MzIpYS0mZ3Q7YTYuczZfYWRkcjMyWzBdLAomIzQzOwkJCSAgICAoX19mb3JjZSB1MzIpYS0mZ3Q7YTYuczZfYWRkcjMyWzFdLAomIzQzOwkJCSAgICAoX19mb3JjZSB1MzIpYS0mZ3Q7YTYuczZfYWRkcjMyWzJdLAomIzQzOwkJCSAgICAoX19mb3JjZSB1MzIpYS0mZ3Q7YTYuczZfYWRkcjMyWzNdLAomIzQzOwkJCSAgICAmYW1wO2luZXRwZWVyX2hhc2hfa2V5KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpbmV0cGVlcl9lbnRyeV9jbXAodTY0IGRoYXNoLAomIzQzOwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkciwKJiM0MzsJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW5ldF9wZWVyICpwKQomIzQzO3sKJiM0MzsJaWYgKGRoYXNoICZsdDsgcC0mZ3Q7aGFzaCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKGRoYXNoICZndDsgcC0mZ3Q7aGFzaCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwlyZXR1cm4gaW5ldHBlZXJfYWRkcl9jbXAoZGFkZHIsICZhbXA7cC0mZ3Q7ZGFkZHIpOwomIzQzO30KIAogdm9pZCBpbmV0X3BlZXJfYmFzZV9pbml0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYnApCiB7CkBAIC03Myw2ICYjNDM7MTAwLDggQEAgdm9pZCBfX2luaXQgaW5ldF9pbml0cGVlcnModm9pZCkKIHsKIAl1NjQgbnJfZW50cmllczsKIAomIzQzOwlnZXRfcmFuZG9tX2J5dGVzKCZhbXA7aW5ldHBlZXJfaGFzaF9rZXksIHNpemVvZihpbmV0cGVlcl9oYXNoX2tleSkpOwomIzQzOwogCSAvKiAxJSBvZiBwaHlzaWNhbCBtZW1vcnkgKi8KIAlucl9lbnRyaWVzID0gZGl2NjRfdWwoKHU2NCl0b3RhbHJhbV9wYWdlcygpICZsdDsmbHQ7IFBBR0VfU0hJRlQsCiAJCQkgICAgICAxMDAgKiBMMV9DQUNIRV9BTElHTihzaXplb2Yoc3RydWN0IGluZXRfcGVlcikpKTsKQEAgLTg0LDYgJiM0MzsxMTMsNyBAQCB2b2lkIF9faW5pdCBpbmV0X2luaXRwZWVycyh2b2lkKQogCiAvKiBDYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgb3IgYmFzZS0mZ3Q7bG9jayBoZWxkICovCiBzdGF0aWMgc3RydWN0IGluZXRfcGVlciAqbG9va3VwKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkciwKJiM0MzsJCQkJdTY0IGRoYXNoLAogCQkJCXN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSwKIAkJCQl1bnNpZ25lZCBpbnQgc2VxLAogCQkJCXN0cnVjdCBpbmV0X3BlZXIgKmdjX3N0YWNrW10sCkBAIC0xMDUsNyAmIzQzOzEzNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5ldF9wZWVyICpsb29rdXAoY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLAogCQkJYnJlYWs7CiAJCXBhcmVudCA9IG5leHQ7CiAJCXAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBpbmV0X3BlZXIsIHJiX25vZGUpOwotCQljbXAgPSBpbmV0cGVlcl9hZGRyX2NtcChkYWRkciwgJmFtcDtwLSZndDtkYWRkcik7CiYjNDM7CQljbXAgPSBpbmV0cGVlcl9lbnRyeV9jbXAoZGhhc2gsIGRhZGRyLCBwKTsKIAkJaWYgKGNtcCA9PSAwKSB7CiAJCQlub3cgPSBqaWZmaWVzOwogCQkJaWYgKFJFQURfT05DRShwLSZndDtkdGltZSkgIT0gbm93KQpAQCAtMTcwLDYgJiM0MzsyMDAsNyBAQCBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcikKIHsKIAlzdHJ1Y3QgaW5ldF9wZWVyICpwLCAqZ2Nfc3RhY2tbUEVFUl9NQVhfR0NdOwomIzQzOwl1NjQgZGhhc2ggPSBpbmV0cGVlcl9hZGRyX2hhc2goZGFkZHIpOwogCXN0cnVjdCByYl9ub2RlICoqcHAsICpwYXJlbnQ7CiAJdW5zaWduZWQgaW50IGdjX2NudCwgc2VxOwogCkBAIC0xNzcsNyAmIzQzOzIwOCw3IEBAIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsCiAJICogQmVjYXVzZSBvZiBhIGNvbmN1cnJlbnQgd3JpdGVyLCB3ZSBtaWdodCBub3QgZmluZCBhbiBleGlzdGluZyBlbnRyeS4KIAkgKi8KIAlzZXEgPSByZWFkX3NlcWJlZ2luKCZhbXA7YmFzZS0mZ3Q7bG9jayk7Ci0JcCA9IGxvb2t1cChkYWRkciwgYmFzZSwgc2VxLCBOVUxMLCAmYW1wO2djX2NudCwgJmFtcDtwYXJlbnQsICZhbXA7cHApOwomIzQzOwlwID0gbG9va3VwKGRhZGRyLCBkaGFzaCwgYmFzZSwgc2VxLCBOVUxMLCAmYW1wO2djX2NudCwgJmFtcDtwYXJlbnQsICZhbXA7cHApOwogCiAJLyogTWFrZSBzdXJlIHRyZWUgd2FzIG5vdCBtb2RpZmllZCBkdXJpbmcgb3VyIGxvb2t1cC4gKi8KIAlpZiAocCAmYW1wOyZhbXA7ICFyZWFkX3NlcXJldHJ5KCZhbXA7YmFzZS0mZ3Q7bG9jaywgc2VxKSkKQEAgLTE5MCwxMSAmIzQzOzIyMSwxMyBAQCBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLAogCXdyaXRlX3NlcWxvY2tfYmgoJmFtcDtiYXNlLSZndDtsb2NrKTsKIAogCWdjX2NudCA9IDA7Ci0JcCA9IGxvb2t1cChkYWRkciwgYmFzZSwgc2VxLCBnY19zdGFjaywgJmFtcDtnY19jbnQsICZhbXA7cGFyZW50LCAmYW1wO3BwKTsKJiM0MzsJcCA9IGxvb2t1cChkYWRkciwgZGhhc2gsIGJhc2UsIHNlcSwgZ2Nfc3RhY2ssICZhbXA7Z2NfY250LCAmYW1wO3BhcmVudCwgJmFtcDtwcCk7CiAJaWYgKCFwKSB7Ci0JCXAgPSBrbWVtX2NhY2hlX2FsbG9jKHBlZXJfY2FjaGVwLCBHRlBfQVRPTUlDKTsKJiM0MzsJCWlmICgodTY0KWJhc2UtJmd0O3RvdGFsICZsdDsgMlVMTCAqIFJFQURfT05DRShpbmV0X3BlZXJfdGhyZXNob2xkKSkKJiM0MzsJCQlwID0ga21lbV9jYWNoZV9hbGxvYyhwZWVyX2NhY2hlcCwgR0ZQX0FUT01JQyk7CiAJCWlmIChwKSB7CiAJCQlwLSZndDtkYWRkciA9ICpkYWRkcjsKJiM0MzsJCQlwLSZndDtoYXNoID0gZGhhc2g7CiAJCQlwLSZndDtkdGltZSA9IChfX3UzMilqaWZmaWVzOwogCQkJcmVmY291bnRfc2V0KCZhbXA7cC0mZ3Q7cmVmY250LCAxKTsKIAkJCWF0b21pY19zZXQoJmFtcDtwLSZndDtyaWQsIDApOwpAQCAtMjQ4LDcgJiM0MzsyODEsNyBAQCBib29sIGluZXRfcGVlcl94cmxpbV9hbGxvdyhzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyLCBpbnQgdGltZW91dCkKIAlib29sIHJjID0gZmFsc2U7CiAKIAlpZiAoIXBlZXIpCi0JCXJldHVybiB0cnVlOwomIzQzOwkJcmV0dXJuIGZhbHNlOwogCiAJdG9rZW4gPSBvdG9rZW4gPSBSRUFEX09OQ0UocGVlci0mZ3Q7cmF0ZV90b2tlbnMpOwogCW5vdyA9IGppZmZpZXM7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjI3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhlIEluZXRwZWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYGluZXRwZWVyLmNgIGFuZCBgaW5ldHBlZXIuaGAuIEl0IHNlZW1zIHRoZXkmIzM5O3JlIGFkZGluZyBhIGBoYXNoYCBmaWVsZCB0byB0aGUgYHN0cnVjdCBpbmV0X3BlZXJgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBhIGBpbmV0cGVlcl9hZGRyX2hhc2goKWAgZnVuY3Rpb24gZm9yIGhhc2hpbmcgdGhlIGBkYWRkcmAgZmllbGQsIHdoaWNoIGlzIGEgYHN0cnVjdCBpbmV0cGVlcl9hZGRyYC4gU21hcnQgbW92ZSB0byB1c2UgYHNpcGhhc2hfMnUzMmAgYW5kIGBzaXBoYXNoXzR1MzJgIGZvciBJUHY0IGFuZCBJUHY2IHJlc3BlY3RpdmVseSDigJMgdGhhdCYjMzk7cyBhIGdvb2QgY2hvaWNlIGZvciBjcnlwdG9ncmFwaGljIGhhc2hpbmcuCgpSaWdodCwgc28gYHN0cnVjdCBpbmV0cGVlcl9hZGRyYCBpcyBkZWZpbmVkIGluIHRoZSBoZWFkZXIsIGxldCBtZSBwdWxsIHRoYXQgdXAgcXVpY2tseS4uLiBva2F5LCBoZXJlIGl0IGlzOgoKYGBgYwpzdHJ1Y3QgaW5ldHBlZXJfYWRkciB7CiAgICB1bmlvbiB7CiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgX19iZTMyIGFkZHI7CiAgICAgICAgICAgIF9fdTMyIHZpZjsKICAgICAgICB9IGE0OwogICAgICAgIHN0cnVjdCBpbjZfYWRkciBhNjsKICAgIH07CiAgICBfX3UxNiBmYW1pbHk7Cn07CmBgYAoKV2FpdCBhIHNlY29uZC4uLiBgaW5ldHBlZXJfYWRkcl9oYXNoYCBoYXNoZXMgYGE0LmFkZHJgIGFuZCBgYTQudmlmYCBmb3IgSVB2NCwgYW5kIHRoZW4gYGE2LnM2X2FkZHIzMmAgZm9yIElQdjYsIHJpZ2h0PyBCdXQgdGhlIGBmYW1pbHlgIGZpZWxkIGlzICpub3QqIGluY2x1ZGVkIGluIHRoZSBoYXNoIGNvbXB1dGF0aW9uISBJdCYjMzk7cyBqdXN0IHVzZWQgZm9yIGJyYW5jaGluZy4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBpc3N1ZS4gV2hhdCBpZiB0d28gZGlmZmVyZW50IGBpbmV0cGVlcl9hZGRyYCBpbnN0YW5jZXMgaGFwcGVuIHRvIHByb2R1Y2UgdGhlIHNhbWUgaGFzaCB2YWx1ZSBldmVuIHRob3VnaCB0aGVpciBgZmFtaWx5YCBpcyBkaWZmZXJlbnQ/CgpPa2F5LCBhbmQgc29tZXRoaW5nIGVsc2UgaXMgbmFnZ2luZyBhdCBtZS4gSXQmIzM5O3MgdGhlIGB2aWZgIGZpZWxkIOKAkyBpbiBJUHY0LiBJcyB0aGF0IGFsd2F5cyBpbml0aWFsaXplZD8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgc3RydWN0IGluZXRwZWVyX2FkZHJgIGlzIGFjdHVhbGx5ICppbml0aWFsaXplZCouIElmIGB2aWZgIGlzbiYjMzk7dCBmdWxseSBzZXQsIHRoZW4gd2UgY291bGQgYmUgaGFzaGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCBjb3VsZCBsZWFkIHRvIGFsbCBzb3J0cyBvZiBwcm9ibGVtcy4KCk5vdyB3aGVyZSBpcyBgdmlmYCBiZWluZyB1c2VkPyBJIHNlZW0gdG8gcmVjYWxsIHRoYXQmIzM5O3MgcmVsYXRlZCB0byBWUkYgb3IgTDMgZG9tYWlucy4uLiBPa2F5LCB0aW1lIHRvIGdvIHNlYXJjaGluZyBmb3IgaG93IGBzdHJ1Y3QgaW5ldHBlZXJfYWRkcmAgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgaW4gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBpbmV0cGVlcl9hZGRyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2luZXRwZWVyLmg9MjA9c3RydWN0IGlwdjRfYWRkcl9rZXkge1xuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMjYtXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjI3OnN0cnVjdCBpbmV0cGVlcl9hZGRyIHtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMjgtXHR1bmlvbiB7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0zNj1zdHJ1Y3QgaW5ldF9wZWVyIHtcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTM4LVx0dTY0XHRcdFx0aGFzaDtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6Mzk6XHRzdHJ1Y3QgaW5ldHBlZXJfYWRkclx0ZGFkZHI7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTQwLVxuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg9NzA9dm9pZCBpbmV0X2luaXRwZWVycyh2b2lkKSBfX2luaXQ7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC03My1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6NzQ6c3RhdGljIGlubGluZSB2b2lkIGluZXRwZWVyX3NldF9hZGRyX3Y0KHN0cnVjdCBpbmV0cGVlcl9hZGRyICppYWRkciwgX19iZTMyIGlwKVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC03NS17XG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC04MC1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6ODE6c3RhdGljIGlubGluZSBfX2JlMzIgaW5ldHBlZXJfZ2V0X2FkZHJfdjQoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyKVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC04Mi17XG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC04NS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6ODY6c3RhdGljIGlubGluZSB2b2lkIGluZXRwZWVyX3NldF9hZGRyX3Y2KHN0cnVjdCBpbmV0cGVlcl9hZGRyICppYWRkcixcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtODctXHRcdFx0XHRcdHN0cnVjdCBpbjZfYWRkciAqaW42KVxuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtOTItXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjkzOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluNl9hZGRyICppbmV0cGVlcl9nZXRfYWRkcl92NihzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIpXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTk0LXtcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oPTk5PXN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjEwMDpcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyKTtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTAxLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0xMDI9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjQoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTA1LXtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTA2Olx0c3RydWN0IGluZXRwZWVyX2FkZHIgZGFkZHI7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwNy1cbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oPTExND1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMTYte1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMTc6XHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBkYWRkcjtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTE4LVxuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTIzLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMjQ6c3RhdGljIGlubGluZSBpbnQgaW5ldHBlZXJfYWRkcl9jbXAoY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmEsXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjEyNTpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYilcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTI2LXtcbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jPTU2PXN0YXRpYyBzaXBoYXNoX2FsaWduZWRfa2V5X3QgaW5ldHBlZXJfaGFzaF9rZXkgX19yZWFkX21vc3RseTtcbm5ldC9pcHY0L2luZXRwZWVyLmMtNTctXG5uZXQvaXB2NC9pbmV0cGVlci5jOjU4OnN0YXRpYyB1NjQgaW5ldHBlZXJfYWRkcl9oYXNoKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphKVxubmV0L2lwdjQvaW5ldHBlZXIuYy01OS17XG4tLVxubmV0L2lwdjQvaW5ldHBlZXIuYz03MT1zdGF0aWMgaW50IGluZXRwZWVyX2VudHJ5X2NtcCh1NjQgZGhhc2gsXG5uZXQvaXB2NC9pbmV0cGVlci5jOjcyOlx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcbm5ldC9pcHY0L2luZXRwZWVyLmMtNzMtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRfcGVlciAqcClcbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jPTk5PXZvaWQgX19pbml0IGluZXRfaW5pdHBlZXJzKHZvaWQpXG4tLVxubmV0L2lwdjQvaW5ldHBlZXIuYy0xMTQtLyogQ2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpIG9yIGJhc2UtXHUwMDNlbG9jayBoZWxkICovXG5uZXQvaXB2NC9pbmV0cGVlci5jOjExNTpzdGF0aWMgc3RydWN0IGluZXRfcGVlciAqbG9va3VwKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcbm5ldC9pcHY0L2luZXRwZWVyLmMtMTE2LVx0XHRcdFx0dTY0IGRoYXNoLFxuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmM9MTk5PXN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG5uZXQvaXB2NC9pbmV0cGVlci5jOjIwMDpcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyKVxubmV0L2lwdjQvaW5ldHBlZXIuYy0yMDEte1xuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjMtXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI0OnN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKl9fdGNwX2dldF9tZXRyaWNzKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpzYWRkcixcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MjU6XHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yNi1cdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBoYXNoKTtcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTQxPXN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayB7XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy00My1cdHN0cnVjdCBuZXRcdFx0XHQqdGNwbV9uZXQ7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjQ0Olx0c3RydWN0IGluZXRwZWVyX2FkZHJcdFx0dGNwbV9zYWRkcjtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6NDU6XHRzdHJ1Y3QgaW5ldHBlZXJfYWRkclx0XHR0Y3BtX2RhZGRyO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYy00Ni1cdHVuc2lnbmVkIGxvbmdcdFx0XHR0Y3BtX3N0YW1wO1xuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9NzQ9c3RhdGljIHZvaWQgdGNwX21ldHJpY19zZXQoc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0bSxcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgxLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo4MjpzdGF0aWMgYm9vbCBhZGRyX3NhbWUoY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmEsXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjgzOlx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYilcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODQte1xuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9MTYzPXN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRjcG1fbmV3KHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MTY0Olx0XHRcdFx0XHQgIHN0cnVjdCBpbmV0cGVlcl9hZGRyICpzYWRkcixcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MTY1Olx0XHRcdFx0XHQgIHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMTY2LVx0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBoYXNoKVxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9MjIyPXN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRjcF9nZXRfZW5jb2RlKHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG0sIGludCBkZXB0aClcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTIzMC1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MjMxOnN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKl9fdGNwX2dldF9tZXRyaWNzKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpzYWRkcixcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MjMyOlx0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjMzLVx0XHRcdFx0XHRcdCAgIHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGhhc2gpXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz0yNDk9c3RhdGljIHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqX190Y3BfZ2V0X21ldHJpY3NfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI1Mi1cdHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG07XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI1MzpcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjU0LVx0dW5zaWduZWQgaW50IGhhc2g7XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz0yOTE9c3RhdGljIHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdGNwX2dldF9tZXRyaWNzKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI5NS1cdHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG07XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI5NjpcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjk3LVx0dW5zaWduZWQgaW50IGhhc2g7XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz03Njc9c3RhdGljIGludCB0Y3BfbWV0cmljc19ubF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MDEtXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjgwMjpzdGF0aWMgaW50IF9fcGFyc2VfbmxfYWRkcihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYWRkcixcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODAzLVx0XHRcdCAgIHVuc2lnbmVkIGludCAqaGFzaCwgaW50IG9wdGlvbmFsLCBpbnQgdjQsIGludCB2Nilcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgyNi1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODI3OnN0YXRpYyBpbnQgcGFyc2VfbmxfYWRkcihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYWRkcixcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODI4LVx0XHRcdCB1bnNpZ25lZCBpbnQgKmhhc2gsIGludCBvcHRpb25hbClcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgzNC1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODM1OnN0YXRpYyBpbnQgcGFyc2Vfbmxfc2FkZHIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGluZXRwZWVyX2FkZHIgKmFkZHIpXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgzNi17XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz04NDI9c3RhdGljIGludCB0Y3BfbWV0cmljc19ubF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04NDQtXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo4NDU6XHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBzYWRkciwgZGFkZHI7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTg0Ni1cdHVuc2lnbmVkIGludCBoYXNoO1xuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9OTI4PXN0YXRpYyBpbnQgdGNwX21ldHJpY3NfbmxfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtOTMyLVx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrIF9fcmN1ICoqcHA7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjkzMzpcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtOTM0LVx0dW5zaWduZWQgaW50IGhhc2g7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNTIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9uczoKCioqRGlnZ2luZyBpbnRvIEluZXRwZWVyJiMzOTtzIElQdjQgSGFuZGxpbmcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBpbmV0cGVlcmAgaXMgbWFuYWdpbmcgSVB2NCBhZGRyZXNzZXMuIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCBpbnRvIGBpbmNsdWRlL25ldC9pbmV0cGVlci5oYCB0byBzZWUgaG93IGBpbmV0cGVlcl9nZXRfYWRkcl92NGAgYW5kIGBpbmV0cGVlcl9zZXRfYWRkcl92NGAgYXJlIGRlZmluZWQuIEkmIzM5O20gcmVhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGRldGFpbHMgb2YgdGhlaXIgQVBJIGFuZCBob3cgdGhleSYjMzk7cmUgaW50ZW5kZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgYnJvYWRlciBpbmV0cGVlciBmcmFtZXdvcmsuIEkgd2FudCB0byBzZWUgaWYgdGhlIGltcGxlbWVudGF0aW9uIGhpbnRzIGF0IGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBvciBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBpbnRlcmVzdGluZyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCBhcm91bmQuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYWNjZXNzb3JzIGZpdCBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiB0aGUgcGVlciB0cmFja2luZyBtZWNoYW5pc20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRwZWVyX3NldF9hZGRyX3Y0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2luZXRwZWVyLmg9NzA9dm9pZCBpbmV0X2luaXRwZWVycyh2b2lkKSBfX2luaXQ7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC03My1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6NzQ6c3RhdGljIGlubGluZSB2b2lkIGluZXRwZWVyX3NldF9hZGRyX3Y0KHN0cnVjdCBpbmV0cGVlcl9hZGRyICppYWRkciwgX19iZTMyIGlwKVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC03NS17XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz0yNDk9c3RhdGljIHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqX190Y3BfZ2V0X21ldHJpY3NfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI2MC1cdGNhc2UgQUZfSU5FVDpcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MjYxOlx0XHRpbmV0cGVlcl9zZXRfYWRkcl92NChcdTAwMjZzYWRkciwgaW5ldF9yc2socmVxKS1cdTAwM2Vpcl9sb2NfYWRkcik7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI2MjpcdFx0aW5ldHBlZXJfc2V0X2FkZHJfdjQoXHUwMDI2ZGFkZHIsIGluZXRfcnNrKHJlcSktXHUwMDNlaXJfcm10X2FkZHIpO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yNjMtXHRcdGhhc2ggPSBpcHY0X2FkZHJfaGFzaChpbmV0X3JzayhyZXEpLVx1MDAzZWlyX3JtdF9hZGRyKTtcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTI5MT1zdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0Y3BfZ2V0X21ldHJpY3Moc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMzAwLVx0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUKSB7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjMwMTpcdFx0aW5ldHBlZXJfc2V0X2FkZHJfdjQoXHUwMDI2c2FkZHIsIGluZXRfc2soc2spLVx1MDAzZWluZXRfc2FkZHIpO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYzozMDI6XHRcdGluZXRwZWVyX3NldF9hZGRyX3Y0KFx1MDAyNmRhZGRyLCBpbmV0X3NrKHNrKS1cdTAwM2VpbmV0X2RhZGRyKTtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMzAzLVx0XHRoYXNoID0gaXB2NF9hZGRyX2hhc2goaW5ldF9zayhzayktXHUwMDNlaW5ldF9kYWRkcik7XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0zMDctXHRcdGlmIChpcHY2X2FkZHJfdjRtYXBwZWQoXHUwMDI2c2stXHUwMDNlc2tfdjZfZGFkZHIpKSB7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjMwODpcdFx0XHRpbmV0cGVlcl9zZXRfYWRkcl92NChcdTAwMjZzYWRkciwgaW5ldF9zayhzayktXHUwMDNlaW5ldF9zYWRkcik7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjMwOTpcdFx0XHRpbmV0cGVlcl9zZXRfYWRkcl92NChcdTAwMjZkYWRkciwgaW5ldF9zayhzayktXHUwMDNlaW5ldF9kYWRkcik7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTMxMC1cdFx0XHRoYXNoID0gaXB2NF9hZGRyX2hhc2goaW5ldF9zayhzayktXHUwMDNlaW5ldF9kYWRkcik7XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz04MDI9c3RhdGljIGludCBfX3BhcnNlX25sX2FkZHIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGluZXRwZWVyX2FkZHIgKmFkZHIsXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MDgtXHRpZiAoYSkge1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo4MDk6XHRcdGluZXRwZWVyX3NldF9hZGRyX3Y0KGFkZHIsIG5sYV9nZXRfaW5fYWRkcihhKSk7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgxMC1cdFx0aWYgKGhhc2gpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlBlZXJpbmcgaW50byBgaW5ldHBlZXIuaGAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBzb21lIGtlcm5lbCBpbnRlcm5hbHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYGluY2x1ZGUvbmV0L2luZXRwZWVyLmhgIGZpbGUsIGFuZCBJJiMzOTttIGZvY3VzaW5nIG15IGF0dGVudGlvbiBvbiBsaW5lcyA3NCB0aHJvdWdoIDgwLiBUaGF0IHJlZ2lvbiBsaWtlbHkgaG9sZHMgc29tZSBjcnVjaWFsIGRlZmluaXRpb25zIG9yIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBJUCBwZWVyIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgdHJhY2tpbmcgb2YgcmVtb3RlIGhvc3RzLCBjb25uZWN0aW9uIHN0YXRlcywgb3IgcGVyaGFwcyBldmVuIGNvbmdlc3Rpb24gY29udHJvbCBwYXJhbWV0ZXJzLiBJdCYjMzk7cyBwcm9iYWJseSBhIHN0cnVjdHVyZSB0aGF0IGRlZmluZXMgaG93IHRoZSBrZXJuZWwgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IGFuIElQIGFkZHJlc3MsIHRoZSByb3V0aW5nIGRlY2lzaW9ucywgYW5kIGFueSBhc3NvY2lhdGVkIHN0YXRlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgY29udGFpbmVkIGluIHRob3NlIGxpbmVzLiBIb3BlZnVsbHksIEkmIzM5O2xsIGZpbmQgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZXJlLiBUaGlzIGluZm9ybWF0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGRlYWxzIHdpdGggbmV0d29yayBjb25uZWN0aW9ucyBhdCBhIGdyYW51bGFyIGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2luZXRwZWVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcwOlx0dm9pZCBpbmV0X2luaXRwZWVycyh2b2lkKSBfX2luaXQ7XG4gIDcxOlx0XG4gIDcyOlx0I2RlZmluZSBJTkVUUEVFUl9NRVRSSUNTX05FV1x0KH4odTMyKSAwKVxuICA3MzpcdFxuICA3NDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0cGVlcl9zZXRfYWRkcl92NChzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIsIF9fYmUzMiBpcClcbiAgNzU6XHR7XG4gIDc2Olx0XHRpYWRkci1cdTAwM2VhNC5hZGRyID0gaXA7XG4gIDc3Olx0XHRpYWRkci1cdTAwM2VhNC52aWYgPSAwO1xuICA3ODpcdFx0aWFkZHItXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbiAgNzk6XHR9XG4gIDgwOlx0XG4gIDgxOlx0c3RhdGljIGlubGluZSBfX2JlMzIgaW5ldHBlZXJfZ2V0X2FkZHJfdjQoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyKVxuICA4MjpcdHtcbiAgODM6XHRcdHJldHVybiBpYWRkci1cdTAwM2VhNC5hZGRyO1xuICA4NDpcdH1cbiAgODU6XHRcbiAgODY6XHRzdGF0aWMgaW5saW5lIHZvaWQgaW5ldHBlZXJfc2V0X2FkZHJfdjYoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyLFxuICA4NzpcdFx0XHRcdFx0XHRzdHJ1Y3QgaW42X2FkZHIgKmluNilcbiAgODg6XHR7XG4gIDg5Olx0XHRpYWRkci1cdTAwM2VhNiA9ICppbjY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MDAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBBZGRyZXNzIFN0cnVjdHVyZSBJbml0aWFsaXphdGlvbioqCgpIbW0sIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IHRoZXNlIElQIGFkZHJlc3Mgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBpbmV0cGVlcmAgc3Vic3lzdGVtLiBJIHNlZSBgaW5ldHBlZXJfc2V0X2FkZHJfdjRgIGlzIGV4cGxpY2l0bHkgc2V0dGluZyBgaWFkZHItJmd0O2E0LnZpZiA9IDBgLiBUaGF0JiMzOTtzIGltcG9ydGFudDsgaXQmIzM5O3MgY2xlYXJpbmcgdGhlIFZpcnR1YWwgSW50ZXJmYWNlIGZpZWxkIHdpdGhpbiB0aGUgSVB2NCBhZGRyZXNzIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLgoKQnV0IHdoYXQgYWJvdXQgSVB2Nj8gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdHMgY29ycmVzcG9uZGluZyBmdW5jdGlvbiwgYGluZXRwZWVyX3NldF9hZGRyX3Y2YCwgaGFuZGxlcyBpdHMgVmlydHVhbCBJbnRlcmZhY2UgZmllbGQuIERvZXMgaXQgZm9sbG93IGEgc2ltaWxhciBhcHByb2FjaCwgYW5kIG1vcmUgYnJvYWRseSwgaG93IGRvZXMgdGhlIGNvZGViYXNlIGVuc3VyZSBjb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSB0d28gdmVyc2lvbiYjMzk7cyBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24/IFdoYXQgb3RoZXIgYXNzb2NpYXRlZCBmaWVsZHMgbmVlZCB0byBiZSBsb29rZWQgYXQgdG8gZW5zdXJlIGNvbnNpc3RlbmN5PyBJdCYjMzk7cyBjcnVjaWFsIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IHN1YnRsZSBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBvciBwb3RlbnRpYWwgYnVncyBhcmlzaW5nIGZyb20gZGlmZmVyaW5nIGluaXRpYWxpemF0aW9uIHByYWN0aWNlcyBhY3Jvc3MgSVB2NCBhbmQgSVB2NiBpbXBsZW1lbnRhdGlvbnMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaW5ldHBlZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODY6XHRzdGF0aWMgaW5saW5lIHZvaWQgaW5ldHBlZXJfc2V0X2FkZHJfdjYoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyLFxuICA4NzpcdFx0XHRcdFx0XHRzdHJ1Y3QgaW42X2FkZHIgKmluNilcbiAgODg6XHR7XG4gIDg5Olx0XHRpYWRkci1cdTAwM2VhNiA9ICppbjY7XG4gIDkwOlx0XHRpYWRkci1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUNjtcbiAgOTE6XHR9XG4gIDkyOlx0XG4gIDkzOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgaW42X2FkZHIgKmluZXRwZWVyX2dldF9hZGRyX3Y2KHN0cnVjdCBpbmV0cGVlcl9hZGRyICppYWRkcilcbiAgOTQ6XHR7XG4gIDk1Olx0XHRyZXR1cm4gXHUwMDI2aWFkZHItXHUwMDNlYTY7XG4gIDk2Olx0fVxuICA5NzpcdFxuICA5ODpcdC8qIGNhbiBiZSBjYWxsZWQgd2l0aCBvciB3aXRob3V0IGxvY2FsIEJIIGJlaW5nIGRpc2FibGVkICovXG4gIDk5Olx0c3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcbiAxMDA6XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyKTtcbiAxMDE6XHRcbiAxMDI6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NChzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4gMTAzOlx0XHRcdFx0XHRcdFx0X19iZTMyIHY0ZGFkZHIsXG4gMTA0Olx0XHRcdFx0XHRcdFx0aW50IHZpZilcbiAxMDU6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMjEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBQZWVyIFJlc29sdXRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiB0aGUgZnVuY3Rpb24gYGluZXRfZ2V0cGVlcl92NGAgYWN0dWFsbHkgYWNjZXB0cyBhIGB2aWZgIGFyZ3VtZW50ISBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBJJiMzOTtkIGNvbXBsZXRlbHkgZ2xvc3NlZCBvdmVyIHRoYXQgd2hlbiBJIHdhcyBpbml0aWFsbHkgcmV2aWV3aW5nIHRoZSBjb2RlLiBUaGlzIGNoYW5nZXMgdGhpbmdzLiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB2aXJ0dWFsIGludGVyZmFjZSBhZmZlY3RzIHRoZSBwZWVyIHJlc29sdXRpb24gcHJvY2Vzcy4gUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGJvdGggYGluZXRfZ2V0cGVlcl92NGAgKmFuZCogYGluZXRfZ2V0cGVlcl92NmAuIEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgdGhlc2UgZnVuY3Rpb25zIHV0aWxpemUgdGhlIGB2aWZgIHBhcmFtZXRlciB0byBkZXRlcm1pbmUgdGhlIHJlbW90ZSBwZWVyJiMzOTtzIGFkZHJlc3MuIFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBjcnVjaWFsIHRvIHRoZSBiZWhhdmlvciBJJiMzOTttIGxvb2tpbmcgaW50by4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb25zIHVzZSB0aGUgYHZpZmAgaW4gYSB3YXkgSSB0aGluayB0aGV5IGRvLiBJIGhhdmUgYXNzdW1wdGlvbnMsIGJ1dCBJIG5lZWQgY29uZmlybWF0aW9uLiBUaW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pbmV0cGVlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDI6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NChzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4gMTAzOlx0XHRcdFx0XHRcdFx0X19iZTMyIHY0ZGFkZHIsXG4gMTA0Olx0XHRcdFx0XHRcdFx0aW50IHZpZilcbiAxMDU6XHR7XG4gMTA2Olx0XHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBkYWRkcjtcbiAxMDc6XHRcbiAxMDg6XHRcdGRhZGRyLmE0LmFkZHIgPSB2NGRhZGRyO1xuIDEwOTpcdFx0ZGFkZHIuYTQudmlmID0gdmlmO1xuIDExMDpcdFx0ZGFkZHIuZmFtaWx5ID0gQUZfSU5FVDtcbiAxMTE6XHRcdHJldHVybiBpbmV0X2dldHBlZXIoYmFzZSwgXHUwMDI2ZGFkZHIpO1xuIDExMjpcdH1cbiAxMTM6XHRcbiAxMTQ6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4gMTE1Olx0XHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICp2NmRhZGRyKVxuIDExNjpcdHtcbiAxMTc6XHRcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIGRhZGRyO1xuIDExODpcdFxuIDExOTpcdFx0ZGFkZHIuYTYgPSAqdjZkYWRkcjtcbiAxMjA6XHRcdGRhZGRyLmZhbWlseSA9IEFGX0lORVQ2O1xuIDEyMTpcdFx0cmV0dXJuIGluZXRfZ2V0cGVlcihiYXNlLCBcdTAwMjZkYWRkcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MTkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMzQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmF2ZWxpbmcgdGhlIEluaXRpYWxpemF0aW9uIG9mIGBpbmV0cGVlcl9hZGRyYCBhbmQgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgY29uY2VybiBjZW50ZXJlZCBhcm91bmQgaG93IHRoZSBgaW5ldHBlZXJfYWRkcmAgc3RydWN0IGlzIGluaXRpYWxpemVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBpbmV0X2dldHBlZXJfdjRgLiBJIHNlZSB0aGF0IGBkYWRkci5hNC5hZGRyYCBhbmQgYGRhZGRyLmE0LnZpZmAgYXJlIGFzc2lnbmVkLCBhbmQgdGhlbiB0aGUgYGZhbWlseWAgZmllbGQgaXMgc2V0IHRvIGBBRl9JTkVUYC4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIGlmIHRoYXQmIzM5O3Mgc3VmZmljaWVudCB0byBmdWxseSBpbml0aWFsaXplIHRoZSB1bmlvbi4gQSBxdWljayBjaGVjayBvZiB0aGUgc3RydWN0IGRlZmluaXRpb24gY29uZmlybXMgdGhhdCB0aGUgYHVuaW9uYCBpcyAxNiBieXRlcyB3aWRlLCB3aGlsZSBpbml0aWFsaXppbmcgYC5hNGAgb25seSB0b3VjaGVzIDggYnl0ZXMuIFRoaXMgbWVhbnMgdGhlIG90aGVyIDggYnl0ZXMgcmVtYWluIHVuaW5pdGlhbGl6ZWQuCgpUaGUgY29yZSBvZiB0aGUgaXNzdWUgYm9pbHMgZG93biB0byB3aGV0aGVyIGFueSBmdW5jdGlvbiByZWFkcyB0aGUgKnVuaW5pdGlhbGl6ZWQqIHBvcnRpb24gb2YgdGhlIGBpbmV0cGVlcl9hZGRyYCBzdHJ1Y3QsIHdoaWNoIGNhbiBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVucHJlZGljdGFibGUgYmVoYXZpb3IuCgpJIGRvdmUgaW50byBgaW5ldHBlZXJfYWRkcl9oYXNoYC4gVGhhbmtmdWxseSwgaXQgb25seSBoYXNoZXMgYGE0LmFkZHJgIGFuZCBgYTQudmlmYCBmb3IgYEFGX0lORVRgLCB3aGljaCBhcmUgdGhlIGluaXRpYWxpemVkIHBhcnRzLiBGb3IgYEFGX0lORVQ2YCwgdGhlIGVudGlyZSBgYTZgIHN0cnVjdCBpcyBoYXNoZWQsIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyByZWFkLiBUaGlzIGlzIGdvb2QuCgpJIG1vdmVkIG9uIHRvIGBpbmV0X2dldHBlZXJfdjZgIGFuZCBgaW5ldHBlZXJfc2V0X2FkZHJfdjZgLCB3aGljaCBpbml0aWFsaXplcyBhbGwgMTYgYnl0ZXMgb2YgdGhlIHVuaW9uIHdpdGggYC5hNmAuIEdvb2QuCgpOZXh0LCBJIGNvbnNpZGVyZWQgcGFkZGluZy4gVGhlIHN0cnVjdCBjb250YWlucyBhIDE2LWJ5dGUgdW5pb24gYW5kIGEgMi1ieXRlIGZhbWlseSwgbWFraW5nIHRoZSB0b3RhbCBzaXplIDE4IGJ5dGVzLCBwb3RlbnRpYWxseSBwYWRkZWQgdG8gMjAgb3IgMjQgYnl0ZXMsIGRlcGVuZGluZyBvbiBhbGlnbm1lbnQuIEltcG9ydGFudGx5LCBgaW5ldHBlZXJfYWRkcl9oYXNoYCBhbmQgYGluZXRwZWVyX2FkZHJfY21wYCBpZ25vcmUgdGhlc2UgcGFkZGluZyBieXRlcywgc28gdGhleSBhcmVuJiMzOTt0IGEgY29uY2Vybi4KClRoZW4sIEkgaW52ZXN0aWdhdGVkIGBpbmV0cGVlcl9hZGRyX2NtcGAsIHdoaWNoIGNvbXBhcmVzIHRoZSBgaW5ldHBlZXJfYWRkcmAgc3RydWN0cy4gRm9yIGBBRl9JTkVUYCwgaXQgY29tcGFyZXMgYHM2X2FkZHIzMlswXWAgYW5kIGBzNl9hZGRyMzJbMV1gLCB3aGljaCBhbGlhcyBleGFjdGx5IHRvIGBhNC5hZGRyYCBhbmQgYGE0LnZpZmAuIENyaXRpY2FsbHksIGl0IGRvZXMgKm5vdCogY29tcGFyZSB0aGUgdW5pbml0aWFsaXplZCA4IGJ5dGVzLCBub3IgdGhlIHBhZGRpbmcuIFRoaXMgaXMgZmluZS4KCkkgd29uZGVyZWQgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyBhdmVudWVzIGZvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJIG5vdGVkIHRoYXQgYGluZXRwZWVyX2FkZHJfaGFzaGAgZXhwbGljaXRseSBvbmx5IHJlYWRzIHRoZSBpbml0aWFsaXplZCBmaWVsZHMuCgpBZnRlciBzY3J1dGluaXppbmcgYHRjcF9tZXRyaWNzLmNgIGFuZCBpdHMgdXNlIG9mIGBpbmV0cGVlcl9hZGRyYCB0aHJvdWdoIHRoZSBgaW5ldHBlZXJfc2V0X2FkZHJfdjRgIGZ1bmN0aW9uLCBJIGZvdW5kIHRoYXQgdGhleSAqZG8qIHVzZSBgaW5ldHBlZXJfYWRkcmAsIGJ1dCBgdGNwX21ldHJpY3MuY2AgdWx0aW1hdGVseSB1c2VzIGEgZGlyZWN0IElQdjQgb3IgSVB2NiBoYXNoIGZ1bmN0aW9uLiBTbyBpdCBkb2VzIG5vdCB1c2UgdGhlIGZ1bmN0aW9uIGJlaW5nIGRpc2N1c3NlZCBoZXJlLiBJdCAqZG9lcyogaG93ZXZlciB1c2UgYGluZXRwZWVyX2FkZHJfY21wYCB3aXRoIGBzYWRkcmAgYW5kIGBkYWRkcmAgd2hpY2ggYXJlIG9ubHkgcGFydGlhbGx5IGluaXRpYWxpemVkLCBidXQgYXMgYmVmb3JlLCBgaW5ldHBlZXJfYWRkcl9jbXBgIG9ubHkgY29tcGFyZXMgdGhlIGluaXRpYWxpemVkIGJ5dGVzLiBTbyB0aGlzIHNlZW1zIHNhZmUuCgpJIGhhZCBhIG1vbWVudCBvZiBkb3VidDogV2hhdCBpZiBgYS0mZ3Q7ZmFtaWx5YCB3YXMgdW5pbml0aWFsaXplZD8gVGhhbmtmdWxseSwgYGluZXRwZWVyX3NldF9hZGRyX3Y0YCwgYGluZXRfZ2V0cGVlcl92NGAgYW5kIGBpbmV0X2dldHBlZXJfdjZgICpkbyogaW5pdGlhbGl6ZSB0aGUgYGZhbWlseWAgZmllbGQsIHNvIGl0IGlzIHNldC4KCkZpbmFsbHksIEkgY29uc2lkZXJlZCB0aGUgcGF0Y2hlZCBsb2dpYyByZXBsYWNpbmcgYHJiX3RyZWVgIGxvb2t1cHMgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGluZXRwZWVyX2VudHJ5X2NtcGAuIFRoaXMgb3B0aW1pemF0aW9uIGNvbXBhcmVzIGhhc2hlcyAqYmVmb3JlKiBjb21wYXJpbmcgdGhlIGZ1bGwgYWRkcmVzc2VzIHVzaW5nIGBpbmV0cGVlcl9hZGRyX2NtcGAuIFRoZSBoYXNoIGlzIGNhbGN1bGF0ZWQgdXNpbmcgYGluZXRwZWVyX2FkZHJfaGFzaChkYWRkcilgLiBHaXZlbiB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGE0LmFkZHJgLCBgYTQudmlmYCBhbmQgYGE2YCBpbiB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb25zLCBJIGNvbmNsdWRlIHRoYXQgdGhlcmUmIzM5O3Mgbm8gY2hhbmNlIHRoZSBoYXNoIGNhbGN1bGF0aW9uIHJlYWRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKU28sIGl0IHNlZW1zIHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLCBvciBieSB0aGUgc3RydWN0dXJlJiMzOTtzIGluaXRpYWxpemF0aW9uLCBiZWNhdXNlIGZ1bmN0aW9ucyBvbmx5IHVzZSB0aGUgaW5pdGlhbGl6ZWQgc2VjdGlvbnMgb2YgdGhlIHVuaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaW5ldHBlZXJfYWRkciBbYS16QS1aMC05X10mIzQzOzsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0xMDI9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjQoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTA1LXtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTA2Olx0c3RydWN0IGluZXRwZWVyX2FkZHIgZGFkZHI7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwNy1cbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oPTExND1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMTYte1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMTc6XHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBkYWRkcjtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI2MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqUmV2aXNpdGluZyBgdGNwX21ldHJpY3MuY2AqKgoKT2theSwgdGltZSB0byBjaXJjbGUgYmFjayB0byBgdGNwX21ldHJpY3MuY2AuIEkmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIGNvbmdlc3Rpb24gY29udHJvbCBzaWRlLCBidXQgdGhlcmUmIzM5O3MgYWx3YXlzIHRoZSBjaGFuY2UgSSBtaXNzZWQgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGluIHRoZSBtZXRyaWMgY29sbGVjdGlvbiBvciByZXBvcnRpbmcuIEl0JiMzOTtzIGVhc3kgdG8gZ2V0IHR1bm5lbCB2aXNpb24gd2hlbiBkZWJ1Z2dpbmcgYSBzcGVjaWZpYyBpc3N1ZSwgc28gYSBmcmVzaCBsb29rIGF0IHRoZSBjb3JlIGRhdGEgZ2F0aGVyaW5nIGlzIHdhcnJhbnRlZC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgZGF0YSBJJiMzOTttIHVzaW5nIGZvciBhbmFseXNpcyBpcyBib3RoIGFjY3VyYXRlIGFuZCBjb21wcmVoZW5zaXZlLiBNYXliZSB0aGVyZSYjMzk7cyBhIHN1YnRsZSBpbnRlcmFjdGlvbiBJIG92ZXJsb29rZWQsIG9yIHBlcmhhcHMgYSBwcmV2aW91c2x5IGRpc21pc3NlZCBlZGdlIGNhc2UgaXMgbm93IHJlbGV2YW50IGluIGxpZ2h0IG9mIHJlY2VudCBmaW5kaW5ncy4gQSBtZXRob2RpY2FsIHJldmlldyBzaG91bGQgaGVscCBtZSBwaW5wb2ludCBhbnkgZGF0YSBpbnRlZ3JpdHkgaXNzdWVzIG9yIGlkZW50aWZ5IHBvdGVudGlhbCBtZXRyaWNzIHRoYXQgY291bGQgcHJvdmlkZSBhZGRpdGlvbmFsIGluc2lnaHRzIGludG8gdGhlIGN1cnJlbnQgcHJvYmxlbS4gVGltZSB0byBkaXZlIGJhY2sgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBpbmV0cGVlcl9hZGRyIFthLXpBLVowLTlfXSYjNDM7LCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfbWV0cmljcy5jPTI0OT1zdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICpfX3RjcF9nZXRfbWV0cmljc19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjUyLVx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0bTtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MjUzOlx0c3RydWN0IGluZXRwZWVyX2FkZHIgc2FkZHIsIGRhZGRyO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yNTQtXHR1bnNpZ25lZCBpbnQgaGFzaDtcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTI5MT1zdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0Y3BfZ2V0X21ldHJpY3Moc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjk1LVx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0bTtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6Mjk2Olx0c3RydWN0IGluZXRwZWVyX2FkZHIgc2FkZHIsIGRhZGRyO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yOTctXHR1bnNpZ25lZCBpbnQgaGFzaDtcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTg0Mj1zdGF0aWMgaW50IHRjcF9tZXRyaWNzX25sX2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTg0NC1cdHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG07XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjg0NTpcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODQ2LVx0dW5zaWduZWQgaW50IGhhc2g7XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz05Mjg9c3RhdGljIGludCB0Y3BfbWV0cmljc19ubF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy05MzItXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgX19yY3UgKipwcDtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6OTMzOlx0c3RydWN0IGluZXRwZWVyX2FkZHIgc2FkZHIsIGRhZGRyO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYy05MzQtXHR1bnNpZ25lZCBpbnQgaGFzaDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NzQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgTmV0d29yayBJbnRlcmZhY2UgTWV0cmljcyBSZXRyaWV2YWwgYW5kIERlbGV0aW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgVENQIG1ldHJpY3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHRjcF9tZXRyaWNzX25sX2NtZF9nZXRgIGFuZCBgdGNwX21ldHJpY3NfbmxfY21kX2RlbGAgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHdlJiMzOTtyZSByZXRyaWV2aW5nIHRoZSBuZXR3b3JrIGluZm9ybWF0aW9uIGFuZCBob3cgd2UgYXJlIGRlbGV0aW5nIGl0LiBJIHdhbnQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgZWRnZSBjYXNlcyBhcmUsIHdoZXJlIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3MgbWlnaHQgYmUsIGFuZCB3aGV0aGVyIG91ciBlcnJvciBoYW5kbGluZyBpcyByb2J1c3QgZW5vdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBhbnkgb2J2aW91cyBpbmVmZmljaWVuY2llcywgZXNwZWNpYWxseSBnaXZlbiB0aGUgc2NhbGUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX21ldHJpY3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg0MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODQyOlx0c3RhdGljIGludCB0Y3BfbWV0cmljc19ubF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gODQzOlx0e1xuIDg0NDpcdFx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0bTtcbiA4NDU6XHRcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcbiA4NDY6XHRcdHVuc2lnbmVkIGludCBoYXNoO1xuIDg0NzpcdFx0c3RydWN0IHNrX2J1ZmYgKm1zZztcbiA4NDg6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGdlbmxfaW5mb19uZXQoaW5mbyk7XG4gODQ5Olx0XHR2b2lkICpyZXBseTtcbiA4NTA6XHRcdGludCByZXQ7XG4gODUxOlx0XHRib29sIHNyYyA9IHRydWU7XG4gODUyOlx0XG4gODUzOlx0XHRyZXQgPSBwYXJzZV9ubF9hZGRyKGluZm8sIFx1MDAyNmRhZGRyLCBcdTAwMjZoYXNoLCAwKTtcbiA4NTQ6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gODU1Olx0XHRcdHJldHVybiByZXQ7XG4gODU2Olx0XG4gODU3Olx0XHRyZXQgPSBwYXJzZV9ubF9zYWRkcihpbmZvLCBcdTAwMjZzYWRkcik7XG4gODU4Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDg1OTpcdFx0XHRzcmMgPSBmYWxzZTtcbiA4NjA6XHRcbiA4NjE6XHRcdG1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xuIDg2MjpcdFx0aWYgKCFtc2cpXG4gODYzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDg2NDpcdFxuIDg2NTpcdFx0cmVwbHkgPSBnZW5sbXNnX3B1dF9yZXBseShtc2csIGluZm8sIFx1MDAyNnRjcF9tZXRyaWNzX25sX2ZhbWlseSwgMCxcbiA4NjY6XHRcdFx0XHRcdCAgaW5mby1cdTAwM2VnZW5saGRyLVx1MDAzZWNtZCk7XG4gODY3Olx0XHRpZiAoIXJlcGx5KVxuIDg2ODpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA4Njk6XHRcbiA4NzA6XHRcdGhhc2ggXj0gbmV0X2hhc2hfbWl4KG5ldCk7XG4gODcxOlx0XHRoYXNoID0gaGFzaF8zMihoYXNoLCB0Y3BfbWV0cmljc19oYXNoX2xvZyk7XG4gODcyOlx0XHRyZXQgPSAtRVNSQ0g7XG4gODczOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gODc0Olx0XHRmb3IgKHRtID0gcmN1X2RlcmVmZXJlbmNlKHRjcF9tZXRyaWNzX2hhc2hbaGFzaF0uY2hhaW4pOyB0bTtcbiA4NzU6XHRcdCAgICAgdG0gPSByY3VfZGVyZWZlcmVuY2UodG0tXHUwMDNldGNwbV9uZXh0KSkge1xuIDg3NjpcdFx0XHRpZiAoYWRkcl9zYW1lKFx1MDAyNnRtLVx1MDAzZXRjcG1fZGFkZHIsIFx1MDAyNmRhZGRyKSBcdTAwMjZcdTAwMjZcbiA4Nzc6XHRcdFx0ICAgICghc3JjIHx8IGFkZHJfc2FtZShcdTAwMjZ0bS1cdTAwM2V0Y3BtX3NhZGRyLCBcdTAwMjZzYWRkcikpIFx1MDAyNlx1MDAyNlxuIDg3ODpcdFx0XHQgICAgbmV0X2VxKHRtX25ldCh0bSksIG5ldCkpIHtcbiA4Nzk6XHRcdFx0XHRyZXQgPSB0Y3BfbWV0cmljc19maWxsX2luZm8obXNnLCB0bSk7XG4gODgwOlx0XHRcdFx0YnJlYWs7XG4gODgxOlx0XHRcdH1cbiA4ODI6XHRcdH1cbiA4ODM6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDg4NDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA4ODU6XHRcdFx0Z290byBvdXRfZnJlZTtcbiA4ODY6XHRcbiA4ODc6XHRcdGdlbmxtc2dfZW5kKG1zZywgcmVwbHkpO1xuIDg4ODpcdFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTtcbiA4ODk6XHRcbiA4OTA6XHRubGFfcHV0X2ZhaWx1cmU6XG4gODkxOlx0XHRyZXQgPSAtRU1TR1NJWkU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTg3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipUaW1lIHRvIEV4YW1pbmUgVGhvc2UgQWRkcmVzcyBQYXJzZXJzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdGFrZSBhIGZyZXNoIGxvb2sgYXQgYHBhcnNlX25sX2FkZHJgIGFuZCBgcGFyc2Vfbmxfc2FkZHJgLiBJJiMzOTt2ZSB3b3JrZWQgd2l0aCBudW1lcm91cyBhZGRyZXNzIHBhcnNpbmcgcm91dGluZXMgb3ZlciB0aGUgeWVhcnMsIGFuZCBldmVuIHdpdGggcm9idXN0IGxpYnJhcmllcywgaXQmIzM5O3MgYWx3YXlzIGNydWNpYWwgdG8gcmV2aXNpdCB0aGUgdW5kZXJseWluZyBsb2dpYy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGVzZSBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9ucyBhcmUgc3RpbGwgcGVyZm9ybWluZyBvcHRpbWFsbHksIGhhbmRsaW5nIGVkZ2UgY2FzZXMgY29ycmVjdGx5LCBhbmQgYXJlbiYjMzk7dCBpbnRyb2R1Y2luZyBhbnkgc3VidGxlIGJ1Z3MgSSYjMzk7dmUgbWlzc2VkIHByZXZpb3VzbHkuIFRoZXJlIGFyZSBhbHdheXMgaW1wcm92ZW1lbnRzIHRvIGJlIG1hZGUsIGFuZCBnaXZlbiB0aGUgaW1wb3J0YW5jZSBvZiBhY2N1cmF0ZSBhZGRyZXNzIGludGVycHJldGF0aW9uIGluIHRoaXMgc3lzdGVtLCB0aG9yb3VnaG5lc3MgaXMga2V5LiBBIHJvdXRpbmUgcmVmcmVzaCB3aWxsIGRvIHVzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX21ldHJpY3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODAyOlx0c3RhdGljIGludCBfX3BhcnNlX25sX2FkZHIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGluZXRwZWVyX2FkZHIgKmFkZHIsXG4gODAzOlx0XHRcdFx0ICAgdW5zaWduZWQgaW50ICpoYXNoLCBpbnQgb3B0aW9uYWwsIGludCB2NCwgaW50IHY2KVxuIDgwNDpcdHtcbiA4MDU6XHRcdHN0cnVjdCBubGF0dHIgKmE7XG4gODA2Olx0XG4gODA3Olx0XHRhID0gaW5mby1cdTAwM2VhdHRyc1t2NF07XG4gODA4Olx0XHRpZiAoYSkge1xuIDgwOTpcdFx0XHRpbmV0cGVlcl9zZXRfYWRkcl92NChhZGRyLCBubGFfZ2V0X2luX2FkZHIoYSkpO1xuIDgxMDpcdFx0XHRpZiAoaGFzaClcbiA4MTE6XHRcdFx0XHQqaGFzaCA9IGlwdjRfYWRkcl9oYXNoKGluZXRwZWVyX2dldF9hZGRyX3Y0KGFkZHIpKTtcbiA4MTI6XHRcdFx0cmV0dXJuIDA7XG4gODEzOlx0XHR9XG4gODE0Olx0XHRhID0gaW5mby1cdTAwM2VhdHRyc1t2Nl07XG4gODE1Olx0XHRpZiAoYSkge1xuIDgxNjpcdFx0XHRzdHJ1Y3QgaW42X2FkZHIgaW42O1xuIDgxNzpcdFxuIDgxODpcdFx0XHRpbjYgPSBubGFfZ2V0X2luNl9hZGRyKGEpO1xuIDgxOTpcdFx0XHRpbmV0cGVlcl9zZXRfYWRkcl92NihhZGRyLCBcdTAwMjZpbjYpO1xuIDgyMDpcdFx0XHRpZiAoaGFzaClcbiA4MjE6XHRcdFx0XHQqaGFzaCA9IGlwdjZfYWRkcl9oYXNoKGluZXRwZWVyX2dldF9hZGRyX3Y2KGFkZHIpKTtcbiA4MjI6XHRcdFx0cmV0dXJuIDA7XG4gODIzOlx0XHR9XG4gODI0Olx0XHRyZXR1cm4gb3B0aW9uYWwgPyAxIDogLUVBRk5PU1VQUE9SVDtcbiA4MjU6XHR9XG4gODI2Olx0XG4gODI3Olx0c3RhdGljIGludCBwYXJzZV9ubF9hZGRyKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBpbmV0cGVlcl9hZGRyICphZGRyLFxuIDgyODpcdFx0XHRcdCB1bnNpZ25lZCBpbnQgKmhhc2gsIGludCBvcHRpb25hbClcbiA4Mjk6XHR7XG4gODMwOlx0XHRyZXR1cm4gX19wYXJzZV9ubF9hZGRyKGluZm8sIGFkZHIsIGhhc2gsIG9wdGlvbmFsLFxuIDgzMTpcdFx0XHRcdCAgICAgICBUQ1BfTUVUUklDU19BVFRSX0FERFJfSVBWNCxcbiA4MzI6XHRcdFx0XHQgICAgICAgVENQX01FVFJJQ1NfQVRUUl9BRERSX0lQVjYpO1xuIDgzMzpcdH1cbiA4MzQ6XHRcbiA4MzU6XHRzdGF0aWMgaW50IHBhcnNlX25sX3NhZGRyKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBpbmV0cGVlcl9hZGRyICphZGRyKVxuIDgzNjpcdHtcbiA4Mzc6XHRcdHJldHVybiBfX3BhcnNlX25sX2FkZHIoaW5mbywgYWRkciwgTlVMTCwgMCxcbiA4Mzg6XHRcdFx0XHQgICAgICAgVENQX01FVFJJQ1NfQVRUUl9TQUREUl9JUFY0LFxuIDgzOTpcdFx0XHRcdCAgICAgICBUQ1BfTUVUUklDU19BVFRSX1NBRERSX0lQVjYpO1xuIDg0MDpcdH1cbiA4NDE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBNZW1vcnkgU2FmZXR5IElzc3VlcyBpbiBBZGRyZXNzIENvbXBhcmlzb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgcGFyc2VfbmxfYWRkcmAgaGFuZGxlcyBuZXR3b3JrIGFkZHJlc3Nlcy4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBpbml0aWFsaXppbmcgdGhlIGBhZGRyYCBzdHJ1Y3R1cmUsIGVpdGhlciBhcyBJUHY0IG9yIElQdjYsIHVzaW5nIGZ1bmN0aW9ucyBsaWtlIGBpbmV0cGVlcl9zZXRfYWRkcl92NGAgb3IgYGluZXRwZWVyX3NldF9hZGRyX3Y2YC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGx1cmtpbmcgaW4gdGhpcyBwcm9jZXNzPyBJIG1lYW4sIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvbXBhcmluZyBhZGRyZXNzZXMsIGFuZCB0aGF0IGhhcyB0byBiZSByb2NrIHNvbGlkLgoKVGhlIG5leHQgc3RlcCBpcyB0aGUgYGFkZHJfc2FtZWAgZnVuY3Rpb24sIHdoaWNoLCBJIHByZXN1bWUsIGlzIHRoZSBvbmUgYWN0dWFsbHkgZG9pbmcgdGhlIGNvbXBhcmlzb24uIEdvb2QsIGl0IHV0aWxpemVzIGBpbmV0cGVlcl9hZGRyX2NtcGAgZm9yIHRoZSBsb3ctbGV2ZWwgYml0LWJ5LWJpdCBjb21wYXJpc29uLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLCBhbmQgaXQgbWVhbnMgdGhlIGNvbXBhcmlzb24gb25seSBsb29rcyBhdCB0aGUgaW5pdGlhbGl6ZWQgYnl0ZXMuIFNvLCB0aGF0JiMzOTtzIGJldHRlciwgYnV0IGxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nLi4uCgpPa2F5LCBob2xkIG9uLCBJIG5lZWQgdG8gem9vbSBvdXQgYSBiaXQuIFdoYXQgYWJvdXQgdGhlIGluZm9ybWF0aW9uIHVzZWQgZm9yIFRDUCBtZXRyaWNzLCBsaWtlIGluIGB0Y3BfbWV0cmljc19maWxsX2luZm9gPyBEb2VzICp0aGF0KiBmdW5jdGlvbiBjb3B5IHRoZSBgc3RydWN0IGluZXRwZWVyX2FkZHJgIHRvIHVzZXIgc3BhY2U/IElmIHNvLCB3ZSYjMzk7cmUgYmFjayB0byBzcXVhcmUgb25lLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoYXQgY29kZSBwYXRoIHZlcnkgY2FyZWZ1bGx5IGZvciBwb3RlbnRpYWwgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoYXQgY291bGQgYmUgYSBjcml0aWNhbCB2dWxuZXJhYmlsaXR5LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHRyYWNlIHRoZSBkYXRhIGZsb3cgdG8gZW5zdXJlIHdlJiMzOTtyZSBzYWZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9tZXRyaWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5MDpcdFx0XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA2OTE6XHRcdFx0XHRcdG4mIzQzOyYjNDM7O1xuIDY5MjpcdFx0XHRcdFx0dmFsID0gbWF4KHZhbCAvIDEwMDAsIDFVKTtcbiA2OTM6XHRcdFx0XHR9XG4gNjk0Olx0XHRcdFx0aWYgKGkgPT0gVENQX01FVFJJQ19SVFRWQVIpIHtcbiA2OTU6XHRcdFx0XHRcdGlmIChubGFfcHV0X3UzMihtc2csIFRDUF9NRVRSSUNfUlRUVkFSX1VTICYjNDM7IDEsXG4gNjk2Olx0XHRcdFx0XHRcdFx0dmFsKSBcdTAwM2MgMClcbiA2OTc6XHRcdFx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gNjk4Olx0XHRcdFx0XHRuJiM0MzsmIzQzOztcbiA2OTk6XHRcdFx0XHRcdHZhbCA9IG1heCh2YWwgLyAxMDAwLCAxVSk7XG4gNzAwOlx0XHRcdFx0fVxuIDcwMTpcdFx0XHRcdGlmIChubGFfcHV0X3UzMihtc2csIGkgJiM0MzsgMSwgdmFsKSBcdTAwM2MgMClcbiA3MDI6XHRcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDcwMzpcdFx0XHRcdG4mIzQzOyYjNDM7O1xuIDcwNDpcdFx0XHR9XG4gNzA1Olx0XHRcdGlmIChuKVxuIDcwNjpcdFx0XHRcdG5sYV9uZXN0X2VuZChtc2csIG5lc3QpO1xuIDcwNzpcdFx0XHRlbHNlXG4gNzA4Olx0XHRcdFx0bmxhX25lc3RfY2FuY2VsKG1zZywgbmVzdCk7XG4gNzA5Olx0XHR9XG4gNzEwOlx0XG4gNzExOlx0XHR7XG4gNzEyOlx0XHRcdHN0cnVjdCB0Y3BfZmFzdG9wZW5fbWV0cmljcyB0Zm9tX2NvcHlbMV0sICp0Zm9tO1xuIDcxMzpcdFx0XHR1bnNpZ25lZCBpbnQgc2VxO1xuIDcxNDpcdFxuIDcxNTpcdFx0XHRkbyB7XG4gNzE2Olx0XHRcdFx0c2VxID0gcmVhZF9zZXFiZWdpbihcdTAwMjZmYXN0b3Blbl9zZXFsb2NrKTtcbiA3MTc6XHRcdFx0XHR0Zm9tX2NvcHlbMF0gPSB0bS1cdTAwM2V0Y3BtX2Zhc3RvcGVuO1xuIDcxODpcdFx0XHR9IHdoaWxlIChyZWFkX3NlcXJldHJ5KFx1MDAyNmZhc3RvcGVuX3NlcWxvY2ssIHNlcSkpO1xuIDcxOTpcdFxuIDcyMDpcdFx0XHR0Zm9tID0gdGZvbV9jb3B5O1xuIDcyMTpcdFx0XHRpZiAodGZvbS1cdTAwM2Vtc3MgXHUwMDI2XHUwMDI2XG4gNzIyOlx0XHRcdCAgICBubGFfcHV0X3UxNihtc2csIFRDUF9NRVRSSUNTX0FUVFJfRk9QRU5fTVNTLFxuIDcyMzpcdFx0XHRcdFx0dGZvbS1cdTAwM2Vtc3MpIFx1MDAzYyAwKVxuIDcyNDpcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDcyNTpcdFx0XHRpZiAodGZvbS1cdTAwM2VzeW5fbG9zcyBcdTAwMjZcdTAwMjZcbiA3MjY6XHRcdFx0ICAgIChubGFfcHV0X3UxNihtc2csIFRDUF9NRVRSSUNTX0FUVFJfRk9QRU5fU1lOX0RST1BTLFxuIDcyNzpcdFx0XHRcdFx0dGZvbS1cdTAwM2VzeW5fbG9zcykgXHUwMDNjIDAgfHxcbiA3Mjg6XHRcdFx0ICAgICBubGFfcHV0X21zZWNzKG1zZywgVENQX01FVFJJQ1NfQVRUUl9GT1BFTl9TWU5fRFJPUF9UUyxcbiA3Mjk6XHRcdFx0XHRcdGppZmZpZXMgLSB0Zm9tLVx1MDAzZWxhc3Rfc3luX2xvc3MsXG4gNzMwOlx0XHRcdFx0XHRUQ1BfTUVUUklDU19BVFRSX1BBRCkgXHUwMDNjIDApKVxuIDczMTpcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDczMjpcdFx0XHRpZiAodGZvbS1cdTAwM2Vjb29raWUubGVuIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuIDczMzpcdFx0XHQgICAgbmxhX3B1dChtc2csIFRDUF9NRVRSSUNTX0FUVFJfRk9QRU5fQ09PS0lFLFxuIDczNDpcdFx0XHRcdCAgICB0Zm9tLVx1MDAzZWNvb2tpZS5sZW4sIHRmb20tXHUwMDNlY29va2llLnZhbCkgXHUwMDNjIDApXG4gNzM1Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gNzM2Olx0XHR9XG4gNzM3Olx0XG4gNzM4Olx0XHRyZXR1cm4gMDtcbiA3Mzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGB0Y3BfbWV0cmljc19maWxsX2luZm9gKioKCk9rYXksIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgdGhvcm91Z2ggbG9vayBhdCB0aGUgYHRjcF9tZXRyaWNzX2ZpbGxfaW5mb2AgZnVuY3Rpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgYWx3YXlzIG9uIHRoZSBmdW5jdGlvbiYjMzk7cyBlbnRyeSBwb2ludCwgdW5kZXJzdGFuZGluZyBpdHMgaW1tZWRpYXRlIGlucHV0cyBhbmQgaW50ZW5kZWQgcHVycG9zZS4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBzaWduYXR1cmUsIGFudGljaXBhdGluZyBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCwgYW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgZGVzaWduZWQgdG8gKmRvKi4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBjb3JlIHJlc3BvbnNpYmlsaXR5IG9mIHRoaXMgcm91dGluZS4gSXMgaXQgc2ltcGx5IGNvbGxlY3RpbmcgZGF0YT8gSXMgaXQgcGVyZm9ybWluZyBjYWxjdWxhdGlvbnM/IElzIGl0IHdyaXRpbmcgdG8gc29tZSBzaGFyZWQgbWVtb3J5IG9yIGFuIG91dHB1dCBidWZmZXI/IFRoZSBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyBpdCBkZWFscyB3aXRoIFRDUCBtZXRyaWNzLCBzbyBJJiMzOTttIGV4cGVjdGluZyBwZXJmb3JtYW5jZSBkYXRhLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGUgKmNvbnRleHQqIG9mIHRob3NlIG1ldHJpY3MuIElzIGl0IGNvbm5lY3Rpb24tc3BlY2lmaWM/IFN5c3RlbS13aWRlPyBGbG93LWJhc2VkPyBHcmFzcGluZyB0aGlzIGNvbnRleHQgZnJvbSB0aGUgb3V0c2V0IHdpbGwgc2hhcGUgaG93IEkgYW5hbHl6ZSB0aGUgY29kZS4gSSYjMzk7bSBhbHJlYWR5IGZvcm1pbmcgaHlwb3RoZXNlcyBhYm91dCBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJlc3QsIGxpa2UgbG9ja2luZyBzdHJhdGVnaWVzLCBkYXRhIGFnZ3JlZ2F0aW9uLCBhbmQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyByZWxhdGVkIHRvIHRoZSBmcmVxdWVuY3kgb2YgaXRzIGV4ZWN1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfbWV0cmljcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NDA6XHQjZW5kaWZcbiA2NDE6XHR9O1xuIDY0MjpcdFxuIDY0MzpcdC8qIEFkZCBhdHRyaWJ1dGVzLCBjYWxsZXIgY2FuY2VscyBpdHMgaGVhZGVyIG9uIGZhaWx1cmUgKi9cbiA2NDQ6XHRzdGF0aWMgaW50IHRjcF9tZXRyaWNzX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxuIDY0NTpcdFx0XHRcdFx0IHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG0pXG4gNjQ2Olx0e1xuIDY0NzpcdFx0c3RydWN0IG5sYXR0ciAqbmVzdDtcbiA2NDg6XHRcdGludCBpO1xuIDY0OTpcdFxuIDY1MDpcdFx0c3dpdGNoICh0bS1cdTAwM2V0Y3BtX2RhZGRyLmZhbWlseSkge1xuIDY1MTpcdFx0Y2FzZSBBRl9JTkVUOlxuIDY1MjpcdFx0XHRpZiAobmxhX3B1dF9pbl9hZGRyKG1zZywgVENQX01FVFJJQ1NfQVRUUl9BRERSX0lQVjQsXG4gNjUzOlx0XHRcdFx0XHQgICAgaW5ldHBlZXJfZ2V0X2FkZHJfdjQoXHUwMDI2dG0tXHUwMDNldGNwbV9kYWRkcikpIFx1MDAzYyAwKVxuIDY1NDpcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDY1NTpcdFx0XHRpZiAobmxhX3B1dF9pbl9hZGRyKG1zZywgVENQX01FVFJJQ1NfQVRUUl9TQUREUl9JUFY0LFxuIDY1NjpcdFx0XHRcdFx0ICAgIGluZXRwZWVyX2dldF9hZGRyX3Y0KFx1MDAyNnRtLVx1MDAzZXRjcG1fc2FkZHIpKSBcdTAwM2MgMClcbiA2NTc6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA2NTg6XHRcdFx0YnJlYWs7XG4gNjU5Olx0XHRjYXNlIEFGX0lORVQ2OlxuIDY2MDpcdFx0XHRpZiAobmxhX3B1dF9pbjZfYWRkcihtc2csIFRDUF9NRVRSSUNTX0FUVFJfQUREUl9JUFY2LFxuIDY2MTpcdFx0XHRcdFx0ICAgICBpbmV0cGVlcl9nZXRfYWRkcl92NihcdTAwMjZ0bS1cdTAwM2V0Y3BtX2RhZGRyKSkgXHUwMDNjIDApXG4gNjYyOlx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gNjYzOlx0XHRcdGlmIChubGFfcHV0X2luNl9hZGRyKG1zZywgVENQX01FVFJJQ1NfQVRUUl9TQUREUl9JUFY2LFxuIDY2NDpcdFx0XHRcdFx0ICAgICBpbmV0cGVlcl9nZXRfYWRkcl92NihcdTAwMjZ0bS1cdTAwM2V0Y3BtX3NhZGRyKSkgXHUwMDNjIDApXG4gNjY1Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gNjY2Olx0XHRcdGJyZWFrO1xuIDY2NzpcdFx0ZGVmYXVsdDpcbiA2Njg6XHRcdFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XG4gNjY5Olx0XHR9XG4gNjcwOlx0XG4gNjcxOlx0XHRpZiAobmxhX3B1dF9tc2Vjcyhtc2csIFRDUF9NRVRSSUNTX0FUVFJfQUdFLFxuIDY3MjpcdFx0XHRcdCAgamlmZmllcyAtIFJFQURfT05DRSh0bS1cdTAwM2V0Y3BtX3N0YW1wKSxcbiA2NzM6XHRcdFx0XHQgIFRDUF9NRVRSSUNTX0FUVFJfUEFEKSBcdTAwM2MgMClcbiA2NzQ6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gNjc1Olx0XG4gNjc2Olx0XHR7XG4gNjc3Olx0XHRcdGludCBuID0gMDtcbiA2Nzg6XHRcbiA2Nzk6XHRcdFx0bmVzdCA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhtc2csIFRDUF9NRVRSSUNTX0FUVFJfVkFMUyk7XG4gNjgwOlx0XHRcdGlmICghbmVzdClcbiA2ODE6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA2ODI6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVENQX01FVFJJQ19NQVhfS0VSTkVMICYjNDM7IDE7IGkmIzQzOyYjNDM7KSB7XG4gNjgzOlx0XHRcdFx0dTMyIHZhbCA9IHRjcF9tZXRyaWNfZ2V0KHRtLCBpKTtcbiA2ODQ6XHRcbiA2ODU6XHRcdFx0XHRpZiAoIXZhbClcbiA2ODY6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDY4NzpcdFx0XHRcdGlmIChpID09IFRDUF9NRVRSSUNfUlRUKSB7XG4gNjg4Olx0XHRcdFx0XHRpZiAobmxhX3B1dF91MzIobXNnLCBUQ1BfTUVUUklDX1JUVF9VUyAmIzQzOyAxLFxuIDY4OTpcdFx0XHRcdFx0XHRcdHZhbCkgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzAxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTgzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmUgaW4gYGluZXRwZWVyX2FkZHJgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgaG93IGBpbmV0cGVlcl9nZXRfYWRkcl92NGAgb25seSBjb3BpZXMgcGFydCBvZiBgc3RydWN0IGluZXRwZWVyX2FkZHJgLCBzcGVjaWZpY2FsbHkgYGE0LmFkZHJgLCBhcyBpdCByZXR1cm5zIGEgYF9fYmUzMmAuIEhvd2V2ZXIsIHRoZSBjb2RlIHNuaXBwZXQgZnJvbSB0aGUgcGF0Y2ggcmV2ZWFscyBhIGRpZmZlcmVudCBzY2VuYXJpby4gYHAtJmd0O2RhZGRyID0gKmRhZGRyO2AgY29waWVzIHRoZSAqZW50aXJlKiBgc3RydWN0IGluZXRwZWVyX2FkZHJgLCB3aGljaCBpbmNsdWRlcyBwYWRkaW5nIGFuZCBhIHVuaW9uLCBwb3RlbnRpYWxseSBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIGJ5dGVzLgoKTXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEgbGVha3MgdG8gdXNlciBzcGFjZS4gIEkgbmVlZCB0byBhc2NlcnRhaW4gaWYgYHAtJmd0O2RhZGRyYCBvciB0aGUgZW5jbG9zaW5nIGBzdHJ1Y3QgaW5ldF9wZWVyYCBhcmUgZXZlciBjb3BpZWQgb3V0c2lkZSB0aGUga2VybmVsLiAgVGhlIGNvbmNsdXNpb24sIHRoYW5rZnVsbHksIGlzIHRoYXQgYHN0cnVjdCBpbmV0X3BlZXJgIGlzIGludGVybmFsIHRvIHRoZSBrZXJuZWwmIzM5O3MgSVAgcGVlciB0cmFja2luZyBzeXN0ZW0gKHVzZWQsIGUuZy4sIGZvciBJUCBJRCBnZW5lcmF0aW9uIGFuZCByb3V0aW5nIG1ldHJpY3MpIGFuZCBpcyAqbm90KiBleHBvc2VkIHRvIHVzZXIgc3BhY2UgZGlyZWN0bHkuCgpPa2F5LCBzbyBub3QgZGlyZWN0bHkgZXhwb3NlZC4gV2hhdCBhYm91dCB0aGUgcHJvY2Vzc2luZyB3aXRoaW4gdGhlIGtlcm5lbD8gSXMgYHAtJmd0O2RhZGRyYCBoYXNoZWQsIGNvbXBhcmVkLCBvciBvdGhlcndpc2UgdXNlZCBpbiBhIHdheSB0aGF0IHdvdWxkIG1ha2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbWF0aWM/ICBUaGUgYHAtJmd0O2RhZGRyYCBpcyBub3QgZGlyZWN0bHkgaGFzaGVkLiBJbnN0ZWFkLCBhIHByZWNvbXB1dGVkIGhhc2ggYHAtJmd0O2hhc2hgIGlzIHN0b3JlZC4KClRoZSBjcml0aWNhbCBjb21wYXJpc29uIHBvaW50IGlzIGBpbmV0cGVlcl9lbnRyeV9jbXBgLiAgVGhlIGZ1bmN0aW9uIGZpcnN0IGNvbXBhcmVzIHByZWNvbXB1dGVkIGhhc2hlcy4gSWYgdGhvc2UgbWF0Y2gsIGBpbmV0cGVlcl9hZGRyX2NtcGAgaXMgY2FsbGVkLiBOb3csIGBpbmV0cGVlcl9hZGRyX2NtcGAgb25seSBjb21wYXJlcyB0aGUgKmluaXRpYWxpemVkKiBieXRlcyBvZiBgZGFkZHJgLCBtZWFuaW5nIHRob3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSB0aGUgcGFkZGluZyBvciB0aGUgdW5pb24gc2hvdWxkIG5vdCBiZSBwcm9ibGVtYXRpYyBpbiBhIGNvbXBhcmlzb24uCgpIb3dldmVyLCBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBpbmV0cGVlcl9hZGRyYCBpdHNlbGYuIFRoZSBgaW5ldHBlZXJfYWRkcl9oYXNoYCBmdW5jdGlvbiB1dGlsaXplcyB0aGUgYGE0LnZpZmAgZmllbGQgKGFtb25nIG90aGVyIGZpZWxkcykgd2hlbiBgQUZfSU5FVGAgaXMgdXNlZC4gSSBhbSBjaGVja2luZyB0aGUgZnVuY3Rpb24gY2FsbHMgdG8gYGluZXRfZ2V0cGVlcl92NGAgYW5kIGBpbmV0cGVlcl9zZXRfYWRkcl92NGAgd2hlcmUgdGhlIGBzdHJ1Y3QgaW5ldHBlZXJfYWRkcmAgaXMgc2V0LiBUaGUgdmFsdWUgb2YgYGE0LnZpZmAgaXMgc2V0IGluIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zLiBTbywgdGhhdCYjMzk7cyBub3QgYSBjb25jZXJuLgoKTm93LCBsZXQmIzM5O3MgZXhwbG9yZSBvdGhlciBjb2RlIHBhdGhzIGludm9sdmluZyBgc3RydWN0IGluZXRwZWVyX2FkZHJgLiBJJiMzOTt2ZSByZXZpc2l0ZWQgYG5ldC9pcHY0L3RjcF9tZXRyaWNzLmNgIHRvIGV4YW1pbmUgaG93IGBzdHJ1Y3QgaW5ldHBlZXJfYWRkcmAgaXMgY3JlYXRlZCBhbmQgdXNlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBUQ1AgbWV0cmljcy4gRnVuY3Rpb25zIGxpa2UgYF9fdGNwX2dldF9tZXRyaWNzX3JlcWAsIGB0Y3BfZ2V0X21ldHJpY3NgLCBgdGNwX21ldHJpY3NfbmxfY21kX2dldGAsIGFuZCBgdGNwX21ldHJpY3NfbmxfY21kX2RlbGAgYXJlIHJlbGV2YW50IGhlcmUuIEkmIzM5O3ZlIGZvdW5kIHRob3NlIGZ1bmN0aW9ucyBpbml0aWFsaXplIGBzdHJ1Y3QgaW5ldHBlZXJfYWRkcmAgdXNpbmcgYGluZXRwZWVyX3NldF9hZGRyX3Y0YCBvciBgaW5ldHBlZXJfc2V0X2FkZHJfdjZgLiBTbywgdGhlIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgaW4gdGhlIHN0YW5kYXJkIGNvZGUgcGF0aHMuCgpIb3dldmVyLCB0aGUgYW5hbHlzaXMgb2YgYHRjcF9tZXRyaWNzX25sX2NtZF9nZXRgIGFuZCBgdGNwX21ldHJpY3NfbmxfY21kX2RlbGAgcmV2ZWFscyBhIHBvdGVudGlhbCBpc3N1ZS4gVGhlIGZ1bmN0aW9uIGBwYXJzZV9ubF9zYWRkcmAgaW5pdGlhbGl6ZXMgYHNhZGRyYC4gQSBmYWlsdXJlIG9mIGBwYXJzZV9ubF9zYWRkcmAgY2FuIGxlYWQgdG8gYW4gdW5pbml0aWFsaXplZCBgc2FkZHJgLiBJdCBpcyB0aGVuIHVzZWQgaW4gYSBjb21wYXJpc29uIHdpdGhpbiBhIGxvb3AsIGJ1dCB0aGUgY29kZSBjb3JyZWN0bHkgc2hvcnQtY2lyY3VpdHMgdGhlIGNvbXBhcmlzb24gaWYgdGhlIGBzYWRkcmAgdmFsdWUgaXMgbm90IGluaXRpYWxpemVkLCBwcmV2ZW50aW5nIGEgcmVhZCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCBpcyBhIHJlbGllZi4KClRoZXJlZm9yZSwgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIEkmIzM5O3ZlIGNvbmNsdWRlZCB0aGVyZSYjMzk7cyBubyBwYXRoIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gYHN0cnVjdCBpbmV0cGVlcl9hZGRyYCBjYW4gYmUgbGVha2VkIHRvIHVzZXIgc3BhY2Ugb3IgY2F1c2UgYSBrZXJuZWwgdnVsbmVyYWJpbGl0eS4gVGhlIHBhZGRpbmcgYW5kIHVuaW9uIHdpdGhpbiB0aGUgc3RydWN0LCB3aGlsZSB0ZWNobmljYWxseSB1bmluaXRpYWxpemVkIGR1cmluZyBjb3B5LCBhcmUgc2FmZWx5IGhhbmRsZWQgYnkgc3Vic2VxdWVudCBjb2RlIHRoYXQgZWl0aGVyIGF2b2lkcyB0aGVpciB1c2Ugb3IgZW5zdXJlcyBwcm9wZXIgaW5pdGlhbGl6YXRpb24gYmVmb3JlIHVzYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaW5ldHBlZXJfYWRkciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pbmV0cGVlci5oPTIwPXN0cnVjdCBpcHY0X2FkZHJfa2V5IHtcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTI2LVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoyNzpzdHJ1Y3QgaW5ldHBlZXJfYWRkciB7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTI4LVx0dW5pb24ge1xuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg9MzY9c3RydWN0IGluZXRfcGVlciB7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0zOC1cdHU2NFx0XHRcdGhhc2g7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjM5Olx0c3RydWN0IGluZXRwZWVyX2FkZHJcdGRhZGRyO1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC00MC1cbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oPTcwPXZvaWQgaW5ldF9pbml0cGVlcnModm9pZCkgX19pbml0O1xuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtNzMtXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjc0OnN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0cGVlcl9zZXRfYWRkcl92NChzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIsIF9fYmUzMiBpcClcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtNzUte1xuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtODAtXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjgxOnN0YXRpYyBpbmxpbmUgX19iZTMyIGluZXRwZWVyX2dldF9hZGRyX3Y0KHN0cnVjdCBpbmV0cGVlcl9hZGRyICppYWRkcilcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtODIte1xuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtODUtXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjg2OnN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0cGVlcl9zZXRfYWRkcl92NihzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIsXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTg3LVx0XHRcdFx0XHRzdHJ1Y3QgaW42X2FkZHIgKmluNilcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTkyLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDo5MzpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbjZfYWRkciAqaW5ldHBlZXJfZ2V0X2FkZHJfdjYoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyKVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC05NC17XG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD05OT1zdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMDA6XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcik7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwMS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg9MTAyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwNS17XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjEwNjpcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIGRhZGRyO1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDctXG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0xMTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjYoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTE2LXtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTE3Olx0c3RydWN0IGluZXRwZWVyX2FkZHIgZGFkZHI7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTExOC1cbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEyMy1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTI0OnN0YXRpYyBpbmxpbmUgaW50IGluZXRwZWVyX2FkZHJfY21wKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphLFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMjU6XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmIpXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEyNi17XG4tLVxubmV0L2lwdjQvaW5ldHBlZXIuYz01Nj1zdGF0aWMgc2lwaGFzaF9hbGlnbmVkX2tleV90IGluZXRwZWVyX2hhc2hfa2V5IF9fcmVhZF9tb3N0bHk7XG5uZXQvaXB2NC9pbmV0cGVlci5jLTU3LVxubmV0L2lwdjQvaW5ldHBlZXIuYzo1ODpzdGF0aWMgdTY0IGluZXRwZWVyX2FkZHJfaGFzaChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSlcbm5ldC9pcHY0L2luZXRwZWVyLmMtNTkte1xuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmM9NzE9c3RhdGljIGludCBpbmV0cGVlcl9lbnRyeV9jbXAodTY0IGRoYXNoLFxubmV0L2lwdjQvaW5ldHBlZXIuYzo3MjpcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG5uZXQvaXB2NC9pbmV0cGVlci5jLTczLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0X3BlZXIgKnApXG4tLVxubmV0L2lwdjQvaW5ldHBlZXIuYz05OT12b2lkIF9faW5pdCBpbmV0X2luaXRwZWVycyh2b2lkKVxuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmMtMTE0LS8qIENhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSBvciBiYXNlLVx1MDAzZWxvY2sgaGVsZCAqL1xubmV0L2lwdjQvaW5ldHBlZXIuYzoxMTU6c3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG5uZXQvaXB2NC9pbmV0cGVlci5jLTExNi1cdFx0XHRcdHU2NCBkaGFzaCxcbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jPTE5OT1zdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxubmV0L2lwdjQvaW5ldHBlZXIuYzoyMDA6XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcilcbm5ldC9pcHY0L2luZXRwZWVyLmMtMjAxLXtcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTIzLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoyNDpzdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICpfX3RjcF9nZXRfbWV0cmljcyhjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqc2FkZHIsXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI1Olx0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjYtXHRcdFx0XHRcdFx0ICAgc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgaGFzaCk7XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz00MT1zdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sge1xuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtNDMtXHRzdHJ1Y3QgbmV0XHRcdFx0KnRjcG1fbmV0O1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo0NDpcdHN0cnVjdCBpbmV0cGVlcl9hZGRyXHRcdHRjcG1fc2FkZHI7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjQ1Olx0c3RydWN0IGluZXRwZWVyX2FkZHJcdFx0dGNwbV9kYWRkcjtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtNDYtXHR1bnNpZ25lZCBsb25nXHRcdFx0dGNwbV9zdGFtcDtcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTc0PXN0YXRpYyB2b2lkIHRjcF9tZXRyaWNfc2V0KHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG0sXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODI6c3RhdGljIGJvb2wgYWRkcl9zYW1lKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphLFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo4MzpcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmIpXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTg0LXtcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTE2Mz1zdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0Y3BtX25ldyhzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjE2NDpcdFx0XHRcdFx0ICBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqc2FkZHIsXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjE2NTpcdFx0XHRcdFx0ICBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTE2Ni1cdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgaGFzaClcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTIyMj1zdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0Y3BfZ2V0X2VuY29kZShzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtLCBpbnQgZGVwdGgpXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yMzAtXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjIzMTpzdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICpfX3RjcF9nZXRfbWV0cmljcyhjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqc2FkZHIsXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjIzMjpcdFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTIzMy1cdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBoYXNoKVxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9MjQ5PXN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKl9fdGNwX2dldF9tZXRyaWNzX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yNTItXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoyNTM6XHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBzYWRkciwgZGFkZHI7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI1NC1cdHVuc2lnbmVkIGludCBoYXNoO1xuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9MjkxPXN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRjcF9nZXRfbWV0cmljcyhzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yOTUtXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoyOTY6XHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBzYWRkciwgZGFkZHI7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI5Ny1cdHVuc2lnbmVkIGludCBoYXNoO1xuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9NzY3PXN0YXRpYyBpbnQgdGNwX21ldHJpY3NfbmxfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODAxLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo4MDI6c3RhdGljIGludCBfX3BhcnNlX25sX2FkZHIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGluZXRwZWVyX2FkZHIgKmFkZHIsXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgwMy1cdFx0XHQgICB1bnNpZ25lZCBpbnQgKmhhc2gsIGludCBvcHRpb25hbCwgaW50IHY0LCBpbnQgdjYpXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MjYtXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjgyNzpzdGF0aWMgaW50IHBhcnNlX25sX2FkZHIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGluZXRwZWVyX2FkZHIgKmFkZHIsXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgyOC1cdFx0XHQgdW5zaWduZWQgaW50ICpoYXNoLCBpbnQgb3B0aW9uYWwpXG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MzQtXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjgzNTpzdGF0aWMgaW50IHBhcnNlX25sX3NhZGRyKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBpbmV0cGVlcl9hZGRyICphZGRyKVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MzYte1xuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9ODQyPXN0YXRpYyBpbnQgdGNwX21ldHJpY3NfbmxfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODQ0LVx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0bTtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODQ1Olx0c3RydWN0IGluZXRwZWVyX2FkZHIgc2FkZHIsIGRhZGRyO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04NDYtXHR1bnNpZ25lZCBpbnQgaGFzaDtcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTkyOD1zdGF0aWMgaW50IHRjcF9tZXRyaWNzX25sX2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTkzMi1cdHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayBfX3JjdSAqKnBwO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo5MzM6XHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBzYWRkciwgZGFkZHI7XG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTkzNC1cdHVuc2lnbmVkIGludCBoYXNoO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU1OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmluaXRpYWxpemVkIEJ5dGVzIGluIGB0Y3BfbWV0cmljc19ibG9ja2AgLSBBIFF1aWNrIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGB0Y3BfbWV0cmljc19ibG9ja2Agc3RydWN0LCBhbmQgaXQmIzM5O3MgdXNpbmcgdGhlIGBpbmV0cGVlcl9hZGRyYCBzdHJ1Y3QgZm9yIGJvdGggc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMuIEhhbmcgb24sIHRoZSBgaW5ldHBlZXJfYWRkcmAgaXMgdXNlZCBpbiBhIGZldyBwbGFjZXMsIHNwZWNpZmljYWxseSwgaW5zaWRlIG9mIGB0Y3BfbWV0cmljc19ibG9ja2AsIGJ1dCBpZiBJIHJlY2FsbCwgYHRjcG1fbmV3YCBhbGxvY2F0ZXMgdGhlIGB0Y3BfbWV0cmljc19ibG9ja2AgYW5kIHRoZW4gY29waWVzIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBmcm9tIG90aGVyIHN0cnVjdHVyZXMuIFJpZ2h0LiBTbywgYHNhZGRyYCBhbmQgYGRhZGRyYCBhcmUgY29waWVkIGludG8gYHRjcG1fc2FkZHJgIGFuZCBgdGNwbV9kYWRkcmAsIGFuZCBpZiB0aG9zZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3Mgc3RydWN0dXJlcyBoYXZlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMsIHdvdWxkbiYjMzk7dCB0aGUgY29waWVzIGluaGVyaXQgdGhvc2UgdW5pbml0aWFsaXplZCB2YWx1ZXM/CgpUaGUgcXVlc3Rpb24gaXMsIGFyZSB0aGVzZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGJ5dGVzIGV2ZXIgZXhwb3NlZCB0byB1c2VyIHNwYWNlPyBJIHJlbWVtYmVyIHdlIGNoZWNrZWQgYHRjcF9tZXRyaWNzX2ZpbGxfaW5mb2AgZWFybGllciwgdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhlIG5ldGxpbmsgbWVzc2FnZS4gTG9va2luZyBhdCBpdCBhZ2FpbiwgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlIGBpbmV0cGVlcl9nZXRfYWRkcl92NGAgYW5kIGBpbmV0cGVlcl9nZXRfYWRkcl92NmAgZnVuY3Rpb25zLCBiYXNlZCBvbiB0aGUgYWRkcmVzcyBmYW1pbHksIHRvIHJldHJpZXZlIHRoZSBJUCBhZGRyZXNzZXMuIGBpbmV0cGVlcl9nZXRfYWRkcl92NGAgcmV0dXJucyBhIGBfX2JlMzJgLCBzbyBpdCYjMzk7cyBqdXN0IGNvcHlpbmcgdGhlIDQtYnl0ZSBJUHY0IGFkZHJlc3MsIHdoaWNoIHNob3VsZCBiZSBmaW5lLiAgTm93LCBgaW5ldHBlZXJfZ2V0X2FkZHJfdjZgLCB0aGF0IHJldHVybnMgYSBgc3RydWN0IGluNl9hZGRyICpgLiBUaGF0IGlzIDE2IGJ5dGVzLiBIbW1tLCBzbyBpdCYjMzk7cyBvbmx5IGNvcHlpbmcgdGhlIElQIGFkZHJlc3MgcG9ydGlvbiBvZiB0aGUgc3RydWN0dXJlLiBJIHRoaW5rIHRoYXQmIzM5O3Mgc2FmZSwgc2luY2UgaXQgZG9lc24mIzM5O3QgZXhwb3NlIGFueSBvZiB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSB2aWEgbmV0bGluay4KCkJ1dCB3YWl0LCB3aGF0IGFib3V0IGB0Y3BfbWV0cmljc19ubF9kdW1wYD8gIFRoYXQgZHVtcHMgdGhlIGJsb2NrIHZpYSBuZXRsaW5rIGFzIHdlbGwsIGFuZCB0aGVyZSYjMzk7cyBhIGNoYW5jZSBJIG1pZ2h0IGJlIG1pc3Npbmcgc29tZXRoaW5nIHRoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZnVuY3Rpb24gZG9lc24mIzM5O3QgZG8gYW55dGhpbmcgZGlmZmVyZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9tZXRyaWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc2NzpcdHN0YXRpYyBpbnQgdGNwX21ldHJpY3NfbmxfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDc2ODpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gNzY5Olx0e1xuIDc3MDpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbiA3NzE6XHRcdHVuc2lnbmVkIGludCBtYXhfcm93cyA9IDFVIFx1MDAzY1x1MDAzYyB0Y3BfbWV0cmljc19oYXNoX2xvZztcbiA3NzI6XHRcdHVuc2lnbmVkIGludCByb3csIHNfcm93ID0gY2ItXHUwMDNlYXJnc1swXTtcbiA3NzM6XHRcdGludCBzX2NvbCA9IGNiLVx1MDAzZWFyZ3NbMV0sIGNvbCA9IHNfY29sO1xuIDc3NDpcdFx0aW50IHJlcyA9IDA7XG4gNzc1Olx0XG4gNzc2Olx0XHRmb3IgKHJvdyA9IHNfcm93OyByb3cgXHUwMDNjIG1heF9yb3dzOyByb3cmIzQzOyYjNDM7LCBzX2NvbCA9IDApIHtcbiA3Nzc6XHRcdFx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0bTtcbiA3Nzg6XHRcdFx0c3RydWN0IHRjcG1faGFzaF9idWNrZXQgKmhiID0gdGNwX21ldHJpY3NfaGFzaCAmIzQzOyByb3c7XG4gNzc5Olx0XG4gNzgwOlx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiA3ODE6XHRcdFx0Zm9yIChjb2wgPSAwLCB0bSA9IHJjdV9kZXJlZmVyZW5jZShoYi1cdTAwM2VjaGFpbik7IHRtO1xuIDc4MjpcdFx0XHQgICAgIHRtID0gcmN1X2RlcmVmZXJlbmNlKHRtLVx1MDAzZXRjcG1fbmV4dCksIGNvbCYjNDM7JiM0MzspIHtcbiA3ODM6XHRcdFx0XHRpZiAoIW5ldF9lcSh0bV9uZXQodG0pLCBuZXQpKVxuIDc4NDpcdFx0XHRcdFx0Y29udGludWU7XG4gNzg1Olx0XHRcdFx0aWYgKGNvbCBcdTAwM2Mgc19jb2wpXG4gNzg2Olx0XHRcdFx0XHRjb250aW51ZTtcbiA3ODc6XHRcdFx0XHRyZXMgPSB0Y3BfbWV0cmljc19kdW1wX2luZm8oc2tiLCBjYiwgdG0pO1xuIDc4ODpcdFx0XHRcdGlmIChyZXMgXHUwMDNjIDApIHtcbiA3ODk6XHRcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDc5MDpcdFx0XHRcdFx0Z290byBkb25lO1xuIDc5MTpcdFx0XHRcdH1cbiA3OTI6XHRcdFx0fVxuIDc5MzpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA3OTQ6XHRcdH1cbiA3OTU6XHRcbiA3OTY6XHRkb25lOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBpbmV0cGVlcl9hZGRyX2NtcCoqCgpPa2F5LCBzbyBgdGNwX21ldHJpY3NfZHVtcF9pbmZvYCBjYWxscyBgdGNwX21ldHJpY3NfZmlsbF9pbmZvYC4gUmlnaHQuIE5vIGltbWVkaWF0ZSBsZWFrIHRoZXJlLiBUaGF0JiMzOTtzIGdvb2QgdG8gZXN0YWJsaXNoLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgYW5kIG1ldGljdWxvdXNseSByZXZpZXcgdGhpcyBwYXRjaC4gQWgsIGl0JiMzOTtzIG1vZGlmeWluZyBgaW5ldHBlZXJfYWRkcl9jbXBgLiBPa2F5LCBnb3QgaXQuCgpIbW0uIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBmdW5jdGlvbiBgaW5ldHBlZXJfYWRkcl9jbXBgICpkaWRuJiMzOTt0KiBpbmNsdWRlIGEgY2hlY2sgZm9yIHRoZSBhZGRyZXNzIGZhbWlsaWVzIGJlaW5nIGRpZmZlcmVudC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gV2Ugc2hvdWxkIGRlZmluaXRlbHkgZ28gYmFjayBhbmQgbG9vayBhdCB0aGUgb3JpZ2luYWwgYGluZXRwZWVyX2FkZHJfY21wYCBiZWZvcmUgdGhlIHBhdGNoIHdhcyBhcHBsaWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBleGFjdGx5IGhhcyBjaGFuZ2VkIGluIGl0cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pbmV0cGVlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjQ6XHRzdGF0aWMgaW5saW5lIGludCBpbmV0cGVlcl9hZGRyX2NtcChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSxcbiAxMjU6XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYilcbiAxMjY6XHR7XG4gMTI3Olx0XHRpbnQgaSwgbjtcbiAxMjg6XHRcbiAxMjk6XHRcdGlmIChhLVx1MDAzZWZhbWlseSAhPSBiLVx1MDAzZWZhbWlseSlcbiAxMzA6XHRcdFx0cmV0dXJuIGEtXHUwMDNlZmFtaWx5IFx1MDAzYyBiLVx1MDAzZWZhbWlseSA/IC0xIDogMTtcbiAxMzE6XHRcbiAxMzI6XHRcdGlmIChhLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUKVxuIDEzMzpcdFx0XHRuID0gc2l6ZW9mKGEtXHUwMDNlYTQpIC8gc2l6ZW9mKHUzMik7XG4gMTM0Olx0XHRlbHNlXG4gMTM1Olx0XHRcdG4gPSBzaXplb2YoYS1cdTAwM2VhNikgLyBzaXplb2YodTMyKTtcbiAxMzY6XHRcbiAxMzc6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkmIzQzOyYjNDM7KSB7XG4gMTM4Olx0XHRcdGlmIChhLVx1MDAzZWtleVtpXSA9PSBiLVx1MDAzZWtleVtpXSlcbiAxMzk6XHRcdFx0XHRjb250aW51ZTtcbiAxNDA6XHRcdFx0aWYgKGEtXHUwMDNla2V5W2ldIFx1MDAzYyBiLVx1MDAzZWtleVtpXSlcbiAxNDE6XHRcdFx0XHRyZXR1cm4gLTE7XG4gMTQyOlx0XHRcdHJldHVybiAxO1xuIDE0MzpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTg1NwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEzOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IElQdjQvSVB2NiBBZGRyZXNzIENvbXBhcmlzb24gYW5kIEhhc2hpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIE15IGByZWFkLWZpbGVgIG91dHB1dCBhbHJlYWR5IHNob3dzIHRoZSBmYW1pbHkgY2hlY2sgaW4gYGluZXRwZWVyX2FkZHJfY21wYC4gSXQgc2VlbXMgdGhlIHBhdGNoIGlzIGFscmVhZHkgYXBwbGllZCBpbiB0aGUgdHJlZSBJJiMzOTttIHJlYWRpbmcuIEluaXRpYWxseSwgdGhlIGNvZGUgZGlkbiYjMzk7dCBleHBsaWNpdGx5IGNvbXBhcmUgdGhlIGFkZHJlc3MgZmFtaWxpZXMuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIHdvdWxkIHNlbGVjdCB0aGUgY29tcGFyaXNvbiBzaXplIChgbmApIGJhc2VkIG9uIHRoZSBmYW1pbHkgYW5kIHRoZW4gdXNlIHRoYXQgc2l6ZSB0byBjb21wYXJlIG1lbW9yeS4gVGhhdCBjb3VsZCBsZWFkIHRvIGEgY29tcGFyaXNvbiBiZXR3ZWVuIGFuIElQdjQgYWRkcmVzcyBhbmQgdGhlIGluaXRpYWwgYnl0ZXMgb2YgYW4gSVB2Ni4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGEgYnVnIGZpeCB0byBjb21wYXJlIHRoZSBmYW1pbGllcy4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHByb2JsZW1zLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIGNvZGUgYWRkcyBhIGhhc2ggZnVuY3Rpb24gKGBpbmV0cGVlcl9hZGRyX2hhc2hgKSwgdXNpbmcgYHNpcGhhc2hfMnUzMmAgZm9yIElQdjQgYW5kIGBzaXBoYXNoXzR1MzJgIGZvciBJUHY2LCBidXQgY3J1Y2lhbGx5LCBpdCBvbmx5IGhhc2hlcyBpbml0aWFsaXplZCBmaWVsZHMsIHNvIHRoYXQgbG9va3Mgc2FmZS4KClRoZSBwYXRjaCBhbHNvIHJlcGxhY2VzIGBpbmV0cGVlcl9hZGRyX2NtcGAgd2l0aCBgaW5ldHBlZXJfZW50cnlfY21wYCBpbnNpZGUgdGhlIGBsb29rdXBgIGZ1bmN0aW9uLiBBZGRpdGlvbmFsbHksIGBkaGFzaGAgYW5kIGBwLSZndDtoYXNoYCB3ZXJlIGFkZGVkIHRvIHRoZSBgaW5ldF9wZWVyYCBzdHJ1Y3QuIFRoaXMgaXMgcmVsYXRlZCB0byB0aGUgaGFzaGluZywgc28gbm8gaXNzdWVzIHRoZXJlLgoKVGhlIHBhdGNoIGluY2x1ZGVzIGEgY2hlY2sgYWdhaW5zdCBhIHRocmVzaG9sZCwgbGltaXRpbmcgYWxsb2NhdGlvbiBvZiBuZXcgcGVlcnMuIEl0IGluaXRpYWxpemVzIHRoZSBgZGFkZHJgIGZpZWxkIHdpdGggYSBzdHJ1Y3QgYXNzaWdubWVudCBhbmQgYWxzbyBzZXRzIHRoZSBoYXNoLiBUaGlzIHN0cnVjdCBhc3NpZ25tZW50IGNvdWxkIGJlIGEgcHJvYmxlbSwgc2luY2UgdGhlIGBpbmV0cGVlcl9hZGRyYCBzdHJ1Y3QgaGFzIHBhZGRpbmcgdGhhdCYjMzk7cyB1bmluaXRpYWxpemVkIGlmIG9ubHkgdGhlIGBBRl9JTkVUYCBmYW1pbHkgaXMgdXNlZC4gS01TQU4gc2hvdWxkIGNhdGNoIGFueSByZWFkcywgYnV0IGxldCYjMzk7cyBiZSBzdXJlLgoKTGV0JiMzOTtzIHNlZToKKiAgIEluIGBpbmV0cGVlcl9hZGRyX2hhc2hgLCBvbmx5IHRoZSBgYTQuYWRkcmAgYW5kIGBhNC52aWZgIGFyZSByZWFkLgoqICAgSW4gYGluZXRwZWVyX2FkZHJfY21wYCwgb25seSBgYTQuYWRkcmAgYW5kIGBhNC52aWZgIGFyZSByZWFkIChhbGlhc2VkIHZpYSBgczZfYWRkcjMyYCB3aGVuIHByb2Nlc3NpbmcgSVB2NikuCiogICBJbiBgdGNwX21ldHJpY3NfZmlsbF9pbmZvYCwgb25seSBgYTQuYWRkcmAgaXMgcmVhZC4KClNvIHRoZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgZnJvbSB0aGUgc3RydWN0IGFzc2lnbm1lbnQgaW4gYGluZXRfZ2V0cGVlcmAgaXMgbmV2ZXIgYWN0dWFsbHkgcmVhZCBvciBsZWFrZWQgaW4gdGhlc2UgZnVuY3Rpb25zLiBJJiMzOTtkIHN0aWxsIGxpa2UgdG8gbG9vayBhdCBvdGhlciB1c2VycyBvZiBgc3RydWN0IGluZXRfcGVlcmAsIGJ1dCBzbyBmYXIsIHRoaXMgbG9va3MgbGlrZSBhIGNsZWFuIGJ1ZyBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBpbmV0X3BlZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0yNz1zdHJ1Y3QgaW5ldHBlZXJfYWRkciB7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0zNS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MzY6c3RydWN0IGluZXRfcGVlciB7XG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTM3LVx0c3RydWN0IHJiX25vZGVcdFx0cmJfbm9kZTtcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTYxLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDo2MjpzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2Uge1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC02My1cdHN0cnVjdCByYl9yb290XHRcdHJiX3Jvb3Q7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC02Ny1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6Njg6dm9pZCBpbmV0X3BlZXJfYmFzZV9pbml0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqKTtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtNjktXG4tLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD05Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbjZfYWRkciAqaW5ldHBlZXJfZ2V0X2FkZHJfdjYoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyKVxuLS1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtOTgtLyogY2FuIGJlIGNhbGxlZCB3aXRoIG9yIHdpdGhvdXQgbG9jYWwgQkggYmVpbmcgZGlzYWJsZWQgKi9cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6OTk6c3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTAwLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIpO1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDEtXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjEwMjpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NChzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwMy1cdFx0XHRcdFx0XHRfX2JlMzIgdjRkYWRkcixcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTExMy1cbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTE0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y2KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTE1LVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdjZkYWRkcilcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oPTEyND1zdGF0aWMgaW5saW5lIGludCBpbmV0cGVlcl9hZGRyX2NtcChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSxcbi0tXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTE0OC0vKiBjYW4gYmUgY2FsbGVkIGZyb20gQkggY29udGV4dCBvciBvdXRzaWRlICovXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjE0OTp2b2lkIGluZXRfcHV0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyICpwKTtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTUwOmJvb2wgaW5ldF9wZWVyX3hybGltX2FsbG93KHN0cnVjdCBpbmV0X3BlZXIgKnBlZXIsIGludCB0aW1lb3V0KTtcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTUxLVxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxNTI6dm9pZCBpbmV0cGVlcl9pbnZhbGlkYXRlX3RyZWUoc3RydWN0IGluZXRfcGVlcl9iYXNlICopO1xuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xNTMtXG4tLVxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oPTM5MT1zdHJ1Y3QgZmliNl90YWJsZSB7XG4tLVxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTM5NS1cdHN0cnVjdCBmaWI2X25vZGVcdHRiNl9yb290O1xuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oOjM5NjpcdHN0cnVjdCBpbmV0X3BlZXJfYmFzZVx0dGI2X3BlZXJzO1xuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTM5Ny1cdHVuc2lnbmVkIGludFx0XHRmbGFncztcbi0tXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0Lmg9NTU9c3RydWN0IG5ldG5zX2lwdjQge1xuLS1cbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0xMzYtXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0Lmg6MTM3Olx0c3RydWN0IGluZXRfcGVlcl9iYXNlXHQqcGVlcnM7XG5pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgtMTM4LVx0c3RydWN0IGZxZGlyXHRcdCpmcWRpcjtcbi0tXG5pbmNsdWRlL25ldC9uZXRucy9pcHY2Lmg9NjY9c3RydWN0IG5ldG5zX2lwdjYge1xuLS1cbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaC03Mi1cdHN0cnVjdCBpcHY2X2RldmNvbmZcdCpkZXZjb25mX2RmbHQ7XG5pbmNsdWRlL25ldC9uZXRucy9pcHY2Lmg6NzM6XHRzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2VcdCpwZWVycztcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaC03NC1cdHN0cnVjdCBmcWRpclx0XHQqZnFkaXI7XG4tLVxubmV0L2lwdjQvaWNtcC5jPTMxMT1zdGF0aWMgYm9vbCBpY21wdjRfeHJsaW1fYWxsb3coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcnRhYmxlICpydCxcbi0tXG5uZXQvaXB2NC9pY21wLmMtMzE1LVx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gXHUwMDI2cnQtXHUwMDNlZHN0O1xubmV0L2lwdjQvaWNtcC5jOjMxNjpcdHN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7XG5uZXQvaXB2NC9pY21wLmMtMzE3LVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jLTQ3LSAqICAzLiAgR2xvYmFsIHZhcmlhYmxlIHBlZXJfdG90YWwgaXMgbW9kaWZpZWQgdW5kZXIgdGhlIHBvb2wgbG9jay5cbm5ldC9pcHY0L2luZXRwZWVyLmM6NDg6ICogIDQuICBzdHJ1Y3QgaW5ldF9wZWVyIGZpZWxkcyBtb2RpZmljYXRpb246XG5uZXQvaXB2NC9pbmV0cGVlci5jLTQ5LSAqXHRcdHJiX25vZGU6IHBvb2wgbG9ja1xuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmM9NzE9c3RhdGljIGludCBpbmV0cGVlcl9lbnRyeV9jbXAodTY0IGRoYXNoLFxubmV0L2lwdjQvaW5ldHBlZXIuYy03Mi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG5uZXQvaXB2NC9pbmV0cGVlci5jOjczOlx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0X3BlZXIgKnApXG5uZXQvaXB2NC9pbmV0cGVlci5jLTc0LXtcbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jLTgyLVxubmV0L2lwdjQvaW5ldHBlZXIuYzo4Mzp2b2lkIGluZXRfcGVlcl9iYXNlX2luaXQoc3RydWN0IGluZXRfcGVlcl9iYXNlICpicClcbm5ldC9pcHY0L2luZXRwZWVyLmMtODQte1xuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmM9OTk9dm9pZCBfX2luaXQgaW5ldF9pbml0cGVlcnModm9pZClcbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jLTEwNi1cdG5yX2VudHJpZXMgPSBkaXY2NF91bCgodTY0KXRvdGFscmFtX3BhZ2VzKCkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG5uZXQvaXB2NC9pbmV0cGVlci5jOjEwNzpcdFx0XHQgICAgICAxMDAgKiBMMV9DQUNIRV9BTElHTihzaXplb2Yoc3RydWN0IGluZXRfcGVlcikpKTtcbm5ldC9pcHY0L2luZXRwZWVyLmMtMTA4LVxuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmMtMTE0LS8qIENhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSBvciBiYXNlLVx1MDAzZWxvY2sgaGVsZCAqL1xubmV0L2lwdjQvaW5ldHBlZXIuYzoxMTU6c3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG5uZXQvaXB2NC9pbmV0cGVlci5jLTExNi1cdFx0XHRcdHU2NCBkaGFzaCxcbm5ldC9pcHY0L2luZXRwZWVyLmM6MTE3Olx0XHRcdFx0c3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxubmV0L2lwdjQvaW5ldHBlZXIuYy0xMTgtXHRcdFx0XHR1bnNpZ25lZCBpbnQgc2VxLFxubmV0L2lwdjQvaW5ldHBlZXIuYzoxMTk6XHRcdFx0XHRzdHJ1Y3QgaW5ldF9wZWVyICpnY19zdGFja1tdLFxubmV0L2lwdjQvaW5ldHBlZXIuYy0xMjAtXHRcdFx0XHR1bnNpZ25lZCBpbnQgKmdjX2NudCxcbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jLTEyNC1cdHN0cnVjdCByYl9ub2RlICoqcHAsICpwYXJlbnQsICpuZXh0O1xubmV0L2lwdjQvaW5ldHBlZXIuYzoxMjU6XHRzdHJ1Y3QgaW5ldF9wZWVyICpwO1xubmV0L2lwdjQvaW5ldHBlZXIuYy0xMjYtXHR1MzIgbm93O1xuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmMtMTM2LVx0XHRwYXJlbnQgPSBuZXh0O1xubmV0L2lwdjQvaW5ldHBlZXIuYzoxMzc6XHRcdHAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBpbmV0X3BlZXIsIHJiX25vZGUpO1xubmV0L2lwdjQvaW5ldHBlZXIuYy0xMzgtXHRcdGNtcCA9IGluZXRwZWVyX2VudHJ5X2NtcChkaGFzaCwgZGFkZHIsIHApO1xuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmMtMTYxLS8qIHBlcmZvcm0gZ2FyYmFnZSBjb2xsZWN0IG9uIGFsbCBpdGVtcyBzdGFja2VkIGR1cmluZyBhIGxvb2t1cCAqL1xubmV0L2lwdjQvaW5ldHBlZXIuYzoxNjI6c3RhdGljIHZvaWQgaW5ldF9wZWVyX2djKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcbm5ldC9pcHY0L2luZXRwZWVyLmM6MTYzOlx0XHRcdCBzdHJ1Y3QgaW5ldF9wZWVyICpnY19zdGFja1tdLFxubmV0L2lwdjQvaW5ldHBlZXIuYy0xNjQtXHRcdFx0IHVuc2lnbmVkIGludCBnY19jbnQpXG4tLVxubmV0L2lwdjQvaW5ldHBlZXIuYy0xNjYtXHRpbnQgcGVlcl90aHJlc2hvbGQsIHBlZXJfbWF4dHRsLCBwZWVyX21pbnR0bDtcbm5ldC9pcHY0L2luZXRwZWVyLmM6MTY3Olx0c3RydWN0IGluZXRfcGVlciAqcDtcbm5ldC9pcHY0L2luZXRwZWVyLmMtMTY4LVx0X191MzIgZGVsdGEsIHR0bDtcbi0tXG5uZXQvaXB2NC9pbmV0cGVlci5jLTE5OC0vKiBNdXN0IGJlIGNhbGxlZCB1bmRlciBSQ1UgOiBObyByZWZjb3VudCBjaGFuZ2UgaXMgZG9uZSBoZXJlLiAqL1xubmV0L2lwdjQvaW5ldHBlZXIuYzoxOTk6c3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcbm5ldC9pcHY0L2luZXRwZWVyLmMtMjAwLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIpXG5uZXQvaXB2NC9pbmV0cGVlci5jLTIwMS17XG5uZXQvaXB2NC9pbmV0cGVlci5jOjIwMjpcdHN0cnVjdCBpbmV0X3BlZXIgKnAsICpnY19zdGFja1tQRUVSX01BWF9HQ107XG5uZXQvaXB2NC9pbmV0cGVlci5jLTIwMy1cdHU2NCBkaGFzaCA9IGluZXRwZWVyX2FkZHJfaGFzaChkYWRkcik7XG4tLVxubmV0L2lwdjQvaW5ldHBlZXIuYy0yNTMtXG5uZXQvaXB2NC9pbmV0cGVlci5jOjI1NDp2b2lkIGluZXRfcHV0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyICpwKVxubmV0L2lwdjQvaW5ldHBlZXIuYy0yNTUte1xuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmMtMjc3LSNkZWZpbmUgWFJMSU1fQlVSU1RfRkFDVE9SIDZcbm5ldC9pcHY0L2luZXRwZWVyLmM6Mjc4OmJvb2wgaW5ldF9wZWVyX3hybGltX2FsbG93KHN0cnVjdCBpbmV0X3BlZXIgKnBlZXIsIGludCB0aW1lb3V0KVxubmV0L2lwdjQvaW5ldHBlZXIuYy0yNzkte1xuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmMtMzAzLVxubmV0L2lwdjQvaW5ldHBlZXIuYzozMDQ6dm9pZCBpbmV0cGVlcl9pbnZhbGlkYXRlX3RyZWUoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlKVxubmV0L2lwdjQvaW5ldHBlZXIuYy0zMDUte1xuLS1cbm5ldC9pcHY0L2luZXRwZWVyLmMtMzA4LVx0d2hpbGUgKHApIHtcbm5ldC9pcHY0L2luZXRwZWVyLmM6MzA5Olx0XHRzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyID0gcmJfZW50cnkocCwgc3RydWN0IGluZXRfcGVlciwgcmJfbm9kZSk7XG5uZXQvaXB2NC9pbmV0cGVlci5jLTMxMC1cbi0tXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jPTYxPXN0cnVjdCBpcHEge1xuLS1cbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtNjctXHR1bnNpZ25lZCBpbnQgICAgcmlkO1xubmV0L2lwdjQvaXBfZnJhZ21lbnQuYzo2ODpcdHN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7XG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTY5LX07XG4tLVxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYz04Mz1zdGF0aWMgdm9pZCBpcDRfZnJhZ19pbml0KHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnEsIGNvbnN0IHZvaWQgKmEpXG4tLVxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYy04Ny1cdHN0cnVjdCBuZXQgKm5ldCA9IHEtXHUwMDNlZnFkaXItXHUwMDNlbmV0O1xubmV0L2lwdjQvaXBfZnJhZ21lbnQuYzo4ODpcdHN0cnVjdCBpbmV0X3BlZXIgKnAgPSBOVUxMO1xubmV0L2lwdjQvaXBfZnJhZ21lbnQuYy04OS1cbi0tXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jPTIyMD1zdGF0aWMgaW50IGlwX2ZyYWdfdG9vX2ZhcihzdHJ1Y3QgaXBxICpxcClcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtMjIxLXtcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmM6MjIyOlx0c3RydWN0IGluZXRfcGVlciAqcGVlciA9IHFwLVx1MDAzZXBlZXI7XG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTIyMy1cdHVuc2lnbmVkIGludCBtYXggPSBxcC1cdTAwM2VxLmZxZGlyLVx1MDAzZW1heF9kaXN0O1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9OTAyPXZvaWQgaXBfcnRfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtOTA1LVx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xubmV0L2lwdjQvcm91dGUuYzo5MDY6XHRzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyO1xubmV0L2lwdjQvcm91dGUuYy05MDctXHRzdHJ1Y3QgbmV0ICpuZXQ7XG4tLVxubmV0L2lwdjQvcm91dGUuYz05NjU9c3RhdGljIGludCBpcF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtOTY5LVx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xubmV0L2lwdjQvcm91dGUuYzo5NzA6XHRzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyO1xubmV0L2lwdjQvcm91dGUuYy05NzEtXHR1bnNpZ25lZCBsb25nIG5vdztcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTM3MTI9c3RhdGljIGludCBfX25ldF9pbml0IGlwdjRfaW5ldHBlZXJfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvaXB2NC9yb3V0ZS5jLTM3MTMte1xubmV0L2lwdjQvcm91dGUuYzozNzE0Olx0c3RydWN0IGluZXRfcGVlcl9iYXNlICpicCA9IGttYWxsb2Nfb2JqKCpicCk7XG5uZXQvaXB2NC9yb3V0ZS5jLTM3MTUtXG4tLVxubmV0L2lwdjQvcm91dGUuYz0zNzIzPXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXB2NF9pbmV0cGVlcl9leGl0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9pcHY0L3JvdXRlLmMtMzcyNC17XG5uZXQvaXB2NC9yb3V0ZS5jOjM3MjU6XHRzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJwID0gbmV0LVx1MDAzZWlwdjQucGVlcnM7XG5uZXQvaXB2NC9yb3V0ZS5jLTM3MjYtXG4tLVxubmV0L2lwdjYvaWNtcC5jPTE5NT1zdGF0aWMgYm9vbCBpY21wdjZfeHJsaW1fYWxsb3coc3RydWN0IHNvY2sgKnNrLCB1OCB0eXBlLFxuLS1cbm5ldC9pcHY2L2ljbXAuYy0yMjAtXHRcdGludCB0bW8gPSBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjYuc3lzY3RsLmljbXB2Nl90aW1lKTtcbm5ldC9pcHY2L2ljbXAuYzoyMjE6XHRcdHN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7XG5uZXQvaXB2Ni9pY21wLmMtMjIyLVxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz01MTk9aW50IGlwNl9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTYyMy1cdFx0c3RydWN0IGluNl9hZGRyICp0YXJnZXQgPSBOVUxMO1xubmV0L2lwdjYvaXA2X291dHB1dC5jOjYyNDpcdFx0c3RydWN0IGluZXRfcGVlciAqcGVlcjtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy02MjUtXHRcdHN0cnVjdCBydDZfaW5mbyAqcnQ7XG4tLVxubmV0L2lwdjYvbmRpc2MuYz0xNjU1PXZvaWQgbmRpc2Nfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnRhcmdldClcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTE2NjAtXHRpbnQgb3B0bGVuID0gMDtcbm5ldC9pcHY2L25kaXNjLmM6MTY2MTpcdHN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7XG5uZXQvaXB2Ni9uZGlzYy5jLTE2NjItXHRzdHJ1Y3Qgc2tfYnVmZiAqYnVmZjtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTY3OTk9c3RhdGljIGludCBfX25ldF9pbml0IGlwdjZfaW5ldHBlZXJfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvaXB2Ni9yb3V0ZS5jLTY4MDAte1xubmV0L2lwdjYvcm91dGUuYzo2ODAxOlx0c3RydWN0IGluZXRfcGVlcl9iYXNlICpicCA9IGttYWxsb2Nfb2JqKCpicCk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTY4MDItXG4tLVxubmV0L2lwdjYvcm91dGUuYz02ODEwPXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXB2Nl9pbmV0cGVlcl9leGl0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9pcHY2L3JvdXRlLmMtNjgxMS17XG5uZXQvaXB2Ni9yb3V0ZS5jOjY4MTI6XHRzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJwID0gbmV0LVx1MDAzZWlwdjYucGVlcnM7XG5uZXQvaXB2Ni9yb3V0ZS5jLTY4MTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNDcxCgkJCQkJCQlvdXRwdXQ6IDIzNQoJCQkJCQkJdGhvdWdodHM6IDk3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYHN0cnVjdCBpbmV0X3BlZXJgLiBJdCYjMzk7cyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCBmb3IgdGhpbmdzIGxpa2UgSUNNUCByYXRlIGxpbWl0aW5nIGFuZCByb3V0aW5nIHJlZGlyZWN0cywgbm90aGluZyB1c2VyLXNwYWNlIGRpcmVjdGx5IHRvdWNoZXMuIFRoZSBjb3JlIGNoYW5nZSBoZXJlIHNlZW1zIHRvIGJlIGFkZGluZyBhIGBoYXNoYCBmaWVsZCB0byB0aGUgc3RydWN0IHRvIHNwZWVkIHVwIGxvb2t1cHMgaW4gdGhlIHJlZC1ibGFjayB0cmVlLCB3aGljaCBpcyBhIGdvb2Qgb3B0aW1pemF0aW9uLgoKTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGhhc2ggaXMgZGVyaXZlZCBmcm9tIGBkYWRkcmAsIGFuZCB0aGF0JiMzOTtzIGluaXRpYWxpemVkLCBzbyB0aGF0JiMzOTtzIGdvb2QuIFRoZSBwYXRjaCBhbHNvIGluY2x1ZGVzIGEgYGZhbWlseWAgY2hlY2sgaW4gYGluZXRwZWVyX2FkZHJfY21wYC4gYGZhbWlseWAgaXMgKmFsc28qIGFsd2F5cyBpbml0aWFsaXplZC4gV2UmIzM5O3ZlIGdvdCBhIHRocmVzaG9sZCBjaGVjayBiZWZvcmUgYWxsb2NhdGlvbiwgYnV0IHRoYXQgc2hvdWxkbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgcmVhZCBpc3N1ZXMuCgpOb3csIHRoZXJlJiMzOTtzIHNvbWUgcGFkZGluZyBpbiBgc3RydWN0IGluZXRwZWVyX2FkZHJgIGZvciBJUHY0LCBidXQgdGhhdCBwYWRkaW5nJiMzOTtzIG9ubHkgKmNvcGllZCogd2hlbiBgcC0mZ3Q7ZGFkZHIgPSAqZGFkZHI7YCBleGVjdXRlcy4gQ3J1Y2lhbGx5LCBpdCYjMzk7cyAqbmV2ZXIqIHJlYWQgb3IgZXhwb3NlZC4gS01TQU4sIG9mIGNvdXJzZSwgaXMgd2hhdCB3ZSB1c2UgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTaW5jZSB0aGUgcGFkZGluZyBpcyBuZXZlciByZWFkLCBLTVNBTiB3aWxsIHJlbWFpbiBzaWxlbnQsIHdoaWNoIGlzIHdoYXQgd2Ugd2FudC4KCk5vdywgd2FpdCBhIG1pbnV0ZS4uLiBLTVNBTiAqZG9lcyogY29tcGxhaW4gYWJvdXQgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBicmFuY2hlcyBvciBtZW1vcnkgYWNjZXNzZXMsIGFuZCBhbHNvIHdoZW4gY29weWluZyB0byB1c2VyIHNwYWNlLiBPa2F5LCBzbyB3ZSBoYXZlIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlIHRoYXQgdGhpcyBwYWRkaW5nIGlzIG5ldmVyIHVzZWQsIGV2ZW4gYnkgYWNjaWRlbnQsIGluIGEgY29uZGl0aW9uYWwuIExldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2guIFRoZSBoYXNoIGZ1bmN0aW9uIGFuZCB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbiBleHBsaWNpdGx5IHJlYWQgb25seSBpbml0aWFsaXplZCBmaWVsZHMuIEFuZCBvZiBjb3Vyc2UsIG5vdGhpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gc2hvdWxkbiYjMzk7dCBmbGFnIGFueXRoaW5nLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2UgZXhwZWN0LgoKU28sIGluIHNob3J0LCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gdGVzdGluZy4gVGhlc2UgYXJlIHB1cmVseSBpbnRlcm5hbCBsb2dpYyBvcHRpbWl6YXRpb25zIGFuZCBidWcgZml4ZXMgZm9yIHRoZSBJUHY0IHZzIElQdjYgY29tcGFyaXNvbi4KCk5vdywganVzdCB0byBiZSAqZXh0cmEqIGNhdXRpb3VzLCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBwb3RlbnRpYWwgZm9yIG91dC1vZi1ib3VuZHMgcmVhZHMgaW4gdGhvc2UgaGFzaCBmdW5jdGlvbnMgYW5kIGNvbXBhcmlzb25zLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRob3NlIGBzaXBoYXNoXzJ1MzJgIGFuZCBgc2lwaGFzaF80dTMyYCBmdW5jdGlvbnMgYXJlbiYjMzk7dCBkb2luZyBhbnl0aGluZyBuYXN0eS4gT2theSwgdGhleSB0YWtlIGB1MzJgIHZhbHVlcyAqYnkgdmFsdWUqLiBgYTQuYWRkcmAgaXMgYF9fYmUzMmAgKDQgYnl0ZXMpLCBgYTQudmlmYCBpcyBgX191MzJgICg0IGJ5dGVzKS4gIFNvLCBubyBvdXQtb2YtYm91bmRzIHJlYWQgd2l0aCBgc2lwaGFzaF8ydTMyYC4gU2FtZSB3aXRoIGBzaXBoYXNoXzR1MzJgOyB0aGUgYXJyYXkgYGE2LnM2X2FkZHIzMmAgaXMgYW4gYXJyYXkgb2YgZm91ciBgdTMyYHMsIGFuZCB0aGV5JiMzOTtyZSBwYXNzZWQgYnkgdmFsdWUuIFNvLCBubyBvdXQtb2YtYm91bmRzIHJlYWRzIHRoZXJlLCBlaXRoZXIuIFRoYXQmIzM5O3MgZ29vZC4KCk5vdywgZm9yIGBpbmV0cGVlcl9hZGRyX2NtcGAsIGxldCYjMzk7cyBjaGVjayBpdCBpbiBkZXRhaWw6CldoZW4gY29tcGFyaW5nIEFGX0lORVQgYWRkcmVzc2VzLCBgbiA9IDJgLiBUaGUgY29kZSBjb21wYXJlcyBgYTYuczZfYWRkcjMyWzBdYCBhbmQgYFsxXWAuIGBhNi5zNl9hZGRyMzJbMF1gIGFsaWFzZXMgd2l0aCBgYTQuYWRkcmAsIGFuZCBgYTYuczZfYWRkcjMyWzFdYCBhbGlhc2VzIHdpdGggYGE0LnZpZmAuICBUaGlzICppcyogc2FmZSBhbmQgb25seSByZWFkcyBpbml0aWFsaXplZCBtZW1vcnkuCgpTbywgdG8gc3VtbWFyaXplIGV2ZXJ5dGhpbmc6IFRoZSBwYXRjaCBpcyBhIG1vZGlmaWNhdGlvbiBvZiBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcyBhbmQgbG9naWMgZm9yIElQIHBlZXIgdHJhY2tpbmcsIGFkZGluZyBhIGhhc2ggZmllbGQgdG8gb3B0aW1pemUgdGhlIFJCLXRyZWUgYW5kIGZpeGluZyB0aGF0IElQdjQvSVB2NiBjb21wYXJpc29uLiBBbGwgdGhlIGZpZWxkcyB1c2VkIGZvciBoYXNoaW5nIGFuZCBjb21wYXJpbmcgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyBuZXcgZGF0YSBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZWQgaW4gYW55IGJyYW5jaGVzIG9yIGNhbGN1bGF0aW9ucy4gVGhlcmVmb3JlLCBhIHNwZWNpYWxpemVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpc24mIzM5O3QgbmVlZGVkLiBTdGFuZGFyZCBLQVNBTiB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCBtaWdodCBleGlzdC4gR29vZCwgdGhpcyBsb29rcyBzb2xpZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIGBpbmV0X3BlZXJgIHRyYWNraW5nIG1lY2hhbmlzbSBieSBhZGRpbmcgYSBoYXNoIGZpZWxkIHRvIG9wdGltaXplIHJlZC1ibGFjayB0cmVlIGxvb2t1cHMgYW5kIGZpeGluZyBhIGNvbXBhcmlzb24gYnVnIGJldHdlZW4gSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMuIFRoZSBuZXcgaGFzaCBmdW5jdGlvbiAoYGluZXRwZWVyX2FkZHJfaGFzaGApIGFuZCB0aGUgbW9kaWZpZWQgY29tcGFyaXNvbiBmdW5jdGlvbiAoYGluZXRwZWVyX2VudHJ5X2NtcGApIGV4cGxpY2l0bHkgb25seSByZWFkIHRoZSBpbml0aWFsaXplZCBmaWVsZHMgb2YgdGhlIGBpbmV0cGVlcl9hZGRyYCB1bmlvbiAoYGE0LmFkZHJgIGFuZCBgYTQudmlmYCBmb3IgSVB2NCwgYW5kIGBhNi5zNl9hZGRyMzJgIGZvciBJUHY2KS4gV2hpbGUgdGhlIGBpbmV0cGVlcl9hZGRyYCB1bmlvbiBjb250YWlucyB1bmluaXRpYWxpemVkIHBhZGRpbmcgZm9yIElQdjQgYWRkcmVzc2VzLCB0aGlzIHBhZGRpbmcgaXMgbmV2ZXIgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYGluZXRfcGVlcmAgc3RydWN0dXJlIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBrZXJuZWwgdHJhY2tpbmcgc3RydWN0dXJlIGFuZCBpcyBub3QgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIGBpbmV0X3BlZXJgIHRyYWNraW5nIG1lY2hhbmlzbSBieSBhZGRpbmcgYSBoYXNoIGZpZWxkIHRvIG9wdGltaXplIHJlZC1ibGFjayB0cmVlIGxvb2t1cHMgYW5kIGZpeGluZyBhIGNvbXBhcmlzb24gYnVnIGJldHdlZW4gSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMuIFRoZSBuZXcgaGFzaCBmdW5jdGlvbiAoYGluZXRwZWVyX2FkZHJfaGFzaGApIGFuZCB0aGUgbW9kaWZpZWQgY29tcGFyaXNvbiBmdW5jdGlvbiAoYGluZXRwZWVyX2VudHJ5X2NtcGApIGV4cGxpY2l0bHkgb25seSByZWFkIHRoZSBpbml0aWFsaXplZCBmaWVsZHMgb2YgdGhlIGBpbmV0cGVlcl9hZGRyYCB1bmlvbiAoYGE0LmFkZHJgIGFuZCBgYTQudmlmYCBmb3IgSVB2NCwgYW5kIGBhNi5zNl9hZGRyMzJgIGZvciBJUHY2KS4gV2hpbGUgdGhlIGBpbmV0cGVlcl9hZGRyYCB1bmlvbiBjb250YWlucyB1bmluaXRpYWxpemVkIHBhZGRpbmcgZm9yIElQdjQgYWRkcmVzc2VzLCB0aGlzIHBhZGRpbmcgaXMgbmV2ZXIgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYGluZXRfcGVlcmAgc3RydWN0dXJlIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBrZXJuZWwgdHJhY2tpbmcgc3RydWN0dXJlIGFuZCBpcyBub3QgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozMzowNi4wNDA4NDk3MjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODg3NzYzNjU3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImluZXRfZ2V0cGVlclwiLFxuICAgIFwiaW5ldF9wZWVyX3hybGltX2FsbG93XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgYGluZXRfcGVlcmAgdHJhY2tpbmcgbWVjaGFuaXNtIGJ5IGFkZGluZyBhIGhhc2ggZmllbGQgdG8gb3B0aW1pemUgcmVkLWJsYWNrIHRyZWUgbG9va3VwcyBhbmQgZml4aW5nIGEgY29tcGFyaXNvbiBidWcgYmV0d2VlbiBJUHY0IGFuZCBJUHY2IGFkZHJlc3Nlcy4gVGhlIG5ldyBoYXNoIGZ1bmN0aW9uIChgaW5ldHBlZXJfYWRkcl9oYXNoYCkgYW5kIHRoZSBtb2RpZmllZCBjb21wYXJpc29uIGZ1bmN0aW9uIChgaW5ldHBlZXJfZW50cnlfY21wYCkgZXhwbGljaXRseSBvbmx5IHJlYWQgdGhlIGluaXRpYWxpemVkIGZpZWxkcyBvZiB0aGUgYGluZXRwZWVyX2FkZHJgIHVuaW9uIChgYTQuYWRkcmAgYW5kIGBhNC52aWZgIGZvciBJUHY0LCBhbmQgYGE2LnM2X2FkZHIzMmAgZm9yIElQdjYpLiBXaGlsZSB0aGUgYGluZXRwZWVyX2FkZHJgIHVuaW9uIGNvbnRhaW5zIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBmb3IgSVB2NCBhZGRyZXNzZXMsIHRoaXMgcGFkZGluZyBpcyBuZXZlciByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBgaW5ldF9wZWVyYCBzdHJ1Y3R1cmUgaXMgcHVyZWx5IGFuIGludGVybmFsIGtlcm5lbCB0cmFja2luZyBzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhhc2gtYmFzZWQgbG9va3VwIGZvciBpbmV0X3BlZXIgc3RydWN0dXJlcywgbW9kaWZ5aW5nIGluZXRfZ2V0cGVlciB0byB1c2Ugc2lwaGFzaCBmb3IgdHJlZSBpbnNlcnRpb24gYW5kIGxvb2t1cC4gSXQgYWxzbyBjaGFuZ2VzIGluZXRfcGVlcl94cmxpbV9hbGxvdyB0byByZXR1cm4gZmFsc2Ugd2hlbiBwZWVyIGlzIE5VTEwsIGFuZCBsaW1pdHMgdGhlIGFsbG9jYXRpb24gb2YgbmV3IHBlZXJzIGJhc2VkIG9uIGluZXRfcGVlcl90aHJlc2hvbGQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgSVB2NC9JUHY2IG5ldHdvcmtpbmcgbG9naWMsIHNwZWNpZmljYWxseSBJQ01QIHJhdGUgbGltaXRpbmcgYW5kIElQIGZyYWdtZW50YXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjMzOjA2LjA0MDg1NDUzNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEyMDQ2NTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWNmN2Y0MDAyMTNlMTExMWU4NmZhMjQ0NWY2MWZhNzY0NzQ0ODUyMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAyMTozMzowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0cGVlci5oIGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaFxcbmluZGV4IGY0NzU3NTdkYWFmYmEuLjQxNGU5YWRmNGM1MTEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2luZXRwZWVyLmhcXG5AQCAtMzUsNiArMzUsNyBAQCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciB7XFxuIFxcbiBzdHJ1Y3QgaW5ldF9wZWVyIHtcXG4gXFx0c3RydWN0IHJiX25vZGVcXHRcXHRyYl9ub2RlO1xcbitcXHR1NjRcXHRcXHRcXHRoYXNoO1xcbiBcXHRzdHJ1Y3QgaW5ldHBlZXJfYWRkclxcdGRhZGRyO1xcbiBcXG4gXFx0dTMyXFx0XFx0XFx0bWV0cmljc1tSVEFYX01BWF07XFxuQEAgLTEyNSw2ICsxMjYsOSBAQCBzdGF0aWMgaW5saW5lIGludCBpbmV0cGVlcl9hZGRyX2NtcChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSxcXG4ge1xcbiBcXHRpbnQgaSwgbjtcXG4gXFxuK1xcdGlmIChhLVxcdTAwM2VmYW1pbHkgIT0gYi1cXHUwMDNlZmFtaWx5KVxcbitcXHRcXHRyZXR1cm4gYS1cXHUwMDNlZmFtaWx5IFxcdTAwM2MgYi1cXHUwMDNlZmFtaWx5ID8gLTEgOiAxO1xcbitcXG4gXFx0aWYgKGEtXFx1MDAzZWZhbWlseSA9PSBBRl9JTkVUKVxcbiBcXHRcXHRuID0gc2l6ZW9mKGEtXFx1MDAzZWE0KSAvIHNpemVvZih1MzIpO1xcbiBcXHRlbHNlXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRwZWVyLmMgYi9uZXQvaXB2NC9pbmV0cGVlci5jXFxuaW5kZXggNWI5NTdhODMxZTdjMy4uOTY4NzFmNTIwMTBmMyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pbmV0cGVlci5jXFxuKysrIGIvbmV0L2lwdjQvaW5ldHBlZXIuY1xcbkBAIC0yMSw2ICsyMSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0cGVlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3NlY3VyZV9zZXEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NpcGhhc2guaFxcdTAwM2VcXG4gXFxuIC8qXFxuICAqICBUaGVvcnkgb2Ygb3BlcmF0aW9ucy5cXG5AQCAtNTIsNiArNTMsMzIgQEBcXG4gICovXFxuIFxcbiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBlZXJfY2FjaGVwIF9fcm9fYWZ0ZXJfaW5pdDtcXG4rc3RhdGljIHNpcGhhc2hfYWxpZ25lZF9rZXlfdCBpbmV0cGVlcl9oYXNoX2tleSBfX3JlYWRfbW9zdGx5O1xcbitcXG4rc3RhdGljIHU2NCBpbmV0cGVlcl9hZGRyX2hhc2goY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmEpXFxuK3tcXG4rXFx0aWYgKGEtXFx1MDAzZWZhbWlseSA9PSBBRl9JTkVUKVxcbitcXHRcXHRyZXR1cm4gc2lwaGFzaF8ydTMyKChfX2ZvcmNlIHUzMilhLVxcdTAwM2VhNC5hZGRyLCBhLVxcdTAwM2VhNC52aWYsXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2aW5ldHBlZXJfaGFzaF9rZXkpO1xcbitcXG4rXFx0cmV0dXJuIHNpcGhhc2hfNHUzMigoX19mb3JjZSB1MzIpYS1cXHUwMDNlYTYuczZfYWRkcjMyWzBdLFxcbitcXHRcXHRcXHQgICAgKF9fZm9yY2UgdTMyKWEtXFx1MDAzZWE2LnM2X2FkZHIzMlsxXSxcXG4rXFx0XFx0XFx0ICAgIChfX2ZvcmNlIHUzMilhLVxcdTAwM2VhNi5zNl9hZGRyMzJbMl0sXFxuK1xcdFxcdFxcdCAgICAoX19mb3JjZSB1MzIpYS1cXHUwMDNlYTYuczZfYWRkcjMyWzNdLFxcbitcXHRcXHRcXHQgICAgXFx1MDAyNmluZXRwZWVyX2hhc2hfa2V5KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpbmV0cGVlcl9lbnRyeV9jbXAodTY0IGRoYXNoLFxcbitcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXFxuK1xcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0X3BlZXIgKnApXFxuK3tcXG4rXFx0aWYgKGRoYXNoIFxcdTAwM2MgcC1cXHUwMDNlaGFzaClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRpZiAoZGhhc2ggXFx1MDAzZSBwLVxcdTAwM2VoYXNoKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdHJldHVybiBpbmV0cGVlcl9hZGRyX2NtcChkYWRkciwgXFx1MDAyNnAtXFx1MDAzZWRhZGRyKTtcXG4rfVxcbiBcXG4gdm9pZCBpbmV0X3BlZXJfYmFzZV9pbml0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYnApXFxuIHtcXG5AQCAtNzMsNiArMTAwLDggQEAgdm9pZCBfX2luaXQgaW5ldF9pbml0cGVlcnModm9pZClcXG4ge1xcbiBcXHR1NjQgbnJfZW50cmllcztcXG4gXFxuK1xcdGdldF9yYW5kb21fYnl0ZXMoXFx1MDAyNmluZXRwZWVyX2hhc2hfa2V5LCBzaXplb2YoaW5ldHBlZXJfaGFzaF9rZXkpKTtcXG4rXFxuIFxcdCAvKiAxJSBvZiBwaHlzaWNhbCBtZW1vcnkgKi9cXG4gXFx0bnJfZW50cmllcyA9IGRpdjY0X3VsKCh1NjQpdG90YWxyYW1fcGFnZXMoKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbiBcXHRcXHRcXHQgICAgICAxMDAgKiBMMV9DQUNIRV9BTElHTihzaXplb2Yoc3RydWN0IGluZXRfcGVlcikpKTtcXG5AQCAtODQsNiArMTEzLDcgQEAgdm9pZCBfX2luaXQgaW5ldF9pbml0cGVlcnModm9pZClcXG4gXFxuIC8qIENhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSBvciBiYXNlLVxcdTAwM2Vsb2NrIGhlbGQgKi9cXG4gc3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXFxuK1xcdFxcdFxcdFxcdHU2NCBkaGFzaCxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbiBcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgc2VxLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5ldF9wZWVyICpnY19zdGFja1tdLFxcbkBAIC0xMDUsNyArMTM1LDcgQEAgc3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRwYXJlbnQgPSBuZXh0O1xcbiBcXHRcXHRwID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgaW5ldF9wZWVyLCByYl9ub2RlKTtcXG4tXFx0XFx0Y21wID0gaW5ldHBlZXJfYWRkcl9jbXAoZGFkZHIsIFxcdTAwMjZwLVxcdTAwM2VkYWRkcik7XFxuK1xcdFxcdGNtcCA9IGluZXRwZWVyX2VudHJ5X2NtcChkaGFzaCwgZGFkZHIsIHApO1xcbiBcXHRcXHRpZiAoY21wID09IDApIHtcXG4gXFx0XFx0XFx0bm93ID0gamlmZmllcztcXG4gXFx0XFx0XFx0aWYgKFJFQURfT05DRShwLVxcdTAwM2VkdGltZSkgIT0gbm93KVxcbkBAIC0xNzAsNiArMjAwLDcgQEAgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG4gXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcilcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5ldF9wZWVyICpwLCAqZ2Nfc3RhY2tbUEVFUl9NQVhfR0NdO1xcbitcXHR1NjQgZGhhc2ggPSBpbmV0cGVlcl9hZGRyX2hhc2goZGFkZHIpO1xcbiBcXHRzdHJ1Y3QgcmJfbm9kZSAqKnBwLCAqcGFyZW50O1xcbiBcXHR1bnNpZ25lZCBpbnQgZ2NfY250LCBzZXE7XFxuIFxcbkBAIC0xNzcsNyArMjA4LDcgQEAgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG4gXFx0ICogQmVjYXVzZSBvZiBhIGNvbmN1cnJlbnQgd3JpdGVyLCB3ZSBtaWdodCBub3QgZmluZCBhbiBleGlzdGluZyBlbnRyeS5cXG4gXFx0ICovXFxuIFxcdHNlcSA9IHJlYWRfc2VxYmVnaW4oXFx1MDAyNmJhc2UtXFx1MDAzZWxvY2spO1xcbi1cXHRwID0gbG9va3VwKGRhZGRyLCBiYXNlLCBzZXEsIE5VTEwsIFxcdTAwMjZnY19jbnQsIFxcdTAwMjZwYXJlbnQsIFxcdTAwMjZwcCk7XFxuK1xcdHAgPSBsb29rdXAoZGFkZHIsIGRoYXNoLCBiYXNlLCBzZXEsIE5VTEwsIFxcdTAwMjZnY19jbnQsIFxcdTAwMjZwYXJlbnQsIFxcdTAwMjZwcCk7XFxuIFxcbiBcXHQvKiBNYWtlIHN1cmUgdHJlZSB3YXMgbm90IG1vZGlmaWVkIGR1cmluZyBvdXIgbG9va3VwLiAqL1xcbiBcXHRpZiAocCBcXHUwMDI2XFx1MDAyNiAhcmVhZF9zZXFyZXRyeShcXHUwMDI2YmFzZS1cXHUwMDNlbG9jaywgc2VxKSlcXG5AQCAtMTkwLDExICsyMjEsMTMgQEAgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG4gXFx0d3JpdGVfc2VxbG9ja19iaChcXHUwMDI2YmFzZS1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHRnY19jbnQgPSAwO1xcbi1cXHRwID0gbG9va3VwKGRhZGRyLCBiYXNlLCBzZXEsIGdjX3N0YWNrLCBcXHUwMDI2Z2NfY250LCBcXHUwMDI2cGFyZW50LCBcXHUwMDI2cHApO1xcbitcXHRwID0gbG9va3VwKGRhZGRyLCBkaGFzaCwgYmFzZSwgc2VxLCBnY19zdGFjaywgXFx1MDAyNmdjX2NudCwgXFx1MDAyNnBhcmVudCwgXFx1MDAyNnBwKTtcXG4gXFx0aWYgKCFwKSB7XFxuLVxcdFxcdHAgPSBrbWVtX2NhY2hlX2FsbG9jKHBlZXJfY2FjaGVwLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0aWYgKCh1NjQpYmFzZS1cXHUwMDNldG90YWwgXFx1MDAzYyAyVUxMICogUkVBRF9PTkNFKGluZXRfcGVlcl90aHJlc2hvbGQpKVxcbitcXHRcXHRcXHRwID0ga21lbV9jYWNoZV9hbGxvYyhwZWVyX2NhY2hlcCwgR0ZQX0FUT01JQyk7XFxuIFxcdFxcdGlmIChwKSB7XFxuIFxcdFxcdFxcdHAtXFx1MDAzZWRhZGRyID0gKmRhZGRyO1xcbitcXHRcXHRcXHRwLVxcdTAwM2VoYXNoID0gZGhhc2g7XFxuIFxcdFxcdFxcdHAtXFx1MDAzZWR0aW1lID0gKF9fdTMyKWppZmZpZXM7XFxuIFxcdFxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2cC1cXHUwMDNlcmVmY250LCAxKTtcXG4gXFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cC1cXHUwMDNlcmlkLCAwKTtcXG5AQCAtMjQ4LDcgKzI4MSw3IEBAIGJvb2wgaW5ldF9wZWVyX3hybGltX2FsbG93KHN0cnVjdCBpbmV0X3BlZXIgKnBlZXIsIGludCB0aW1lb3V0KVxcbiBcXHRib29sIHJjID0gZmFsc2U7XFxuIFxcbiBcXHRpZiAoIXBlZXIpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHR0b2tlbiA9IG90b2tlbiA9IFJFQURfT05DRShwZWVyLVxcdTAwM2VyYXRlX3Rva2Vucyk7XFxuIFxcdG5vdyA9IGppZmZpZXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjMzOjA2LjQ1MzY4NDU1MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM5NTY1MjYxNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbmV0X2dldHBlZXJcIixcbiAgICBcImluZXRfcGVlcl94cmxpbV9hbGxvd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBoYXNoLWJhc2VkIGxvb2t1cCBmb3IgaW5ldF9wZWVyIHN0cnVjdHVyZXMsIG1vZGlmeWluZyBpbmV0X2dldHBlZXIgdG8gdXNlIHNpcGhhc2ggZm9yIHRyZWUgaW5zZXJ0aW9uIGFuZCBsb29rdXAuIEl0IGFsc28gY2hhbmdlcyBpbmV0X3BlZXJfeHJsaW1fYWxsb3cgdG8gcmV0dXJuIGZhbHNlIHdoZW4gcGVlciBpcyBOVUxMLCBhbmQgbGltaXRzIHRoZSBhbGxvY2F0aW9uIG9mIG5ldyBwZWVycyBiYXNlZCBvbiBpbmV0X3BlZXJfdGhyZXNob2xkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIElQdjQvSVB2NiBuZXR3b3JraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgSUNNUCByYXRlIGxpbWl0aW5nIGFuZCBJUCBmcmFnbWVudGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhY2Y3ZjQwMDIxM2UxMTExZTg2ZmEyNDQ1ZjYxZmE3NjQ3NDQ4NTIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMjE6MzM6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0cGVlci5oIGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaFxuaW5kZXggZjQ3NTc1N2RhYWZiYS4uNDE0ZTlhZGY0YzUxMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmhcbisrKyBiL2luY2x1ZGUvbmV0L2luZXRwZWVyLmhcbkBAIC0zNSw2ICszNSw3IEBAIHN0cnVjdCBpbmV0cGVlcl9hZGRyIHtcbiBcbiBzdHJ1Y3QgaW5ldF9wZWVyIHtcbiBcdHN0cnVjdCByYl9ub2RlXHRcdHJiX25vZGU7XG4rXHR1NjRcdFx0XHRoYXNoO1xuIFx0c3RydWN0IGluZXRwZWVyX2FkZHJcdGRhZGRyO1xuIFxuIFx0dTMyXHRcdFx0bWV0cmljc1tSVEFYX01BWF07XG5AQCAtMTI1LDYgKzEyNiw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGluZXRwZWVyX2FkZHJfY21wKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphLFxuIHtcbiBcdGludCBpLCBuO1xuIFxuK1x0aWYgKGEtXHUwMDNlZmFtaWx5ICE9IGItXHUwMDNlZmFtaWx5KVxuK1x0XHRyZXR1cm4gYS1cdTAwM2VmYW1pbHkgXHUwMDNjIGItXHUwMDNlZmFtaWx5ID8gLTEgOiAxO1xuK1xuIFx0aWYgKGEtXHUwMDNlZmFtaWx5ID09IEFGX0lORVQpXG4gXHRcdG4gPSBzaXplb2YoYS1cdTAwM2VhNCkgLyBzaXplb2YodTMyKTtcbiBcdGVsc2VcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0cGVlci5jIGIvbmV0L2lwdjQvaW5ldHBlZXIuY1xuaW5kZXggNWI5NTdhODMxZTdjMy4uOTY4NzFmNTIwMTBmMyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2luZXRwZWVyLmNcbisrKyBiL25ldC9pcHY0L2luZXRwZWVyLmNcbkBAIC0yMSw2ICsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldHBlZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zZWN1cmVfc2VxLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXBoYXNoLmhcdTAwM2VcbiBcbiAvKlxuICAqICBUaGVvcnkgb2Ygb3BlcmF0aW9ucy5cbkBAIC01Miw2ICs1MywzMiBAQFxuICAqL1xuIFxuIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGVlcl9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xuK3N0YXRpYyBzaXBoYXNoX2FsaWduZWRfa2V5X3QgaW5ldHBlZXJfaGFzaF9rZXkgX19yZWFkX21vc3RseTtcbitcbitzdGF0aWMgdTY0IGluZXRwZWVyX2FkZHJfaGFzaChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSlcbit7XG4rXHRpZiAoYS1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVClcbitcdFx0cmV0dXJuIHNpcGhhc2hfMnUzMigoX19mb3JjZSB1MzIpYS1cdTAwM2VhNC5hZGRyLCBhLVx1MDAzZWE0LnZpZixcbitcdFx0XHRcdCAgICBcdTAwMjZpbmV0cGVlcl9oYXNoX2tleSk7XG4rXG4rXHRyZXR1cm4gc2lwaGFzaF80dTMyKChfX2ZvcmNlIHUzMilhLVx1MDAzZWE2LnM2X2FkZHIzMlswXSxcbitcdFx0XHQgICAgKF9fZm9yY2UgdTMyKWEtXHUwMDNlYTYuczZfYWRkcjMyWzFdLFxuK1x0XHRcdCAgICAoX19mb3JjZSB1MzIpYS1cdTAwM2VhNi5zNl9hZGRyMzJbMl0sXG4rXHRcdFx0ICAgIChfX2ZvcmNlIHUzMilhLVx1MDAzZWE2LnM2X2FkZHIzMlszXSxcbitcdFx0XHQgICAgXHUwMDI2aW5ldHBlZXJfaGFzaF9rZXkpO1xuK31cbitcbitzdGF0aWMgaW50IGluZXRwZWVyX2VudHJ5X2NtcCh1NjQgZGhhc2gsXG4rXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLFxuK1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0X3BlZXIgKnApXG4re1xuK1x0aWYgKGRoYXNoIFx1MDAzYyBwLVx1MDAzZWhhc2gpXG4rXHRcdHJldHVybiAtMTtcbitcdGlmIChkaGFzaCBcdTAwM2UgcC1cdTAwM2VoYXNoKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdHJldHVybiBpbmV0cGVlcl9hZGRyX2NtcChkYWRkciwgXHUwMDI2cC1cdTAwM2VkYWRkcik7XG4rfVxuIFxuIHZvaWQgaW5ldF9wZWVyX2Jhc2VfaW5pdChzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJwKVxuIHtcbkBAIC03Myw2ICsxMDAsOCBAQCB2b2lkIF9faW5pdCBpbmV0X2luaXRwZWVycyh2b2lkKVxuIHtcbiBcdHU2NCBucl9lbnRyaWVzO1xuIFxuK1x0Z2V0X3JhbmRvbV9ieXRlcyhcdTAwMjZpbmV0cGVlcl9oYXNoX2tleSwgc2l6ZW9mKGluZXRwZWVyX2hhc2hfa2V5KSk7XG4rXG4gXHQgLyogMSUgb2YgcGh5c2ljYWwgbWVtb3J5ICovXG4gXHRucl9lbnRyaWVzID0gZGl2NjRfdWwoKHU2NCl0b3RhbHJhbV9wYWdlcygpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIFx0XHRcdCAgICAgIDEwMCAqIEwxX0NBQ0hFX0FMSUdOKHNpemVvZihzdHJ1Y3QgaW5ldF9wZWVyKSkpO1xuQEAgLTg0LDYgKzExMyw3IEBAIHZvaWQgX19pbml0IGluZXRfaW5pdHBlZXJzKHZvaWQpXG4gXG4gLyogQ2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpIG9yIGJhc2UtXHUwMDNlbG9jayBoZWxkICovXG4gc3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG4rXHRcdFx0XHR1NjQgZGhhc2gsXG4gXHRcdFx0XHRzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4gXHRcdFx0XHR1bnNpZ25lZCBpbnQgc2VxLFxuIFx0XHRcdFx0c3RydWN0IGluZXRfcGVlciAqZ2Nfc3RhY2tbXSxcbkBAIC0xMDUsNyArMTM1LDcgQEAgc3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHBhcmVudCA9IG5leHQ7XG4gXHRcdHAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBpbmV0X3BlZXIsIHJiX25vZGUpO1xuLVx0XHRjbXAgPSBpbmV0cGVlcl9hZGRyX2NtcChkYWRkciwgXHUwMDI2cC1cdTAwM2VkYWRkcik7XG4rXHRcdGNtcCA9IGluZXRwZWVyX2VudHJ5X2NtcChkaGFzaCwgZGFkZHIsIHApO1xuIFx0XHRpZiAoY21wID09IDApIHtcbiBcdFx0XHRub3cgPSBqaWZmaWVzO1xuIFx0XHRcdGlmIChSRUFEX09OQ0UocC1cdTAwM2VkdGltZSkgIT0gbm93KVxuQEAgLTE3MCw2ICsyMDAsNyBAQCBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIpXG4ge1xuIFx0c3RydWN0IGluZXRfcGVlciAqcCwgKmdjX3N0YWNrW1BFRVJfTUFYX0dDXTtcbitcdHU2NCBkaGFzaCA9IGluZXRwZWVyX2FkZHJfaGFzaChkYWRkcik7XG4gXHRzdHJ1Y3QgcmJfbm9kZSAqKnBwLCAqcGFyZW50O1xuIFx0dW5zaWduZWQgaW50IGdjX2NudCwgc2VxO1xuIFxuQEAgLTE3Nyw3ICsyMDgsNyBAQCBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuIFx0ICogQmVjYXVzZSBvZiBhIGNvbmN1cnJlbnQgd3JpdGVyLCB3ZSBtaWdodCBub3QgZmluZCBhbiBleGlzdGluZyBlbnRyeS5cbiBcdCAqL1xuIFx0c2VxID0gcmVhZF9zZXFiZWdpbihcdTAwMjZiYXNlLVx1MDAzZWxvY2spO1xuLVx0cCA9IGxvb2t1cChkYWRkciwgYmFzZSwgc2VxLCBOVUxMLCBcdTAwMjZnY19jbnQsIFx1MDAyNnBhcmVudCwgXHUwMDI2cHApO1xuK1x0cCA9IGxvb2t1cChkYWRkciwgZGhhc2gsIGJhc2UsIHNlcSwgTlVMTCwgXHUwMDI2Z2NfY250LCBcdTAwMjZwYXJlbnQsIFx1MDAyNnBwKTtcbiBcbiBcdC8qIE1ha2Ugc3VyZSB0cmVlIHdhcyBub3QgbW9kaWZpZWQgZHVyaW5nIG91ciBsb29rdXAuICovXG4gXHRpZiAocCBcdTAwMjZcdTAwMjYgIXJlYWRfc2VxcmV0cnkoXHUwMDI2YmFzZS1cdTAwM2Vsb2NrLCBzZXEpKVxuQEAgLTE5MCwxMSArMjIxLDEzIEBAIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4gXHR3cml0ZV9zZXFsb2NrX2JoKFx1MDAyNmJhc2UtXHUwMDNlbG9jayk7XG4gXG4gXHRnY19jbnQgPSAwO1xuLVx0cCA9IGxvb2t1cChkYWRkciwgYmFzZSwgc2VxLCBnY19zdGFjaywgXHUwMDI2Z2NfY250LCBcdTAwMjZwYXJlbnQsIFx1MDAyNnBwKTtcbitcdHAgPSBsb29rdXAoZGFkZHIsIGRoYXNoLCBiYXNlLCBzZXEsIGdjX3N0YWNrLCBcdTAwMjZnY19jbnQsIFx1MDAyNnBhcmVudCwgXHUwMDI2cHApO1xuIFx0aWYgKCFwKSB7XG4tXHRcdHAgPSBrbWVtX2NhY2hlX2FsbG9jKHBlZXJfY2FjaGVwLCBHRlBfQVRPTUlDKTtcbitcdFx0aWYgKCh1NjQpYmFzZS1cdTAwM2V0b3RhbCBcdTAwM2MgMlVMTCAqIFJFQURfT05DRShpbmV0X3BlZXJfdGhyZXNob2xkKSlcbitcdFx0XHRwID0ga21lbV9jYWNoZV9hbGxvYyhwZWVyX2NhY2hlcCwgR0ZQX0FUT01JQyk7XG4gXHRcdGlmIChwKSB7XG4gXHRcdFx0cC1cdTAwM2VkYWRkciA9ICpkYWRkcjtcbitcdFx0XHRwLVx1MDAzZWhhc2ggPSBkaGFzaDtcbiBcdFx0XHRwLVx1MDAzZWR0aW1lID0gKF9fdTMyKWppZmZpZXM7XG4gXHRcdFx0cmVmY291bnRfc2V0KFx1MDAyNnAtXHUwMDNlcmVmY250LCAxKTtcbiBcdFx0XHRhdG9taWNfc2V0KFx1MDAyNnAtXHUwMDNlcmlkLCAwKTtcbkBAIC0yNDgsNyArMjgxLDcgQEAgYm9vbCBpbmV0X3BlZXJfeHJsaW1fYWxsb3coc3RydWN0IGluZXRfcGVlciAqcGVlciwgaW50IHRpbWVvdXQpXG4gXHRib29sIHJjID0gZmFsc2U7XG4gXG4gXHRpZiAoIXBlZXIpXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHR0b2tlbiA9IG90b2tlbiA9IFJFQURfT05DRShwZWVyLVx1MDAzZXJhdGVfdG9rZW5zKTtcbiBcdG5vdyA9IGppZmZpZXM7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozMzowNi40NTM2ODU4NDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDU4OTE0NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW5ldHBlZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgbmV0L2lwdjQvaW5ldHBlZXIuY2AgYW5kIGBpbmNsdWRlL25ldC9pbmV0cGVlci5oYC4gU2VlbXMgbGlrZSB0aGV5J3JlIGFkZGluZyBhIGBoYXNoYCBmaWVsZCB0byB0aGUgYHN0cnVjdCBpbmV0X3BlZXJgIGFuZCB1c2luZyBgc2lwaGFzaGAgdG8gZ2VuZXJhdGUgYSBoYXNoIG9mIHRoZSBJUCBhZGRyZXNzLCBzdG9yaW5nIGl0IGluIHRoYXQgZmllbGQuIFRoYXTigJlzIGludGVyZXN0aW5nLiBBIGhhc2gtYmFzZWQgbG9va3VwIGNvdWxkIHNwZWVkIHRoaW5ncyB1cCBjb25zaWRlcmFibHksIGRlcGVuZGluZyBvbiBob3cgdGhleeKAmXZlIGltcGxlbWVudGVkIHRoZSBjb2xsaXNpb24gaGFuZGxpbmcuIFRoZXkndmUgYWxzbyBtb2RpZmllZCBgaW5ldHBlZXJfYWRkcl9jbXBgIHRvIGNoZWNrIHRoZSBmYW1pbHkgZmlyc3QsIHdoaWNoIGlzIGEgZ29vZCBvcHRpbWl6YXRpb24uXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiBob3cgYGluZXRfZ2V0cGVlcmAgaGFuZGxlcyBsb29rdXBzIGFuZCBpbnNlcnRpb24sIGxldmVyYWdpbmcgdGhpcyBuZXcgaGFzaCBmaWVsZC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24uIFRoZSBvdGhlciBtb2RpZmljYXRpb24sIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgLCBqdXN0IHNlZW1zIHRvIHJldHVybiBgZmFsc2VgIGlmIHRoZSBwZWVyIGlzIG51bGwsIHdoaWNoLCBob25lc3RseSwgc2VlbXMgbGlrZSBhIGJ1ZyBmaXgg4oCTIGJldHRlciBzYWZlIHRoYW4gc29ycnksIGFuZCBpdCBzaG91bGQgcHJldmVudCBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZS5cblxuTGV0J3Mgc2Vl4oCmIHRoZXkndmUgYWxzbyB0b3VjaGVkIGBpbmV0cGVlcl9hZGRyX2hhc2hgLCBgaW5ldHBlZXJfZW50cnlfY21wYCwgYGluZXRfaW5pdHBlZXJzYCwgYW5kIHRoZSBgbG9va3VwYCBmdW5jdGlvbi4gU28gaXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgYWxsIHN0YXRpYyBvciBpbmxpbmUgaGVscGVyIGZ1bmN0aW9ucywgd2hpY2ggSSBuZWVkIHRvIGV4YW1pbmUgZm9yIHJlYWNoYWJpbGl0eS5cblxuT2theSwgbGV0J3Mgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBjYWxscyB0byBgaW5ldF9nZXRwZWVyYCBhbmQgYGluZXRfcGVlcl94cmxpbV9hbGxvd2AgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlIGNvbnRleHQgYW5kIGltcGFjdC4gVGhvc2UgYXJlIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMsIHNvIHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBJIHNob3VsZCBiZSBmb2N1c2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzMCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjMzOjExLjkxMjYwMzA5MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU5NDQ1MDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfZ2V0cGVlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pbmV0cGVlci5oPTkzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGluNl9hZGRyICppbmV0cGVlcl9nZXRfYWRkcl92NihzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIpXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTk4LS8qIGNhbiBiZSBjYWxsZWQgd2l0aCBvciB3aXRob3V0IGxvY2FsIEJIIGJlaW5nIGRpc2FibGVkICovXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDo5OTpzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTAwLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIpO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTAxLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTAyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwMy1cXHRcXHRcXHRcXHRcXHRcXHRfX2JlMzIgdjRkYWRkcixcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTEwLVxcdGRhZGRyLmZhbWlseSA9IEFGX0lORVQ7XFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMTE6XFx0cmV0dXJuIGluZXRfZ2V0cGVlcihiYXNlLCBcXHUwMDI2ZGFkZHIpO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTEyLX1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTExMy1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjExNDpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMTUtXFx0XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICp2NmRhZGRyKVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMjAtXFx0ZGFkZHIuZmFtaWx5ID0gQUZfSU5FVDY7XFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMjE6XFx0cmV0dXJuIGluZXRfZ2V0cGVlcihiYXNlLCBcXHUwMDI2ZGFkZHIpO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTIyLX1cXG4tLVxcbm5ldC9pcHY0L2ljbXAuYz0zMTE9c3RhdGljIGJvb2wgaWNtcHY0X3hybGltX2FsbG93KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHJ0YWJsZSAqcnQsXFxuLS1cXG5uZXQvaXB2NC9pY21wLmMtMzMzLVxcbm5ldC9pcHY0L2ljbXAuYzozMzQ6XFx0cGVlciA9IGluZXRfZ2V0cGVlcl92NChuZXQtXFx1MDAzZWlwdjQucGVlcnMsIGZsNC1cXHUwMDNlZGFkZHIsXFxubmV0L2lwdjQvaWNtcC5jLTMzNS1cXHRcXHRcXHQgICAgICAgbDNtZGV2X21hc3Rlcl9pZmluZGV4X3JjdShkZXYpKTtcXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmM9MTYyPXN0YXRpYyB2b2lkIGluZXRfcGVlcl9nYyhzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTE5OC0vKiBNdXN0IGJlIGNhbGxlZCB1bmRlciBSQ1UgOiBObyByZWZjb3VudCBjaGFuZ2UgaXMgZG9uZSBoZXJlLiAqL1xcbm5ldC9pcHY0L2luZXRwZWVyLmM6MTk5OnN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0yMDAtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcilcXG4tLVxcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmM9ODM9c3RhdGljIHZvaWQgaXA0X2ZyYWdfaW5pdChzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxLCBjb25zdCB2b2lkICphKVxcbi0tXFxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYy05My1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYzo5NDpcXHRcXHRwID0gaW5ldF9nZXRwZWVyX3Y0KG5ldC1cXHUwMDNlaXB2NC5wZWVycywga2V5LVxcdTAwM2VzYWRkciwga2V5LVxcdTAwM2V2aWYpO1xcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtOTUtXFx0XFx0aWYgKHAgXFx1MDAyNlxcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2cC1cXHUwMDNlcmVmY250KSlcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9OTAyPXZvaWQgaXBfcnRfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy05MjAtXFx0bmV0ID0gZGV2X25ldChydC1cXHUwMDNlZHN0LmRldik7XFxubmV0L2lwdjQvcm91dGUuYzo5MjE6XFx0cGVlciA9IGluZXRfZ2V0cGVlcl92NChuZXQtXFx1MDAzZWlwdjQucGVlcnMsIGlwX2hkcihza2IpLVxcdTAwM2VzYWRkciwgdmlmKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTkyMi1cXHRpZiAoIXBlZXIpIHtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9OTY1PXN0YXRpYyBpbnQgaXBfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTAyMi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjQvcm91dGUuYzoxMDIzOlxcdHBlZXIgPSBpbmV0X2dldHBlZXJfdjQobmV0LVxcdTAwM2VpcHY0LnBlZXJzLCBpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsXFxubmV0L2lwdjQvcm91dGUuYy0xMDI0LVxcdFxcdFxcdCAgICAgICBsM21kZXZfbWFzdGVyX2lmaW5kZXhfcmN1KHNrYi1cXHUwMDNlZGV2KSk7XFxuLS1cXG5uZXQvaXB2Ni9pY21wLmM9MTk1PXN0YXRpYyBib29sIGljbXB2Nl94cmxpbV9hbGxvdyhzdHJ1Y3Qgc29jayAqc2ssIHU4IHR5cGUsXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmMtMjI1LVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjYvaWNtcC5jOjIyNjpcXHRcXHRcXHRwZWVyID0gaW5ldF9nZXRwZWVyX3Y2KG5ldC1cXHUwMDNlaXB2Ni5wZWVycywgXFx1MDAyNmZsNi1cXHUwMDNlZGFkZHIpO1xcbm5ldC9pcHY2L2ljbXAuYy0yMjctXFx0XFx0XFx0cmVzID0gaW5ldF9wZWVyX3hybGltX2FsbG93KHBlZXIsIHRtbyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9NTE5PWludCBpcDZfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTYzOC1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjYzOTpcXHRcXHRwZWVyID0gaW5ldF9nZXRwZWVyX3Y2KG5ldC1cXHUwMDNlaXB2Ni5wZWVycywgXFx1MDAyNmhkci1cXHUwMDNlZGFkZHIpO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy02NDAtXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTE2NTU9dm9pZCBuZGlzY19zZW5kX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdGFyZ2V0KVxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy0xNzA4LVxcbm5ldC9pcHY2L25kaXNjLmM6MTcwOTpcXHRwZWVyID0gaW5ldF9nZXRwZWVyX3Y2KG5ldC1cXHUwMDNlaXB2Ni5wZWVycywgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyKTtcXG5uZXQvaXB2Ni9uZGlzYy5jLTE3MTAtXFx0aWYgKCFwZWVyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozMzoxMy42NzIwNTQwODlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mjg0NTA3Nzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgaW5ldF9nZXRwZWVyYCBQYXRjaCoqXG5cbk9rYXksIHNvIGBpbmV0X2dldHBlZXJgLi4uIHRoYXQncyBhIGtleSBmdW5jdGlvbi4gSXQncyB1c2VkIGV2ZXJ5d2hlcmUg4oCTIElDTVAgcmF0ZSBsaW1pdGluZywgSVAgZnJhZ21lbnRhdGlvbiwgaGFuZGxpbmcgcm91dGluZyByZWRpcmVjdHMsIHRoZSB3aG9sZSBzaGViYW5nLiBEZWZpbml0ZWx5IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcsIGdpdmVuIGl0cyByZWFjaC4gQW5kIHRoZSBwYXRjaD8gSXQncyBjaGFuZ2luZyBgaW5ldF9wZWVyX3hybGltX2FsbG93YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcy5cblxuV2FpdCwgdGhlIHBhdGNoIGlzIG1ha2luZyBgaW5ldF9wZWVyX3hybGltX2FsbG93YCByZXR1cm4gYGZhbHNlYCBpZiB0aGUgYHBlZXJgIGlzIE5VTEwuIFRoYXQncy4uLiBpbnRlcmVzdGluZy4gQW5kIGRlZmluaXRlbHkgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBlc3BlY2lhbGx5IHdoZW4geW91IGNvbnNpZGVyIGl0IGhhcyBpbXBhY3Qgb24gdGhpbmdzIGxpa2UgSUNNUCByYXRlIGxpbWl0aW5nLiBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBmdXJ0aGVyLiBCZWZvcmUgaXQgcmV0dXJuZWQgYHRydWVgIGlmIGBwZWVyYCB3YXMgYE5VTExgLiBUaGF0IGNoYW5nZSB3YXJyYW50cyBzY3J1dGlueS5cblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYGluZXRfZ2V0cGVlcmAgY2FuIHJldHVybiBOVUxMIG5vdyB1bmRlciB0aGUgbmV3IGxvZ2ljLCBzcGVjaWZpY2FsbHkgaWYgdGhlIHBlZXIgdGhyZXNob2xkIGlzIGV4Y2VlZGVkLCB0aGF0J3Mgd2hhdCB0aGF0IGNvZGUgaXMgaW1wbHlpbmcuXG5cblRoZSBwYXRjaCBpdHNlbGYgc2F5czpcblxuYGBgY1xuIFx0Z2NfY250ID0gMDtcbi1cdHAgPSBsb29rdXAoZGFkZHIsIGJhc2UsIHNlcSwgZ2Nfc3RhY2ssIFx1MDAyNmdjX2NudCwgXHUwMDI2cGFyZW50LCBcdTAwMjZwcCk7XG4rXHRwID0gbG9va3VwKGRhZGRyLCBkaGFzaCwgYmFzZSwgc2VxLCBnY19zdGFjaywgXHUwMDI2Z2NfY250LCBcdTAwMjZwYXJlbnQsIFx1MDAyNnBwKTtcbiBcdGlmICghcCkge1xuLVx0XHRwID0ga21lbV9jYWNoZV9hbGxvYyhwZWVyX2NhY2hlcCwgR0ZQX0FUT01JQyk7XG4rXHRcdGlmICgodTY0KWJhc2UtXHUwMDNldG90YWwgXHUwMDNjIDJVTEwgKiBSRUFEX09OQ0UoaW5ldF9wZWVyX3RocmVzaG9sZCkpXG4rXHRcdFx0cCA9IGttZW1fY2FjaGVfYWxsb2MocGVlcl9jYWNoZXAsIEdGUF9BVE9NSUMpO1xuIFx0XHRpZiAocCkge1xuYGBgXG5cblNvIGl0IGxvb2tzIGxpa2UgaWYgdGhlIHRocmVzaG9sZCBpcyBleGNlZWRlZCwgdGhlIGFsbG9jYXRpb24gaXMgc2tpcHBlZCBhbmQgTlVMTCBpcyByZXR1cm5lZCBmcm9tIGBpbmV0X2dldHBlZXJgLlxuXG5SaWdodCwgYW5kIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgICpub3cqIHJldHVybnMgYGZhbHNlYCBpZiBgcGVlcmAgaXMgTlVMTC4gVGhhdCdzIHRoZSBjcml0aWNhbCBjb25uZWN0aW9uIGhlcmUuIElmIHRoZSBwZWVyIHRocmVzaG9sZCBpcyBleGNlZWRlZCwgYGluZXRfZ2V0cGVlcmAgcmV0dXJucyBOVUxMLCBhbmQgdGhlbiBgaW5ldF9wZWVyX3hybGltX2FsbG93YCByZXR1cm5zIGBmYWxzZWAsIG1lYW5pbmcgdGhlIHBhY2tldCBpcyAqbm90IGFsbG93ZWQqLiBUaGlzIG1lYW5zIGlmIHRoZSB0aHJlc2hvbGQgaXMgZXhjZWVkZWQsIElDTVAgcmF0ZSBsaW1pdGluZyB3aWxsIHN0YXJ0ICpkcm9wcGluZyogcGFja2V0cyBiZWNhdXNlIGl0J3MgaW50ZXJwcmV0ZWQgYXMgXCJub3QgYWxsb3dlZFwiLiBUaGF0J3MgYSBkZWZpbml0ZSBiZWhhdmlvciBjaGFuZ2UuXG5cbkxldCdzIGNvbmZpcm0gaG93IGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzEzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjMzOjIwLjk1NjU2NDQ4M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY2MTMzMzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfcGVlcl94cmxpbV9hbGxvd1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pbmV0cGVlci5oPTE0OT12b2lkIGluZXRfcHV0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyICpwKTtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjE1MDpib29sIGluZXRfcGVlcl94cmxpbV9hbGxvdyhzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyLCBpbnQgdGltZW91dCk7XFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xNTEtXFxuLS1cXG5uZXQvaXB2NC9pY21wLmM9MzExPXN0YXRpYyBib29sIGljbXB2NF94cmxpbV9hbGxvdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydGFibGUgKnJ0LFxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTMzNS1cXHRcXHRcXHQgICAgICAgbDNtZGV2X21hc3Rlcl9pZmluZGV4X3JjdShkZXYpKTtcXG5uZXQvaXB2NC9pY21wLmM6MzM2OlxcdHJjID0gaW5ldF9wZWVyX3hybGltX2FsbG93KHBlZXIsIHBlZXJfdGltZW91dCk7XFxubmV0L2lwdjQvaWNtcC5jLTMzNy1cXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmM9MjU0PXZvaWQgaW5ldF9wdXRwZWVyKHN0cnVjdCBpbmV0X3BlZXIgKnApXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTI3Ny0jZGVmaW5lIFhSTElNX0JVUlNUX0ZBQ1RPUiA2XFxubmV0L2lwdjQvaW5ldHBlZXIuYzoyNzg6Ym9vbCBpbmV0X3BlZXJfeHJsaW1fYWxsb3coc3RydWN0IGluZXRfcGVlciAqcGVlciwgaW50IHRpbWVvdXQpXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0yNzkte1xcbi0tXFxubmV0L2lwdjYvaWNtcC5jPTE5NT1zdGF0aWMgYm9vbCBpY21wdjZfeHJsaW1fYWxsb3coc3RydWN0IHNvY2sgKnNrLCB1OCB0eXBlLFxcbi0tXFxubmV0L2lwdjYvaWNtcC5jLTIyNi1cXHRcXHRcXHRwZWVyID0gaW5ldF9nZXRwZWVyX3Y2KG5ldC1cXHUwMDNlaXB2Ni5wZWVycywgXFx1MDAyNmZsNi1cXHUwMDNlZGFkZHIpO1xcbm5ldC9pcHY2L2ljbXAuYzoyMjc6XFx0XFx0XFx0cmVzID0gaW5ldF9wZWVyX3hybGltX2FsbG93KHBlZXIsIHRtbyk7XFxubmV0L2lwdjYvaWNtcC5jLTIyOC1cXHRcXHR9XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9NTE5PWludCBpcDZfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTY0My1cXHRcXHQgKi9cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6NjQ0OlxcdFxcdGlmIChwZWVyIFxcdTAwMjZcXHUwMDI2IGluZXRfcGVlcl94cmxpbV9hbGxvdyhwZWVyLCAxKkhaKSlcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtNjQ1LVxcdFxcdFxcdG5kaXNjX3NlbmRfcmVkaXJlY3Qoc2tiLCB0YXJnZXQpO1xcbi0tXFxubmV0L2lwdjYvbmRpc2MuYz0xNjU1PXZvaWQgbmRpc2Nfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnRhcmdldClcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTcxMS1cXHRcXHRnb3RvIHJlbGVhc2U7XFxubmV0L2lwdjYvbmRpc2MuYzoxNzEyOlxcdHJldCA9IGluZXRfcGVlcl94cmxpbV9hbGxvdyhwZWVyLCAxKkhaKTtcXG5uZXQvaXB2Ni9uZGlzYy5jLTE3MTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjMzOjIyLjgyMjcwNzU1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNDE0MTA5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUmVjZW50IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIGtleSBhcmVhcywgc3BlY2lmaWNhbGx5IGBpbmV0X2dldHBlZXJgIGFuZCBgaW5ldF9wZWVyX3hybGltX2FsbG93YC4gSSBzZWUgaXQncyBhbHNvIGFkZGVkIGBpbmV0cGVlcl9hZGRyX2hhc2hgIGFuZCBgaW5ldHBlZXJfZW50cnlfY21wYCB0byBgbmV0L2lwdjQvaW5ldHBlZXIuY2AsIGFuZCBtb2RpZmllZCBgaW5ldHBlZXJfYWRkcl9jbXBgIGluIGBpbmNsdWRlL25ldC9pbmV0cGVlci5oYC4gTm8gb2J2aW91cyByZWQgZmxhZ3MgZnJvbSBhIGN1cnNvcnkgZ2xhbmNlLCBzbyBpdCBsb29rcyBsaWtlIGl04oCZcyByZWFjaGFibGUgYW5kIHNob3VsZCB3b3JrIGFzIGludGVuZGVkLlxuXG5UaGUgZnVuY3Rpb25zIHRoYXQgKnJlYWxseSogbmVlZCBhIGNsb3NlciBsb29rLCB0aG91Z2gsIGFyZTogYGluZXRfZ2V0cGVlcmAsIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgLCB0aGVuIGFsc28gYGljbXB2NF94cmxpbV9hbGxvd2AsIGBpY21wdjZfeHJsaW1fYWxsb3dgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIG9uZXMgdG91Y2hpbmcgcm91dGluZywgbGlrZSBgaXA0X2ZyYWdfaW5pdGAsIGBpcF9ydF9zZW5kX3JlZGlyZWN0YCwgYGlwX2Vycm9yYCwgYGlwNl9mb3J3YXJkYCBhbmQgYG5kaXNjX3NlbmRfcmVkaXJlY3RgLlxuXG5XYWl0LCBsZXQncyBzdGVwIGJhY2sgLSBgaW5ldF9nZXRwZWVyYCBpcyB0aGUgY2VudHJhbCBhY2Nlc3MgcG9pbnQgaGVyZS4gVGhhdCdzIHRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24gZmlyc3QsIGVzcGVjaWFsbHkgdG8gc2VlIHdoYXQncyBjaGFuZ2VkIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3RoZXIgZnVuY3Rpb25zLiBMZXQncyBtYWtlIHN1cmUgdGhhdCB0aGVyZSBhcmUgbm8gY29uZGl0aW9uYWwgY29uZmlncyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGUgYmVoYXZpb3IuIExldCBtZSBzZWUsIGBpbmV0cGVlci5jYCBpcyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHkgaW4gYG5ldC9pcHY0L01ha2VmaWxlYD8gR29vZCwgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gT2theSwgdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBteSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM2NCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozMzoyNy44NjQxMjExMTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0MDI0NDkxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0cGVlclxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZS01LVxcbm5ldC9pcHY0L01ha2VmaWxlOjY6b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS03LVxcdCAgICAgaXBfaW5wdXQubyBpcF9mcmFnbWVudC5vIGlwX2ZvcndhcmQubyBpcF9vcHRpb25zLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozMzozMC43MDQzNzEzNzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTY3MjE3MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIElQdjQgUGVlciBJbmZvcm1hdGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gYGluZXRwZWVyLm9gIGlzIGRlZmluaXRlbHkgY29tcGlsZWQgYXV0b21hdGljYWxseSBmb3IgSVB2NCDigJMgdGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gSVB2NCdzIGRlcGVuZGVuY2Ugb24gYENPTkZJR19JTkVUYC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgZnVydGhlci5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgYW5kIHV0aWxpemVzIHBlZXIgaW5mb3JtYXRpb24sIHNwZWNpZmljYWxseSBmb3IgSVB2NC4gSeKAmWxsIHN0YXJ0IGJ5IGV4YW1pbmluZyBgaW5ldF9nZXRwZWVyYCBhbmQgYGluZXRfcGVlcl94cmxpbV9hbGxvd2Agd2l0aGluIGBGb2N1c1N5bWJvbHNgLiBJdCdzIGFsc28gd29ydGggbm90aW5nIHRoYXQgYGluZXRfaW5pdHBlZXJzYCBpcyBjYWxsZWQgZHVyaW5nIGtlcm5lbCBpbml0aWFsaXphdGlvbi4gVGhpcyB3b3VsZCBiZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgdGhlIHJldmVyc2UgZW5naW5lZXJpbmcgcHJvY2Vzcy5cblxuQWxyaWdodCwgbGV0J3MgY29uc29saWRhdGUgdGhlc2UgZmluZGluZ3MuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGVzZSBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gSSdsbCBmbGFnIHRoZXNlIHdpdGggYFdvcnRoRnV6emluZzogdHJ1ZWAuIE15IGBGb2N1c1N5bWJvbHNgIGxpc3QgaW5jbHVkZXM6IGBpbmV0X2dldHBlZXJgLCBgaW5ldF9wZWVyX3hybGltX2FsbG93YCwgYGljbXB2NF94cmxpbV9hbGxvd2AsIGFuZCBgaWNtcHY2X3hybGltX2FsbG93YC5cblxuSSdsbCBhbHNvIGtlZXAgaW4gbWluZCB0aGF0IEknbGwgbmVlZCBgSU5FVGAgYW5kIGBJUFY2YCBlbmFibGVkIGZvciBhbnkgdGVzdGluZyB0byBiZSByZWxldmFudC5cblxuV2FpdCwgbG9va2luZyBhdCBgaWNtcHY0X3hybGltX2FsbG93YCBhZ2FpbiwgSSByZWFsaXplIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIFByb2JhYmx5IG5vdCB0aGUgKmJlc3QqIHN5bWJvbCB0byBjYWxsIG91dCwgYnV0IGl04oCZcyBmaW5lIGZvciBub3csIGFuZCBpdCBtYXkgc3RpbGwgb2ZmZXIgc29tZSB2YWx1ZS4gSSBrbm93IGBpbmV0X2dldHBlZXJgIGFuZCBgaW5ldF9wZWVyX3hybGltX2FsbG93YCBhcmUgZXhwb3J0ZWQvZ2xvYmFsLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIHNpZ25hdHVyZXMgb2YgYGluZXRfZ2V0cGVlcmAgYW5kIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgaW5wdXRzIGFuZCBvdXRwdXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDI4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjMzOjM1Ljg3MTU5MTgxMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NzQ0ODA3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgaW5ldF9wZWVyIFxcXFwqaW5ldF9nZXRwZWVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2luZXRwZWVyLmg9OTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW42X2FkZHIgKmluZXRwZWVyX2dldF9hZGRyX3Y2KHN0cnVjdCBpbmV0cGVlcl9hZGRyICppYWRkcilcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtOTgtLyogY2FuIGJlIGNhbGxlZCB3aXRoIG9yIHdpdGhvdXQgbG9jYWwgQkggYmVpbmcgZGlzYWJsZWQgKi9cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjk5OnN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDAtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcik7XFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDEtXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMDI6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjQoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTAzLVxcdFxcdFxcdFxcdFxcdFxcdF9fYmUzMiB2NGRhZGRyLFxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMTMtXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjYoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTE1LVxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdjZkYWRkcilcXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmM9MTYyPXN0YXRpYyB2b2lkIGluZXRfcGVlcl9nYyhzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTE5OC0vKiBNdXN0IGJlIGNhbGxlZCB1bmRlciBSQ1UgOiBObyByZWZjb3VudCBjaGFuZ2UgaXMgZG9uZSBoZXJlLiAqL1xcbm5ldC9pcHY0L2luZXRwZWVyLmM6MTk5OnN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0yMDAtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzM6MzguMzY5MDQ3NjY4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1Njg4OTgxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGluZXRfcGVlcmAgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IHdlIGhhbmRsZSB0aGUgYGluZXRfcGVlcmAgc3RydWN0dXJlcywgc3BlY2lmaWNhbGx5IHRoZSBsb29rdXAgbWVjaGFuaXNtLiBUaGUga2V5IGZ1bmN0aW9ucyBpbXBhY3RlZCBhcHBlYXIgdG8gYmUgYGluZXRfZ2V0cGVlcmAgYW5kIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdG8gaW5jbHVkZSB0aG9zZSBpbiBteSBhbmFseXNpcy4gSSBzaG91bGQgYWxzbyBjaGVjayBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcG90ZW50aWFsbHkgcmVsZXZhbnQgZnVuY3Rpb25zLlxuXG5BaCwgcmlnaHQsIGBpbmV0X2dldHBlZXJfdjRgIGFuZCBgaW5ldF9nZXRwZWVyX3Y2YCBhcmUgaW5saW5lZDsgdGhleSBhcmUgbm90IGZ1bmN0aW9ucyBvZiB0aGVpciBvd24uIEFuZCBzb21lIGFyZSBzdGF0aWMsIGxpa2UgYGxvb2t1cGAsIGBpbmV0cGVlcl9hZGRyX2hhc2hgLCBhbmQgYGluZXRwZWVyX2VudHJ5X2NtcGAuIFRoZXkgd29uJ3QgYmUgZXhwb3NlZCBmb3IgbW9kaWZpY2F0aW9uLlxuXG5TbywgYGluZXRfZ2V0cGVlcmAgYW5kIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIGFyZSB0aGUgY3JpdGljYWwgb25lcyB0byBmb2N1cyBvbiBoZXJlLlxuXG5UaGUgcmVhbCBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoZSBzd2l0Y2ggdG8gYSBoYXNoLWJhc2VkIGxvb2t1cCB1c2luZyBgc2lwaGFzaGAgZm9yIHRoZSBgaW5ldF9wZWVyYCBzdHJ1Y3R1cmVzLiBUaGF0J3MgYSBzaWduaWZpY2FudCBzaGlmdCBmcm9tIHdoYXRldmVyIHRoZSBwcmV2aW91cyBtZXRob2Qgd2FzLiBUaGlzIGlzIGdvaW5nIHRvIGltcGFjdCBob3cgbmV3IHBlZXJzIGFyZSBhZGRlZCBhbmQgaG93IGV4aXN0aW5nIHBlZXJzIGFyZSBsb29rZWQgdXAsIHdoaWNoIGlzIGZ1bmRhbWVudGFsIHRvIElQdjQvSVB2NiBuZXR3b3JraW5nIGxvZ2ljLCBlc3BlY2lhbGx5IHdpdGggSUNNUCByYXRlIGxpbWl0aW5nIGFuZCBJUCBmcmFnbWVudGF0aW9uLiBUaGUgY2hhbmdlIHRvIGBpbmV0X3BlZXJfeHJsaW1fYWxsb3dgIHJldHVybmluZyBgZmFsc2VgIHdoZW4gYHBlZXJgIGlzIGBOVUxMYCBpcyBhbHNvIG5vdGV3b3J0aHkgYmVjYXVzZSBpdCBzdWdnZXN0cyBhIHNwZWNpZmljIGhhbmRsaW5nIG9mIHRoZSBwZWVyIG5vdCBiZWluZyBmb3VuZCwgd2hpY2ggY291bGQgaGF2ZSBrbm9jay1vbiBlZmZlY3RzLiBGdXJ0aGVybW9yZSwgdGhlIGludHJvZHVjdGlvbiBvZiBhIHRocmVzaG9sZCBmb3IgcGVlciBhbGxvY2F0aW9uIHZpYSBgaW5ldF9wZWVyX3RocmVzaG9sZGAgbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLlxuXG5MZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIHNlZSB3aGF0IHRoZSBkb3duc3RyZWFtIGltcGFjdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA2NiwiT3V0cHV0VG9rZW5zIjoxNDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzM6NDUuOTM3OTQ3ODg1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA5OTU1NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbmV0X2dldHBlZXJcIixcbiAgICBcImluZXRfcGVlcl94cmxpbV9hbGxvd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBoYXNoLWJhc2VkIGxvb2t1cCBmb3IgaW5ldF9wZWVyIHN0cnVjdHVyZXMsIG1vZGlmeWluZyBpbmV0X2dldHBlZXIgdG8gdXNlIHNpcGhhc2ggZm9yIHRyZWUgaW5zZXJ0aW9uIGFuZCBsb29rdXAuIEl0IGFsc28gY2hhbmdlcyBpbmV0X3BlZXJfeHJsaW1fYWxsb3cgdG8gcmV0dXJuIGZhbHNlIHdoZW4gcGVlciBpcyBOVUxMLCBhbmQgbGltaXRzIHRoZSBhbGxvY2F0aW9uIG9mIG5ldyBwZWVycyBiYXNlZCBvbiBpbmV0X3BlZXJfdGhyZXNob2xkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIElQdjQvSVB2NiBuZXR3b3JraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgSUNNUCByYXRlIGxpbWl0aW5nIGFuZCBJUCBmcmFnbWVudGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbmV0X2dldHBlZXJcIixcbiAgICBcImluZXRfcGVlcl94cmxpbV9hbGxvd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBoYXNoLWJhc2VkIGxvb2t1cCBmb3IgaW5ldF9wZWVyIHN0cnVjdHVyZXMsIG1vZGlmeWluZyBpbmV0X2dldHBlZXIgdG8gdXNlIHNpcGhhc2ggZm9yIHRyZWUgaW5zZXJ0aW9uIGFuZCBsb29rdXAuIEl0IGFsc28gY2hhbmdlcyBpbmV0X3BlZXJfeHJsaW1fYWxsb3cgdG8gcmV0dXJuIGZhbHNlIHdoZW4gcGVlciBpcyBOVUxMLCBhbmQgbGltaXRzIHRoZSBhbGxvY2F0aW9uIG9mIG5ldyBwZWVycyBiYXNlZCBvbiBpbmV0X3BlZXJfdGhyZXNob2xkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIElQdjQvSVB2NiBuZXR3b3JraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgSUNNUCByYXRlIGxpbWl0aW5nIGFuZCBJUCBmcmFnbWVudGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozMzo0Ni4wMTg5NTA0ODJaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODc5ODI1MzMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjMzOjQ2LjAxOTQ1NTA0MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDg3OTc3NDUwNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBgaW5ldF9wZWVyYCB0cmFja2luZyBtZWNoYW5pc20gYnkgYWRkaW5nIGEgaGFzaCBmaWVsZCB0byBvcHRpbWl6ZSByZWQtYmxhY2sgdHJlZSBsb29rdXBzIGFuZCBmaXhpbmcgYSBjb21wYXJpc29uIGJ1ZyBiZXR3ZWVuIElQdjQgYW5kIElQdjYgYWRkcmVzc2VzLiBUaGUgbmV3IGhhc2ggZnVuY3Rpb24gKGBpbmV0cGVlcl9hZGRyX2hhc2hgKSBhbmQgdGhlIG1vZGlmaWVkIGNvbXBhcmlzb24gZnVuY3Rpb24gKGBpbmV0cGVlcl9lbnRyeV9jbXBgKSBleHBsaWNpdGx5IG9ubHkgcmVhZCB0aGUgaW5pdGlhbGl6ZWQgZmllbGRzIG9mIHRoZSBgaW5ldHBlZXJfYWRkcmAgdW5pb24gKGBhNC5hZGRyYCBhbmQgYGE0LnZpZmAgZm9yIElQdjQsIGFuZCBgYTYuczZfYWRkcjMyYCBmb3IgSVB2NikuIFdoaWxlIHRoZSBgaW5ldHBlZXJfYWRkcmAgdW5pb24gY29udGFpbnMgdW5pbml0aWFsaXplZCBwYWRkaW5nIGZvciBJUHY0IGFkZHJlc3NlcywgdGhpcyBwYWRkaW5nIGlzIG5ldmVyIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGBpbmV0X3BlZXJgIHN0cnVjdHVyZSBpcyBwdXJlbHkgYW4gaW50ZXJuYWwga2VybmVsIHRyYWNraW5nIHN0cnVjdHVyZSBhbmQgaXMgbm90IGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhY2Y3ZjQwMDIxM2UxMTExZTg2ZmEyNDQ1ZjYxZmE3NjQ3NDQ4NTIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMjE6MzM6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0cGVlci5oIGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaFxuaW5kZXggZjQ3NTc1N2RhYWZiYS4uNDE0ZTlhZGY0YzUxMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmhcbisrKyBiL2luY2x1ZGUvbmV0L2luZXRwZWVyLmhcbkBAIC0zNSw2ICszNSw3IEBAIHN0cnVjdCBpbmV0cGVlcl9hZGRyIHtcbiBcbiBzdHJ1Y3QgaW5ldF9wZWVyIHtcbiBcdHN0cnVjdCByYl9ub2RlXHRcdHJiX25vZGU7XG4rXHR1NjRcdFx0XHRoYXNoO1xuIFx0c3RydWN0IGluZXRwZWVyX2FkZHJcdGRhZGRyO1xuIFxuIFx0dTMyXHRcdFx0bWV0cmljc1tSVEFYX01BWF07XG5AQCAtMTI1LDYgKzEyNiw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGluZXRwZWVyX2FkZHJfY21wKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphLFxuIHtcbiBcdGludCBpLCBuO1xuIFxuK1x0aWYgKGEtXHUwMDNlZmFtaWx5ICE9IGItXHUwMDNlZmFtaWx5KVxuK1x0XHRyZXR1cm4gYS1cdTAwM2VmYW1pbHkgXHUwMDNjIGItXHUwMDNlZmFtaWx5ID8gLTEgOiAxO1xuK1xuIFx0aWYgKGEtXHUwMDNlZmFtaWx5ID09IEFGX0lORVQpXG4gXHRcdG4gPSBzaXplb2YoYS1cdTAwM2VhNCkgLyBzaXplb2YodTMyKTtcbiBcdGVsc2VcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0cGVlci5jIGIvbmV0L2lwdjQvaW5ldHBlZXIuY1xuaW5kZXggNWI5NTdhODMxZTdjMy4uOTY4NzFmNTIwMTBmMyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2luZXRwZWVyLmNcbisrKyBiL25ldC9pcHY0L2luZXRwZWVyLmNcbkBAIC0yMSw2ICsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldHBlZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zZWN1cmVfc2VxLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXBoYXNoLmhcdTAwM2VcbiBcbiAvKlxuICAqICBUaGVvcnkgb2Ygb3BlcmF0aW9ucy5cbkBAIC01Miw2ICs1MywzMiBAQFxuICAqL1xuIFxuIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGVlcl9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xuK3N0YXRpYyBzaXBoYXNoX2FsaWduZWRfa2V5X3QgaW5ldHBlZXJfaGFzaF9rZXkgX19yZWFkX21vc3RseTtcbitcbitzdGF0aWMgdTY0IGluZXRwZWVyX2FkZHJfaGFzaChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSlcbit7XG4rXHRpZiAoYS1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVClcbitcdFx0cmV0dXJuIHNpcGhhc2hfMnUzMigoX19mb3JjZSB1MzIpYS1cdTAwM2VhNC5hZGRyLCBhLVx1MDAzZWE0LnZpZixcbitcdFx0XHRcdCAgICBcdTAwMjZpbmV0cGVlcl9oYXNoX2tleSk7XG4rXG4rXHRyZXR1cm4gc2lwaGFzaF80dTMyKChfX2ZvcmNlIHUzMilhLVx1MDAzZWE2LnM2X2FkZHIzMlswXSxcbitcdFx0XHQgICAgKF9fZm9yY2UgdTMyKWEtXHUwMDNlYTYuczZfYWRkcjMyWzFdLFxuK1x0XHRcdCAgICAoX19mb3JjZSB1MzIpYS1cdTAwM2VhNi5zNl9hZGRyMzJbMl0sXG4rXHRcdFx0ICAgIChfX2ZvcmNlIHUzMilhLVx1MDAzZWE2LnM2X2FkZHIzMlszXSxcbitcdFx0XHQgICAgXHUwMDI2aW5ldHBlZXJfaGFzaF9rZXkpO1xuK31cbitcbitzdGF0aWMgaW50IGluZXRwZWVyX2VudHJ5X2NtcCh1NjQgZGhhc2gsXG4rXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLFxuK1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0X3BlZXIgKnApXG4re1xuK1x0aWYgKGRoYXNoIFx1MDAzYyBwLVx1MDAzZWhhc2gpXG4rXHRcdHJldHVybiAtMTtcbitcdGlmIChkaGFzaCBcdTAwM2UgcC1cdTAwM2VoYXNoKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdHJldHVybiBpbmV0cGVlcl9hZGRyX2NtcChkYWRkciwgXHUwMDI2cC1cdTAwM2VkYWRkcik7XG4rfVxuIFxuIHZvaWQgaW5ldF9wZWVyX2Jhc2VfaW5pdChzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJwKVxuIHtcbkBAIC03Myw2ICsxMDAsOCBAQCB2b2lkIF9faW5pdCBpbmV0X2luaXRwZWVycyh2b2lkKVxuIHtcbiBcdHU2NCBucl9lbnRyaWVzO1xuIFxuK1x0Z2V0X3JhbmRvbV9ieXRlcyhcdTAwMjZpbmV0cGVlcl9oYXNoX2tleSwgc2l6ZW9mKGluZXRwZWVyX2hhc2hfa2V5KSk7XG4rXG4gXHQgLyogMSUgb2YgcGh5c2ljYWwgbWVtb3J5ICovXG4gXHRucl9lbnRyaWVzID0gZGl2NjRfdWwoKHU2NCl0b3RhbHJhbV9wYWdlcygpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIFx0XHRcdCAgICAgIDEwMCAqIEwxX0NBQ0hFX0FMSUdOKHNpemVvZihzdHJ1Y3QgaW5ldF9wZWVyKSkpO1xuQEAgLTg0LDYgKzExMyw3IEBAIHZvaWQgX19pbml0IGluZXRfaW5pdHBlZXJzKHZvaWQpXG4gXG4gLyogQ2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpIG9yIGJhc2UtXHUwMDNlbG9jayBoZWxkICovXG4gc3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG4rXHRcdFx0XHR1NjQgZGhhc2gsXG4gXHRcdFx0XHRzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4gXHRcdFx0XHR1bnNpZ25lZCBpbnQgc2VxLFxuIFx0XHRcdFx0c3RydWN0IGluZXRfcGVlciAqZ2Nfc3RhY2tbXSxcbkBAIC0xMDUsNyArMTM1LDcgQEAgc3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHBhcmVudCA9IG5leHQ7XG4gXHRcdHAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBpbmV0X3BlZXIsIHJiX25vZGUpO1xuLVx0XHRjbXAgPSBpbmV0cGVlcl9hZGRyX2NtcChkYWRkciwgXHUwMDI2cC1cdTAwM2VkYWRkcik7XG4rXHRcdGNtcCA9IGluZXRwZWVyX2VudHJ5X2NtcChkaGFzaCwgZGFkZHIsIHApO1xuIFx0XHRpZiAoY21wID09IDApIHtcbiBcdFx0XHRub3cgPSBqaWZmaWVzO1xuIFx0XHRcdGlmIChSRUFEX09OQ0UocC1cdTAwM2VkdGltZSkgIT0gbm93KVxuQEAgLTE3MCw2ICsyMDAsNyBAQCBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIpXG4ge1xuIFx0c3RydWN0IGluZXRfcGVlciAqcCwgKmdjX3N0YWNrW1BFRVJfTUFYX0dDXTtcbitcdHU2NCBkaGFzaCA9IGluZXRwZWVyX2FkZHJfaGFzaChkYWRkcik7XG4gXHRzdHJ1Y3QgcmJfbm9kZSAqKnBwLCAqcGFyZW50O1xuIFx0dW5zaWduZWQgaW50IGdjX2NudCwgc2VxO1xuIFxuQEAgLTE3Nyw3ICsyMDgsNyBAQCBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxuIFx0ICogQmVjYXVzZSBvZiBhIGNvbmN1cnJlbnQgd3JpdGVyLCB3ZSBtaWdodCBub3QgZmluZCBhbiBleGlzdGluZyBlbnRyeS5cbiBcdCAqL1xuIFx0c2VxID0gcmVhZF9zZXFiZWdpbihcdTAwMjZiYXNlLVx1MDAzZWxvY2spO1xuLVx0cCA9IGxvb2t1cChkYWRkciwgYmFzZSwgc2VxLCBOVUxMLCBcdTAwMjZnY19jbnQsIFx1MDAyNnBhcmVudCwgXHUwMDI2cHApO1xuK1x0cCA9IGxvb2t1cChkYWRkciwgZGhhc2gsIGJhc2UsIHNlcSwgTlVMTCwgXHUwMDI2Z2NfY250LCBcdTAwMjZwYXJlbnQsIFx1MDAyNnBwKTtcbiBcbiBcdC8qIE1ha2Ugc3VyZSB0cmVlIHdhcyBub3QgbW9kaWZpZWQgZHVyaW5nIG91ciBsb29rdXAuICovXG4gXHRpZiAocCBcdTAwMjZcdTAwMjYgIXJlYWRfc2VxcmV0cnkoXHUwMDI2YmFzZS1cdTAwM2Vsb2NrLCBzZXEpKVxuQEAgLTE5MCwxMSArMjIxLDEzIEBAIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXG4gXHR3cml0ZV9zZXFsb2NrX2JoKFx1MDAyNmJhc2UtXHUwMDNlbG9jayk7XG4gXG4gXHRnY19jbnQgPSAwO1xuLVx0cCA9IGxvb2t1cChkYWRkciwgYmFzZSwgc2VxLCBnY19zdGFjaywgXHUwMDI2Z2NfY250LCBcdTAwMjZwYXJlbnQsIFx1MDAyNnBwKTtcbitcdHAgPSBsb29rdXAoZGFkZHIsIGRoYXNoLCBiYXNlLCBzZXEsIGdjX3N0YWNrLCBcdTAwMjZnY19jbnQsIFx1MDAyNnBhcmVudCwgXHUwMDI2cHApO1xuIFx0aWYgKCFwKSB7XG4tXHRcdHAgPSBrbWVtX2NhY2hlX2FsbG9jKHBlZXJfY2FjaGVwLCBHRlBfQVRPTUlDKTtcbitcdFx0aWYgKCh1NjQpYmFzZS1cdTAwM2V0b3RhbCBcdTAwM2MgMlVMTCAqIFJFQURfT05DRShpbmV0X3BlZXJfdGhyZXNob2xkKSlcbitcdFx0XHRwID0ga21lbV9jYWNoZV9hbGxvYyhwZWVyX2NhY2hlcCwgR0ZQX0FUT01JQyk7XG4gXHRcdGlmIChwKSB7XG4gXHRcdFx0cC1cdTAwM2VkYWRkciA9ICpkYWRkcjtcbitcdFx0XHRwLVx1MDAzZWhhc2ggPSBkaGFzaDtcbiBcdFx0XHRwLVx1MDAzZWR0aW1lID0gKF9fdTMyKWppZmZpZXM7XG4gXHRcdFx0cmVmY291bnRfc2V0KFx1MDAyNnAtXHUwMDNlcmVmY250LCAxKTtcbiBcdFx0XHRhdG9taWNfc2V0KFx1MDAyNnAtXHUwMDNlcmlkLCAwKTtcbkBAIC0yNDgsNyArMjgxLDcgQEAgYm9vbCBpbmV0X3BlZXJfeHJsaW1fYWxsb3coc3RydWN0IGluZXRfcGVlciAqcGVlciwgaW50IHRpbWVvdXQpXG4gXHRib29sIHJjID0gZmFsc2U7XG4gXG4gXHRpZiAoIXBlZXIpXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHR0b2tlbiA9IG90b2tlbiA9IFJFQURfT05DRShwZWVyLVx1MDAzZXJhdGVfdG9rZW5zKTtcbiBcdG5vdyA9IGppZmZpZXM7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozMzo0Ni4wMTk0NTY4MzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMwMjg0NDMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBJbmV0cGVlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIHRvdWNoaW5nIGBpbmV0cGVlci5jYCBhbmQgYGluZXRwZWVyLmhgLiBJdCBzZWVtcyB0aGV5J3JlIGFkZGluZyBhIGBoYXNoYCBmaWVsZCB0byB0aGUgYHN0cnVjdCBpbmV0X3BlZXJgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCB0aGV5J3ZlIGludHJvZHVjZWQgYSBgaW5ldHBlZXJfYWRkcl9oYXNoKClgIGZ1bmN0aW9uIGZvciBoYXNoaW5nIHRoZSBgZGFkZHJgIGZpZWxkLCB3aGljaCBpcyBhIGBzdHJ1Y3QgaW5ldHBlZXJfYWRkcmAuIFNtYXJ0IG1vdmUgdG8gdXNlIGBzaXBoYXNoXzJ1MzJgIGFuZCBgc2lwaGFzaF80dTMyYCBmb3IgSVB2NCBhbmQgSVB2NiByZXNwZWN0aXZlbHkg4oCTIHRoYXQncyBhIGdvb2QgY2hvaWNlIGZvciBjcnlwdG9ncmFwaGljIGhhc2hpbmcuXG5cblJpZ2h0LCBzbyBgc3RydWN0IGluZXRwZWVyX2FkZHJgIGlzIGRlZmluZWQgaW4gdGhlIGhlYWRlciwgbGV0IG1lIHB1bGwgdGhhdCB1cCBxdWlja2x5Li4uIG9rYXksIGhlcmUgaXQgaXM6XG5cbmBgYGNcbnN0cnVjdCBpbmV0cGVlcl9hZGRyIHtcbiAgICB1bmlvbiB7XG4gICAgICAgIHN0cnVjdCB7XG4gICAgICAgICAgICBfX2JlMzIgYWRkcjtcbiAgICAgICAgICAgIF9fdTMyIHZpZjtcbiAgICAgICAgfSBhNDtcbiAgICAgICAgc3RydWN0IGluNl9hZGRyIGE2O1xuICAgIH07XG4gICAgX191MTYgZmFtaWx5O1xufTtcbmBgYFxuXG5XYWl0IGEgc2Vjb25kLi4uIGBpbmV0cGVlcl9hZGRyX2hhc2hgIGhhc2hlcyBgYTQuYWRkcmAgYW5kIGBhNC52aWZgIGZvciBJUHY0LCBhbmQgdGhlbiBgYTYuczZfYWRkcjMyYCBmb3IgSVB2NiwgcmlnaHQ/IEJ1dCB0aGUgYGZhbWlseWAgZmllbGQgaXMgKm5vdCogaW5jbHVkZWQgaW4gdGhlIGhhc2ggY29tcHV0YXRpb24hIEl0J3MganVzdCB1c2VkIGZvciBicmFuY2hpbmcuIFRoYXQncyBhIHBvdGVudGlhbCBpc3N1ZS4gV2hhdCBpZiB0d28gZGlmZmVyZW50IGBpbmV0cGVlcl9hZGRyYCBpbnN0YW5jZXMgaGFwcGVuIHRvIHByb2R1Y2UgdGhlIHNhbWUgaGFzaCB2YWx1ZSBldmVuIHRob3VnaCB0aGVpciBgZmFtaWx5YCBpcyBkaWZmZXJlbnQ/XG5cbk9rYXksIGFuZCBzb21ldGhpbmcgZWxzZSBpcyBuYWdnaW5nIGF0IG1lLiBJdCdzIHRoZSBgdmlmYCBmaWVsZCDigJMgaW4gSVB2NC4gSXMgdGhhdCBhbHdheXMgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byBjaGVjayBob3cgYHN0cnVjdCBpbmV0cGVlcl9hZGRyYCBpcyBhY3R1YWxseSAqaW5pdGlhbGl6ZWQqLiBJZiBgdmlmYCBpc24ndCBmdWxseSBzZXQsIHRoZW4gd2UgY291bGQgYmUgaGFzaGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCBjb3VsZCBsZWFkIHRvIGFsbCBzb3J0cyBvZiBwcm9ibGVtcy5cblxuTm93IHdoZXJlIGlzIGB2aWZgIGJlaW5nIHVzZWQ/IEkgc2VlbSB0byByZWNhbGwgdGhhdCdzIHJlbGF0ZWQgdG8gVlJGIG9yIEwzIGRvbWFpbnMuLi4gT2theSwgdGltZSB0byBnbyBzZWFyY2hpbmcgZm9yIGhvdyBgc3RydWN0IGluZXRwZWVyX2FkZHJgIGlzIGJlaW5nIGluaXRpYWxpemVkIGluIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjI3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzM6NTIuMzIyMzA0Mzc2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk0MjM0MDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBpbmV0cGVlcl9hZGRyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2luZXRwZWVyLmg9MjA9c3RydWN0IGlwdjRfYWRkcl9rZXkge1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0yNi1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjI3OnN0cnVjdCBpbmV0cGVlcl9hZGRyIHtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTI4LVxcdHVuaW9uIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg9MzY9c3RydWN0IGluZXRfcGVlciB7XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTM4LVxcdHU2NFxcdFxcdFxcdGhhc2g7XFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDozOTpcXHRzdHJ1Y3QgaW5ldHBlZXJfYWRkclxcdGRhZGRyO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtNDAtXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oPTcwPXZvaWQgaW5ldF9pbml0cGVlcnModm9pZCkgX19pbml0O1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC03My1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjc0OnN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0cGVlcl9zZXRfYWRkcl92NChzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIsIF9fYmUzMiBpcClcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTc1LXtcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtODAtXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDo4MTpzdGF0aWMgaW5saW5lIF9fYmUzMiBpbmV0cGVlcl9nZXRfYWRkcl92NChzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIpXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC04Mi17XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTg1LVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6ODY6c3RhdGljIGlubGluZSB2b2lkIGluZXRwZWVyX3NldF9hZGRyX3Y2KHN0cnVjdCBpbmV0cGVlcl9hZGRyICppYWRkcixcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTg3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpbjZfYWRkciAqaW42KVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC05Mi1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjkzOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluNl9hZGRyICppbmV0cGVlcl9nZXRfYWRkcl92NihzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIpXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC05NC17XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oPTk5PXN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMDA6XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcik7XFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDEtXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0xMDI9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjQoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDUte1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTA2OlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIGRhZGRyO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTA3LVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0xMTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjYoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMTYte1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTE3OlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIGRhZGRyO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTE4LVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMjMtXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMjQ6c3RhdGljIGlubGluZSBpbnQgaW5ldHBlZXJfYWRkcl9jbXAoY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmEsXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxMjU6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpiKVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTI2LXtcXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmM9NTY9c3RhdGljIHNpcGhhc2hfYWxpZ25lZF9rZXlfdCBpbmV0cGVlcl9oYXNoX2tleSBfX3JlYWRfbW9zdGx5O1xcbm5ldC9pcHY0L2luZXRwZWVyLmMtNTctXFxubmV0L2lwdjQvaW5ldHBlZXIuYzo1ODpzdGF0aWMgdTY0IGluZXRwZWVyX2FkZHJfaGFzaChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSlcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTU5LXtcXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmM9NzE9c3RhdGljIGludCBpbmV0cGVlcl9lbnRyeV9jbXAodTY0IGRoYXNoLFxcbm5ldC9pcHY0L2luZXRwZWVyLmM6NzI6XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLFxcbm5ldC9pcHY0L2luZXRwZWVyLmMtNzMtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRfcGVlciAqcClcXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmM9OTk9dm9pZCBfX2luaXQgaW5ldF9pbml0cGVlcnModm9pZClcXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmMtMTE0LS8qIENhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSBvciBiYXNlLVxcdTAwM2Vsb2NrIGhlbGQgKi9cXG5uZXQvaXB2NC9pbmV0cGVlci5jOjExNTpzdGF0aWMgc3RydWN0IGluZXRfcGVlciAqbG9va3VwKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTExNi1cXHRcXHRcXHRcXHR1NjQgZGhhc2gsXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jPTE5OT1zdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbm5ldC9pcHY0L2luZXRwZWVyLmM6MjAwOlxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIpXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0yMDEte1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yMy1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI0OnN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKl9fdGNwX2dldF9tZXRyaWNzKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpzYWRkcixcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI1OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGhhc2gpO1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz00MT1zdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sge1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy00My1cXHRzdHJ1Y3QgbmV0XFx0XFx0XFx0KnRjcG1fbmV0O1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6NDQ6XFx0c3RydWN0IGluZXRwZWVyX2FkZHJcXHRcXHR0Y3BtX3NhZGRyO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6NDU6XFx0c3RydWN0IGluZXRwZWVyX2FkZHJcXHRcXHR0Y3BtX2RhZGRyO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtNDYtXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdHRjcG1fc3RhbXA7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTc0PXN0YXRpYyB2b2lkIHRjcF9tZXRyaWNfc2V0KHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG0sXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgxLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODI6c3RhdGljIGJvb2wgYWRkcl9zYW1lKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphLFxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODM6XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmIpXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04NC17XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTE2Mz1zdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0Y3BtX25ldyhzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoxNjQ6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqc2FkZHIsXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoxNjU6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0xNjYtXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgaGFzaClcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9MjIyPXN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRjcF9nZXRfZW5jb2RlKHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG0sIGludCBkZXB0aClcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjMwLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MjMxOnN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKl9fdGNwX2dldF9tZXRyaWNzKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpzYWRkcixcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjIzMjpcXHRcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yMzMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgaGFzaClcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9MjQ5PXN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKl9fdGNwX2dldF9tZXRyaWNzX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI1Mi1cXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MjUzOlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI1NC1cXHR1bnNpZ25lZCBpbnQgaGFzaDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9MjkxPXN0YXRpYyBzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRjcF9nZXRfbWV0cmljcyhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI5NS1cXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6Mjk2OlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI5Ny1cXHR1bnNpZ25lZCBpbnQgaGFzaDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9NzY3PXN0YXRpYyBpbnQgdGNwX21ldHJpY3NfbmxfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MDEtXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo4MDI6c3RhdGljIGludCBfX3BhcnNlX25sX2FkZHIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGluZXRwZWVyX2FkZHIgKmFkZHIsXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MDMtXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50ICpoYXNoLCBpbnQgb3B0aW9uYWwsIGludCB2NCwgaW50IHY2KVxcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MjYtXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo4Mjc6c3RhdGljIGludCBwYXJzZV9ubF9hZGRyKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBpbmV0cGVlcl9hZGRyICphZGRyLFxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODI4LVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgKmhhc2gsIGludCBvcHRpb25hbClcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODM0LVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODM1OnN0YXRpYyBpbnQgcGFyc2Vfbmxfc2FkZHIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGluZXRwZWVyX2FkZHIgKmFkZHIpXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MzYte1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz04NDI9c3RhdGljIGludCB0Y3BfbWV0cmljc19ubF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTg0NC1cXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODQ1OlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTg0Ni1cXHR1bnNpZ25lZCBpbnQgaGFzaDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9OTI4PXN0YXRpYyBpbnQgdGNwX21ldHJpY3NfbmxfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy05MzItXFx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrIF9fcmN1ICoqcHA7XFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo5MzM6XFx0c3RydWN0IGluZXRwZWVyX2FkZHIgc2FkZHIsIGRhZGRyO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtOTM0LVxcdHVuc2lnbmVkIGludCBoYXNoO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozMzo1My45MTY1NTIzODlaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4NDIzODA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zOlxuXG4qKkRpZ2dpbmcgaW50byBJbmV0cGVlcidzIElQdjQgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYGluZXRwZWVyYCBpcyBtYW5hZ2luZyBJUHY0IGFkZHJlc3Nlcy4gSSdtIGhlYWRpbmcgc3RyYWlnaHQgaW50byBgaW5jbHVkZS9uZXQvaW5ldHBlZXIuaGAgdG8gc2VlIGhvdyBgaW5ldHBlZXJfZ2V0X2FkZHJfdjRgIGFuZCBgaW5ldHBlZXJfc2V0X2FkZHJfdjRgIGFyZSBkZWZpbmVkLiBJJ20gcmVhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGRldGFpbHMgb2YgdGhlaXIgQVBJIGFuZCBob3cgdGhleSdyZSBpbnRlbmRlZCB0byBpbnRlcmFjdCB3aXRoIHRoZSBicm9hZGVyIGluZXRwZWVyIGZyYW1ld29yay4gSSB3YW50IHRvIHNlZSBpZiB0aGUgaW1wbGVtZW50YXRpb24gaGludHMgYXQgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIG9yIGlmIHRoZXJlJ3MgYW55dGhpbmcgaW50ZXJlc3RpbmcgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBwYXNzZWQgYXJvdW5kLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGFjY2Vzc29ycyBmaXQgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgdGhlIHBlZXIgdHJhY2tpbmcgbWVjaGFuaXNtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDUyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzM6NTcuMTAwODA5MTU0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAwODEyODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRwZWVyX3NldF9hZGRyX3Y0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2luZXRwZWVyLmg9NzA9dm9pZCBpbmV0X2luaXRwZWVycyh2b2lkKSBfX2luaXQ7XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTczLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6NzQ6c3RhdGljIGlubGluZSB2b2lkIGluZXRwZWVyX3NldF9hZGRyX3Y0KHN0cnVjdCBpbmV0cGVlcl9hZGRyICppYWRkciwgX19iZTMyIGlwKVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtNzUte1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz0yNDk9c3RhdGljIHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqX190Y3BfZ2V0X21ldHJpY3NfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjYwLVxcdGNhc2UgQUZfSU5FVDpcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI2MTpcXHRcXHRpbmV0cGVlcl9zZXRfYWRkcl92NChcXHUwMDI2c2FkZHIsIGluZXRfcnNrKHJlcSktXFx1MDAzZWlyX2xvY19hZGRyKTtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI2MjpcXHRcXHRpbmV0cGVlcl9zZXRfYWRkcl92NChcXHUwMDI2ZGFkZHIsIGluZXRfcnNrKHJlcSktXFx1MDAzZWlyX3JtdF9hZGRyKTtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTI2My1cXHRcXHRoYXNoID0gaXB2NF9hZGRyX2hhc2goaW5ldF9yc2socmVxKS1cXHUwMDNlaXJfcm10X2FkZHIpO1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz0yOTE9c3RhdGljIHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdGNwX2dldF9tZXRyaWNzKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMzAwLVxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQpIHtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjMwMTpcXHRcXHRpbmV0cGVlcl9zZXRfYWRkcl92NChcXHUwMDI2c2FkZHIsIGluZXRfc2soc2spLVxcdTAwM2VpbmV0X3NhZGRyKTtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjMwMjpcXHRcXHRpbmV0cGVlcl9zZXRfYWRkcl92NChcXHUwMDI2ZGFkZHIsIGluZXRfc2soc2spLVxcdTAwM2VpbmV0X2RhZGRyKTtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTMwMy1cXHRcXHRoYXNoID0gaXB2NF9hZGRyX2hhc2goaW5ldF9zayhzayktXFx1MDAzZWluZXRfZGFkZHIpO1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0zMDctXFx0XFx0aWYgKGlwdjZfYWRkcl92NG1hcHBlZChcXHUwMDI2c2stXFx1MDAzZXNrX3Y2X2RhZGRyKSkge1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MzA4OlxcdFxcdFxcdGluZXRwZWVyX3NldF9hZGRyX3Y0KFxcdTAwMjZzYWRkciwgaW5ldF9zayhzayktXFx1MDAzZWluZXRfc2FkZHIpO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MzA5OlxcdFxcdFxcdGluZXRwZWVyX3NldF9hZGRyX3Y0KFxcdTAwMjZkYWRkciwgaW5ldF9zayhzayktXFx1MDAzZWluZXRfZGFkZHIpO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMzEwLVxcdFxcdFxcdGhhc2ggPSBpcHY0X2FkZHJfaGFzaChpbmV0X3NrKHNrKS1cXHUwMDNlaW5ldF9kYWRkcik7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTgwMj1zdGF0aWMgaW50IF9fcGFyc2VfbmxfYWRkcihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYWRkcixcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODA4LVxcdGlmIChhKSB7XFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo4MDk6XFx0XFx0aW5ldHBlZXJfc2V0X2FkZHJfdjQoYWRkciwgbmxhX2dldF9pbl9hZGRyKGEpKTtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgxMC1cXHRcXHRpZiAoaGFzaClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzM6NTguNzAxNjI4NDg3WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjcxODcwNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqUGVlcmluZyBpbnRvIGBpbmV0cGVlci5oYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gc29tZSBrZXJuZWwgaW50ZXJuYWxzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgYGluY2x1ZGUvbmV0L2luZXRwZWVyLmhgIGZpbGUsIGFuZCBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIG9uIGxpbmVzIDc0IHRocm91Z2ggODAuIFRoYXQgcmVnaW9uIGxpa2VseSBob2xkcyBzb21lIGNydWNpYWwgZGVmaW5pdGlvbnMgb3Igc3RydWN0dXJlcyByZWxhdGVkIHRvIElQIHBlZXIgbWFuYWdlbWVudCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSB0cmFja2luZyBvZiByZW1vdGUgaG9zdHMsIGNvbm5lY3Rpb24gc3RhdGVzLCBvciBwZXJoYXBzIGV2ZW4gY29uZ2VzdGlvbiBjb250cm9sIHBhcmFtZXRlcnMuIEl0J3MgcHJvYmFibHkgYSBzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIGhvdyB0aGUga2VybmVsIHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCBhbiBJUCBhZGRyZXNzLCB0aGUgcm91dGluZyBkZWNpc2lvbnMsIGFuZCBhbnkgYXNzb2NpYXRlZCBzdGF0ZS4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgY29udGFpbmVkIGluIHRob3NlIGxpbmVzLiBIb3BlZnVsbHksIEknbGwgZmluZCB3aGF0IEknbSBsb29raW5nIGZvciB0aGVyZS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBkZWFscyB3aXRoIG5ldHdvcmsgY29ubmVjdGlvbnMgYXQgYSBncmFudWxhciBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM0OjAxLjgyODgyMjM5NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9pbmV0cGVlci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDcwOlxcdHZvaWQgaW5ldF9pbml0cGVlcnModm9pZCkgX19pbml0O1xcbiAgNzE6XFx0XFxuICA3MjpcXHQjZGVmaW5lIElORVRQRUVSX01FVFJJQ1NfTkVXXFx0KH4odTMyKSAwKVxcbiAgNzM6XFx0XFxuICA3NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaW5ldHBlZXJfc2V0X2FkZHJfdjQoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyLCBfX2JlMzIgaXApXFxuICA3NTpcXHR7XFxuICA3NjpcXHRcXHRpYWRkci1cXHUwMDNlYTQuYWRkciA9IGlwO1xcbiAgNzc6XFx0XFx0aWFkZHItXFx1MDAzZWE0LnZpZiA9IDA7XFxuICA3ODpcXHRcXHRpYWRkci1cXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcXG4gIDc5OlxcdH1cXG4gIDgwOlxcdFxcbiAgODE6XFx0c3RhdGljIGlubGluZSBfX2JlMzIgaW5ldHBlZXJfZ2V0X2FkZHJfdjQoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyKVxcbiAgODI6XFx0e1xcbiAgODM6XFx0XFx0cmV0dXJuIGlhZGRyLVxcdTAwM2VhNC5hZGRyO1xcbiAgODQ6XFx0fVxcbiAgODU6XFx0XFxuICA4NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaW5ldHBlZXJfc2V0X2FkZHJfdjYoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyLFxcbiAgODc6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGluNl9hZGRyICppbjYpXFxuICA4ODpcXHR7XFxuICA4OTpcXHRcXHRpYWRkci1cXHUwMDNlYTYgPSAqaW42O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNDowMS44Mjg4ODY0MjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3NTQxOTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQWRkcmVzcyBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb24qKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuIEknbSBmb2N1c2luZyBvbiBob3cgdGhlc2UgSVAgYWRkcmVzcyBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGluZXRwZWVyYCBzdWJzeXN0ZW0uIEkgc2VlIGBpbmV0cGVlcl9zZXRfYWRkcl92NGAgaXMgZXhwbGljaXRseSBzZXR0aW5nIGBpYWRkci1cdTAwM2VhNC52aWYgPSAwYC4gVGhhdCdzIGltcG9ydGFudDsgaXQncyBjbGVhcmluZyB0aGUgVmlydHVhbCBJbnRlcmZhY2UgZmllbGQgd2l0aGluIHRoZSBJUHY0IGFkZHJlc3Mgc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuXG5cbkJ1dCB3aGF0IGFib3V0IElQdjY/IEkgbmVlZCB0byBjaGVjayBob3cgaXRzIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24sIGBpbmV0cGVlcl9zZXRfYWRkcl92NmAsIGhhbmRsZXMgaXRzIFZpcnR1YWwgSW50ZXJmYWNlIGZpZWxkLiBEb2VzIGl0IGZvbGxvdyBhIHNpbWlsYXIgYXBwcm9hY2gsIGFuZCBtb3JlIGJyb2FkbHksIGhvdyBkb2VzIHRoZSBjb2RlYmFzZSBlbnN1cmUgY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgdHdvIHZlcnNpb24ncyBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24/IFdoYXQgb3RoZXIgYXNzb2NpYXRlZCBmaWVsZHMgbmVlZCB0byBiZSBsb29rZWQgYXQgdG8gZW5zdXJlIGNvbnNpc3RlbmN5PyBJdCdzIGNydWNpYWwgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlbid0IGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3Igb3IgcG90ZW50aWFsIGJ1Z3MgYXJpc2luZyBmcm9tIGRpZmZlcmluZyBpbml0aWFsaXphdGlvbiBwcmFjdGljZXMgYWNyb3NzIElQdjQgYW5kIElQdjYgaW1wbGVtZW50YXRpb25zLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kIGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjAwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNDowNi45MDQzMDg0NjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvaW5ldHBlZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA4NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaW5ldHBlZXJfc2V0X2FkZHJfdjYoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyLFxcbiAgODc6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGluNl9hZGRyICppbjYpXFxuICA4ODpcXHR7XFxuICA4OTpcXHRcXHRpYWRkci1cXHUwMDNlYTYgPSAqaW42O1xcbiAgOTA6XFx0XFx0aWFkZHItXFx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xcbiAgOTE6XFx0fVxcbiAgOTI6XFx0XFxuICA5MzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpbjZfYWRkciAqaW5ldHBlZXJfZ2V0X2FkZHJfdjYoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyKVxcbiAgOTQ6XFx0e1xcbiAgOTU6XFx0XFx0cmV0dXJuIFxcdTAwMjZpYWRkci1cXHUwMDNlYTY7XFxuICA5NjpcXHR9XFxuICA5NzpcXHRcXG4gIDk4OlxcdC8qIGNhbiBiZSBjYWxsZWQgd2l0aCBvciB3aXRob3V0IGxvY2FsIEJIIGJlaW5nIGRpc2FibGVkICovXFxuICA5OTpcXHRzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbiAxMDA6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcik7XFxuIDEwMTpcXHRcXG4gMTAyOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG4gMTAzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdF9fYmUzMiB2NGRhZGRyLFxcbiAxMDQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IHZpZilcXG4gMTA1OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzQ6MDYuOTA0Mzc3MzU1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDUyNTExNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFBlZXIgUmVzb2x1dGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gdGhlIGZ1bmN0aW9uIGBpbmV0X2dldHBlZXJfdjRgIGFjdHVhbGx5IGFjY2VwdHMgYSBgdmlmYCBhcmd1bWVudCEgVGhhdCdzIGludGVyZXN0aW5nOyBJJ2QgY29tcGxldGVseSBnbG9zc2VkIG92ZXIgdGhhdCB3aGVuIEkgd2FzIGluaXRpYWxseSByZXZpZXdpbmcgdGhlIGNvZGUuIFRoaXMgY2hhbmdlcyB0aGluZ3MuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHZpcnR1YWwgaW50ZXJmYWNlIGFmZmVjdHMgdGhlIHBlZXIgcmVzb2x1dGlvbiBwcm9jZXNzLiBSaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBib3RoIGBpbmV0X2dldHBlZXJfdjRgICphbmQqIGBpbmV0X2dldHBlZXJfdjZgLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIGZ1bmN0aW9ucyB1dGlsaXplIHRoZSBgdmlmYCBwYXJhbWV0ZXIgdG8gZGV0ZXJtaW5lIHRoZSByZW1vdGUgcGVlcidzIGFkZHJlc3MuIFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBjcnVjaWFsIHRvIHRoZSBiZWhhdmlvciBJJ20gbG9va2luZyBpbnRvLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBmdW5jdGlvbnMgdXNlIHRoZSBgdmlmYCBpbiBhIHdheSBJIHRoaW5rIHRoZXkgZG8uIEkgaGF2ZSBhc3N1bXB0aW9ucywgYnV0IEkgbmVlZCBjb25maXJtYXRpb24uIFRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjIxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNDoxMC41MDk2MzA5NjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2luZXRwZWVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTAyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAyOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG4gMTAzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdF9fYmUzMiB2NGRhZGRyLFxcbiAxMDQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IHZpZilcXG4gMTA1OlxcdHtcXG4gMTA2OlxcdFxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIGRhZGRyO1xcbiAxMDc6XFx0XFxuIDEwODpcXHRcXHRkYWRkci5hNC5hZGRyID0gdjRkYWRkcjtcXG4gMTA5OlxcdFxcdGRhZGRyLmE0LnZpZiA9IHZpZjtcXG4gMTEwOlxcdFxcdGRhZGRyLmZhbWlseSA9IEFGX0lORVQ7XFxuIDExMTpcXHRcXHRyZXR1cm4gaW5ldF9nZXRwZWVyKGJhc2UsIFxcdTAwMjZkYWRkcik7XFxuIDExMjpcXHR9XFxuIDExMzpcXHRcXG4gMTE0OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y2KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG4gMTE1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdjZkYWRkcilcXG4gMTE2OlxcdHtcXG4gMTE3OlxcdFxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIGRhZGRyO1xcbiAxMTg6XFx0XFxuIDExOTpcXHRcXHRkYWRkci5hNiA9ICp2NmRhZGRyO1xcbiAxMjA6XFx0XFx0ZGFkZHIuZmFtaWx5ID0gQUZfSU5FVDY7XFxuIDEyMTpcXHRcXHRyZXR1cm4gaW5ldF9nZXRwZWVyKGJhc2UsIFxcdTAwMjZkYWRkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM0OjEwLjUwOTc1MjcwOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDk2ODY5ODgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJhdmVsaW5nIHRoZSBJbml0aWFsaXphdGlvbiBvZiBgaW5ldHBlZXJfYWRkcmAgYW5kIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSZWFkcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCBjb25jZXJuIGNlbnRlcmVkIGFyb3VuZCBob3cgdGhlIGBpbmV0cGVlcl9hZGRyYCBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYGluZXRfZ2V0cGVlcl92NGAuIEkgc2VlIHRoYXQgYGRhZGRyLmE0LmFkZHJgIGFuZCBgZGFkZHIuYTQudmlmYCBhcmUgYXNzaWduZWQsIGFuZCB0aGVuIHRoZSBgZmFtaWx5YCBmaWVsZCBpcyBzZXQgdG8gYEFGX0lORVRgLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgaWYgdGhhdCdzIHN1ZmZpY2llbnQgdG8gZnVsbHkgaW5pdGlhbGl6ZSB0aGUgdW5pb24uIEEgcXVpY2sgY2hlY2sgb2YgdGhlIHN0cnVjdCBkZWZpbml0aW9uIGNvbmZpcm1zIHRoYXQgdGhlIGB1bmlvbmAgaXMgMTYgYnl0ZXMgd2lkZSwgd2hpbGUgaW5pdGlhbGl6aW5nIGAuYTRgIG9ubHkgdG91Y2hlcyA4IGJ5dGVzLiBUaGlzIG1lYW5zIHRoZSBvdGhlciA4IGJ5dGVzIHJlbWFpbiB1bmluaXRpYWxpemVkLlxuXG5UaGUgY29yZSBvZiB0aGUgaXNzdWUgYm9pbHMgZG93biB0byB3aGV0aGVyIGFueSBmdW5jdGlvbiByZWFkcyB0aGUgKnVuaW5pdGlhbGl6ZWQqIHBvcnRpb24gb2YgdGhlIGBpbmV0cGVlcl9hZGRyYCBzdHJ1Y3QsIHdoaWNoIGNhbiBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVucHJlZGljdGFibGUgYmVoYXZpb3IuXG5cbkkgZG92ZSBpbnRvIGBpbmV0cGVlcl9hZGRyX2hhc2hgLiBUaGFua2Z1bGx5LCBpdCBvbmx5IGhhc2hlcyBgYTQuYWRkcmAgYW5kIGBhNC52aWZgIGZvciBgQUZfSU5FVGAsIHdoaWNoIGFyZSB0aGUgaW5pdGlhbGl6ZWQgcGFydHMuIEZvciBgQUZfSU5FVDZgLCB0aGUgZW50aXJlIGBhNmAgc3RydWN0IGlzIGhhc2hlZCwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQuIFRoaXMgaXMgZ29vZC5cblxuSSBtb3ZlZCBvbiB0byBgaW5ldF9nZXRwZWVyX3Y2YCBhbmQgYGluZXRwZWVyX3NldF9hZGRyX3Y2YCwgd2hpY2ggaW5pdGlhbGl6ZXMgYWxsIDE2IGJ5dGVzIG9mIHRoZSB1bmlvbiB3aXRoIGAuYTZgLiBHb29kLlxuXG5OZXh0LCBJIGNvbnNpZGVyZWQgcGFkZGluZy4gVGhlIHN0cnVjdCBjb250YWlucyBhIDE2LWJ5dGUgdW5pb24gYW5kIGEgMi1ieXRlIGZhbWlseSwgbWFraW5nIHRoZSB0b3RhbCBzaXplIDE4IGJ5dGVzLCBwb3RlbnRpYWxseSBwYWRkZWQgdG8gMjAgb3IgMjQgYnl0ZXMsIGRlcGVuZGluZyBvbiBhbGlnbm1lbnQuIEltcG9ydGFudGx5LCBgaW5ldHBlZXJfYWRkcl9oYXNoYCBhbmQgYGluZXRwZWVyX2FkZHJfY21wYCBpZ25vcmUgdGhlc2UgcGFkZGluZyBieXRlcywgc28gdGhleSBhcmVuJ3QgYSBjb25jZXJuLlxuXG5UaGVuLCBJIGludmVzdGlnYXRlZCBgaW5ldHBlZXJfYWRkcl9jbXBgLCB3aGljaCBjb21wYXJlcyB0aGUgYGluZXRwZWVyX2FkZHJgIHN0cnVjdHMuIEZvciBgQUZfSU5FVGAsIGl0IGNvbXBhcmVzIGBzNl9hZGRyMzJbMF1gIGFuZCBgczZfYWRkcjMyWzFdYCwgd2hpY2ggYWxpYXMgZXhhY3RseSB0byBgYTQuYWRkcmAgYW5kIGBhNC52aWZgLiBDcml0aWNhbGx5LCBpdCBkb2VzICpub3QqIGNvbXBhcmUgdGhlIHVuaW5pdGlhbGl6ZWQgOCBieXRlcywgbm9yIHRoZSBwYWRkaW5nLiBUaGlzIGlzIGZpbmUuXG5cbkkgd29uZGVyZWQgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyBhdmVudWVzIGZvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJIG5vdGVkIHRoYXQgYGluZXRwZWVyX2FkZHJfaGFzaGAgZXhwbGljaXRseSBvbmx5IHJlYWRzIHRoZSBpbml0aWFsaXplZCBmaWVsZHMuXG5cbkFmdGVyIHNjcnV0aW5pemluZyBgdGNwX21ldHJpY3MuY2AgYW5kIGl0cyB1c2Ugb2YgYGluZXRwZWVyX2FkZHJgIHRocm91Z2ggdGhlIGBpbmV0cGVlcl9zZXRfYWRkcl92NGAgZnVuY3Rpb24sIEkgZm91bmQgdGhhdCB0aGV5ICpkbyogdXNlIGBpbmV0cGVlcl9hZGRyYCwgYnV0IGB0Y3BfbWV0cmljcy5jYCB1bHRpbWF0ZWx5IHVzZXMgYSBkaXJlY3QgSVB2NCBvciBJUHY2IGhhc2ggZnVuY3Rpb24uIFNvIGl0IGRvZXMgbm90IHVzZSB0aGUgZnVuY3Rpb24gYmVpbmcgZGlzY3Vzc2VkIGhlcmUuIEl0ICpkb2VzKiBob3dldmVyIHVzZSBgaW5ldHBlZXJfYWRkcl9jbXBgIHdpdGggYHNhZGRyYCBhbmQgYGRhZGRyYCB3aGljaCBhcmUgb25seSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQsIGJ1dCBhcyBiZWZvcmUsIGBpbmV0cGVlcl9hZGRyX2NtcGAgb25seSBjb21wYXJlcyB0aGUgaW5pdGlhbGl6ZWQgYnl0ZXMuIFNvIHRoaXMgc2VlbXMgc2FmZS5cblxuSSBoYWQgYSBtb21lbnQgb2YgZG91YnQ6IFdoYXQgaWYgYGEtXHUwMDNlZmFtaWx5YCB3YXMgdW5pbml0aWFsaXplZD8gVGhhbmtmdWxseSwgYGluZXRwZWVyX3NldF9hZGRyX3Y0YCwgYGluZXRfZ2V0cGVlcl92NGAgYW5kIGBpbmV0X2dldHBlZXJfdjZgICpkbyogaW5pdGlhbGl6ZSB0aGUgYGZhbWlseWAgZmllbGQsIHNvIGl0IGlzIHNldC5cblxuRmluYWxseSwgSSBjb25zaWRlcmVkIHRoZSBwYXRjaGVkIGxvZ2ljIHJlcGxhY2luZyBgcmJfdHJlZWAgbG9va3VwcyBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgaW5ldHBlZXJfZW50cnlfY21wYC4gVGhpcyBvcHRpbWl6YXRpb24gY29tcGFyZXMgaGFzaGVzICpiZWZvcmUqIGNvbXBhcmluZyB0aGUgZnVsbCBhZGRyZXNzZXMgdXNpbmcgYGluZXRwZWVyX2FkZHJfY21wYC4gVGhlIGhhc2ggaXMgY2FsY3VsYXRlZCB1c2luZyBgaW5ldHBlZXJfYWRkcl9oYXNoKGRhZGRyKWAuIEdpdmVuIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgYTQuYWRkcmAsIGBhNC52aWZgIGFuZCBgYTZgIGluIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbnMsIEkgY29uY2x1ZGUgdGhhdCB0aGVyZSdzIG5vIGNoYW5jZSB0aGUgaGFzaCBjYWxjdWxhdGlvbiByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuU28sIGl0IHNlZW1zIHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLCBvciBieSB0aGUgc3RydWN0dXJlJ3MgaW5pdGlhbGl6YXRpb24sIGJlY2F1c2UgZnVuY3Rpb25zIG9ubHkgdXNlIHRoZSBpbml0aWFsaXplZCBzZWN0aW9ucyBvZiB0aGUgdW5pb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzQ6MzUuNDc4NDU1NDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODE0MzYyNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGluZXRwZWVyX2FkZHIgW2EtekEtWjAtOV9dKztcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0xMDI9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjQoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDUte1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTA2OlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIGRhZGRyO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTA3LVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0xMTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjYoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMTYte1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTE3OlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIGRhZGRyO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTE4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNDozOC4zNTk4OTc0NzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1MzI4NjUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipSZXZpc2l0aW5nIGB0Y3BfbWV0cmljcy5jYCoqXG5cbk9rYXksIHRpbWUgdG8gY2lyY2xlIGJhY2sgdG8gYHRjcF9tZXRyaWNzLmNgLiBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIGNvbmdlc3Rpb24gY29udHJvbCBzaWRlLCBidXQgdGhlcmUncyBhbHdheXMgdGhlIGNoYW5jZSBJIG1pc3NlZCBzb21ldGhpbmcgZnVuZGFtZW50YWwgaW4gdGhlIG1ldHJpYyBjb2xsZWN0aW9uIG9yIHJlcG9ydGluZy4gSXQncyBlYXN5IHRvIGdldCB0dW5uZWwgdmlzaW9uIHdoZW4gZGVidWdnaW5nIGEgc3BlY2lmaWMgaXNzdWUsIHNvIGEgZnJlc2ggbG9vayBhdCB0aGUgY29yZSBkYXRhIGdhdGhlcmluZyBpcyB3YXJyYW50ZWQuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGRhdGEgSSdtIHVzaW5nIGZvciBhbmFseXNpcyBpcyBib3RoIGFjY3VyYXRlIGFuZCBjb21wcmVoZW5zaXZlLiBNYXliZSB0aGVyZSdzIGEgc3VidGxlIGludGVyYWN0aW9uIEkgb3Zlcmxvb2tlZCwgb3IgcGVyaGFwcyBhIHByZXZpb3VzbHkgZGlzbWlzc2VkIGVkZ2UgY2FzZSBpcyBub3cgcmVsZXZhbnQgaW4gbGlnaHQgb2YgcmVjZW50IGZpbmRpbmdzLiBBIG1ldGhvZGljYWwgcmV2aWV3IHNob3VsZCBoZWxwIG1lIHBpbnBvaW50IGFueSBkYXRhIGludGVncml0eSBpc3N1ZXMgb3IgaWRlbnRpZnkgcG90ZW50aWFsIG1ldHJpY3MgdGhhdCBjb3VsZCBwcm92aWRlIGFkZGl0aW9uYWwgaW5zaWdodHMgaW50byB0aGUgY3VycmVudCBwcm9ibGVtLiBUaW1lIHRvIGRpdmUgYmFjayBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNjIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNDo0Mi4xMTMxODc3MjNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTI0NzU4ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGluZXRwZWVyX2FkZHIgW2EtekEtWjAtOV9dKyxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX21ldHJpY3MuYz0yNDk9c3RhdGljIHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqX190Y3BfZ2V0X21ldHJpY3NfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjUyLVxcdHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG07XFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoyNTM6XFx0c3RydWN0IGluZXRwZWVyX2FkZHIgc2FkZHIsIGRhZGRyO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjU0LVxcdHVuc2lnbmVkIGludCBoYXNoO1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz0yOTE9c3RhdGljIHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdGNwX2dldF9tZXRyaWNzKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjk1LVxcdHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG07XFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoyOTY6XFx0c3RydWN0IGluZXRwZWVyX2FkZHIgc2FkZHIsIGRhZGRyO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjk3LVxcdHVuc2lnbmVkIGludCBoYXNoO1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz04NDI9c3RhdGljIGludCB0Y3BfbWV0cmljc19ubF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTg0NC1cXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODQ1OlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTg0Ni1cXHR1bnNpZ25lZCBpbnQgaGFzaDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9OTI4PXN0YXRpYyBpbnQgdGNwX21ldHJpY3NfbmxfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy05MzItXFx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrIF9fcmN1ICoqcHA7XFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzo5MzM6XFx0c3RydWN0IGluZXRwZWVyX2FkZHIgc2FkZHIsIGRhZGRyO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtOTM0LVxcdHVuc2lnbmVkIGludCBoYXNoO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNDo0NC40MDU2Njk3OTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MTE5OTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIE5ldHdvcmsgSW50ZXJmYWNlIE1ldHJpY3MgUmV0cmlldmFsIGFuZCBEZWxldGlvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiBob3cgd2UncmUgaGFuZGxpbmcgVENQIG1ldHJpY3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHRjcF9tZXRyaWNzX25sX2NtZF9nZXRgIGFuZCBgdGNwX21ldHJpY3NfbmxfY21kX2RlbGAgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHdlJ3JlIHJldHJpZXZpbmcgdGhlIG5ldHdvcmsgaW5mb3JtYXRpb24gYW5kIGhvdyB3ZSBhcmUgZGVsZXRpbmcgaXQuIEkgd2FudCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBlZGdlIGNhc2VzIGFyZSwgd2hlcmUgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBtaWdodCBiZSwgYW5kIHdoZXRoZXIgb3VyIGVycm9yIGhhbmRsaW5nIGlzIHJvYnVzdCBlbm91Z2guIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgbm90IG1pc3NpbmcgYW55IG9idmlvdXMgaW5lZmZpY2llbmNpZXMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHNjYWxlIHdlJ3JlIGRlYWxpbmcgd2l0aC4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk3NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM0OjQ3Ljg0Njg3Mjg5M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwX21ldHJpY3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDI6XFx0c3RhdGljIGludCB0Y3BfbWV0cmljc19ubF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIDg0MzpcXHR7XFxuIDg0NDpcXHRcXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtO1xcbiA4NDU6XFx0XFx0c3RydWN0IGluZXRwZWVyX2FkZHIgc2FkZHIsIGRhZGRyO1xcbiA4NDY6XFx0XFx0dW5zaWduZWQgaW50IGhhc2g7XFxuIDg0NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xcbiA4NDg6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZ2VubF9pbmZvX25ldChpbmZvKTtcXG4gODQ5OlxcdFxcdHZvaWQgKnJlcGx5O1xcbiA4NTA6XFx0XFx0aW50IHJldDtcXG4gODUxOlxcdFxcdGJvb2wgc3JjID0gdHJ1ZTtcXG4gODUyOlxcdFxcbiA4NTM6XFx0XFx0cmV0ID0gcGFyc2VfbmxfYWRkcihpbmZvLCBcXHUwMDI2ZGFkZHIsIFxcdTAwMjZoYXNoLCAwKTtcXG4gODU0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4NTU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODU2OlxcdFxcbiA4NTc6XFx0XFx0cmV0ID0gcGFyc2Vfbmxfc2FkZHIoaW5mbywgXFx1MDAyNnNhZGRyKTtcXG4gODU4OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4NTk6XFx0XFx0XFx0c3JjID0gZmFsc2U7XFxuIDg2MDpcXHRcXG4gODYxOlxcdFxcdG1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xcbiA4NjI6XFx0XFx0aWYgKCFtc2cpXFxuIDg2MzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODY0OlxcdFxcbiA4NjU6XFx0XFx0cmVwbHkgPSBnZW5sbXNnX3B1dF9yZXBseShtc2csIGluZm8sIFxcdTAwMjZ0Y3BfbWV0cmljc19ubF9mYW1pbHksIDAsXFxuIDg2NjpcXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZWdlbmxoZHItXFx1MDAzZWNtZCk7XFxuIDg2NzpcXHRcXHRpZiAoIXJlcGx5KVxcbiA4Njg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDg2OTpcXHRcXG4gODcwOlxcdFxcdGhhc2ggXj0gbmV0X2hhc2hfbWl4KG5ldCk7XFxuIDg3MTpcXHRcXHRoYXNoID0gaGFzaF8zMihoYXNoLCB0Y3BfbWV0cmljc19oYXNoX2xvZyk7XFxuIDg3MjpcXHRcXHRyZXQgPSAtRVNSQ0g7XFxuIDg3MzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDg3NDpcXHRcXHRmb3IgKHRtID0gcmN1X2RlcmVmZXJlbmNlKHRjcF9tZXRyaWNzX2hhc2hbaGFzaF0uY2hhaW4pOyB0bTtcXG4gODc1OlxcdFxcdCAgICAgdG0gPSByY3VfZGVyZWZlcmVuY2UodG0tXFx1MDAzZXRjcG1fbmV4dCkpIHtcXG4gODc2OlxcdFxcdFxcdGlmIChhZGRyX3NhbWUoXFx1MDAyNnRtLVxcdTAwM2V0Y3BtX2RhZGRyLCBcXHUwMDI2ZGFkZHIpIFxcdTAwMjZcXHUwMDI2XFxuIDg3NzpcXHRcXHRcXHQgICAgKCFzcmMgfHwgYWRkcl9zYW1lKFxcdTAwMjZ0bS1cXHUwMDNldGNwbV9zYWRkciwgXFx1MDAyNnNhZGRyKSkgXFx1MDAyNlxcdTAwMjZcXG4gODc4OlxcdFxcdFxcdCAgICBuZXRfZXEodG1fbmV0KHRtKSwgbmV0KSkge1xcbiA4Nzk6XFx0XFx0XFx0XFx0cmV0ID0gdGNwX21ldHJpY3NfZmlsbF9pbmZvKG1zZywgdG0pO1xcbiA4ODA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDg4MTpcXHRcXHRcXHR9XFxuIDg4MjpcXHRcXHR9XFxuIDg4MzpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gODg0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4ODU6XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4gODg2OlxcdFxcbiA4ODc6XFx0XFx0Z2VubG1zZ19lbmQobXNnLCByZXBseSk7XFxuIDg4ODpcXHRcXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xcbiA4ODk6XFx0XFxuIDg5MDpcXHRubGFfcHV0X2ZhaWx1cmU6XFxuIDg5MTpcXHRcXHRyZXQgPSAtRU1TR1NJWkU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM0OjQ3Ljg0NzAyNDE1M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU1OTI1MDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKlRpbWUgdG8gRXhhbWluZSBUaG9zZSBBZGRyZXNzIFBhcnNlcnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdGFrZSBhIGZyZXNoIGxvb2sgYXQgYHBhcnNlX25sX2FkZHJgIGFuZCBgcGFyc2Vfbmxfc2FkZHJgLiBJJ3ZlIHdvcmtlZCB3aXRoIG51bWVyb3VzIGFkZHJlc3MgcGFyc2luZyByb3V0aW5lcyBvdmVyIHRoZSB5ZWFycywgYW5kIGV2ZW4gd2l0aCByb2J1c3QgbGlicmFyaWVzLCBpdCdzIGFsd2F5cyBjcnVjaWFsIHRvIHJldmlzaXQgdGhlIHVuZGVybHlpbmcgbG9naWMuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlc2UgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbnMgYXJlIHN0aWxsIHBlcmZvcm1pbmcgb3B0aW1hbGx5LCBoYW5kbGluZyBlZGdlIGNhc2VzIGNvcnJlY3RseSwgYW5kIGFyZW4ndCBpbnRyb2R1Y2luZyBhbnkgc3VidGxlIGJ1Z3MgSSd2ZSBtaXNzZWQgcHJldmlvdXNseS4gVGhlcmUgYXJlIGFsd2F5cyBpbXByb3ZlbWVudHMgdG8gYmUgbWFkZSwgYW5kIGdpdmVuIHRoZSBpbXBvcnRhbmNlIG9mIGFjY3VyYXRlIGFkZHJlc3MgaW50ZXJwcmV0YXRpb24gaW4gdGhpcyBzeXN0ZW0sIHRob3JvdWdobmVzcyBpcyBrZXkuIEEgcm91dGluZSByZWZyZXNoIHdpbGwgZG8gdXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5ODcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM0OjUxLjEwMjk1MTk0N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwX21ldHJpY3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDIsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDI6XFx0c3RhdGljIGludCBfX3BhcnNlX25sX2FkZHIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGluZXRwZWVyX2FkZHIgKmFkZHIsXFxuIDgwMzpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgKmhhc2gsIGludCBvcHRpb25hbCwgaW50IHY0LCBpbnQgdjYpXFxuIDgwNDpcXHR7XFxuIDgwNTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICphO1xcbiA4MDY6XFx0XFxuIDgwNzpcXHRcXHRhID0gaW5mby1cXHUwMDNlYXR0cnNbdjRdO1xcbiA4MDg6XFx0XFx0aWYgKGEpIHtcXG4gODA5OlxcdFxcdFxcdGluZXRwZWVyX3NldF9hZGRyX3Y0KGFkZHIsIG5sYV9nZXRfaW5fYWRkcihhKSk7XFxuIDgxMDpcXHRcXHRcXHRpZiAoaGFzaClcXG4gODExOlxcdFxcdFxcdFxcdCpoYXNoID0gaXB2NF9hZGRyX2hhc2goaW5ldHBlZXJfZ2V0X2FkZHJfdjQoYWRkcikpO1xcbiA4MTI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDgxMzpcXHRcXHR9XFxuIDgxNDpcXHRcXHRhID0gaW5mby1cXHUwMDNlYXR0cnNbdjZdO1xcbiA4MTU6XFx0XFx0aWYgKGEpIHtcXG4gODE2OlxcdFxcdFxcdHN0cnVjdCBpbjZfYWRkciBpbjY7XFxuIDgxNzpcXHRcXG4gODE4OlxcdFxcdFxcdGluNiA9IG5sYV9nZXRfaW42X2FkZHIoYSk7XFxuIDgxOTpcXHRcXHRcXHRpbmV0cGVlcl9zZXRfYWRkcl92NihhZGRyLCBcXHUwMDI2aW42KTtcXG4gODIwOlxcdFxcdFxcdGlmIChoYXNoKVxcbiA4MjE6XFx0XFx0XFx0XFx0Kmhhc2ggPSBpcHY2X2FkZHJfaGFzaChpbmV0cGVlcl9nZXRfYWRkcl92NihhZGRyKSk7XFxuIDgyMjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODIzOlxcdFxcdH1cXG4gODI0OlxcdFxcdHJldHVybiBvcHRpb25hbCA/IDEgOiAtRUFGTk9TVVBQT1JUO1xcbiA4MjU6XFx0fVxcbiA4MjY6XFx0XFxuIDgyNzpcXHRzdGF0aWMgaW50IHBhcnNlX25sX2FkZHIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGluZXRwZWVyX2FkZHIgKmFkZHIsXFxuIDgyODpcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50ICpoYXNoLCBpbnQgb3B0aW9uYWwpXFxuIDgyOTpcXHR7XFxuIDgzMDpcXHRcXHRyZXR1cm4gX19wYXJzZV9ubF9hZGRyKGluZm8sIGFkZHIsIGhhc2gsIG9wdGlvbmFsLFxcbiA4MzE6XFx0XFx0XFx0XFx0ICAgICAgIFRDUF9NRVRSSUNTX0FUVFJfQUREUl9JUFY0LFxcbiA4MzI6XFx0XFx0XFx0XFx0ICAgICAgIFRDUF9NRVRSSUNTX0FUVFJfQUREUl9JUFY2KTtcXG4gODMzOlxcdH1cXG4gODM0OlxcdFxcbiA4MzU6XFx0c3RhdGljIGludCBwYXJzZV9ubF9zYWRkcihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYWRkcilcXG4gODM2OlxcdHtcXG4gODM3OlxcdFxcdHJldHVybiBfX3BhcnNlX25sX2FkZHIoaW5mbywgYWRkciwgTlVMTCwgMCxcXG4gODM4OlxcdFxcdFxcdFxcdCAgICAgICBUQ1BfTUVUUklDU19BVFRSX1NBRERSX0lQVjQsXFxuIDgzOTpcXHRcXHRcXHRcXHQgICAgICAgVENQX01FVFJJQ1NfQVRUUl9TQUREUl9JUFY2KTtcXG4gODQwOlxcdH1cXG4gODQxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNDo1MS4xMDMwODA3ODdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2ODM4NzA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIE1lbW9yeSBTYWZldHkgSXNzdWVzIGluIEFkZHJlc3MgQ29tcGFyaXNvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgcGFyc2VfbmxfYWRkcmAgaGFuZGxlcyBuZXR3b3JrIGFkZHJlc3Nlcy4gSXQgc2VlbXMgbGlrZSBpdCdzIGluaXRpYWxpemluZyB0aGUgYGFkZHJgIHN0cnVjdHVyZSwgZWl0aGVyIGFzIElQdjQgb3IgSVB2NiwgdXNpbmcgZnVuY3Rpb25zIGxpa2UgYGluZXRwZWVyX3NldF9hZGRyX3Y0YCBvciBgaW5ldHBlZXJfc2V0X2FkZHJfdjZgLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgbHVya2luZyBpbiB0aGlzIHByb2Nlc3M/IEkgbWVhbiwgd2UncmUgdGFsa2luZyBhYm91dCBjb21wYXJpbmcgYWRkcmVzc2VzLCBhbmQgdGhhdCBoYXMgdG8gYmUgcm9jayBzb2xpZC5cblxuVGhlIG5leHQgc3RlcCBpcyB0aGUgYGFkZHJfc2FtZWAgZnVuY3Rpb24sIHdoaWNoLCBJIHByZXN1bWUsIGlzIHRoZSBvbmUgYWN0dWFsbHkgZG9pbmcgdGhlIGNvbXBhcmlzb24uIEdvb2QsIGl0IHV0aWxpemVzIGBpbmV0cGVlcl9hZGRyX2NtcGAgZm9yIHRoZSBsb3ctbGV2ZWwgYml0LWJ5LWJpdCBjb21wYXJpc29uLiBUaGF0J3MgYSBnb29kIHNpZ24sIGFuZCBpdCBtZWFucyB0aGUgY29tcGFyaXNvbiBvbmx5IGxvb2tzIGF0IHRoZSBpbml0aWFsaXplZCBieXRlcy4gU28sIHRoYXQncyBiZXR0ZXIsIGJ1dCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZy4uLlxuXG5Pa2F5LCBob2xkIG9uLCBJIG5lZWQgdG8gem9vbSBvdXQgYSBiaXQuIFdoYXQgYWJvdXQgdGhlIGluZm9ybWF0aW9uIHVzZWQgZm9yIFRDUCBtZXRyaWNzLCBsaWtlIGluIGB0Y3BfbWV0cmljc19maWxsX2luZm9gPyBEb2VzICp0aGF0KiBmdW5jdGlvbiBjb3B5IHRoZSBgc3RydWN0IGluZXRwZWVyX2FkZHJgIHRvIHVzZXIgc3BhY2U/IElmIHNvLCB3ZSdyZSBiYWNrIHRvIHNxdWFyZSBvbmUsIGFuZCBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGF0IGNvZGUgcGF0aCB2ZXJ5IGNhcmVmdWxseSBmb3IgcG90ZW50aWFsIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0IGNvdWxkIGJlIGEgY3JpdGljYWwgdnVsbmVyYWJpbGl0eS4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHRyYWNlIHRoZSBkYXRhIGZsb3cgdG8gZW5zdXJlIHdlJ3JlIHNhZmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODU0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzQ6NTUuNDcxNDgzMTk4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfbWV0cmljcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY5MDpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjkxOlxcdFxcdFxcdFxcdFxcdG4rKztcXG4gNjkyOlxcdFxcdFxcdFxcdFxcdHZhbCA9IG1heCh2YWwgLyAxMDAwLCAxVSk7XFxuIDY5MzpcXHRcXHRcXHRcXHR9XFxuIDY5NDpcXHRcXHRcXHRcXHRpZiAoaSA9PSBUQ1BfTUVUUklDX1JUVFZBUikge1xcbiA2OTU6XFx0XFx0XFx0XFx0XFx0aWYgKG5sYV9wdXRfdTMyKG1zZywgVENQX01FVFJJQ19SVFRWQVJfVVMgKyAxLFxcbiA2OTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dmFsKSBcXHUwMDNjIDApXFxuIDY5NzpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjk4OlxcdFxcdFxcdFxcdFxcdG4rKztcXG4gNjk5OlxcdFxcdFxcdFxcdFxcdHZhbCA9IG1heCh2YWwgLyAxMDAwLCAxVSk7XFxuIDcwMDpcXHRcXHRcXHRcXHR9XFxuIDcwMTpcXHRcXHRcXHRcXHRpZiAobmxhX3B1dF91MzIobXNnLCBpICsgMSwgdmFsKSBcXHUwMDNjIDApXFxuIDcwMjpcXHRcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNzAzOlxcdFxcdFxcdFxcdG4rKztcXG4gNzA0OlxcdFxcdFxcdH1cXG4gNzA1OlxcdFxcdFxcdGlmIChuKVxcbiA3MDY6XFx0XFx0XFx0XFx0bmxhX25lc3RfZW5kKG1zZywgbmVzdCk7XFxuIDcwNzpcXHRcXHRcXHRlbHNlXFxuIDcwODpcXHRcXHRcXHRcXHRubGFfbmVzdF9jYW5jZWwobXNnLCBuZXN0KTtcXG4gNzA5OlxcdFxcdH1cXG4gNzEwOlxcdFxcbiA3MTE6XFx0XFx0e1xcbiA3MTI6XFx0XFx0XFx0c3RydWN0IHRjcF9mYXN0b3Blbl9tZXRyaWNzIHRmb21fY29weVsxXSwgKnRmb207XFxuIDcxMzpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgc2VxO1xcbiA3MTQ6XFx0XFxuIDcxNTpcXHRcXHRcXHRkbyB7XFxuIDcxNjpcXHRcXHRcXHRcXHRzZXEgPSByZWFkX3NlcWJlZ2luKFxcdTAwMjZmYXN0b3Blbl9zZXFsb2NrKTtcXG4gNzE3OlxcdFxcdFxcdFxcdHRmb21fY29weVswXSA9IHRtLVxcdTAwM2V0Y3BtX2Zhc3RvcGVuO1xcbiA3MTg6XFx0XFx0XFx0fSB3aGlsZSAocmVhZF9zZXFyZXRyeShcXHUwMDI2ZmFzdG9wZW5fc2VxbG9jaywgc2VxKSk7XFxuIDcxOTpcXHRcXG4gNzIwOlxcdFxcdFxcdHRmb20gPSB0Zm9tX2NvcHk7XFxuIDcyMTpcXHRcXHRcXHRpZiAodGZvbS1cXHUwMDNlbXNzIFxcdTAwMjZcXHUwMDI2XFxuIDcyMjpcXHRcXHRcXHQgICAgbmxhX3B1dF91MTYobXNnLCBUQ1BfTUVUUklDU19BVFRSX0ZPUEVOX01TUyxcXG4gNzIzOlxcdFxcdFxcdFxcdFxcdHRmb20tXFx1MDAzZW1zcykgXFx1MDAzYyAwKVxcbiA3MjQ6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDcyNTpcXHRcXHRcXHRpZiAodGZvbS1cXHUwMDNlc3luX2xvc3MgXFx1MDAyNlxcdTAwMjZcXG4gNzI2OlxcdFxcdFxcdCAgICAobmxhX3B1dF91MTYobXNnLCBUQ1BfTUVUUklDU19BVFRSX0ZPUEVOX1NZTl9EUk9QUyxcXG4gNzI3OlxcdFxcdFxcdFxcdFxcdHRmb20tXFx1MDAzZXN5bl9sb3NzKSBcXHUwMDNjIDAgfHxcXG4gNzI4OlxcdFxcdFxcdCAgICAgbmxhX3B1dF9tc2Vjcyhtc2csIFRDUF9NRVRSSUNTX0FUVFJfRk9QRU5fU1lOX0RST1BfVFMsXFxuIDcyOTpcXHRcXHRcXHRcXHRcXHRqaWZmaWVzIC0gdGZvbS1cXHUwMDNlbGFzdF9zeW5fbG9zcyxcXG4gNzMwOlxcdFxcdFxcdFxcdFxcdFRDUF9NRVRSSUNTX0FUVFJfUEFEKSBcXHUwMDNjIDApKVxcbiA3MzE6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDczMjpcXHRcXHRcXHRpZiAodGZvbS1cXHUwMDNlY29va2llLmxlbiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4gNzMzOlxcdFxcdFxcdCAgICBubGFfcHV0KG1zZywgVENQX01FVFJJQ1NfQVRUUl9GT1BFTl9DT09LSUUsXFxuIDczNDpcXHRcXHRcXHRcXHQgICAgdGZvbS1cXHUwMDNlY29va2llLmxlbiwgdGZvbS1cXHUwMDNlY29va2llLnZhbCkgXFx1MDAzYyAwKVxcbiA3MzU6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDczNjpcXHRcXHR9XFxuIDczNzpcXHRcXG4gNzM4OlxcdFxcdHJldHVybiAwO1xcbiA3Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM0OjU1LjQ3MTU4ODk4OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDc2MDI0ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGB0Y3BfbWV0cmljc19maWxsX2luZm9gKipcblxuT2theSwgbGV0J3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGxvb2sgYXQgdGhlIGB0Y3BfbWV0cmljc19maWxsX2luZm9gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIGFsd2F5cyBvbiB0aGUgZnVuY3Rpb24ncyBlbnRyeSBwb2ludCwgdW5kZXJzdGFuZGluZyBpdHMgaW1tZWRpYXRlIGlucHV0cyBhbmQgaW50ZW5kZWQgcHVycG9zZS4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHNpZ25hdHVyZSwgYW50aWNpcGF0aW5nIHBvdGVudGlhbCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgcGFzc2VkLCBhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBkZXNpZ25lZCB0byAqZG8qLiBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGNvcmUgcmVzcG9uc2liaWxpdHkgb2YgdGhpcyByb3V0aW5lLiBJcyBpdCBzaW1wbHkgY29sbGVjdGluZyBkYXRhPyBJcyBpdCBwZXJmb3JtaW5nIGNhbGN1bGF0aW9ucz8gSXMgaXQgd3JpdGluZyB0byBzb21lIHNoYXJlZCBtZW1vcnkgb3IgYW4gb3V0cHV0IGJ1ZmZlcj8gVGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl0IGRlYWxzIHdpdGggVENQIG1ldHJpY3MsIHNvIEknbSBleHBlY3RpbmcgcGVyZm9ybWFuY2UgZGF0YSwgYnV0IEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhlICpjb250ZXh0KiBvZiB0aG9zZSBtZXRyaWNzLiBJcyBpdCBjb25uZWN0aW9uLXNwZWNpZmljPyBTeXN0ZW0td2lkZT8gRmxvdy1iYXNlZD8gR3Jhc3BpbmcgdGhpcyBjb250ZXh0IGZyb20gdGhlIG91dHNldCB3aWxsIHNoYXBlIGhvdyBJIGFuYWx5emUgdGhlIGNvZGUuIEknbSBhbHJlYWR5IGZvcm1pbmcgaHlwb3RoZXNlcyBhYm91dCBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJlc3QsIGxpa2UgbG9ja2luZyBzdHJhdGVnaWVzLCBkYXRhIGFnZ3JlZ2F0aW9uLCBhbmQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyByZWxhdGVkIHRvIHRoZSBmcmVxdWVuY3kgb2YgaXRzIGV4ZWN1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxNDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM1OjAwLjU0NzYxNjM0OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwX21ldHJpY3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NDA6XFx0I2VuZGlmXFxuIDY0MTpcXHR9O1xcbiA2NDI6XFx0XFxuIDY0MzpcXHQvKiBBZGQgYXR0cmlidXRlcywgY2FsbGVyIGNhbmNlbHMgaXRzIGhlYWRlciBvbiBmYWlsdXJlICovXFxuIDY0NDpcXHRzdGF0aWMgaW50IHRjcF9tZXRyaWNzX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbiA2NDU6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdG0pXFxuIDY0NjpcXHR7XFxuIDY0NzpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xcbiA2NDg6XFx0XFx0aW50IGk7XFxuIDY0OTpcXHRcXG4gNjUwOlxcdFxcdHN3aXRjaCAodG0tXFx1MDAzZXRjcG1fZGFkZHIuZmFtaWx5KSB7XFxuIDY1MTpcXHRcXHRjYXNlIEFGX0lORVQ6XFxuIDY1MjpcXHRcXHRcXHRpZiAobmxhX3B1dF9pbl9hZGRyKG1zZywgVENQX01FVFJJQ1NfQVRUUl9BRERSX0lQVjQsXFxuIDY1MzpcXHRcXHRcXHRcXHRcXHQgICAgaW5ldHBlZXJfZ2V0X2FkZHJfdjQoXFx1MDAyNnRtLVxcdTAwM2V0Y3BtX2RhZGRyKSkgXFx1MDAzYyAwKVxcbiA2NTQ6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDY1NTpcXHRcXHRcXHRpZiAobmxhX3B1dF9pbl9hZGRyKG1zZywgVENQX01FVFJJQ1NfQVRUUl9TQUREUl9JUFY0LFxcbiA2NTY6XFx0XFx0XFx0XFx0XFx0ICAgIGluZXRwZWVyX2dldF9hZGRyX3Y0KFxcdTAwMjZ0bS1cXHUwMDNldGNwbV9zYWRkcikpIFxcdTAwM2MgMClcXG4gNjU3OlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiA2NTg6XFx0XFx0XFx0YnJlYWs7XFxuIDY1OTpcXHRcXHRjYXNlIEFGX0lORVQ2OlxcbiA2NjA6XFx0XFx0XFx0aWYgKG5sYV9wdXRfaW42X2FkZHIobXNnLCBUQ1BfTUVUUklDU19BVFRSX0FERFJfSVBWNixcXG4gNjYxOlxcdFxcdFxcdFxcdFxcdCAgICAgaW5ldHBlZXJfZ2V0X2FkZHJfdjYoXFx1MDAyNnRtLVxcdTAwM2V0Y3BtX2RhZGRyKSkgXFx1MDAzYyAwKVxcbiA2NjI6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDY2MzpcXHRcXHRcXHRpZiAobmxhX3B1dF9pbjZfYWRkcihtc2csIFRDUF9NRVRSSUNTX0FUVFJfU0FERFJfSVBWNixcXG4gNjY0OlxcdFxcdFxcdFxcdFxcdCAgICAgaW5ldHBlZXJfZ2V0X2FkZHJfdjYoXFx1MDAyNnRtLVxcdTAwM2V0Y3BtX3NhZGRyKSkgXFx1MDAzYyAwKVxcbiA2NjU6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDY2NjpcXHRcXHRcXHRicmVhaztcXG4gNjY3OlxcdFxcdGRlZmF1bHQ6XFxuIDY2ODpcXHRcXHRcXHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcXG4gNjY5OlxcdFxcdH1cXG4gNjcwOlxcdFxcbiA2NzE6XFx0XFx0aWYgKG5sYV9wdXRfbXNlY3MobXNnLCBUQ1BfTUVUUklDU19BVFRSX0FHRSxcXG4gNjcyOlxcdFxcdFxcdFxcdCAgamlmZmllcyAtIFJFQURfT05DRSh0bS1cXHUwMDNldGNwbV9zdGFtcCksXFxuIDY3MzpcXHRcXHRcXHRcXHQgIFRDUF9NRVRSSUNTX0FUVFJfUEFEKSBcXHUwMDNjIDApXFxuIDY3NDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjc1OlxcdFxcbiA2NzY6XFx0XFx0e1xcbiA2Nzc6XFx0XFx0XFx0aW50IG4gPSAwO1xcbiA2Nzg6XFx0XFxuIDY3OTpcXHRcXHRcXHRuZXN0ID0gbmxhX25lc3Rfc3RhcnRfbm9mbGFnKG1zZywgVENQX01FVFJJQ1NfQVRUUl9WQUxTKTtcXG4gNjgwOlxcdFxcdFxcdGlmICghbmVzdClcXG4gNjgxOlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiA2ODI6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFRDUF9NRVRSSUNfTUFYX0tFUk5FTCArIDE7IGkrKykge1xcbiA2ODM6XFx0XFx0XFx0XFx0dTMyIHZhbCA9IHRjcF9tZXRyaWNfZ2V0KHRtLCBpKTtcXG4gNjg0OlxcdFxcbiA2ODU6XFx0XFx0XFx0XFx0aWYgKCF2YWwpXFxuIDY4NjpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNjg3OlxcdFxcdFxcdFxcdGlmIChpID09IFRDUF9NRVRSSUNfUlRUKSB7XFxuIDY4ODpcXHRcXHRcXHRcXHRcXHRpZiAobmxhX3B1dF91MzIobXNnLCBUQ1BfTUVUUklDX1JUVF9VUyArIDEsXFxuIDY4OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHR2YWwpIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzU6MDAuNTQ3NzM3NTY4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTc5MzIxNDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBFeHBvc3VyZSBpbiBgaW5ldHBlZXJfYWRkcmAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgaG93IGBpbmV0cGVlcl9nZXRfYWRkcl92NGAgb25seSBjb3BpZXMgcGFydCBvZiBgc3RydWN0IGluZXRwZWVyX2FkZHJgLCBzcGVjaWZpY2FsbHkgYGE0LmFkZHJgLCBhcyBpdCByZXR1cm5zIGEgYF9fYmUzMmAuIEhvd2V2ZXIsIHRoZSBjb2RlIHNuaXBwZXQgZnJvbSB0aGUgcGF0Y2ggcmV2ZWFscyBhIGRpZmZlcmVudCBzY2VuYXJpby4gYHAtXHUwMDNlZGFkZHIgPSAqZGFkZHI7YCBjb3BpZXMgdGhlICplbnRpcmUqIGBzdHJ1Y3QgaW5ldHBlZXJfYWRkcmAsIHdoaWNoIGluY2x1ZGVzIHBhZGRpbmcgYW5kIGEgdW5pb24sIHBvdGVudGlhbGx5IGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cbk15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuICBJIG5lZWQgdG8gYXNjZXJ0YWluIGlmIGBwLVx1MDAzZWRhZGRyYCBvciB0aGUgZW5jbG9zaW5nIGBzdHJ1Y3QgaW5ldF9wZWVyYCBhcmUgZXZlciBjb3BpZWQgb3V0c2lkZSB0aGUga2VybmVsLiAgVGhlIGNvbmNsdXNpb24sIHRoYW5rZnVsbHksIGlzIHRoYXQgYHN0cnVjdCBpbmV0X3BlZXJgIGlzIGludGVybmFsIHRvIHRoZSBrZXJuZWwncyBJUCBwZWVyIHRyYWNraW5nIHN5c3RlbSAodXNlZCwgZS5nLiwgZm9yIElQIElEIGdlbmVyYXRpb24gYW5kIHJvdXRpbmcgbWV0cmljcykgYW5kIGlzICpub3QqIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBkaXJlY3RseS5cblxuT2theSwgc28gbm90IGRpcmVjdGx5IGV4cG9zZWQuIFdoYXQgYWJvdXQgdGhlIHByb2Nlc3Npbmcgd2l0aGluIHRoZSBrZXJuZWw/IElzIGBwLVx1MDAzZWRhZGRyYCBoYXNoZWQsIGNvbXBhcmVkLCBvciBvdGhlcndpc2UgdXNlZCBpbiBhIHdheSB0aGF0IHdvdWxkIG1ha2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbWF0aWM/ICBUaGUgYHAtXHUwMDNlZGFkZHJgIGlzIG5vdCBkaXJlY3RseSBoYXNoZWQuIEluc3RlYWQsIGEgcHJlY29tcHV0ZWQgaGFzaCBgcC1cdTAwM2VoYXNoYCBpcyBzdG9yZWQuXG5cblRoZSBjcml0aWNhbCBjb21wYXJpc29uIHBvaW50IGlzIGBpbmV0cGVlcl9lbnRyeV9jbXBgLiAgVGhlIGZ1bmN0aW9uIGZpcnN0IGNvbXBhcmVzIHByZWNvbXB1dGVkIGhhc2hlcy4gSWYgdGhvc2UgbWF0Y2gsIGBpbmV0cGVlcl9hZGRyX2NtcGAgaXMgY2FsbGVkLiBOb3csIGBpbmV0cGVlcl9hZGRyX2NtcGAgb25seSBjb21wYXJlcyB0aGUgKmluaXRpYWxpemVkKiBieXRlcyBvZiBgZGFkZHJgLCBtZWFuaW5nIHRob3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSB0aGUgcGFkZGluZyBvciB0aGUgdW5pb24gc2hvdWxkIG5vdCBiZSBwcm9ibGVtYXRpYyBpbiBhIGNvbXBhcmlzb24uXG5cbkhvd2V2ZXIsIEkgbmVlZCB0byBjb25maXJtIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IGluZXRwZWVyX2FkZHJgIGl0c2VsZi4gVGhlIGBpbmV0cGVlcl9hZGRyX2hhc2hgIGZ1bmN0aW9uIHV0aWxpemVzIHRoZSBgYTQudmlmYCBmaWVsZCAoYW1vbmcgb3RoZXIgZmllbGRzKSB3aGVuIGBBRl9JTkVUYCBpcyB1c2VkLiBJIGFtIGNoZWNraW5nIHRoZSBmdW5jdGlvbiBjYWxscyB0byBgaW5ldF9nZXRwZWVyX3Y0YCBhbmQgYGluZXRwZWVyX3NldF9hZGRyX3Y0YCB3aGVyZSB0aGUgYHN0cnVjdCBpbmV0cGVlcl9hZGRyYCBpcyBzZXQuIFRoZSB2YWx1ZSBvZiBgYTQudmlmYCBpcyBzZXQgaW4gYm90aCBvZiB0aGVzZSBmdW5jdGlvbnMuIFNvLCB0aGF0J3Mgbm90IGEgY29uY2Vybi5cblxuTm93LCBsZXQncyBleHBsb3JlIG90aGVyIGNvZGUgcGF0aHMgaW52b2x2aW5nIGBzdHJ1Y3QgaW5ldHBlZXJfYWRkcmAuIEkndmUgcmV2aXNpdGVkIGBuZXQvaXB2NC90Y3BfbWV0cmljcy5jYCB0byBleGFtaW5lIGhvdyBgc3RydWN0IGluZXRwZWVyX2FkZHJgIGlzIGNyZWF0ZWQgYW5kIHVzZWQsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gVENQIG1ldHJpY3MuIEZ1bmN0aW9ucyBsaWtlIGBfX3RjcF9nZXRfbWV0cmljc19yZXFgLCBgdGNwX2dldF9tZXRyaWNzYCwgYHRjcF9tZXRyaWNzX25sX2NtZF9nZXRgLCBhbmQgYHRjcF9tZXRyaWNzX25sX2NtZF9kZWxgIGFyZSByZWxldmFudCBoZXJlLiBJJ3ZlIGZvdW5kIHRob3NlIGZ1bmN0aW9ucyBpbml0aWFsaXplIGBzdHJ1Y3QgaW5ldHBlZXJfYWRkcmAgdXNpbmcgYGluZXRwZWVyX3NldF9hZGRyX3Y0YCBvciBgaW5ldHBlZXJfc2V0X2FkZHJfdjZgLiBTbywgdGhlIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgaW4gdGhlIHN0YW5kYXJkIGNvZGUgcGF0aHMuXG5cbkhvd2V2ZXIsIHRoZSBhbmFseXNpcyBvZiBgdGNwX21ldHJpY3NfbmxfY21kX2dldGAgYW5kIGB0Y3BfbWV0cmljc19ubF9jbWRfZGVsYCByZXZlYWxzIGEgcG90ZW50aWFsIGlzc3VlLiBUaGUgZnVuY3Rpb24gYHBhcnNlX25sX3NhZGRyYCBpbml0aWFsaXplcyBgc2FkZHJgLiBBIGZhaWx1cmUgb2YgYHBhcnNlX25sX3NhZGRyYCBjYW4gbGVhZCB0byBhbiB1bmluaXRpYWxpemVkIGBzYWRkcmAuIEl0IGlzIHRoZW4gdXNlZCBpbiBhIGNvbXBhcmlzb24gd2l0aGluIGEgbG9vcCwgYnV0IHRoZSBjb2RlIGNvcnJlY3RseSBzaG9ydC1jaXJjdWl0cyB0aGUgY29tcGFyaXNvbiBpZiB0aGUgYHNhZGRyYCB2YWx1ZSBpcyBub3QgaW5pdGlhbGl6ZWQsIHByZXZlbnRpbmcgYSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0IGlzIGEgcmVsaWVmLlxuXG5UaGVyZWZvcmUsIGFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3LCBJJ3ZlIGNvbmNsdWRlZCB0aGVyZSdzIG5vIHBhdGggd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSBgc3RydWN0IGluZXRwZWVyX2FkZHJgIGNhbiBiZSBsZWFrZWQgdG8gdXNlciBzcGFjZSBvciBjYXVzZSBhIGtlcm5lbCB2dWxuZXJhYmlsaXR5LiBUaGUgcGFkZGluZyBhbmQgdW5pb24gd2l0aGluIHRoZSBzdHJ1Y3QsIHdoaWxlIHRlY2huaWNhbGx5IHVuaW5pdGlhbGl6ZWQgZHVyaW5nIGNvcHksIGFyZSBzYWZlbHkgaGFuZGxlZCBieSBzdWJzZXF1ZW50IGNvZGUgdGhhdCBlaXRoZXIgYXZvaWRzIHRoZWlyIHVzZSBvciBlbnN1cmVzIHByb3BlciBpbml0aWFsaXphdGlvbiBiZWZvcmUgdXNhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzAxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM1OjE4LjcyNzA2OTAzMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1ODEzNzgxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgaW5ldHBlZXJfYWRkclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pbmV0cGVlci5oPTIwPXN0cnVjdCBpcHY0X2FkZHJfa2V5IHtcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMjYtXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoyNzpzdHJ1Y3QgaW5ldHBlZXJfYWRkciB7XFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0yOC1cXHR1bmlvbiB7XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oPTM2PXN0cnVjdCBpbmV0X3BlZXIge1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0zOC1cXHR1NjRcXHRcXHRcXHRoYXNoO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6Mzk6XFx0c3RydWN0IGluZXRwZWVyX2FkZHJcXHRkYWRkcjtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTQwLVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD03MD12b2lkIGluZXRfaW5pdHBlZXJzKHZvaWQpIF9faW5pdDtcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtNzMtXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDo3NDpzdGF0aWMgaW5saW5lIHZvaWQgaW5ldHBlZXJfc2V0X2FkZHJfdjQoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyLCBfX2JlMzIgaXApXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC03NS17XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTgwLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6ODE6c3RhdGljIGlubGluZSBfX2JlMzIgaW5ldHBlZXJfZ2V0X2FkZHJfdjQoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyKVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtODIte1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC04NS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjg2OnN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0cGVlcl9zZXRfYWRkcl92NihzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIsXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC04Ny1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW42X2FkZHIgKmluNilcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtOTItXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDo5MzpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbjZfYWRkciAqaW5ldHBlZXJfZ2V0X2FkZHJfdjYoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyKVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtOTQte1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD05OT1zdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLFxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTAwOlxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIpO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTAxLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg9MTAyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTA1LXtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjEwNjpcXHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBkYWRkcjtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwNy1cXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg9MTE0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyX3Y2KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTE2LXtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjExNzpcXHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBkYWRkcjtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTExOC1cXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTIzLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTI0OnN0YXRpYyBpbmxpbmUgaW50IGluZXRwZWVyX2FkZHJfY21wKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphLFxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTI1OlxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYilcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEyNi17XFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jPTU2PXN0YXRpYyBzaXBoYXNoX2FsaWduZWRfa2V5X3QgaW5ldHBlZXJfaGFzaF9rZXkgX19yZWFkX21vc3RseTtcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTU3LVxcbm5ldC9pcHY0L2luZXRwZWVyLmM6NTg6c3RhdGljIHU2NCBpbmV0cGVlcl9hZGRyX2hhc2goY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmEpXFxubmV0L2lwdjQvaW5ldHBlZXIuYy01OS17XFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jPTcxPXN0YXRpYyBpbnQgaW5ldHBlZXJfZW50cnlfY21wKHU2NCBkaGFzaCxcXG5uZXQvaXB2NC9pbmV0cGVlci5jOjcyOlxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTczLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0X3BlZXIgKnApXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jPTk5PXZvaWQgX19pbml0IGluZXRfaW5pdHBlZXJzKHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTExNC0vKiBDYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgb3IgYmFzZS1cXHUwMDNlbG9jayBoZWxkICovXFxubmV0L2lwdjQvaW5ldHBlZXIuYzoxMTU6c3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0xMTYtXFx0XFx0XFx0XFx0dTY0IGRoYXNoLFxcbi0tXFxubmV0L2lwdjQvaW5ldHBlZXIuYz0xOTk9c3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG5uZXQvaXB2NC9pbmV0cGVlci5jOjIwMDpcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyKVxcbm5ldC9pcHY0L2luZXRwZWVyLmMtMjAxLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjMtXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoyNDpzdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICpfX3RjcF9nZXRfbWV0cmljcyhjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqc2FkZHIsXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoyNTpcXHRcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yNi1cXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBoYXNoKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9NDE9c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrIHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtNDMtXFx0c3RydWN0IG5ldFxcdFxcdFxcdCp0Y3BtX25ldDtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjQ0OlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyXFx0XFx0dGNwbV9zYWRkcjtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjQ1OlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyXFx0XFx0dGNwbV9kYWRkcjtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTQ2LVxcdHVuc2lnbmVkIGxvbmdcXHRcXHRcXHR0Y3BtX3N0YW1wO1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz03ND1zdGF0aWMgdm9pZCB0Y3BfbWV0cmljX3NldChzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtLFxcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04MS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjgyOnN0YXRpYyBib29sIGFkZHJfc2FtZShjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSxcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjgzOlxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpiKVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODQte1xcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYz0xNjM9c3RhdGljIHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayAqdGNwbV9uZXcoc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MTY0OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGluZXRwZWVyX2FkZHIgKnNhZGRyLFxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MTY1OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLFxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMTY2LVxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGhhc2gpXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTIyMj1zdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0Y3BfZ2V0X2VuY29kZShzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtLCBpbnQgZGVwdGgpXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTIzMC1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjIzMTpzdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICpfX3RjcF9nZXRfbWV0cmljcyhjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqc2FkZHIsXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoyMzI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLFxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMjMzLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGhhc2gpXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTI0OT1zdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICpfX3RjcF9nZXRfbWV0cmljc19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yNTItXFx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0bTtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI1MzpcXHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBzYWRkciwgZGFkZHI7XFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yNTQtXFx0dW5zaWduZWQgaW50IGhhc2g7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTI5MT1zdGF0aWMgc3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0Y3BfZ2V0X21ldHJpY3Moc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yOTUtXFx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0bTtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjI5NjpcXHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBzYWRkciwgZGFkZHI7XFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0yOTctXFx0dW5zaWduZWQgaW50IGhhc2g7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTc2Nz1zdGF0aWMgaW50IHRjcF9tZXRyaWNzX25sX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODAxLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODAyOnN0YXRpYyBpbnQgX19wYXJzZV9ubF9hZGRyKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBpbmV0cGVlcl9hZGRyICphZGRyLFxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODAzLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCAqaGFzaCwgaW50IG9wdGlvbmFsLCBpbnQgdjQsIGludCB2NilcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODI2LVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6ODI3OnN0YXRpYyBpbnQgcGFyc2VfbmxfYWRkcihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYWRkcixcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgyOC1cXHRcXHRcXHQgdW5zaWduZWQgaW50ICpoYXNoLCBpbnQgb3B0aW9uYWwpXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTgzNC1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjgzNTpzdGF0aWMgaW50IHBhcnNlX25sX3NhZGRyKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBpbmV0cGVlcl9hZGRyICphZGRyKVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtODM2LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9ODQyPXN0YXRpYyBpbnQgdGNwX21ldHJpY3NfbmxfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04NDQtXFx0c3RydWN0IHRjcF9tZXRyaWNzX2Jsb2NrICp0bTtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jOjg0NTpcXHRzdHJ1Y3QgaW5ldHBlZXJfYWRkciBzYWRkciwgZGFkZHI7XFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy04NDYtXFx0dW5zaWduZWQgaW50IGhhc2g7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jPTkyOD1zdGF0aWMgaW50IHRjcF9tZXRyaWNzX25sX2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtOTMyLVxcdHN0cnVjdCB0Y3BfbWV0cmljc19ibG9jayBfX3JjdSAqKnBwO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6OTMzOlxcdHN0cnVjdCBpbmV0cGVlcl9hZGRyIHNhZGRyLCBkYWRkcjtcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTkzNC1cXHR1bnNpZ25lZCBpbnQgaGFzaDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzU6MjAuMjg1MjE2MjM0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxMjYwNzU0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5pbml0aWFsaXplZCBCeXRlcyBpbiBgdGNwX21ldHJpY3NfYmxvY2tgIC0gQSBRdWljayBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYHRjcF9tZXRyaWNzX2Jsb2NrYCBzdHJ1Y3QsIGFuZCBpdCdzIHVzaW5nIHRoZSBgaW5ldHBlZXJfYWRkcmAgc3RydWN0IGZvciBib3RoIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBIYW5nIG9uLCB0aGUgYGluZXRwZWVyX2FkZHJgIGlzIHVzZWQgaW4gYSBmZXcgcGxhY2VzLCBzcGVjaWZpY2FsbHksIGluc2lkZSBvZiBgdGNwX21ldHJpY3NfYmxvY2tgLCBidXQgaWYgSSByZWNhbGwsIGB0Y3BtX25ld2AgYWxsb2NhdGVzIHRoZSBgdGNwX21ldHJpY3NfYmxvY2tgIGFuZCB0aGVuIGNvcGllcyB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgZnJvbSBvdGhlciBzdHJ1Y3R1cmVzLiBSaWdodC4gU28sIGBzYWRkcmAgYW5kIGBkYWRkcmAgYXJlIGNvcGllZCBpbnRvIGB0Y3BtX3NhZGRyYCBhbmQgYHRjcG1fZGFkZHJgLCBhbmQgaWYgdGhvc2Ugc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzIHN0cnVjdHVyZXMgaGF2ZSB1bmluaXRpYWxpemVkIGJ5dGVzLCB3b3VsZG4ndCB0aGUgY29waWVzIGluaGVyaXQgdGhvc2UgdW5pbml0aWFsaXplZCB2YWx1ZXM/XG5cblRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXNlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZXZlciBleHBvc2VkIHRvIHVzZXIgc3BhY2U/IEkgcmVtZW1iZXIgd2UgY2hlY2tlZCBgdGNwX21ldHJpY3NfZmlsbF9pbmZvYCBlYXJsaWVyLCB0aGF0J3MgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIHRoZSBuZXRsaW5rIG1lc3NhZ2UuIExvb2tpbmcgYXQgaXQgYWdhaW4sIHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBgaW5ldHBlZXJfZ2V0X2FkZHJfdjRgIGFuZCBgaW5ldHBlZXJfZ2V0X2FkZHJfdjZgIGZ1bmN0aW9ucywgYmFzZWQgb24gdGhlIGFkZHJlc3MgZmFtaWx5LCB0byByZXRyaWV2ZSB0aGUgSVAgYWRkcmVzc2VzLiBgaW5ldHBlZXJfZ2V0X2FkZHJfdjRgIHJldHVybnMgYSBgX19iZTMyYCwgc28gaXQncyBqdXN0IGNvcHlpbmcgdGhlIDQtYnl0ZSBJUHY0IGFkZHJlc3MsIHdoaWNoIHNob3VsZCBiZSBmaW5lLiAgTm93LCBgaW5ldHBlZXJfZ2V0X2FkZHJfdjZgLCB0aGF0IHJldHVybnMgYSBgc3RydWN0IGluNl9hZGRyICpgLiBUaGF0IGlzIDE2IGJ5dGVzLiBIbW1tLCBzbyBpdCdzIG9ubHkgY29weWluZyB0aGUgSVAgYWRkcmVzcyBwb3J0aW9uIG9mIHRoZSBzdHJ1Y3R1cmUuIEkgdGhpbmsgdGhhdCdzIHNhZmUsIHNpbmNlIGl0IGRvZXNuJ3QgZXhwb3NlIGFueSBvZiB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSB2aWEgbmV0bGluay5cblxuQnV0IHdhaXQsIHdoYXQgYWJvdXQgYHRjcF9tZXRyaWNzX25sX2R1bXBgPyAgVGhhdCBkdW1wcyB0aGUgYmxvY2sgdmlhIG5ldGxpbmsgYXMgd2VsbCwgYW5kIHRoZXJlJ3MgYSBjaGFuY2UgSSBtaWdodCBiZSBtaXNzaW5nIHNvbWV0aGluZyB0aGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGZ1bmN0aW9uIGRvZXNuJ3QgZG8gYW55dGhpbmcgZGlmZmVyZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU1OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNToyOS40MTEyOTQxNTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9tZXRyaWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzY3LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzY3OlxcdHN0YXRpYyBpbnQgdGNwX21ldHJpY3NfbmxfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA3Njg6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gNzY5OlxcdHtcXG4gNzcwOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbiA3NzE6XFx0XFx0dW5zaWduZWQgaW50IG1heF9yb3dzID0gMVUgXFx1MDAzY1xcdTAwM2MgdGNwX21ldHJpY3NfaGFzaF9sb2c7XFxuIDc3MjpcXHRcXHR1bnNpZ25lZCBpbnQgcm93LCBzX3JvdyA9IGNiLVxcdTAwM2VhcmdzWzBdO1xcbiA3NzM6XFx0XFx0aW50IHNfY29sID0gY2ItXFx1MDAzZWFyZ3NbMV0sIGNvbCA9IHNfY29sO1xcbiA3NzQ6XFx0XFx0aW50IHJlcyA9IDA7XFxuIDc3NTpcXHRcXG4gNzc2OlxcdFxcdGZvciAocm93ID0gc19yb3c7IHJvdyBcXHUwMDNjIG1heF9yb3dzOyByb3crKywgc19jb2wgPSAwKSB7XFxuIDc3NzpcXHRcXHRcXHRzdHJ1Y3QgdGNwX21ldHJpY3NfYmxvY2sgKnRtO1xcbiA3Nzg6XFx0XFx0XFx0c3RydWN0IHRjcG1faGFzaF9idWNrZXQgKmhiID0gdGNwX21ldHJpY3NfaGFzaCArIHJvdztcXG4gNzc5OlxcdFxcbiA3ODA6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA3ODE6XFx0XFx0XFx0Zm9yIChjb2wgPSAwLCB0bSA9IHJjdV9kZXJlZmVyZW5jZShoYi1cXHUwMDNlY2hhaW4pOyB0bTtcXG4gNzgyOlxcdFxcdFxcdCAgICAgdG0gPSByY3VfZGVyZWZlcmVuY2UodG0tXFx1MDAzZXRjcG1fbmV4dCksIGNvbCsrKSB7XFxuIDc4MzpcXHRcXHRcXHRcXHRpZiAoIW5ldF9lcSh0bV9uZXQodG0pLCBuZXQpKVxcbiA3ODQ6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDc4NTpcXHRcXHRcXHRcXHRpZiAoY29sIFxcdTAwM2Mgc19jb2wpXFxuIDc4NjpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzg3OlxcdFxcdFxcdFxcdHJlcyA9IHRjcF9tZXRyaWNzX2R1bXBfaW5mbyhza2IsIGNiLCB0bSk7XFxuIDc4ODpcXHRcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2MgMCkge1xcbiA3ODk6XFx0XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDc5MDpcXHRcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDc5MTpcXHRcXHRcXHRcXHR9XFxuIDc5MjpcXHRcXHRcXHR9XFxuIDc5MzpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNzk0OlxcdFxcdH1cXG4gNzk1OlxcdFxcbiA3OTY6XFx0ZG9uZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MzU6MjkuNDExNDAzNTA1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNTU1NTcwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogaW5ldHBlZXJfYWRkcl9jbXAqKlxuXG5Pa2F5LCBzbyBgdGNwX21ldHJpY3NfZHVtcF9pbmZvYCBjYWxscyBgdGNwX21ldHJpY3NfZmlsbF9pbmZvYC4gUmlnaHQuIE5vIGltbWVkaWF0ZSBsZWFrIHRoZXJlLiBUaGF0J3MgZ29vZCB0byBlc3RhYmxpc2guXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIG1ldGljdWxvdXNseSByZXZpZXcgdGhpcyBwYXRjaC4gQWgsIGl0J3MgbW9kaWZ5aW5nIGBpbmV0cGVlcl9hZGRyX2NtcGAuIE9rYXksIGdvdCBpdC5cblxuSG1tLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgZnVuY3Rpb24gYGluZXRwZWVyX2FkZHJfY21wYCAqZGlkbid0KiBpbmNsdWRlIGEgY2hlY2sgZm9yIHRoZSBhZGRyZXNzIGZhbWlsaWVzIGJlaW5nIGRpZmZlcmVudC4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBXZSBzaG91bGQgZGVmaW5pdGVseSBnbyBiYWNrIGFuZCBsb29rIGF0IHRoZSBvcmlnaW5hbCBgaW5ldHBlZXJfYWRkcl9jbXBgIGJlZm9yZSB0aGUgcGF0Y2ggd2FzIGFwcGxpZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGV4YWN0bHkgaGFzIGNoYW5nZWQgaW4gaXRzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE0MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM1OjM0Ljc2Njk2Mzk1NloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9pbmV0cGVlci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyNDpcXHRzdGF0aWMgaW5saW5lIGludCBpbmV0cGVlcl9hZGRyX2NtcChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYSxcXG4gMTI1OlxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqYilcXG4gMTI2OlxcdHtcXG4gMTI3OlxcdFxcdGludCBpLCBuO1xcbiAxMjg6XFx0XFxuIDEyOTpcXHRcXHRpZiAoYS1cXHUwMDNlZmFtaWx5ICE9IGItXFx1MDAzZWZhbWlseSlcXG4gMTMwOlxcdFxcdFxcdHJldHVybiBhLVxcdTAwM2VmYW1pbHkgXFx1MDAzYyBiLVxcdTAwM2VmYW1pbHkgPyAtMSA6IDE7XFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdGlmIChhLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVClcXG4gMTMzOlxcdFxcdFxcdG4gPSBzaXplb2YoYS1cXHUwMDNlYTQpIC8gc2l6ZW9mKHUzMik7XFxuIDEzNDpcXHRcXHRlbHNlXFxuIDEzNTpcXHRcXHRcXHRuID0gc2l6ZW9mKGEtXFx1MDAzZWE2KSAvIHNpemVvZih1MzIpO1xcbiAxMzY6XFx0XFxuIDEzNzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbjsgaSsrKSB7XFxuIDEzODpcXHRcXHRcXHRpZiAoYS1cXHUwMDNla2V5W2ldID09IGItXFx1MDAzZWtleVtpXSlcXG4gMTM5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxNDA6XFx0XFx0XFx0aWYgKGEtXFx1MDAzZWtleVtpXSBcXHUwMDNjIGItXFx1MDAzZWtleVtpXSlcXG4gMTQxOlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gMTQyOlxcdFxcdFxcdHJldHVybiAxO1xcbiAxNDM6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNTozNC43NjcwNDE5MzZaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI2ODAyNjUxMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IElQdjQvSVB2NiBBZGRyZXNzIENvbXBhcmlzb24gYW5kIEhhc2hpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBNeSBgcmVhZC1maWxlYCBvdXRwdXQgYWxyZWFkeSBzaG93cyB0aGUgZmFtaWx5IGNoZWNrIGluIGBpbmV0cGVlcl9hZGRyX2NtcGAuIEl0IHNlZW1zIHRoZSBwYXRjaCBpcyBhbHJlYWR5IGFwcGxpZWQgaW4gdGhlIHRyZWUgSSdtIHJlYWRpbmcuIEluaXRpYWxseSwgdGhlIGNvZGUgZGlkbid0IGV4cGxpY2l0bHkgY29tcGFyZSB0aGUgYWRkcmVzcyBmYW1pbGllcy4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGNvZGUgd291bGQgc2VsZWN0IHRoZSBjb21wYXJpc29uIHNpemUgKGBuYCkgYmFzZWQgb24gdGhlIGZhbWlseSBhbmQgdGhlbiB1c2UgdGhhdCBzaXplIHRvIGNvbXBhcmUgbWVtb3J5LiBUaGF0IGNvdWxkIGxlYWQgdG8gYSBjb21wYXJpc29uIGJldHdlZW4gYW4gSVB2NCBhZGRyZXNzIGFuZCB0aGUgaW5pdGlhbCBieXRlcyBvZiBhbiBJUHY2LiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgYSBidWcgZml4IHRvIGNvbXBhcmUgdGhlIGZhbWlsaWVzLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHByb2JsZW1zLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIGNvZGUgYWRkcyBhIGhhc2ggZnVuY3Rpb24gKGBpbmV0cGVlcl9hZGRyX2hhc2hgKSwgdXNpbmcgYHNpcGhhc2hfMnUzMmAgZm9yIElQdjQgYW5kIGBzaXBoYXNoXzR1MzJgIGZvciBJUHY2LCBidXQgY3J1Y2lhbGx5LCBpdCBvbmx5IGhhc2hlcyBpbml0aWFsaXplZCBmaWVsZHMsIHNvIHRoYXQgbG9va3Mgc2FmZS5cblxuVGhlIHBhdGNoIGFsc28gcmVwbGFjZXMgYGluZXRwZWVyX2FkZHJfY21wYCB3aXRoIGBpbmV0cGVlcl9lbnRyeV9jbXBgIGluc2lkZSB0aGUgYGxvb2t1cGAgZnVuY3Rpb24uIEFkZGl0aW9uYWxseSwgYGRoYXNoYCBhbmQgYHAtXHUwMDNlaGFzaGAgd2VyZSBhZGRlZCB0byB0aGUgYGluZXRfcGVlcmAgc3RydWN0LiBUaGlzIGlzIHJlbGF0ZWQgdG8gdGhlIGhhc2hpbmcsIHNvIG5vIGlzc3VlcyB0aGVyZS5cblxuVGhlIHBhdGNoIGluY2x1ZGVzIGEgY2hlY2sgYWdhaW5zdCBhIHRocmVzaG9sZCwgbGltaXRpbmcgYWxsb2NhdGlvbiBvZiBuZXcgcGVlcnMuIEl0IGluaXRpYWxpemVzIHRoZSBgZGFkZHJgIGZpZWxkIHdpdGggYSBzdHJ1Y3QgYXNzaWdubWVudCBhbmQgYWxzbyBzZXRzIHRoZSBoYXNoLiBUaGlzIHN0cnVjdCBhc3NpZ25tZW50IGNvdWxkIGJlIGEgcHJvYmxlbSwgc2luY2UgdGhlIGBpbmV0cGVlcl9hZGRyYCBzdHJ1Y3QgaGFzIHBhZGRpbmcgdGhhdCdzIHVuaW5pdGlhbGl6ZWQgaWYgb25seSB0aGUgYEFGX0lORVRgIGZhbWlseSBpcyB1c2VkLiBLTVNBTiBzaG91bGQgY2F0Y2ggYW55IHJlYWRzLCBidXQgbGV0J3MgYmUgc3VyZS5cblxuTGV0J3Mgc2VlOlxuKiAgIEluIGBpbmV0cGVlcl9hZGRyX2hhc2hgLCBvbmx5IHRoZSBgYTQuYWRkcmAgYW5kIGBhNC52aWZgIGFyZSByZWFkLlxuKiAgIEluIGBpbmV0cGVlcl9hZGRyX2NtcGAsIG9ubHkgYGE0LmFkZHJgIGFuZCBgYTQudmlmYCBhcmUgcmVhZCAoYWxpYXNlZCB2aWEgYHM2X2FkZHIzMmAgd2hlbiBwcm9jZXNzaW5nIElQdjYpLlxuKiAgIEluIGB0Y3BfbWV0cmljc19maWxsX2luZm9gLCBvbmx5IGBhNC5hZGRyYCBpcyByZWFkLlxuXG5TbyB0aGUgdW5pbml0aWFsaXplZCBwYWRkaW5nIGZyb20gdGhlIHN0cnVjdCBhc3NpZ25tZW50IGluIGBpbmV0X2dldHBlZXJgIGlzIG5ldmVyIGFjdHVhbGx5IHJlYWQgb3IgbGVha2VkIGluIHRoZXNlIGZ1bmN0aW9ucy4gSSdkIHN0aWxsIGxpa2UgdG8gbG9vayBhdCBvdGhlciB1c2VycyBvZiBgc3RydWN0IGluZXRfcGVlcmAsIGJ1dCBzbyBmYXIsIHRoaXMgbG9va3MgbGlrZSBhIGNsZWFuIGJ1ZyBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODU3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM1OjU3LjQ0NzMxMDc2NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNTU5NjU0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgaW5ldF9wZWVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2luZXRwZWVyLmg9Mjc9c3RydWN0IGluZXRwZWVyX2FkZHIge1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0zNS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjM2OnN0cnVjdCBpbmV0X3BlZXIge1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMzctXFx0c3RydWN0IHJiX25vZGVcXHRcXHRyYl9ub2RlO1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC02MS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjYyOnN0cnVjdCBpbmV0X3BlZXJfYmFzZSB7XFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC02My1cXHRzdHJ1Y3QgcmJfcm9vdFxcdFxcdHJiX3Jvb3Q7XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTY3LVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6Njg6dm9pZCBpbmV0X3BlZXJfYmFzZV9pbml0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqKTtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTY5LVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD05Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbjZfYWRkciAqaW5ldHBlZXJfZ2V0X2FkZHJfdjYoc3RydWN0IGluZXRwZWVyX2FkZHIgKmlhZGRyKVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC05OC0vKiBjYW4gYmUgY2FsbGVkIHdpdGggb3Igd2l0aG91dCBsb2NhbCBCSCBiZWluZyBkaXNhYmxlZCAqL1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6OTk6c3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwMC1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyKTtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTEwMS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjEwMjpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NChzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMDMtXFx0XFx0XFx0XFx0XFx0XFx0X19iZTMyIHY0ZGFkZHIsXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTExMy1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oOjExNDpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NihzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UsXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaC0xMTUtXFx0XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICp2NmRhZGRyKVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaD0xMjQ9c3RhdGljIGlubGluZSBpbnQgaW5ldHBlZXJfYWRkcl9jbXAoY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmEsXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTE0OC0vKiBjYW4gYmUgY2FsbGVkIGZyb20gQkggY29udGV4dCBvciBvdXRzaWRlICovXFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxNDk6dm9pZCBpbmV0X3B1dHBlZXIoc3RydWN0IGluZXRfcGVlciAqcCk7XFxuaW5jbHVkZS9uZXQvaW5ldHBlZXIuaDoxNTA6Ym9vbCBpbmV0X3BlZXJfeHJsaW1fYWxsb3coc3RydWN0IGluZXRfcGVlciAqcGVlciwgaW50IHRpbWVvdXQpO1xcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmgtMTUxLVxcbmluY2x1ZGUvbmV0L2luZXRwZWVyLmg6MTUyOnZvaWQgaW5ldHBlZXJfaW52YWxpZGF0ZV90cmVlKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqKTtcXG5pbmNsdWRlL25ldC9pbmV0cGVlci5oLTE1My1cXG4tLVxcbmluY2x1ZGUvbmV0L2lwNl9maWIuaD0zOTE9c3RydWN0IGZpYjZfdGFibGUge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTM5NS1cXHRzdHJ1Y3QgZmliNl9ub2RlXFx0dGI2X3Jvb3Q7XFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oOjM5NjpcXHRzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2VcXHR0YjZfcGVlcnM7XFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTM5Ny1cXHR1bnNpZ25lZCBpbnRcXHRcXHRmbGFncztcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaD01NT1zdHJ1Y3QgbmV0bnNfaXB2NCB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgtMTM2LVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaDoxMzc6XFx0c3RydWN0IGluZXRfcGVlcl9iYXNlXFx0KnBlZXJzO1xcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0xMzgtXFx0c3RydWN0IGZxZGlyXFx0XFx0KmZxZGlyO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2Ni5oPTY2PXN0cnVjdCBuZXRuc19pcHY2IHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaC03Mi1cXHRzdHJ1Y3QgaXB2Nl9kZXZjb25mXFx0KmRldmNvbmZfZGZsdDtcXG5pbmNsdWRlL25ldC9uZXRucy9pcHY2Lmg6NzM6XFx0c3RydWN0IGluZXRfcGVlcl9iYXNlXFx0KnBlZXJzO1xcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaC03NC1cXHRzdHJ1Y3QgZnFkaXJcXHRcXHQqZnFkaXI7XFxuLS1cXG5uZXQvaXB2NC9pY21wLmM9MzExPXN0YXRpYyBib29sIGljbXB2NF94cmxpbV9hbGxvdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydGFibGUgKnJ0LFxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTMxNS1cXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBcXHUwMDI2cnQtXFx1MDAzZWRzdDtcXG5uZXQvaXB2NC9pY21wLmM6MzE2OlxcdHN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7XFxubmV0L2lwdjQvaWNtcC5jLTMxNy1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbi0tXFxubmV0L2lwdjQvaW5ldHBlZXIuYy00Ny0gKiAgMy4gIEdsb2JhbCB2YXJpYWJsZSBwZWVyX3RvdGFsIGlzIG1vZGlmaWVkIHVuZGVyIHRoZSBwb29sIGxvY2suXFxubmV0L2lwdjQvaW5ldHBlZXIuYzo0ODogKiAgNC4gIHN0cnVjdCBpbmV0X3BlZXIgZmllbGRzIG1vZGlmaWNhdGlvbjpcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTQ5LSAqXFx0XFx0cmJfbm9kZTogcG9vbCBsb2NrXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jPTcxPXN0YXRpYyBpbnQgaW5ldHBlZXJfZW50cnlfY21wKHU2NCBkaGFzaCxcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTcyLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkcixcXG5uZXQvaXB2NC9pbmV0cGVlci5jOjczOlxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbmV0X3BlZXIgKnApXFxubmV0L2lwdjQvaW5ldHBlZXIuYy03NC17XFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTgyLVxcbm5ldC9pcHY0L2luZXRwZWVyLmM6ODM6dm9pZCBpbmV0X3BlZXJfYmFzZV9pbml0KHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYnApXFxubmV0L2lwdjQvaW5ldHBlZXIuYy04NC17XFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jPTk5PXZvaWQgX19pbml0IGluZXRfaW5pdHBlZXJzKHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTEwNi1cXHRucl9lbnRyaWVzID0gZGl2NjRfdWwoKHU2NCl0b3RhbHJhbV9wYWdlcygpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxubmV0L2lwdjQvaW5ldHBlZXIuYzoxMDc6XFx0XFx0XFx0ICAgICAgMTAwICogTDFfQ0FDSEVfQUxJR04oc2l6ZW9mKHN0cnVjdCBpbmV0X3BlZXIpKSk7XFxubmV0L2lwdjQvaW5ldHBlZXIuYy0xMDgtXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTExNC0vKiBDYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgb3IgYmFzZS1cXHUwMDNlbG9jayBoZWxkICovXFxubmV0L2lwdjQvaW5ldHBlZXIuYzoxMTU6c3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cChjb25zdCBzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0xMTYtXFx0XFx0XFx0XFx0dTY0IGRoYXNoLFxcbm5ldC9pcHY0L2luZXRwZWVyLmM6MTE3OlxcdFxcdFxcdFxcdHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTExOC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgc2VxLFxcbm5ldC9pcHY0L2luZXRwZWVyLmM6MTE5OlxcdFxcdFxcdFxcdHN0cnVjdCBpbmV0X3BlZXIgKmdjX3N0YWNrW10sXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0xMjAtXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50ICpnY19jbnQsXFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTEyNC1cXHRzdHJ1Y3QgcmJfbm9kZSAqKnBwLCAqcGFyZW50LCAqbmV4dDtcXG5uZXQvaXB2NC9pbmV0cGVlci5jOjEyNTpcXHRzdHJ1Y3QgaW5ldF9wZWVyICpwO1xcbm5ldC9pcHY0L2luZXRwZWVyLmMtMTI2LVxcdHUzMiBub3c7XFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTEzNi1cXHRcXHRwYXJlbnQgPSBuZXh0O1xcbm5ldC9pcHY0L2luZXRwZWVyLmM6MTM3OlxcdFxcdHAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBpbmV0X3BlZXIsIHJiX25vZGUpO1xcbm5ldC9pcHY0L2luZXRwZWVyLmMtMTM4LVxcdFxcdGNtcCA9IGluZXRwZWVyX2VudHJ5X2NtcChkaGFzaCwgZGFkZHIsIHApO1xcbi0tXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0xNjEtLyogcGVyZm9ybSBnYXJiYWdlIGNvbGxlY3Qgb24gYWxsIGl0ZW1zIHN0YWNrZWQgZHVyaW5nIGEgbG9va3VwICovXFxubmV0L2lwdjQvaW5ldHBlZXIuYzoxNjI6c3RhdGljIHZvaWQgaW5ldF9wZWVyX2djKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG5uZXQvaXB2NC9pbmV0cGVlci5jOjE2MzpcXHRcXHRcXHQgc3RydWN0IGluZXRfcGVlciAqZ2Nfc3RhY2tbXSxcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTE2NC1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGdjX2NudClcXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmMtMTY2LVxcdGludCBwZWVyX3RocmVzaG9sZCwgcGVlcl9tYXh0dGwsIHBlZXJfbWludHRsO1xcbm5ldC9pcHY0L2luZXRwZWVyLmM6MTY3OlxcdHN0cnVjdCBpbmV0X3BlZXIgKnA7XFxubmV0L2lwdjQvaW5ldHBlZXIuYy0xNjgtXFx0X191MzIgZGVsdGEsIHR0bDtcXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmMtMTk4LS8qIE11c3QgYmUgY2FsbGVkIHVuZGVyIFJDVSA6IE5vIHJlZmNvdW50IGNoYW5nZSBpcyBkb25lIGhlcmUuICovXFxubmV0L2lwdjQvaW5ldHBlZXIuYzoxOTk6c3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSxcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTIwMC1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyKVxcbm5ldC9pcHY0L2luZXRwZWVyLmMtMjAxLXtcXG5uZXQvaXB2NC9pbmV0cGVlci5jOjIwMjpcXHRzdHJ1Y3QgaW5ldF9wZWVyICpwLCAqZ2Nfc3RhY2tbUEVFUl9NQVhfR0NdO1xcbm5ldC9pcHY0L2luZXRwZWVyLmMtMjAzLVxcdHU2NCBkaGFzaCA9IGluZXRwZWVyX2FkZHJfaGFzaChkYWRkcik7XFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTI1My1cXG5uZXQvaXB2NC9pbmV0cGVlci5jOjI1NDp2b2lkIGluZXRfcHV0cGVlcihzdHJ1Y3QgaW5ldF9wZWVyICpwKVxcbm5ldC9pcHY0L2luZXRwZWVyLmMtMjU1LXtcXG4tLVxcbm5ldC9pcHY0L2luZXRwZWVyLmMtMjc3LSNkZWZpbmUgWFJMSU1fQlVSU1RfRkFDVE9SIDZcXG5uZXQvaXB2NC9pbmV0cGVlci5jOjI3ODpib29sIGluZXRfcGVlcl94cmxpbV9hbGxvdyhzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyLCBpbnQgdGltZW91dClcXG5uZXQvaXB2NC9pbmV0cGVlci5jLTI3OS17XFxuLS1cXG5uZXQvaXB2NC9pbmV0cGVlci5jLTMwMy1cXG5uZXQvaXB2NC9pbmV0cGVlci5jOjMwNDp2b2lkIGluZXRwZWVyX2ludmFsaWRhdGVfdHJlZShzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UpXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0zMDUte1xcbi0tXFxubmV0L2lwdjQvaW5ldHBlZXIuYy0zMDgtXFx0d2hpbGUgKHApIHtcXG5uZXQvaXB2NC9pbmV0cGVlci5jOjMwOTpcXHRcXHRzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyID0gcmJfZW50cnkocCwgc3RydWN0IGluZXRfcGVlciwgcmJfbm9kZSk7XFxubmV0L2lwdjQvaW5ldHBlZXIuYy0zMTAtXFxuLS1cXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jPTYxPXN0cnVjdCBpcHEge1xcbi0tXFxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYy02Ny1cXHR1bnNpZ25lZCBpbnQgICAgcmlkO1xcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmM6Njg6XFx0c3RydWN0IGluZXRfcGVlciAqcGVlcjtcXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTY5LX07XFxuLS1cXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jPTgzPXN0YXRpYyB2b2lkIGlwNF9mcmFnX2luaXQoc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqcSwgY29uc3Qgdm9pZCAqYSlcXG4tLVxcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtODctXFx0c3RydWN0IG5ldCAqbmV0ID0gcS1cXHUwMDNlZnFkaXItXFx1MDAzZW5ldDtcXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jOjg4OlxcdHN0cnVjdCBpbmV0X3BlZXIgKnAgPSBOVUxMO1xcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtODktXFxuLS1cXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jPTIyMD1zdGF0aWMgaW50IGlwX2ZyYWdfdG9vX2ZhcihzdHJ1Y3QgaXBxICpxcClcXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTIyMS17XFxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYzoyMjI6XFx0c3RydWN0IGluZXRfcGVlciAqcGVlciA9IHFwLVxcdTAwM2VwZWVyO1xcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtMjIzLVxcdHVuc2lnbmVkIGludCBtYXggPSBxcC1cXHUwMDNlcS5mcWRpci1cXHUwMDNlbWF4X2Rpc3Q7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTkwMj12b2lkIGlwX3J0X3NlbmRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtOTA1LVxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjtcXG5uZXQvaXB2NC9yb3V0ZS5jOjkwNjpcXHRzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyO1xcbm5ldC9pcHY0L3JvdXRlLmMtOTA3LVxcdHN0cnVjdCBuZXQgKm5ldDtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9OTY1PXN0YXRpYyBpbnQgaXBfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtOTY5LVxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjtcXG5uZXQvaXB2NC9yb3V0ZS5jOjk3MDpcXHRzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyO1xcbm5ldC9pcHY0L3JvdXRlLmMtOTcxLVxcdHVuc2lnbmVkIGxvbmcgbm93O1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0zNzEyPXN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcHY0X2luZXRwZWVyX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9pcHY0L3JvdXRlLmMtMzcxMy17XFxubmV0L2lwdjQvcm91dGUuYzozNzE0OlxcdHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYnAgPSBrbWFsbG9jX29iaigqYnApO1xcbm5ldC9pcHY0L3JvdXRlLmMtMzcxNS1cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MzcyMz1zdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwdjRfaW5ldHBlZXJfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2lwdjQvcm91dGUuYy0zNzI0LXtcXG5uZXQvaXB2NC9yb3V0ZS5jOjM3MjU6XFx0c3RydWN0IGluZXRfcGVlcl9iYXNlICpicCA9IG5ldC1cXHUwMDNlaXB2NC5wZWVycztcXG5uZXQvaXB2NC9yb3V0ZS5jLTM3MjYtXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmM9MTk1PXN0YXRpYyBib29sIGljbXB2Nl94cmxpbV9hbGxvdyhzdHJ1Y3Qgc29jayAqc2ssIHU4IHR5cGUsXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmMtMjIwLVxcdFxcdGludCB0bW8gPSBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LnN5c2N0bC5pY21wdjZfdGltZSk7XFxubmV0L2lwdjYvaWNtcC5jOjIyMTpcXHRcXHRzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyO1xcbm5ldC9pcHY2L2ljbXAuYy0yMjItXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9NTE5PWludCBpcDZfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTYyMy1cXHRcXHRzdHJ1Y3QgaW42X2FkZHIgKnRhcmdldCA9IE5VTEw7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjYyNDpcXHRcXHRzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy02MjUtXFx0XFx0c3RydWN0IHJ0Nl9pbmZvICpydDtcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MTY1NT12b2lkIG5kaXNjX3NlbmRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICp0YXJnZXQpXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTE2NjAtXFx0aW50IG9wdGxlbiA9IDA7XFxubmV0L2lwdjYvbmRpc2MuYzoxNjYxOlxcdHN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7XFxubmV0L2lwdjYvbmRpc2MuYy0xNjYyLVxcdHN0cnVjdCBza19idWZmICpidWZmO1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz02Nzk5PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcHY2X2luZXRwZWVyX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9pcHY2L3JvdXRlLmMtNjgwMC17XFxubmV0L2lwdjYvcm91dGUuYzo2ODAxOlxcdHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYnAgPSBrbWFsbG9jX29iaigqYnApO1xcbm5ldC9pcHY2L3JvdXRlLmMtNjgwMi1cXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NjgxMD1zdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwdjZfaW5ldHBlZXJfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2lwdjYvcm91dGUuYy02ODExLXtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjY4MTI6XFx0c3RydWN0IGluZXRfcGVlcl9iYXNlICpicCA9IG5ldC1cXHUwMDNlaXB2Ni5wZWVycztcXG5uZXQvaXB2Ni9yb3V0ZS5jLTY4MTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjM1OjU5LjM1MjkzMjgxOVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTQ2NDIzNzQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBzdHJ1Y3QgaW5ldF9wZWVyYC4gSXQncyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCBmb3IgdGhpbmdzIGxpa2UgSUNNUCByYXRlIGxpbWl0aW5nIGFuZCByb3V0aW5nIHJlZGlyZWN0cywgbm90aGluZyB1c2VyLXNwYWNlIGRpcmVjdGx5IHRvdWNoZXMuIFRoZSBjb3JlIGNoYW5nZSBoZXJlIHNlZW1zIHRvIGJlIGFkZGluZyBhIGBoYXNoYCBmaWVsZCB0byB0aGUgc3RydWN0IHRvIHNwZWVkIHVwIGxvb2t1cHMgaW4gdGhlIHJlZC1ibGFjayB0cmVlLCB3aGljaCBpcyBhIGdvb2Qgb3B0aW1pemF0aW9uLlxuXG5NeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBoYXNoIGlzIGRlcml2ZWQgZnJvbSBgZGFkZHJgLCBhbmQgdGhhdCdzIGluaXRpYWxpemVkLCBzbyB0aGF0J3MgZ29vZC4gVGhlIHBhdGNoIGFsc28gaW5jbHVkZXMgYSBgZmFtaWx5YCBjaGVjayBpbiBgaW5ldHBlZXJfYWRkcl9jbXBgLiBgZmFtaWx5YCBpcyAqYWxzbyogYWx3YXlzIGluaXRpYWxpemVkLiBXZSd2ZSBnb3QgYSB0aHJlc2hvbGQgY2hlY2sgYmVmb3JlIGFsbG9jYXRpb24sIGJ1dCB0aGF0IHNob3VsZG4ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgcmVhZCBpc3N1ZXMuXG5cbk5vdywgdGhlcmUncyBzb21lIHBhZGRpbmcgaW4gYHN0cnVjdCBpbmV0cGVlcl9hZGRyYCBmb3IgSVB2NCwgYnV0IHRoYXQgcGFkZGluZydzIG9ubHkgKmNvcGllZCogd2hlbiBgcC1cdTAwM2VkYWRkciA9ICpkYWRkcjtgIGV4ZWN1dGVzLiBDcnVjaWFsbHksIGl0J3MgKm5ldmVyKiByZWFkIG9yIGV4cG9zZWQuIEtNU0FOLCBvZiBjb3Vyc2UsIGlzIHdoYXQgd2UgdXNlIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gU2luY2UgdGhlIHBhZGRpbmcgaXMgbmV2ZXIgcmVhZCwgS01TQU4gd2lsbCByZW1haW4gc2lsZW50LCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZS4uLiBLTVNBTiAqZG9lcyogY29tcGxhaW4gYWJvdXQgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBicmFuY2hlcyBvciBtZW1vcnkgYWNjZXNzZXMsIGFuZCBhbHNvIHdoZW4gY29weWluZyB0byB1c2VyIHNwYWNlLiBPa2F5LCBzbyB3ZSBoYXZlIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlIHRoYXQgdGhpcyBwYWRkaW5nIGlzIG5ldmVyIHVzZWQsIGV2ZW4gYnkgYWNjaWRlbnQsIGluIGEgY29uZGl0aW9uYWwuIExldCdzIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhlIGhhc2ggZnVuY3Rpb24gYW5kIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGV4cGxpY2l0bHkgcmVhZCBvbmx5IGluaXRpYWxpemVkIGZpZWxkcy4gQW5kIG9mIGNvdXJzZSwgbm90aGluZyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBzaG91bGRuJ3QgZmxhZyBhbnl0aGluZywgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIGV4cGVjdC5cblxuU28sIGluIHNob3J0LCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiB0ZXN0aW5nLiBUaGVzZSBhcmUgcHVyZWx5IGludGVybmFsIGxvZ2ljIG9wdGltaXphdGlvbnMgYW5kIGJ1ZyBmaXhlcyBmb3IgdGhlIElQdjQgdnMgSVB2NiBjb21wYXJpc29uLlxuXG5Ob3csIGp1c3QgdG8gYmUgKmV4dHJhKiBjYXV0aW91cywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBwb3RlbnRpYWwgZm9yIG91dC1vZi1ib3VuZHMgcmVhZHMgaW4gdGhvc2UgaGFzaCBmdW5jdGlvbnMgYW5kIGNvbXBhcmlzb25zLiBMZXQncyBtYWtlIHN1cmUgdGhvc2UgYHNpcGhhc2hfMnUzMmAgYW5kIGBzaXBoYXNoXzR1MzJgIGZ1bmN0aW9ucyBhcmVuJ3QgZG9pbmcgYW55dGhpbmcgbmFzdHkuIE9rYXksIHRoZXkgdGFrZSBgdTMyYCB2YWx1ZXMgKmJ5IHZhbHVlKi4gYGE0LmFkZHJgIGlzIGBfX2JlMzJgICg0IGJ5dGVzKSwgYGE0LnZpZmAgaXMgYF9fdTMyYCAoNCBieXRlcykuICBTbywgbm8gb3V0LW9mLWJvdW5kcyByZWFkIHdpdGggYHNpcGhhc2hfMnUzMmAuIFNhbWUgd2l0aCBgc2lwaGFzaF80dTMyYDsgdGhlIGFycmF5IGBhNi5zNl9hZGRyMzJgIGlzIGFuIGFycmF5IG9mIGZvdXIgYHUzMmBzLCBhbmQgdGhleSdyZSBwYXNzZWQgYnkgdmFsdWUuIFNvLCBubyBvdXQtb2YtYm91bmRzIHJlYWRzIHRoZXJlLCBlaXRoZXIuIFRoYXQncyBnb29kLlxuXG5Ob3csIGZvciBgaW5ldHBlZXJfYWRkcl9jbXBgLCBsZXQncyBjaGVjayBpdCBpbiBkZXRhaWw6XG5XaGVuIGNvbXBhcmluZyBBRl9JTkVUIGFkZHJlc3NlcywgYG4gPSAyYC4gVGhlIGNvZGUgY29tcGFyZXMgYGE2LnM2X2FkZHIzMlswXWAgYW5kIGBbMV1gLiBgYTYuczZfYWRkcjMyWzBdYCBhbGlhc2VzIHdpdGggYGE0LmFkZHJgLCBhbmQgYGE2LnM2X2FkZHIzMlsxXWAgYWxpYXNlcyB3aXRoIGBhNC52aWZgLiAgVGhpcyAqaXMqIHNhZmUgYW5kIG9ubHkgcmVhZHMgaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5TbywgdG8gc3VtbWFyaXplIGV2ZXJ5dGhpbmc6IFRoZSBwYXRjaCBpcyBhIG1vZGlmaWNhdGlvbiBvZiBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcyBhbmQgbG9naWMgZm9yIElQIHBlZXIgdHJhY2tpbmcsIGFkZGluZyBhIGhhc2ggZmllbGQgdG8gb3B0aW1pemUgdGhlIFJCLXRyZWUgYW5kIGZpeGluZyB0aGF0IElQdjQvSVB2NiBjb21wYXJpc29uLiBBbGwgdGhlIGZpZWxkcyB1c2VkIGZvciBoYXNoaW5nIGFuZCBjb21wYXJpbmcgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyBuZXcgZGF0YSBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlZCBpbiBhbnkgYnJhbmNoZXMgb3IgY2FsY3VsYXRpb25zLiBUaGVyZWZvcmUsIGEgc3BlY2lhbGl6ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbid0IG5lZWRlZC4gU3RhbmRhcmQgS0FTQU4gd2lsbCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHRoYXQgbWlnaHQgZXhpc3QuIEdvb2QsIHRoaXMgbG9va3Mgc29saWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDcxLCJPdXRwdXRUb2tlbnMiOjIzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMTozNjoxNC44MTcxNzQ1NDJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBgaW5ldF9wZWVyYCB0cmFja2luZyBtZWNoYW5pc20gYnkgYWRkaW5nIGEgaGFzaCBmaWVsZCB0byBvcHRpbWl6ZSByZWQtYmxhY2sgdHJlZSBsb29rdXBzIGFuZCBmaXhpbmcgYSBjb21wYXJpc29uIGJ1ZyBiZXR3ZWVuIElQdjQgYW5kIElQdjYgYWRkcmVzc2VzLiBUaGUgbmV3IGhhc2ggZnVuY3Rpb24gKGBpbmV0cGVlcl9hZGRyX2hhc2hgKSBhbmQgdGhlIG1vZGlmaWVkIGNvbXBhcmlzb24gZnVuY3Rpb24gKGBpbmV0cGVlcl9lbnRyeV9jbXBgKSBleHBsaWNpdGx5IG9ubHkgcmVhZCB0aGUgaW5pdGlhbGl6ZWQgZmllbGRzIG9mIHRoZSBgaW5ldHBlZXJfYWRkcmAgdW5pb24gKGBhNC5hZGRyYCBhbmQgYGE0LnZpZmAgZm9yIElQdjQsIGFuZCBgYTYuczZfYWRkcjMyYCBmb3IgSVB2NikuIFdoaWxlIHRoZSBgaW5ldHBlZXJfYWRkcmAgdW5pb24gY29udGFpbnMgdW5pbml0aWFsaXplZCBwYWRkaW5nIGZvciBJUHY0IGFkZHJlc3NlcywgdGhpcyBwYWRkaW5nIGlzIG5ldmVyIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGBpbmV0X3BlZXJgIHN0cnVjdHVyZSBpcyBwdXJlbHkgYW4gaW50ZXJuYWwga2VybmVsIHRyYWNraW5nIHN0cnVjdHVyZSBhbmQgaXMgbm90IGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgYGluZXRfcGVlcmAgdHJhY2tpbmcgbWVjaGFuaXNtIGJ5IGFkZGluZyBhIGhhc2ggZmllbGQgdG8gb3B0aW1pemUgcmVkLWJsYWNrIHRyZWUgbG9va3VwcyBhbmQgZml4aW5nIGEgY29tcGFyaXNvbiBidWcgYmV0d2VlbiBJUHY0IGFuZCBJUHY2IGFkZHJlc3Nlcy4gVGhlIG5ldyBoYXNoIGZ1bmN0aW9uIChgaW5ldHBlZXJfYWRkcl9oYXNoYCkgYW5kIHRoZSBtb2RpZmllZCBjb21wYXJpc29uIGZ1bmN0aW9uIChgaW5ldHBlZXJfZW50cnlfY21wYCkgZXhwbGljaXRseSBvbmx5IHJlYWQgdGhlIGluaXRpYWxpemVkIGZpZWxkcyBvZiB0aGUgYGluZXRwZWVyX2FkZHJgIHVuaW9uIChgYTQuYWRkcmAgYW5kIGBhNC52aWZgIGZvciBJUHY0LCBhbmQgYGE2LnM2X2FkZHIzMmAgZm9yIElQdjYpLiBXaGlsZSB0aGUgYGluZXRwZWVyX2FkZHJgIHVuaW9uIGNvbnRhaW5zIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBmb3IgSVB2NCBhZGRyZXNzZXMsIHRoaXMgcGFkZGluZyBpcyBuZXZlciByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBgaW5ldF9wZWVyYCBzdHJ1Y3R1cmUgaXMgcHVyZWx5IGFuIGludGVybmFsIGtlcm5lbCB0cmFja2luZyBzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbxf66[1] Phase: Succeeded StartedAt: 2026-08-12 21:36:26 +0000 UTC FinishedAt: 2026-08-12 21:36:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 21:36:26 +0000 UTC FinishedAt: 2026-08-12 21:36:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2] Phase: Succeeded StartedAt: 2026-08-12 21:36:26 +0000 UTC FinishedAt: 2026-08-13 01:16:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 21:36:26 +0000 UTC FinishedAt: 2026-08-13 01:16:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 21:36:26 +0000 UTC FinishedAt: 2026-08-12 21:36:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 21:36:26 +0000 UTC FinishedAt: 2026-08-12 21:36:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbxf66/series-workflowbxf66-convert-artifact-3728655061/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 21:36:37 +0000 UTC FinishedAt: 2026-08-12 21:53:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 21:36:37 +0000 UTC FinishedAt: 2026-08-12 21:53:27 +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:*0b68b353-4c99-4292-ac30-74d57a89cd99,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-workflowbxf66/series-workflowbxf66-convert-artifact-3728655061/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": "53c49d0e-3ad3-49da-9f65-4e98e7746365", "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-workflowbxf66/series-workflowbxf66-build-action-2822401339/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 21:36:37 +0000 UTC FinishedAt: 2026-08-12 21:53:17 +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:*0b68b353-4c99-4292-ac30-74d57a89cd99,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-workflowbxf66/series-workflowbxf66-convert-artifact-3728655061/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": "53c49d0e-3ad3-49da-9f65-4e98e7746365", "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-workflowbxf66/series-workflowbxf66-build-action-2822401339/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 21:53:27 +0000 UTC FinishedAt: 2026-08-12 21:53:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 21:53:27 +0000 UTC FinishedAt: 2026-08-12 21:53:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 21:53:27 +0000 UTC FinishedAt: 2026-08-12 21:53:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 21:53:27 +0000 UTC FinishedAt: 2026-08-12 21:53:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbxf66/series-workflowbxf66-convert-artifact-875255984/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 21:53:37 +0000 UTC FinishedAt: 2026-08-12 21:55:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 21:53:37 +0000 UTC FinishedAt: 2026-08-12 21:55:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*53c49d0e-3ad3-49da-9f65-4e98e7746365,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-workflowbxf66/series-workflowbxf66-build-action-2822401339/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-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 21:55:42 +0000 UTC FinishedAt: 2026-08-12 21:55:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 21:55:42 +0000 UTC FinishedAt: 2026-08-12 21:55:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 21:55:42 +0000 UTC FinishedAt: 2026-08-12 22:12:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 21:55:42 +0000 UTC FinishedAt: 2026-08-12 22:12: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:*0b68b353-4c99-4292-ac30-74d57a89cd99,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-workflowbxf66/series-workflowbxf66-convert-artifact-875255984/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": "108565c5-5c52-41fa-8a91-128fb3ff5146", "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-workflowbxf66/series-workflowbxf66-build-action-2140222124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 21:55:42 +0000 UTC FinishedAt: 2026-08-12 22:12:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0b68b353-4c99-4292-ac30-74d57a89cd99,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-workflowbxf66/series-workflowbxf66-convert-artifact-875255984/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": "108565c5-5c52-41fa-8a91-128fb3ff5146", "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-workflowbxf66/series-workflowbxf66-build-action-2140222124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 22:12:52 +0000 UTC FinishedAt: 2026-08-12 22:12:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 22:12:52 +0000 UTC FinishedAt: 2026-08-12 22:12:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 22:12:52 +0000 UTC FinishedAt: 2026-08-12 22:14:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 22:12:52 +0000 UTC FinishedAt: 2026-08-12 22:14:48 +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:*108565c5-5c52-41fa-8a91-128fb3ff5146,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-workflowbxf66/series-workflowbxf66-build-action-2140222124/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-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 22:14:58 +0000 UTC FinishedAt: 2026-08-13 01:16:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 22:14:58 +0000 UTC FinishedAt: 2026-08-13 01:16:38 +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":["inet_getpeer","inet_peer_xrlim_allow"],"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:*53c49d0e-3ad3-49da-9f65-4e98e7746365,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*108565c5-5c52-41fa-8a91-128fb3ff5146,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-workflowbxf66/series-workflowbxf66-build-action-2822401339/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-workflowbxf66/series-workflowbxf66-build-action-2140222124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 22:14:58 +0000 UTC FinishedAt: 2026-08-12 22:15:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 22:14:58 +0000 UTC FinishedAt: 2026-08-12 22:15:01 +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":["inet_getpeer","inet_peer_xrlim_allow"],"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-workflowbxf66/series-workflowbxf66-convert-artifact-3022319913/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 22:14:58 +0000 UTC FinishedAt: 2026-08-12 22:14:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 22:14:58 +0000 UTC FinishedAt: 2026-08-12 22:14:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 22:14:58 +0000 UTC FinishedAt: 2026-08-12 22:14:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 22:15:08 +0000 UTC FinishedAt: 2026-08-13 01:16:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbxf66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_getpeer","inet_peer_xrlim_allow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"518ca1cb-5b3a-48a2-87ad-b2a3574944db","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 22:15:08 +0000 UTC FinishedAt: 2026-08-13 01:16:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*53c49d0e-3ad3-49da-9f65-4e98e7746365,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*108565c5-5c52-41fa-8a91-128fb3ff5146,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-workflowbxf66/series-workflowbxf66-build-action-2822401339/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-workflowbxf66/series-workflowbxf66-build-action-2140222124/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-workflowbxf66/series-workflowbxf66-convert-artifact-3022319913/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,}