Name: series-workflow7jbv5 Phase: Succeeded StartedAt: 2026-08-24 02:56:00 +0000 UTC FinishedAt: 2026-08-24 07:21:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[0] Phase: Succeeded StartedAt: 2026-08-24 02:56:00 +0000 UTC FinishedAt: 2026-08-24 03:27:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 02:56:00 +0000 UTC FinishedAt: 2026-08-24 03:27:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2f3835771dff512750205aa5f5f61aec0f2b8cb7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2f3835771dff512750205aa5f5f61aec0f2b8cb7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA" ], "series_id": "5d24fc95-e9bb-4b9d-ad86-87c88c54e814" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_pages_bulk_mempolicy_noprof", "mempolicy_set_node_perf" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YmIzM0OywKICAgICYjMzQ7bWVtcG9saWN5X3NldF9ub2RlX3BlcmYmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZXRpbWUgbWFuYWdlbWVudCBvZiBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIGJ5IHJlcGxhY2luZyBgc3luY2hyb25pemVfcmN1KClgIHdpdGggYSByZWZlcmVuY2UgY291bnQgKGByZWZjb3VudF90YCkgYW5kIGBrZnJlZV9yY3UoKWAuIEl0IGFsc28gb3B0aW1pemVzIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKWAgYnkgcGlubmluZyB0aGUgc3RhdGUgd2l0aCBgd2lfc3RhdGVfZ2V0KClgIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBsb2NhbCBjb3B5IG9mIHRoZSB3ZWlnaHRzIGFycmF5LiBBbGwgYWxsb2NhdGlvbnMgb2YgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCB1c2UgYGt6YWxsb2NfZmxleCgpYCwgd2hpY2ggZ3VhcmFudGVlcyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIHRoZSBzdHJ1Y3R1cmUgYW5kIGl0cyBmbGV4aWJsZSBhcnJheSBtZW1iZXIgYGl3X3RhYmxlYC4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gY29uY3VycmVuY3ksIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIG1lbW9yeSBwb2xpY3kgbG9naWMgaW4gbW0vbWVtcG9saWN5LmMgYnkgaW50cm9kdWNpbmcgYSByZWZjb3VudCBhbmQgcmVwbGFjaW5nIHN5bmNocm9uaXplX3JjdSgpICYjNDM7IGtmcmVlKCkgd2l0aCBrZnJlZV9yY3UoKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgYnVsayBwYWdlIGFsbG9jYXRpb24gYW5kIHN5c2ZzIG5vZGUgcGVyZm9ybWFuY2UgdXBkYXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI3MzI4OTdkNzExYzhhZGYwNjg0NjA3N2Y0NWQ1MDM3ODNmNDQ2OTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAwMzoyNTowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jXG5pbmRleCAwZTUxNzVmMWM3NjdkLi40YTM3MjJjNjNiMzFiIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbXBvbGljeS5jXG5AQCAtMTEyLDYgJiM0MzsxMTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByaW50ay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVhZm9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ2NkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGJmbHVzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYi5oXHUwMDNlXG5AQCAtMTU2LDcgJiM0MzsxNTcsOSBAQCBzdGF0aWMgY29uc3QgaW50IHdlaWdodGluZXNzID0gMzI7XG4gICovXG4gc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUge1xuIFx0Ym9vbCBtb2RlX2F1dG87XG4tXHR1OCBpd190YWJsZVtdO1xuJiM0MztcdHJlZmNvdW50X3QgcmVmY250O1xuJiM0MztcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4mIzQzO1x0dTggaXdfdGFibGVbXSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIH07XG4gc3RhdGljIHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIF9fcmN1ICp3aV9zdGF0ZTtcbiBzdGF0aWMgdW5zaWduZWQgaW50ICpub2RlX2J3X3RhYmxlO1xuQEAgLTE2Nyw2ICYjNDM7MTcwLDI3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgKm5vZGVfYndfdGFibGU7XG4gICovXG4gc3RhdGljIERFRklORV9NVVRFWCh3aV9zdGF0ZV9sb2NrKTtcbiBcbiYjNDM7LyogQWxsb3cgc2xlZXBpbmcgcmVhZGVycyB0byBwaW4gdGhlIHN0YXRlIHRvIGF2b2lkIHRha2luZyBjb3BpZXMgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICp3aV9zdGF0ZV9nZXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHdoaWxlICgoc3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpKSkge1xuJiM0MztcdFx0aWYgKHJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzdGF0ZS1cdTAwM2VyZWZjbnQpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzdGF0ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd2lfc3RhdGVfcHV0KHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdGlmIChzdGF0ZSBcdTAwMjZcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnN0YXRlLVx1MDAzZXJlZmNudCkpXG4mIzQzO1x0XHRrZnJlZV9yY3Uoc3RhdGUsIHJjdSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHU4IGdldF9pbF93ZWlnaHQoaW50IG5vZGUpXG4ge1xuIFx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKnN0YXRlO1xuQEAgLTIzNSw2ICYjNDM7MjU5LDcgQEAgaW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXHRuZXdfd2lfc3RhdGUtXHUwMDNlbW9kZV9hdXRvID0gdHJ1ZTtcbiYjNDM7XHRyZWZjb3VudF9zZXQoXHUwMDI2bmV3X3dpX3N0YXRlLVx1MDAzZXJlZmNudCwgMSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9ub2RlX2lkczsgaSYjNDM7JiM0MzspXG4gXHRcdG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZVtpXSA9IDE7XG4gXG5AQCAtMjY1LDEwICYjNDM7MjkwLDcgQEAgaW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkcylcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgbmV3X3dpX3N0YXRlKTtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbi1cdGlmIChvbGRfd2lfc3RhdGUpIHtcbi1cdFx0c3luY2hyb25pemVfcmN1KCk7XG4tXHRcdGtmcmVlKG9sZF93aV9zdGF0ZSk7XG4tXHR9XG4mIzQzO1x0d2lfc3RhdGVfcHV0KG9sZF93aV9zdGF0ZSk7XG4gb3V0OlxuIFx0a2ZyZWUob2xkX2J3KTtcbiBcdHJldHVybiAwO1xuQEAgLTI2MzIsNyAmIzQzOzI2NTQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0dW5zaWduZWQgbG9uZyBucl9hbGxvY2F0ZWQgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyByb3VuZHM7XG4gXHR1bnNpZ25lZCBsb25nIG5vZGVfcGFnZXMsIGRlbHRhO1xuLVx0dTggKndlaWdodHMsIHdlaWdodDtcbiYjNDM7XHR1OCAqdGFibGUsIHdlaWdodDtcbiBcdHVuc2lnbmVkIGludCB3ZWlnaHRfdG90YWwgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyByZW1fcGFnZXMgPSBucl9wYWdlcztcbiBcdG5vZGVtYXNrX3Qgbm9kZXM7XG5AQCAtMjY3NiwyNSAmIzQzOzI2OTgsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcbiBcdG1lLVx1MDAzZWlsX3dlaWdodCA9IDA7XG4gXHRwcmV2X25vZGUgPSBub2RlO1xuIFxuLVx0LyogY3JlYXRlIGEgbG9jYWwgY29weSBvZiBub2RlIHdlaWdodHMgdG8gb3BlcmF0ZSBvbiBvdXRzaWRlIHJjdSAqL1xuLVx0d2VpZ2h0cyA9IGt6YWxsb2MobnJfbm9kZV9pZHMsIEdGUF9LRVJORUwpO1xuLVx0aWYgKCF3ZWlnaHRzKVxuLVx0XHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xuLVxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xuLVx0aWYgKHN0YXRlKSB7XG4tXHRcdG1lbWNweSh3ZWlnaHRzLCBzdGF0ZS1cdTAwM2Vpd190YWJsZSwgbnJfbm9kZV9pZHMgKiBzaXplb2YodTgpKTtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHR9IGVsc2Uge1xuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbm9kZV9pZHM7IGkmIzQzOyYjNDM7KVxuLVx0XHRcdHdlaWdodHNbaV0gPSAxO1xuLVx0fVxuJiM0MztcdHN0YXRlID0gd2lfc3RhdGVfZ2V0KCk7XG4mIzQzO1x0dGFibGUgPSBzdGF0ZSA/IHN0YXRlLVx1MDAzZWl3X3RhYmxlIDogTlVMTDtcbiBcbiBcdC8qIGNhbGN1bGF0ZSB0b3RhbCwgZGV0ZWN0IHN5c3RlbSBkZWZhdWx0IHVzYWdlICovXG4gXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXG4tXHRcdHdlaWdodF90b3RhbCAmIzQzOz0gd2VpZ2h0c1tub2RlXTtcbiYjNDM7XHRcdHdlaWdodF90b3RhbCAmIzQzOz0gdGFibGUgPyB0YWJsZVtub2RlXSA6IDE7XG4gXG4gXHQvKlxuIFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXG5AQCAtMjcwNiwxMCAmIzQzOzI3MTUsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcbiBcdHJvdW5kcyA9IHJlbV9wYWdlcyAvIHdlaWdodF90b3RhbDtcbiBcdGRlbHRhID0gcmVtX3BhZ2VzICUgd2VpZ2h0X3RvdGFsO1xuIFx0cmVzdW1lX25vZGUgPSBuZXh0X25vZGVfaW4ocHJldl9ub2RlLCBub2Rlcyk7XG4tXHRyZXN1bWVfd2VpZ2h0ID0gd2VpZ2h0c1tyZXN1bWVfbm9kZV07XG4mIzQzO1x0cmVzdW1lX3dlaWdodCA9IHRhYmxlID8gdGFibGVbcmVzdW1lX25vZGVdIDogMTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ub2RlczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0bm9kZSA9IG5leHRfbm9kZV9pbihwcmV2X25vZGUsIG5vZGVzKTtcbi1cdFx0d2VpZ2h0ID0gd2VpZ2h0c1tub2RlXTtcbiYjNDM7XHRcdHdlaWdodCA9IHRhYmxlID8gdGFibGVbbm9kZV0gOiAxO1xuIFx0XHRub2RlX3BhZ2VzID0gd2VpZ2h0ICogcm91bmRzO1xuIFx0XHQvKiBJZiBhIGRlbHRhIGV4aXN0cywgYWRkIHRoaXMgbm9kZSYjMzk7cyBwb3J0aW9uIG9mIHRoZSBkZWx0YSAqL1xuIFx0XHRpZiAoZGVsdGEgXHUwMDNlIHdlaWdodCkge1xuQEAgLTI3MzUsNyAmIzQzOzI3NDQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0fVxuIFx0bWUtXHUwMDNlaWxfcHJldiA9IHJlc3VtZV9ub2RlO1xuIFx0bWUtXHUwMDNlaWxfd2VpZ2h0ID0gcmVzdW1lX3dlaWdodDtcbi1cdGtmcmVlKHdlaWdodHMpO1xuJiM0MztcdHdpX3N0YXRlX3B1dChzdGF0ZSk7XG4gXHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xuIH1cbiBcbkBAIC0zNjQ0LDYgJiM0MzszNjUzLDcgQEAgc3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuIFx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XG4gXHRpZiAoIW5ld193aV9zdGF0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNm5ld193aV9zdGF0ZS1cdTAwM2VyZWZjbnQsIDEpO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbiBcdG9sZF93aV9zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod2lfc3RhdGUsXG5AQCAtMzY2MCwxMCAmIzQzOzM2NzAsNyBAQCBzdGF0aWMgc3NpemVfdCBub2RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4gXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIG5ld193aV9zdGF0ZSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG4tXHRpZiAob2xkX3dpX3N0YXRlKSB7XG4tXHRcdHN5bmNocm9uaXplX3JjdSgpO1xuLVx0XHRrZnJlZShvbGRfd2lfc3RhdGUpO1xuLVx0fVxuJiM0MztcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xuIFx0cmV0dXJuIGNvdW50O1xuIH1cbiBcbkBAIC0zNjk2LDYgJiM0MzszNzAzLDcgQEAgc3RhdGljIHNzaXplX3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XG4gXHRpZiAoIW5ld193aV9zdGF0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNm5ld193aV9zdGF0ZS1cdTAwM2VyZWZjbnQsIDEpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbm9kZV9pZHM7IGkmIzQzOyYjNDM7KVxuIFx0XHRuZXdfd2lfc3RhdGUtXHUwMDNlaXdfdGFibGVbaV0gPSAxO1xuIFxuQEAgLTM3MjgsMTAgJiM0MzszNzM2LDcgQEAgc3RhdGljIHNzaXplX3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIHVwZGF0ZV93aV9zdGF0ZTpcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgbmV3X3dpX3N0YXRlKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbi1cdGlmIChvbGRfd2lfc3RhdGUpIHtcbi1cdFx0c3luY2hyb25pemVfcmN1KCk7XG4tXHRcdGtmcmVlKG9sZF93aV9zdGF0ZSk7XG4tXHR9XG4mIzQzO1x0d2lfc3RhdGVfcHV0KG9sZF93aV9zdGF0ZSk7XG4gXHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuQEAgLTM3NzUsMTAgJiM0MzszNzgwLDcgQEAgc3RhdGljIHZvaWQgd2lfc3RhdGVfZnJlZSh2b2lkKVxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBOVUxMKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbiBcbi1cdGlmIChvbGRfd2lfc3RhdGUpIHtcbi1cdFx0c3luY2hyb25pemVfcmN1KCk7XG4tXHRcdGtmcmVlKG9sZF93aV9zdGF0ZSk7XG4tXHR9XG4mIzQzO1x0d2lfc3RhdGVfcHV0KG9sZF93aV9zdGF0ZSk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgd2lfYXV0b19hdHRyID1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZiYjMzQ7LAogICAgJiMzNDttZW1wb2xpY3lfc2V0X25vZGVfcGVyZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBtZW1vcnkgcG9saWN5IGxvZ2ljIGluIG1tL21lbXBvbGljeS5jIGJ5IGludHJvZHVjaW5nIGEgcmVmY291bnQgYW5kIHJlcGxhY2luZyBzeW5jaHJvbml6ZV9yY3UoKSAmIzQzOyBrZnJlZSgpIHdpdGgga2ZyZWVfcmN1KCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIGFuZCBzeXNmcyBub2RlIHBlcmZvcm1hbmNlIHVwZGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNzMyODk3ZDcxMWM4YWRmMDY4NDYwNzdmNDVkNTAzNzgzZjQ0NjkxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMDM6MjU6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDBlNTE3NWYxYzc2N2QuLjRhMzcyMmM2M2IzMWIgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbXBvbGljeS5jCkBAIC0xMTIsNiAmIzQzOzExMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcHJpbnRrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGVhZm9wcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2djZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWZjb3VudC5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL3RsYmZsdXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3RsYi5oJmd0OwpAQCAtMTU2LDcgJiM0MzsxNTcsOSBAQCBzdGF0aWMgY29uc3QgaW50IHdlaWdodGluZXNzID0gMzI7CiAgKi8KIHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIHsKIAlib29sIG1vZGVfYXV0bzsKLQl1OCBpd190YWJsZVtdOwomIzQzOwlyZWZjb3VudF90IHJlZmNudDsKJiM0MzsJc3RydWN0IHJjdV9oZWFkIHJjdTsKJiM0MzsJdTggaXdfdGFibGVbXSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogfTsKIHN0YXRpYyBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSBfX3JjdSAqd2lfc3RhdGU7CiBzdGF0aWMgdW5zaWduZWQgaW50ICpub2RlX2J3X3RhYmxlOwpAQCAtMTY3LDYgJiM0MzsxNzAsMjcgQEAgc3RhdGljIHVuc2lnbmVkIGludCAqbm9kZV9id190YWJsZTsKICAqLwogc3RhdGljIERFRklORV9NVVRFWCh3aV9zdGF0ZV9sb2NrKTsKIAomIzQzOy8qIEFsbG93IHNsZWVwaW5nIHJlYWRlcnMgdG8gcGluIHRoZSBzdGF0ZSB0byBhdm9pZCB0YWtpbmcgY29waWVzICovCiYjNDM7c3RhdGljIHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICp3aV9zdGF0ZV9nZXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwl3aGlsZSAoKHN0YXRlID0gcmN1X2RlcmVmZXJlbmNlKHdpX3N0YXRlKSkpIHsKJiM0MzsJCWlmIChyZWZjb3VudF9pbmNfbm90X3plcm8oJmFtcDtzdGF0ZS0mZ3Q7cmVmY250KSkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN0YXRlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB3aV9zdGF0ZV9wdXQoc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJaWYgKHN0YXRlICZhbXA7JmFtcDsgcmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7c3RhdGUtJmd0O3JlZmNudCkpCiYjNDM7CQlrZnJlZV9yY3Uoc3RhdGUsIHJjdSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHU4IGdldF9pbF93ZWlnaHQoaW50IG5vZGUpCiB7CiAJc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKnN0YXRlOwpAQCAtMjM1LDYgJiM0MzsyNTksNyBAQCBpbnQgbWVtcG9saWN5X3NldF9ub2RlX3BlcmYodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKQogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbmV3X3dpX3N0YXRlLSZndDttb2RlX2F1dG8gPSB0cnVlOwomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDtuZXdfd2lfc3RhdGUtJmd0O3JlZmNudCwgMSk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yX25vZGVfaWRzOyBpJiM0MzsmIzQzOykKIAkJbmV3X3dpX3N0YXRlLSZndDtpd190YWJsZVtpXSA9IDE7CiAKQEAgLTI2NSwxMCAmIzQzOzI5MCw3IEBAIGludCBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZih1bnNpZ25lZCBpbnQgbm9kZSwgc3RydWN0IGFjY2Vzc19jb29yZGluYXRlICpjb29yZHMpCiAJcmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpOwogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7d2lfc3RhdGVfbG9jayk7Ci0JaWYgKG9sZF93aV9zdGF0ZSkgewotCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQkJa2ZyZWUob2xkX3dpX3N0YXRlKTsKLQl9CiYjNDM7CXdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpOwogb3V0OgogCWtmcmVlKG9sZF9idyk7CiAJcmV0dXJuIDA7CkBAIC0yNjMyLDcgJiM0MzsyNjU0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCwKIAl1bnNpZ25lZCBsb25nIG5yX2FsbG9jYXRlZCA9IDA7CiAJdW5zaWduZWQgbG9uZyByb3VuZHM7CiAJdW5zaWduZWQgbG9uZyBub2RlX3BhZ2VzLCBkZWx0YTsKLQl1OCAqd2VpZ2h0cywgd2VpZ2h0OwomIzQzOwl1OCAqdGFibGUsIHdlaWdodDsKIAl1bnNpZ25lZCBpbnQgd2VpZ2h0X3RvdGFsID0gMDsKIAl1bnNpZ25lZCBsb25nIHJlbV9wYWdlcyA9IG5yX3BhZ2VzOwogCW5vZGVtYXNrX3Qgbm9kZXM7CkBAIC0yNjc2LDI1ICYjNDM7MjY5OCwxMiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLAogCW1lLSZndDtpbF93ZWlnaHQgPSAwOwogCXByZXZfbm9kZSA9IG5vZGU7CiAKLQkvKiBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIG5vZGUgd2VpZ2h0cyB0byBvcGVyYXRlIG9uIG91dHNpZGUgcmN1ICovCi0Jd2VpZ2h0cyA9IGt6YWxsb2MobnJfbm9kZV9pZHMsIEdGUF9LRVJORUwpOwotCWlmICghd2VpZ2h0cykKLQkJcmV0dXJuIHRvdGFsX2FsbG9jYXRlZDsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSk7Ci0JaWYgKHN0YXRlKSB7Ci0JCW1lbWNweSh3ZWlnaHRzLCBzdGF0ZS0mZ3Q7aXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCX0gZWxzZSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlmb3IgKGkgPSAwOyBpICZsdDsgbnJfbm9kZV9pZHM7IGkmIzQzOyYjNDM7KQotCQkJd2VpZ2h0c1tpXSA9IDE7Ci0JfQomIzQzOwlzdGF0ZSA9IHdpX3N0YXRlX2dldCgpOwomIzQzOwl0YWJsZSA9IHN0YXRlID8gc3RhdGUtJmd0O2l3X3RhYmxlIDogTlVMTDsKIAogCS8qIGNhbGN1bGF0ZSB0b3RhbCwgZGV0ZWN0IHN5c3RlbSBkZWZhdWx0IHVzYWdlICovCiAJZm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG5vZGVzKQotCQl3ZWlnaHRfdG90YWwgJiM0Mzs9IHdlaWdodHNbbm9kZV07CiYjNDM7CQl3ZWlnaHRfdG90YWwgJiM0Mzs9IHRhYmxlID8gdGFibGVbbm9kZV0gOiAxOwogCiAJLyoKIAkgKiBDYWxjdWxhdGUgcm91bmRzL3BhcnRpYWwgcm91bmRzIHRvIG1pbmltaXplIF9fYWxsb2NfcGFnZXNfYnVsayBjYWxscy4KQEAgLTI3MDYsMTAgJiM0MzsyNzE1LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsCiAJcm91bmRzID0gcmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsOwogCWRlbHRhID0gcmVtX3BhZ2VzICUgd2VpZ2h0X3RvdGFsOwogCXJlc3VtZV9ub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpOwotCXJlc3VtZV93ZWlnaHQgPSB3ZWlnaHRzW3Jlc3VtZV9ub2RlXTsKJiM0MzsJcmVzdW1lX3dlaWdodCA9IHRhYmxlID8gdGFibGVbcmVzdW1lX25vZGVdIDogMTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbm5vZGVzOyBpJiM0MzsmIzQzOykgewogCQlub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpOwotCQl3ZWlnaHQgPSB3ZWlnaHRzW25vZGVdOwomIzQzOwkJd2VpZ2h0ID0gdGFibGUgPyB0YWJsZVtub2RlXSA6IDE7CiAJCW5vZGVfcGFnZXMgPSB3ZWlnaHQgKiByb3VuZHM7CiAJCS8qIElmIGEgZGVsdGEgZXhpc3RzLCBhZGQgdGhpcyBub2RlJiMzOTtzIHBvcnRpb24gb2YgdGhlIGRlbHRhICovCiAJCWlmIChkZWx0YSAmZ3Q7IHdlaWdodCkgewpAQCAtMjczNSw3ICYjNDM7Mjc0NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsCiAJfQogCW1lLSZndDtpbF9wcmV2ID0gcmVzdW1lX25vZGU7CiAJbWUtJmd0O2lsX3dlaWdodCA9IHJlc3VtZV93ZWlnaHQ7Ci0Ja2ZyZWUod2VpZ2h0cyk7CiYjNDM7CXdpX3N0YXRlX3B1dChzdGF0ZSk7CiAJcmV0dXJuIHRvdGFsX2FsbG9jYXRlZDsKIH0KIApAQCAtMzY0NCw2ICYjNDM7MzY1Myw3IEBAIHN0YXRpYyBzc2l6ZV90IG5vZGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKIAluZXdfd2lfc3RhdGUgPSBremFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTsKIAlpZiAoIW5ld193aV9zdGF0ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO25ld193aV9zdGF0ZS0mZ3Q7cmVmY250LCAxKTsKIAogCW11dGV4X2xvY2soJmFtcDt3aV9zdGF0ZV9sb2NrKTsKIAlvbGRfd2lfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHdpX3N0YXRlLApAQCAtMzY2MCwxMCAmIzQzOzM2NzAsNyBAQCBzdGF0aWMgc3NpemVfdCBub2RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCiAKIAlyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIG5ld193aV9zdGF0ZSk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7d2lfc3RhdGVfbG9jayk7Ci0JaWYgKG9sZF93aV9zdGF0ZSkgewotCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQkJa2ZyZWUob2xkX3dpX3N0YXRlKTsKLQl9CiYjNDM7CXdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzY5Niw2ICYjNDM7MzcwMyw3IEBAIHN0YXRpYyBzc2l6ZV90IHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAluZXdfd2lfc3RhdGUgPSBremFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTsKIAlpZiAoIW5ld193aV9zdGF0ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO25ld193aV9zdGF0ZS0mZ3Q7cmVmY250LCAxKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfbm9kZV9pZHM7IGkmIzQzOyYjNDM7KQogCQluZXdfd2lfc3RhdGUtJmd0O2l3X3RhYmxlW2ldID0gMTsKIApAQCAtMzcyOCwxMCAmIzQzOzM3MzYsNyBAQCBzdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCiB1cGRhdGVfd2lfc3RhdGU6CiAJcmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpOwogCW11dGV4X3VubG9jaygmYW1wO3dpX3N0YXRlX2xvY2spOwotCWlmIChvbGRfd2lfc3RhdGUpIHsKLQkJc3luY2hyb25pemVfcmN1KCk7Ci0JCWtmcmVlKG9sZF93aV9zdGF0ZSk7Ci0JfQomIzQzOwl3aV9zdGF0ZV9wdXQob2xkX3dpX3N0YXRlKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTM3NzUsMTAgJiM0MzszNzgwLDcgQEAgc3RhdGljIHZvaWQgd2lfc3RhdGVfZnJlZSh2b2lkKQogCXJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgTlVMTCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7d2lfc3RhdGVfbG9jayk7CiAKLQlpZiAob2xkX3dpX3N0YXRlKSB7Ci0JCXN5bmNocm9uaXplX3JjdSgpOwotCQlrZnJlZShvbGRfd2lfc3RhdGUpOwotCX0KJiM0MzsJd2lfc3RhdGVfcHV0KG9sZF93aV9zdGF0ZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgd2lfYXV0b19hdHRyID0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA3OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaDogQSBNZW1vcnkgUG9saWN5IFBlcnNwZWN0aXZlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoLCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtEb2VzIHRoaXMgYWN0dWFsbHkgY2hhbmdlIHNvbWV0aGluZyBpbXBvcnRhbnQgZW5vdWdoIHRvIHdhcnJhbnQgZnV6emluZz8mIzM0OyBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCYjMzk7cyBtb2RpZnlpbmcgYG1tL21lbXBvbGljeS5jYCwgd2hpY2ggaXMgYWx3YXlzIGEgcGxhY2UgdG8gcGF5IGF0dGVudGlvbiB0by4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYXJvdW5kIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAuIEkgc2VlIGEgcmVmY291bnQgaGFzIGJlZW4gYWRkZWQsIGFuZCB0aGUgc3RhbmRhcmQgYHN5bmNocm9uaXplX3JjdSgpYCBhbmQgYGtmcmVlKClgIGRhbmNlIGhhcyBiZWVuIHN3YXBwZWQgZm9yIGBrZnJlZV9yY3UoKWAgdXNpbmcgdGhpcyBuZXcgYHdpX3N0YXRlX3B1dCgpYCBmdW5jdGlvbi4gVGhlcmUmIzM5O3MgYWxzbyBhIGNvcnJlc3BvbmRpbmcgYHdpX3N0YXRlX2dldCgpYCB1c2luZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJlZmNvdW50X2luY19ub3RfemVybygpYC4gUmlnaHQgYXdheSwgdGhpcyBzY3JlYW1zICpmdW5jdGlvbmFsIGNoYW5nZSogaW4gdGhlIG1lbW9yeSBwb2xpY3kgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9yIHdlaWdodGVkIGludGVybGVhdmUuIFNvLCB5ZXMsIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nIHB1cnBvc2VzLgoKTXkgbmV4dCBtb3ZlIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGlzIGNvZGUuIENhbiB3ZSBhY3R1YWxseSAqdHJpZ2dlciogdGhlc2UgY2hhbmdlcz8gSSBuZWVkIHRvIGNoZWNrIGlmIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGlzIHJlYWNoYWJsZSwgYW5kIGlmIGl0JiMzOTtzIGRlcGVuZGVudCBvbiBhbnkgc3BlY2lmaWMgY29uZmlncyB0aGF0IG1pZ2h0IGFmZmVjdCBmdXp6YWJpbGl0eS4gQ29uc2lkZXJpbmcgdGhlIGZpbGUsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHN0YW5kYXJkIE5VTUEgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudCBmb3IgbWVtcG9saWN5LiBTbywgSSBuZWVkIHRvIGNvbmZpcm0gYENPTkZJR19OVU1BYCBkZXBlbmRlbmN5LCBhbmQgSSYjMzk7bGwganVtcCBpbnRvIGBtbS9NYWtlZmlsZWAgdG8gdmVyaWZ5IGFueSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29tZSBpbnRvIHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtcG9saWN5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT04NT1vYmotJChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApXHQmIzQzOz0gaHVnZXRsYl92bWVtbWFwLm9cbm1tL01ha2VmaWxlOjg2Om9iai0kKENPTkZJR19OVU1BKSBcdCYjNDM7PSBtZW1wb2xpY3kub1xubW0vTWFrZWZpbGUtODctb2JqLSQoQ09ORklHX1NQQVJTRU1FTSlcdCYjNDM7PSBzcGFyc2Uub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTlVNQSBNZW1vcnkgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCB0aGUgcHJlc2VuY2Ugb2YgYENPTkZJR19OVU1BYCBpcyBjb25maXJtZWQsIHNvIE5VTUEgaXMgZGVmaW5pdGVseSBpbiBwbGF5LiBOb3csIG15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IHNoaWZ0aW5nIHRvIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgZnVuY3Rpb24gd2l0aGluIGBtbS9tZW1wb2xpY3kuY2AuIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24gdG8gYmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBidWxrIHBhZ2UgYWxsb2NhdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiB3ZWlnaHRlZCBpbnRlcmxlYXZpbmcgcG9saWNpZXMgYXJlIGFwcGxpZWQgaW4gYSBOVU1BIGVudmlyb25tZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQsIGl0cyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLiBUaGlzIGlzIGEga2V5IGZ1bmN0aW9uIHRvIGRpZyBpbnRvIHdoZW4gb3B0aW1pemluZyBvciBkZWJ1Z2dpbmcgTlVNQS1hd2FyZSBhcHBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9MjYxMT1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2NDUtXG5tbS9tZW1wb2xpY3kuYzoyNjQ2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjQ3LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmM9Mjc3Nz11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc5MS1cdGlmIChwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXG5tbS9tZW1wb2xpY3kuYzoyNzkyOlx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxubW0vbWVtcG9saWN5LmMtMjc5My1cdFx0XHRcdCAgZ2ZwLCBwb2wsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTk3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBXZWlnaHRlZCBJbnRlcmxlYXZlIE1lbW9yeSBQb2xpY3kqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgZnJvbSB0aGUgY29kZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIHNwZWNpZmljYWxseSB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYE1QT0xfV0VJR0hURURfSU5URVJMRUFWRWAgd2l0aGluIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLiBUaGlzIG1ha2VzIHNlbnNlOyB0aGF0JiMzOTtzIHRoZSBwb2ludCBvZiB0aGUgd2hvbGUgdGhpbmcuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgaG93IGRvZXMgdGhpcyB3ZWlnaHRlZCBpbnRlcmxlYXZlIHBvbGljeSAqZ2V0KiB0cmlnZ2VyZWQgaW4gdGhlIGZpcnN0IHBsYWNlPyBJIG5lZWQgdG8gbWFwIHRoZSBwYXRoIHRvIHVzZXJzcGFjZS4gIEVzc2VudGlhbGx5LCB3aGF0IHN5c2NhbGxzIGNhbiBhIHVzZXIgYWN0dWFsbHkgdXNlIHRvIHNldCB0aGlzIHBvbGljeT8gIFdlJiMzOTtyZSB0YWxraW5nIGBtYmluZGAgb3IgYHNldF9tZW1wb2xpY3lgIGNhbGxzLCByaWdodD8gIFRoYXQmIzM5O3Mgd2hlcmUgdGhpcyB3aG9sZSBpbnRlcmxlYXZlL3dlaWdodCBtZWNoYW5pc20gZ2V0cyBzZXQgdXAgYW5kIHB1dCBpbnRvIGVmZmVjdC4gR290dGEgZG91YmxlLWNoZWNrIHRob3NlIHN5c2NhbGwgaW1wbGVtZW50YXRpb25zIHRvIGVuc3VyZSBldmVyeXRoaW5nJiMzOTtzIGhvb2tlZCB1cCBjb3JyZWN0bHkgYW5kIHRoYXQgdGhlIHBvbGljeSBiZWhhdmlvciBtYXRjaGVzIGV4cGVjdGF0aW9ucyB3aGVuIHNldCBmcm9tIGEgdXNlciBhcHBsaWNhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHBhdGggaXMgc2VjdXJlIGFuZCB0aGF0IHRoZSB3ZWlnaHRzIGFyZSByZXNwZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9NTkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtcG9saWN5X29wZXJhdGlvbnMgbXBvbF9vcHNbTVBPTF9NQVhdID0ge1xuLS1cbm1tL21lbXBvbGljeS5jLTYxNS1cdH0sXG5tbS9tZW1wb2xpY3kuYzo2MTY6XHRbTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFXSA9IHtcbm1tL21lbXBvbGljeS5jLTYxNy1cdFx0LmNyZWF0ZSA9IG1wb2xfbmV3X25vZGVtYXNrLFxuLS1cbm1tL21lbXBvbGljeS5jPTEwODM9c3RhdGljIGxvbmcgZG9fc2V0X21lbXBvbGljeSh1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBzaG9ydCBmbGFncyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMTA5LVx0aWYgKG5ldyBcdTAwMjZcdTAwMjYgKG5ldy1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSB8fFxubW0vbWVtcG9saWN5LmM6MTExMDpcdFx0ICAgIG5ldy1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkpIHtcbm1tL21lbXBvbGljeS5jLTExMTEtXHRcdGN1cnJlbnQtXHUwMDNlaWxfcHJldiA9IE1BWF9OVU1OT0RFUy0xO1xuLS1cbm1tL21lbXBvbGljeS5jPTExMjc9c3RhdGljIHZvaWQgZ2V0X3BvbGljeV9ub2RlbWFzayhzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIG5vZGVtYXNrX3QgKm5vZGVzKVxuLS1cbm1tL21lbXBvbGljeS5jLTExMzctXHRjYXNlIE1QT0xfUFJFRkVSUkVEX01BTlk6XG5tbS9tZW1wb2xpY3kuYzoxMTM4Olx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XG5tbS9tZW1wb2xpY3kuYy0xMTM5LVx0XHQqbm9kZXMgPSBwb2wtXHUwMDNlbm9kZXM7XG4tLVxubW0vbWVtcG9saWN5LmM9MTE2Mz1zdGF0aWMgbG9uZyBkb19nZXRfbWVtcG9saWN5KGludCAqcG9saWN5LCBub2RlbWFza190ICpubWFzayxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMjIzLVx0XHR9IGVsc2UgaWYgKHBvbCA9PSBjdXJyZW50LVx1MDAzZW1lbXBvbGljeSBcdTAwMjZcdTAwMjZcbm1tL21lbXBvbGljeS5jOjEyMjQ6XHRcdFx0XHRwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpIHtcbm1tL21lbXBvbGljeS5jLTEyMjUtXHRcdFx0aWYgKGN1cnJlbnQtXHUwMDNlaWxfd2VpZ2h0KVxuLS1cbm1tL21lbXBvbGljeS5jPTE1MDI9c3RhdGljIGxvbmcgZG9fbWJpbmQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sXG4tLVxubW0vbWVtcG9saWN5LmMtMTU5Ny1cdFx0aWYgKG5ldy1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSB8fFxubW0vbWVtcG9saWN5LmM6MTU5ODpcdFx0ICAgIG5ldy1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkge1xubW0vbWVtcG9saWN5LmMtMTU5OS1cdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLS1cbm1tL21lbXBvbGljeS5jPTIwMzQ9c3RydWN0IG1lbXBvbGljeSAqX19nZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMDQ3LSAqIEBpbHg6IGludGVybGVhdmUgaW5kZXggKG91dHB1dCksIGZvciB1c2Ugb25seSB3aGVuIE1QT0xfSU5URVJMRUFWRSBvclxubW0vbWVtcG9saWN5LmM6MjA0ODogKiAgICAgICBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVcbm1tL21lbXBvbGljeS5jLTIwNDktICpcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMDU3PXN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbXBvbGljeS5jLTIwNjUtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFIHx8XG5tbS9tZW1wb2xpY3kuYzoyMDY2Olx0ICAgIHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkge1xubW0vbWVtcG9saWN5LmMtMjA2Ny1cdFx0KmlseCAmIzQzOz0gdm1hLVx1MDAzZXZtX3Bnb2ZmIFx1MDAzZVx1MDAzZSBvcmRlcjtcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMTU5PXVuc2lnbmVkIGludCBtZW1wb2xpY3lfc2xhYl9ub2RlKHZvaWQpXG4tLVxubW0vbWVtcG9saWN5LmMtMjE3Ny1cbm1tL21lbXBvbGljeS5jOjIxNzg6XHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcbm1tL21lbXBvbGljeS5jLTIxNzktXHRcdHJldHVybiB3ZWlnaHRlZF9pbnRlcmxlYXZlX25vZGVzKHBvbGljeSk7XG4tLVxubW0vbWVtcG9saWN5LmM9MjI4NT1zdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X25vZGVtYXNrKGdmcF90IGdmcCwgc3RydWN0IG1lbXBvbGljeSAqcG9sLFxuLS1cbm1tL21lbXBvbGljeS5jLTIzMTgtXHRcdGJyZWFrO1xubW0vbWVtcG9saWN5LmM6MjMxOTpcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmMtMjMyMC1cdFx0Km5pZCA9IChpbHggPT0gTk9fSU5URVJMRUFWRV9JTkRFWCkgP1xuLS1cbm1tL21lbXBvbGljeS5jPTIzNzE9Ym9vbCBpbml0X25vZGVtYXNrX29mX21lbXBvbGljeShub2RlbWFza190ICptYXNrKVxuLS1cbm1tL21lbXBvbGljeS5jLTIzODQtXHRjYXNlIE1QT0xfSU5URVJMRUFWRTpcbm1tL21lbXBvbGljeS5jOjIzODU6XHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcbm1tL21lbXBvbGljeS5jLTIzODYtXHRcdCptYXNrID0gbWVtcG9saWN5LVx1MDAzZW5vZGVzO1xuLS1cbm1tL21lbXBvbGljeS5jPTI0NjE9c3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19tcG9sKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL21lbXBvbGljeS5jLTI0ODUtXHRcdGlmIChwb2wtXHUwMDNlbW9kZSAhPSBNUE9MX0lOVEVSTEVBVkUgXHUwMDI2XHUwMDI2XG5tbS9tZW1wb2xpY3kuYzoyNDg2Olx0XHQgICAgcG9sLVx1MDAzZW1vZGUgIT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFIFx1MDAyNlx1MDAyNlxubW0vbWVtcG9saWN5LmMtMjQ4Ny1cdFx0ICAgICghbm9kZW1hc2sgfHwgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaykpKSB7XG4tLVxubW0vbWVtcG9saWN5LmMtMjUwOC1cdGlmICh1bmxpa2VseShwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUgfHxcbm1tL21lbXBvbGljeS5jOjI1MDk6XHRcdCAgICAgcG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKSBcdTAwMjZcdTAwMjYgcGFnZSkge1xubW0vbWVtcG9saWN5LmMtMjUxMC1cdFx0Lyogc2tpcCBOVU1BX0lOVEVSTEVBVkVfSElUIHVwZGF0ZSBpZiBudW1hIHN0YXRzIGlzIGRpc2FibGVkICovXG4tLVxubW0vbWVtcG9saWN5LmM9Mjc3Nz11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc5MC1cbm1tL21lbXBvbGljeS5jOjI3OTE6XHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxubW0vbWVtcG9saWN5LmMtMjc5Mi1cdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcbi0tXG5tbS9tZW1wb2xpY3kuYz0yODUxPWJvb2wgX19tcG9sX2VxdWFsKHN0cnVjdCBtZW1wb2xpY3kgKmEsIHN0cnVjdCBtZW1wb2xpY3kgKmIpXG4tLVxubW0vbWVtcG9saWN5LmMtMjg2OS1cdGNhc2UgTVBPTF9QUkVGRVJSRURfTUFOWTpcbm1tL21lbXBvbGljeS5jOjI4NzA6XHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcbm1tL21lbXBvbGljeS5jLTI4NzEtXHRcdHJldHVybiAhIW5vZGVzX2VxdWFsKGEtXHUwMDNlbm9kZXMsIGItXHUwMDNlbm9kZXMpO1xuLS1cbm1tL21lbXBvbGljeS5jPTI5ODc9aW50IG1wb2xfbWlzcGxhY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL21lbXBvbGljeS5jLTMwMTMtXG5tbS9tZW1wb2xpY3kuYzozMDE0Olx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XG5tbS9tZW1wb2xpY3kuYy0zMDE1LVx0XHRwb2xuaWQgPSB3ZWlnaHRlZF9pbnRlcmxlYXZlX25pZChwb2wsIGlseCk7XG4tLVxubW0vbWVtcG9saWN5LmM9MzQwMD1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBvbGljeV9tb2Rlc1tdID1cbi0tXG5tbS9tZW1wb2xpY3kuYy0zNDA1LVx0W01QT0xfSU5URVJMRUFWRV0gPSBcJiMzNDtpbnRlcmxlYXZlXCYjMzQ7LFxubW0vbWVtcG9saWN5LmM6MzQwNjpcdFtNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVdID0gXCYjMzQ7d2VpZ2h0ZWQgaW50ZXJsZWF2ZVwmIzM0Oyxcbm1tL21lbXBvbGljeS5jLTM0MDctXHRbTVBPTF9MT0NBTF0gICAgICA9IFwmIzM0O2xvY2FsXCYjMzQ7LFxuLS1cbm1tL21lbXBvbGljeS5jPTM0MjI9aW50IG1wb2xfcGFyc2Vfc3RyKGNoYXIgKnN0ciwgc3RydWN0IG1lbXBvbGljeSAqKm1wb2wpXG4tLVxubW0vbWVtcG9saWN5LmMtMzQ2NS1cdGNhc2UgTVBPTF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmM6MzQ2NjpcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmMtMzQ2Ny1cdFx0Lypcbi0tXG5tbS9tZW1wb2xpY3kuYz0zNTU4PXZvaWQgbXBvbF90b19zdHIoY2hhciAqYnVmZmVyLCBpbnQgbWF4bGVuLCBzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXG4tLVxubW0vbWVtcG9saWN5LmMtMzU4MC1cdGNhc2UgTVBPTF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmM6MzU4MTpcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmMtMzU4Mi1cdFx0bm9kZXMgPSBwb2wtXHUwMDNlbm9kZXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUxMgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIE1lbW9yeSBQb2xpY3kgQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUga2V5IGFyZWFzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHdlaWdodGVkIGludGVybGVhdmUgYW5kIGJ1bGsgcGFnZSBhbGxvY2F0aW9uLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAsIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLCBhbmQgYSBmZXcgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgbm9kZV9zdG9yZWAsIGB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmVgLCBhbmQgYHdpX3N0YXRlX2ZyZWVgLiAgR2l2ZW4gbXkga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwsIEkga25vdyB0aG9zZSBzeXNmcyBlbnRyaWVzIGZvciB3ZWlnaHRlZCBpbnRlcmxlYXZlIGFyZSBkZWZpbmVkIHdpdGhpbiBgbW0vbWVtcG9saWN5LmNgLiAgSSBuZWVkIHRvIGNoZWNrIGhvdyBgbm9kZV9zdG9yZWAgaXMgYmVpbmcgdXNlZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGBub2RlX3N0b3JlYCBpcyByZWFjaGFibGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IHBvbGljeSBpbmZyYXN0cnVjdHVyZS4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZG9lcyB0byBwYWdlIGFsbG9jYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm9kZV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTM2Mjk9c3RhdGljIHNzaXplX3Qgbm9kZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vbWVtcG9saWN5LmMtMzYzOS1cbm1tL21lbXBvbGljeS5jOjM2NDA6c3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxubW0vbWVtcG9saWN5LmMtMzY0MS1cdFx0XHQgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL21lbXBvbGljeS5jPTM4MDY9c3RhdGljIGludCBzeXNmc193aV9ub2RlX2FkZChpbnQgbmlkKVxuLS1cbm1tL21lbXBvbGljeS5jLTM4MzAtXHRuZXdfYXR0ci1cdTAwM2Vrb2JqX2F0dHIuc2hvdyA9IG5vZGVfc2hvdztcbm1tL21lbXBvbGljeS5jOjM4MzE6XHRuZXdfYXR0ci1cdTAwM2Vrb2JqX2F0dHIuc3RvcmUgPSBub2RlX3N0b3JlO1xubW0vbWVtcG9saWN5LmMtMzgzMi1cdG5ld19hdHRyLVx1MDAzZW5pZCA9IG5pZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA2MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgV2VpZ2h0ZWQgSW50ZXJsZWF2ZSBNZW1vcnkgUG9saWN5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIHdlaWdodGVkIGludGVybGVhdmUgbWVtb3J5IHBvbGljeSBpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgYHN5c2ZzYCBlbnRyaWVzIGZvciB0aGlzIHBvbGljeSwgdGhlIG9uZXMgdGhhdCBsaXZlIGluIHBhdGhzIGxpa2UgYC9zeXMva2VybmVsL21tL21lbXBvbGljeS93ZWlnaHRlZF9pbnRlcmxlYXZlL25vZGVOYCwgYXJlIGNyZWF0ZWQgdGhyb3VnaCBjYWxscyB0byBgc3lzZnNfd2lfbm9kZV9hZGRgIGR1cmluZyBlaXRoZXIgaW5pdGlhbGl6YXRpb24gb3IgaG90cGx1ZyBldmVudHMuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFuIGltcHJvdmVtZW50IGFyb3VuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSBmbGF3ZWQgYnkgdXNpbmcgYHN5bmNocm9uaXplX3JjdSgpYCB3aGlsZSBhIG11dGV4IHdhcyBoZWxkLCB3aGljaCBpcyBhIGJpZyBuby1ubywgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGl0JiMzOTtzIGJlZW4gb3B0aW1pemVkIHRvIGF2b2lkIGl0LiBUaGUgc3BlY2lmaWMgY2hhbmdlIGludm9sdmVzIGludHJvZHVjaW5nIGByZWZjb3VudF90YCB0byB0aGUgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCBhbmQgcmVwbGFjaW5nIHRoZSBwcm9ibGVtYXRpYyBgc3luY2hyb25pemVfcmN1YCAmIzQzOyBga2ZyZWVgIHNlcXVlbmNlIHdpdGggYSBtb3JlIFJDVS1mcmllbmRseSBga2ZyZWVfcmN1YC4gR29vZC4gUmVmY291bnRzIGFyZSBnZW5lcmFsbHkgYSBiZXR0ZXIgYXBwcm9hY2guCgpUaGUgcGF0Y2ggYWxzbyBvcHRpbWl6ZXMgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAuIEl0IG5vdyB1c2VzIGB3aV9zdGF0ZV9nZXQoKWAsIHdoaWNoIGluY3JlbWVudHMgdGhlIHJlZmNvdW50LCByYXRoZXIgdGhhbiBhbGxvY2F0aW5nIGEgbG9jYWwgY29weSBvZiB3ZWlnaHRzIHdpdGggYGt6YWxsb2NgLiBUaGlzIGxvb2tzIGxpa2UgYSBkZWZpbml0ZSBwZXJmb3JtYW5jZSBib29zdCBhbmQgbGVzcyBjaGFuY2Ugb2YgbWVtb3J5IGxlYWtzLgoKR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQmIzM5O3MgcmlwZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cyBmb3IgdGhlIGZ1enplci4gTXkgaW5pdGlhbCB0YXJnZXQgZnVuY3Rpb25zIHNob3VsZCBiZToKCiogICBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCAob3IgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgc2luY2UgdGhlIGxhdHRlciBjYWxscyB0aGUgZm9ybWVyKS4KKiAgIGBub2RlX3N0b3JlYAoqICAgYHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZWAKKiAgIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAKCkl0IGxvb2tzIGxpa2UgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxpbmcgZnVuY3Rpb24sIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIHRvIHNlZSBpZiB0aGF0JiMzOTtzIGEgdmlhYmxlIG9wdGlvbi4gT2theSwgbGV0IG1lIGNvbmZpcm0uLi4gSSBuZWVkIHRvIGNoZWNrIGlmIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9Mjc1MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzc2LSAqL1xubW0vbWVtcG9saWN5LmM6Mjc3Nzp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNzc4LVx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbGx5IEV4cG9zZWQgTWVtb3J5IFBvbGljeSBGdW5jdGlvbioqCgpPa2F5LCBzbyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBpcyBleHBvc2VkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCB1c3VhbGx5IGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggbWVtb3J5IHBvbGljeSBhcmUgY2FyZWZ1bGx5IGd1YXJkZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCwgYW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGl0cyB2aXNpYmlsaXR5LiBUaGUgbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyBhIGJ1bGsgYWxsb2NhdGlvbiB3aXRoIG5vIHByb2ZpbGluZywgYW5kIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBtZW1wb2xpY3kuIE15IG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IHRvIGludmVzdGlnYXRlIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgaW50ZXJhY3Rpb25zLCBzZXR0aW5ncyBvciBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBvciB1c2UuIEtub3dpbmcgaG93IHRoYXQgZnVuY3Rpb24gd29ya3Mgd2l0aCBtZW1vcnkgcG9saWNpZXMgaXMga2V5LiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIGNvbnRleHQgYW5kIGltcGFjdCBvZiBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCYjMzk7cyBleHRlcm5hbCBhdmFpbGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXBvbGljeV9zZXRfbm9kZV9wZXJmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9MjExPXN0YXRpYyB2b2lkIHJlZHVjZV9pbnRlcmxlYXZlX3dlaWdodHModW5zaWduZWQgaW50ICpidywgdTggKm5ld19pdylcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNDMtXG5tbS9tZW1wb2xpY3kuYzoyNDQ6aW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3Jkcylcbm1tL21lbXBvbGljeS5jLTI0NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzOTkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIHZpc2liaWxpdHkgb2YgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgZXhwb3J0ZWQgb3IgaWYgaXQmIzM5O3Mgc3RhdGljLiBSaWdodCwgSSByZWNhbGwgaXQmIzM5O3MgZGVmaW5pdGVseSAqbm90KiBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGF2YWlsYWJsZSBmb3IgdXNlIG91dHNpZGUgdGhlIGN1cnJlbnQgbW9kdWxlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGl0JiMzOTtzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4gVGltZSB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbCBzaXRlcyBhbmQgbWFwIG91dCBpdHMgdXNhZ2UuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1wb2xpY3lfc2V0X25vZGVfcGVyZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2Uvbm9kZS5jPTIxNj12b2lkIG5vZGVfc2V0X3BlcmZfYXR0cnModW5zaWduZWQgaW50IG5pZCwgc3RydWN0IGFjY2Vzc19jb29yZGluYXRlICpjb29yZCxcbi0tXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTI0Mi1cdGlmIChhY2Nlc3MgPT0gQUNDRVNTX0NPT1JESU5BVEVfQ1BVKSB7XG5kcml2ZXJzL2Jhc2Uvbm9kZS5jOjI0MzpcdFx0aWYgKG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKG5pZCwgY29vcmQpKSB7XG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTI0NC1cdFx0XHRwcl9pbmZvKFwmIzM0O2ZhaWxlZCB0byBzZXQgbWVtcG9saWN5IGF0dHJzIGZvciBub2RlICVkXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvYmFzZS9ub2RlLmM9MjU3PXZvaWQgbm9kZV91cGRhdGVfcGVyZl9hdHRycyh1bnNpZ25lZCBpbnQgbmlkLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkLFxuLS1cbmRyaXZlcnMvYmFzZS9ub2RlLmMtMjgzLVxuZHJpdmVycy9iYXNlL25vZGUuYzoyODQ6XHRpZiAobWVtcG9saWN5X3NldF9ub2RlX3BlcmYobmlkLCBjb29yZCkpXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTI4NS1cdFx0cHJfaW5mbyhcJiMzNDtmYWlsZWQgdG8gc2V0IG1lbXBvbGljeSBhdHRycyBmb3Igbm9kZSAlZFxcblwmIzM0OywgbmlkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oPTE4MD1leHRlcm4gYm9vbCBhcHBseV9wb2xpY3lfem9uZShzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3ksIGVudW0gem9uZV90eXBlIHpvbmUpO1xuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0xODEtXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oOjE4MjpleHRlcm4gaW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0xODMtXHRcdFx0XHQgICBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3Jkcyk7XG4tLVxubW0vbWVtcG9saWN5LmM9MjExPXN0YXRpYyB2b2lkIHJlZHVjZV9pbnRlcmxlYXZlX3dlaWdodHModW5zaWduZWQgaW50ICpidywgdTggKm5ld19pdylcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNDMtXG5tbS9tZW1wb2xpY3kuYzoyNDQ6aW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3Jkcylcbm1tL21lbXBvbGljeS5jLTI0NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDM5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIE5VTUEgUGVyZm9ybWFuY2UgQXR0cmlidXRlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgY29kZSByZWxhdGVkIHRvIG5vZGUgcGVyZm9ybWFuY2UgYXR0cmlidXRlcyDigJMgc3BlY2lmaWNhbGx5LCBmdW5jdGlvbnMgY2FsbGVkIGZyb20gYG5vZGVfc2V0X3BlcmZfYXR0cnNgIGFuZCBgbm9kZV91cGRhdGVfcGVyZl9hdHRyc2Agd2l0aGluIGBkcml2ZXJzL2Jhc2Uvbm9kZS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgbGlrZWx5IHRvdWNoZXMgb24gQUNQSSBITUFUIG9yIHNpbWlsYXIgbWVjaGFuaXNtcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuCgpMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBhIGNvdXBsZSBvZiByZWxhdGVkIGZ1bmN0aW9ucywgYG5vZGVfc3RvcmVgIGFuZCBgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlYCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBnZXQgYm9nZ2VkIGRvd24gaW4gaW50ZXJuYWwgc3RhdGljIGZ1bmN0aW9ucy4gQXJlIHRoZXJlIHB1YmxpYyBpbnRlcmZhY2VzIHRoYXQgbWF0dGVyPwoKYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgc2VlbXMgbGlrZSBhIGdvb2QgdGFyZ2V0IHRvIGtlZXAgaW4gbWluZCwgYW5kIHRoYXQgc2VlbXMgcHJvbWlzaW5nLCBidXQgSSBzaG91bGQgbG9vayBhdCBhbGwgdGhlIGVudHJ5IHBvaW50cyBpbiB0aGlzIGFyZWEuIGBkb19tYmluZGAgb3IgYGRvX3NldF9tZW1wb2xpY3lgIGxvb2sgaW50ZXJlc3RpbmcsIHRoZXkmIzM5O3JlIHN0YXRpYyBpbnRlcm5hbGx5LCBidXQgY2FsbGVkIHZpYSB0aGUgYHN5c19tYmluZGAgYW5kIGBzeXNfc2V0X21lbXBvbGljeWAgc3lzY2FsbHMsIHNvIHRoZXJlJiMzOTtzIGFuIGV4dGVybmFsIHBvaW50IG9mIGludGVyYWN0aW9uIHRoZXJlLgoKU28sIHRvIGZvY3VzIG15IGFuYWx5c2lzLCBJJiMzOTttIGdvaW5nIHRvIGNvbmNlbnRyYXRlIG9uIGBzeXNfbWJpbmRgLCBgc3lzX3NldF9tZW1wb2xpY3lgLCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCwgYW5kIGFsc28gYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCwgaXQgc2VlbXMgbGlrZSBpdCBtaWdodCBiZSBhbiBpbXBvcnRhbnQgZnVuY3Rpb24uCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBDT05GSUdfTlVNQWAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCYjMzk7cyByZWxldmFudCBoZXJlIG9yIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBrbm9icyBmb3Igd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBvciBzaW1pbGFyIGZlYXR1cmVzLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHRoaW5nIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9NTkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtcG9saWN5X29wZXJhdGlvbnMgbXBvbF9vcHNbTVBPTF9NQVhdID0ge1xuLS1cbm1tL21lbXBvbGljeS5jLTYxNS1cdH0sXG5tbS9tZW1wb2xpY3kuYzo2MTY6XHRbTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFXSA9IHtcbm1tL21lbXBvbGljeS5jLTYxNy1cdFx0LmNyZWF0ZSA9IG1wb2xfbmV3X25vZGVtYXNrLFxuLS1cbm1tL21lbXBvbGljeS5jPTEwODM9c3RhdGljIGxvbmcgZG9fc2V0X21lbXBvbGljeSh1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBzaG9ydCBmbGFncyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMTA5LVx0aWYgKG5ldyBcdTAwMjZcdTAwMjYgKG5ldy1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSB8fFxubW0vbWVtcG9saWN5LmM6MTExMDpcdFx0ICAgIG5ldy1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkpIHtcbm1tL21lbXBvbGljeS5jLTExMTEtXHRcdGN1cnJlbnQtXHUwMDNlaWxfcHJldiA9IE1BWF9OVU1OT0RFUy0xO1xuLS1cbm1tL21lbXBvbGljeS5jPTExMjc9c3RhdGljIHZvaWQgZ2V0X3BvbGljeV9ub2RlbWFzayhzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIG5vZGVtYXNrX3QgKm5vZGVzKVxuLS1cbm1tL21lbXBvbGljeS5jLTExMzctXHRjYXNlIE1QT0xfUFJFRkVSUkVEX01BTlk6XG5tbS9tZW1wb2xpY3kuYzoxMTM4Olx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XG5tbS9tZW1wb2xpY3kuYy0xMTM5LVx0XHQqbm9kZXMgPSBwb2wtXHUwMDNlbm9kZXM7XG4tLVxubW0vbWVtcG9saWN5LmM9MTE2Mz1zdGF0aWMgbG9uZyBkb19nZXRfbWVtcG9saWN5KGludCAqcG9saWN5LCBub2RlbWFza190ICpubWFzayxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMjIzLVx0XHR9IGVsc2UgaWYgKHBvbCA9PSBjdXJyZW50LVx1MDAzZW1lbXBvbGljeSBcdTAwMjZcdTAwMjZcbm1tL21lbXBvbGljeS5jOjEyMjQ6XHRcdFx0XHRwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpIHtcbm1tL21lbXBvbGljeS5jLTEyMjUtXHRcdFx0aWYgKGN1cnJlbnQtXHUwMDNlaWxfd2VpZ2h0KVxuLS1cbm1tL21lbXBvbGljeS5jPTE1MDI9c3RhdGljIGxvbmcgZG9fbWJpbmQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sXG4tLVxubW0vbWVtcG9saWN5LmMtMTU5Ny1cdFx0aWYgKG5ldy1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSB8fFxubW0vbWVtcG9saWN5LmM6MTU5ODpcdFx0ICAgIG5ldy1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkge1xubW0vbWVtcG9saWN5LmMtMTU5OS1cdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLS1cbm1tL21lbXBvbGljeS5jPTIwMzQ9c3RydWN0IG1lbXBvbGljeSAqX19nZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMDQ3LSAqIEBpbHg6IGludGVybGVhdmUgaW5kZXggKG91dHB1dCksIGZvciB1c2Ugb25seSB3aGVuIE1QT0xfSU5URVJMRUFWRSBvclxubW0vbWVtcG9saWN5LmM6MjA0ODogKiAgICAgICBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVcbm1tL21lbXBvbGljeS5jLTIwNDktICpcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMDU3PXN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbXBvbGljeS5jLTIwNjUtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFIHx8XG5tbS9tZW1wb2xpY3kuYzoyMDY2Olx0ICAgIHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkge1xubW0vbWVtcG9saWN5LmMtMjA2Ny1cdFx0KmlseCAmIzQzOz0gdm1hLVx1MDAzZXZtX3Bnb2ZmIFx1MDAzZVx1MDAzZSBvcmRlcjtcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMTU5PXVuc2lnbmVkIGludCBtZW1wb2xpY3lfc2xhYl9ub2RlKHZvaWQpXG4tLVxubW0vbWVtcG9saWN5LmMtMjE3Ny1cbm1tL21lbXBvbGljeS5jOjIxNzg6XHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcbm1tL21lbXBvbGljeS5jLTIxNzktXHRcdHJldHVybiB3ZWlnaHRlZF9pbnRlcmxlYXZlX25vZGVzKHBvbGljeSk7XG4tLVxubW0vbWVtcG9saWN5LmM9MjI4NT1zdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X25vZGVtYXNrKGdmcF90IGdmcCwgc3RydWN0IG1lbXBvbGljeSAqcG9sLFxuLS1cbm1tL21lbXBvbGljeS5jLTIzMTgtXHRcdGJyZWFrO1xubW0vbWVtcG9saWN5LmM6MjMxOTpcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmMtMjMyMC1cdFx0Km5pZCA9IChpbHggPT0gTk9fSU5URVJMRUFWRV9JTkRFWCkgP1xuLS1cbm1tL21lbXBvbGljeS5jPTIzNzE9Ym9vbCBpbml0X25vZGVtYXNrX29mX21lbXBvbGljeShub2RlbWFza190ICptYXNrKVxuLS1cbm1tL21lbXBvbGljeS5jLTIzODQtXHRjYXNlIE1QT0xfSU5URVJMRUFWRTpcbm1tL21lbXBvbGljeS5jOjIzODU6XHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcbm1tL21lbXBvbGljeS5jLTIzODYtXHRcdCptYXNrID0gbWVtcG9saWN5LVx1MDAzZW5vZGVzO1xuLS1cbm1tL21lbXBvbGljeS5jPTI0NjE9c3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19tcG9sKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL21lbXBvbGljeS5jLTI0ODUtXHRcdGlmIChwb2wtXHUwMDNlbW9kZSAhPSBNUE9MX0lOVEVSTEVBVkUgXHUwMDI2XHUwMDI2XG5tbS9tZW1wb2xpY3kuYzoyNDg2Olx0XHQgICAgcG9sLVx1MDAzZW1vZGUgIT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFIFx1MDAyNlx1MDAyNlxubW0vbWVtcG9saWN5LmMtMjQ4Ny1cdFx0ICAgICghbm9kZW1hc2sgfHwgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaykpKSB7XG4tLVxubW0vbWVtcG9saWN5LmMtMjUwOC1cdGlmICh1bmxpa2VseShwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUgfHxcbm1tL21lbXBvbGljeS5jOjI1MDk6XHRcdCAgICAgcG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKSBcdTAwMjZcdTAwMjYgcGFnZSkge1xubW0vbWVtcG9saWN5LmMtMjUxMC1cdFx0Lyogc2tpcCBOVU1BX0lOVEVSTEVBVkVfSElUIHVwZGF0ZSBpZiBudW1hIHN0YXRzIGlzIGRpc2FibGVkICovXG4tLVxubW0vbWVtcG9saWN5LmM9Mjc3Nz11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc5MC1cbm1tL21lbXBvbGljeS5jOjI3OTE6XHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxubW0vbWVtcG9saWN5LmMtMjc5Mi1cdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcbi0tXG5tbS9tZW1wb2xpY3kuYz0yODUxPWJvb2wgX19tcG9sX2VxdWFsKHN0cnVjdCBtZW1wb2xpY3kgKmEsIHN0cnVjdCBtZW1wb2xpY3kgKmIpXG4tLVxubW0vbWVtcG9saWN5LmMtMjg2OS1cdGNhc2UgTVBPTF9QUkVGRVJSRURfTUFOWTpcbm1tL21lbXBvbGljeS5jOjI4NzA6XHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcbm1tL21lbXBvbGljeS5jLTI4NzEtXHRcdHJldHVybiAhIW5vZGVzX2VxdWFsKGEtXHUwMDNlbm9kZXMsIGItXHUwMDNlbm9kZXMpO1xuLS1cbm1tL21lbXBvbGljeS5jPTI5ODc9aW50IG1wb2xfbWlzcGxhY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL21lbXBvbGljeS5jLTMwMTMtXG5tbS9tZW1wb2xpY3kuYzozMDE0Olx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XG5tbS9tZW1wb2xpY3kuYy0zMDE1LVx0XHRwb2xuaWQgPSB3ZWlnaHRlZF9pbnRlcmxlYXZlX25pZChwb2wsIGlseCk7XG4tLVxubW0vbWVtcG9saWN5LmM9MzQwMD1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBvbGljeV9tb2Rlc1tdID1cbi0tXG5tbS9tZW1wb2xpY3kuYy0zNDA1LVx0W01QT0xfSU5URVJMRUFWRV0gPSBcJiMzNDtpbnRlcmxlYXZlXCYjMzQ7LFxubW0vbWVtcG9saWN5LmM6MzQwNjpcdFtNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVdID0gXCYjMzQ7d2VpZ2h0ZWQgaW50ZXJsZWF2ZVwmIzM0Oyxcbm1tL21lbXBvbGljeS5jLTM0MDctXHRbTVBPTF9MT0NBTF0gICAgICA9IFwmIzM0O2xvY2FsXCYjMzQ7LFxuLS1cbm1tL21lbXBvbGljeS5jPTM0MjI9aW50IG1wb2xfcGFyc2Vfc3RyKGNoYXIgKnN0ciwgc3RydWN0IG1lbXBvbGljeSAqKm1wb2wpXG4tLVxubW0vbWVtcG9saWN5LmMtMzQ2NS1cdGNhc2UgTVBPTF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmM6MzQ2NjpcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmMtMzQ2Ny1cdFx0Lypcbi0tXG5tbS9tZW1wb2xpY3kuYz0zNTU4PXZvaWQgbXBvbF90b19zdHIoY2hhciAqYnVmZmVyLCBpbnQgbWF4bGVuLCBzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXG4tLVxubW0vbWVtcG9saWN5LmMtMzU4MC1cdGNhc2UgTVBPTF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmM6MzU4MTpcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmMtMzU4Mi1cdFx0bm9kZXMgPSBwb2wtXHUwMDNlbm9kZXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjE5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIE5VTUEgQ29uZmlndXJhdGlvbiBhbmQgQnVsayBBbGxvY2F0aW9uIEJlaGF2aW9yKioKCkFscmlnaHQsIHRoZSBjdXJyZW50IGNvbmZpZyBpcyBmbGFnZ2luZyBgQ09ORklHX05VTUFgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSB0aGF0IGhhcyBOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzLiBTbywgTlVNQSBpbXBsaWNhdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGNlbnRyYWwgdG8gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQuIE5vdywgd2l0aCBOVU1BIGVuYWJsZWQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBidWxrIHBhZ2UgYWxsb2NhdGlvbiBpcyBiZWluZyBoYW5kbGVkIGFuZCBlc3BlY2lhbGx5LCB3aGV0aGVyIHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgZm9yIHVzZS4gTGV0IG1lIGNoZWNrIGlmIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIGV2ZW4gYXZhaWxhYmxlLiBJdHMgcHJlc2VuY2Ugb3IgYWJzZW5jZSB3aWxsIHN0cm9uZ2x5IGluZmx1ZW5jZSBteSBuZXh0IHN0ZXBzIGFuZCBob3cgSSBhcHByb2FjaCB0aGUgb3ZlcmFsbCBwcm9ibGVtLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgbWVtcG9saWN5LWF3YXJlIGJ1bGsgYWxsb2NhdGlvbiBmdW5jdGlvbiBpcyB2aXNpYmxlIGFuZCBhY2Nlc3NpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODgwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiwgYW5kIHRoZSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgaXQmIzM5O3MgKm5vdCogYW4gZXhwb3J0ZWQgc3ltYm9sLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSG93ZXZlciwgaXQmIzM5O3MgYWxzbyBub3Qgc3RhdGljLCB3aGljaCBtZWFucyBpdCBoYXMgc29tZSBsZXZlbCBvZiB2aXNpYmlsaXR5IHdpdGhpbiB0aGUga2VybmVsLCBhbGJlaXQgcG90ZW50aWFsbHkgbGltaXRlZC4gTGV0JiMzOTtzIGRlbHZlIGRlZXBlci4KCkkgcmVtZW1iZXIgc2VlaW5nIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGluIGBtbS9tZW1wb2xpY3kuY2AsIGFuZCBJIGFsc28gcmVjYWxsIHNlZWluZyBhIGRlY2xhcmF0aW9uIGZvciBpdCBpbiBgaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaGAuIFRoaXMgaXMgYSBjcnVjaWFsIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjb25maXJtIHRoZSBkZWNsYXJhdGlvbiBhbmQgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24mIzM5O3MgaW50ZW5kZWQgaW50ZXJmYWNlLiBUbyBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVmZXJlbmNlIHRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oYCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgaGVhZGVyIGZpbGUgdGVsbHMgbWUgYWJvdXQgaXRzIGFyZ3VtZW50cyBhbmQgdXNhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjI5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIExhYnlyaW50aCBvZiBEZWNsYXJhdGlvbnMqKgoKQWxyaWdodCwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZS9zcGVjaWZpY2F0aW9uL2RvY3VtZW50LCBhbmQgbXkgaW5pdGlhbCByZWFjdGlvbiBpcywgKndoZXJlKiBwcmVjaXNlbHkgaXMgdGhpcyB2YXJpYWJsZS9mdW5jdGlvbi9jbGFzcy9jb25zdGFudC93aGF0ZXZlciAqZGVjbGFyZWQqPyBJdCYjMzk7cyB0aGUgZmlyc3QgYW5kIG1vc3QgZnVuZGFtZW50YWwgcXVlc3Rpb24sIHJlYWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlLCBpdHMgdHlwZSwgYW55IGFzc29jaWF0ZWQgbWV0YWRhdGEg4oCTIGFsbCBvZiB0aGF0IGhpbmdlcyBvbiBmaW5kaW5nIGl0cyBvcmlnaW4gcG9pbnQuIElzIGl0IGluIHRoaXMgZmlsZT8gQW5vdGhlciBvbmU/IEEgaGVhZGVyPyBBIHByZWNvbXBpbGVkIGxpYnJhcnk/IElzIGl0IGEgZm9yd2FyZCBkZWNsYXJhdGlvbiwgbWVhbmluZyBJIG5lZWQgdG8gY2hhc2UgZG93biBpdHMgZGVmaW5pdGlvbiBsYXRlcj8gVGhlIGFic2VuY2Ugb2YgYSBjbGVhciBkZWNsYXJhdGlvbiBzY3JlYW1zIGZvciBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbi4gSSBjYW7igJl0IHByb2NlZWQgdW50aWwgSSYjMzk7dmUgZXN0YWJsaXNoZWQgdGhhdCBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZ2ZwLmg9MjM3PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTI0MS1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjQyOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQzLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTI0NS0jZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyNDY6XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9nZnAuaC0yNDctXG4tLVxubW0vbWVtcG9saWN5LmM9Mjc1MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzc2LSAqL1xubW0vbWVtcG9saWN5LmM6Mjc3Nzp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNzc4LVx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4tLVxubW0vdm1hbGxvYy5jPTM2NDE9dm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXG4tLVxubW0vdm1hbGxvYy5jLTM3MDUtXHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBuaWQgPT0gTlVNQV9OT19OT0RFKVxubW0vdm1hbGxvYy5jOjM3MDY6XHRcdFx0XHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnAsXG5tbS92bWFsbG9jLmMtMzcwNy1cdFx0XHRcdFx0XHRcdG5yX3BhZ2VzX3JlcXVlc3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODg2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHdoZXJlIHdlIGNhbiBleHBhbmQgb3VyIGZ1enppbmcgY292ZXJhZ2UuIFRoZSBzdGFydGluZyBwb2ludCBzZWVtcyB0byBiZSBgdm1fYXJlYV9hbGxvY19wYWdlc2AgaW4gYG1tL3ZtYWxsb2MuY2AuIFRoaXMgc3VnZ2VzdHMgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgd291bGQgYmUgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLgoKSG1tLCB0aGVuIHRoZXJlJiMzOTtzIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBkcml2ZXJzL2Jhc2Uvbm9kZS5jYC4gTm93LCBzaG91bGQgSSBjb25zaWRlciBgc3lzX21iaW5kYCBvciBgc3lzX3NldF9tZW1wb2xpY3lgIGFzIHRhcmdldHM/IE5vLCB0aG9zZSBzeXNjYWxscyBhcmUgYWxyZWFkeSB0aG9yb3VnaGx5IGZ1enplZCBieSBzeXprYWxsZXIsIHNvIHRoZXkmIzM5O3JlIHByb2JhYmx5IG5vdCB0aGUgaGlnaGVzdCBwcmlvcml0eS4KCkJ1dCwgSSB0aGluayBhZGRpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgYW5kIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAgdG8gYEZvY3VzU3ltYm9sc2AgaXMgZGVmaW5pdGVseSB3b3J0aCBpdC4KCk5vdywgaG9sZCBvbi4uLiBsZXQgbWUganVzdCBtYWtlIHN1cmUgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCBpcyBhY3R1YWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIG9yIGlmIGl0JiMzOTtzIHN0cmljdGx5IHRpZWQgdG8gQUNQSSBITUFUIHBhcnNpbmcuIEFoLCByaWdodCwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGRyaXZlcnMvYWNwaS9udW1hL2htYXQuY2AgdmlhIGBub2RlX3NldF9wZXJmX2F0dHJzYC4gT2ssIHRoYXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0aGUgbW9yZSBkaXJlY3QgcGF0aCwgc28gbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbm9kZV9zZXRfcGVyZl9hdHRyc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vZGVfc2V0X3BlcmZfYXR0cnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hY3BpL251bWEvaG1hdC5jPTg1Mz1zdGF0aWMgdm9pZCBobWF0X3JlZ2lzdGVyX3RhcmdldF9wZXJmKHN0cnVjdCBtZW1vcnlfdGFyZ2V0ICp0YXJnZXQsIGludCBhY2Nlc3MpXG4tLVxuZHJpdmVycy9hY3BpL251bWEvaG1hdC5jLTg1NS1cdHVuc2lnbmVkIG1lbV9uaWQgPSBweG1fdG9fbm9kZSh0YXJnZXQtXHUwMDNlbWVtb3J5X3B4bSk7XG5kcml2ZXJzL2FjcGkvbnVtYS9obWF0LmM6ODU2Olx0bm9kZV9zZXRfcGVyZl9hdHRycyhtZW1fbmlkLCBcdTAwMjZ0YXJnZXQtXHUwMDNlY29vcmRbYWNjZXNzXSwgYWNjZXNzKTtcbmRyaXZlcnMvYWNwaS9udW1hL2htYXQuYy04NTctfVxuLS1cbmRyaXZlcnMvYmFzZS9ub2RlLmM9MjAyPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphY2Nlc3NfYXR0cnNbXSA9IHtcbi0tXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTIxMC0vKipcbmRyaXZlcnMvYmFzZS9ub2RlLmM6MjExOiAqIG5vZGVfc2V0X3BlcmZfYXR0cnMgLSBTZXQgdGhlIHBlcmZvcm1hbmNlIHZhbHVlcyBmb3IgZ2l2ZW4gYWNjZXNzIGNsYXNzXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTIxMi0gKiBAbmlkOiBOb2RlIGlkZW50aWZpZXIgdG8gYmUgc2V0XG4tLVxuZHJpdmVycy9iYXNlL25vZGUuYy0yMTUtICovXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jOjIxNjp2b2lkIG5vZGVfc2V0X3BlcmZfYXR0cnModW5zaWduZWQgaW50IG5pZCwgc3RydWN0IGFjY2Vzc19jb29yZGluYXRlICpjb29yZCxcbmRyaXZlcnMvYmFzZS9ub2RlLmMtMjE3LVx0XHRcdCBlbnVtIGFjY2Vzc19jb29yZGluYXRlX2NsYXNzIGFjY2Vzcylcbi0tXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTI0OC19XG5kcml2ZXJzL2Jhc2Uvbm9kZS5jOjI0OTpFWFBPUlRfU1lNQk9MX0dQTChub2RlX3NldF9wZXJmX2F0dHJzKTtcbmRyaXZlcnMvYmFzZS9ub2RlLmMtMjUwLVxuLS1cbmluY2x1ZGUvbGludXgvbm9kZS5oPTg1PXZvaWQgbm9kZV9hZGRfY2FjaGUodW5zaWduZWQgaW50IG5pZCwgc3RydWN0IG5vZGVfY2FjaGVfYXR0cnMgKmNhY2hlX2F0dHJzKTtcbmluY2x1ZGUvbGludXgvbm9kZS5oOjg2OnZvaWQgbm9kZV9zZXRfcGVyZl9hdHRycyh1bnNpZ25lZCBpbnQgbmlkLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkLFxuaW5jbHVkZS9saW51eC9ub2RlLmgtODctXHRcdFx0IGVudW0gYWNjZXNzX2Nvb3JkaW5hdGVfY2xhc3MgYWNjZXNzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25vZGUuaD05MT1zdGF0aWMgaW5saW5lIHZvaWQgbm9kZV9hZGRfY2FjaGUodW5zaWduZWQgaW50IG5pZCxcbi0tXG5pbmNsdWRlL2xpbnV4L25vZGUuaC05NS1cbmluY2x1ZGUvbGludXgvbm9kZS5oOjk2OnN0YXRpYyBpbmxpbmUgdm9pZCBub2RlX3NldF9wZXJmX2F0dHJzKHVuc2lnbmVkIGludCBuaWQsXG5pbmNsdWRlL2xpbnV4L25vZGUuaC05Ny1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk4MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTlVNQSBNZW1vcnkgUG9saWN5IFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgcG9saWN5IHN0dWZmLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBOVU1BLiBJdCBzZWVtcyBsaWtlIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAgaXMgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQsIGJ1dCBpdCYjMzk7cyBwcm9iYWJseSBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSB0byB1bnByaXZpbGVnZWQgdXNlcnNwYWNlLCAqdW5sZXNzKiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBib290IG9yIGhvdHBsdWcgc2NlbmFyaW9zIHdoZXJlIEhNQVQgaXMgYWN0aXZlLiBIb3dldmVyLCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBsb29rcyBtb3JlIGNvbmNlcm5pbmcgYmVjYXVzZSBpdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCBgdm1hbGxvY2Agd2hlbiBgTlVNQV9OT19OT0RFYCBpcyBiZWluZyB1c2VkLCB3aGljaCBpcyBzdXJwcmlzaW5nbHkgY29tbW9uLiBBbmQgdGhlbiB0aGVyZSBhcmUgdGhvc2Ugc3lzZnMgZW50cmllcywgYG5vZGVfc3RvcmVgIGFuZCBgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlYCwgdGhhdCByb290IHVzZXJzIGNhbiBhYnNvbHV0ZWx5IGdldCB0aGVpciBoYW5kcyBvbi4KClRoZSBwcm9ibGVtIHdpdGggdGhlIHN5c2ZzIGZ1bmN0aW9ucyBpcyB0aGF0IHRoZXkmIzM5O3JlIHN0YXRpYywgc28gSSBjYW4mIzM5O3QgZGlyZWN0bHkgbGlzdCB0aGVtIGluIEZvY3VzU3ltYm9scywgb3IgYXQgbGVhc3QgaXQgd291bGQgYmUgYSBiaXQgY2x1bmt5LiBXYWl0LCBob2xkIG9uIOKAkyBgc3lzX21iaW5kYCBhbmQgYHN5c19zZXRfbWVtcG9saWN5YCBhcmUgc3lzdGVtIGNhbGxzLCBzbyB0aGF0JiMzOTtzIGEgZGlmZmVyZW50IHN0b3J5LiBUaGUgcGF0Y2ggaXMgbWVzc2luZyB3aXRoIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIHdoaWNoIGdldHMgY2FsbGVkIGJ5IGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLgoKTm93LCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgbW9kaWZpZWQgb3IgcmVsYXRlZCB0aGF0IGFyZW4mIzM5O3Qgc3RhdGljLiBPa2F5LCBgd2lfc3RhdGVfZ2V0YCBhbmQgYHdpX3N0YXRlX3B1dGAgYXJlIHN0YXRpYywgc28gdGhleSYjMzk7cmUgcHJvYmFibHkgbm90IHRoZSBpbW1lZGlhdGUgdGFyZ2V0LiBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgIGlzIG5vbi1zdGF0aWMsIHNhbWUgd2l0aCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYC4KCkkgYWxzbyBoYXZlIHRvIGNvbmZpcm0gdGhhdCBDT05GSUdfTlVNQSBpcyB0aGUgb25seSByZWxldmFudCBjb25maWcgaGVyZS4gU28sIHllcywgYENPTkZJR19OVU1BYCBpcyB0aGUgYmlnIG9uZS4gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGBtbS9LY29uZmlnYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHJlbGF0ZWQgY29uZmlncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5VTUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NDQxPWNvbmZpZyBBUkNIX0tFRVBfTUVNQkxPQ0tcbi0tXG5tbS9LY29uZmlnLTQ0NC0jIEtlZXAgYXJjaCBOVU1BIG1hcHBpbmcgaW5mcmFzdHJ1Y3R1cmUgcG9zdC1pbml0LlxubW0vS2NvbmZpZzo0NDU6Y29uZmlnIE5VTUFfS0VFUF9NRU1JTkZPXG5tbS9LY29uZmlnLTQ0Ni1cdGJvb2xcbi0tXG5tbS9LY29uZmlnPTE0MTk9Y29uZmlnIEVYRUNNRU1cbi0tXG5tbS9LY29uZmlnLTE0MjEtXG5tbS9LY29uZmlnOjE0MjI6Y29uZmlnIE5VTUFfTUVNQkxLU1xubW0vS2NvbmZpZy0xNDIzLVx0Ym9vbFxubW0vS2NvbmZpZy0xNDI0LVxubW0vS2NvbmZpZzoxNDI1OmNvbmZpZyBOVU1BX0VNVVxubW0vS2NvbmZpZy0xNDI2LVx0Ym9vbCBcJiMzNDtOVU1BIGVtdWxhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkzMQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqV2hlcmUgRGlkIFRoYXQgQ29uZmlndXJhdGlvbiBPcHRpb24gR28/KioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGBjb25maWcgTlVNQWAgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQgZ29lcyB0byB3aGVyZSB0aGVzZSB0aGluZ3MgKnVzdWFsbHkqIGxpdmUuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtIbW0sIE5VTUEuLi4gdGhhdCYjMzk7cyB0eXBpY2FsbHkgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHRoaW5nLCByaWdodD8mIzM0OyBTbywgbXkgZmlyc3QgbWVudGFsIGNoZWNrIGlzIGZvciBgYXJjaC94ODYvS2NvbmZpZ2Agb3Igc29tZXRoaW5nIHNpbWlsYXIgd2l0aGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZGlyZWN0b3JpZXMuIFRoYXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludC4gT3IsIGdpdmVuIGl0cyBhc3NvY2lhdGlvbiB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBpdCBjb3VsZCBiZSB0dWNrZWQgYXdheSBpbiBgbW0vS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIHNlY29uZCBwbGFjZSBJJiMzOTtkIGxvb2suIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgdGhpbmcgaXMgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVU1BJCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWc9MTUzNj1jb25maWcgSE9UUExVR19DUFVcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTU0My0jIENvbW1vbiBOVU1BIEZlYXR1cmVzXG5hcmNoL2FybTY0L0tjb25maWc6MTU0NDpjb25maWcgTlVNQVxuYXJjaC9hcm02NC9LY29uZmlnLTE1NDUtXHRib29sIFwmIzM0O05VTUEgTWVtb3J5IEFsbG9jYXRpb24gYW5kIFNjaGVkdWxlciBTdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz00OTI9Y29uZmlnIE5SX0NQVVNcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTUwMC1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6NTAxOmNvbmZpZyBOVU1BXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTUwMi1cdGJvb2wgXCYjMzQ7TlVNQSBTdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9taXBzL0tjb25maWc9MjYxMD1jb25maWcgQVJDSF9TUEFSU0VNRU1fRU5BQkxFXG4tLVxuYXJjaC9taXBzL0tjb25maWctMjYxMi1cbmFyY2gvbWlwcy9LY29uZmlnOjI2MTM6Y29uZmlnIE5VTUFcbmFyY2gvbWlwcy9LY29uZmlnLTI2MTQtXHRib29sIFwmIzM0O05VTUEgU3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnPTc1OD1jb25maWcgSVJRX0FMTF9DUFVTXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWctNzY2LVxuYXJjaC9wb3dlcnBjL0tjb25maWc6NzY3OmNvbmZpZyBOVU1BXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy03NjgtXHRib29sIFwmIzM0O05VTUEgTWVtb3J5IEFsbG9jYXRpb24gYW5kIFNjaGVkdWxlciBTdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTQ4MT1lbmRjaG9pY2Vcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctNDgzLSMgQ29tbW9uIE5VTUEgRmVhdHVyZXNcbmFyY2gvcmlzY3YvS2NvbmZpZzo0ODQ6Y29uZmlnIE5VTUFcbmFyY2gvcmlzY3YvS2NvbmZpZy00ODUtXHRib29sIFwmIzM0O05VTUEgTWVtb3J5IEFsbG9jYXRpb24gYW5kIFNjaGVkdWxlciBTdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NTQwPWNvbmZpZyBIT1RQTFVHX0NQVVxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTU0Mi1cbmFyY2gvczM5MC9LY29uZmlnOjU0Mzpjb25maWcgTlVNQVxuYXJjaC9zMzkwL0tjb25maWctNTQ0LVx0Ym9vbCBcJiMzNDtOVU1BIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWc9MTAyPWNvbmZpZyBWU1lTQ0FMTFxuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xMTQtXG5hcmNoL3NoL21tL0tjb25maWc6MTE1OmNvbmZpZyBOVU1BXG5hcmNoL3NoL21tL0tjb25maWctMTE2LVx0Ym9vbCBcJiMzNDtOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzIChOVU1BKSBTdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9zcGFyYy9LY29uZmlnPTI1ND1jb25maWcgR0VORVJJQ19MT0NLQlJFQUtcbi0tXG5hcmNoL3NwYXJjL0tjb25maWctMjU4LVxuYXJjaC9zcGFyYy9LY29uZmlnOjI1OTpjb25maWcgTlVNQVxuYXJjaC9zcGFyYy9LY29uZmlnLTI2MC1cdGJvb2wgXCYjMzQ7TlVNQSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZz0xNTA1PWNvbmZpZyBBTURfTUVNX0VOQ1JZUFRcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTE1MjEtIyBDb21tb24gTlVNQSBGZWF0dXJlc1xuYXJjaC94ODYvS2NvbmZpZzoxNTIyOmNvbmZpZyBOVU1BXG5hcmNoL3g4Ni9LY29uZmlnLTE1MjMtXHRib29sIFwmIzM0O05VTUEgTWVtb3J5IEFsbG9jYXRpb24gYW5kIFNjaGVkdWxlciBTdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODc2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTlVNQSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5pdGVseSBOVU1BLiBNeSBpbml0aWFsIGh1bmNoIHdhcyBjb3JyZWN0LiBOb3csIGxldCYjMzk7cyBzZWUgaWYgd2UgaGF2ZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGFuZ2luZyBhcm91bmQuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIG1vZGlmaWNhdGlvbnMgdG8gYG1tL21lbXBvbGljeS5jYC4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byBjb25maXJtIGlmIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIEFMV0FZUyBjb21waWxlZCB3aGVuIE5VTUEgaXMgZW5hYmxlZCwgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiB0aGF0IGl0IGlzLCBzbyBsZXQmIzM5O3MgY29uZmlybS4gWWVzLCBpdCBsb29rcyBsaWtlIGBtbS9tZW1wb2xpY3kub2AgZ2V0cyBjb21waWxlZCB3aGVuIGBDT05GSUdfTlVNQWAgaXMgZW5hYmxlZCwgd2hpY2ggc3VwcG9ydHMgdGhhdCBsaW5lIG9mIHRob3VnaHQuCgpSaWdodCwgYXJlIHRoZXJlIGFueSAqb3RoZXIqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIG9mIGludGVyZXN0PyBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCBhbmQsIG9mIGNvdXJzZSwgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuCgpJIHRoaW5rIGl04oCZcyB3b3J0aCBkb3VibGUtY2hlY2tpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgb25lIG1vcmUgdGltZSwganVzdCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9Mjc1MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzc2LSAqL1xubW0vbWVtcG9saWN5LmM6Mjc3Nzp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNzc4LVx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mzk4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIE5vbi1TdGF0aWMgTWVtb3J5IFBvbGljeSoqCgpSaWdodCwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBzaXR1YXRpb24uIEkgbmVlZCB0byBkaWcgaW50byB0aGUgbm9uLXN0YXRpYyBhc3BlY3RzIG9mIHRoaXMuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBiZWdpbiwgZ2l2ZW4gdGhhdCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggbWVtb3J5IHBvbGljeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBub24tc3RhdGljIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXBvbGljeV9zZXRfbm9kZV9wZXJmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9MjExPXN0YXRpYyB2b2lkIHJlZHVjZV9pbnRlcmxlYXZlX3dlaWdodHModW5zaWduZWQgaW50ICpidywgdTggKm5ld19pdylcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNDMtXG5tbS9tZW1wb2xpY3kuYzoyNDQ6aW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3Jkcylcbm1tL21lbXBvbGljeS5jLTI0NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjU5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uIGFuZCBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGlzIGlzIGFib3V0IGlkZW50aWZ5aW5nIGdvb2QgZnV6emluZyB0YXJnZXRzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gSSBjYW4gc2VlIHRoYXQgdGhlIGNvZGUgSSYjMzk7bSBsb29raW5nIGF0IGlzbiYjMzk7dCBzdGF0aWMsIHdoaWNoIGlzIHRoZSBmaXJzdCBnb29kIHNpZ24uIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyB0aHJvdWdoIHRoZSBmdW5jdGlvbnMsIGB3aV9zdGF0ZV9nZXRgLCBgd2lfc3RhdGVfcHV0YCwgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAsIGBub2RlX3N0b3JlYCwgYHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZWAsIGFuZCBgd2lfc3RhdGVfZnJlZWAgYXJlIGFsbCBzdGF0aWMuIFRoYXQgbmFycm93cyBpdCBkb3duLgoKVGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBhbmQgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYC4gUmlnaHQgYXdheSwgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgbG9va3MgcHJvbWlzaW5nIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbiB3aXRoIG1lbXBvbGljeSwgYW5kIGl0IHNlZW1zIHRvIGNhbGwgdGhlIG1vZGlmaWVkIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiBZZWFoLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBnb29kIHRhcmdldC4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgIGFzIGl0IG1vZGlmaWVzIHRoZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHN0YXRlLgoKTm93LCByZWFjaGFiaWxpdHkuIElzIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIHJlYWNoYWJsZSBmcm9tIHN5c2NhbGxzPyBZdXAsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCB3aGljaCB0aGVuIGdldHMgY2FsbGVkIGZyb20gc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMsIGV2ZW50dWFsbHkgYmVpbmcgY2FsbGVkIGJ5IGB2bWFsbG9jYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBwcmV0dHkgZXhwb3NlZC4KCldoYXQgYWJvdXQgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYD8gIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBub2RlX3NldF9wZXJmX2F0dHJzYCBhbmQgYG5vZGVfdXBkYXRlX3BlcmZfYXR0cnNgLiBUaGVzZSBhcmUgY2FsbGVkIGZyb20gYGhtYXRfcmVnaXN0ZXJfdGFyZ2V0X3BlcmZgIChBQ1BJIEhNQVQpIGFuZCBgY3hsX3JlZ2lvbl9wZXJmX2RhdGFfY2FsY3VsYXRlYCAoQ1hMKS4gU28gaXQmIzM5O3MgcmVhY2hhYmxlIGlmIEFDUEkgSE1BVCBvciBDWEwgaXMgcHJlc2VudCwgc28gbWF5YmUgbm90IGFsd2F5cyByZWFjaGFibGUgYnV0IHBvdGVudGlhbGx5IHdvcnRoIGZ1enppbmcuCgpIYW5nIG9uLi4uIFRoaXMgcGF0Y2ggZml4ZXMgYSBidWcgd2l0aCBgc3luY2hyb25pemVfcmN1KClgLiBUaGUgY29tbWl0IG1lc3NhZ2Ugc2F5cyAmIzM0O3N5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldywmIzM0OyB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhlIHBhdGNoIGlzIHVzaW5nIGByZWZjb3VudF90YCBhbmQgYGtmcmVlX3JjdWAgaW5zdGVhZCBvZiBgc3luY2hyb25pemVfcmN1YCBhbmQgYGtmcmVlYC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UsIHJlcGxhY2luZyBjYWxscyB0byBgc3luY2hyb25pemVfcmN1YCB3aXRoIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uLgoKQWxyaWdodCwgSSYjMzk7bSBzZXR0aW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIE15IGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgYW5kIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAuIEFuZCBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSB0aGUgYE5VTUFgIGNvbmZpZy4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIHRoZSBjb3JyZWN0IG5hbWUuIFllcCwgaXQgaXMuCgpBbmQgaXQgbG9va3MgbGlrZSB0aGUgYE5VTUFgIGNvbmZpZyB3aWxsIGNvdmVyIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAuIFNvIHRoYXQgbG9va3MgZ29vZCEgSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciBjb25maWcgbmVjZXNzYXJ5IGZvciBgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFYCwgaXQgaXMganVzdCBhbiBlbnVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oPTE5PWVudW0ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaC0yNS1cdE1QT0xfUFJFRkVSUkVEX01BTlksXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5Lmg6MjY6XHRNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUsXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmgtMjctXHRNUE9MX01BWCxcdC8qIGFsd2F5cyBsYXN0IG1lbWJlciBvZiBlbnVtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTM0CgkJCQkJCQlvdXRwdXQ6IDEyMwoJCQkJCQkJdGhvdWdodHM6IDIzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIGFyZSB2aWFibGUgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgc3BlY2lmaWNhbGx5IHRob3NlIHJlbGF0ZWQgdG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBhcmVhLiBGaXJzdCwgbGV0JiMzOTtzIHNlZSBpZiBgbm9kZV9zdG9yZWAgYW5kIGB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmVgIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMuIEFoLCB5ZXMsIHRoZXkgYXJlIGluZGVlZCBzeXNmcyBzdG9yZSBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRoZXkmIzM5O3JlIGRlY2xhcmVkIHN0YXRpYywgc28gSSBjYW4mIzM5O3QgaW5jbHVkZSB0aGVtIGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBCdXQgdGhlIGdvb2QgbmV3cyBpcyB0aGF0IHN5emthbGxlciAqY2FuKiBmdXp6IHN5c2ZzLCB3aGljaCBvcGVucyB1cCBzb21lIHBvc3NpYmlsaXRpZXMgdGhlcmUuCgpHaXZlbiB0aGF0IHJlc3RyaWN0aW9uLCBteSBmb2N1cyBzaGlmdHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgYW5kIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRob3NlIHNwZWxsaW5ncy4uLiBZdXAsIGNvbmZpcm1lZDogYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXMgY29ycmVjdCBhbmQgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCBpcyBhbHNvIGNvcnJlY3QuCgpOb3csIGxldCBtZSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBlbHNlLiBMZXQmIzM5O3Mgc2VlLi4uIGB3aV9zdGF0ZV9mcmVlYCBpcyBzdGF0aWMuIGB3aV9zdGF0ZV9nZXRgIGlzIGFsc28gc3RhdGljLiBBbmQgc28gaXMgYHdpX3N0YXRlX3B1dGAuIE9oLCBhbmQgYGdldF9pbF93ZWlnaHRgIGFzIHdlbGwuIFRoYXQgbG9va3MgbGlrZSBhIGNvbXBsZXRlIGxpc3QgZm9yIHRoaXMgYXJlYSwgbWVhbmluZyBJIGhhdmUgYSBnb29kIGJhc2UgdG8gc3RhcnQgZnJvbS4gU28sIEkgdGhpbmsgSSYjMzk7bSBnb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZiYjMzQ7LAogICAgJiMzNDttZW1wb2xpY3lfc2V0X25vZGVfcGVyZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBtZW1vcnkgcG9saWN5IGxvZ2ljIGluIG1tL21lbXBvbGljeS5jIGJ5IGludHJvZHVjaW5nIGEgcmVmY291bnQgYW5kIHJlcGxhY2luZyBzeW5jaHJvbml6ZV9yY3UoKSAmIzQzOyBrZnJlZSgpIHdpdGgga2ZyZWVfcmN1KCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIGFuZCBzeXNmcyBub2RlIHBlcmZvcm1hbmNlIHVwZGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YmIzM0OywKICAgICYjMzQ7bWVtcG9saWN5X3NldF9ub2RlX3BlcmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdlaWdodGVkIGludGVybGVhdmUgbWVtb3J5IHBvbGljeSBsb2dpYyBpbiBtbS9tZW1wb2xpY3kuYyBieSBpbnRyb2R1Y2luZyBhIHJlZmNvdW50IGFuZCByZXBsYWNpbmcgc3luY2hyb25pemVfcmN1KCkgJiM0Mzsga2ZyZWUoKSB3aXRoIGtmcmVlX3JjdSgpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBidWxrIHBhZ2UgYWxsb2NhdGlvbiBhbmQgc3lzZnMgbm9kZSBwZXJmb3JtYW5jZSB1cGRhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgYnkgcmVwbGFjaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCAoYHJlZmNvdW50X3RgKSBhbmQgYGtmcmVlX3JjdSgpYC4gSXQgYWxzbyBvcHRpbWl6ZXMgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpYCBieSBwaW5uaW5nIHRoZSBzdGF0ZSB3aXRoIGB3aV9zdGF0ZV9nZXQoKWAgaW5zdGVhZCBvZiBjcmVhdGluZyBhIGxvY2FsIGNvcHkgb2YgdGhlIHdlaWdodHMgYXJyYXkuIEFsbCBhbGxvY2F0aW9ucyBvZiBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIHVzZSBga3phbGxvY19mbGV4KClgLCB3aGljaCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0cnVjdHVyZSBhbmQgaXRzIGZsZXhpYmxlIGFycmF5IG1lbWJlciBgaXdfdGFibGVgLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjczMjg5N2Q3MTFjOGFkZjA2ODQ2MDc3ZjQ1ZDUwMzc4M2Y0NDY5MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDAzOjI1OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCAwZTUxNzVmMWM3NjdkLi40YTM3MjJjNjNiMzFiIDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuYwpAQCAtMTEyLDYgJiM0MzsxMTIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3ByaW50ay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xlYWZvcHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9nY2QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVmY291bnQuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS90bGJmbHVzaC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS90bGIuaCZndDsKQEAgLTE1Niw3ICYjNDM7MTU3LDkgQEAgc3RhdGljIGNvbnN0IGludCB3ZWlnaHRpbmVzcyA9IDMyOwogICovCiBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSB7CiAJYm9vbCBtb2RlX2F1dG87Ci0JdTggaXdfdGFibGVbXTsKJiM0MzsJcmVmY291bnRfdCByZWZjbnQ7CiYjNDM7CXN0cnVjdCByY3VfaGVhZCByY3U7CiYjNDM7CXU4IGl3X3RhYmxlW10gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIH07CiBzdGF0aWMgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgX19yY3UgKndpX3N0YXRlOwogc3RhdGljIHVuc2lnbmVkIGludCAqbm9kZV9id190YWJsZTsKQEAgLTE2Nyw2ICYjNDM7MTcwLDI3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgKm5vZGVfYndfdGFibGU7CiAgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgod2lfc3RhdGVfbG9jayk7CiAKJiM0MzsvKiBBbGxvdyBzbGVlcGluZyByZWFkZXJzIHRvIHBpbiB0aGUgc3RhdGUgdG8gYXZvaWQgdGFraW5nIGNvcGllcyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqd2lfc3RhdGVfZ2V0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqc3RhdGU7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJd2hpbGUgKChzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSkpKSB7CiYjNDM7CQlpZiAocmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7c3RhdGUtJmd0O3JlZmNudCkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiBzdGF0ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd2lfc3RhdGVfcHV0KHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CWlmIChzdGF0ZSAmYW1wOyZhbXA7IHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3N0YXRlLSZndDtyZWZjbnQpKQomIzQzOwkJa2ZyZWVfcmN1KHN0YXRlLCByY3UpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB1OCBnZXRfaWxfd2VpZ2h0KGludCBub2RlKQogewogCXN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTsKQEAgLTIzNSw2ICYjNDM7MjU5LDcgQEAgaW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkcykKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW5ld193aV9zdGF0ZS0mZ3Q7bW9kZV9hdXRvID0gdHJ1ZTsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7bmV3X3dpX3N0YXRlLSZndDtyZWZjbnQsIDEpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBucl9ub2RlX2lkczsgaSYjNDM7JiM0MzspCiAJCW5ld193aV9zdGF0ZS0mZ3Q7aXdfdGFibGVbaV0gPSAxOwogCkBAIC0yNjUsMTAgJiM0MzsyOTAsNyBAQCBpbnQgbWVtcG9saWN5X3NldF9ub2RlX3BlcmYodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKQogCXJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgbmV3X3dpX3N0YXRlKTsKIAogCW11dGV4X3VubG9jaygmYW1wO3dpX3N0YXRlX2xvY2spOwotCWlmIChvbGRfd2lfc3RhdGUpIHsKLQkJc3luY2hyb25pemVfcmN1KCk7Ci0JCWtmcmVlKG9sZF93aV9zdGF0ZSk7Ci0JfQomIzQzOwl3aV9zdGF0ZV9wdXQob2xkX3dpX3N0YXRlKTsKIG91dDoKIAlrZnJlZShvbGRfYncpOwogCXJldHVybiAwOwpAQCAtMjYzMiw3ICYjNDM7MjY1NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsCiAJdW5zaWduZWQgbG9uZyBucl9hbGxvY2F0ZWQgPSAwOwogCXVuc2lnbmVkIGxvbmcgcm91bmRzOwogCXVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlcywgZGVsdGE7Ci0JdTggKndlaWdodHMsIHdlaWdodDsKJiM0MzsJdTggKnRhYmxlLCB3ZWlnaHQ7CiAJdW5zaWduZWQgaW50IHdlaWdodF90b3RhbCA9IDA7CiAJdW5zaWduZWQgbG9uZyByZW1fcGFnZXMgPSBucl9wYWdlczsKIAlub2RlbWFza190IG5vZGVzOwpAQCAtMjY3NiwyNSAmIzQzOzI2OTgsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCwKIAltZS0mZ3Q7aWxfd2VpZ2h0ID0gMDsKIAlwcmV2X25vZGUgPSBub2RlOwogCi0JLyogY3JlYXRlIGEgbG9jYWwgY29weSBvZiBub2RlIHdlaWdodHMgdG8gb3BlcmF0ZSBvbiBvdXRzaWRlIHJjdSAqLwotCXdlaWdodHMgPSBremFsbG9jKG5yX25vZGVfaWRzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdlaWdodHMpCi0JCXJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0Jc3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpOwotCWlmIChzdGF0ZSkgewotCQltZW1jcHkod2VpZ2h0cywgc3RhdGUtJmd0O2l3X3RhYmxlLCBucl9ub2RlX2lkcyAqIHNpemVvZih1OCkpOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQl9IGVsc2UgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IG5yX25vZGVfaWRzOyBpJiM0MzsmIzQzOykKLQkJCXdlaWdodHNbaV0gPSAxOwotCX0KJiM0MzsJc3RhdGUgPSB3aV9zdGF0ZV9nZXQoKTsKJiM0MzsJdGFibGUgPSBzdGF0ZSA/IHN0YXRlLSZndDtpd190YWJsZSA6IE5VTEw7CiAKIAkvKiBjYWxjdWxhdGUgdG90YWwsIGRldGVjdCBzeXN0ZW0gZGVmYXVsdCB1c2FnZSAqLwogCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBub2RlcykKLQkJd2VpZ2h0X3RvdGFsICYjNDM7PSB3ZWlnaHRzW25vZGVdOwomIzQzOwkJd2VpZ2h0X3RvdGFsICYjNDM7PSB0YWJsZSA/IHRhYmxlW25vZGVdIDogMTsKIAogCS8qCiAJICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuCkBAIC0yNzA2LDEwICYjNDM7MjcxNSwxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLAogCXJvdW5kcyA9IHJlbV9wYWdlcyAvIHdlaWdodF90b3RhbDsKIAlkZWx0YSA9IHJlbV9wYWdlcyAlIHdlaWdodF90b3RhbDsKIAlyZXN1bWVfbm9kZSA9IG5leHRfbm9kZV9pbihwcmV2X25vZGUsIG5vZGVzKTsKLQlyZXN1bWVfd2VpZ2h0ID0gd2VpZ2h0c1tyZXN1bWVfbm9kZV07CiYjNDM7CXJlc3VtZV93ZWlnaHQgPSB0YWJsZSA/IHRhYmxlW3Jlc3VtZV9ub2RlXSA6IDE7CiAJZm9yIChpID0gMDsgaSAmbHQ7IG5ub2RlczsgaSYjNDM7JiM0MzspIHsKIAkJbm9kZSA9IG5leHRfbm9kZV9pbihwcmV2X25vZGUsIG5vZGVzKTsKLQkJd2VpZ2h0ID0gd2VpZ2h0c1tub2RlXTsKJiM0MzsJCXdlaWdodCA9IHRhYmxlID8gdGFibGVbbm9kZV0gOiAxOwogCQlub2RlX3BhZ2VzID0gd2VpZ2h0ICogcm91bmRzOwogCQkvKiBJZiBhIGRlbHRhIGV4aXN0cywgYWRkIHRoaXMgbm9kZSYjMzk7cyBwb3J0aW9uIG9mIHRoZSBkZWx0YSAqLwogCQlpZiAoZGVsdGEgJmd0OyB3ZWlnaHQpIHsKQEAgLTI3MzUsNyAmIzQzOzI3NDQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLAogCX0KIAltZS0mZ3Q7aWxfcHJldiA9IHJlc3VtZV9ub2RlOwogCW1lLSZndDtpbF93ZWlnaHQgPSByZXN1bWVfd2VpZ2h0OwotCWtmcmVlKHdlaWdodHMpOwomIzQzOwl3aV9zdGF0ZV9wdXQoc3RhdGUpOwogCXJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7CiB9CiAKQEAgLTM2NDQsNiAmIzQzOzM2NTMsNyBAQCBzdGF0aWMgc3NpemVfdCBub2RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCiAJbmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7CiAJaWYgKCFuZXdfd2lfc3RhdGUpCiAJCXJldHVybiAtRU5PTUVNOwomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDtuZXdfd2lfc3RhdGUtJmd0O3JlZmNudCwgMSk7CiAKIAltdXRleF9sb2NrKCZhbXA7d2lfc3RhdGVfbG9jayk7CiAJb2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSwKQEAgLTM2NjAsMTAgJiM0MzszNjcwLDcgQEAgc3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAogCiAJcmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpOwogCW11dGV4X3VubG9jaygmYW1wO3dpX3N0YXRlX2xvY2spOwotCWlmIChvbGRfd2lfc3RhdGUpIHsKLQkJc3luY2hyb25pemVfcmN1KCk7Ci0JCWtmcmVlKG9sZF93aV9zdGF0ZSk7Ci0JfQomIzQzOwl3aV9zdGF0ZV9wdXQob2xkX3dpX3N0YXRlKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTM2OTYsNiAmIzQzOzM3MDMsNyBAQCBzdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCiAJbmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7CiAJaWYgKCFuZXdfd2lfc3RhdGUpCiAJCXJldHVybiAtRU5PTUVNOwomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDtuZXdfd2lfc3RhdGUtJmd0O3JlZmNudCwgMSk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yX25vZGVfaWRzOyBpJiM0MzsmIzQzOykKIAkJbmV3X3dpX3N0YXRlLSZndDtpd190YWJsZVtpXSA9IDE7CiAKQEAgLTM3MjgsMTAgJiM0MzszNzM2LDcgQEAgc3RhdGljIHNzaXplX3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogdXBkYXRlX3dpX3N0YXRlOgogCXJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgbmV3X3dpX3N0YXRlKTsKIAltdXRleF91bmxvY2soJmFtcDt3aV9zdGF0ZV9sb2NrKTsKLQlpZiAob2xkX3dpX3N0YXRlKSB7Ci0JCXN5bmNocm9uaXplX3JjdSgpOwotCQlrZnJlZShvbGRfd2lfc3RhdGUpOwotCX0KJiM0MzsJd2lfc3RhdGVfcHV0KG9sZF93aV9zdGF0ZSk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0zNzc1LDEwICYjNDM7Mzc4MCw3IEBAIHN0YXRpYyB2b2lkIHdpX3N0YXRlX2ZyZWUodm9pZCkKIAlyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIE5VTEwpOwogCW11dGV4X3VubG9jaygmYW1wO3dpX3N0YXRlX2xvY2spOwogCi0JaWYgKG9sZF93aV9zdGF0ZSkgewotCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQkJa2ZyZWUob2xkX3dpX3N0YXRlKTsKLQl9CiYjNDM7CXdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpOwogfQogCiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHdpX2F1dG9fYXR0ciA9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDc1CgkJCQkJCQlvdXRwdXQ6IDIxNAoJCQkJCQkJdGhvdWdodHM6IDcxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlZmNvdW50LUJhc2VkIGB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGZvciBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIGluIGBtbS9tZW1wb2xpY3kuY2AuIE15IGluaXRpYWwgY29uY2VybiwgYXMgYWx3YXlzIHdoZW4gdG91Y2hpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIGV4aXN0aW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgYW5kIGBrZnJlZSgpYCBwYXR0ZXJuIHdpdGggYSByZWZjb3VudCAoYHJlZmNvdW50X3RgKSBhbmQgYGtmcmVlX3JjdSgpYCwgcGx1cyB0aGUgaW50cm9kdWN0aW9uIG9mIGB3aV9zdGF0ZV9nZXQoKWAgYW5kIGB3aV9zdGF0ZV9wdXQoKWAuIEl0IGFsc28gZWxpbWluYXRlcyB0aGUgbG9jYWwgYHdlaWdodHNgIGNvcHkgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpYCwgb3B0aW5nIHRvIHBpbiB0aGUgYHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIGRpcmVjdGx5LiBTbWFydCwgdGhhdCBzaG91bGQgYmUgYSBwZXJmb3JtYW5jZSB3aW4uCgpUaGUgb2xkIGNvZGUgdXNlZCB0byBga3phbGxvYygpYCB0aGUgYHdlaWdodHNgIGFycmF5LiBOb3csIGl0JiMzOTtzIHVzaW5nIHRoZSBgaXdfdGFibGVgIGRpcmVjdGx5IGZyb20gdGhlIGB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCB3aGljaCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19mbGV4KClgLiBBaGEhIFRoYXQmIzM5O3MgdGhlIGtleS4gU2luY2UgYGt6YWxsb2NfZmxleCgpYCBpcyB1c2VkIGluIGV2ZXJ5IGFsbG9jYXRpb24gcGF0aCAoYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCwgYG5vZGVfc3RvcmVgLCBhbmQgYHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZWApLCB0aGlzIGVuc3VyZXMgdGhlIGBpd190YWJsZWAgaXMgemVyby1pbml0aWFsaXplZC4gSSB3ZW50IHRocm91Z2ggdGhlIGNvZGUgdG8gY29uZmlybSB0aGUgYGt6YWxsb2NfZmxleGAgY2FsbHMuCgpUaGVyZWZvcmUsIHRoZSBgd2VpZ2h0c2AgYXJyYXksIHdoaWNoIGlzIG5vdyB0aGUgYGl3X3RhYmxlYCwgd2lsbCAqYWx3YXlzKiBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGlzIHNob3VsZCBlbGltaW5hdGUgdGhlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgZHVlIHRvIHRoaXMgY2hhbmdlLiBUaGUgcGF0Y2ggaXMgYWJvdXQgbGlmZXRpbWUgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3k7IG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEFueSBidWdzIGludHJvZHVjZWQgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzLiBLQVNBTiBzaG91bGQgYmUgd2VsbC1lcXVpcHBlZCB0byBjYXRjaCB0aG9zZS4gU28gbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJdCYjMzk7cyBhbiBSQ1UtdG8tcmVmY291bnQgY29udmVyc2lvbi4KCkluIHN1bW1hcnksIHRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgdGhlIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgYnkgcmVwbGFjaW5nIFJDVSB3aXRoIGEgcmVmY291bnQgYW5kIGBrZnJlZV9yY3UoKWAuIEl0IGFsc28gb3B0aW1pemVzIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKWAgYnkgZGlyZWN0bHkgcGlubmluZyB0aGUgYHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBsb2NhbCBjb3B5IG9mIHRoZSB3ZWlnaHRzIGFycmF5LiBBbGwgYWxsb2NhdGlvbnMgb2YgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCB1c2UgYGt6YWxsb2NfZmxleCgpYCwgZ3VhcmFudGVlaW5nIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0cnVjdHVyZSBpbmNsdWRpbmcgaXRzIGBpd190YWJsZWAuIEFueSBwb3RlbnRpYWwgYnVncyBhcmUgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcyB3aGljaCBzaG91bGQgYmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCBieSByZXBsYWNpbmcgYHN5bmNocm9uaXplX3JjdSgpYCB3aXRoIGEgcmVmZXJlbmNlIGNvdW50IChgcmVmY291bnRfdGApIGFuZCBga2ZyZWVfcmN1KClgLiBJdCBhbHNvIG9wdGltaXplcyBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKClgIGJ5IHBpbm5pbmcgdGhlIHN0YXRlIHdpdGggYHdpX3N0YXRlX2dldCgpYCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbG9jYWwgY29weSBvZiB0aGUgd2VpZ2h0cyBhcnJheS4gQWxsIGFsbG9jYXRpb25zIG9mIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgdXNlIGBremFsbG9jX2ZsZXgoKWAsIHdoaWNoIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgc3RydWN0dXJlIGFuZCBpdHMgZmxleGlibGUgYXJyYXkgbWVtYmVyIGBpd190YWJsZWAuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCBieSByZXBsYWNpbmcgYHN5bmNocm9uaXplX3JjdSgpYCB3aXRoIGEgcmVmZXJlbmNlIGNvdW50IChgcmVmY291bnRfdGApIGFuZCBga2ZyZWVfcmN1KClgLiBJdCBhbHNvIG9wdGltaXplcyBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKClgIGJ5IHBpbm5pbmcgdGhlIHN0YXRlIHdpdGggYHdpX3N0YXRlX2dldCgpYCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbG9jYWwgY29weSBvZiB0aGUgd2VpZ2h0cyBhcnJheS4gQWxsIGFsbG9jYXRpb25zIG9mIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgdXNlIGBremFsbG9jX2ZsZXgoKWAsIHdoaWNoIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgc3RydWN0dXJlIGFuZCBpdHMgZmxleGlibGUgYXJyYXkgbWVtYmVyIGBpd190YWJsZWAuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTowNi4yNTcyNzQwODZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg1NDc3NTQ0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiLFxuICAgIFwibWVtcG9saWN5X3NldF9ub2RlX3BlcmZcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgYnkgcmVwbGFjaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCAoYHJlZmNvdW50X3RgKSBhbmQgYGtmcmVlX3JjdSgpYC4gSXQgYWxzbyBvcHRpbWl6ZXMgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpYCBieSBwaW5uaW5nIHRoZSBzdGF0ZSB3aXRoIGB3aV9zdGF0ZV9nZXQoKWAgaW5zdGVhZCBvZiBjcmVhdGluZyBhIGxvY2FsIGNvcHkgb2YgdGhlIHdlaWdodHMgYXJyYXkuIEFsbCBhbGxvY2F0aW9ucyBvZiBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIHVzZSBga3phbGxvY19mbGV4KClgLCB3aGljaCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0cnVjdHVyZSBhbmQgaXRzIGZsZXhpYmxlIGFycmF5IG1lbWJlciBgaXdfdGFibGVgLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBtZW1vcnkgcG9saWN5IGxvZ2ljIGluIG1tL21lbXBvbGljeS5jIGJ5IGludHJvZHVjaW5nIGEgcmVmY291bnQgYW5kIHJlcGxhY2luZyBzeW5jaHJvbml6ZV9yY3UoKSArIGtmcmVlKCkgd2l0aCBrZnJlZV9yY3UoKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgYnVsayBwYWdlIGFsbG9jYXRpb24gYW5kIHN5c2ZzIG5vZGUgcGVyZm9ybWFuY2UgdXBkYXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6MDYuMjU3MjgyNzY2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTI4NDc2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNzMyODk3ZDcxMWM4YWRmMDY4NDYwNzdmNDVkNTAzNzgzZjQ0NjkxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDI0IDAzOjI1OjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcXG5pbmRleCAwZTUxNzVmMWM3NjdkLi40YTM3MjJjNjNiMzFiIDEwMDY0NFxcbi0tLSBhL21tL21lbXBvbGljeS5jXFxuKysrIGIvbW0vbWVtcG9saWN5LmNcXG5AQCAtMTEyLDYgKzExMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmludGsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xlYWZvcHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2djZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVmY291bnQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdGxiZmx1c2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS90bGIuaFxcdTAwM2VcXG5AQCAtMTU2LDcgKzE1Nyw5IEBAIHN0YXRpYyBjb25zdCBpbnQgd2VpZ2h0aW5lc3MgPSAzMjtcXG4gICovXFxuIHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIHtcXG4gXFx0Ym9vbCBtb2RlX2F1dG87XFxuLVxcdHU4IGl3X3RhYmxlW107XFxuK1xcdHJlZmNvdW50X3QgcmVmY250O1xcbitcXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xcbitcXHR1OCBpd190YWJsZVtdIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuIH07XFxuIHN0YXRpYyBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSBfX3JjdSAqd2lfc3RhdGU7XFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgKm5vZGVfYndfdGFibGU7XFxuQEAgLTE2Nyw2ICsxNzAsMjcgQEAgc3RhdGljIHVuc2lnbmVkIGludCAqbm9kZV9id190YWJsZTtcXG4gICovXFxuIHN0YXRpYyBERUZJTkVfTVVURVgod2lfc3RhdGVfbG9jayk7XFxuIFxcbisvKiBBbGxvdyBzbGVlcGluZyByZWFkZXJzIHRvIHBpbiB0aGUgc3RhdGUgdG8gYXZvaWQgdGFraW5nIGNvcGllcyAqL1xcbitzdGF0aWMgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKndpX3N0YXRlX2dldCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0d2hpbGUgKChzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSkpKSB7XFxuK1xcdFxcdGlmIChyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnN0YXRlLVxcdTAwM2VyZWZjbnQpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBzdGF0ZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd2lfc3RhdGVfcHV0KHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRpZiAoc3RhdGUgXFx1MDAyNlxcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZzdGF0ZS1cXHUwMDNlcmVmY250KSlcXG4rXFx0XFx0a2ZyZWVfcmN1KHN0YXRlLCByY3UpO1xcbit9XFxuK1xcbiBzdGF0aWMgdTggZ2V0X2lsX3dlaWdodChpbnQgbm9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqc3RhdGU7XFxuQEAgLTIzNSw2ICsyNTksNyBAQCBpbnQgbWVtcG9saWN5X3NldF9ub2RlX3BlcmYodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXHRuZXdfd2lfc3RhdGUtXFx1MDAzZW1vZGVfYXV0byA9IHRydWU7XFxuK1xcdHJlZmNvdW50X3NldChcXHUwMDI2bmV3X3dpX3N0YXRlLVxcdTAwM2VyZWZjbnQsIDEpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfbm9kZV9pZHM7IGkrKylcXG4gXFx0XFx0bmV3X3dpX3N0YXRlLVxcdTAwM2Vpd190YWJsZVtpXSA9IDE7XFxuIFxcbkBAIC0yNjUsMTAgKzI5MCw3IEBAIGludCBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZih1bnNpZ25lZCBpbnQgbm9kZSwgc3RydWN0IGFjY2Vzc19jb29yZGluYXRlICpjb29yZHMpXFxuIFxcdHJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgbmV3X3dpX3N0YXRlKTtcXG4gXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2d2lfc3RhdGVfbG9jayk7XFxuLVxcdGlmIChvbGRfd2lfc3RhdGUpIHtcXG4tXFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuLVxcdFxcdGtmcmVlKG9sZF93aV9zdGF0ZSk7XFxuLVxcdH1cXG4rXFx0d2lfc3RhdGVfcHV0KG9sZF93aV9zdGF0ZSk7XFxuIG91dDpcXG4gXFx0a2ZyZWUob2xkX2J3KTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTI2MzIsNyArMjY1NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfYWxsb2NhdGVkID0gMDtcXG4gXFx0dW5zaWduZWQgbG9uZyByb3VuZHM7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlcywgZGVsdGE7XFxuLVxcdHU4ICp3ZWlnaHRzLCB3ZWlnaHQ7XFxuK1xcdHU4ICp0YWJsZSwgd2VpZ2h0O1xcbiBcXHR1bnNpZ25lZCBpbnQgd2VpZ2h0X3RvdGFsID0gMDtcXG4gXFx0dW5zaWduZWQgbG9uZyByZW1fcGFnZXMgPSBucl9wYWdlcztcXG4gXFx0bm9kZW1hc2tfdCBub2RlcztcXG5AQCAtMjY3NiwyNSArMjY5OCwxMiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbiBcXHRtZS1cXHUwMDNlaWxfd2VpZ2h0ID0gMDtcXG4gXFx0cHJldl9ub2RlID0gbm9kZTtcXG4gXFxuLVxcdC8qIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzIHRvIG9wZXJhdGUgb24gb3V0c2lkZSByY3UgKi9cXG4tXFx0d2VpZ2h0cyA9IGt6YWxsb2MobnJfbm9kZV9pZHMsIEdGUF9LRVJORUwpO1xcbi1cXHRpZiAoIXdlaWdodHMpXFxuLVxcdFxcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XFxuLVxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdHN0YXRlID0gcmN1X2RlcmVmZXJlbmNlKHdpX3N0YXRlKTtcXG4tXFx0aWYgKHN0YXRlKSB7XFxuLVxcdFxcdG1lbWNweSh3ZWlnaHRzLCBzdGF0ZS1cXHUwMDNlaXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XFxuLVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXFxuLVxcdFxcdFxcdHdlaWdodHNbaV0gPSAxO1xcbi1cXHR9XFxuK1xcdHN0YXRlID0gd2lfc3RhdGVfZ2V0KCk7XFxuK1xcdHRhYmxlID0gc3RhdGUgPyBzdGF0ZS1cXHUwMDNlaXdfdGFibGUgOiBOVUxMO1xcbiBcXG4gXFx0LyogY2FsY3VsYXRlIHRvdGFsLCBkZXRlY3Qgc3lzdGVtIGRlZmF1bHQgdXNhZ2UgKi9cXG4gXFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG5vZGVzKVxcbi1cXHRcXHR3ZWlnaHRfdG90YWwgKz0gd2VpZ2h0c1tub2RlXTtcXG4rXFx0XFx0d2VpZ2h0X3RvdGFsICs9IHRhYmxlID8gdGFibGVbbm9kZV0gOiAxO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXFxuQEAgLTI3MDYsMTAgKzI3MTUsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG4gXFx0cm91bmRzID0gcmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsO1xcbiBcXHRkZWx0YSA9IHJlbV9wYWdlcyAlIHdlaWdodF90b3RhbDtcXG4gXFx0cmVzdW1lX25vZGUgPSBuZXh0X25vZGVfaW4ocHJldl9ub2RlLCBub2Rlcyk7XFxuLVxcdHJlc3VtZV93ZWlnaHQgPSB3ZWlnaHRzW3Jlc3VtZV9ub2RlXTtcXG4rXFx0cmVzdW1lX3dlaWdodCA9IHRhYmxlID8gdGFibGVbcmVzdW1lX25vZGVdIDogMTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5ub2RlczsgaSsrKSB7XFxuIFxcdFxcdG5vZGUgPSBuZXh0X25vZGVfaW4ocHJldl9ub2RlLCBub2Rlcyk7XFxuLVxcdFxcdHdlaWdodCA9IHdlaWdodHNbbm9kZV07XFxuK1xcdFxcdHdlaWdodCA9IHRhYmxlID8gdGFibGVbbm9kZV0gOiAxO1xcbiBcXHRcXHRub2RlX3BhZ2VzID0gd2VpZ2h0ICogcm91bmRzO1xcbiBcXHRcXHQvKiBJZiBhIGRlbHRhIGV4aXN0cywgYWRkIHRoaXMgbm9kZSdzIHBvcnRpb24gb2YgdGhlIGRlbHRhICovXFxuIFxcdFxcdGlmIChkZWx0YSBcXHUwMDNlIHdlaWdodCkge1xcbkBAIC0yNzM1LDcgKzI3NDQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbiBcXHR9XFxuIFxcdG1lLVxcdTAwM2VpbF9wcmV2ID0gcmVzdW1lX25vZGU7XFxuIFxcdG1lLVxcdTAwM2VpbF93ZWlnaHQgPSByZXN1bWVfd2VpZ2h0O1xcbi1cXHRrZnJlZSh3ZWlnaHRzKTtcXG4rXFx0d2lfc3RhdGVfcHV0KHN0YXRlKTtcXG4gXFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcXG4gfVxcbiBcXG5AQCAtMzY0NCw2ICszNjUzLDcgQEAgc3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbiBcXHRuZXdfd2lfc3RhdGUgPSBremFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTtcXG4gXFx0aWYgKCFuZXdfd2lfc3RhdGUpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRyZWZjb3VudF9zZXQoXFx1MDAyNm5ld193aV9zdGF0ZS1cXHUwMDNlcmVmY250LCAxKTtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbiBcXHRvbGRfd2lfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHdpX3N0YXRlLFxcbkBAIC0zNjYwLDEwICszNjcwLDcgQEAgc3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbiBcXG4gXFx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbi1cXHRpZiAob2xkX3dpX3N0YXRlKSB7XFxuLVxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbi1cXHRcXHRrZnJlZShvbGRfd2lfc3RhdGUpO1xcbi1cXHR9XFxuK1xcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xcbiBcXHRyZXR1cm4gY291bnQ7XFxuIH1cXG4gXFxuQEAgLTM2OTYsNiArMzcwMyw3IEBAIHN0YXRpYyBzc2l6ZV90IHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gXFx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XFxuIFxcdGlmICghbmV3X3dpX3N0YXRlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZuZXdfd2lfc3RhdGUtXFx1MDAzZXJlZmNudCwgMSk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ub2RlX2lkczsgaSsrKVxcbiBcXHRcXHRuZXdfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlW2ldID0gMTtcXG4gXFxuQEAgLTM3MjgsMTAgKzM3MzYsNyBAQCBzdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuIHVwZGF0ZV93aV9zdGF0ZTpcXG4gXFx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbi1cXHRpZiAob2xkX3dpX3N0YXRlKSB7XFxuLVxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbi1cXHRcXHRrZnJlZShvbGRfd2lfc3RhdGUpO1xcbi1cXHR9XFxuK1xcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xcbiBcXHRyZXR1cm4gY291bnQ7XFxuIH1cXG4gXFxuQEAgLTM3NzUsMTAgKzM3ODAsNyBAQCBzdGF0aWMgdm9pZCB3aV9zdGF0ZV9mcmVlKHZvaWQpXFxuIFxcdHJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgTlVMTCk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2d2lfc3RhdGVfbG9jayk7XFxuIFxcbi1cXHRpZiAob2xkX3dpX3N0YXRlKSB7XFxuLVxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbi1cXHRcXHRrZnJlZShvbGRfd2lfc3RhdGUpO1xcbi1cXHR9XFxuK1xcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHdpX2F1dG9fYXR0ciA9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI1OjA2LjgxMTA5NTMzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk3NTQ0Mzk3MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZcIixcbiAgICBcIm1lbXBvbGljeV9zZXRfbm9kZV9wZXJmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdlaWdodGVkIGludGVybGVhdmUgbWVtb3J5IHBvbGljeSBsb2dpYyBpbiBtbS9tZW1wb2xpY3kuYyBieSBpbnRyb2R1Y2luZyBhIHJlZmNvdW50IGFuZCByZXBsYWNpbmcgc3luY2hyb25pemVfcmN1KCkgKyBrZnJlZSgpIHdpdGgga2ZyZWVfcmN1KCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIGFuZCBzeXNmcyBub2RlIHBlcmZvcm1hbmNlIHVwZGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3MzI4OTdkNzExYzhhZGYwNjg0NjA3N2Y0NWQ1MDM3ODNmNDQ2OTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAwMzoyNTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcbmluZGV4IDBlNTE3NWYxYzc2N2QuLjRhMzcyMmM2M2IzMWIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xuKysrIGIvbW0vbWVtcG9saWN5LmNcbkBAIC0xMTIsNiArMTEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xlYWZvcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2djZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGJmbHVzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYi5oXHUwMDNlXG5AQCAtMTU2LDcgKzE1Nyw5IEBAIHN0YXRpYyBjb25zdCBpbnQgd2VpZ2h0aW5lc3MgPSAzMjtcbiAgKi9cbiBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSB7XG4gXHRib29sIG1vZGVfYXV0bztcbi1cdHU4IGl3X3RhYmxlW107XG4rXHRyZWZjb3VudF90IHJlZmNudDtcbitcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4rXHR1OCBpd190YWJsZVtdIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gfTtcbiBzdGF0aWMgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgX19yY3UgKndpX3N0YXRlO1xuIHN0YXRpYyB1bnNpZ25lZCBpbnQgKm5vZGVfYndfdGFibGU7XG5AQCAtMTY3LDYgKzE3MCwyNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50ICpub2RlX2J3X3RhYmxlO1xuICAqL1xuIHN0YXRpYyBERUZJTkVfTVVURVgod2lfc3RhdGVfbG9jayk7XG4gXG4rLyogQWxsb3cgc2xlZXBpbmcgcmVhZGVycyB0byBwaW4gdGhlIHN0YXRlIHRvIGF2b2lkIHRha2luZyBjb3BpZXMgKi9cbitzdGF0aWMgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKndpX3N0YXRlX2dldCh2b2lkKVxuK3tcbitcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHdoaWxlICgoc3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpKSkge1xuK1x0XHRpZiAocmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnN0YXRlLVx1MDAzZXJlZmNudCkpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJldHVybiBzdGF0ZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgd2lfc3RhdGVfcHV0KHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRpZiAoc3RhdGUgXHUwMDI2XHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZzdGF0ZS1cdTAwM2VyZWZjbnQpKVxuK1x0XHRrZnJlZV9yY3Uoc3RhdGUsIHJjdSk7XG4rfVxuK1xuIHN0YXRpYyB1OCBnZXRfaWxfd2VpZ2h0KGludCBub2RlKVxuIHtcbiBcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcbkBAIC0yMzUsNiArMjU5LDcgQEAgaW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXHRuZXdfd2lfc3RhdGUtXHUwMDNlbW9kZV9hdXRvID0gdHJ1ZTtcbitcdHJlZmNvdW50X3NldChcdTAwMjZuZXdfd2lfc3RhdGUtXHUwMDNlcmVmY250LCAxKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXG4gXHRcdG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZVtpXSA9IDE7XG4gXG5AQCAtMjY1LDEwICsyOTAsNyBAQCBpbnQgbWVtcG9saWN5X3NldF9ub2RlX3BlcmYodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKVxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpO1xuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuLVx0aWYgKG9sZF93aV9zdGF0ZSkge1xuLVx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbi1cdFx0a2ZyZWUob2xkX3dpX3N0YXRlKTtcbi1cdH1cbitcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xuIG91dDpcbiBcdGtmcmVlKG9sZF9idyk7XG4gXHRyZXR1cm4gMDtcbkBAIC0yNjMyLDcgKzI2NTQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0dW5zaWduZWQgbG9uZyBucl9hbGxvY2F0ZWQgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyByb3VuZHM7XG4gXHR1bnNpZ25lZCBsb25nIG5vZGVfcGFnZXMsIGRlbHRhO1xuLVx0dTggKndlaWdodHMsIHdlaWdodDtcbitcdHU4ICp0YWJsZSwgd2VpZ2h0O1xuIFx0dW5zaWduZWQgaW50IHdlaWdodF90b3RhbCA9IDA7XG4gXHR1bnNpZ25lZCBsb25nIHJlbV9wYWdlcyA9IG5yX3BhZ2VzO1xuIFx0bm9kZW1hc2tfdCBub2RlcztcbkBAIC0yNjc2LDI1ICsyNjk4LDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG4gXHRtZS1cdTAwM2VpbF93ZWlnaHQgPSAwO1xuIFx0cHJldl9ub2RlID0gbm9kZTtcbiBcbi1cdC8qIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzIHRvIG9wZXJhdGUgb24gb3V0c2lkZSByY3UgKi9cbi1cdHdlaWdodHMgPSBremFsbG9jKG5yX25vZGVfaWRzLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghd2VpZ2h0cylcbi1cdFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcbi1cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdHN0YXRlID0gcmN1X2RlcmVmZXJlbmNlKHdpX3N0YXRlKTtcbi1cdGlmIChzdGF0ZSkge1xuLVx0XHRtZW1jcHkod2VpZ2h0cywgc3RhdGUtXHUwMDNlaXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0fSBlbHNlIHtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXG4tXHRcdFx0d2VpZ2h0c1tpXSA9IDE7XG4tXHR9XG4rXHRzdGF0ZSA9IHdpX3N0YXRlX2dldCgpO1xuK1x0dGFibGUgPSBzdGF0ZSA/IHN0YXRlLVx1MDAzZWl3X3RhYmxlIDogTlVMTDtcbiBcbiBcdC8qIGNhbGN1bGF0ZSB0b3RhbCwgZGV0ZWN0IHN5c3RlbSBkZWZhdWx0IHVzYWdlICovXG4gXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXG4tXHRcdHdlaWdodF90b3RhbCArPSB3ZWlnaHRzW25vZGVdO1xuK1x0XHR3ZWlnaHRfdG90YWwgKz0gdGFibGUgPyB0YWJsZVtub2RlXSA6IDE7XG4gXG4gXHQvKlxuIFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXG5AQCAtMjcwNiwxMCArMjcxNSwxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0cm91bmRzID0gcmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsO1xuIFx0ZGVsdGEgPSByZW1fcGFnZXMgJSB3ZWlnaHRfdG90YWw7XG4gXHRyZXN1bWVfbm9kZSA9IG5leHRfbm9kZV9pbihwcmV2X25vZGUsIG5vZGVzKTtcbi1cdHJlc3VtZV93ZWlnaHQgPSB3ZWlnaHRzW3Jlc3VtZV9ub2RlXTtcbitcdHJlc3VtZV93ZWlnaHQgPSB0YWJsZSA/IHRhYmxlW3Jlc3VtZV9ub2RlXSA6IDE7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBubm9kZXM7IGkrKykge1xuIFx0XHRub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xuLVx0XHR3ZWlnaHQgPSB3ZWlnaHRzW25vZGVdO1xuK1x0XHR3ZWlnaHQgPSB0YWJsZSA/IHRhYmxlW25vZGVdIDogMTtcbiBcdFx0bm9kZV9wYWdlcyA9IHdlaWdodCAqIHJvdW5kcztcbiBcdFx0LyogSWYgYSBkZWx0YSBleGlzdHMsIGFkZCB0aGlzIG5vZGUncyBwb3J0aW9uIG9mIHRoZSBkZWx0YSAqL1xuIFx0XHRpZiAoZGVsdGEgXHUwMDNlIHdlaWdodCkge1xuQEAgLTI3MzUsNyArMjc0NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG4gXHR9XG4gXHRtZS1cdTAwM2VpbF9wcmV2ID0gcmVzdW1lX25vZGU7XG4gXHRtZS1cdTAwM2VpbF93ZWlnaHQgPSByZXN1bWVfd2VpZ2h0O1xuLVx0a2ZyZWUod2VpZ2h0cyk7XG4rXHR3aV9zdGF0ZV9wdXQoc3RhdGUpO1xuIFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcbiB9XG4gXG5AQCAtMzY0NCw2ICszNjUzLDcgQEAgc3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuIFx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XG4gXHRpZiAoIW5ld193aV9zdGF0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2bmV3X3dpX3N0YXRlLVx1MDAzZXJlZmNudCwgMSk7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuIFx0b2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSxcbkBAIC0zNjYwLDEwICszNjcwLDcgQEAgc3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuIFxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuLVx0aWYgKG9sZF93aV9zdGF0ZSkge1xuLVx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbi1cdFx0a2ZyZWUob2xkX3dpX3N0YXRlKTtcbi1cdH1cbitcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xuIFx0cmV0dXJuIGNvdW50O1xuIH1cbiBcbkBAIC0zNjk2LDYgKzM3MDMsNyBAQCBzdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRuZXdfd2lfc3RhdGUgPSBremFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTtcbiBcdGlmICghbmV3X3dpX3N0YXRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdHJlZmNvdW50X3NldChcdTAwMjZuZXdfd2lfc3RhdGUtXHUwMDNlcmVmY250LCAxKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXG4gXHRcdG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZVtpXSA9IDE7XG4gXG5AQCAtMzcyOCwxMCArMzczNiw3IEBAIHN0YXRpYyBzc2l6ZV90IHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiB1cGRhdGVfd2lfc3RhdGU6XG4gXHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIG5ld193aV9zdGF0ZSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG4tXHRpZiAob2xkX3dpX3N0YXRlKSB7XG4tXHRcdHN5bmNocm9uaXplX3JjdSgpO1xuLVx0XHRrZnJlZShvbGRfd2lfc3RhdGUpO1xuLVx0fVxuK1x0d2lfc3RhdGVfcHV0KG9sZF93aV9zdGF0ZSk7XG4gXHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuQEAgLTM3NzUsMTAgKzM3ODAsNyBAQCBzdGF0aWMgdm9pZCB3aV9zdGF0ZV9mcmVlKHZvaWQpXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIE5VTEwpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuIFxuLVx0aWYgKG9sZF93aV9zdGF0ZSkge1xuLVx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbi1cdFx0a2ZyZWUob2xkX3dpX3N0YXRlKTtcbi1cdH1cbitcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHdpX2F1dG9fYXR0ciA9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTowNi44MTEwOTc5NTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTI1ODY3NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBBIE1lbW9yeSBQb2xpY3kgUGVyc3BlY3RpdmUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoLCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgXCJEb2VzIHRoaXMgYWN0dWFsbHkgY2hhbmdlIHNvbWV0aGluZyBpbXBvcnRhbnQgZW5vdWdoIHRvIHdhcnJhbnQgZnV6emluZz9cIiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCdzIG1vZGlmeWluZyBgbW0vbWVtcG9saWN5LmNgLCB3aGljaCBpcyBhbHdheXMgYSBwbGFjZSB0byBwYXkgYXR0ZW50aW9uIHRvLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhcm91bmQgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYC4gSSBzZWUgYSByZWZjb3VudCBoYXMgYmVlbiBhZGRlZCwgYW5kIHRoZSBzdGFuZGFyZCBgc3luY2hyb25pemVfcmN1KClgIGFuZCBga2ZyZWUoKWAgZGFuY2UgaGFzIGJlZW4gc3dhcHBlZCBmb3IgYGtmcmVlX3JjdSgpYCB1c2luZyB0aGlzIG5ldyBgd2lfc3RhdGVfcHV0KClgIGZ1bmN0aW9uLiBUaGVyZSdzIGFsc28gYSBjb3JyZXNwb25kaW5nIGB3aV9zdGF0ZV9nZXQoKWAgdXNpbmcgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByZWZjb3VudF9pbmNfbm90X3plcm8oKWAuIFJpZ2h0IGF3YXksIHRoaXMgc2NyZWFtcyAqZnVuY3Rpb25hbCBjaGFuZ2UqIGluIHRoZSBtZW1vcnkgcG9saWN5IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGZvciB3ZWlnaHRlZCBpbnRlcmxlYXZlLiBTbywgeWVzLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBwdXJwb3Nlcy5cblxuTXkgbmV4dCBtb3ZlIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGlzIGNvZGUuIENhbiB3ZSBhY3R1YWxseSAqdHJpZ2dlciogdGhlc2UgY2hhbmdlcz8gSSBuZWVkIHRvIGNoZWNrIGlmIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGlzIHJlYWNoYWJsZSwgYW5kIGlmIGl0J3MgZGVwZW5kZW50IG9uIGFueSBzcGVjaWZpYyBjb25maWdzIHRoYXQgbWlnaHQgYWZmZWN0IGZ1enphYmlsaXR5LiBDb25zaWRlcmluZyB0aGUgZmlsZSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBzdGFuZGFyZCBOVU1BIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnQgZm9yIG1lbXBvbGljeS4gU28sIEkgbmVlZCB0byBjb25maXJtIGBDT05GSUdfTlVNQWAgZGVwZW5kZW5jeSwgYW5kIEknbGwganVtcCBpbnRvIGBtbS9NYWtlZmlsZWAgdG8gdmVyaWZ5IGFueSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29tZSBpbnRvIHBsYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNToxMS45MzY5Njk3MjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUzNzg4NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtcG9saWN5Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9ODU9b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVxcdCs9IGh1Z2V0bGJfdm1lbW1hcC5vXFxubW0vTWFrZWZpbGU6ODY6b2JqLSQoQ09ORklHX05VTUEpIFxcdCs9IG1lbXBvbGljeS5vXFxubW0vTWFrZWZpbGUtODctb2JqLSQoQ09ORklHX1NQQVJTRU1FTSlcXHQrPSBzcGFyc2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNToxMS45OTIzNTI5OTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjAxMTQ5MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTlVNQSBNZW1vcnkgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIHRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX05VTUFgIGlzIGNvbmZpcm1lZCwgc28gTlVNQSBpcyBkZWZpbml0ZWx5IGluIHBsYXkuIE5vdywgbXkgZm9jdXMgaXMgaW1tZWRpYXRlbHkgc2hpZnRpbmcgdG8gbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCBmdW5jdGlvbiB3aXRoaW4gYG1tL21lbXBvbGljeS5jYC4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucywgZXNwZWNpYWxseSB3aGVuIHdlaWdodGVkIGludGVybGVhdmluZyBwb2xpY2llcyBhcmUgYXBwbGllZCBpbiBhIE5VTUEgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGltcGxlbWVudGVkLCBpdHMgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yay4gVGhpcyBpcyBhIGtleSBmdW5jdGlvbiB0byBkaWcgaW50byB3aGVuIG9wdGltaXppbmcgb3IgZGVidWdnaW5nIE5VTUEtYXdhcmUgYXBwbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzE2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6MTUuNTkzNTA0MzYyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwOTk3OTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1wb2xpY3kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0yNjExPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjQ1LVxcbm1tL21lbXBvbGljeS5jOjI2NDY6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjQ3LVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI3Nzc9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc5MS1cXHRpZiAocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcXG5tbS9tZW1wb2xpY3kuYzoyNzkyOlxcdFxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoXFxubW0vbWVtcG9saWN5LmMtMjc5My1cXHRcXHRcXHRcXHQgIGdmcCwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI1OjE1LjY3NDUwODU5NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTU0NjkwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXZWlnaHRlZCBJbnRlcmxlYXZlIE1lbW9yeSBQb2xpY3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYC4gSXQncyBwcmV0dHkgY2xlYXIgZnJvbSB0aGUgY29kZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIHNwZWNpZmljYWxseSB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFYCB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuIFRoaXMgbWFrZXMgc2Vuc2U7IHRoYXQncyB0aGUgcG9pbnQgb2YgdGhlIHdob2xlIHRoaW5nLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgaG93IGRvZXMgdGhpcyB3ZWlnaHRlZCBpbnRlcmxlYXZlIHBvbGljeSAqZ2V0KiB0cmlnZ2VyZWQgaW4gdGhlIGZpcnN0IHBsYWNlPyBJIG5lZWQgdG8gbWFwIHRoZSBwYXRoIHRvIHVzZXJzcGFjZS4gIEVzc2VudGlhbGx5LCB3aGF0IHN5c2NhbGxzIGNhbiBhIHVzZXIgYWN0dWFsbHkgdXNlIHRvIHNldCB0aGlzIHBvbGljeT8gIFdlJ3JlIHRhbGtpbmcgYG1iaW5kYCBvciBgc2V0X21lbXBvbGljeWAgY2FsbHMsIHJpZ2h0PyAgVGhhdCdzIHdoZXJlIHRoaXMgd2hvbGUgaW50ZXJsZWF2ZS93ZWlnaHQgbWVjaGFuaXNtIGdldHMgc2V0IHVwIGFuZCBwdXQgaW50byBlZmZlY3QuIEdvdHRhIGRvdWJsZS1jaGVjayB0aG9zZSBzeXNjYWxsIGltcGxlbWVudGF0aW9ucyB0byBlbnN1cmUgZXZlcnl0aGluZydzIGhvb2tlZCB1cCBjb3JyZWN0bHkgYW5kIHRoYXQgdGhlIHBvbGljeSBiZWhhdmlvciBtYXRjaGVzIGV4cGVjdGF0aW9ucyB3aGVuIHNldCBmcm9tIGEgdXNlciBhcHBsaWNhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHBhdGggaXMgc2VjdXJlIGFuZCB0aGF0IHRoZSB3ZWlnaHRzIGFyZSByZXNwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxOTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNToxOS42ODk5Nzk4NzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ3NTc3NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXBvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTU5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG1lbXBvbGljeV9vcGVyYXRpb25zIG1wb2xfb3BzW01QT0xfTUFYXSA9IHtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTYxNS1cXHR9LFxcbm1tL21lbXBvbGljeS5jOjYxNjpcXHRbTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFXSA9IHtcXG5tbS9tZW1wb2xpY3kuYy02MTctXFx0XFx0LmNyZWF0ZSA9IG1wb2xfbmV3X25vZGVtYXNrLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTA4Mz1zdGF0aWMgbG9uZyBkb19zZXRfbWVtcG9saWN5KHVuc2lnbmVkIHNob3J0IG1vZGUsIHVuc2lnbmVkIHNob3J0IGZsYWdzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTEwOS1cXHRpZiAobmV3IFxcdTAwMjZcXHUwMDI2IChuZXctXFx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFIHx8XFxubW0vbWVtcG9saWN5LmM6MTExMDpcXHRcXHQgICAgbmV3LVxcdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkpIHtcXG5tbS9tZW1wb2xpY3kuYy0xMTExLVxcdFxcdGN1cnJlbnQtXFx1MDAzZWlsX3ByZXYgPSBNQVhfTlVNTk9ERVMtMTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTExMjc9c3RhdGljIHZvaWQgZ2V0X3BvbGljeV9ub2RlbWFzayhzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIG5vZGVtYXNrX3QgKm5vZGVzKVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTEzNy1cXHRjYXNlIE1QT0xfUFJFRkVSUkVEX01BTlk6XFxubW0vbWVtcG9saWN5LmM6MTEzODpcXHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcXG5tbS9tZW1wb2xpY3kuYy0xMTM5LVxcdFxcdCpub2RlcyA9IHBvbC1cXHUwMDNlbm9kZXM7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xMTYzPXN0YXRpYyBsb25nIGRvX2dldF9tZW1wb2xpY3koaW50ICpwb2xpY3ksIG5vZGVtYXNrX3QgKm5tYXNrLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTIyMy1cXHRcXHR9IGVsc2UgaWYgKHBvbCA9PSBjdXJyZW50LVxcdTAwM2VtZW1wb2xpY3kgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1wb2xpY3kuYzoxMjI0OlxcdFxcdFxcdFxcdHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpIHtcXG5tbS9tZW1wb2xpY3kuYy0xMjI1LVxcdFxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2VpbF93ZWlnaHQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xNTAyPXN0YXRpYyBsb25nIGRvX21iaW5kKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTU5Ny1cXHRcXHRpZiAobmV3LVxcdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSB8fFxcbm1tL21lbXBvbGljeS5jOjE1OTg6XFx0XFx0ICAgIG5ldy1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpIHtcXG5tbS9tZW1wb2xpY3kuYy0xNTk5LVxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDM0PXN0cnVjdCBtZW1wb2xpY3kgKl9fZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMDQ3LSAqIEBpbHg6IGludGVybGVhdmUgaW5kZXggKG91dHB1dCksIGZvciB1c2Ugb25seSB3aGVuIE1QT0xfSU5URVJMRUFWRSBvclxcbm1tL21lbXBvbGljeS5jOjIwNDg6ICogICAgICAgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFXFxubW0vbWVtcG9saWN5LmMtMjA0OS0gKlxcbi0tXFxubW0vbWVtcG9saWN5LmM9MjA1Nz1zdHJ1Y3QgbWVtcG9saWN5ICpnZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIwNjUtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUgfHxcXG5tbS9tZW1wb2xpY3kuYzoyMDY2OlxcdCAgICBwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKSB7XFxubW0vbWVtcG9saWN5LmMtMjA2Ny1cXHRcXHQqaWx4ICs9IHZtYS1cXHUwMDNldm1fcGdvZmYgXFx1MDAzZVxcdTAwM2Ugb3JkZXI7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMTU5PXVuc2lnbmVkIGludCBtZW1wb2xpY3lfc2xhYl9ub2RlKHZvaWQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMTc3LVxcbm1tL21lbXBvbGljeS5jOjIxNzg6XFx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XFxubW0vbWVtcG9saWN5LmMtMjE3OS1cXHRcXHRyZXR1cm4gd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9ub2Rlcyhwb2xpY3kpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjI4NT1zdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X25vZGVtYXNrKGdmcF90IGdmcCwgc3RydWN0IG1lbXBvbGljeSAqcG9sLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjMxOC1cXHRcXHRicmVhaztcXG5tbS9tZW1wb2xpY3kuYzoyMzE5OlxcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jLTIzMjAtXFx0XFx0Km5pZCA9IChpbHggPT0gTk9fSU5URVJMRUFWRV9JTkRFWCkgP1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjM3MT1ib29sIGluaXRfbm9kZW1hc2tfb2ZfbWVtcG9saWN5KG5vZGVtYXNrX3QgKm1hc2spXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMzg0LVxcdGNhc2UgTVBPTF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jOjIzODU6XFx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XFxubW0vbWVtcG9saWN5LmMtMjM4Ni1cXHRcXHQqbWFzayA9IG1lbXBvbGljeS1cXHUwMDNlbm9kZXM7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNDYxPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbXBvbChnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI0ODUtXFx0XFx0aWYgKHBvbC1cXHUwMDNlbW9kZSAhPSBNUE9MX0lOVEVSTEVBVkUgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1wb2xpY3kuYzoyNDg2OlxcdFxcdCAgICBwb2wtXFx1MDAzZW1vZGUgIT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFIFxcdTAwMjZcXHUwMDI2XFxubW0vbWVtcG9saWN5LmMtMjQ4Ny1cXHRcXHQgICAgKCFub2RlbWFzayB8fCBub2RlX2lzc2V0KG5pZCwgKm5vZGVtYXNrKSkpIHtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI1MDgtXFx0aWYgKHVubGlrZWx5KHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUgfHxcXG5tbS9tZW1wb2xpY3kuYzoyNTA5OlxcdFxcdCAgICAgcG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkgXFx1MDAyNlxcdTAwMjYgcGFnZSkge1xcbm1tL21lbXBvbGljeS5jLTI1MTAtXFx0XFx0Lyogc2tpcCBOVU1BX0lOVEVSTEVBVkVfSElUIHVwZGF0ZSBpZiBudW1hIHN0YXRzIGlzIGRpc2FibGVkICovXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNzc3PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3OTAtXFxubW0vbWVtcG9saWN5LmM6Mjc5MTpcXHRpZiAocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcXG5tbS9tZW1wb2xpY3kuYy0yNzkyLVxcdFxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yODUxPWJvb2wgX19tcG9sX2VxdWFsKHN0cnVjdCBtZW1wb2xpY3kgKmEsIHN0cnVjdCBtZW1wb2xpY3kgKmIpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yODY5LVxcdGNhc2UgTVBPTF9QUkVGRVJSRURfTUFOWTpcXG5tbS9tZW1wb2xpY3kuYzoyODcwOlxcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jLTI4NzEtXFx0XFx0cmV0dXJuICEhbm9kZXNfZXF1YWwoYS1cXHUwMDNlbm9kZXMsIGItXFx1MDAzZW5vZGVzKTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI5ODc9aW50IG1wb2xfbWlzcGxhY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzAxMy1cXG5tbS9tZW1wb2xpY3kuYzozMDE0OlxcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jLTMwMTUtXFx0XFx0cG9sbmlkID0gd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9uaWQocG9sLCBpbHgpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MzQwMD1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBvbGljeV9tb2Rlc1tdID1cXG4tLVxcbm1tL21lbXBvbGljeS5jLTM0MDUtXFx0W01QT0xfSU5URVJMRUFWRV0gPSBcXFwiaW50ZXJsZWF2ZVxcXCIsXFxubW0vbWVtcG9saWN5LmM6MzQwNjpcXHRbTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFXSA9IFxcXCJ3ZWlnaHRlZCBpbnRlcmxlYXZlXFxcIixcXG5tbS9tZW1wb2xpY3kuYy0zNDA3LVxcdFtNUE9MX0xPQ0FMXSAgICAgID0gXFxcImxvY2FsXFxcIixcXG4tLVxcbm1tL21lbXBvbGljeS5jPTM0MjI9aW50IG1wb2xfcGFyc2Vfc3RyKGNoYXIgKnN0ciwgc3RydWN0IG1lbXBvbGljeSAqKm1wb2wpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zNDY1LVxcdGNhc2UgTVBPTF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jOjM0NjY6XFx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XFxubW0vbWVtcG9saWN5LmMtMzQ2Ny1cXHRcXHQvKlxcbi0tXFxubW0vbWVtcG9saWN5LmM9MzU1OD12b2lkIG1wb2xfdG9fc3RyKGNoYXIgKmJ1ZmZlciwgaW50IG1heGxlbiwgc3RydWN0IG1lbXBvbGljeSAqcG9sKVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzU4MC1cXHRjYXNlIE1QT0xfSU5URVJMRUFWRTpcXG5tbS9tZW1wb2xpY3kuYzozNTgxOlxcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jLTM1ODItXFx0XFx0bm9kZXMgPSBwb2wtXFx1MDAzZW5vZGVzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNToxOS43NzQ3NDE5MDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMwMjc0NzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgTWVtb3J5IFBvbGljeSBDaGFuZ2VzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIGtleSBhcmVhcywgc3BlY2lmaWNhbGx5IGFyb3VuZCB3ZWlnaHRlZCBpbnRlcmxlYXZlIGFuZCBidWxrIHBhZ2UgYWxsb2NhdGlvbi4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgLCBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCwgYW5kIGEgZmV3IHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYG5vZGVfc3RvcmVgLCBgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlYCwgYW5kIGB3aV9zdGF0ZV9mcmVlYC4gIEdpdmVuIG15IGtub3dsZWRnZSBvZiB0aGUga2VybmVsLCBJIGtub3cgdGhvc2Ugc3lzZnMgZW50cmllcyBmb3Igd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBhcmUgZGVmaW5lZCB3aXRoaW4gYG1tL21lbXBvbGljeS5jYC4gIEkgbmVlZCB0byBjaGVjayBob3cgYG5vZGVfc3RvcmVgIGlzIGJlaW5nIHVzZWQuIExldCdzIHNlZSBpZiB0aGlzIGBub2RlX3N0b3JlYCBpcyByZWFjaGFibGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IHBvbGljeSBpbmZyYXN0cnVjdHVyZS4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZG9lcyB0byBwYWdlIGFsbG9jYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUxMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNToyMy40MDUwMTk5NDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNTAxMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vZGVfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9MzYyOT1zdGF0aWMgc3NpemVfdCBub2RlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM2MzktXFxubW0vbWVtcG9saWN5LmM6MzY0MDpzdGF0aWMgc3NpemVfdCBub2RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxubW0vbWVtcG9saWN5LmMtMzY0MS1cXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MzgwNj1zdGF0aWMgaW50IHN5c2ZzX3dpX25vZGVfYWRkKGludCBuaWQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zODMwLVxcdG5ld19hdHRyLVxcdTAwM2Vrb2JqX2F0dHIuc2hvdyA9IG5vZGVfc2hvdztcXG5tbS9tZW1wb2xpY3kuYzozODMxOlxcdG5ld19hdHRyLVxcdTAwM2Vrb2JqX2F0dHIuc3RvcmUgPSBub2RlX3N0b3JlO1xcbm1tL21lbXBvbGljeS5jLTM4MzItXFx0bmV3X2F0dHItXFx1MDAzZW5pZCA9IG5pZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6MjMuNDg3NTI5MzgyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MTAyODYzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFdlaWdodGVkIEludGVybGVhdmUgTWVtb3J5IFBvbGljeSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBtZW1vcnkgcG9saWN5IGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBgc3lzZnNgIGVudHJpZXMgZm9yIHRoaXMgcG9saWN5LCB0aGUgb25lcyB0aGF0IGxpdmUgaW4gcGF0aHMgbGlrZSBgL3N5cy9rZXJuZWwvbW0vbWVtcG9saWN5L3dlaWdodGVkX2ludGVybGVhdmUvbm9kZU5gLCBhcmUgY3JlYXRlZCB0aHJvdWdoIGNhbGxzIHRvIGBzeXNmc193aV9ub2RlX2FkZGAgZHVyaW5nIGVpdGhlciBpbml0aWFsaXphdGlvbiBvciBob3RwbHVnIGV2ZW50cy4gVGhhdCdzIHRoZSBiYXNlbGluZS5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFuIGltcHJvdmVtZW50IGFyb3VuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSBmbGF3ZWQgYnkgdXNpbmcgYHN5bmNocm9uaXplX3JjdSgpYCB3aGlsZSBhIG11dGV4IHdhcyBoZWxkLCB3aGljaCBpcyBhIGJpZyBuby1ubywgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGl0J3MgYmVlbiBvcHRpbWl6ZWQgdG8gYXZvaWQgaXQuIFRoZSBzcGVjaWZpYyBjaGFuZ2UgaW52b2x2ZXMgaW50cm9kdWNpbmcgYHJlZmNvdW50X3RgIHRvIHRoZSBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIGFuZCByZXBsYWNpbmcgdGhlIHByb2JsZW1hdGljIGBzeW5jaHJvbml6ZV9yY3VgICsgYGtmcmVlYCBzZXF1ZW5jZSB3aXRoIGEgbW9yZSBSQ1UtZnJpZW5kbHkgYGtmcmVlX3JjdWAuIEdvb2QuIFJlZmNvdW50cyBhcmUgZ2VuZXJhbGx5IGEgYmV0dGVyIGFwcHJvYWNoLlxuXG5UaGUgcGF0Y2ggYWxzbyBvcHRpbWl6ZXMgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAuIEl0IG5vdyB1c2VzIGB3aV9zdGF0ZV9nZXQoKWAsIHdoaWNoIGluY3JlbWVudHMgdGhlIHJlZmNvdW50LCByYXRoZXIgdGhhbiBhbGxvY2F0aW5nIGEgbG9jYWwgY29weSBvZiB3ZWlnaHRzIHdpdGggYGt6YWxsb2NgLiBUaGlzIGxvb2tzIGxpa2UgYSBkZWZpbml0ZSBwZXJmb3JtYW5jZSBib29zdCBhbmQgbGVzcyBjaGFuY2Ugb2YgbWVtb3J5IGxlYWtzLlxuXG5HaXZlbiB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0J3MgcmlwZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cyBmb3IgdGhlIGZ1enplci4gTXkgaW5pdGlhbCB0YXJnZXQgZnVuY3Rpb25zIHNob3VsZCBiZTpcblxuKiAgIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIChvciBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBzaW5jZSB0aGUgbGF0dGVyIGNhbGxzIHRoZSBmb3JtZXIpLlxuKiAgIGBub2RlX3N0b3JlYFxuKiAgIGB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmVgXG4qICAgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYFxuXG5JdCBsb29rcyBsaWtlIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxpbmcgZnVuY3Rpb24sIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIHRvIHNlZSBpZiB0aGF0J3MgYSB2aWFibGUgb3B0aW9uLiBPa2F5LCBsZXQgbWUgY29uZmlybS4uLiBJIG5lZWQgdG8gY2hlY2sgaWYgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXMgc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDYzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI1OjMwLjE5NzgxODc1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMyMjM1MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXBvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTI3NTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzc2LSAqL1xcbm1tL21lbXBvbGljeS5jOjI3Nzc6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI3NzgtXFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTozMC4yNzEwNDY1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjc4ODE2NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWxseSBFeHBvc2VkIE1lbW9yeSBQb2xpY3kgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBpcyBleHBvc2VkLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHVzdWFsbHkgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBtZW1vcnkgcG9saWN5IGFyZSBjYXJlZnVsbHkgZ3VhcmRlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQsIGFuZCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBpdHMgdmlzaWJpbGl0eS4gVGhlIG5hbWUgc3VnZ2VzdHMgaXQncyBhIGJ1bGsgYWxsb2NhdGlvbiB3aXRoIG5vIHByb2ZpbGluZywgYW5kIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBtZW1wb2xpY3kuIE15IG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IHRvIGludmVzdGlnYXRlIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgaW50ZXJhY3Rpb25zLCBzZXR0aW5ncyBvciBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBvciB1c2UuIEtub3dpbmcgaG93IHRoYXQgZnVuY3Rpb24gd29ya3Mgd2l0aCBtZW1vcnkgcG9saWNpZXMgaXMga2V5LiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIGNvbnRleHQgYW5kIGltcGFjdCBvZiBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCdzIGV4dGVybmFsIGF2YWlsYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAzOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI1OjMzLjUzODkzMjM1MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY3NzA3NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtcG9saWN5X3NldF9ub2RlX3BlcmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9MjExPXN0YXRpYyB2b2lkIHJlZHVjZV9pbnRlcmxlYXZlX3dlaWdodHModW5zaWduZWQgaW50ICpidywgdTggKm5ld19pdylcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI0My1cXG5tbS9tZW1wb2xpY3kuYzoyNDQ6aW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkcylcXG5tbS9tZW1wb2xpY3kuYy0yNDUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTozMy42MDU3MDk1NTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyMTY2OTcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSB2aXNpYmlsaXR5IG9mIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAuIExldCdzIHNlZS4uLiB0aGUgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgZXhwb3J0ZWQgb3IgaWYgaXQncyBzdGF0aWMuIFJpZ2h0LCBJIHJlY2FsbCBpdCdzIGRlZmluaXRlbHkgKm5vdCogc3RhdGljLCB3aGljaCBtZWFucyBpdCdzIGF2YWlsYWJsZSBmb3IgdXNlIG91dHNpZGUgdGhlIGN1cnJlbnQgbW9kdWxlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGl0J3MgYWN0dWFsbHkgYmVpbmcgKnVzZWQqLiBUaW1lIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsIHNpdGVzIGFuZCBtYXAgb3V0IGl0cyB1c2FnZS4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgcG90ZW50aWFsIGltcGFjdCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzOTksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTozNy41MjczODMzMTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTM3MDA2OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtcG9saWN5X3NldF9ub2RlX3BlcmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9ub2RlLmM9MjE2PXZvaWQgbm9kZV9zZXRfcGVyZl9hdHRycyh1bnNpZ25lZCBpbnQgbmlkLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkLFxcbi0tXFxuZHJpdmVycy9iYXNlL25vZGUuYy0yNDItXFx0aWYgKGFjY2VzcyA9PSBBQ0NFU1NfQ09PUkRJTkFURV9DUFUpIHtcXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jOjI0MzpcXHRcXHRpZiAobWVtcG9saWN5X3NldF9ub2RlX3BlcmYobmlkLCBjb29yZCkpIHtcXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTI0NC1cXHRcXHRcXHRwcl9pbmZvKFxcXCJmYWlsZWQgdG8gc2V0IG1lbXBvbGljeSBhdHRycyBmb3Igbm9kZSAlZFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvYmFzZS9ub2RlLmM9MjU3PXZvaWQgbm9kZV91cGRhdGVfcGVyZl9hdHRycyh1bnNpZ25lZCBpbnQgbmlkLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkLFxcbi0tXFxuZHJpdmVycy9iYXNlL25vZGUuYy0yODMtXFxuZHJpdmVycy9iYXNlL25vZGUuYzoyODQ6XFx0aWYgKG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKG5pZCwgY29vcmQpKVxcbmRyaXZlcnMvYmFzZS9ub2RlLmMtMjg1LVxcdFxcdHByX2luZm8oXFxcImZhaWxlZCB0byBzZXQgbWVtcG9saWN5IGF0dHJzIGZvciBub2RlICVkXFxcXG5cXFwiLCBuaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaD0xODA9ZXh0ZXJuIGJvb2wgYXBwbHlfcG9saWN5X3pvbmUoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5LCBlbnVtIHpvbmVfdHlwZSB6b25lKTtcXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oLTE4MS1cXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oOjE4MjpleHRlcm4gaW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLFxcbmluY2x1ZGUvbGludXgvbWVtcG9saWN5LmgtMTgzLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTIxMT1zdGF0aWMgdm9pZCByZWR1Y2VfaW50ZXJsZWF2ZV93ZWlnaHRzKHVuc2lnbmVkIGludCAqYncsIHU4ICpuZXdfaXcpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNDMtXFxubW0vbWVtcG9saWN5LmM6MjQ0OmludCBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZih1bnNpZ25lZCBpbnQgbm9kZSwgc3RydWN0IGFjY2Vzc19jb29yZGluYXRlICpjb29yZHMpXFxubW0vbWVtcG9saWN5LmMtMjQ1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6MzkuNzIxMDg5MTgzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMzAwNjYzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gTlVNQSBQZXJmb3JtYW5jZSBBdHRyaWJ1dGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgY29kZSByZWxhdGVkIHRvIG5vZGUgcGVyZm9ybWFuY2UgYXR0cmlidXRlcyDigJMgc3BlY2lmaWNhbGx5LCBmdW5jdGlvbnMgY2FsbGVkIGZyb20gYG5vZGVfc2V0X3BlcmZfYXR0cnNgIGFuZCBgbm9kZV91cGRhdGVfcGVyZl9hdHRyc2Agd2l0aGluIGBkcml2ZXJzL2Jhc2Uvbm9kZS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgbGlrZWx5IHRvdWNoZXMgb24gQUNQSSBITUFUIG9yIHNpbWlsYXIgbWVjaGFuaXNtcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuXG5cbkxldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYSBjb3VwbGUgb2YgcmVsYXRlZCBmdW5jdGlvbnMsIGBub2RlX3N0b3JlYCBhbmQgYHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZWAgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBnZXQgYm9nZ2VkIGRvd24gaW4gaW50ZXJuYWwgc3RhdGljIGZ1bmN0aW9ucy4gQXJlIHRoZXJlIHB1YmxpYyBpbnRlcmZhY2VzIHRoYXQgbWF0dGVyP1xuXG5gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhhdCBzZWVtcyBwcm9taXNpbmcsIGJ1dCBJIHNob3VsZCBsb29rIGF0IGFsbCB0aGUgZW50cnkgcG9pbnRzIGluIHRoaXMgYXJlYS4gYGRvX21iaW5kYCBvciBgZG9fc2V0X21lbXBvbGljeWAgbG9vayBpbnRlcmVzdGluZywgdGhleSdyZSBzdGF0aWMgaW50ZXJuYWxseSwgYnV0IGNhbGxlZCB2aWEgdGhlIGBzeXNfbWJpbmRgIGFuZCBgc3lzX3NldF9tZW1wb2xpY3lgIHN5c2NhbGxzLCBzbyB0aGVyZSdzIGFuIGV4dGVybmFsIHBvaW50IG9mIGludGVyYWN0aW9uIHRoZXJlLlxuXG5TbywgdG8gZm9jdXMgbXkgYW5hbHlzaXMsIEknbSBnb2luZyB0byBjb25jZW50cmF0ZSBvbiBgc3lzX21iaW5kYCwgYHN5c19zZXRfbWVtcG9saWN5YCwgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAsIGFuZCBhbHNvIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAsIGl0IHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgYW4gaW1wb3J0YW50IGZ1bmN0aW9uLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYENPTkZJR19OVU1BYCBpcyB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0J3MgcmVsZXZhbnQgaGVyZSBvciBpZiB0aGVyZSBhcmUgc3BlY2lmaWMga25vYnMgZm9yIHdlaWdodGVkIGludGVybGVhdmUgb3Igc2ltaWxhciBmZWF0dXJlcy4gVGhhdCdzIHRoZSBuZXh0IHRoaW5nIHRvIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAzOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTo0NC44NTExNTg0MDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NTUzOTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1QT0xfV0VJR0hURURfSU5URVJMRUFWRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9NTkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtcG9saWN5X29wZXJhdGlvbnMgbXBvbF9vcHNbTVBPTF9NQVhdID0ge1xcbi0tXFxubW0vbWVtcG9saWN5LmMtNjE1LVxcdH0sXFxubW0vbWVtcG9saWN5LmM6NjE2OlxcdFtNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVdID0ge1xcbm1tL21lbXBvbGljeS5jLTYxNy1cXHRcXHQuY3JlYXRlID0gbXBvbF9uZXdfbm9kZW1hc2ssXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xMDgzPXN0YXRpYyBsb25nIGRvX3NldF9tZW1wb2xpY3kodW5zaWduZWQgc2hvcnQgbW9kZSwgdW5zaWduZWQgc2hvcnQgZmxhZ3MsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xMTA5LVxcdGlmIChuZXcgXFx1MDAyNlxcdTAwMjYgKG5ldy1cXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUgfHxcXG5tbS9tZW1wb2xpY3kuYzoxMTEwOlxcdFxcdCAgICBuZXctXFx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKSkge1xcbm1tL21lbXBvbGljeS5jLTExMTEtXFx0XFx0Y3VycmVudC1cXHUwMDNlaWxfcHJldiA9IE1BWF9OVU1OT0RFUy0xO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MTEyNz1zdGF0aWMgdm9pZCBnZXRfcG9saWN5X25vZGVtYXNrKHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgbm9kZW1hc2tfdCAqbm9kZXMpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xMTM3LVxcdGNhc2UgTVBPTF9QUkVGRVJSRURfTUFOWTpcXG5tbS9tZW1wb2xpY3kuYzoxMTM4OlxcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jLTExMzktXFx0XFx0Km5vZGVzID0gcG9sLVxcdTAwM2Vub2RlcztcXG4tLVxcbm1tL21lbXBvbGljeS5jPTExNjM9c3RhdGljIGxvbmcgZG9fZ2V0X21lbXBvbGljeShpbnQgKnBvbGljeSwgbm9kZW1hc2tfdCAqbm1hc2ssXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xMjIzLVxcdFxcdH0gZWxzZSBpZiAocG9sID09IGN1cnJlbnQtXFx1MDAzZW1lbXBvbGljeSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbXBvbGljeS5jOjEyMjQ6XFx0XFx0XFx0XFx0cG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkge1xcbm1tL21lbXBvbGljeS5jLTEyMjUtXFx0XFx0XFx0aWYgKGN1cnJlbnQtXFx1MDAzZWlsX3dlaWdodClcXG4tLVxcbm1tL21lbXBvbGljeS5jPTE1MDI9c3RhdGljIGxvbmcgZG9fbWJpbmQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNTk3LVxcdFxcdGlmIChuZXctXFx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFIHx8XFxubW0vbWVtcG9saWN5LmM6MTU5ODpcXHRcXHQgICAgbmV3LVxcdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkge1xcbm1tL21lbXBvbGljeS5jLTE1OTktXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4tLVxcbm1tL21lbXBvbGljeS5jPTIwMzQ9c3RydWN0IG1lbXBvbGljeSAqX19nZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIwNDctICogQGlseDogaW50ZXJsZWF2ZSBpbmRleCAob3V0cHV0KSwgZm9yIHVzZSBvbmx5IHdoZW4gTVBPTF9JTlRFUkxFQVZFIG9yXFxubW0vbWVtcG9saWN5LmM6MjA0ODogKiAgICAgICBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVcXG5tbS9tZW1wb2xpY3kuYy0yMDQ5LSAqXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDU3PXN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjA2NS1cXHRpZiAocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSB8fFxcbm1tL21lbXBvbGljeS5jOjIwNjY6XFx0ICAgIHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpIHtcXG5tbS9tZW1wb2xpY3kuYy0yMDY3LVxcdFxcdCppbHggKz0gdm1hLVxcdTAwM2V2bV9wZ29mZiBcXHUwMDNlXFx1MDAzZSBvcmRlcjtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTIxNTk9dW5zaWduZWQgaW50IG1lbXBvbGljeV9zbGFiX25vZGUodm9pZClcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIxNzctXFxubW0vbWVtcG9saWN5LmM6MjE3ODpcXHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcXG5tbS9tZW1wb2xpY3kuYy0yMTc5LVxcdFxcdHJldHVybiB3ZWlnaHRlZF9pbnRlcmxlYXZlX25vZGVzKHBvbGljeSk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMjg1PXN0YXRpYyBub2RlbWFza190ICpwb2xpY3lfbm9kZW1hc2soZ2ZwX3QgZ2ZwLCBzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMzE4LVxcdFxcdGJyZWFrO1xcbm1tL21lbXBvbGljeS5jOjIzMTk6XFx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XFxubW0vbWVtcG9saWN5LmMtMjMyMC1cXHRcXHQqbmlkID0gKGlseCA9PSBOT19JTlRFUkxFQVZFX0lOREVYKSA/XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMzcxPWJvb2wgaW5pdF9ub2RlbWFza19vZl9tZW1wb2xpY3kobm9kZW1hc2tfdCAqbWFzaylcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIzODQtXFx0Y2FzZSBNUE9MX0lOVEVSTEVBVkU6XFxubW0vbWVtcG9saWN5LmM6MjM4NTpcXHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcXG5tbS9tZW1wb2xpY3kuYy0yMzg2LVxcdFxcdCptYXNrID0gbWVtcG9saWN5LVxcdTAwM2Vub2RlcztcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI0NjE9c3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19tcG9sKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjQ4NS1cXHRcXHRpZiAocG9sLVxcdTAwM2Vtb2RlICE9IE1QT0xfSU5URVJMRUFWRSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbXBvbGljeS5jOjI0ODY6XFx0XFx0ICAgIHBvbC1cXHUwMDNlbW9kZSAhPSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1wb2xpY3kuYy0yNDg3LVxcdFxcdCAgICAoIW5vZGVtYXNrIHx8IG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spKSkge1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjUwOC1cXHRpZiAodW5saWtlbHkocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSB8fFxcbm1tL21lbXBvbGljeS5jOjI1MDk6XFx0XFx0ICAgICBwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKSBcXHUwMDI2XFx1MDAyNiBwYWdlKSB7XFxubW0vbWVtcG9saWN5LmMtMjUxMC1cXHRcXHQvKiBza2lwIE5VTUFfSU5URVJMRUFWRV9ISVQgdXBkYXRlIGlmIG51bWEgc3RhdHMgaXMgZGlzYWJsZWQgKi9cXG4tLVxcbm1tL21lbXBvbGljeS5jPTI3Nzc9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc5MC1cXG5tbS9tZW1wb2xpY3kuYzoyNzkxOlxcdGlmIChwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxcbm1tL21lbXBvbGljeS5jLTI3OTItXFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI4NTE9Ym9vbCBfX21wb2xfZXF1YWwoc3RydWN0IG1lbXBvbGljeSAqYSwgc3RydWN0IG1lbXBvbGljeSAqYilcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI4NjktXFx0Y2FzZSBNUE9MX1BSRUZFUlJFRF9NQU5ZOlxcbm1tL21lbXBvbGljeS5jOjI4NzA6XFx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XFxubW0vbWVtcG9saWN5LmMtMjg3MS1cXHRcXHRyZXR1cm4gISFub2Rlc19lcXVhbChhLVxcdTAwM2Vub2RlcywgYi1cXHUwMDNlbm9kZXMpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9Mjk4Nz1pbnQgbXBvbF9taXNwbGFjZWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zMDEzLVxcbm1tL21lbXBvbGljeS5jOjMwMTQ6XFx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XFxubW0vbWVtcG9saWN5LmMtMzAxNS1cXHRcXHRwb2xuaWQgPSB3ZWlnaHRlZF9pbnRlcmxlYXZlX25pZChwb2wsIGlseCk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zNDAwPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcG9saWN5X21vZGVzW10gPVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzQwNS1cXHRbTVBPTF9JTlRFUkxFQVZFXSA9IFxcXCJpbnRlcmxlYXZlXFxcIixcXG5tbS9tZW1wb2xpY3kuYzozNDA2OlxcdFtNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVdID0gXFxcIndlaWdodGVkIGludGVybGVhdmVcXFwiLFxcbm1tL21lbXBvbGljeS5jLTM0MDctXFx0W01QT0xfTE9DQUxdICAgICAgPSBcXFwibG9jYWxcXFwiLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9MzQyMj1pbnQgbXBvbF9wYXJzZV9zdHIoY2hhciAqc3RyLCBzdHJ1Y3QgbWVtcG9saWN5ICoqbXBvbClcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM0NjUtXFx0Y2FzZSBNUE9MX0lOVEVSTEVBVkU6XFxubW0vbWVtcG9saWN5LmM6MzQ2NjpcXHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcXG5tbS9tZW1wb2xpY3kuYy0zNDY3LVxcdFxcdC8qXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zNTU4PXZvaWQgbXBvbF90b19zdHIoY2hhciAqYnVmZmVyLCBpbnQgbWF4bGVuLCBzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zNTgwLVxcdGNhc2UgTVBPTF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jOjM1ODE6XFx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XFxubW0vbWVtcG9saWN5LmMtMzU4Mi1cXHRcXHRub2RlcyA9IHBvbC1cXHUwMDNlbm9kZXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI1OjQ0LjkyODcyMTE4OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTgzNDYxODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBOVU1BIENvbmZpZ3VyYXRpb24gYW5kIEJ1bGsgQWxsb2NhdGlvbiBCZWhhdmlvcioqXG5cbkFscmlnaHQsIHRoZSBjdXJyZW50IGNvbmZpZyBpcyBmbGFnZ2luZyBgQ09ORklHX05VTUFgLiBUaGF0J3MgaW1wb3J0YW50LiBJdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gdGhhdCBoYXMgTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2Vzcy4gU28sIE5VTUEgaW1wbGljYXRpb25zIGFyZSBnb2luZyB0byBiZSBjZW50cmFsIHRvIHdoYXQgSSdtIGxvb2tpbmcgYXQuIE5vdywgd2l0aCBOVU1BIGVuYWJsZWQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBidWxrIHBhZ2UgYWxsb2NhdGlvbiBpcyBiZWluZyBoYW5kbGVkIGFuZCBlc3BlY2lhbGx5LCB3aGV0aGVyIHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgZm9yIHVzZS4gTGV0IG1lIGNoZWNrIGlmIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIGV2ZW4gYXZhaWxhYmxlLiBJdHMgcHJlc2VuY2Ugb3IgYWJzZW5jZSB3aWxsIHN0cm9uZ2x5IGluZmx1ZW5jZSBteSBuZXh0IHN0ZXBzIGFuZCBob3cgSSBhcHByb2FjaCB0aGUgb3ZlcmFsbCBwcm9ibGVtLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZSBtZW1wb2xpY3ktYXdhcmUgYnVsayBhbGxvY2F0aW9uIGZ1bmN0aW9uIGlzIHZpc2libGUgYW5kIGFjY2Vzc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjE5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6NDguOTEyMTg4OTA1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQ2NjY2MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6NDguOTkzNjYxODk2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTAyMTY1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24sIGFuZCB0aGUgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGl0J3MgKm5vdCogYW4gZXhwb3J0ZWQgc3ltYm9sLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSG93ZXZlciwgaXQncyBhbHNvIG5vdCBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0IGhhcyBzb21lIGxldmVsIG9mIHZpc2liaWxpdHkgd2l0aGluIHRoZSBrZXJuZWwsIGFsYmVpdCBwb3RlbnRpYWxseSBsaW1pdGVkLiBMZXQncyBkZWx2ZSBkZWVwZXIuXG5cbkkgcmVtZW1iZXIgc2VlaW5nIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGluIGBtbS9tZW1wb2xpY3kuY2AsIGFuZCBJIGFsc28gcmVjYWxsIHNlZWluZyBhIGRlY2xhcmF0aW9uIGZvciBpdCBpbiBgaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaGAuIFRoaXMgaXMgYSBjcnVjaWFsIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjb25maXJtIHRoZSBkZWNsYXJhdGlvbiBhbmQgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24ncyBpbnRlbmRlZCBpbnRlcmZhY2UuIFRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcsIEknbSBnb2luZyB0byBxdWlja2x5IHJlZmVyZW5jZSB0aGUgZGVmaW5pdGlvbiBpbiBgaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaGAgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBoZWFkZXIgZmlsZSB0ZWxscyBtZSBhYm91dCBpdHMgYXJndW1lbnRzIGFuZCB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4ODAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTo1Mi44ODM4ODA5NzJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3Mzc5MDIxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6NTIuOTcxMjY2MzUzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTQ5NjI3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgTGFieXJpbnRoIG9mIERlY2xhcmF0aW9ucyoqXG5cbkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIEknbSBsb29raW5nIGF0IHRoaXMgY29kZS9zcGVjaWZpY2F0aW9uL2RvY3VtZW50LCBhbmQgbXkgaW5pdGlhbCByZWFjdGlvbiBpcywgKndoZXJlKiBwcmVjaXNlbHkgaXMgdGhpcyB2YXJpYWJsZS9mdW5jdGlvbi9jbGFzcy9jb25zdGFudC93aGF0ZXZlciAqZGVjbGFyZWQqPyBJdCdzIHRoZSBmaXJzdCBhbmQgbW9zdCBmdW5kYW1lbnRhbCBxdWVzdGlvbiwgcmVhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUsIGl0cyB0eXBlLCBhbnkgYXNzb2NpYXRlZCBtZXRhZGF0YSDigJMgYWxsIG9mIHRoYXQgaGluZ2VzIG9uIGZpbmRpbmcgaXRzIG9yaWdpbiBwb2ludC4gSXMgaXQgaW4gdGhpcyBmaWxlPyBBbm90aGVyIG9uZT8gQSBoZWFkZXI/IEEgcHJlY29tcGlsZWQgbGlicmFyeT8gSXMgaXQgYSBmb3J3YXJkIGRlY2xhcmF0aW9uLCBtZWFuaW5nIEkgbmVlZCB0byBjaGFzZSBkb3duIGl0cyBkZWZpbml0aW9uIGxhdGVyPyBUaGUgYWJzZW5jZSBvZiBhIGNsZWFyIGRlY2xhcmF0aW9uIHNjcmVhbXMgZm9yIGltbWVkaWF0ZSBpbnZlc3RpZ2F0aW9uLiBJIGNhbuKAmXQgcHJvY2VlZCB1bnRpbCBJJ3ZlIGVzdGFibGlzaGVkIHRoYXQgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjI5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTo1Ni4zMjYyMzI0NTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTI0NzAxMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2dmcC5oPTIzNz11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTI0MS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjI0Mjp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yNDMtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQ1LSNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyNDY6XFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTI0Ny1cXG4tLVxcbm1tL21lbXBvbGljeS5jPTI3NTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzc2LSAqL1xcbm1tL21lbXBvbGljeS5jOjI3Nzc6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI3NzgtXFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxcbi0tXFxubW0vdm1hbGxvYy5jPTM2NDE9dm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXFxuLS1cXG5tbS92bWFsbG9jLmMtMzcwNS1cXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgXFx1MDAyNlxcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcXG5tbS92bWFsbG9jLmM6MzcwNjpcXHRcXHRcXHRcXHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnAsXFxubW0vdm1hbGxvYy5jLTM3MDctXFx0XFx0XFx0XFx0XFx0XFx0XFx0bnJfcGFnZXNfcmVxdWVzdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6NTguODE4NzA4MjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkyOTYwNDA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgd2hlcmUgd2UgY2FuIGV4cGFuZCBvdXIgZnV6emluZyBjb3ZlcmFnZS4gVGhlIHN0YXJ0aW5nIHBvaW50IHNlZW1zIHRvIGJlIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCBpbiBgbW0vdm1hbGxvYy5jYC4gVGhpcyBzdWdnZXN0cyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCB3b3VsZCBiZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuXG5cbkhtbSwgdGhlbiB0aGVyZSdzIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBkcml2ZXJzL2Jhc2Uvbm9kZS5jYC4gTm93LCBzaG91bGQgSSBjb25zaWRlciBgc3lzX21iaW5kYCBvciBgc3lzX3NldF9tZW1wb2xpY3lgIGFzIHRhcmdldHM/IE5vLCB0aG9zZSBzeXNjYWxscyBhcmUgYWxyZWFkeSB0aG9yb3VnaGx5IGZ1enplZCBieSBzeXprYWxsZXIsIHNvIHRoZXkncmUgcHJvYmFibHkgbm90IHRoZSBoaWdoZXN0IHByaW9yaXR5LlxuXG5CdXQsIEkgdGhpbmsgYWRkaW5nIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGFuZCBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgIHRvIGBGb2N1c1N5bWJvbHNgIGlzIGRlZmluaXRlbHkgd29ydGggaXQuXG5cbk5vdywgaG9sZCBvbi4uLiBsZXQgbWUganVzdCBtYWtlIHN1cmUgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCBpcyBhY3R1YWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIG9yIGlmIGl0J3Mgc3RyaWN0bHkgdGllZCB0byBBQ1BJIEhNQVQgcGFyc2luZy4gQWgsIHJpZ2h0LCBpdCdzIGNhbGxlZCBmcm9tIGBkcml2ZXJzL2FjcGkvbnVtYS9obWF0LmNgIHZpYSBgbm9kZV9zZXRfcGVyZl9hdHRyc2AuIE9rLCB0aGF0IGxvb2tzIGxpa2UgaXQncyB0aGUgbW9yZSBkaXJlY3QgcGF0aCwgc28gbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBub2RlX3NldF9wZXJmX2F0dHJzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4ODYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6MDMuNzQ4MzE1OTA1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMyODMzNDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vZGVfc2V0X3BlcmZfYXR0cnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYWNwaS9udW1hL2htYXQuYz04NTM9c3RhdGljIHZvaWQgaG1hdF9yZWdpc3Rlcl90YXJnZXRfcGVyZihzdHJ1Y3QgbWVtb3J5X3RhcmdldCAqdGFyZ2V0LCBpbnQgYWNjZXNzKVxcbi0tXFxuZHJpdmVycy9hY3BpL251bWEvaG1hdC5jLTg1NS1cXHR1bnNpZ25lZCBtZW1fbmlkID0gcHhtX3RvX25vZGUodGFyZ2V0LVxcdTAwM2VtZW1vcnlfcHhtKTtcXG5kcml2ZXJzL2FjcGkvbnVtYS9obWF0LmM6ODU2OlxcdG5vZGVfc2V0X3BlcmZfYXR0cnMobWVtX25pZCwgXFx1MDAyNnRhcmdldC1cXHUwMDNlY29vcmRbYWNjZXNzXSwgYWNjZXNzKTtcXG5kcml2ZXJzL2FjcGkvbnVtYS9obWF0LmMtODU3LX1cXG4tLVxcbmRyaXZlcnMvYmFzZS9ub2RlLmM9MjAyPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphY2Nlc3NfYXR0cnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9ub2RlLmMtMjEwLS8qKlxcbmRyaXZlcnMvYmFzZS9ub2RlLmM6MjExOiAqIG5vZGVfc2V0X3BlcmZfYXR0cnMgLSBTZXQgdGhlIHBlcmZvcm1hbmNlIHZhbHVlcyBmb3IgZ2l2ZW4gYWNjZXNzIGNsYXNzXFxuZHJpdmVycy9iYXNlL25vZGUuYy0yMTItICogQG5pZDogTm9kZSBpZGVudGlmaWVyIHRvIGJlIHNldFxcbi0tXFxuZHJpdmVycy9iYXNlL25vZGUuYy0yMTUtICovXFxuZHJpdmVycy9iYXNlL25vZGUuYzoyMTY6dm9pZCBub2RlX3NldF9wZXJmX2F0dHJzKHVuc2lnbmVkIGludCBuaWQsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmQsXFxuZHJpdmVycy9iYXNlL25vZGUuYy0yMTctXFx0XFx0XFx0IGVudW0gYWNjZXNzX2Nvb3JkaW5hdGVfY2xhc3MgYWNjZXNzKVxcbi0tXFxuZHJpdmVycy9iYXNlL25vZGUuYy0yNDgtfVxcbmRyaXZlcnMvYmFzZS9ub2RlLmM6MjQ5OkVYUE9SVF9TWU1CT0xfR1BMKG5vZGVfc2V0X3BlcmZfYXR0cnMpO1xcbmRyaXZlcnMvYmFzZS9ub2RlLmMtMjUwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9ub2RlLmg9ODU9dm9pZCBub2RlX2FkZF9jYWNoZSh1bnNpZ25lZCBpbnQgbmlkLCBzdHJ1Y3Qgbm9kZV9jYWNoZV9hdHRycyAqY2FjaGVfYXR0cnMpO1xcbmluY2x1ZGUvbGludXgvbm9kZS5oOjg2OnZvaWQgbm9kZV9zZXRfcGVyZl9hdHRycyh1bnNpZ25lZCBpbnQgbmlkLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkLFxcbmluY2x1ZGUvbGludXgvbm9kZS5oLTg3LVxcdFxcdFxcdCBlbnVtIGFjY2Vzc19jb29yZGluYXRlX2NsYXNzIGFjY2Vzcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25vZGUuaD05MT1zdGF0aWMgaW5saW5lIHZvaWQgbm9kZV9hZGRfY2FjaGUodW5zaWduZWQgaW50IG5pZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbm9kZS5oLTk1LVxcbmluY2x1ZGUvbGludXgvbm9kZS5oOjk2OnN0YXRpYyBpbmxpbmUgdm9pZCBub2RlX3NldF9wZXJmX2F0dHJzKHVuc2lnbmVkIGludCBuaWQsXFxuaW5jbHVkZS9saW51eC9ub2RlLmgtOTctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI2OjA1Ljk4MTE1NTI3N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDM5ODcxMzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOVU1BIE1lbW9yeSBQb2xpY3kgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgcG9saWN5IHN0dWZmLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBOVU1BLiBJdCBzZWVtcyBsaWtlIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAgaXMgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQsIGJ1dCBpdCdzIHByb2JhYmx5IG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIHRvIHVucHJpdmlsZWdlZCB1c2Vyc3BhY2UsICp1bmxlc3MqIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYm9vdCBvciBob3RwbHVnIHNjZW5hcmlvcyB3aGVyZSBITUFUIGlzIGFjdGl2ZS4gSG93ZXZlciwgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgbG9va3MgbW9yZSBjb25jZXJuaW5nIGJlY2F1c2UgaXQncyByZWFjaGFibGUgdGhyb3VnaCBgdm1hbGxvY2Agd2hlbiBgTlVNQV9OT19OT0RFYCBpcyBiZWluZyB1c2VkLCB3aGljaCBpcyBzdXJwcmlzaW5nbHkgY29tbW9uLiBBbmQgdGhlbiB0aGVyZSBhcmUgdGhvc2Ugc3lzZnMgZW50cmllcywgYG5vZGVfc3RvcmVgIGFuZCBgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlYCwgdGhhdCByb290IHVzZXJzIGNhbiBhYnNvbHV0ZWx5IGdldCB0aGVpciBoYW5kcyBvbi5cblxuVGhlIHByb2JsZW0gd2l0aCB0aGUgc3lzZnMgZnVuY3Rpb25zIGlzIHRoYXQgdGhleSdyZSBzdGF0aWMsIHNvIEkgY2FuJ3QgZGlyZWN0bHkgbGlzdCB0aGVtIGluIEZvY3VzU3ltYm9scywgb3IgYXQgbGVhc3QgaXQgd291bGQgYmUgYSBiaXQgY2x1bmt5LiBXYWl0LCBob2xkIG9uIOKAkyBgc3lzX21iaW5kYCBhbmQgYHN5c19zZXRfbWVtcG9saWN5YCBhcmUgc3lzdGVtIGNhbGxzLCBzbyB0aGF0J3MgYSBkaWZmZXJlbnQgc3RvcnkuIFRoZSBwYXRjaCBpcyBtZXNzaW5nIHdpdGggYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgd2hpY2ggZ2V0cyBjYWxsZWQgYnkgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuXG5cbk5vdywgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIG1vZGlmaWVkIG9yIHJlbGF0ZWQgdGhhdCBhcmVuJ3Qgc3RhdGljLiBPa2F5LCBgd2lfc3RhdGVfZ2V0YCBhbmQgYHdpX3N0YXRlX3B1dGAgYXJlIHN0YXRpYywgc28gdGhleSdyZSBwcm9iYWJseSBub3QgdGhlIGltbWVkaWF0ZSB0YXJnZXQuIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAgaXMgbm9uLXN0YXRpYywgc2FtZSB3aXRoIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLlxuXG5JIGFsc28gaGF2ZSB0byBjb25maXJtIHRoYXQgQ09ORklHX05VTUEgaXMgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnIGhlcmUuIFNvLCB5ZXMsIGBDT05GSUdfTlVNQWAgaXMgdGhlIGJpZyBvbmUuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBgbW0vS2NvbmZpZ2AgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciByZWxhdGVkIGNvbmZpZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTgyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI2OjEzLjAyMTAyOTg3OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5OTU0ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5VTUFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTQ0MT1jb25maWcgQVJDSF9LRUVQX01FTUJMT0NLXFxuLS1cXG5tbS9LY29uZmlnLTQ0NC0jIEtlZXAgYXJjaCBOVU1BIG1hcHBpbmcgaW5mcmFzdHJ1Y3R1cmUgcG9zdC1pbml0Llxcbm1tL0tjb25maWc6NDQ1OmNvbmZpZyBOVU1BX0tFRVBfTUVNSU5GT1xcbm1tL0tjb25maWctNDQ2LVxcdGJvb2xcXG4tLVxcbm1tL0tjb25maWc9MTQxOT1jb25maWcgRVhFQ01FTVxcbi0tXFxubW0vS2NvbmZpZy0xNDIxLVxcbm1tL0tjb25maWc6MTQyMjpjb25maWcgTlVNQV9NRU1CTEtTXFxubW0vS2NvbmZpZy0xNDIzLVxcdGJvb2xcXG5tbS9LY29uZmlnLTE0MjQtXFxubW0vS2NvbmZpZzoxNDI1OmNvbmZpZyBOVU1BX0VNVVxcbm1tL0tjb25maWctMTQyNi1cXHRib29sIFxcXCJOVU1BIGVtdWxhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6MTMuMDg5MDMwMjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1OTg1OTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKldoZXJlIERpZCBUaGF0IENvbmZpZ3VyYXRpb24gT3B0aW9uIEdvPyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYGNvbmZpZyBOVU1BYCBhbmQgaW1tZWRpYXRlbHkgbXkgbWluZCBnb2VzIHRvIHdoZXJlIHRoZXNlIHRoaW5ncyAqdXN1YWxseSogbGl2ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkhtbSwgTlVNQS4uLiB0aGF0J3MgdHlwaWNhbGx5IGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB0aGluZywgcmlnaHQ/XCIgU28sIG15IGZpcnN0IG1lbnRhbCBjaGVjayBpcyBmb3IgYGFyY2gveDg2L0tjb25maWdgIG9yIHNvbWV0aGluZyBzaW1pbGFyIHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRpcmVjdG9yaWVzLiBUaGF0J3MgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludC4gT3IsIGdpdmVuIGl0cyBhc3NvY2lhdGlvbiB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBpdCBjb3VsZCBiZSB0dWNrZWQgYXdheSBpbiBgbW0vS2NvbmZpZ2AuIFRoYXQncyB0aGUgc2Vjb25kIHBsYWNlIEknZCBsb29rLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IHRoaW5nIGlzIGRlZmluZWQgYW5kIGhvdyBpdCdzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTMxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6MTYuNzQ4ODkzMjkxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjc5MDMyNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVU1BJFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTE1MzY9Y29uZmlnIEhPVFBMVUdfQ1BVXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTU0My0jIENvbW1vbiBOVU1BIEZlYXR1cmVzXFxuYXJjaC9hcm02NC9LY29uZmlnOjE1NDQ6Y29uZmlnIE5VTUFcXG5hcmNoL2FybTY0L0tjb25maWctMTU0NS1cXHRib29sIFxcXCJOVU1BIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBTY2hlZHVsZXIgU3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9NDkyPWNvbmZpZyBOUl9DUFVTXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTUwMC1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjUwMTpjb25maWcgTlVNQVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNTAyLVxcdGJvb2wgXFxcIk5VTUEgU3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnPTI2MTA9Y29uZmlnIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRVxcbi0tXFxuYXJjaC9taXBzL0tjb25maWctMjYxMi1cXG5hcmNoL21pcHMvS2NvbmZpZzoyNjEzOmNvbmZpZyBOVU1BXFxuYXJjaC9taXBzL0tjb25maWctMjYxNC1cXHRib29sIFxcXCJOVU1BIFN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz03NTg9Y29uZmlnIElSUV9BTExfQ1BVU1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctNzY2LVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjc2Nzpjb25maWcgTlVNQVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTc2OC1cXHRib29sIFxcXCJOVU1BIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBTY2hlZHVsZXIgU3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZz00ODE9ZW5kY2hvaWNlXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctNDgzLSMgQ29tbW9uIE5VTUEgRmVhdHVyZXNcXG5hcmNoL3Jpc2N2L0tjb25maWc6NDg0OmNvbmZpZyBOVU1BXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQ4NS1cXHRib29sIFxcXCJOVU1BIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBTY2hlZHVsZXIgU3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTU0MD1jb25maWcgSE9UUExVR19DUFVcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTU0Mi1cXG5hcmNoL3MzOTAvS2NvbmZpZzo1NDM6Y29uZmlnIE5VTUFcXG5hcmNoL3MzOTAvS2NvbmZpZy01NDQtXFx0Ym9vbCBcXFwiTlVNQSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnPTEwMj1jb25maWcgVlNZU0NBTExcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xMTQtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjExNTpjb25maWcgTlVNQVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xMTYtXFx0Ym9vbCBcXFwiTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2VzcyAoTlVNQSkgU3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvc3BhcmMvS2NvbmZpZz0yNTQ9Y29uZmlnIEdFTkVSSUNfTE9DS0JSRUFLXFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWctMjU4LVxcbmFyY2gvc3BhcmMvS2NvbmZpZzoyNTk6Y29uZmlnIE5VTUFcXG5hcmNoL3NwYXJjL0tjb25maWctMjYwLVxcdGJvb2wgXFxcIk5VTUEgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9MTUwNT1jb25maWcgQU1EX01FTV9FTkNSWVBUXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTE1MjEtIyBDb21tb24gTlVNQSBGZWF0dXJlc1xcbmFyY2gveDg2L0tjb25maWc6MTUyMjpjb25maWcgTlVNQVxcbmFyY2gveDg2L0tjb25maWctMTUyMy1cXHRib29sIFxcXCJOVU1BIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBTY2hlZHVsZXIgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6MTkuNDI3OTM0NTg2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDMzNzQ2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVU1BIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGRlZmluaXRlbHkgTlVNQS4gTXkgaW5pdGlhbCBodW5jaCB3YXMgY29ycmVjdC4gTm93LCBsZXQncyBzZWUgaWYgd2UgaGF2ZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGFuZ2luZyBhcm91bmQuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIG1vZGlmaWNhdGlvbnMgdG8gYG1tL21lbXBvbGljeS5jYC4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byBjb25maXJtIGlmIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIEFMV0FZUyBjb21waWxlZCB3aGVuIE5VTUEgaXMgZW5hYmxlZCwgSSdtIHByZXR0eSBjZXJ0YWluIHRoYXQgaXQgaXMsIHNvIGxldCdzIGNvbmZpcm0uIFllcywgaXQgbG9va3MgbGlrZSBgbW0vbWVtcG9saWN5Lm9gIGdldHMgY29tcGlsZWQgd2hlbiBgQ09ORklHX05VTUFgIGlzIGVuYWJsZWQsIHdoaWNoIHN1cHBvcnRzIHRoYXQgbGluZSBvZiB0aG91Z2h0LlxuXG5SaWdodCwgYXJlIHRoZXJlIGFueSAqb3RoZXIqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIG9mIGludGVyZXN0PyBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCBhbmQsIG9mIGNvdXJzZSwgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuXG5cbkkgdGhpbmsgaXTigJlzIHdvcnRoIGRvdWJsZS1jaGVja2luZyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBvbmUgbW9yZSB0aW1lLCBqdXN0IHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg3NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNjoyMy44MzEzMTM3NzdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDMxMTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1wb2xpY3kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0yNzUxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc3Ni0gKi9cXG5tbS9tZW1wb2xpY3kuYzoyNzc3OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNzc4LVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6MjMuODkxMzUxNjdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNjMyNjU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIE5vbi1TdGF0aWMgTWVtb3J5IFBvbGljeSoqXG5cblJpZ2h0LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIHNpdHVhdGlvbi4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBub24tc3RhdGljIGFzcGVjdHMgb2YgdGhpcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4sIGdpdmVuIHRoYXQgaXQncyBkZWFsaW5nIHdpdGggbWVtb3J5IHBvbGljeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBub24tc3RhdGljIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mzk4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6MjcuMTA3NjgxNDY4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTE0MTc5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1wb2xpY3lfc2V0X25vZGVfcGVyZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1wb2xpY3kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0yMTE9c3RhdGljIHZvaWQgcmVkdWNlX2ludGVybGVhdmVfd2VpZ2h0cyh1bnNpZ25lZCBpbnQgKmJ3LCB1OCAqbmV3X2l3KVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjQzLVxcbm1tL21lbXBvbGljeS5jOjI0NDppbnQgbWVtcG9saWN5X3NldF9ub2RlX3BlcmYodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKVxcbm1tL21lbXBvbGljeS5jLTI0NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI2OjI3LjE4MjgzMDk5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTY5MzI4OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uIGFuZCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgaWRlbnRpZnlpbmcgZ29vZCBmdXp6aW5nIHRhcmdldHMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBJIGNhbiBzZWUgdGhhdCB0aGUgY29kZSBJJ20gbG9va2luZyBhdCBpc24ndCBzdGF0aWMsIHdoaWNoIGlzIHRoZSBmaXJzdCBnb29kIHNpZ24uIExldCdzIHNlZS4uLiBsb29raW5nIHRocm91Z2ggdGhlIGZ1bmN0aW9ucywgYHdpX3N0YXRlX2dldGAsIGB3aV9zdGF0ZV9wdXRgLCBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCwgYG5vZGVfc3RvcmVgLCBgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlYCwgYW5kIGB3aV9zdGF0ZV9mcmVlYCBhcmUgYWxsIHN0YXRpYy4gVGhhdCBuYXJyb3dzIGl0IGRvd24uXG5cblRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgYW5kIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAuIFJpZ2h0IGF3YXksIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGxvb2tzIHByb21pc2luZyBiZWNhdXNlIGl0J3MgdGhlIGVudHJ5IHBvaW50IGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbiB3aXRoIG1lbXBvbGljeSwgYW5kIGl0IHNlZW1zIHRvIGNhbGwgdGhlIG1vZGlmaWVkIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiBZZWFoLCB0aGF0J3MgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0LiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAgYXMgaXQgbW9kaWZpZXMgdGhlIHdlaWdodGVkIGludGVybGVhdmUgc3RhdGUuXG5cbk5vdywgcmVhY2hhYmlsaXR5LiBJcyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCByZWFjaGFibGUgZnJvbSBzeXNjYWxscz8gWXVwLCBpdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGZyb20gYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCB3aGljaCB0aGVuIGdldHMgY2FsbGVkIGZyb20gc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMsIGV2ZW50dWFsbHkgYmVpbmcgY2FsbGVkIGJ5IGB2bWFsbG9jYC4gVGhhdCBtZWFucyBpdCdzIHByZXR0eSBleHBvc2VkLlxuXG5XaGF0IGFib3V0IGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmA/ICBJdCdzIGNhbGxlZCBmcm9tIGBub2RlX3NldF9wZXJmX2F0dHJzYCBhbmQgYG5vZGVfdXBkYXRlX3BlcmZfYXR0cnNgLiBUaGVzZSBhcmUgY2FsbGVkIGZyb20gYGhtYXRfcmVnaXN0ZXJfdGFyZ2V0X3BlcmZgIChBQ1BJIEhNQVQpIGFuZCBgY3hsX3JlZ2lvbl9wZXJmX2RhdGFfY2FsY3VsYXRlYCAoQ1hMKS4gU28gaXQncyByZWFjaGFibGUgaWYgQUNQSSBITUFUIG9yIENYTCBpcyBwcmVzZW50LCBzbyBtYXliZSBub3QgYWx3YXlzIHJlYWNoYWJsZSBidXQgcG90ZW50aWFsbHkgd29ydGggZnV6emluZy5cblxuSGFuZyBvbi4uLiBUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIHdpdGggYHN5bmNocm9uaXplX3JjdSgpYC4gVGhlIGNvbW1pdCBtZXNzYWdlIHNheXMgXCJzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcsXCIgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoZSBwYXRjaCBpcyB1c2luZyBgcmVmY291bnRfdGAgYW5kIGBrZnJlZV9yY3VgIGluc3RlYWQgb2YgYHN5bmNocm9uaXplX3JjdWAgYW5kIGBrZnJlZWAuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlLCByZXBsYWNpbmcgY2FsbHMgdG8gYHN5bmNocm9uaXplX3JjdWAgd2l0aCBhbiBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbi5cblxuQWxyaWdodCwgSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4gTXkgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBhbmQgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYC4gQW5kIEknbGwgbmVlZCB0byBlbmFibGUgdGhlIGBOVU1BYCBjb25maWcuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIHRoZSBjb3JyZWN0IG5hbWUuIFllcCwgaXQgaXMuXG5cbkFuZCBpdCBsb29rcyBsaWtlIHRoZSBgTlVNQWAgY29uZmlnIHdpbGwgY292ZXIgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYC4gU28gdGhhdCBsb29rcyBnb29kISBJIGRvbid0IHNlZSBhbnkgb3RoZXIgY29uZmlnIG5lY2Vzc2FyeSBmb3IgYE1QT0xfV0VJR0hURURfSU5URVJMRUFWRWAsIGl0IGlzIGp1c3QgYW4gZW51bS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NTksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6MzcuNzUyMTYzMzQ1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDgwNDE5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaD0xOT1lbnVtIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaC0yNS1cXHRNUE9MX1BSRUZFUlJFRF9NQU5ZLFxcbmluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaDoyNjpcXHRNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUsXFxuaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oLTI3LVxcdE1QT0xfTUFYLFxcdC8qIGFsd2F5cyBsYXN0IG1lbWJlciBvZiBlbnVtICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI2OjM3LjgyNjk3NDE2NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzg5NTQ3MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgdmlhYmxlIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIHNwZWNpZmljYWxseSB0aG9zZSByZWxhdGVkIHRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgYXJlYS4gRmlyc3QsIGxldCdzIHNlZSBpZiBgbm9kZV9zdG9yZWAgYW5kIGB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmVgIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMuIEFoLCB5ZXMsIHRoZXkgYXJlIGluZGVlZCBzeXNmcyBzdG9yZSBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRoZXkncmUgZGVjbGFyZWQgc3RhdGljLCBzbyBJIGNhbid0IGluY2x1ZGUgdGhlbSBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4gQnV0IHRoZSBnb29kIG5ld3MgaXMgdGhhdCBzeXprYWxsZXIgKmNhbiogZnV6eiBzeXNmcywgd2hpY2ggb3BlbnMgdXAgc29tZSBwb3NzaWJpbGl0aWVzIHRoZXJlLlxuXG5HaXZlbiB0aGF0IHJlc3RyaWN0aW9uLCBteSBmb2N1cyBzaGlmdHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgYW5kIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRob3NlIHNwZWxsaW5ncy4uLiBZdXAsIGNvbmZpcm1lZDogYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXMgY29ycmVjdCBhbmQgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCBpcyBhbHNvIGNvcnJlY3QuXG5cbk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgZWxzZS4gTGV0J3Mgc2VlLi4uIGB3aV9zdGF0ZV9mcmVlYCBpcyBzdGF0aWMuIGB3aV9zdGF0ZV9nZXRgIGlzIGFsc28gc3RhdGljLiBBbmQgc28gaXMgYHdpX3N0YXRlX3B1dGAuIE9oLCBhbmQgYGdldF9pbF93ZWlnaHRgIGFzIHdlbGwuIFRoYXQgbG9va3MgbGlrZSBhIGNvbXBsZXRlIGxpc3QgZm9yIHRoaXMgYXJlYSwgbWVhbmluZyBJIGhhdmUgYSBnb29kIGJhc2UgdG8gc3RhcnQgZnJvbS4gU28sIEkgdGhpbmsgSSdtIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTM0LCJPdXRwdXRUb2tlbnMiOjEyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNjo0NC4yMTY1MjUzOTdaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg5NDA0NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZcIixcbiAgICBcIm1lbXBvbGljeV9zZXRfbm9kZV9wZXJmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdlaWdodGVkIGludGVybGVhdmUgbWVtb3J5IHBvbGljeSBsb2dpYyBpbiBtbS9tZW1wb2xpY3kuYyBieSBpbnRyb2R1Y2luZyBhIHJlZmNvdW50IGFuZCByZXBsYWNpbmcgc3luY2hyb25pemVfcmN1KCkgKyBrZnJlZSgpIHdpdGgga2ZyZWVfcmN1KCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIGFuZCBzeXNmcyBub2RlIHBlcmZvcm1hbmNlIHVwZGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiLFxuICAgIFwibWVtcG9saWN5X3NldF9ub2RlX3BlcmZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBtZW1vcnkgcG9saWN5IGxvZ2ljIGluIG1tL21lbXBvbGljeS5jIGJ5IGludHJvZHVjaW5nIGEgcmVmY291bnQgYW5kIHJlcGxhY2luZyBzeW5jaHJvbml6ZV9yY3UoKSArIGtmcmVlKCkgd2l0aCBrZnJlZV9yY3UoKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgYnVsayBwYWdlIGFsbG9jYXRpb24gYW5kIHN5c2ZzIG5vZGUgcGVyZm9ybWFuY2UgdXBkYXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6NDQuMzU1NDk4ODEyWiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ0OTUxNjg0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI2OjQ0LjM1NjM2NTM3MloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDQ0ODY0NTY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCBieSByZXBsYWNpbmcgYHN5bmNocm9uaXplX3JjdSgpYCB3aXRoIGEgcmVmZXJlbmNlIGNvdW50IChgcmVmY291bnRfdGApIGFuZCBga2ZyZWVfcmN1KClgLiBJdCBhbHNvIG9wdGltaXplcyBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKClgIGJ5IHBpbm5pbmcgdGhlIHN0YXRlIHdpdGggYHdpX3N0YXRlX2dldCgpYCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbG9jYWwgY29weSBvZiB0aGUgd2VpZ2h0cyBhcnJheS4gQWxsIGFsbG9jYXRpb25zIG9mIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgdXNlIGBremFsbG9jX2ZsZXgoKWAsIHdoaWNoIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgc3RydWN0dXJlIGFuZCBpdHMgZmxleGlibGUgYXJyYXkgbWVtYmVyIGBpd190YWJsZWAuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3MzI4OTdkNzExYzhhZGYwNjg0NjA3N2Y0NWQ1MDM3ODNmNDQ2OTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAwMzoyNTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcbmluZGV4IDBlNTE3NWYxYzc2N2QuLjRhMzcyMmM2M2IzMWIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xuKysrIGIvbW0vbWVtcG9saWN5LmNcbkBAIC0xMTIsNiArMTEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xlYWZvcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2djZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGJmbHVzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYi5oXHUwMDNlXG5AQCAtMTU2LDcgKzE1Nyw5IEBAIHN0YXRpYyBjb25zdCBpbnQgd2VpZ2h0aW5lc3MgPSAzMjtcbiAgKi9cbiBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSB7XG4gXHRib29sIG1vZGVfYXV0bztcbi1cdHU4IGl3X3RhYmxlW107XG4rXHRyZWZjb3VudF90IHJlZmNudDtcbitcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4rXHR1OCBpd190YWJsZVtdIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gfTtcbiBzdGF0aWMgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgX19yY3UgKndpX3N0YXRlO1xuIHN0YXRpYyB1bnNpZ25lZCBpbnQgKm5vZGVfYndfdGFibGU7XG5AQCAtMTY3LDYgKzE3MCwyNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50ICpub2RlX2J3X3RhYmxlO1xuICAqL1xuIHN0YXRpYyBERUZJTkVfTVVURVgod2lfc3RhdGVfbG9jayk7XG4gXG4rLyogQWxsb3cgc2xlZXBpbmcgcmVhZGVycyB0byBwaW4gdGhlIHN0YXRlIHRvIGF2b2lkIHRha2luZyBjb3BpZXMgKi9cbitzdGF0aWMgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKndpX3N0YXRlX2dldCh2b2lkKVxuK3tcbitcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHdoaWxlICgoc3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpKSkge1xuK1x0XHRpZiAocmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnN0YXRlLVx1MDAzZXJlZmNudCkpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJldHVybiBzdGF0ZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgd2lfc3RhdGVfcHV0KHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRpZiAoc3RhdGUgXHUwMDI2XHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZzdGF0ZS1cdTAwM2VyZWZjbnQpKVxuK1x0XHRrZnJlZV9yY3Uoc3RhdGUsIHJjdSk7XG4rfVxuK1xuIHN0YXRpYyB1OCBnZXRfaWxfd2VpZ2h0KGludCBub2RlKVxuIHtcbiBcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcbkBAIC0yMzUsNiArMjU5LDcgQEAgaW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXHRuZXdfd2lfc3RhdGUtXHUwMDNlbW9kZV9hdXRvID0gdHJ1ZTtcbitcdHJlZmNvdW50X3NldChcdTAwMjZuZXdfd2lfc3RhdGUtXHUwMDNlcmVmY250LCAxKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXG4gXHRcdG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZVtpXSA9IDE7XG4gXG5AQCAtMjY1LDEwICsyOTAsNyBAQCBpbnQgbWVtcG9saWN5X3NldF9ub2RlX3BlcmYodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKVxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpO1xuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuLVx0aWYgKG9sZF93aV9zdGF0ZSkge1xuLVx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbi1cdFx0a2ZyZWUob2xkX3dpX3N0YXRlKTtcbi1cdH1cbitcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xuIG91dDpcbiBcdGtmcmVlKG9sZF9idyk7XG4gXHRyZXR1cm4gMDtcbkBAIC0yNjMyLDcgKzI2NTQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0dW5zaWduZWQgbG9uZyBucl9hbGxvY2F0ZWQgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyByb3VuZHM7XG4gXHR1bnNpZ25lZCBsb25nIG5vZGVfcGFnZXMsIGRlbHRhO1xuLVx0dTggKndlaWdodHMsIHdlaWdodDtcbitcdHU4ICp0YWJsZSwgd2VpZ2h0O1xuIFx0dW5zaWduZWQgaW50IHdlaWdodF90b3RhbCA9IDA7XG4gXHR1bnNpZ25lZCBsb25nIHJlbV9wYWdlcyA9IG5yX3BhZ2VzO1xuIFx0bm9kZW1hc2tfdCBub2RlcztcbkBAIC0yNjc2LDI1ICsyNjk4LDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG4gXHRtZS1cdTAwM2VpbF93ZWlnaHQgPSAwO1xuIFx0cHJldl9ub2RlID0gbm9kZTtcbiBcbi1cdC8qIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzIHRvIG9wZXJhdGUgb24gb3V0c2lkZSByY3UgKi9cbi1cdHdlaWdodHMgPSBremFsbG9jKG5yX25vZGVfaWRzLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghd2VpZ2h0cylcbi1cdFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcbi1cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdHN0YXRlID0gcmN1X2RlcmVmZXJlbmNlKHdpX3N0YXRlKTtcbi1cdGlmIChzdGF0ZSkge1xuLVx0XHRtZW1jcHkod2VpZ2h0cywgc3RhdGUtXHUwMDNlaXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0fSBlbHNlIHtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXG4tXHRcdFx0d2VpZ2h0c1tpXSA9IDE7XG4tXHR9XG4rXHRzdGF0ZSA9IHdpX3N0YXRlX2dldCgpO1xuK1x0dGFibGUgPSBzdGF0ZSA/IHN0YXRlLVx1MDAzZWl3X3RhYmxlIDogTlVMTDtcbiBcbiBcdC8qIGNhbGN1bGF0ZSB0b3RhbCwgZGV0ZWN0IHN5c3RlbSBkZWZhdWx0IHVzYWdlICovXG4gXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXG4tXHRcdHdlaWdodF90b3RhbCArPSB3ZWlnaHRzW25vZGVdO1xuK1x0XHR3ZWlnaHRfdG90YWwgKz0gdGFibGUgPyB0YWJsZVtub2RlXSA6IDE7XG4gXG4gXHQvKlxuIFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXG5AQCAtMjcwNiwxMCArMjcxNSwxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0cm91bmRzID0gcmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsO1xuIFx0ZGVsdGEgPSByZW1fcGFnZXMgJSB3ZWlnaHRfdG90YWw7XG4gXHRyZXN1bWVfbm9kZSA9IG5leHRfbm9kZV9pbihwcmV2X25vZGUsIG5vZGVzKTtcbi1cdHJlc3VtZV93ZWlnaHQgPSB3ZWlnaHRzW3Jlc3VtZV9ub2RlXTtcbitcdHJlc3VtZV93ZWlnaHQgPSB0YWJsZSA/IHRhYmxlW3Jlc3VtZV9ub2RlXSA6IDE7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBubm9kZXM7IGkrKykge1xuIFx0XHRub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xuLVx0XHR3ZWlnaHQgPSB3ZWlnaHRzW25vZGVdO1xuK1x0XHR3ZWlnaHQgPSB0YWJsZSA/IHRhYmxlW25vZGVdIDogMTtcbiBcdFx0bm9kZV9wYWdlcyA9IHdlaWdodCAqIHJvdW5kcztcbiBcdFx0LyogSWYgYSBkZWx0YSBleGlzdHMsIGFkZCB0aGlzIG5vZGUncyBwb3J0aW9uIG9mIHRoZSBkZWx0YSAqL1xuIFx0XHRpZiAoZGVsdGEgXHUwMDNlIHdlaWdodCkge1xuQEAgLTI3MzUsNyArMjc0NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG4gXHR9XG4gXHRtZS1cdTAwM2VpbF9wcmV2ID0gcmVzdW1lX25vZGU7XG4gXHRtZS1cdTAwM2VpbF93ZWlnaHQgPSByZXN1bWVfd2VpZ2h0O1xuLVx0a2ZyZWUod2VpZ2h0cyk7XG4rXHR3aV9zdGF0ZV9wdXQoc3RhdGUpO1xuIFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcbiB9XG4gXG5AQCAtMzY0NCw2ICszNjUzLDcgQEAgc3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuIFx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XG4gXHRpZiAoIW5ld193aV9zdGF0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2bmV3X3dpX3N0YXRlLVx1MDAzZXJlZmNudCwgMSk7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuIFx0b2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSxcbkBAIC0zNjYwLDEwICszNjcwLDcgQEAgc3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuIFxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuLVx0aWYgKG9sZF93aV9zdGF0ZSkge1xuLVx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbi1cdFx0a2ZyZWUob2xkX3dpX3N0YXRlKTtcbi1cdH1cbitcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xuIFx0cmV0dXJuIGNvdW50O1xuIH1cbiBcbkBAIC0zNjk2LDYgKzM3MDMsNyBAQCBzdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRuZXdfd2lfc3RhdGUgPSBremFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTtcbiBcdGlmICghbmV3X3dpX3N0YXRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdHJlZmNvdW50X3NldChcdTAwMjZuZXdfd2lfc3RhdGUtXHUwMDNlcmVmY250LCAxKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXG4gXHRcdG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZVtpXSA9IDE7XG4gXG5AQCAtMzcyOCwxMCArMzczNiw3IEBAIHN0YXRpYyBzc2l6ZV90IHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiB1cGRhdGVfd2lfc3RhdGU6XG4gXHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIG5ld193aV9zdGF0ZSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG4tXHRpZiAob2xkX3dpX3N0YXRlKSB7XG4tXHRcdHN5bmNocm9uaXplX3JjdSgpO1xuLVx0XHRrZnJlZShvbGRfd2lfc3RhdGUpO1xuLVx0fVxuK1x0d2lfc3RhdGVfcHV0KG9sZF93aV9zdGF0ZSk7XG4gXHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuQEAgLTM3NzUsMTAgKzM3ODAsNyBAQCBzdGF0aWMgdm9pZCB3aV9zdGF0ZV9mcmVlKHZvaWQpXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIE5VTEwpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuIFxuLVx0aWYgKG9sZF93aV9zdGF0ZSkge1xuLVx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbi1cdFx0a2ZyZWUob2xkX3dpX3N0YXRlKTtcbi1cdH1cbitcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHdpX2F1dG9fYXR0ciA9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNjo0NC4zNTYzNjcyMDJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0NDg2MTE1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWZjb3VudC1CYXNlZCBgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGZvciBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIGluIGBtbS9tZW1wb2xpY3kuY2AuIE15IGluaXRpYWwgY29uY2VybiwgYXMgYWx3YXlzIHdoZW4gdG91Y2hpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIGV4aXN0aW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgYW5kIGBrZnJlZSgpYCBwYXR0ZXJuIHdpdGggYSByZWZjb3VudCAoYHJlZmNvdW50X3RgKSBhbmQgYGtmcmVlX3JjdSgpYCwgcGx1cyB0aGUgaW50cm9kdWN0aW9uIG9mIGB3aV9zdGF0ZV9nZXQoKWAgYW5kIGB3aV9zdGF0ZV9wdXQoKWAuIEl0IGFsc28gZWxpbWluYXRlcyB0aGUgbG9jYWwgYHdlaWdodHNgIGNvcHkgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpYCwgb3B0aW5nIHRvIHBpbiB0aGUgYHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIGRpcmVjdGx5LiBTbWFydCwgdGhhdCBzaG91bGQgYmUgYSBwZXJmb3JtYW5jZSB3aW4uXG5cblRoZSBvbGQgY29kZSB1c2VkIHRvIGBremFsbG9jKClgIHRoZSBgd2VpZ2h0c2AgYXJyYXkuIE5vdywgaXQncyB1c2luZyB0aGUgYGl3X3RhYmxlYCBkaXJlY3RseSBmcm9tIHRoZSBgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgd2hpY2ggaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NfZmxleCgpYC4gQWhhISBUaGF0J3MgdGhlIGtleS4gU2luY2UgYGt6YWxsb2NfZmxleCgpYCBpcyB1c2VkIGluIGV2ZXJ5IGFsbG9jYXRpb24gcGF0aCAoYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCwgYG5vZGVfc3RvcmVgLCBhbmQgYHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZWApLCB0aGlzIGVuc3VyZXMgdGhlIGBpd190YWJsZWAgaXMgemVyby1pbml0aWFsaXplZC4gSSB3ZW50IHRocm91Z2ggdGhlIGNvZGUgdG8gY29uZmlybSB0aGUgYGt6YWxsb2NfZmxleGAgY2FsbHMuXG5cblRoZXJlZm9yZSwgdGhlIGB3ZWlnaHRzYCBhcnJheSwgd2hpY2ggaXMgbm93IHRoZSBgaXdfdGFibGVgLCB3aWxsICphbHdheXMqIGJlIGluaXRpYWxpemVkIHRvIHplcm8uIFRoaXMgc2hvdWxkIGVsaW1pbmF0ZSB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBkdWUgdG8gdGhpcyBjaGFuZ2UuIFRoZSBwYXRjaCBpcyBhYm91dCBsaWZldGltZSBtYW5hZ2VtZW50IGFuZCBjb25jdXJyZW5jeTsgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gQW55IGJ1Z3MgaW50cm9kdWNlZCB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MuIEtBU0FOIHNob3VsZCBiZSB3ZWxsLWVxdWlwcGVkIHRvIGNhdGNoIHRob3NlLiBTbyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEl0J3MgYW4gUkNVLXRvLXJlZmNvdW50IGNvbnZlcnNpb24uXG5cbkluIHN1bW1hcnksIHRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgdGhlIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgYnkgcmVwbGFjaW5nIFJDVSB3aXRoIGEgcmVmY291bnQgYW5kIGBrZnJlZV9yY3UoKWAuIEl0IGFsc28gb3B0aW1pemVzIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKWAgYnkgZGlyZWN0bHkgcGlubmluZyB0aGUgYHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBsb2NhbCBjb3B5IG9mIHRoZSB3ZWlnaHRzIGFycmF5LiBBbGwgYWxsb2NhdGlvbnMgb2YgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCB1c2UgYGt6YWxsb2NfZmxleCgpYCwgZ3VhcmFudGVlaW5nIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0cnVjdHVyZSBpbmNsdWRpbmcgaXRzIGBpd190YWJsZWAuIEFueSBwb3RlbnRpYWwgYnVncyBhcmUgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcyB3aGljaCBzaG91bGQgYmUgZGV0ZWN0YWJsZSBieSBLQVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA3NSwiT3V0cHV0VG9rZW5zIjoyMTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNjo1NC44MDQ5ODI2MTlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgYnkgcmVwbGFjaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCAoYHJlZmNvdW50X3RgKSBhbmQgYGtmcmVlX3JjdSgpYC4gSXQgYWxzbyBvcHRpbWl6ZXMgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpYCBieSBwaW5uaW5nIHRoZSBzdGF0ZSB3aXRoIGB3aV9zdGF0ZV9nZXQoKWAgaW5zdGVhZCBvZiBjcmVhdGluZyBhIGxvY2FsIGNvcHkgb2YgdGhlIHdlaWdodHMgYXJyYXkuIEFsbCBhbGxvY2F0aW9ucyBvZiBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIHVzZSBga3phbGxvY19mbGV4KClgLCB3aGljaCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0cnVjdHVyZSBhbmQgaXRzIGZsZXhpYmxlIGFycmF5IG1lbWJlciBgaXdfdGFibGVgLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZXRpbWUgbWFuYWdlbWVudCBvZiBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIGJ5IHJlcGxhY2luZyBgc3luY2hyb25pemVfcmN1KClgIHdpdGggYSByZWZlcmVuY2UgY291bnQgKGByZWZjb3VudF90YCkgYW5kIGBrZnJlZV9yY3UoKWAuIEl0IGFsc28gb3B0aW1pemVzIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKWAgYnkgcGlubmluZyB0aGUgc3RhdGUgd2l0aCBgd2lfc3RhdGVfZ2V0KClgIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBsb2NhbCBjb3B5IG9mIHRoZSB3ZWlnaHRzIGFycmF5LiBBbGwgYWxsb2NhdGlvbnMgb2YgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCB1c2UgYGt6YWxsb2NfZmxleCgpYCwgd2hpY2ggZ3VhcmFudGVlcyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIHRoZSBzdHJ1Y3R1cmUgYW5kIGl0cyBmbGV4aWJsZSBhcnJheSBtZW1iZXIgYGl3X3RhYmxlYC4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gY29uY3VycmVuY3ksIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow7jbv5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 02:56:00 +0000 UTC FinishedAt: 2026-08-24 03:26:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2f3835771dff512750205aa5f5f61aec0f2b8cb7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2f3835771dff512750205aa5f5f61aec0f2b8cb7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA" ], "series_id": "5d24fc95-e9bb-4b9d-ad86-87c88c54e814" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_pages_bulk_mempolicy_noprof", "mempolicy_set_node_perf" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YmIzM0OywKICAgICYjMzQ7bWVtcG9saWN5X3NldF9ub2RlX3BlcmYmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZXRpbWUgbWFuYWdlbWVudCBvZiBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIGJ5IHJlcGxhY2luZyBgc3luY2hyb25pemVfcmN1KClgIHdpdGggYSByZWZlcmVuY2UgY291bnQgKGByZWZjb3VudF90YCkgYW5kIGBrZnJlZV9yY3UoKWAuIEl0IGFsc28gb3B0aW1pemVzIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKWAgYnkgcGlubmluZyB0aGUgc3RhdGUgd2l0aCBgd2lfc3RhdGVfZ2V0KClgIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBsb2NhbCBjb3B5IG9mIHRoZSB3ZWlnaHRzIGFycmF5LiBBbGwgYWxsb2NhdGlvbnMgb2YgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCB1c2UgYGt6YWxsb2NfZmxleCgpYCwgd2hpY2ggZ3VhcmFudGVlcyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIHRoZSBzdHJ1Y3R1cmUgYW5kIGl0cyBmbGV4aWJsZSBhcnJheSBtZW1iZXIgYGl3X3RhYmxlYC4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gY29uY3VycmVuY3ksIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIG1lbW9yeSBwb2xpY3kgbG9naWMgaW4gbW0vbWVtcG9saWN5LmMgYnkgaW50cm9kdWNpbmcgYSByZWZjb3VudCBhbmQgcmVwbGFjaW5nIHN5bmNocm9uaXplX3JjdSgpICYjNDM7IGtmcmVlKCkgd2l0aCBrZnJlZV9yY3UoKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgYnVsayBwYWdlIGFsbG9jYXRpb24gYW5kIHN5c2ZzIG5vZGUgcGVyZm9ybWFuY2UgdXBkYXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI3MzI4OTdkNzExYzhhZGYwNjg0NjA3N2Y0NWQ1MDM3ODNmNDQ2OTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAwMzoyNTowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jXG5pbmRleCAwZTUxNzVmMWM3NjdkLi40YTM3MjJjNjNiMzFiIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbXBvbGljeS5jXG5AQCAtMTEyLDYgJiM0MzsxMTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByaW50ay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVhZm9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ2NkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGJmbHVzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYi5oXHUwMDNlXG5AQCAtMTU2LDcgJiM0MzsxNTcsOSBAQCBzdGF0aWMgY29uc3QgaW50IHdlaWdodGluZXNzID0gMzI7XG4gICovXG4gc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUge1xuIFx0Ym9vbCBtb2RlX2F1dG87XG4tXHR1OCBpd190YWJsZVtdO1xuJiM0MztcdHJlZmNvdW50X3QgcmVmY250O1xuJiM0MztcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4mIzQzO1x0dTggaXdfdGFibGVbXSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIH07XG4gc3RhdGljIHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIF9fcmN1ICp3aV9zdGF0ZTtcbiBzdGF0aWMgdW5zaWduZWQgaW50ICpub2RlX2J3X3RhYmxlO1xuQEAgLTE2Nyw2ICYjNDM7MTcwLDI3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgKm5vZGVfYndfdGFibGU7XG4gICovXG4gc3RhdGljIERFRklORV9NVVRFWCh3aV9zdGF0ZV9sb2NrKTtcbiBcbiYjNDM7LyogQWxsb3cgc2xlZXBpbmcgcmVhZGVycyB0byBwaW4gdGhlIHN0YXRlIHRvIGF2b2lkIHRha2luZyBjb3BpZXMgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICp3aV9zdGF0ZV9nZXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHdoaWxlICgoc3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpKSkge1xuJiM0MztcdFx0aWYgKHJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzdGF0ZS1cdTAwM2VyZWZjbnQpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzdGF0ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd2lfc3RhdGVfcHV0KHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdGlmIChzdGF0ZSBcdTAwMjZcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnN0YXRlLVx1MDAzZXJlZmNudCkpXG4mIzQzO1x0XHRrZnJlZV9yY3Uoc3RhdGUsIHJjdSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHU4IGdldF9pbF93ZWlnaHQoaW50IG5vZGUpXG4ge1xuIFx0c3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKnN0YXRlO1xuQEAgLTIzNSw2ICYjNDM7MjU5LDcgQEAgaW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXHRuZXdfd2lfc3RhdGUtXHUwMDNlbW9kZV9hdXRvID0gdHJ1ZTtcbiYjNDM7XHRyZWZjb3VudF9zZXQoXHUwMDI2bmV3X3dpX3N0YXRlLVx1MDAzZXJlZmNudCwgMSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9ub2RlX2lkczsgaSYjNDM7JiM0MzspXG4gXHRcdG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZVtpXSA9IDE7XG4gXG5AQCAtMjY1LDEwICYjNDM7MjkwLDcgQEAgaW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkcylcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgbmV3X3dpX3N0YXRlKTtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbi1cdGlmIChvbGRfd2lfc3RhdGUpIHtcbi1cdFx0c3luY2hyb25pemVfcmN1KCk7XG4tXHRcdGtmcmVlKG9sZF93aV9zdGF0ZSk7XG4tXHR9XG4mIzQzO1x0d2lfc3RhdGVfcHV0KG9sZF93aV9zdGF0ZSk7XG4gb3V0OlxuIFx0a2ZyZWUob2xkX2J3KTtcbiBcdHJldHVybiAwO1xuQEAgLTI2MzIsNyAmIzQzOzI2NTQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0dW5zaWduZWQgbG9uZyBucl9hbGxvY2F0ZWQgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyByb3VuZHM7XG4gXHR1bnNpZ25lZCBsb25nIG5vZGVfcGFnZXMsIGRlbHRhO1xuLVx0dTggKndlaWdodHMsIHdlaWdodDtcbiYjNDM7XHR1OCAqdGFibGUsIHdlaWdodDtcbiBcdHVuc2lnbmVkIGludCB3ZWlnaHRfdG90YWwgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyByZW1fcGFnZXMgPSBucl9wYWdlcztcbiBcdG5vZGVtYXNrX3Qgbm9kZXM7XG5AQCAtMjY3NiwyNSAmIzQzOzI2OTgsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcbiBcdG1lLVx1MDAzZWlsX3dlaWdodCA9IDA7XG4gXHRwcmV2X25vZGUgPSBub2RlO1xuIFxuLVx0LyogY3JlYXRlIGEgbG9jYWwgY29weSBvZiBub2RlIHdlaWdodHMgdG8gb3BlcmF0ZSBvbiBvdXRzaWRlIHJjdSAqL1xuLVx0d2VpZ2h0cyA9IGt6YWxsb2MobnJfbm9kZV9pZHMsIEdGUF9LRVJORUwpO1xuLVx0aWYgKCF3ZWlnaHRzKVxuLVx0XHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xuLVxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0c3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpO1xuLVx0aWYgKHN0YXRlKSB7XG4tXHRcdG1lbWNweSh3ZWlnaHRzLCBzdGF0ZS1cdTAwM2Vpd190YWJsZSwgbnJfbm9kZV9pZHMgKiBzaXplb2YodTgpKTtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHR9IGVsc2Uge1xuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbm9kZV9pZHM7IGkmIzQzOyYjNDM7KVxuLVx0XHRcdHdlaWdodHNbaV0gPSAxO1xuLVx0fVxuJiM0MztcdHN0YXRlID0gd2lfc3RhdGVfZ2V0KCk7XG4mIzQzO1x0dGFibGUgPSBzdGF0ZSA/IHN0YXRlLVx1MDAzZWl3X3RhYmxlIDogTlVMTDtcbiBcbiBcdC8qIGNhbGN1bGF0ZSB0b3RhbCwgZGV0ZWN0IHN5c3RlbSBkZWZhdWx0IHVzYWdlICovXG4gXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXG4tXHRcdHdlaWdodF90b3RhbCAmIzQzOz0gd2VpZ2h0c1tub2RlXTtcbiYjNDM7XHRcdHdlaWdodF90b3RhbCAmIzQzOz0gdGFibGUgPyB0YWJsZVtub2RlXSA6IDE7XG4gXG4gXHQvKlxuIFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXG5AQCAtMjcwNiwxMCAmIzQzOzI3MTUsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcbiBcdHJvdW5kcyA9IHJlbV9wYWdlcyAvIHdlaWdodF90b3RhbDtcbiBcdGRlbHRhID0gcmVtX3BhZ2VzICUgd2VpZ2h0X3RvdGFsO1xuIFx0cmVzdW1lX25vZGUgPSBuZXh0X25vZGVfaW4ocHJldl9ub2RlLCBub2Rlcyk7XG4tXHRyZXN1bWVfd2VpZ2h0ID0gd2VpZ2h0c1tyZXN1bWVfbm9kZV07XG4mIzQzO1x0cmVzdW1lX3dlaWdodCA9IHRhYmxlID8gdGFibGVbcmVzdW1lX25vZGVdIDogMTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ub2RlczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0bm9kZSA9IG5leHRfbm9kZV9pbihwcmV2X25vZGUsIG5vZGVzKTtcbi1cdFx0d2VpZ2h0ID0gd2VpZ2h0c1tub2RlXTtcbiYjNDM7XHRcdHdlaWdodCA9IHRhYmxlID8gdGFibGVbbm9kZV0gOiAxO1xuIFx0XHRub2RlX3BhZ2VzID0gd2VpZ2h0ICogcm91bmRzO1xuIFx0XHQvKiBJZiBhIGRlbHRhIGV4aXN0cywgYWRkIHRoaXMgbm9kZSYjMzk7cyBwb3J0aW9uIG9mIHRoZSBkZWx0YSAqL1xuIFx0XHRpZiAoZGVsdGEgXHUwMDNlIHdlaWdodCkge1xuQEAgLTI3MzUsNyAmIzQzOzI3NDQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0fVxuIFx0bWUtXHUwMDNlaWxfcHJldiA9IHJlc3VtZV9ub2RlO1xuIFx0bWUtXHUwMDNlaWxfd2VpZ2h0ID0gcmVzdW1lX3dlaWdodDtcbi1cdGtmcmVlKHdlaWdodHMpO1xuJiM0MztcdHdpX3N0YXRlX3B1dChzdGF0ZSk7XG4gXHRyZXR1cm4gdG90YWxfYWxsb2NhdGVkO1xuIH1cbiBcbkBAIC0zNjQ0LDYgJiM0MzszNjUzLDcgQEAgc3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuIFx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XG4gXHRpZiAoIW5ld193aV9zdGF0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNm5ld193aV9zdGF0ZS1cdTAwM2VyZWZjbnQsIDEpO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbiBcdG9sZF93aV9zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQod2lfc3RhdGUsXG5AQCAtMzY2MCwxMCAmIzQzOzM2NzAsNyBAQCBzdGF0aWMgc3NpemVfdCBub2RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4gXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIG5ld193aV9zdGF0ZSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG4tXHRpZiAob2xkX3dpX3N0YXRlKSB7XG4tXHRcdHN5bmNocm9uaXplX3JjdSgpO1xuLVx0XHRrZnJlZShvbGRfd2lfc3RhdGUpO1xuLVx0fVxuJiM0MztcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xuIFx0cmV0dXJuIGNvdW50O1xuIH1cbiBcbkBAIC0zNjk2LDYgJiM0MzszNzAzLDcgQEAgc3RhdGljIHNzaXplX3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XG4gXHRpZiAoIW5ld193aV9zdGF0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNm5ld193aV9zdGF0ZS1cdTAwM2VyZWZjbnQsIDEpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbm9kZV9pZHM7IGkmIzQzOyYjNDM7KVxuIFx0XHRuZXdfd2lfc3RhdGUtXHUwMDNlaXdfdGFibGVbaV0gPSAxO1xuIFxuQEAgLTM3MjgsMTAgJiM0MzszNzM2LDcgQEAgc3RhdGljIHNzaXplX3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIHVwZGF0ZV93aV9zdGF0ZTpcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgbmV3X3dpX3N0YXRlKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbi1cdGlmIChvbGRfd2lfc3RhdGUpIHtcbi1cdFx0c3luY2hyb25pemVfcmN1KCk7XG4tXHRcdGtmcmVlKG9sZF93aV9zdGF0ZSk7XG4tXHR9XG4mIzQzO1x0d2lfc3RhdGVfcHV0KG9sZF93aV9zdGF0ZSk7XG4gXHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuQEAgLTM3NzUsMTAgJiM0MzszNzgwLDcgQEAgc3RhdGljIHZvaWQgd2lfc3RhdGVfZnJlZSh2b2lkKVxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBOVUxMKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ3aV9zdGF0ZV9sb2NrKTtcbiBcbi1cdGlmIChvbGRfd2lfc3RhdGUpIHtcbi1cdFx0c3luY2hyb25pemVfcmN1KCk7XG4tXHRcdGtmcmVlKG9sZF93aV9zdGF0ZSk7XG4tXHR9XG4mIzQzO1x0d2lfc3RhdGVfcHV0KG9sZF93aV9zdGF0ZSk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgd2lfYXV0b19hdHRyID1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZiYjMzQ7LAogICAgJiMzNDttZW1wb2xpY3lfc2V0X25vZGVfcGVyZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBtZW1vcnkgcG9saWN5IGxvZ2ljIGluIG1tL21lbXBvbGljeS5jIGJ5IGludHJvZHVjaW5nIGEgcmVmY291bnQgYW5kIHJlcGxhY2luZyBzeW5jaHJvbml6ZV9yY3UoKSAmIzQzOyBrZnJlZSgpIHdpdGgga2ZyZWVfcmN1KCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIGFuZCBzeXNmcyBub2RlIHBlcmZvcm1hbmNlIHVwZGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNzMyODk3ZDcxMWM4YWRmMDY4NDYwNzdmNDVkNTAzNzgzZjQ0NjkxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMDM6MjU6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDBlNTE3NWYxYzc2N2QuLjRhMzcyMmM2M2IzMWIgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbXBvbGljeS5jCkBAIC0xMTIsNiAmIzQzOzExMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcHJpbnRrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGVhZm9wcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2djZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWZjb3VudC5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL3RsYmZsdXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3RsYi5oJmd0OwpAQCAtMTU2LDcgJiM0MzsxNTcsOSBAQCBzdGF0aWMgY29uc3QgaW50IHdlaWdodGluZXNzID0gMzI7CiAgKi8KIHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIHsKIAlib29sIG1vZGVfYXV0bzsKLQl1OCBpd190YWJsZVtdOwomIzQzOwlyZWZjb3VudF90IHJlZmNudDsKJiM0MzsJc3RydWN0IHJjdV9oZWFkIHJjdTsKJiM0MzsJdTggaXdfdGFibGVbXSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogfTsKIHN0YXRpYyBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSBfX3JjdSAqd2lfc3RhdGU7CiBzdGF0aWMgdW5zaWduZWQgaW50ICpub2RlX2J3X3RhYmxlOwpAQCAtMTY3LDYgJiM0MzsxNzAsMjcgQEAgc3RhdGljIHVuc2lnbmVkIGludCAqbm9kZV9id190YWJsZTsKICAqLwogc3RhdGljIERFRklORV9NVVRFWCh3aV9zdGF0ZV9sb2NrKTsKIAomIzQzOy8qIEFsbG93IHNsZWVwaW5nIHJlYWRlcnMgdG8gcGluIHRoZSBzdGF0ZSB0byBhdm9pZCB0YWtpbmcgY29waWVzICovCiYjNDM7c3RhdGljIHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICp3aV9zdGF0ZV9nZXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwl3aGlsZSAoKHN0YXRlID0gcmN1X2RlcmVmZXJlbmNlKHdpX3N0YXRlKSkpIHsKJiM0MzsJCWlmIChyZWZjb3VudF9pbmNfbm90X3plcm8oJmFtcDtzdGF0ZS0mZ3Q7cmVmY250KSkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN0YXRlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB3aV9zdGF0ZV9wdXQoc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJaWYgKHN0YXRlICZhbXA7JmFtcDsgcmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7c3RhdGUtJmd0O3JlZmNudCkpCiYjNDM7CQlrZnJlZV9yY3Uoc3RhdGUsIHJjdSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHU4IGdldF9pbF93ZWlnaHQoaW50IG5vZGUpCiB7CiAJc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKnN0YXRlOwpAQCAtMjM1LDYgJiM0MzsyNTksNyBAQCBpbnQgbWVtcG9saWN5X3NldF9ub2RlX3BlcmYodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKQogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbmV3X3dpX3N0YXRlLSZndDttb2RlX2F1dG8gPSB0cnVlOwomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDtuZXdfd2lfc3RhdGUtJmd0O3JlZmNudCwgMSk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yX25vZGVfaWRzOyBpJiM0MzsmIzQzOykKIAkJbmV3X3dpX3N0YXRlLSZndDtpd190YWJsZVtpXSA9IDE7CiAKQEAgLTI2NSwxMCAmIzQzOzI5MCw3IEBAIGludCBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZih1bnNpZ25lZCBpbnQgbm9kZSwgc3RydWN0IGFjY2Vzc19jb29yZGluYXRlICpjb29yZHMpCiAJcmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpOwogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7d2lfc3RhdGVfbG9jayk7Ci0JaWYgKG9sZF93aV9zdGF0ZSkgewotCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQkJa2ZyZWUob2xkX3dpX3N0YXRlKTsKLQl9CiYjNDM7CXdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpOwogb3V0OgogCWtmcmVlKG9sZF9idyk7CiAJcmV0dXJuIDA7CkBAIC0yNjMyLDcgJiM0MzsyNjU0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCwKIAl1bnNpZ25lZCBsb25nIG5yX2FsbG9jYXRlZCA9IDA7CiAJdW5zaWduZWQgbG9uZyByb3VuZHM7CiAJdW5zaWduZWQgbG9uZyBub2RlX3BhZ2VzLCBkZWx0YTsKLQl1OCAqd2VpZ2h0cywgd2VpZ2h0OwomIzQzOwl1OCAqdGFibGUsIHdlaWdodDsKIAl1bnNpZ25lZCBpbnQgd2VpZ2h0X3RvdGFsID0gMDsKIAl1bnNpZ25lZCBsb25nIHJlbV9wYWdlcyA9IG5yX3BhZ2VzOwogCW5vZGVtYXNrX3Qgbm9kZXM7CkBAIC0yNjc2LDI1ICYjNDM7MjY5OCwxMiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLAogCW1lLSZndDtpbF93ZWlnaHQgPSAwOwogCXByZXZfbm9kZSA9IG5vZGU7CiAKLQkvKiBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIG5vZGUgd2VpZ2h0cyB0byBvcGVyYXRlIG9uIG91dHNpZGUgcmN1ICovCi0Jd2VpZ2h0cyA9IGt6YWxsb2MobnJfbm9kZV9pZHMsIEdGUF9LRVJORUwpOwotCWlmICghd2VpZ2h0cykKLQkJcmV0dXJuIHRvdGFsX2FsbG9jYXRlZDsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSk7Ci0JaWYgKHN0YXRlKSB7Ci0JCW1lbWNweSh3ZWlnaHRzLCBzdGF0ZS0mZ3Q7aXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCX0gZWxzZSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlmb3IgKGkgPSAwOyBpICZsdDsgbnJfbm9kZV9pZHM7IGkmIzQzOyYjNDM7KQotCQkJd2VpZ2h0c1tpXSA9IDE7Ci0JfQomIzQzOwlzdGF0ZSA9IHdpX3N0YXRlX2dldCgpOwomIzQzOwl0YWJsZSA9IHN0YXRlID8gc3RhdGUtJmd0O2l3X3RhYmxlIDogTlVMTDsKIAogCS8qIGNhbGN1bGF0ZSB0b3RhbCwgZGV0ZWN0IHN5c3RlbSBkZWZhdWx0IHVzYWdlICovCiAJZm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG5vZGVzKQotCQl3ZWlnaHRfdG90YWwgJiM0Mzs9IHdlaWdodHNbbm9kZV07CiYjNDM7CQl3ZWlnaHRfdG90YWwgJiM0Mzs9IHRhYmxlID8gdGFibGVbbm9kZV0gOiAxOwogCiAJLyoKIAkgKiBDYWxjdWxhdGUgcm91bmRzL3BhcnRpYWwgcm91bmRzIHRvIG1pbmltaXplIF9fYWxsb2NfcGFnZXNfYnVsayBjYWxscy4KQEAgLTI3MDYsMTAgJiM0MzsyNzE1LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsCiAJcm91bmRzID0gcmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsOwogCWRlbHRhID0gcmVtX3BhZ2VzICUgd2VpZ2h0X3RvdGFsOwogCXJlc3VtZV9ub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpOwotCXJlc3VtZV93ZWlnaHQgPSB3ZWlnaHRzW3Jlc3VtZV9ub2RlXTsKJiM0MzsJcmVzdW1lX3dlaWdodCA9IHRhYmxlID8gdGFibGVbcmVzdW1lX25vZGVdIDogMTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbm5vZGVzOyBpJiM0MzsmIzQzOykgewogCQlub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpOwotCQl3ZWlnaHQgPSB3ZWlnaHRzW25vZGVdOwomIzQzOwkJd2VpZ2h0ID0gdGFibGUgPyB0YWJsZVtub2RlXSA6IDE7CiAJCW5vZGVfcGFnZXMgPSB3ZWlnaHQgKiByb3VuZHM7CiAJCS8qIElmIGEgZGVsdGEgZXhpc3RzLCBhZGQgdGhpcyBub2RlJiMzOTtzIHBvcnRpb24gb2YgdGhlIGRlbHRhICovCiAJCWlmIChkZWx0YSAmZ3Q7IHdlaWdodCkgewpAQCAtMjczNSw3ICYjNDM7Mjc0NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsCiAJfQogCW1lLSZndDtpbF9wcmV2ID0gcmVzdW1lX25vZGU7CiAJbWUtJmd0O2lsX3dlaWdodCA9IHJlc3VtZV93ZWlnaHQ7Ci0Ja2ZyZWUod2VpZ2h0cyk7CiYjNDM7CXdpX3N0YXRlX3B1dChzdGF0ZSk7CiAJcmV0dXJuIHRvdGFsX2FsbG9jYXRlZDsKIH0KIApAQCAtMzY0NCw2ICYjNDM7MzY1Myw3IEBAIHN0YXRpYyBzc2l6ZV90IG5vZGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKIAluZXdfd2lfc3RhdGUgPSBremFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTsKIAlpZiAoIW5ld193aV9zdGF0ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO25ld193aV9zdGF0ZS0mZ3Q7cmVmY250LCAxKTsKIAogCW11dGV4X2xvY2soJmFtcDt3aV9zdGF0ZV9sb2NrKTsKIAlvbGRfd2lfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHdpX3N0YXRlLApAQCAtMzY2MCwxMCAmIzQzOzM2NzAsNyBAQCBzdGF0aWMgc3NpemVfdCBub2RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCiAKIAlyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIG5ld193aV9zdGF0ZSk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7d2lfc3RhdGVfbG9jayk7Ci0JaWYgKG9sZF93aV9zdGF0ZSkgewotCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQkJa2ZyZWUob2xkX3dpX3N0YXRlKTsKLQl9CiYjNDM7CXdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzY5Niw2ICYjNDM7MzcwMyw3IEBAIHN0YXRpYyBzc2l6ZV90IHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAluZXdfd2lfc3RhdGUgPSBremFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTsKIAlpZiAoIW5ld193aV9zdGF0ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO25ld193aV9zdGF0ZS0mZ3Q7cmVmY250LCAxKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfbm9kZV9pZHM7IGkmIzQzOyYjNDM7KQogCQluZXdfd2lfc3RhdGUtJmd0O2l3X3RhYmxlW2ldID0gMTsKIApAQCAtMzcyOCwxMCAmIzQzOzM3MzYsNyBAQCBzdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCiB1cGRhdGVfd2lfc3RhdGU6CiAJcmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpOwogCW11dGV4X3VubG9jaygmYW1wO3dpX3N0YXRlX2xvY2spOwotCWlmIChvbGRfd2lfc3RhdGUpIHsKLQkJc3luY2hyb25pemVfcmN1KCk7Ci0JCWtmcmVlKG9sZF93aV9zdGF0ZSk7Ci0JfQomIzQzOwl3aV9zdGF0ZV9wdXQob2xkX3dpX3N0YXRlKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTM3NzUsMTAgJiM0MzszNzgwLDcgQEAgc3RhdGljIHZvaWQgd2lfc3RhdGVfZnJlZSh2b2lkKQogCXJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgTlVMTCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7d2lfc3RhdGVfbG9jayk7CiAKLQlpZiAob2xkX3dpX3N0YXRlKSB7Ci0JCXN5bmNocm9uaXplX3JjdSgpOwotCQlrZnJlZShvbGRfd2lfc3RhdGUpOwotCX0KJiM0MzsJd2lfc3RhdGVfcHV0KG9sZF93aV9zdGF0ZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgd2lfYXV0b19hdHRyID0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA3OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaDogQSBNZW1vcnkgUG9saWN5IFBlcnNwZWN0aXZlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoLCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtEb2VzIHRoaXMgYWN0dWFsbHkgY2hhbmdlIHNvbWV0aGluZyBpbXBvcnRhbnQgZW5vdWdoIHRvIHdhcnJhbnQgZnV6emluZz8mIzM0OyBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCYjMzk7cyBtb2RpZnlpbmcgYG1tL21lbXBvbGljeS5jYCwgd2hpY2ggaXMgYWx3YXlzIGEgcGxhY2UgdG8gcGF5IGF0dGVudGlvbiB0by4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYXJvdW5kIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAuIEkgc2VlIGEgcmVmY291bnQgaGFzIGJlZW4gYWRkZWQsIGFuZCB0aGUgc3RhbmRhcmQgYHN5bmNocm9uaXplX3JjdSgpYCBhbmQgYGtmcmVlKClgIGRhbmNlIGhhcyBiZWVuIHN3YXBwZWQgZm9yIGBrZnJlZV9yY3UoKWAgdXNpbmcgdGhpcyBuZXcgYHdpX3N0YXRlX3B1dCgpYCBmdW5jdGlvbi4gVGhlcmUmIzM5O3MgYWxzbyBhIGNvcnJlc3BvbmRpbmcgYHdpX3N0YXRlX2dldCgpYCB1c2luZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJlZmNvdW50X2luY19ub3RfemVybygpYC4gUmlnaHQgYXdheSwgdGhpcyBzY3JlYW1zICpmdW5jdGlvbmFsIGNoYW5nZSogaW4gdGhlIG1lbW9yeSBwb2xpY3kgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9yIHdlaWdodGVkIGludGVybGVhdmUuIFNvLCB5ZXMsIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nIHB1cnBvc2VzLgoKTXkgbmV4dCBtb3ZlIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGlzIGNvZGUuIENhbiB3ZSBhY3R1YWxseSAqdHJpZ2dlciogdGhlc2UgY2hhbmdlcz8gSSBuZWVkIHRvIGNoZWNrIGlmIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGlzIHJlYWNoYWJsZSwgYW5kIGlmIGl0JiMzOTtzIGRlcGVuZGVudCBvbiBhbnkgc3BlY2lmaWMgY29uZmlncyB0aGF0IG1pZ2h0IGFmZmVjdCBmdXp6YWJpbGl0eS4gQ29uc2lkZXJpbmcgdGhlIGZpbGUsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHN0YW5kYXJkIE5VTUEgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudCBmb3IgbWVtcG9saWN5LiBTbywgSSBuZWVkIHRvIGNvbmZpcm0gYENPTkZJR19OVU1BYCBkZXBlbmRlbmN5LCBhbmQgSSYjMzk7bGwganVtcCBpbnRvIGBtbS9NYWtlZmlsZWAgdG8gdmVyaWZ5IGFueSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29tZSBpbnRvIHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtcG9saWN5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT04NT1vYmotJChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApXHQmIzQzOz0gaHVnZXRsYl92bWVtbWFwLm9cbm1tL01ha2VmaWxlOjg2Om9iai0kKENPTkZJR19OVU1BKSBcdCYjNDM7PSBtZW1wb2xpY3kub1xubW0vTWFrZWZpbGUtODctb2JqLSQoQ09ORklHX1NQQVJTRU1FTSlcdCYjNDM7PSBzcGFyc2Uub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTlVNQSBNZW1vcnkgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCB0aGUgcHJlc2VuY2Ugb2YgYENPTkZJR19OVU1BYCBpcyBjb25maXJtZWQsIHNvIE5VTUEgaXMgZGVmaW5pdGVseSBpbiBwbGF5LiBOb3csIG15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IHNoaWZ0aW5nIHRvIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgZnVuY3Rpb24gd2l0aGluIGBtbS9tZW1wb2xpY3kuY2AuIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24gdG8gYmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBidWxrIHBhZ2UgYWxsb2NhdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiB3ZWlnaHRlZCBpbnRlcmxlYXZpbmcgcG9saWNpZXMgYXJlIGFwcGxpZWQgaW4gYSBOVU1BIGVudmlyb25tZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQsIGl0cyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLiBUaGlzIGlzIGEga2V5IGZ1bmN0aW9uIHRvIGRpZyBpbnRvIHdoZW4gb3B0aW1pemluZyBvciBkZWJ1Z2dpbmcgTlVNQS1hd2FyZSBhcHBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9MjYxMT1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2NDUtXG5tbS9tZW1wb2xpY3kuYzoyNjQ2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjQ3LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmM9Mjc3Nz11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc5MS1cdGlmIChwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXG5tbS9tZW1wb2xpY3kuYzoyNzkyOlx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxubW0vbWVtcG9saWN5LmMtMjc5My1cdFx0XHRcdCAgZ2ZwLCBwb2wsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTk3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBXZWlnaHRlZCBJbnRlcmxlYXZlIE1lbW9yeSBQb2xpY3kqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgZnJvbSB0aGUgY29kZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIHNwZWNpZmljYWxseSB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYE1QT0xfV0VJR0hURURfSU5URVJMRUFWRWAgd2l0aGluIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLiBUaGlzIG1ha2VzIHNlbnNlOyB0aGF0JiMzOTtzIHRoZSBwb2ludCBvZiB0aGUgd2hvbGUgdGhpbmcuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgaG93IGRvZXMgdGhpcyB3ZWlnaHRlZCBpbnRlcmxlYXZlIHBvbGljeSAqZ2V0KiB0cmlnZ2VyZWQgaW4gdGhlIGZpcnN0IHBsYWNlPyBJIG5lZWQgdG8gbWFwIHRoZSBwYXRoIHRvIHVzZXJzcGFjZS4gIEVzc2VudGlhbGx5LCB3aGF0IHN5c2NhbGxzIGNhbiBhIHVzZXIgYWN0dWFsbHkgdXNlIHRvIHNldCB0aGlzIHBvbGljeT8gIFdlJiMzOTtyZSB0YWxraW5nIGBtYmluZGAgb3IgYHNldF9tZW1wb2xpY3lgIGNhbGxzLCByaWdodD8gIFRoYXQmIzM5O3Mgd2hlcmUgdGhpcyB3aG9sZSBpbnRlcmxlYXZlL3dlaWdodCBtZWNoYW5pc20gZ2V0cyBzZXQgdXAgYW5kIHB1dCBpbnRvIGVmZmVjdC4gR290dGEgZG91YmxlLWNoZWNrIHRob3NlIHN5c2NhbGwgaW1wbGVtZW50YXRpb25zIHRvIGVuc3VyZSBldmVyeXRoaW5nJiMzOTtzIGhvb2tlZCB1cCBjb3JyZWN0bHkgYW5kIHRoYXQgdGhlIHBvbGljeSBiZWhhdmlvciBtYXRjaGVzIGV4cGVjdGF0aW9ucyB3aGVuIHNldCBmcm9tIGEgdXNlciBhcHBsaWNhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHBhdGggaXMgc2VjdXJlIGFuZCB0aGF0IHRoZSB3ZWlnaHRzIGFyZSByZXNwZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9NTkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtcG9saWN5X29wZXJhdGlvbnMgbXBvbF9vcHNbTVBPTF9NQVhdID0ge1xuLS1cbm1tL21lbXBvbGljeS5jLTYxNS1cdH0sXG5tbS9tZW1wb2xpY3kuYzo2MTY6XHRbTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFXSA9IHtcbm1tL21lbXBvbGljeS5jLTYxNy1cdFx0LmNyZWF0ZSA9IG1wb2xfbmV3X25vZGVtYXNrLFxuLS1cbm1tL21lbXBvbGljeS5jPTEwODM9c3RhdGljIGxvbmcgZG9fc2V0X21lbXBvbGljeSh1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBzaG9ydCBmbGFncyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMTA5LVx0aWYgKG5ldyBcdTAwMjZcdTAwMjYgKG5ldy1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSB8fFxubW0vbWVtcG9saWN5LmM6MTExMDpcdFx0ICAgIG5ldy1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkpIHtcbm1tL21lbXBvbGljeS5jLTExMTEtXHRcdGN1cnJlbnQtXHUwMDNlaWxfcHJldiA9IE1BWF9OVU1OT0RFUy0xO1xuLS1cbm1tL21lbXBvbGljeS5jPTExMjc9c3RhdGljIHZvaWQgZ2V0X3BvbGljeV9ub2RlbWFzayhzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIG5vZGVtYXNrX3QgKm5vZGVzKVxuLS1cbm1tL21lbXBvbGljeS5jLTExMzctXHRjYXNlIE1QT0xfUFJFRkVSUkVEX01BTlk6XG5tbS9tZW1wb2xpY3kuYzoxMTM4Olx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XG5tbS9tZW1wb2xpY3kuYy0xMTM5LVx0XHQqbm9kZXMgPSBwb2wtXHUwMDNlbm9kZXM7XG4tLVxubW0vbWVtcG9saWN5LmM9MTE2Mz1zdGF0aWMgbG9uZyBkb19nZXRfbWVtcG9saWN5KGludCAqcG9saWN5LCBub2RlbWFza190ICpubWFzayxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMjIzLVx0XHR9IGVsc2UgaWYgKHBvbCA9PSBjdXJyZW50LVx1MDAzZW1lbXBvbGljeSBcdTAwMjZcdTAwMjZcbm1tL21lbXBvbGljeS5jOjEyMjQ6XHRcdFx0XHRwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpIHtcbm1tL21lbXBvbGljeS5jLTEyMjUtXHRcdFx0aWYgKGN1cnJlbnQtXHUwMDNlaWxfd2VpZ2h0KVxuLS1cbm1tL21lbXBvbGljeS5jPTE1MDI9c3RhdGljIGxvbmcgZG9fbWJpbmQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sXG4tLVxubW0vbWVtcG9saWN5LmMtMTU5Ny1cdFx0aWYgKG5ldy1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSB8fFxubW0vbWVtcG9saWN5LmM6MTU5ODpcdFx0ICAgIG5ldy1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkge1xubW0vbWVtcG9saWN5LmMtMTU5OS1cdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLS1cbm1tL21lbXBvbGljeS5jPTIwMzQ9c3RydWN0IG1lbXBvbGljeSAqX19nZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMDQ3LSAqIEBpbHg6IGludGVybGVhdmUgaW5kZXggKG91dHB1dCksIGZvciB1c2Ugb25seSB3aGVuIE1QT0xfSU5URVJMRUFWRSBvclxubW0vbWVtcG9saWN5LmM6MjA0ODogKiAgICAgICBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVcbm1tL21lbXBvbGljeS5jLTIwNDktICpcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMDU3PXN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbXBvbGljeS5jLTIwNjUtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFIHx8XG5tbS9tZW1wb2xpY3kuYzoyMDY2Olx0ICAgIHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkge1xubW0vbWVtcG9saWN5LmMtMjA2Ny1cdFx0KmlseCAmIzQzOz0gdm1hLVx1MDAzZXZtX3Bnb2ZmIFx1MDAzZVx1MDAzZSBvcmRlcjtcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMTU5PXVuc2lnbmVkIGludCBtZW1wb2xpY3lfc2xhYl9ub2RlKHZvaWQpXG4tLVxubW0vbWVtcG9saWN5LmMtMjE3Ny1cbm1tL21lbXBvbGljeS5jOjIxNzg6XHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcbm1tL21lbXBvbGljeS5jLTIxNzktXHRcdHJldHVybiB3ZWlnaHRlZF9pbnRlcmxlYXZlX25vZGVzKHBvbGljeSk7XG4tLVxubW0vbWVtcG9saWN5LmM9MjI4NT1zdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X25vZGVtYXNrKGdmcF90IGdmcCwgc3RydWN0IG1lbXBvbGljeSAqcG9sLFxuLS1cbm1tL21lbXBvbGljeS5jLTIzMTgtXHRcdGJyZWFrO1xubW0vbWVtcG9saWN5LmM6MjMxOTpcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmMtMjMyMC1cdFx0Km5pZCA9IChpbHggPT0gTk9fSU5URVJMRUFWRV9JTkRFWCkgP1xuLS1cbm1tL21lbXBvbGljeS5jPTIzNzE9Ym9vbCBpbml0X25vZGVtYXNrX29mX21lbXBvbGljeShub2RlbWFza190ICptYXNrKVxuLS1cbm1tL21lbXBvbGljeS5jLTIzODQtXHRjYXNlIE1QT0xfSU5URVJMRUFWRTpcbm1tL21lbXBvbGljeS5jOjIzODU6XHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcbm1tL21lbXBvbGljeS5jLTIzODYtXHRcdCptYXNrID0gbWVtcG9saWN5LVx1MDAzZW5vZGVzO1xuLS1cbm1tL21lbXBvbGljeS5jPTI0NjE9c3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19tcG9sKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL21lbXBvbGljeS5jLTI0ODUtXHRcdGlmIChwb2wtXHUwMDNlbW9kZSAhPSBNUE9MX0lOVEVSTEVBVkUgXHUwMDI2XHUwMDI2XG5tbS9tZW1wb2xpY3kuYzoyNDg2Olx0XHQgICAgcG9sLVx1MDAzZW1vZGUgIT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFIFx1MDAyNlx1MDAyNlxubW0vbWVtcG9saWN5LmMtMjQ4Ny1cdFx0ICAgICghbm9kZW1hc2sgfHwgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaykpKSB7XG4tLVxubW0vbWVtcG9saWN5LmMtMjUwOC1cdGlmICh1bmxpa2VseShwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUgfHxcbm1tL21lbXBvbGljeS5jOjI1MDk6XHRcdCAgICAgcG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKSBcdTAwMjZcdTAwMjYgcGFnZSkge1xubW0vbWVtcG9saWN5LmMtMjUxMC1cdFx0Lyogc2tpcCBOVU1BX0lOVEVSTEVBVkVfSElUIHVwZGF0ZSBpZiBudW1hIHN0YXRzIGlzIGRpc2FibGVkICovXG4tLVxubW0vbWVtcG9saWN5LmM9Mjc3Nz11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc5MC1cbm1tL21lbXBvbGljeS5jOjI3OTE6XHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxubW0vbWVtcG9saWN5LmMtMjc5Mi1cdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcbi0tXG5tbS9tZW1wb2xpY3kuYz0yODUxPWJvb2wgX19tcG9sX2VxdWFsKHN0cnVjdCBtZW1wb2xpY3kgKmEsIHN0cnVjdCBtZW1wb2xpY3kgKmIpXG4tLVxubW0vbWVtcG9saWN5LmMtMjg2OS1cdGNhc2UgTVBPTF9QUkVGRVJSRURfTUFOWTpcbm1tL21lbXBvbGljeS5jOjI4NzA6XHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcbm1tL21lbXBvbGljeS5jLTI4NzEtXHRcdHJldHVybiAhIW5vZGVzX2VxdWFsKGEtXHUwMDNlbm9kZXMsIGItXHUwMDNlbm9kZXMpO1xuLS1cbm1tL21lbXBvbGljeS5jPTI5ODc9aW50IG1wb2xfbWlzcGxhY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL21lbXBvbGljeS5jLTMwMTMtXG5tbS9tZW1wb2xpY3kuYzozMDE0Olx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XG5tbS9tZW1wb2xpY3kuYy0zMDE1LVx0XHRwb2xuaWQgPSB3ZWlnaHRlZF9pbnRlcmxlYXZlX25pZChwb2wsIGlseCk7XG4tLVxubW0vbWVtcG9saWN5LmM9MzQwMD1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBvbGljeV9tb2Rlc1tdID1cbi0tXG5tbS9tZW1wb2xpY3kuYy0zNDA1LVx0W01QT0xfSU5URVJMRUFWRV0gPSBcJiMzNDtpbnRlcmxlYXZlXCYjMzQ7LFxubW0vbWVtcG9saWN5LmM6MzQwNjpcdFtNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVdID0gXCYjMzQ7d2VpZ2h0ZWQgaW50ZXJsZWF2ZVwmIzM0Oyxcbm1tL21lbXBvbGljeS5jLTM0MDctXHRbTVBPTF9MT0NBTF0gICAgICA9IFwmIzM0O2xvY2FsXCYjMzQ7LFxuLS1cbm1tL21lbXBvbGljeS5jPTM0MjI9aW50IG1wb2xfcGFyc2Vfc3RyKGNoYXIgKnN0ciwgc3RydWN0IG1lbXBvbGljeSAqKm1wb2wpXG4tLVxubW0vbWVtcG9saWN5LmMtMzQ2NS1cdGNhc2UgTVBPTF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmM6MzQ2NjpcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmMtMzQ2Ny1cdFx0Lypcbi0tXG5tbS9tZW1wb2xpY3kuYz0zNTU4PXZvaWQgbXBvbF90b19zdHIoY2hhciAqYnVmZmVyLCBpbnQgbWF4bGVuLCBzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXG4tLVxubW0vbWVtcG9saWN5LmMtMzU4MC1cdGNhc2UgTVBPTF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmM6MzU4MTpcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmMtMzU4Mi1cdFx0bm9kZXMgPSBwb2wtXHUwMDNlbm9kZXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUxMgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIE1lbW9yeSBQb2xpY3kgQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUga2V5IGFyZWFzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHdlaWdodGVkIGludGVybGVhdmUgYW5kIGJ1bGsgcGFnZSBhbGxvY2F0aW9uLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAsIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLCBhbmQgYSBmZXcgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgbm9kZV9zdG9yZWAsIGB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmVgLCBhbmQgYHdpX3N0YXRlX2ZyZWVgLiAgR2l2ZW4gbXkga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwsIEkga25vdyB0aG9zZSBzeXNmcyBlbnRyaWVzIGZvciB3ZWlnaHRlZCBpbnRlcmxlYXZlIGFyZSBkZWZpbmVkIHdpdGhpbiBgbW0vbWVtcG9saWN5LmNgLiAgSSBuZWVkIHRvIGNoZWNrIGhvdyBgbm9kZV9zdG9yZWAgaXMgYmVpbmcgdXNlZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGBub2RlX3N0b3JlYCBpcyByZWFjaGFibGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IHBvbGljeSBpbmZyYXN0cnVjdHVyZS4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZG9lcyB0byBwYWdlIGFsbG9jYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm9kZV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTM2Mjk9c3RhdGljIHNzaXplX3Qgbm9kZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vbWVtcG9saWN5LmMtMzYzOS1cbm1tL21lbXBvbGljeS5jOjM2NDA6c3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxubW0vbWVtcG9saWN5LmMtMzY0MS1cdFx0XHQgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL21lbXBvbGljeS5jPTM4MDY9c3RhdGljIGludCBzeXNmc193aV9ub2RlX2FkZChpbnQgbmlkKVxuLS1cbm1tL21lbXBvbGljeS5jLTM4MzAtXHRuZXdfYXR0ci1cdTAwM2Vrb2JqX2F0dHIuc2hvdyA9IG5vZGVfc2hvdztcbm1tL21lbXBvbGljeS5jOjM4MzE6XHRuZXdfYXR0ci1cdTAwM2Vrb2JqX2F0dHIuc3RvcmUgPSBub2RlX3N0b3JlO1xubW0vbWVtcG9saWN5LmMtMzgzMi1cdG5ld19hdHRyLVx1MDAzZW5pZCA9IG5pZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA2MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgV2VpZ2h0ZWQgSW50ZXJsZWF2ZSBNZW1vcnkgUG9saWN5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIHdlaWdodGVkIGludGVybGVhdmUgbWVtb3J5IHBvbGljeSBpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgYHN5c2ZzYCBlbnRyaWVzIGZvciB0aGlzIHBvbGljeSwgdGhlIG9uZXMgdGhhdCBsaXZlIGluIHBhdGhzIGxpa2UgYC9zeXMva2VybmVsL21tL21lbXBvbGljeS93ZWlnaHRlZF9pbnRlcmxlYXZlL25vZGVOYCwgYXJlIGNyZWF0ZWQgdGhyb3VnaCBjYWxscyB0byBgc3lzZnNfd2lfbm9kZV9hZGRgIGR1cmluZyBlaXRoZXIgaW5pdGlhbGl6YXRpb24gb3IgaG90cGx1ZyBldmVudHMuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFuIGltcHJvdmVtZW50IGFyb3VuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSBmbGF3ZWQgYnkgdXNpbmcgYHN5bmNocm9uaXplX3JjdSgpYCB3aGlsZSBhIG11dGV4IHdhcyBoZWxkLCB3aGljaCBpcyBhIGJpZyBuby1ubywgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGl0JiMzOTtzIGJlZW4gb3B0aW1pemVkIHRvIGF2b2lkIGl0LiBUaGUgc3BlY2lmaWMgY2hhbmdlIGludm9sdmVzIGludHJvZHVjaW5nIGByZWZjb3VudF90YCB0byB0aGUgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCBhbmQgcmVwbGFjaW5nIHRoZSBwcm9ibGVtYXRpYyBgc3luY2hyb25pemVfcmN1YCAmIzQzOyBga2ZyZWVgIHNlcXVlbmNlIHdpdGggYSBtb3JlIFJDVS1mcmllbmRseSBga2ZyZWVfcmN1YC4gR29vZC4gUmVmY291bnRzIGFyZSBnZW5lcmFsbHkgYSBiZXR0ZXIgYXBwcm9hY2guCgpUaGUgcGF0Y2ggYWxzbyBvcHRpbWl6ZXMgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAuIEl0IG5vdyB1c2VzIGB3aV9zdGF0ZV9nZXQoKWAsIHdoaWNoIGluY3JlbWVudHMgdGhlIHJlZmNvdW50LCByYXRoZXIgdGhhbiBhbGxvY2F0aW5nIGEgbG9jYWwgY29weSBvZiB3ZWlnaHRzIHdpdGggYGt6YWxsb2NgLiBUaGlzIGxvb2tzIGxpa2UgYSBkZWZpbml0ZSBwZXJmb3JtYW5jZSBib29zdCBhbmQgbGVzcyBjaGFuY2Ugb2YgbWVtb3J5IGxlYWtzLgoKR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQmIzM5O3MgcmlwZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cyBmb3IgdGhlIGZ1enplci4gTXkgaW5pdGlhbCB0YXJnZXQgZnVuY3Rpb25zIHNob3VsZCBiZToKCiogICBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCAob3IgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgc2luY2UgdGhlIGxhdHRlciBjYWxscyB0aGUgZm9ybWVyKS4KKiAgIGBub2RlX3N0b3JlYAoqICAgYHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZWAKKiAgIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAKCkl0IGxvb2tzIGxpa2UgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxpbmcgZnVuY3Rpb24sIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIHRvIHNlZSBpZiB0aGF0JiMzOTtzIGEgdmlhYmxlIG9wdGlvbi4gT2theSwgbGV0IG1lIGNvbmZpcm0uLi4gSSBuZWVkIHRvIGNoZWNrIGlmIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9Mjc1MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzc2LSAqL1xubW0vbWVtcG9saWN5LmM6Mjc3Nzp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNzc4LVx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbGx5IEV4cG9zZWQgTWVtb3J5IFBvbGljeSBGdW5jdGlvbioqCgpPa2F5LCBzbyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBpcyBleHBvc2VkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCB1c3VhbGx5IGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggbWVtb3J5IHBvbGljeSBhcmUgY2FyZWZ1bGx5IGd1YXJkZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCwgYW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGl0cyB2aXNpYmlsaXR5LiBUaGUgbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyBhIGJ1bGsgYWxsb2NhdGlvbiB3aXRoIG5vIHByb2ZpbGluZywgYW5kIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBtZW1wb2xpY3kuIE15IG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IHRvIGludmVzdGlnYXRlIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgaW50ZXJhY3Rpb25zLCBzZXR0aW5ncyBvciBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBvciB1c2UuIEtub3dpbmcgaG93IHRoYXQgZnVuY3Rpb24gd29ya3Mgd2l0aCBtZW1vcnkgcG9saWNpZXMgaXMga2V5LiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIGNvbnRleHQgYW5kIGltcGFjdCBvZiBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCYjMzk7cyBleHRlcm5hbCBhdmFpbGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXBvbGljeV9zZXRfbm9kZV9wZXJmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9MjExPXN0YXRpYyB2b2lkIHJlZHVjZV9pbnRlcmxlYXZlX3dlaWdodHModW5zaWduZWQgaW50ICpidywgdTggKm5ld19pdylcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNDMtXG5tbS9tZW1wb2xpY3kuYzoyNDQ6aW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3Jkcylcbm1tL21lbXBvbGljeS5jLTI0NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzOTkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIHZpc2liaWxpdHkgb2YgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgZXhwb3J0ZWQgb3IgaWYgaXQmIzM5O3Mgc3RhdGljLiBSaWdodCwgSSByZWNhbGwgaXQmIzM5O3MgZGVmaW5pdGVseSAqbm90KiBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGF2YWlsYWJsZSBmb3IgdXNlIG91dHNpZGUgdGhlIGN1cnJlbnQgbW9kdWxlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGl0JiMzOTtzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4gVGltZSB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbCBzaXRlcyBhbmQgbWFwIG91dCBpdHMgdXNhZ2UuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1wb2xpY3lfc2V0X25vZGVfcGVyZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2Uvbm9kZS5jPTIxNj12b2lkIG5vZGVfc2V0X3BlcmZfYXR0cnModW5zaWduZWQgaW50IG5pZCwgc3RydWN0IGFjY2Vzc19jb29yZGluYXRlICpjb29yZCxcbi0tXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTI0Mi1cdGlmIChhY2Nlc3MgPT0gQUNDRVNTX0NPT1JESU5BVEVfQ1BVKSB7XG5kcml2ZXJzL2Jhc2Uvbm9kZS5jOjI0MzpcdFx0aWYgKG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKG5pZCwgY29vcmQpKSB7XG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTI0NC1cdFx0XHRwcl9pbmZvKFwmIzM0O2ZhaWxlZCB0byBzZXQgbWVtcG9saWN5IGF0dHJzIGZvciBub2RlICVkXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvYmFzZS9ub2RlLmM9MjU3PXZvaWQgbm9kZV91cGRhdGVfcGVyZl9hdHRycyh1bnNpZ25lZCBpbnQgbmlkLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkLFxuLS1cbmRyaXZlcnMvYmFzZS9ub2RlLmMtMjgzLVxuZHJpdmVycy9iYXNlL25vZGUuYzoyODQ6XHRpZiAobWVtcG9saWN5X3NldF9ub2RlX3BlcmYobmlkLCBjb29yZCkpXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTI4NS1cdFx0cHJfaW5mbyhcJiMzNDtmYWlsZWQgdG8gc2V0IG1lbXBvbGljeSBhdHRycyBmb3Igbm9kZSAlZFxcblwmIzM0OywgbmlkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oPTE4MD1leHRlcm4gYm9vbCBhcHBseV9wb2xpY3lfem9uZShzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3ksIGVudW0gem9uZV90eXBlIHpvbmUpO1xuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0xODEtXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oOjE4MjpleHRlcm4gaW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0xODMtXHRcdFx0XHQgICBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3Jkcyk7XG4tLVxubW0vbWVtcG9saWN5LmM9MjExPXN0YXRpYyB2b2lkIHJlZHVjZV9pbnRlcmxlYXZlX3dlaWdodHModW5zaWduZWQgaW50ICpidywgdTggKm5ld19pdylcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNDMtXG5tbS9tZW1wb2xpY3kuYzoyNDQ6aW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3Jkcylcbm1tL21lbXBvbGljeS5jLTI0NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDM5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIE5VTUEgUGVyZm9ybWFuY2UgQXR0cmlidXRlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgY29kZSByZWxhdGVkIHRvIG5vZGUgcGVyZm9ybWFuY2UgYXR0cmlidXRlcyDigJMgc3BlY2lmaWNhbGx5LCBmdW5jdGlvbnMgY2FsbGVkIGZyb20gYG5vZGVfc2V0X3BlcmZfYXR0cnNgIGFuZCBgbm9kZV91cGRhdGVfcGVyZl9hdHRyc2Agd2l0aGluIGBkcml2ZXJzL2Jhc2Uvbm9kZS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgbGlrZWx5IHRvdWNoZXMgb24gQUNQSSBITUFUIG9yIHNpbWlsYXIgbWVjaGFuaXNtcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuCgpMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBhIGNvdXBsZSBvZiByZWxhdGVkIGZ1bmN0aW9ucywgYG5vZGVfc3RvcmVgIGFuZCBgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlYCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBnZXQgYm9nZ2VkIGRvd24gaW4gaW50ZXJuYWwgc3RhdGljIGZ1bmN0aW9ucy4gQXJlIHRoZXJlIHB1YmxpYyBpbnRlcmZhY2VzIHRoYXQgbWF0dGVyPwoKYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgc2VlbXMgbGlrZSBhIGdvb2QgdGFyZ2V0IHRvIGtlZXAgaW4gbWluZCwgYW5kIHRoYXQgc2VlbXMgcHJvbWlzaW5nLCBidXQgSSBzaG91bGQgbG9vayBhdCBhbGwgdGhlIGVudHJ5IHBvaW50cyBpbiB0aGlzIGFyZWEuIGBkb19tYmluZGAgb3IgYGRvX3NldF9tZW1wb2xpY3lgIGxvb2sgaW50ZXJlc3RpbmcsIHRoZXkmIzM5O3JlIHN0YXRpYyBpbnRlcm5hbGx5LCBidXQgY2FsbGVkIHZpYSB0aGUgYHN5c19tYmluZGAgYW5kIGBzeXNfc2V0X21lbXBvbGljeWAgc3lzY2FsbHMsIHNvIHRoZXJlJiMzOTtzIGFuIGV4dGVybmFsIHBvaW50IG9mIGludGVyYWN0aW9uIHRoZXJlLgoKU28sIHRvIGZvY3VzIG15IGFuYWx5c2lzLCBJJiMzOTttIGdvaW5nIHRvIGNvbmNlbnRyYXRlIG9uIGBzeXNfbWJpbmRgLCBgc3lzX3NldF9tZW1wb2xpY3lgLCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCwgYW5kIGFsc28gYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCwgaXQgc2VlbXMgbGlrZSBpdCBtaWdodCBiZSBhbiBpbXBvcnRhbnQgZnVuY3Rpb24uCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBDT05GSUdfTlVNQWAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCYjMzk7cyByZWxldmFudCBoZXJlIG9yIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBrbm9icyBmb3Igd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBvciBzaW1pbGFyIGZlYXR1cmVzLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHRoaW5nIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9NTkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtcG9saWN5X29wZXJhdGlvbnMgbXBvbF9vcHNbTVBPTF9NQVhdID0ge1xuLS1cbm1tL21lbXBvbGljeS5jLTYxNS1cdH0sXG5tbS9tZW1wb2xpY3kuYzo2MTY6XHRbTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFXSA9IHtcbm1tL21lbXBvbGljeS5jLTYxNy1cdFx0LmNyZWF0ZSA9IG1wb2xfbmV3X25vZGVtYXNrLFxuLS1cbm1tL21lbXBvbGljeS5jPTEwODM9c3RhdGljIGxvbmcgZG9fc2V0X21lbXBvbGljeSh1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBzaG9ydCBmbGFncyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMTA5LVx0aWYgKG5ldyBcdTAwMjZcdTAwMjYgKG5ldy1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSB8fFxubW0vbWVtcG9saWN5LmM6MTExMDpcdFx0ICAgIG5ldy1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkpIHtcbm1tL21lbXBvbGljeS5jLTExMTEtXHRcdGN1cnJlbnQtXHUwMDNlaWxfcHJldiA9IE1BWF9OVU1OT0RFUy0xO1xuLS1cbm1tL21lbXBvbGljeS5jPTExMjc9c3RhdGljIHZvaWQgZ2V0X3BvbGljeV9ub2RlbWFzayhzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIG5vZGVtYXNrX3QgKm5vZGVzKVxuLS1cbm1tL21lbXBvbGljeS5jLTExMzctXHRjYXNlIE1QT0xfUFJFRkVSUkVEX01BTlk6XG5tbS9tZW1wb2xpY3kuYzoxMTM4Olx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XG5tbS9tZW1wb2xpY3kuYy0xMTM5LVx0XHQqbm9kZXMgPSBwb2wtXHUwMDNlbm9kZXM7XG4tLVxubW0vbWVtcG9saWN5LmM9MTE2Mz1zdGF0aWMgbG9uZyBkb19nZXRfbWVtcG9saWN5KGludCAqcG9saWN5LCBub2RlbWFza190ICpubWFzayxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMjIzLVx0XHR9IGVsc2UgaWYgKHBvbCA9PSBjdXJyZW50LVx1MDAzZW1lbXBvbGljeSBcdTAwMjZcdTAwMjZcbm1tL21lbXBvbGljeS5jOjEyMjQ6XHRcdFx0XHRwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpIHtcbm1tL21lbXBvbGljeS5jLTEyMjUtXHRcdFx0aWYgKGN1cnJlbnQtXHUwMDNlaWxfd2VpZ2h0KVxuLS1cbm1tL21lbXBvbGljeS5jPTE1MDI9c3RhdGljIGxvbmcgZG9fbWJpbmQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sXG4tLVxubW0vbWVtcG9saWN5LmMtMTU5Ny1cdFx0aWYgKG5ldy1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSB8fFxubW0vbWVtcG9saWN5LmM6MTU5ODpcdFx0ICAgIG5ldy1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkge1xubW0vbWVtcG9saWN5LmMtMTU5OS1cdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLS1cbm1tL21lbXBvbGljeS5jPTIwMzQ9c3RydWN0IG1lbXBvbGljeSAqX19nZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMDQ3LSAqIEBpbHg6IGludGVybGVhdmUgaW5kZXggKG91dHB1dCksIGZvciB1c2Ugb25seSB3aGVuIE1QT0xfSU5URVJMRUFWRSBvclxubW0vbWVtcG9saWN5LmM6MjA0ODogKiAgICAgICBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVcbm1tL21lbXBvbGljeS5jLTIwNDktICpcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMDU3PXN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbXBvbGljeS5jLTIwNjUtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFIHx8XG5tbS9tZW1wb2xpY3kuYzoyMDY2Olx0ICAgIHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkge1xubW0vbWVtcG9saWN5LmMtMjA2Ny1cdFx0KmlseCAmIzQzOz0gdm1hLVx1MDAzZXZtX3Bnb2ZmIFx1MDAzZVx1MDAzZSBvcmRlcjtcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMTU5PXVuc2lnbmVkIGludCBtZW1wb2xpY3lfc2xhYl9ub2RlKHZvaWQpXG4tLVxubW0vbWVtcG9saWN5LmMtMjE3Ny1cbm1tL21lbXBvbGljeS5jOjIxNzg6XHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcbm1tL21lbXBvbGljeS5jLTIxNzktXHRcdHJldHVybiB3ZWlnaHRlZF9pbnRlcmxlYXZlX25vZGVzKHBvbGljeSk7XG4tLVxubW0vbWVtcG9saWN5LmM9MjI4NT1zdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X25vZGVtYXNrKGdmcF90IGdmcCwgc3RydWN0IG1lbXBvbGljeSAqcG9sLFxuLS1cbm1tL21lbXBvbGljeS5jLTIzMTgtXHRcdGJyZWFrO1xubW0vbWVtcG9saWN5LmM6MjMxOTpcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmMtMjMyMC1cdFx0Km5pZCA9IChpbHggPT0gTk9fSU5URVJMRUFWRV9JTkRFWCkgP1xuLS1cbm1tL21lbXBvbGljeS5jPTIzNzE9Ym9vbCBpbml0X25vZGVtYXNrX29mX21lbXBvbGljeShub2RlbWFza190ICptYXNrKVxuLS1cbm1tL21lbXBvbGljeS5jLTIzODQtXHRjYXNlIE1QT0xfSU5URVJMRUFWRTpcbm1tL21lbXBvbGljeS5jOjIzODU6XHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcbm1tL21lbXBvbGljeS5jLTIzODYtXHRcdCptYXNrID0gbWVtcG9saWN5LVx1MDAzZW5vZGVzO1xuLS1cbm1tL21lbXBvbGljeS5jPTI0NjE9c3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19tcG9sKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL21lbXBvbGljeS5jLTI0ODUtXHRcdGlmIChwb2wtXHUwMDNlbW9kZSAhPSBNUE9MX0lOVEVSTEVBVkUgXHUwMDI2XHUwMDI2XG5tbS9tZW1wb2xpY3kuYzoyNDg2Olx0XHQgICAgcG9sLVx1MDAzZW1vZGUgIT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFIFx1MDAyNlx1MDAyNlxubW0vbWVtcG9saWN5LmMtMjQ4Ny1cdFx0ICAgICghbm9kZW1hc2sgfHwgbm9kZV9pc3NldChuaWQsICpub2RlbWFzaykpKSB7XG4tLVxubW0vbWVtcG9saWN5LmMtMjUwOC1cdGlmICh1bmxpa2VseShwb2wtXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUgfHxcbm1tL21lbXBvbGljeS5jOjI1MDk6XHRcdCAgICAgcG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKSBcdTAwMjZcdTAwMjYgcGFnZSkge1xubW0vbWVtcG9saWN5LmMtMjUxMC1cdFx0Lyogc2tpcCBOVU1BX0lOVEVSTEVBVkVfSElUIHVwZGF0ZSBpZiBudW1hIHN0YXRzIGlzIGRpc2FibGVkICovXG4tLVxubW0vbWVtcG9saWN5LmM9Mjc3Nz11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc5MC1cbm1tL21lbXBvbGljeS5jOjI3OTE6XHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxubW0vbWVtcG9saWN5LmMtMjc5Mi1cdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcbi0tXG5tbS9tZW1wb2xpY3kuYz0yODUxPWJvb2wgX19tcG9sX2VxdWFsKHN0cnVjdCBtZW1wb2xpY3kgKmEsIHN0cnVjdCBtZW1wb2xpY3kgKmIpXG4tLVxubW0vbWVtcG9saWN5LmMtMjg2OS1cdGNhc2UgTVBPTF9QUkVGRVJSRURfTUFOWTpcbm1tL21lbXBvbGljeS5jOjI4NzA6XHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcbm1tL21lbXBvbGljeS5jLTI4NzEtXHRcdHJldHVybiAhIW5vZGVzX2VxdWFsKGEtXHUwMDNlbm9kZXMsIGItXHUwMDNlbm9kZXMpO1xuLS1cbm1tL21lbXBvbGljeS5jPTI5ODc9aW50IG1wb2xfbWlzcGxhY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL21lbXBvbGljeS5jLTMwMTMtXG5tbS9tZW1wb2xpY3kuYzozMDE0Olx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XG5tbS9tZW1wb2xpY3kuYy0zMDE1LVx0XHRwb2xuaWQgPSB3ZWlnaHRlZF9pbnRlcmxlYXZlX25pZChwb2wsIGlseCk7XG4tLVxubW0vbWVtcG9saWN5LmM9MzQwMD1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBvbGljeV9tb2Rlc1tdID1cbi0tXG5tbS9tZW1wb2xpY3kuYy0zNDA1LVx0W01QT0xfSU5URVJMRUFWRV0gPSBcJiMzNDtpbnRlcmxlYXZlXCYjMzQ7LFxubW0vbWVtcG9saWN5LmM6MzQwNjpcdFtNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVdID0gXCYjMzQ7d2VpZ2h0ZWQgaW50ZXJsZWF2ZVwmIzM0Oyxcbm1tL21lbXBvbGljeS5jLTM0MDctXHRbTVBPTF9MT0NBTF0gICAgICA9IFwmIzM0O2xvY2FsXCYjMzQ7LFxuLS1cbm1tL21lbXBvbGljeS5jPTM0MjI9aW50IG1wb2xfcGFyc2Vfc3RyKGNoYXIgKnN0ciwgc3RydWN0IG1lbXBvbGljeSAqKm1wb2wpXG4tLVxubW0vbWVtcG9saWN5LmMtMzQ2NS1cdGNhc2UgTVBPTF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmM6MzQ2NjpcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmMtMzQ2Ny1cdFx0Lypcbi0tXG5tbS9tZW1wb2xpY3kuYz0zNTU4PXZvaWQgbXBvbF90b19zdHIoY2hhciAqYnVmZmVyLCBpbnQgbWF4bGVuLCBzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXG4tLVxubW0vbWVtcG9saWN5LmMtMzU4MC1cdGNhc2UgTVBPTF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmM6MzU4MTpcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxubW0vbWVtcG9saWN5LmMtMzU4Mi1cdFx0bm9kZXMgPSBwb2wtXHUwMDNlbm9kZXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjE5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIE5VTUEgQ29uZmlndXJhdGlvbiBhbmQgQnVsayBBbGxvY2F0aW9uIEJlaGF2aW9yKioKCkFscmlnaHQsIHRoZSBjdXJyZW50IGNvbmZpZyBpcyBmbGFnZ2luZyBgQ09ORklHX05VTUFgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSB0aGF0IGhhcyBOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzLiBTbywgTlVNQSBpbXBsaWNhdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGNlbnRyYWwgdG8gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQuIE5vdywgd2l0aCBOVU1BIGVuYWJsZWQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBidWxrIHBhZ2UgYWxsb2NhdGlvbiBpcyBiZWluZyBoYW5kbGVkIGFuZCBlc3BlY2lhbGx5LCB3aGV0aGVyIHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgZm9yIHVzZS4gTGV0IG1lIGNoZWNrIGlmIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIGV2ZW4gYXZhaWxhYmxlLiBJdHMgcHJlc2VuY2Ugb3IgYWJzZW5jZSB3aWxsIHN0cm9uZ2x5IGluZmx1ZW5jZSBteSBuZXh0IHN0ZXBzIGFuZCBob3cgSSBhcHByb2FjaCB0aGUgb3ZlcmFsbCBwcm9ibGVtLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgbWVtcG9saWN5LWF3YXJlIGJ1bGsgYWxsb2NhdGlvbiBmdW5jdGlvbiBpcyB2aXNpYmxlIGFuZCBhY2Nlc3NpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODgwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiwgYW5kIHRoZSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgaXQmIzM5O3MgKm5vdCogYW4gZXhwb3J0ZWQgc3ltYm9sLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSG93ZXZlciwgaXQmIzM5O3MgYWxzbyBub3Qgc3RhdGljLCB3aGljaCBtZWFucyBpdCBoYXMgc29tZSBsZXZlbCBvZiB2aXNpYmlsaXR5IHdpdGhpbiB0aGUga2VybmVsLCBhbGJlaXQgcG90ZW50aWFsbHkgbGltaXRlZC4gTGV0JiMzOTtzIGRlbHZlIGRlZXBlci4KCkkgcmVtZW1iZXIgc2VlaW5nIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGluIGBtbS9tZW1wb2xpY3kuY2AsIGFuZCBJIGFsc28gcmVjYWxsIHNlZWluZyBhIGRlY2xhcmF0aW9uIGZvciBpdCBpbiBgaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaGAuIFRoaXMgaXMgYSBjcnVjaWFsIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjb25maXJtIHRoZSBkZWNsYXJhdGlvbiBhbmQgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24mIzM5O3MgaW50ZW5kZWQgaW50ZXJmYWNlLiBUbyBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVmZXJlbmNlIHRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oYCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgaGVhZGVyIGZpbGUgdGVsbHMgbWUgYWJvdXQgaXRzIGFyZ3VtZW50cyBhbmQgdXNhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjI5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIExhYnlyaW50aCBvZiBEZWNsYXJhdGlvbnMqKgoKQWxyaWdodCwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZS9zcGVjaWZpY2F0aW9uL2RvY3VtZW50LCBhbmQgbXkgaW5pdGlhbCByZWFjdGlvbiBpcywgKndoZXJlKiBwcmVjaXNlbHkgaXMgdGhpcyB2YXJpYWJsZS9mdW5jdGlvbi9jbGFzcy9jb25zdGFudC93aGF0ZXZlciAqZGVjbGFyZWQqPyBJdCYjMzk7cyB0aGUgZmlyc3QgYW5kIG1vc3QgZnVuZGFtZW50YWwgcXVlc3Rpb24sIHJlYWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlLCBpdHMgdHlwZSwgYW55IGFzc29jaWF0ZWQgbWV0YWRhdGEg4oCTIGFsbCBvZiB0aGF0IGhpbmdlcyBvbiBmaW5kaW5nIGl0cyBvcmlnaW4gcG9pbnQuIElzIGl0IGluIHRoaXMgZmlsZT8gQW5vdGhlciBvbmU/IEEgaGVhZGVyPyBBIHByZWNvbXBpbGVkIGxpYnJhcnk/IElzIGl0IGEgZm9yd2FyZCBkZWNsYXJhdGlvbiwgbWVhbmluZyBJIG5lZWQgdG8gY2hhc2UgZG93biBpdHMgZGVmaW5pdGlvbiBsYXRlcj8gVGhlIGFic2VuY2Ugb2YgYSBjbGVhciBkZWNsYXJhdGlvbiBzY3JlYW1zIGZvciBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbi4gSSBjYW7igJl0IHByb2NlZWQgdW50aWwgSSYjMzk7dmUgZXN0YWJsaXNoZWQgdGhhdCBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZ2ZwLmg9MjM3PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTI0MS1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjQyOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQzLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTI0NS0jZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyNDY6XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9nZnAuaC0yNDctXG4tLVxubW0vbWVtcG9saWN5LmM9Mjc1MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzc2LSAqL1xubW0vbWVtcG9saWN5LmM6Mjc3Nzp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNzc4LVx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4tLVxubW0vdm1hbGxvYy5jPTM2NDE9dm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXG4tLVxubW0vdm1hbGxvYy5jLTM3MDUtXHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBuaWQgPT0gTlVNQV9OT19OT0RFKVxubW0vdm1hbGxvYy5jOjM3MDY6XHRcdFx0XHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnAsXG5tbS92bWFsbG9jLmMtMzcwNy1cdFx0XHRcdFx0XHRcdG5yX3BhZ2VzX3JlcXVlc3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODg2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHdoZXJlIHdlIGNhbiBleHBhbmQgb3VyIGZ1enppbmcgY292ZXJhZ2UuIFRoZSBzdGFydGluZyBwb2ludCBzZWVtcyB0byBiZSBgdm1fYXJlYV9hbGxvY19wYWdlc2AgaW4gYG1tL3ZtYWxsb2MuY2AuIFRoaXMgc3VnZ2VzdHMgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgd291bGQgYmUgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLgoKSG1tLCB0aGVuIHRoZXJlJiMzOTtzIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBkcml2ZXJzL2Jhc2Uvbm9kZS5jYC4gTm93LCBzaG91bGQgSSBjb25zaWRlciBgc3lzX21iaW5kYCBvciBgc3lzX3NldF9tZW1wb2xpY3lgIGFzIHRhcmdldHM/IE5vLCB0aG9zZSBzeXNjYWxscyBhcmUgYWxyZWFkeSB0aG9yb3VnaGx5IGZ1enplZCBieSBzeXprYWxsZXIsIHNvIHRoZXkmIzM5O3JlIHByb2JhYmx5IG5vdCB0aGUgaGlnaGVzdCBwcmlvcml0eS4KCkJ1dCwgSSB0aGluayBhZGRpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgYW5kIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAgdG8gYEZvY3VzU3ltYm9sc2AgaXMgZGVmaW5pdGVseSB3b3J0aCBpdC4KCk5vdywgaG9sZCBvbi4uLiBsZXQgbWUganVzdCBtYWtlIHN1cmUgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCBpcyBhY3R1YWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIG9yIGlmIGl0JiMzOTtzIHN0cmljdGx5IHRpZWQgdG8gQUNQSSBITUFUIHBhcnNpbmcuIEFoLCByaWdodCwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGRyaXZlcnMvYWNwaS9udW1hL2htYXQuY2AgdmlhIGBub2RlX3NldF9wZXJmX2F0dHJzYC4gT2ssIHRoYXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0aGUgbW9yZSBkaXJlY3QgcGF0aCwgc28gbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbm9kZV9zZXRfcGVyZl9hdHRyc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vZGVfc2V0X3BlcmZfYXR0cnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hY3BpL251bWEvaG1hdC5jPTg1Mz1zdGF0aWMgdm9pZCBobWF0X3JlZ2lzdGVyX3RhcmdldF9wZXJmKHN0cnVjdCBtZW1vcnlfdGFyZ2V0ICp0YXJnZXQsIGludCBhY2Nlc3MpXG4tLVxuZHJpdmVycy9hY3BpL251bWEvaG1hdC5jLTg1NS1cdHVuc2lnbmVkIG1lbV9uaWQgPSBweG1fdG9fbm9kZSh0YXJnZXQtXHUwMDNlbWVtb3J5X3B4bSk7XG5kcml2ZXJzL2FjcGkvbnVtYS9obWF0LmM6ODU2Olx0bm9kZV9zZXRfcGVyZl9hdHRycyhtZW1fbmlkLCBcdTAwMjZ0YXJnZXQtXHUwMDNlY29vcmRbYWNjZXNzXSwgYWNjZXNzKTtcbmRyaXZlcnMvYWNwaS9udW1hL2htYXQuYy04NTctfVxuLS1cbmRyaXZlcnMvYmFzZS9ub2RlLmM9MjAyPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphY2Nlc3NfYXR0cnNbXSA9IHtcbi0tXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTIxMC0vKipcbmRyaXZlcnMvYmFzZS9ub2RlLmM6MjExOiAqIG5vZGVfc2V0X3BlcmZfYXR0cnMgLSBTZXQgdGhlIHBlcmZvcm1hbmNlIHZhbHVlcyBmb3IgZ2l2ZW4gYWNjZXNzIGNsYXNzXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTIxMi0gKiBAbmlkOiBOb2RlIGlkZW50aWZpZXIgdG8gYmUgc2V0XG4tLVxuZHJpdmVycy9iYXNlL25vZGUuYy0yMTUtICovXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jOjIxNjp2b2lkIG5vZGVfc2V0X3BlcmZfYXR0cnModW5zaWduZWQgaW50IG5pZCwgc3RydWN0IGFjY2Vzc19jb29yZGluYXRlICpjb29yZCxcbmRyaXZlcnMvYmFzZS9ub2RlLmMtMjE3LVx0XHRcdCBlbnVtIGFjY2Vzc19jb29yZGluYXRlX2NsYXNzIGFjY2Vzcylcbi0tXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTI0OC19XG5kcml2ZXJzL2Jhc2Uvbm9kZS5jOjI0OTpFWFBPUlRfU1lNQk9MX0dQTChub2RlX3NldF9wZXJmX2F0dHJzKTtcbmRyaXZlcnMvYmFzZS9ub2RlLmMtMjUwLVxuLS1cbmluY2x1ZGUvbGludXgvbm9kZS5oPTg1PXZvaWQgbm9kZV9hZGRfY2FjaGUodW5zaWduZWQgaW50IG5pZCwgc3RydWN0IG5vZGVfY2FjaGVfYXR0cnMgKmNhY2hlX2F0dHJzKTtcbmluY2x1ZGUvbGludXgvbm9kZS5oOjg2OnZvaWQgbm9kZV9zZXRfcGVyZl9hdHRycyh1bnNpZ25lZCBpbnQgbmlkLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkLFxuaW5jbHVkZS9saW51eC9ub2RlLmgtODctXHRcdFx0IGVudW0gYWNjZXNzX2Nvb3JkaW5hdGVfY2xhc3MgYWNjZXNzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25vZGUuaD05MT1zdGF0aWMgaW5saW5lIHZvaWQgbm9kZV9hZGRfY2FjaGUodW5zaWduZWQgaW50IG5pZCxcbi0tXG5pbmNsdWRlL2xpbnV4L25vZGUuaC05NS1cbmluY2x1ZGUvbGludXgvbm9kZS5oOjk2OnN0YXRpYyBpbmxpbmUgdm9pZCBub2RlX3NldF9wZXJmX2F0dHJzKHVuc2lnbmVkIGludCBuaWQsXG5pbmNsdWRlL2xpbnV4L25vZGUuaC05Ny1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk4MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTlVNQSBNZW1vcnkgUG9saWN5IFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgcG9saWN5IHN0dWZmLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBOVU1BLiBJdCBzZWVtcyBsaWtlIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAgaXMgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQsIGJ1dCBpdCYjMzk7cyBwcm9iYWJseSBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSB0byB1bnByaXZpbGVnZWQgdXNlcnNwYWNlLCAqdW5sZXNzKiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBib290IG9yIGhvdHBsdWcgc2NlbmFyaW9zIHdoZXJlIEhNQVQgaXMgYWN0aXZlLiBIb3dldmVyLCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBsb29rcyBtb3JlIGNvbmNlcm5pbmcgYmVjYXVzZSBpdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCBgdm1hbGxvY2Agd2hlbiBgTlVNQV9OT19OT0RFYCBpcyBiZWluZyB1c2VkLCB3aGljaCBpcyBzdXJwcmlzaW5nbHkgY29tbW9uLiBBbmQgdGhlbiB0aGVyZSBhcmUgdGhvc2Ugc3lzZnMgZW50cmllcywgYG5vZGVfc3RvcmVgIGFuZCBgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlYCwgdGhhdCByb290IHVzZXJzIGNhbiBhYnNvbHV0ZWx5IGdldCB0aGVpciBoYW5kcyBvbi4KClRoZSBwcm9ibGVtIHdpdGggdGhlIHN5c2ZzIGZ1bmN0aW9ucyBpcyB0aGF0IHRoZXkmIzM5O3JlIHN0YXRpYywgc28gSSBjYW4mIzM5O3QgZGlyZWN0bHkgbGlzdCB0aGVtIGluIEZvY3VzU3ltYm9scywgb3IgYXQgbGVhc3QgaXQgd291bGQgYmUgYSBiaXQgY2x1bmt5LiBXYWl0LCBob2xkIG9uIOKAkyBgc3lzX21iaW5kYCBhbmQgYHN5c19zZXRfbWVtcG9saWN5YCBhcmUgc3lzdGVtIGNhbGxzLCBzbyB0aGF0JiMzOTtzIGEgZGlmZmVyZW50IHN0b3J5LiBUaGUgcGF0Y2ggaXMgbWVzc2luZyB3aXRoIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIHdoaWNoIGdldHMgY2FsbGVkIGJ5IGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLgoKTm93LCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgbW9kaWZpZWQgb3IgcmVsYXRlZCB0aGF0IGFyZW4mIzM5O3Qgc3RhdGljLiBPa2F5LCBgd2lfc3RhdGVfZ2V0YCBhbmQgYHdpX3N0YXRlX3B1dGAgYXJlIHN0YXRpYywgc28gdGhleSYjMzk7cmUgcHJvYmFibHkgbm90IHRoZSBpbW1lZGlhdGUgdGFyZ2V0LiBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgIGlzIG5vbi1zdGF0aWMsIHNhbWUgd2l0aCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYC4KCkkgYWxzbyBoYXZlIHRvIGNvbmZpcm0gdGhhdCBDT05GSUdfTlVNQSBpcyB0aGUgb25seSByZWxldmFudCBjb25maWcgaGVyZS4gU28sIHllcywgYENPTkZJR19OVU1BYCBpcyB0aGUgYmlnIG9uZS4gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGBtbS9LY29uZmlnYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHJlbGF0ZWQgY29uZmlncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5VTUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NDQxPWNvbmZpZyBBUkNIX0tFRVBfTUVNQkxPQ0tcbi0tXG5tbS9LY29uZmlnLTQ0NC0jIEtlZXAgYXJjaCBOVU1BIG1hcHBpbmcgaW5mcmFzdHJ1Y3R1cmUgcG9zdC1pbml0LlxubW0vS2NvbmZpZzo0NDU6Y29uZmlnIE5VTUFfS0VFUF9NRU1JTkZPXG5tbS9LY29uZmlnLTQ0Ni1cdGJvb2xcbi0tXG5tbS9LY29uZmlnPTE0MTk9Y29uZmlnIEVYRUNNRU1cbi0tXG5tbS9LY29uZmlnLTE0MjEtXG5tbS9LY29uZmlnOjE0MjI6Y29uZmlnIE5VTUFfTUVNQkxLU1xubW0vS2NvbmZpZy0xNDIzLVx0Ym9vbFxubW0vS2NvbmZpZy0xNDI0LVxubW0vS2NvbmZpZzoxNDI1OmNvbmZpZyBOVU1BX0VNVVxubW0vS2NvbmZpZy0xNDI2LVx0Ym9vbCBcJiMzNDtOVU1BIGVtdWxhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkzMQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqV2hlcmUgRGlkIFRoYXQgQ29uZmlndXJhdGlvbiBPcHRpb24gR28/KioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGBjb25maWcgTlVNQWAgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQgZ29lcyB0byB3aGVyZSB0aGVzZSB0aGluZ3MgKnVzdWFsbHkqIGxpdmUuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtIbW0sIE5VTUEuLi4gdGhhdCYjMzk7cyB0eXBpY2FsbHkgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHRoaW5nLCByaWdodD8mIzM0OyBTbywgbXkgZmlyc3QgbWVudGFsIGNoZWNrIGlzIGZvciBgYXJjaC94ODYvS2NvbmZpZ2Agb3Igc29tZXRoaW5nIHNpbWlsYXIgd2l0aGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZGlyZWN0b3JpZXMuIFRoYXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludC4gT3IsIGdpdmVuIGl0cyBhc3NvY2lhdGlvbiB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBpdCBjb3VsZCBiZSB0dWNrZWQgYXdheSBpbiBgbW0vS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIHNlY29uZCBwbGFjZSBJJiMzOTtkIGxvb2suIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgdGhpbmcgaXMgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVU1BJCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWc9MTUzNj1jb25maWcgSE9UUExVR19DUFVcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTU0My0jIENvbW1vbiBOVU1BIEZlYXR1cmVzXG5hcmNoL2FybTY0L0tjb25maWc6MTU0NDpjb25maWcgTlVNQVxuYXJjaC9hcm02NC9LY29uZmlnLTE1NDUtXHRib29sIFwmIzM0O05VTUEgTWVtb3J5IEFsbG9jYXRpb24gYW5kIFNjaGVkdWxlciBTdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz00OTI9Y29uZmlnIE5SX0NQVVNcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTUwMC1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6NTAxOmNvbmZpZyBOVU1BXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTUwMi1cdGJvb2wgXCYjMzQ7TlVNQSBTdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9taXBzL0tjb25maWc9MjYxMD1jb25maWcgQVJDSF9TUEFSU0VNRU1fRU5BQkxFXG4tLVxuYXJjaC9taXBzL0tjb25maWctMjYxMi1cbmFyY2gvbWlwcy9LY29uZmlnOjI2MTM6Y29uZmlnIE5VTUFcbmFyY2gvbWlwcy9LY29uZmlnLTI2MTQtXHRib29sIFwmIzM0O05VTUEgU3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnPTc1OD1jb25maWcgSVJRX0FMTF9DUFVTXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWctNzY2LVxuYXJjaC9wb3dlcnBjL0tjb25maWc6NzY3OmNvbmZpZyBOVU1BXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy03NjgtXHRib29sIFwmIzM0O05VTUEgTWVtb3J5IEFsbG9jYXRpb24gYW5kIFNjaGVkdWxlciBTdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTQ4MT1lbmRjaG9pY2Vcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctNDgzLSMgQ29tbW9uIE5VTUEgRmVhdHVyZXNcbmFyY2gvcmlzY3YvS2NvbmZpZzo0ODQ6Y29uZmlnIE5VTUFcbmFyY2gvcmlzY3YvS2NvbmZpZy00ODUtXHRib29sIFwmIzM0O05VTUEgTWVtb3J5IEFsbG9jYXRpb24gYW5kIFNjaGVkdWxlciBTdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NTQwPWNvbmZpZyBIT1RQTFVHX0NQVVxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTU0Mi1cbmFyY2gvczM5MC9LY29uZmlnOjU0Mzpjb25maWcgTlVNQVxuYXJjaC9zMzkwL0tjb25maWctNTQ0LVx0Ym9vbCBcJiMzNDtOVU1BIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWc9MTAyPWNvbmZpZyBWU1lTQ0FMTFxuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xMTQtXG5hcmNoL3NoL21tL0tjb25maWc6MTE1OmNvbmZpZyBOVU1BXG5hcmNoL3NoL21tL0tjb25maWctMTE2LVx0Ym9vbCBcJiMzNDtOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzIChOVU1BKSBTdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9zcGFyYy9LY29uZmlnPTI1ND1jb25maWcgR0VORVJJQ19MT0NLQlJFQUtcbi0tXG5hcmNoL3NwYXJjL0tjb25maWctMjU4LVxuYXJjaC9zcGFyYy9LY29uZmlnOjI1OTpjb25maWcgTlVNQVxuYXJjaC9zcGFyYy9LY29uZmlnLTI2MC1cdGJvb2wgXCYjMzQ7TlVNQSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZz0xNTA1PWNvbmZpZyBBTURfTUVNX0VOQ1JZUFRcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTE1MjEtIyBDb21tb24gTlVNQSBGZWF0dXJlc1xuYXJjaC94ODYvS2NvbmZpZzoxNTIyOmNvbmZpZyBOVU1BXG5hcmNoL3g4Ni9LY29uZmlnLTE1MjMtXHRib29sIFwmIzM0O05VTUEgTWVtb3J5IEFsbG9jYXRpb24gYW5kIFNjaGVkdWxlciBTdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODc2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTlVNQSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5pdGVseSBOVU1BLiBNeSBpbml0aWFsIGh1bmNoIHdhcyBjb3JyZWN0LiBOb3csIGxldCYjMzk7cyBzZWUgaWYgd2UgaGF2ZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGFuZ2luZyBhcm91bmQuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIG1vZGlmaWNhdGlvbnMgdG8gYG1tL21lbXBvbGljeS5jYC4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byBjb25maXJtIGlmIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIEFMV0FZUyBjb21waWxlZCB3aGVuIE5VTUEgaXMgZW5hYmxlZCwgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiB0aGF0IGl0IGlzLCBzbyBsZXQmIzM5O3MgY29uZmlybS4gWWVzLCBpdCBsb29rcyBsaWtlIGBtbS9tZW1wb2xpY3kub2AgZ2V0cyBjb21waWxlZCB3aGVuIGBDT05GSUdfTlVNQWAgaXMgZW5hYmxlZCwgd2hpY2ggc3VwcG9ydHMgdGhhdCBsaW5lIG9mIHRob3VnaHQuCgpSaWdodCwgYXJlIHRoZXJlIGFueSAqb3RoZXIqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIG9mIGludGVyZXN0PyBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCBhbmQsIG9mIGNvdXJzZSwgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuCgpJIHRoaW5rIGl04oCZcyB3b3J0aCBkb3VibGUtY2hlY2tpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgb25lIG1vcmUgdGltZSwganVzdCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9Mjc1MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzc2LSAqL1xubW0vbWVtcG9saWN5LmM6Mjc3Nzp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNzc4LVx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mzk4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIE5vbi1TdGF0aWMgTWVtb3J5IFBvbGljeSoqCgpSaWdodCwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBzaXR1YXRpb24uIEkgbmVlZCB0byBkaWcgaW50byB0aGUgbm9uLXN0YXRpYyBhc3BlY3RzIG9mIHRoaXMuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBiZWdpbiwgZ2l2ZW4gdGhhdCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggbWVtb3J5IHBvbGljeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBub24tc3RhdGljIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXBvbGljeV9zZXRfbm9kZV9wZXJmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9MjExPXN0YXRpYyB2b2lkIHJlZHVjZV9pbnRlcmxlYXZlX3dlaWdodHModW5zaWduZWQgaW50ICpidywgdTggKm5ld19pdylcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNDMtXG5tbS9tZW1wb2xpY3kuYzoyNDQ6aW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3Jkcylcbm1tL21lbXBvbGljeS5jLTI0NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjU5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uIGFuZCBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGlzIGlzIGFib3V0IGlkZW50aWZ5aW5nIGdvb2QgZnV6emluZyB0YXJnZXRzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gSSBjYW4gc2VlIHRoYXQgdGhlIGNvZGUgSSYjMzk7bSBsb29raW5nIGF0IGlzbiYjMzk7dCBzdGF0aWMsIHdoaWNoIGlzIHRoZSBmaXJzdCBnb29kIHNpZ24uIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyB0aHJvdWdoIHRoZSBmdW5jdGlvbnMsIGB3aV9zdGF0ZV9nZXRgLCBgd2lfc3RhdGVfcHV0YCwgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAsIGBub2RlX3N0b3JlYCwgYHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZWAsIGFuZCBgd2lfc3RhdGVfZnJlZWAgYXJlIGFsbCBzdGF0aWMuIFRoYXQgbmFycm93cyBpdCBkb3duLgoKVGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBhbmQgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYC4gUmlnaHQgYXdheSwgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgbG9va3MgcHJvbWlzaW5nIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbiB3aXRoIG1lbXBvbGljeSwgYW5kIGl0IHNlZW1zIHRvIGNhbGwgdGhlIG1vZGlmaWVkIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiBZZWFoLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBnb29kIHRhcmdldC4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgIGFzIGl0IG1vZGlmaWVzIHRoZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHN0YXRlLgoKTm93LCByZWFjaGFiaWxpdHkuIElzIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIHJlYWNoYWJsZSBmcm9tIHN5c2NhbGxzPyBZdXAsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCB3aGljaCB0aGVuIGdldHMgY2FsbGVkIGZyb20gc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMsIGV2ZW50dWFsbHkgYmVpbmcgY2FsbGVkIGJ5IGB2bWFsbG9jYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBwcmV0dHkgZXhwb3NlZC4KCldoYXQgYWJvdXQgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYD8gIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBub2RlX3NldF9wZXJmX2F0dHJzYCBhbmQgYG5vZGVfdXBkYXRlX3BlcmZfYXR0cnNgLiBUaGVzZSBhcmUgY2FsbGVkIGZyb20gYGhtYXRfcmVnaXN0ZXJfdGFyZ2V0X3BlcmZgIChBQ1BJIEhNQVQpIGFuZCBgY3hsX3JlZ2lvbl9wZXJmX2RhdGFfY2FsY3VsYXRlYCAoQ1hMKS4gU28gaXQmIzM5O3MgcmVhY2hhYmxlIGlmIEFDUEkgSE1BVCBvciBDWEwgaXMgcHJlc2VudCwgc28gbWF5YmUgbm90IGFsd2F5cyByZWFjaGFibGUgYnV0IHBvdGVudGlhbGx5IHdvcnRoIGZ1enppbmcuCgpIYW5nIG9uLi4uIFRoaXMgcGF0Y2ggZml4ZXMgYSBidWcgd2l0aCBgc3luY2hyb25pemVfcmN1KClgLiBUaGUgY29tbWl0IG1lc3NhZ2Ugc2F5cyAmIzM0O3N5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldywmIzM0OyB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhlIHBhdGNoIGlzIHVzaW5nIGByZWZjb3VudF90YCBhbmQgYGtmcmVlX3JjdWAgaW5zdGVhZCBvZiBgc3luY2hyb25pemVfcmN1YCBhbmQgYGtmcmVlYC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UsIHJlcGxhY2luZyBjYWxscyB0byBgc3luY2hyb25pemVfcmN1YCB3aXRoIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uLgoKQWxyaWdodCwgSSYjMzk7bSBzZXR0aW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIE15IGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgYW5kIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAuIEFuZCBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSB0aGUgYE5VTUFgIGNvbmZpZy4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIHRoZSBjb3JyZWN0IG5hbWUuIFllcCwgaXQgaXMuCgpBbmQgaXQgbG9va3MgbGlrZSB0aGUgYE5VTUFgIGNvbmZpZyB3aWxsIGNvdmVyIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAuIFNvIHRoYXQgbG9va3MgZ29vZCEgSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciBjb25maWcgbmVjZXNzYXJ5IGZvciBgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFYCwgaXQgaXMganVzdCBhbiBlbnVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oPTE5PWVudW0ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaC0yNS1cdE1QT0xfUFJFRkVSUkVEX01BTlksXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5Lmg6MjY6XHRNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUsXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmgtMjctXHRNUE9MX01BWCxcdC8qIGFsd2F5cyBsYXN0IG1lbWJlciBvZiBlbnVtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTM0CgkJCQkJCQlvdXRwdXQ6IDEyMwoJCQkJCQkJdGhvdWdodHM6IDIzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIGFyZSB2aWFibGUgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgc3BlY2lmaWNhbGx5IHRob3NlIHJlbGF0ZWQgdG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBhcmVhLiBGaXJzdCwgbGV0JiMzOTtzIHNlZSBpZiBgbm9kZV9zdG9yZWAgYW5kIGB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmVgIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMuIEFoLCB5ZXMsIHRoZXkgYXJlIGluZGVlZCBzeXNmcyBzdG9yZSBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRoZXkmIzM5O3JlIGRlY2xhcmVkIHN0YXRpYywgc28gSSBjYW4mIzM5O3QgaW5jbHVkZSB0aGVtIGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBCdXQgdGhlIGdvb2QgbmV3cyBpcyB0aGF0IHN5emthbGxlciAqY2FuKiBmdXp6IHN5c2ZzLCB3aGljaCBvcGVucyB1cCBzb21lIHBvc3NpYmlsaXRpZXMgdGhlcmUuCgpHaXZlbiB0aGF0IHJlc3RyaWN0aW9uLCBteSBmb2N1cyBzaGlmdHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgYW5kIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRob3NlIHNwZWxsaW5ncy4uLiBZdXAsIGNvbmZpcm1lZDogYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXMgY29ycmVjdCBhbmQgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCBpcyBhbHNvIGNvcnJlY3QuCgpOb3csIGxldCBtZSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBlbHNlLiBMZXQmIzM5O3Mgc2VlLi4uIGB3aV9zdGF0ZV9mcmVlYCBpcyBzdGF0aWMuIGB3aV9zdGF0ZV9nZXRgIGlzIGFsc28gc3RhdGljLiBBbmQgc28gaXMgYHdpX3N0YXRlX3B1dGAuIE9oLCBhbmQgYGdldF9pbF93ZWlnaHRgIGFzIHdlbGwuIFRoYXQgbG9va3MgbGlrZSBhIGNvbXBsZXRlIGxpc3QgZm9yIHRoaXMgYXJlYSwgbWVhbmluZyBJIGhhdmUgYSBnb29kIGJhc2UgdG8gc3RhcnQgZnJvbS4gU28sIEkgdGhpbmsgSSYjMzk7bSBnb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZiYjMzQ7LAogICAgJiMzNDttZW1wb2xpY3lfc2V0X25vZGVfcGVyZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBtZW1vcnkgcG9saWN5IGxvZ2ljIGluIG1tL21lbXBvbGljeS5jIGJ5IGludHJvZHVjaW5nIGEgcmVmY291bnQgYW5kIHJlcGxhY2luZyBzeW5jaHJvbml6ZV9yY3UoKSAmIzQzOyBrZnJlZSgpIHdpdGgga2ZyZWVfcmN1KCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIGFuZCBzeXNmcyBub2RlIHBlcmZvcm1hbmNlIHVwZGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YmIzM0OywKICAgICYjMzQ7bWVtcG9saWN5X3NldF9ub2RlX3BlcmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdlaWdodGVkIGludGVybGVhdmUgbWVtb3J5IHBvbGljeSBsb2dpYyBpbiBtbS9tZW1wb2xpY3kuYyBieSBpbnRyb2R1Y2luZyBhIHJlZmNvdW50IGFuZCByZXBsYWNpbmcgc3luY2hyb25pemVfcmN1KCkgJiM0Mzsga2ZyZWUoKSB3aXRoIGtmcmVlX3JjdSgpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBidWxrIHBhZ2UgYWxsb2NhdGlvbiBhbmQgc3lzZnMgbm9kZSBwZXJmb3JtYW5jZSB1cGRhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgYnkgcmVwbGFjaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCAoYHJlZmNvdW50X3RgKSBhbmQgYGtmcmVlX3JjdSgpYC4gSXQgYWxzbyBvcHRpbWl6ZXMgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpYCBieSBwaW5uaW5nIHRoZSBzdGF0ZSB3aXRoIGB3aV9zdGF0ZV9nZXQoKWAgaW5zdGVhZCBvZiBjcmVhdGluZyBhIGxvY2FsIGNvcHkgb2YgdGhlIHdlaWdodHMgYXJyYXkuIEFsbCBhbGxvY2F0aW9ucyBvZiBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIHVzZSBga3phbGxvY19mbGV4KClgLCB3aGljaCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0cnVjdHVyZSBhbmQgaXRzIGZsZXhpYmxlIGFycmF5IG1lbWJlciBgaXdfdGFibGVgLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjczMjg5N2Q3MTFjOGFkZjA2ODQ2MDc3ZjQ1ZDUwMzc4M2Y0NDY5MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDAzOjI1OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCAwZTUxNzVmMWM3NjdkLi40YTM3MjJjNjNiMzFiIDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuYwpAQCAtMTEyLDYgJiM0MzsxMTIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3ByaW50ay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xlYWZvcHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9nY2QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVmY291bnQuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS90bGJmbHVzaC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS90bGIuaCZndDsKQEAgLTE1Niw3ICYjNDM7MTU3LDkgQEAgc3RhdGljIGNvbnN0IGludCB3ZWlnaHRpbmVzcyA9IDMyOwogICovCiBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSB7CiAJYm9vbCBtb2RlX2F1dG87Ci0JdTggaXdfdGFibGVbXTsKJiM0MzsJcmVmY291bnRfdCByZWZjbnQ7CiYjNDM7CXN0cnVjdCByY3VfaGVhZCByY3U7CiYjNDM7CXU4IGl3X3RhYmxlW10gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIH07CiBzdGF0aWMgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgX19yY3UgKndpX3N0YXRlOwogc3RhdGljIHVuc2lnbmVkIGludCAqbm9kZV9id190YWJsZTsKQEAgLTE2Nyw2ICYjNDM7MTcwLDI3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgKm5vZGVfYndfdGFibGU7CiAgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgod2lfc3RhdGVfbG9jayk7CiAKJiM0MzsvKiBBbGxvdyBzbGVlcGluZyByZWFkZXJzIHRvIHBpbiB0aGUgc3RhdGUgdG8gYXZvaWQgdGFraW5nIGNvcGllcyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqd2lfc3RhdGVfZ2V0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqc3RhdGU7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJd2hpbGUgKChzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSkpKSB7CiYjNDM7CQlpZiAocmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7c3RhdGUtJmd0O3JlZmNudCkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiBzdGF0ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd2lfc3RhdGVfcHV0KHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CWlmIChzdGF0ZSAmYW1wOyZhbXA7IHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3N0YXRlLSZndDtyZWZjbnQpKQomIzQzOwkJa2ZyZWVfcmN1KHN0YXRlLCByY3UpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB1OCBnZXRfaWxfd2VpZ2h0KGludCBub2RlKQogewogCXN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTsKQEAgLTIzNSw2ICYjNDM7MjU5LDcgQEAgaW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkcykKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW5ld193aV9zdGF0ZS0mZ3Q7bW9kZV9hdXRvID0gdHJ1ZTsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7bmV3X3dpX3N0YXRlLSZndDtyZWZjbnQsIDEpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBucl9ub2RlX2lkczsgaSYjNDM7JiM0MzspCiAJCW5ld193aV9zdGF0ZS0mZ3Q7aXdfdGFibGVbaV0gPSAxOwogCkBAIC0yNjUsMTAgJiM0MzsyOTAsNyBAQCBpbnQgbWVtcG9saWN5X3NldF9ub2RlX3BlcmYodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKQogCXJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgbmV3X3dpX3N0YXRlKTsKIAogCW11dGV4X3VubG9jaygmYW1wO3dpX3N0YXRlX2xvY2spOwotCWlmIChvbGRfd2lfc3RhdGUpIHsKLQkJc3luY2hyb25pemVfcmN1KCk7Ci0JCWtmcmVlKG9sZF93aV9zdGF0ZSk7Ci0JfQomIzQzOwl3aV9zdGF0ZV9wdXQob2xkX3dpX3N0YXRlKTsKIG91dDoKIAlrZnJlZShvbGRfYncpOwogCXJldHVybiAwOwpAQCAtMjYzMiw3ICYjNDM7MjY1NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsCiAJdW5zaWduZWQgbG9uZyBucl9hbGxvY2F0ZWQgPSAwOwogCXVuc2lnbmVkIGxvbmcgcm91bmRzOwogCXVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlcywgZGVsdGE7Ci0JdTggKndlaWdodHMsIHdlaWdodDsKJiM0MzsJdTggKnRhYmxlLCB3ZWlnaHQ7CiAJdW5zaWduZWQgaW50IHdlaWdodF90b3RhbCA9IDA7CiAJdW5zaWduZWQgbG9uZyByZW1fcGFnZXMgPSBucl9wYWdlczsKIAlub2RlbWFza190IG5vZGVzOwpAQCAtMjY3NiwyNSAmIzQzOzI2OTgsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCwKIAltZS0mZ3Q7aWxfd2VpZ2h0ID0gMDsKIAlwcmV2X25vZGUgPSBub2RlOwogCi0JLyogY3JlYXRlIGEgbG9jYWwgY29weSBvZiBub2RlIHdlaWdodHMgdG8gb3BlcmF0ZSBvbiBvdXRzaWRlIHJjdSAqLwotCXdlaWdodHMgPSBremFsbG9jKG5yX25vZGVfaWRzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdlaWdodHMpCi0JCXJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0Jc3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpOwotCWlmIChzdGF0ZSkgewotCQltZW1jcHkod2VpZ2h0cywgc3RhdGUtJmd0O2l3X3RhYmxlLCBucl9ub2RlX2lkcyAqIHNpemVvZih1OCkpOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQl9IGVsc2UgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IG5yX25vZGVfaWRzOyBpJiM0MzsmIzQzOykKLQkJCXdlaWdodHNbaV0gPSAxOwotCX0KJiM0MzsJc3RhdGUgPSB3aV9zdGF0ZV9nZXQoKTsKJiM0MzsJdGFibGUgPSBzdGF0ZSA/IHN0YXRlLSZndDtpd190YWJsZSA6IE5VTEw7CiAKIAkvKiBjYWxjdWxhdGUgdG90YWwsIGRldGVjdCBzeXN0ZW0gZGVmYXVsdCB1c2FnZSAqLwogCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBub2RlcykKLQkJd2VpZ2h0X3RvdGFsICYjNDM7PSB3ZWlnaHRzW25vZGVdOwomIzQzOwkJd2VpZ2h0X3RvdGFsICYjNDM7PSB0YWJsZSA/IHRhYmxlW25vZGVdIDogMTsKIAogCS8qCiAJICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuCkBAIC0yNzA2LDEwICYjNDM7MjcxNSwxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLAogCXJvdW5kcyA9IHJlbV9wYWdlcyAvIHdlaWdodF90b3RhbDsKIAlkZWx0YSA9IHJlbV9wYWdlcyAlIHdlaWdodF90b3RhbDsKIAlyZXN1bWVfbm9kZSA9IG5leHRfbm9kZV9pbihwcmV2X25vZGUsIG5vZGVzKTsKLQlyZXN1bWVfd2VpZ2h0ID0gd2VpZ2h0c1tyZXN1bWVfbm9kZV07CiYjNDM7CXJlc3VtZV93ZWlnaHQgPSB0YWJsZSA/IHRhYmxlW3Jlc3VtZV9ub2RlXSA6IDE7CiAJZm9yIChpID0gMDsgaSAmbHQ7IG5ub2RlczsgaSYjNDM7JiM0MzspIHsKIAkJbm9kZSA9IG5leHRfbm9kZV9pbihwcmV2X25vZGUsIG5vZGVzKTsKLQkJd2VpZ2h0ID0gd2VpZ2h0c1tub2RlXTsKJiM0MzsJCXdlaWdodCA9IHRhYmxlID8gdGFibGVbbm9kZV0gOiAxOwogCQlub2RlX3BhZ2VzID0gd2VpZ2h0ICogcm91bmRzOwogCQkvKiBJZiBhIGRlbHRhIGV4aXN0cywgYWRkIHRoaXMgbm9kZSYjMzk7cyBwb3J0aW9uIG9mIHRoZSBkZWx0YSAqLwogCQlpZiAoZGVsdGEgJmd0OyB3ZWlnaHQpIHsKQEAgLTI3MzUsNyAmIzQzOzI3NDQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLAogCX0KIAltZS0mZ3Q7aWxfcHJldiA9IHJlc3VtZV9ub2RlOwogCW1lLSZndDtpbF93ZWlnaHQgPSByZXN1bWVfd2VpZ2h0OwotCWtmcmVlKHdlaWdodHMpOwomIzQzOwl3aV9zdGF0ZV9wdXQoc3RhdGUpOwogCXJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7CiB9CiAKQEAgLTM2NDQsNiAmIzQzOzM2NTMsNyBAQCBzdGF0aWMgc3NpemVfdCBub2RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCiAJbmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7CiAJaWYgKCFuZXdfd2lfc3RhdGUpCiAJCXJldHVybiAtRU5PTUVNOwomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDtuZXdfd2lfc3RhdGUtJmd0O3JlZmNudCwgMSk7CiAKIAltdXRleF9sb2NrKCZhbXA7d2lfc3RhdGVfbG9jayk7CiAJb2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSwKQEAgLTM2NjAsMTAgJiM0MzszNjcwLDcgQEAgc3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAogCiAJcmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpOwogCW11dGV4X3VubG9jaygmYW1wO3dpX3N0YXRlX2xvY2spOwotCWlmIChvbGRfd2lfc3RhdGUpIHsKLQkJc3luY2hyb25pemVfcmN1KCk7Ci0JCWtmcmVlKG9sZF93aV9zdGF0ZSk7Ci0JfQomIzQzOwl3aV9zdGF0ZV9wdXQob2xkX3dpX3N0YXRlKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTM2OTYsNiAmIzQzOzM3MDMsNyBAQCBzdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCiAJbmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7CiAJaWYgKCFuZXdfd2lfc3RhdGUpCiAJCXJldHVybiAtRU5PTUVNOwomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDtuZXdfd2lfc3RhdGUtJmd0O3JlZmNudCwgMSk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yX25vZGVfaWRzOyBpJiM0MzsmIzQzOykKIAkJbmV3X3dpX3N0YXRlLSZndDtpd190YWJsZVtpXSA9IDE7CiAKQEAgLTM3MjgsMTAgJiM0MzszNzM2LDcgQEAgc3RhdGljIHNzaXplX3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogdXBkYXRlX3dpX3N0YXRlOgogCXJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgbmV3X3dpX3N0YXRlKTsKIAltdXRleF91bmxvY2soJmFtcDt3aV9zdGF0ZV9sb2NrKTsKLQlpZiAob2xkX3dpX3N0YXRlKSB7Ci0JCXN5bmNocm9uaXplX3JjdSgpOwotCQlrZnJlZShvbGRfd2lfc3RhdGUpOwotCX0KJiM0MzsJd2lfc3RhdGVfcHV0KG9sZF93aV9zdGF0ZSk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0zNzc1LDEwICYjNDM7Mzc4MCw3IEBAIHN0YXRpYyB2b2lkIHdpX3N0YXRlX2ZyZWUodm9pZCkKIAlyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIE5VTEwpOwogCW11dGV4X3VubG9jaygmYW1wO3dpX3N0YXRlX2xvY2spOwogCi0JaWYgKG9sZF93aV9zdGF0ZSkgewotCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQkJa2ZyZWUob2xkX3dpX3N0YXRlKTsKLQl9CiYjNDM7CXdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpOwogfQogCiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHdpX2F1dG9fYXR0ciA9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDc1CgkJCQkJCQlvdXRwdXQ6IDIxNAoJCQkJCQkJdGhvdWdodHM6IDcxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlZmNvdW50LUJhc2VkIGB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGZvciBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIGluIGBtbS9tZW1wb2xpY3kuY2AuIE15IGluaXRpYWwgY29uY2VybiwgYXMgYWx3YXlzIHdoZW4gdG91Y2hpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIGV4aXN0aW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgYW5kIGBrZnJlZSgpYCBwYXR0ZXJuIHdpdGggYSByZWZjb3VudCAoYHJlZmNvdW50X3RgKSBhbmQgYGtmcmVlX3JjdSgpYCwgcGx1cyB0aGUgaW50cm9kdWN0aW9uIG9mIGB3aV9zdGF0ZV9nZXQoKWAgYW5kIGB3aV9zdGF0ZV9wdXQoKWAuIEl0IGFsc28gZWxpbWluYXRlcyB0aGUgbG9jYWwgYHdlaWdodHNgIGNvcHkgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpYCwgb3B0aW5nIHRvIHBpbiB0aGUgYHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIGRpcmVjdGx5LiBTbWFydCwgdGhhdCBzaG91bGQgYmUgYSBwZXJmb3JtYW5jZSB3aW4uCgpUaGUgb2xkIGNvZGUgdXNlZCB0byBga3phbGxvYygpYCB0aGUgYHdlaWdodHNgIGFycmF5LiBOb3csIGl0JiMzOTtzIHVzaW5nIHRoZSBgaXdfdGFibGVgIGRpcmVjdGx5IGZyb20gdGhlIGB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCB3aGljaCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19mbGV4KClgLiBBaGEhIFRoYXQmIzM5O3MgdGhlIGtleS4gU2luY2UgYGt6YWxsb2NfZmxleCgpYCBpcyB1c2VkIGluIGV2ZXJ5IGFsbG9jYXRpb24gcGF0aCAoYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCwgYG5vZGVfc3RvcmVgLCBhbmQgYHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZWApLCB0aGlzIGVuc3VyZXMgdGhlIGBpd190YWJsZWAgaXMgemVyby1pbml0aWFsaXplZC4gSSB3ZW50IHRocm91Z2ggdGhlIGNvZGUgdG8gY29uZmlybSB0aGUgYGt6YWxsb2NfZmxleGAgY2FsbHMuCgpUaGVyZWZvcmUsIHRoZSBgd2VpZ2h0c2AgYXJyYXksIHdoaWNoIGlzIG5vdyB0aGUgYGl3X3RhYmxlYCwgd2lsbCAqYWx3YXlzKiBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGlzIHNob3VsZCBlbGltaW5hdGUgdGhlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgZHVlIHRvIHRoaXMgY2hhbmdlLiBUaGUgcGF0Y2ggaXMgYWJvdXQgbGlmZXRpbWUgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3k7IG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEFueSBidWdzIGludHJvZHVjZWQgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzLiBLQVNBTiBzaG91bGQgYmUgd2VsbC1lcXVpcHBlZCB0byBjYXRjaCB0aG9zZS4gU28gbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJdCYjMzk7cyBhbiBSQ1UtdG8tcmVmY291bnQgY29udmVyc2lvbi4KCkluIHN1bW1hcnksIHRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgdGhlIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgYnkgcmVwbGFjaW5nIFJDVSB3aXRoIGEgcmVmY291bnQgYW5kIGBrZnJlZV9yY3UoKWAuIEl0IGFsc28gb3B0aW1pemVzIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKWAgYnkgZGlyZWN0bHkgcGlubmluZyB0aGUgYHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBsb2NhbCBjb3B5IG9mIHRoZSB3ZWlnaHRzIGFycmF5LiBBbGwgYWxsb2NhdGlvbnMgb2YgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCB1c2UgYGt6YWxsb2NfZmxleCgpYCwgZ3VhcmFudGVlaW5nIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0cnVjdHVyZSBpbmNsdWRpbmcgaXRzIGBpd190YWJsZWAuIEFueSBwb3RlbnRpYWwgYnVncyBhcmUgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcyB3aGljaCBzaG91bGQgYmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCBieSByZXBsYWNpbmcgYHN5bmNocm9uaXplX3JjdSgpYCB3aXRoIGEgcmVmZXJlbmNlIGNvdW50IChgcmVmY291bnRfdGApIGFuZCBga2ZyZWVfcmN1KClgLiBJdCBhbHNvIG9wdGltaXplcyBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKClgIGJ5IHBpbm5pbmcgdGhlIHN0YXRlIHdpdGggYHdpX3N0YXRlX2dldCgpYCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbG9jYWwgY29weSBvZiB0aGUgd2VpZ2h0cyBhcnJheS4gQWxsIGFsbG9jYXRpb25zIG9mIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgdXNlIGBremFsbG9jX2ZsZXgoKWAsIHdoaWNoIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgc3RydWN0dXJlIGFuZCBpdHMgZmxleGlibGUgYXJyYXkgbWVtYmVyIGBpd190YWJsZWAuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCBieSByZXBsYWNpbmcgYHN5bmNocm9uaXplX3JjdSgpYCB3aXRoIGEgcmVmZXJlbmNlIGNvdW50IChgcmVmY291bnRfdGApIGFuZCBga2ZyZWVfcmN1KClgLiBJdCBhbHNvIG9wdGltaXplcyBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKClgIGJ5IHBpbm5pbmcgdGhlIHN0YXRlIHdpdGggYHdpX3N0YXRlX2dldCgpYCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbG9jYWwgY29weSBvZiB0aGUgd2VpZ2h0cyBhcnJheS4gQWxsIGFsbG9jYXRpb25zIG9mIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgdXNlIGBremFsbG9jX2ZsZXgoKWAsIHdoaWNoIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgc3RydWN0dXJlIGFuZCBpdHMgZmxleGlibGUgYXJyYXkgbWVtYmVyIGBpd190YWJsZWAuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTowNi4yNTcyNzQwODZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg1NDc3NTQ0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiLFxuICAgIFwibWVtcG9saWN5X3NldF9ub2RlX3BlcmZcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgYnkgcmVwbGFjaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCAoYHJlZmNvdW50X3RgKSBhbmQgYGtmcmVlX3JjdSgpYC4gSXQgYWxzbyBvcHRpbWl6ZXMgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpYCBieSBwaW5uaW5nIHRoZSBzdGF0ZSB3aXRoIGB3aV9zdGF0ZV9nZXQoKWAgaW5zdGVhZCBvZiBjcmVhdGluZyBhIGxvY2FsIGNvcHkgb2YgdGhlIHdlaWdodHMgYXJyYXkuIEFsbCBhbGxvY2F0aW9ucyBvZiBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIHVzZSBga3phbGxvY19mbGV4KClgLCB3aGljaCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0cnVjdHVyZSBhbmQgaXRzIGZsZXhpYmxlIGFycmF5IG1lbWJlciBgaXdfdGFibGVgLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBtZW1vcnkgcG9saWN5IGxvZ2ljIGluIG1tL21lbXBvbGljeS5jIGJ5IGludHJvZHVjaW5nIGEgcmVmY291bnQgYW5kIHJlcGxhY2luZyBzeW5jaHJvbml6ZV9yY3UoKSArIGtmcmVlKCkgd2l0aCBrZnJlZV9yY3UoKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgYnVsayBwYWdlIGFsbG9jYXRpb24gYW5kIHN5c2ZzIG5vZGUgcGVyZm9ybWFuY2UgdXBkYXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6MDYuMjU3MjgyNzY2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTI4NDc2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNzMyODk3ZDcxMWM4YWRmMDY4NDYwNzdmNDVkNTAzNzgzZjQ0NjkxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDI0IDAzOjI1OjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcXG5pbmRleCAwZTUxNzVmMWM3NjdkLi40YTM3MjJjNjNiMzFiIDEwMDY0NFxcbi0tLSBhL21tL21lbXBvbGljeS5jXFxuKysrIGIvbW0vbWVtcG9saWN5LmNcXG5AQCAtMTEyLDYgKzExMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmludGsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xlYWZvcHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2djZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVmY291bnQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdGxiZmx1c2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS90bGIuaFxcdTAwM2VcXG5AQCAtMTU2LDcgKzE1Nyw5IEBAIHN0YXRpYyBjb25zdCBpbnQgd2VpZ2h0aW5lc3MgPSAzMjtcXG4gICovXFxuIHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlIHtcXG4gXFx0Ym9vbCBtb2RlX2F1dG87XFxuLVxcdHU4IGl3X3RhYmxlW107XFxuK1xcdHJlZmNvdW50X3QgcmVmY250O1xcbitcXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xcbitcXHR1OCBpd190YWJsZVtdIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuIH07XFxuIHN0YXRpYyBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSBfX3JjdSAqd2lfc3RhdGU7XFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgKm5vZGVfYndfdGFibGU7XFxuQEAgLTE2Nyw2ICsxNzAsMjcgQEAgc3RhdGljIHVuc2lnbmVkIGludCAqbm9kZV9id190YWJsZTtcXG4gICovXFxuIHN0YXRpYyBERUZJTkVfTVVURVgod2lfc3RhdGVfbG9jayk7XFxuIFxcbisvKiBBbGxvdyBzbGVlcGluZyByZWFkZXJzIHRvIHBpbiB0aGUgc3RhdGUgdG8gYXZvaWQgdGFraW5nIGNvcGllcyAqL1xcbitzdGF0aWMgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKndpX3N0YXRlX2dldCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0d2hpbGUgKChzdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh3aV9zdGF0ZSkpKSB7XFxuK1xcdFxcdGlmIChyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnN0YXRlLVxcdTAwM2VyZWZjbnQpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBzdGF0ZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd2lfc3RhdGVfcHV0KHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRpZiAoc3RhdGUgXFx1MDAyNlxcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZzdGF0ZS1cXHUwMDNlcmVmY250KSlcXG4rXFx0XFx0a2ZyZWVfcmN1KHN0YXRlLCByY3UpO1xcbit9XFxuK1xcbiBzdGF0aWMgdTggZ2V0X2lsX3dlaWdodChpbnQgbm9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSAqc3RhdGU7XFxuQEAgLTIzNSw2ICsyNTksNyBAQCBpbnQgbWVtcG9saWN5X3NldF9ub2RlX3BlcmYodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXHRuZXdfd2lfc3RhdGUtXFx1MDAzZW1vZGVfYXV0byA9IHRydWU7XFxuK1xcdHJlZmNvdW50X3NldChcXHUwMDI2bmV3X3dpX3N0YXRlLVxcdTAwM2VyZWZjbnQsIDEpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfbm9kZV9pZHM7IGkrKylcXG4gXFx0XFx0bmV3X3dpX3N0YXRlLVxcdTAwM2Vpd190YWJsZVtpXSA9IDE7XFxuIFxcbkBAIC0yNjUsMTAgKzI5MCw3IEBAIGludCBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZih1bnNpZ25lZCBpbnQgbm9kZSwgc3RydWN0IGFjY2Vzc19jb29yZGluYXRlICpjb29yZHMpXFxuIFxcdHJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgbmV3X3dpX3N0YXRlKTtcXG4gXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2d2lfc3RhdGVfbG9jayk7XFxuLVxcdGlmIChvbGRfd2lfc3RhdGUpIHtcXG4tXFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuLVxcdFxcdGtmcmVlKG9sZF93aV9zdGF0ZSk7XFxuLVxcdH1cXG4rXFx0d2lfc3RhdGVfcHV0KG9sZF93aV9zdGF0ZSk7XFxuIG91dDpcXG4gXFx0a2ZyZWUob2xkX2J3KTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTI2MzIsNyArMjY1NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfYWxsb2NhdGVkID0gMDtcXG4gXFx0dW5zaWduZWQgbG9uZyByb3VuZHM7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlcywgZGVsdGE7XFxuLVxcdHU4ICp3ZWlnaHRzLCB3ZWlnaHQ7XFxuK1xcdHU4ICp0YWJsZSwgd2VpZ2h0O1xcbiBcXHR1bnNpZ25lZCBpbnQgd2VpZ2h0X3RvdGFsID0gMDtcXG4gXFx0dW5zaWduZWQgbG9uZyByZW1fcGFnZXMgPSBucl9wYWdlcztcXG4gXFx0bm9kZW1hc2tfdCBub2RlcztcXG5AQCAtMjY3NiwyNSArMjY5OCwxMiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbiBcXHRtZS1cXHUwMDNlaWxfd2VpZ2h0ID0gMDtcXG4gXFx0cHJldl9ub2RlID0gbm9kZTtcXG4gXFxuLVxcdC8qIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzIHRvIG9wZXJhdGUgb24gb3V0c2lkZSByY3UgKi9cXG4tXFx0d2VpZ2h0cyA9IGt6YWxsb2MobnJfbm9kZV9pZHMsIEdGUF9LRVJORUwpO1xcbi1cXHRpZiAoIXdlaWdodHMpXFxuLVxcdFxcdHJldHVybiB0b3RhbF9hbGxvY2F0ZWQ7XFxuLVxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdHN0YXRlID0gcmN1X2RlcmVmZXJlbmNlKHdpX3N0YXRlKTtcXG4tXFx0aWYgKHN0YXRlKSB7XFxuLVxcdFxcdG1lbWNweSh3ZWlnaHRzLCBzdGF0ZS1cXHUwMDNlaXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XFxuLVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXFxuLVxcdFxcdFxcdHdlaWdodHNbaV0gPSAxO1xcbi1cXHR9XFxuK1xcdHN0YXRlID0gd2lfc3RhdGVfZ2V0KCk7XFxuK1xcdHRhYmxlID0gc3RhdGUgPyBzdGF0ZS1cXHUwMDNlaXdfdGFibGUgOiBOVUxMO1xcbiBcXG4gXFx0LyogY2FsY3VsYXRlIHRvdGFsLCBkZXRlY3Qgc3lzdGVtIGRlZmF1bHQgdXNhZ2UgKi9cXG4gXFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG5vZGVzKVxcbi1cXHRcXHR3ZWlnaHRfdG90YWwgKz0gd2VpZ2h0c1tub2RlXTtcXG4rXFx0XFx0d2VpZ2h0X3RvdGFsICs9IHRhYmxlID8gdGFibGVbbm9kZV0gOiAxO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXFxuQEAgLTI3MDYsMTAgKzI3MTUsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG4gXFx0cm91bmRzID0gcmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsO1xcbiBcXHRkZWx0YSA9IHJlbV9wYWdlcyAlIHdlaWdodF90b3RhbDtcXG4gXFx0cmVzdW1lX25vZGUgPSBuZXh0X25vZGVfaW4ocHJldl9ub2RlLCBub2Rlcyk7XFxuLVxcdHJlc3VtZV93ZWlnaHQgPSB3ZWlnaHRzW3Jlc3VtZV9ub2RlXTtcXG4rXFx0cmVzdW1lX3dlaWdodCA9IHRhYmxlID8gdGFibGVbcmVzdW1lX25vZGVdIDogMTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5ub2RlczsgaSsrKSB7XFxuIFxcdFxcdG5vZGUgPSBuZXh0X25vZGVfaW4ocHJldl9ub2RlLCBub2Rlcyk7XFxuLVxcdFxcdHdlaWdodCA9IHdlaWdodHNbbm9kZV07XFxuK1xcdFxcdHdlaWdodCA9IHRhYmxlID8gdGFibGVbbm9kZV0gOiAxO1xcbiBcXHRcXHRub2RlX3BhZ2VzID0gd2VpZ2h0ICogcm91bmRzO1xcbiBcXHRcXHQvKiBJZiBhIGRlbHRhIGV4aXN0cywgYWRkIHRoaXMgbm9kZSdzIHBvcnRpb24gb2YgdGhlIGRlbHRhICovXFxuIFxcdFxcdGlmIChkZWx0YSBcXHUwMDNlIHdlaWdodCkge1xcbkBAIC0yNzM1LDcgKzI3NDQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbiBcXHR9XFxuIFxcdG1lLVxcdTAwM2VpbF9wcmV2ID0gcmVzdW1lX25vZGU7XFxuIFxcdG1lLVxcdTAwM2VpbF93ZWlnaHQgPSByZXN1bWVfd2VpZ2h0O1xcbi1cXHRrZnJlZSh3ZWlnaHRzKTtcXG4rXFx0d2lfc3RhdGVfcHV0KHN0YXRlKTtcXG4gXFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcXG4gfVxcbiBcXG5AQCAtMzY0NCw2ICszNjUzLDcgQEAgc3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbiBcXHRuZXdfd2lfc3RhdGUgPSBremFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTtcXG4gXFx0aWYgKCFuZXdfd2lfc3RhdGUpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRyZWZjb3VudF9zZXQoXFx1MDAyNm5ld193aV9zdGF0ZS1cXHUwMDNlcmVmY250LCAxKTtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbiBcXHRvbGRfd2lfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHdpX3N0YXRlLFxcbkBAIC0zNjYwLDEwICszNjcwLDcgQEAgc3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbiBcXG4gXFx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbi1cXHRpZiAob2xkX3dpX3N0YXRlKSB7XFxuLVxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbi1cXHRcXHRrZnJlZShvbGRfd2lfc3RhdGUpO1xcbi1cXHR9XFxuK1xcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xcbiBcXHRyZXR1cm4gY291bnQ7XFxuIH1cXG4gXFxuQEAgLTM2OTYsNiArMzcwMyw3IEBAIHN0YXRpYyBzc2l6ZV90IHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gXFx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XFxuIFxcdGlmICghbmV3X3dpX3N0YXRlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZuZXdfd2lfc3RhdGUtXFx1MDAzZXJlZmNudCwgMSk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ub2RlX2lkczsgaSsrKVxcbiBcXHRcXHRuZXdfd2lfc3RhdGUtXFx1MDAzZWl3X3RhYmxlW2ldID0gMTtcXG4gXFxuQEAgLTM3MjgsMTAgKzM3MzYsNyBAQCBzdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuIHVwZGF0ZV93aV9zdGF0ZTpcXG4gXFx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNndpX3N0YXRlX2xvY2spO1xcbi1cXHRpZiAob2xkX3dpX3N0YXRlKSB7XFxuLVxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbi1cXHRcXHRrZnJlZShvbGRfd2lfc3RhdGUpO1xcbi1cXHR9XFxuK1xcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xcbiBcXHRyZXR1cm4gY291bnQ7XFxuIH1cXG4gXFxuQEAgLTM3NzUsMTAgKzM3ODAsNyBAQCBzdGF0aWMgdm9pZCB3aV9zdGF0ZV9mcmVlKHZvaWQpXFxuIFxcdHJjdV9hc3NpZ25fcG9pbnRlcih3aV9zdGF0ZSwgTlVMTCk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2d2lfc3RhdGVfbG9jayk7XFxuIFxcbi1cXHRpZiAob2xkX3dpX3N0YXRlKSB7XFxuLVxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbi1cXHRcXHRrZnJlZShvbGRfd2lfc3RhdGUpO1xcbi1cXHR9XFxuK1xcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHdpX2F1dG9fYXR0ciA9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI1OjA2LjgxMTA5NTMzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk3NTQ0Mzk3MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZcIixcbiAgICBcIm1lbXBvbGljeV9zZXRfbm9kZV9wZXJmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdlaWdodGVkIGludGVybGVhdmUgbWVtb3J5IHBvbGljeSBsb2dpYyBpbiBtbS9tZW1wb2xpY3kuYyBieSBpbnRyb2R1Y2luZyBhIHJlZmNvdW50IGFuZCByZXBsYWNpbmcgc3luY2hyb25pemVfcmN1KCkgKyBrZnJlZSgpIHdpdGgga2ZyZWVfcmN1KCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIGFuZCBzeXNmcyBub2RlIHBlcmZvcm1hbmNlIHVwZGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3MzI4OTdkNzExYzhhZGYwNjg0NjA3N2Y0NWQ1MDM3ODNmNDQ2OTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAwMzoyNTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcbmluZGV4IDBlNTE3NWYxYzc2N2QuLjRhMzcyMmM2M2IzMWIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xuKysrIGIvbW0vbWVtcG9saWN5LmNcbkBAIC0xMTIsNiArMTEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xlYWZvcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2djZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGJmbHVzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYi5oXHUwMDNlXG5AQCAtMTU2LDcgKzE1Nyw5IEBAIHN0YXRpYyBjb25zdCBpbnQgd2VpZ2h0aW5lc3MgPSAzMjtcbiAgKi9cbiBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSB7XG4gXHRib29sIG1vZGVfYXV0bztcbi1cdHU4IGl3X3RhYmxlW107XG4rXHRyZWZjb3VudF90IHJlZmNudDtcbitcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4rXHR1OCBpd190YWJsZVtdIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gfTtcbiBzdGF0aWMgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgX19yY3UgKndpX3N0YXRlO1xuIHN0YXRpYyB1bnNpZ25lZCBpbnQgKm5vZGVfYndfdGFibGU7XG5AQCAtMTY3LDYgKzE3MCwyNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50ICpub2RlX2J3X3RhYmxlO1xuICAqL1xuIHN0YXRpYyBERUZJTkVfTVVURVgod2lfc3RhdGVfbG9jayk7XG4gXG4rLyogQWxsb3cgc2xlZXBpbmcgcmVhZGVycyB0byBwaW4gdGhlIHN0YXRlIHRvIGF2b2lkIHRha2luZyBjb3BpZXMgKi9cbitzdGF0aWMgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKndpX3N0YXRlX2dldCh2b2lkKVxuK3tcbitcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHdoaWxlICgoc3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpKSkge1xuK1x0XHRpZiAocmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnN0YXRlLVx1MDAzZXJlZmNudCkpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJldHVybiBzdGF0ZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgd2lfc3RhdGVfcHV0KHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRpZiAoc3RhdGUgXHUwMDI2XHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZzdGF0ZS1cdTAwM2VyZWZjbnQpKVxuK1x0XHRrZnJlZV9yY3Uoc3RhdGUsIHJjdSk7XG4rfVxuK1xuIHN0YXRpYyB1OCBnZXRfaWxfd2VpZ2h0KGludCBub2RlKVxuIHtcbiBcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcbkBAIC0yMzUsNiArMjU5LDcgQEAgaW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXHRuZXdfd2lfc3RhdGUtXHUwMDNlbW9kZV9hdXRvID0gdHJ1ZTtcbitcdHJlZmNvdW50X3NldChcdTAwMjZuZXdfd2lfc3RhdGUtXHUwMDNlcmVmY250LCAxKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXG4gXHRcdG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZVtpXSA9IDE7XG4gXG5AQCAtMjY1LDEwICsyOTAsNyBAQCBpbnQgbWVtcG9saWN5X3NldF9ub2RlX3BlcmYodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKVxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpO1xuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuLVx0aWYgKG9sZF93aV9zdGF0ZSkge1xuLVx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbi1cdFx0a2ZyZWUob2xkX3dpX3N0YXRlKTtcbi1cdH1cbitcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xuIG91dDpcbiBcdGtmcmVlKG9sZF9idyk7XG4gXHRyZXR1cm4gMDtcbkBAIC0yNjMyLDcgKzI2NTQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0dW5zaWduZWQgbG9uZyBucl9hbGxvY2F0ZWQgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyByb3VuZHM7XG4gXHR1bnNpZ25lZCBsb25nIG5vZGVfcGFnZXMsIGRlbHRhO1xuLVx0dTggKndlaWdodHMsIHdlaWdodDtcbitcdHU4ICp0YWJsZSwgd2VpZ2h0O1xuIFx0dW5zaWduZWQgaW50IHdlaWdodF90b3RhbCA9IDA7XG4gXHR1bnNpZ25lZCBsb25nIHJlbV9wYWdlcyA9IG5yX3BhZ2VzO1xuIFx0bm9kZW1hc2tfdCBub2RlcztcbkBAIC0yNjc2LDI1ICsyNjk4LDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG4gXHRtZS1cdTAwM2VpbF93ZWlnaHQgPSAwO1xuIFx0cHJldl9ub2RlID0gbm9kZTtcbiBcbi1cdC8qIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzIHRvIG9wZXJhdGUgb24gb3V0c2lkZSByY3UgKi9cbi1cdHdlaWdodHMgPSBremFsbG9jKG5yX25vZGVfaWRzLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghd2VpZ2h0cylcbi1cdFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcbi1cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdHN0YXRlID0gcmN1X2RlcmVmZXJlbmNlKHdpX3N0YXRlKTtcbi1cdGlmIChzdGF0ZSkge1xuLVx0XHRtZW1jcHkod2VpZ2h0cywgc3RhdGUtXHUwMDNlaXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0fSBlbHNlIHtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXG4tXHRcdFx0d2VpZ2h0c1tpXSA9IDE7XG4tXHR9XG4rXHRzdGF0ZSA9IHdpX3N0YXRlX2dldCgpO1xuK1x0dGFibGUgPSBzdGF0ZSA/IHN0YXRlLVx1MDAzZWl3X3RhYmxlIDogTlVMTDtcbiBcbiBcdC8qIGNhbGN1bGF0ZSB0b3RhbCwgZGV0ZWN0IHN5c3RlbSBkZWZhdWx0IHVzYWdlICovXG4gXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXG4tXHRcdHdlaWdodF90b3RhbCArPSB3ZWlnaHRzW25vZGVdO1xuK1x0XHR3ZWlnaHRfdG90YWwgKz0gdGFibGUgPyB0YWJsZVtub2RlXSA6IDE7XG4gXG4gXHQvKlxuIFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXG5AQCAtMjcwNiwxMCArMjcxNSwxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0cm91bmRzID0gcmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsO1xuIFx0ZGVsdGEgPSByZW1fcGFnZXMgJSB3ZWlnaHRfdG90YWw7XG4gXHRyZXN1bWVfbm9kZSA9IG5leHRfbm9kZV9pbihwcmV2X25vZGUsIG5vZGVzKTtcbi1cdHJlc3VtZV93ZWlnaHQgPSB3ZWlnaHRzW3Jlc3VtZV9ub2RlXTtcbitcdHJlc3VtZV93ZWlnaHQgPSB0YWJsZSA/IHRhYmxlW3Jlc3VtZV9ub2RlXSA6IDE7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBubm9kZXM7IGkrKykge1xuIFx0XHRub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xuLVx0XHR3ZWlnaHQgPSB3ZWlnaHRzW25vZGVdO1xuK1x0XHR3ZWlnaHQgPSB0YWJsZSA/IHRhYmxlW25vZGVdIDogMTtcbiBcdFx0bm9kZV9wYWdlcyA9IHdlaWdodCAqIHJvdW5kcztcbiBcdFx0LyogSWYgYSBkZWx0YSBleGlzdHMsIGFkZCB0aGlzIG5vZGUncyBwb3J0aW9uIG9mIHRoZSBkZWx0YSAqL1xuIFx0XHRpZiAoZGVsdGEgXHUwMDNlIHdlaWdodCkge1xuQEAgLTI3MzUsNyArMjc0NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG4gXHR9XG4gXHRtZS1cdTAwM2VpbF9wcmV2ID0gcmVzdW1lX25vZGU7XG4gXHRtZS1cdTAwM2VpbF93ZWlnaHQgPSByZXN1bWVfd2VpZ2h0O1xuLVx0a2ZyZWUod2VpZ2h0cyk7XG4rXHR3aV9zdGF0ZV9wdXQoc3RhdGUpO1xuIFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcbiB9XG4gXG5AQCAtMzY0NCw2ICszNjUzLDcgQEAgc3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuIFx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XG4gXHRpZiAoIW5ld193aV9zdGF0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2bmV3X3dpX3N0YXRlLVx1MDAzZXJlZmNudCwgMSk7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuIFx0b2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSxcbkBAIC0zNjYwLDEwICszNjcwLDcgQEAgc3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuIFxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuLVx0aWYgKG9sZF93aV9zdGF0ZSkge1xuLVx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbi1cdFx0a2ZyZWUob2xkX3dpX3N0YXRlKTtcbi1cdH1cbitcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xuIFx0cmV0dXJuIGNvdW50O1xuIH1cbiBcbkBAIC0zNjk2LDYgKzM3MDMsNyBAQCBzdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRuZXdfd2lfc3RhdGUgPSBremFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTtcbiBcdGlmICghbmV3X3dpX3N0YXRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdHJlZmNvdW50X3NldChcdTAwMjZuZXdfd2lfc3RhdGUtXHUwMDNlcmVmY250LCAxKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXG4gXHRcdG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZVtpXSA9IDE7XG4gXG5AQCAtMzcyOCwxMCArMzczNiw3IEBAIHN0YXRpYyBzc2l6ZV90IHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiB1cGRhdGVfd2lfc3RhdGU6XG4gXHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIG5ld193aV9zdGF0ZSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG4tXHRpZiAob2xkX3dpX3N0YXRlKSB7XG4tXHRcdHN5bmNocm9uaXplX3JjdSgpO1xuLVx0XHRrZnJlZShvbGRfd2lfc3RhdGUpO1xuLVx0fVxuK1x0d2lfc3RhdGVfcHV0KG9sZF93aV9zdGF0ZSk7XG4gXHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuQEAgLTM3NzUsMTAgKzM3ODAsNyBAQCBzdGF0aWMgdm9pZCB3aV9zdGF0ZV9mcmVlKHZvaWQpXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIE5VTEwpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuIFxuLVx0aWYgKG9sZF93aV9zdGF0ZSkge1xuLVx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbi1cdFx0a2ZyZWUob2xkX3dpX3N0YXRlKTtcbi1cdH1cbitcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHdpX2F1dG9fYXR0ciA9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTowNi44MTEwOTc5NTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTI1ODY3NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBBIE1lbW9yeSBQb2xpY3kgUGVyc3BlY3RpdmUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoLCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgXCJEb2VzIHRoaXMgYWN0dWFsbHkgY2hhbmdlIHNvbWV0aGluZyBpbXBvcnRhbnQgZW5vdWdoIHRvIHdhcnJhbnQgZnV6emluZz9cIiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCdzIG1vZGlmeWluZyBgbW0vbWVtcG9saWN5LmNgLCB3aGljaCBpcyBhbHdheXMgYSBwbGFjZSB0byBwYXkgYXR0ZW50aW9uIHRvLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhcm91bmQgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYC4gSSBzZWUgYSByZWZjb3VudCBoYXMgYmVlbiBhZGRlZCwgYW5kIHRoZSBzdGFuZGFyZCBgc3luY2hyb25pemVfcmN1KClgIGFuZCBga2ZyZWUoKWAgZGFuY2UgaGFzIGJlZW4gc3dhcHBlZCBmb3IgYGtmcmVlX3JjdSgpYCB1c2luZyB0aGlzIG5ldyBgd2lfc3RhdGVfcHV0KClgIGZ1bmN0aW9uLiBUaGVyZSdzIGFsc28gYSBjb3JyZXNwb25kaW5nIGB3aV9zdGF0ZV9nZXQoKWAgdXNpbmcgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByZWZjb3VudF9pbmNfbm90X3plcm8oKWAuIFJpZ2h0IGF3YXksIHRoaXMgc2NyZWFtcyAqZnVuY3Rpb25hbCBjaGFuZ2UqIGluIHRoZSBtZW1vcnkgcG9saWN5IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGZvciB3ZWlnaHRlZCBpbnRlcmxlYXZlLiBTbywgeWVzLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBwdXJwb3Nlcy5cblxuTXkgbmV4dCBtb3ZlIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGlzIGNvZGUuIENhbiB3ZSBhY3R1YWxseSAqdHJpZ2dlciogdGhlc2UgY2hhbmdlcz8gSSBuZWVkIHRvIGNoZWNrIGlmIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGlzIHJlYWNoYWJsZSwgYW5kIGlmIGl0J3MgZGVwZW5kZW50IG9uIGFueSBzcGVjaWZpYyBjb25maWdzIHRoYXQgbWlnaHQgYWZmZWN0IGZ1enphYmlsaXR5LiBDb25zaWRlcmluZyB0aGUgZmlsZSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBzdGFuZGFyZCBOVU1BIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnQgZm9yIG1lbXBvbGljeS4gU28sIEkgbmVlZCB0byBjb25maXJtIGBDT05GSUdfTlVNQWAgZGVwZW5kZW5jeSwgYW5kIEknbGwganVtcCBpbnRvIGBtbS9NYWtlZmlsZWAgdG8gdmVyaWZ5IGFueSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29tZSBpbnRvIHBsYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNToxMS45MzY5Njk3MjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUzNzg4NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtcG9saWN5Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9ODU9b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVxcdCs9IGh1Z2V0bGJfdm1lbW1hcC5vXFxubW0vTWFrZWZpbGU6ODY6b2JqLSQoQ09ORklHX05VTUEpIFxcdCs9IG1lbXBvbGljeS5vXFxubW0vTWFrZWZpbGUtODctb2JqLSQoQ09ORklHX1NQQVJTRU1FTSlcXHQrPSBzcGFyc2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNToxMS45OTIzNTI5OTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjAxMTQ5MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTlVNQSBNZW1vcnkgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIHRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX05VTUFgIGlzIGNvbmZpcm1lZCwgc28gTlVNQSBpcyBkZWZpbml0ZWx5IGluIHBsYXkuIE5vdywgbXkgZm9jdXMgaXMgaW1tZWRpYXRlbHkgc2hpZnRpbmcgdG8gbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCBmdW5jdGlvbiB3aXRoaW4gYG1tL21lbXBvbGljeS5jYC4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucywgZXNwZWNpYWxseSB3aGVuIHdlaWdodGVkIGludGVybGVhdmluZyBwb2xpY2llcyBhcmUgYXBwbGllZCBpbiBhIE5VTUEgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGltcGxlbWVudGVkLCBpdHMgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yay4gVGhpcyBpcyBhIGtleSBmdW5jdGlvbiB0byBkaWcgaW50byB3aGVuIG9wdGltaXppbmcgb3IgZGVidWdnaW5nIE5VTUEtYXdhcmUgYXBwbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzE2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6MTUuNTkzNTA0MzYyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwOTk3OTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1wb2xpY3kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0yNjExPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjQ1LVxcbm1tL21lbXBvbGljeS5jOjI2NDY6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjQ3LVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI3Nzc9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc5MS1cXHRpZiAocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcXG5tbS9tZW1wb2xpY3kuYzoyNzkyOlxcdFxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoXFxubW0vbWVtcG9saWN5LmMtMjc5My1cXHRcXHRcXHRcXHQgIGdmcCwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI1OjE1LjY3NDUwODU5NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTU0NjkwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXZWlnaHRlZCBJbnRlcmxlYXZlIE1lbW9yeSBQb2xpY3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYC4gSXQncyBwcmV0dHkgY2xlYXIgZnJvbSB0aGUgY29kZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIHNwZWNpZmljYWxseSB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFYCB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuIFRoaXMgbWFrZXMgc2Vuc2U7IHRoYXQncyB0aGUgcG9pbnQgb2YgdGhlIHdob2xlIHRoaW5nLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgaG93IGRvZXMgdGhpcyB3ZWlnaHRlZCBpbnRlcmxlYXZlIHBvbGljeSAqZ2V0KiB0cmlnZ2VyZWQgaW4gdGhlIGZpcnN0IHBsYWNlPyBJIG5lZWQgdG8gbWFwIHRoZSBwYXRoIHRvIHVzZXJzcGFjZS4gIEVzc2VudGlhbGx5LCB3aGF0IHN5c2NhbGxzIGNhbiBhIHVzZXIgYWN0dWFsbHkgdXNlIHRvIHNldCB0aGlzIHBvbGljeT8gIFdlJ3JlIHRhbGtpbmcgYG1iaW5kYCBvciBgc2V0X21lbXBvbGljeWAgY2FsbHMsIHJpZ2h0PyAgVGhhdCdzIHdoZXJlIHRoaXMgd2hvbGUgaW50ZXJsZWF2ZS93ZWlnaHQgbWVjaGFuaXNtIGdldHMgc2V0IHVwIGFuZCBwdXQgaW50byBlZmZlY3QuIEdvdHRhIGRvdWJsZS1jaGVjayB0aG9zZSBzeXNjYWxsIGltcGxlbWVudGF0aW9ucyB0byBlbnN1cmUgZXZlcnl0aGluZydzIGhvb2tlZCB1cCBjb3JyZWN0bHkgYW5kIHRoYXQgdGhlIHBvbGljeSBiZWhhdmlvciBtYXRjaGVzIGV4cGVjdGF0aW9ucyB3aGVuIHNldCBmcm9tIGEgdXNlciBhcHBsaWNhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHBhdGggaXMgc2VjdXJlIGFuZCB0aGF0IHRoZSB3ZWlnaHRzIGFyZSByZXNwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxOTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNToxOS42ODk5Nzk4NzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ3NTc3NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXBvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTU5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG1lbXBvbGljeV9vcGVyYXRpb25zIG1wb2xfb3BzW01QT0xfTUFYXSA9IHtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTYxNS1cXHR9LFxcbm1tL21lbXBvbGljeS5jOjYxNjpcXHRbTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFXSA9IHtcXG5tbS9tZW1wb2xpY3kuYy02MTctXFx0XFx0LmNyZWF0ZSA9IG1wb2xfbmV3X25vZGVtYXNrLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTA4Mz1zdGF0aWMgbG9uZyBkb19zZXRfbWVtcG9saWN5KHVuc2lnbmVkIHNob3J0IG1vZGUsIHVuc2lnbmVkIHNob3J0IGZsYWdzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTEwOS1cXHRpZiAobmV3IFxcdTAwMjZcXHUwMDI2IChuZXctXFx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFIHx8XFxubW0vbWVtcG9saWN5LmM6MTExMDpcXHRcXHQgICAgbmV3LVxcdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkpIHtcXG5tbS9tZW1wb2xpY3kuYy0xMTExLVxcdFxcdGN1cnJlbnQtXFx1MDAzZWlsX3ByZXYgPSBNQVhfTlVNTk9ERVMtMTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTExMjc9c3RhdGljIHZvaWQgZ2V0X3BvbGljeV9ub2RlbWFzayhzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIG5vZGVtYXNrX3QgKm5vZGVzKVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTEzNy1cXHRjYXNlIE1QT0xfUFJFRkVSUkVEX01BTlk6XFxubW0vbWVtcG9saWN5LmM6MTEzODpcXHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcXG5tbS9tZW1wb2xpY3kuYy0xMTM5LVxcdFxcdCpub2RlcyA9IHBvbC1cXHUwMDNlbm9kZXM7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xMTYzPXN0YXRpYyBsb25nIGRvX2dldF9tZW1wb2xpY3koaW50ICpwb2xpY3ksIG5vZGVtYXNrX3QgKm5tYXNrLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTIyMy1cXHRcXHR9IGVsc2UgaWYgKHBvbCA9PSBjdXJyZW50LVxcdTAwM2VtZW1wb2xpY3kgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1wb2xpY3kuYzoxMjI0OlxcdFxcdFxcdFxcdHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpIHtcXG5tbS9tZW1wb2xpY3kuYy0xMjI1LVxcdFxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2VpbF93ZWlnaHQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xNTAyPXN0YXRpYyBsb25nIGRvX21iaW5kKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTU5Ny1cXHRcXHRpZiAobmV3LVxcdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSB8fFxcbm1tL21lbXBvbGljeS5jOjE1OTg6XFx0XFx0ICAgIG5ldy1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpIHtcXG5tbS9tZW1wb2xpY3kuYy0xNTk5LVxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDM0PXN0cnVjdCBtZW1wb2xpY3kgKl9fZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMDQ3LSAqIEBpbHg6IGludGVybGVhdmUgaW5kZXggKG91dHB1dCksIGZvciB1c2Ugb25seSB3aGVuIE1QT0xfSU5URVJMRUFWRSBvclxcbm1tL21lbXBvbGljeS5jOjIwNDg6ICogICAgICAgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFXFxubW0vbWVtcG9saWN5LmMtMjA0OS0gKlxcbi0tXFxubW0vbWVtcG9saWN5LmM9MjA1Nz1zdHJ1Y3QgbWVtcG9saWN5ICpnZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIwNjUtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUgfHxcXG5tbS9tZW1wb2xpY3kuYzoyMDY2OlxcdCAgICBwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKSB7XFxubW0vbWVtcG9saWN5LmMtMjA2Ny1cXHRcXHQqaWx4ICs9IHZtYS1cXHUwMDNldm1fcGdvZmYgXFx1MDAzZVxcdTAwM2Ugb3JkZXI7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMTU5PXVuc2lnbmVkIGludCBtZW1wb2xpY3lfc2xhYl9ub2RlKHZvaWQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMTc3LVxcbm1tL21lbXBvbGljeS5jOjIxNzg6XFx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XFxubW0vbWVtcG9saWN5LmMtMjE3OS1cXHRcXHRyZXR1cm4gd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9ub2Rlcyhwb2xpY3kpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjI4NT1zdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X25vZGVtYXNrKGdmcF90IGdmcCwgc3RydWN0IG1lbXBvbGljeSAqcG9sLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjMxOC1cXHRcXHRicmVhaztcXG5tbS9tZW1wb2xpY3kuYzoyMzE5OlxcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jLTIzMjAtXFx0XFx0Km5pZCA9IChpbHggPT0gTk9fSU5URVJMRUFWRV9JTkRFWCkgP1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjM3MT1ib29sIGluaXRfbm9kZW1hc2tfb2ZfbWVtcG9saWN5KG5vZGVtYXNrX3QgKm1hc2spXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMzg0LVxcdGNhc2UgTVBPTF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jOjIzODU6XFx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XFxubW0vbWVtcG9saWN5LmMtMjM4Ni1cXHRcXHQqbWFzayA9IG1lbXBvbGljeS1cXHUwMDNlbm9kZXM7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNDYxPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbXBvbChnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI0ODUtXFx0XFx0aWYgKHBvbC1cXHUwMDNlbW9kZSAhPSBNUE9MX0lOVEVSTEVBVkUgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1wb2xpY3kuYzoyNDg2OlxcdFxcdCAgICBwb2wtXFx1MDAzZW1vZGUgIT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFIFxcdTAwMjZcXHUwMDI2XFxubW0vbWVtcG9saWN5LmMtMjQ4Ny1cXHRcXHQgICAgKCFub2RlbWFzayB8fCBub2RlX2lzc2V0KG5pZCwgKm5vZGVtYXNrKSkpIHtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI1MDgtXFx0aWYgKHVubGlrZWx5KHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUgfHxcXG5tbS9tZW1wb2xpY3kuYzoyNTA5OlxcdFxcdCAgICAgcG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkgXFx1MDAyNlxcdTAwMjYgcGFnZSkge1xcbm1tL21lbXBvbGljeS5jLTI1MTAtXFx0XFx0Lyogc2tpcCBOVU1BX0lOVEVSTEVBVkVfSElUIHVwZGF0ZSBpZiBudW1hIHN0YXRzIGlzIGRpc2FibGVkICovXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNzc3PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3OTAtXFxubW0vbWVtcG9saWN5LmM6Mjc5MTpcXHRpZiAocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcXG5tbS9tZW1wb2xpY3kuYy0yNzkyLVxcdFxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yODUxPWJvb2wgX19tcG9sX2VxdWFsKHN0cnVjdCBtZW1wb2xpY3kgKmEsIHN0cnVjdCBtZW1wb2xpY3kgKmIpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yODY5LVxcdGNhc2UgTVBPTF9QUkVGRVJSRURfTUFOWTpcXG5tbS9tZW1wb2xpY3kuYzoyODcwOlxcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jLTI4NzEtXFx0XFx0cmV0dXJuICEhbm9kZXNfZXF1YWwoYS1cXHUwMDNlbm9kZXMsIGItXFx1MDAzZW5vZGVzKTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI5ODc9aW50IG1wb2xfbWlzcGxhY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzAxMy1cXG5tbS9tZW1wb2xpY3kuYzozMDE0OlxcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jLTMwMTUtXFx0XFx0cG9sbmlkID0gd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9uaWQocG9sLCBpbHgpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MzQwMD1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBvbGljeV9tb2Rlc1tdID1cXG4tLVxcbm1tL21lbXBvbGljeS5jLTM0MDUtXFx0W01QT0xfSU5URVJMRUFWRV0gPSBcXFwiaW50ZXJsZWF2ZVxcXCIsXFxubW0vbWVtcG9saWN5LmM6MzQwNjpcXHRbTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFXSA9IFxcXCJ3ZWlnaHRlZCBpbnRlcmxlYXZlXFxcIixcXG5tbS9tZW1wb2xpY3kuYy0zNDA3LVxcdFtNUE9MX0xPQ0FMXSAgICAgID0gXFxcImxvY2FsXFxcIixcXG4tLVxcbm1tL21lbXBvbGljeS5jPTM0MjI9aW50IG1wb2xfcGFyc2Vfc3RyKGNoYXIgKnN0ciwgc3RydWN0IG1lbXBvbGljeSAqKm1wb2wpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zNDY1LVxcdGNhc2UgTVBPTF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jOjM0NjY6XFx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XFxubW0vbWVtcG9saWN5LmMtMzQ2Ny1cXHRcXHQvKlxcbi0tXFxubW0vbWVtcG9saWN5LmM9MzU1OD12b2lkIG1wb2xfdG9fc3RyKGNoYXIgKmJ1ZmZlciwgaW50IG1heGxlbiwgc3RydWN0IG1lbXBvbGljeSAqcG9sKVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzU4MC1cXHRjYXNlIE1QT0xfSU5URVJMRUFWRTpcXG5tbS9tZW1wb2xpY3kuYzozNTgxOlxcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jLTM1ODItXFx0XFx0bm9kZXMgPSBwb2wtXFx1MDAzZW5vZGVzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNToxOS43NzQ3NDE5MDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMwMjc0NzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgTWVtb3J5IFBvbGljeSBDaGFuZ2VzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIGtleSBhcmVhcywgc3BlY2lmaWNhbGx5IGFyb3VuZCB3ZWlnaHRlZCBpbnRlcmxlYXZlIGFuZCBidWxrIHBhZ2UgYWxsb2NhdGlvbi4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgLCBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCwgYW5kIGEgZmV3IHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYG5vZGVfc3RvcmVgLCBgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlYCwgYW5kIGB3aV9zdGF0ZV9mcmVlYC4gIEdpdmVuIG15IGtub3dsZWRnZSBvZiB0aGUga2VybmVsLCBJIGtub3cgdGhvc2Ugc3lzZnMgZW50cmllcyBmb3Igd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBhcmUgZGVmaW5lZCB3aXRoaW4gYG1tL21lbXBvbGljeS5jYC4gIEkgbmVlZCB0byBjaGVjayBob3cgYG5vZGVfc3RvcmVgIGlzIGJlaW5nIHVzZWQuIExldCdzIHNlZSBpZiB0aGlzIGBub2RlX3N0b3JlYCBpcyByZWFjaGFibGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IHBvbGljeSBpbmZyYXN0cnVjdHVyZS4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZG9lcyB0byBwYWdlIGFsbG9jYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUxMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNToyMy40MDUwMTk5NDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNTAxMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vZGVfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9MzYyOT1zdGF0aWMgc3NpemVfdCBub2RlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM2MzktXFxubW0vbWVtcG9saWN5LmM6MzY0MDpzdGF0aWMgc3NpemVfdCBub2RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxubW0vbWVtcG9saWN5LmMtMzY0MS1cXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MzgwNj1zdGF0aWMgaW50IHN5c2ZzX3dpX25vZGVfYWRkKGludCBuaWQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zODMwLVxcdG5ld19hdHRyLVxcdTAwM2Vrb2JqX2F0dHIuc2hvdyA9IG5vZGVfc2hvdztcXG5tbS9tZW1wb2xpY3kuYzozODMxOlxcdG5ld19hdHRyLVxcdTAwM2Vrb2JqX2F0dHIuc3RvcmUgPSBub2RlX3N0b3JlO1xcbm1tL21lbXBvbGljeS5jLTM4MzItXFx0bmV3X2F0dHItXFx1MDAzZW5pZCA9IG5pZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6MjMuNDg3NTI5MzgyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MTAyODYzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFdlaWdodGVkIEludGVybGVhdmUgTWVtb3J5IFBvbGljeSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBtZW1vcnkgcG9saWN5IGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBgc3lzZnNgIGVudHJpZXMgZm9yIHRoaXMgcG9saWN5LCB0aGUgb25lcyB0aGF0IGxpdmUgaW4gcGF0aHMgbGlrZSBgL3N5cy9rZXJuZWwvbW0vbWVtcG9saWN5L3dlaWdodGVkX2ludGVybGVhdmUvbm9kZU5gLCBhcmUgY3JlYXRlZCB0aHJvdWdoIGNhbGxzIHRvIGBzeXNmc193aV9ub2RlX2FkZGAgZHVyaW5nIGVpdGhlciBpbml0aWFsaXphdGlvbiBvciBob3RwbHVnIGV2ZW50cy4gVGhhdCdzIHRoZSBiYXNlbGluZS5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFuIGltcHJvdmVtZW50IGFyb3VuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSBmbGF3ZWQgYnkgdXNpbmcgYHN5bmNocm9uaXplX3JjdSgpYCB3aGlsZSBhIG11dGV4IHdhcyBoZWxkLCB3aGljaCBpcyBhIGJpZyBuby1ubywgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGl0J3MgYmVlbiBvcHRpbWl6ZWQgdG8gYXZvaWQgaXQuIFRoZSBzcGVjaWZpYyBjaGFuZ2UgaW52b2x2ZXMgaW50cm9kdWNpbmcgYHJlZmNvdW50X3RgIHRvIHRoZSBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIGFuZCByZXBsYWNpbmcgdGhlIHByb2JsZW1hdGljIGBzeW5jaHJvbml6ZV9yY3VgICsgYGtmcmVlYCBzZXF1ZW5jZSB3aXRoIGEgbW9yZSBSQ1UtZnJpZW5kbHkgYGtmcmVlX3JjdWAuIEdvb2QuIFJlZmNvdW50cyBhcmUgZ2VuZXJhbGx5IGEgYmV0dGVyIGFwcHJvYWNoLlxuXG5UaGUgcGF0Y2ggYWxzbyBvcHRpbWl6ZXMgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAuIEl0IG5vdyB1c2VzIGB3aV9zdGF0ZV9nZXQoKWAsIHdoaWNoIGluY3JlbWVudHMgdGhlIHJlZmNvdW50LCByYXRoZXIgdGhhbiBhbGxvY2F0aW5nIGEgbG9jYWwgY29weSBvZiB3ZWlnaHRzIHdpdGggYGt6YWxsb2NgLiBUaGlzIGxvb2tzIGxpa2UgYSBkZWZpbml0ZSBwZXJmb3JtYW5jZSBib29zdCBhbmQgbGVzcyBjaGFuY2Ugb2YgbWVtb3J5IGxlYWtzLlxuXG5HaXZlbiB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0J3MgcmlwZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cyBmb3IgdGhlIGZ1enplci4gTXkgaW5pdGlhbCB0YXJnZXQgZnVuY3Rpb25zIHNob3VsZCBiZTpcblxuKiAgIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIChvciBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBzaW5jZSB0aGUgbGF0dGVyIGNhbGxzIHRoZSBmb3JtZXIpLlxuKiAgIGBub2RlX3N0b3JlYFxuKiAgIGB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmVgXG4qICAgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYFxuXG5JdCBsb29rcyBsaWtlIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxpbmcgZnVuY3Rpb24sIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIHRvIHNlZSBpZiB0aGF0J3MgYSB2aWFibGUgb3B0aW9uLiBPa2F5LCBsZXQgbWUgY29uZmlybS4uLiBJIG5lZWQgdG8gY2hlY2sgaWYgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXMgc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDYzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI1OjMwLjE5NzgxODc1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMyMjM1MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXBvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTI3NTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzc2LSAqL1xcbm1tL21lbXBvbGljeS5jOjI3Nzc6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI3NzgtXFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTozMC4yNzEwNDY1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjc4ODE2NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWxseSBFeHBvc2VkIE1lbW9yeSBQb2xpY3kgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBpcyBleHBvc2VkLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHVzdWFsbHkgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBtZW1vcnkgcG9saWN5IGFyZSBjYXJlZnVsbHkgZ3VhcmRlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQsIGFuZCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBpdHMgdmlzaWJpbGl0eS4gVGhlIG5hbWUgc3VnZ2VzdHMgaXQncyBhIGJ1bGsgYWxsb2NhdGlvbiB3aXRoIG5vIHByb2ZpbGluZywgYW5kIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBtZW1wb2xpY3kuIE15IG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IHRvIGludmVzdGlnYXRlIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgaW50ZXJhY3Rpb25zLCBzZXR0aW5ncyBvciBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBvciB1c2UuIEtub3dpbmcgaG93IHRoYXQgZnVuY3Rpb24gd29ya3Mgd2l0aCBtZW1vcnkgcG9saWNpZXMgaXMga2V5LiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIGNvbnRleHQgYW5kIGltcGFjdCBvZiBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCdzIGV4dGVybmFsIGF2YWlsYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAzOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI1OjMzLjUzODkzMjM1MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY3NzA3NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtcG9saWN5X3NldF9ub2RlX3BlcmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9MjExPXN0YXRpYyB2b2lkIHJlZHVjZV9pbnRlcmxlYXZlX3dlaWdodHModW5zaWduZWQgaW50ICpidywgdTggKm5ld19pdylcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI0My1cXG5tbS9tZW1wb2xpY3kuYzoyNDQ6aW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkcylcXG5tbS9tZW1wb2xpY3kuYy0yNDUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTozMy42MDU3MDk1NTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyMTY2OTcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSB2aXNpYmlsaXR5IG9mIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAuIExldCdzIHNlZS4uLiB0aGUgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgZXhwb3J0ZWQgb3IgaWYgaXQncyBzdGF0aWMuIFJpZ2h0LCBJIHJlY2FsbCBpdCdzIGRlZmluaXRlbHkgKm5vdCogc3RhdGljLCB3aGljaCBtZWFucyBpdCdzIGF2YWlsYWJsZSBmb3IgdXNlIG91dHNpZGUgdGhlIGN1cnJlbnQgbW9kdWxlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGl0J3MgYWN0dWFsbHkgYmVpbmcgKnVzZWQqLiBUaW1lIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsIHNpdGVzIGFuZCBtYXAgb3V0IGl0cyB1c2FnZS4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgcG90ZW50aWFsIGltcGFjdCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzOTksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTozNy41MjczODMzMTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTM3MDA2OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtcG9saWN5X3NldF9ub2RlX3BlcmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9ub2RlLmM9MjE2PXZvaWQgbm9kZV9zZXRfcGVyZl9hdHRycyh1bnNpZ25lZCBpbnQgbmlkLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkLFxcbi0tXFxuZHJpdmVycy9iYXNlL25vZGUuYy0yNDItXFx0aWYgKGFjY2VzcyA9PSBBQ0NFU1NfQ09PUkRJTkFURV9DUFUpIHtcXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jOjI0MzpcXHRcXHRpZiAobWVtcG9saWN5X3NldF9ub2RlX3BlcmYobmlkLCBjb29yZCkpIHtcXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTI0NC1cXHRcXHRcXHRwcl9pbmZvKFxcXCJmYWlsZWQgdG8gc2V0IG1lbXBvbGljeSBhdHRycyBmb3Igbm9kZSAlZFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvYmFzZS9ub2RlLmM9MjU3PXZvaWQgbm9kZV91cGRhdGVfcGVyZl9hdHRycyh1bnNpZ25lZCBpbnQgbmlkLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkLFxcbi0tXFxuZHJpdmVycy9iYXNlL25vZGUuYy0yODMtXFxuZHJpdmVycy9iYXNlL25vZGUuYzoyODQ6XFx0aWYgKG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKG5pZCwgY29vcmQpKVxcbmRyaXZlcnMvYmFzZS9ub2RlLmMtMjg1LVxcdFxcdHByX2luZm8oXFxcImZhaWxlZCB0byBzZXQgbWVtcG9saWN5IGF0dHJzIGZvciBub2RlICVkXFxcXG5cXFwiLCBuaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaD0xODA9ZXh0ZXJuIGJvb2wgYXBwbHlfcG9saWN5X3pvbmUoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5LCBlbnVtIHpvbmVfdHlwZSB6b25lKTtcXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oLTE4MS1cXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oOjE4MjpleHRlcm4gaW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLFxcbmluY2x1ZGUvbGludXgvbWVtcG9saWN5LmgtMTgzLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTIxMT1zdGF0aWMgdm9pZCByZWR1Y2VfaW50ZXJsZWF2ZV93ZWlnaHRzKHVuc2lnbmVkIGludCAqYncsIHU4ICpuZXdfaXcpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNDMtXFxubW0vbWVtcG9saWN5LmM6MjQ0OmludCBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZih1bnNpZ25lZCBpbnQgbm9kZSwgc3RydWN0IGFjY2Vzc19jb29yZGluYXRlICpjb29yZHMpXFxubW0vbWVtcG9saWN5LmMtMjQ1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6MzkuNzIxMDg5MTgzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMzAwNjYzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gTlVNQSBQZXJmb3JtYW5jZSBBdHRyaWJ1dGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgY29kZSByZWxhdGVkIHRvIG5vZGUgcGVyZm9ybWFuY2UgYXR0cmlidXRlcyDigJMgc3BlY2lmaWNhbGx5LCBmdW5jdGlvbnMgY2FsbGVkIGZyb20gYG5vZGVfc2V0X3BlcmZfYXR0cnNgIGFuZCBgbm9kZV91cGRhdGVfcGVyZl9hdHRyc2Agd2l0aGluIGBkcml2ZXJzL2Jhc2Uvbm9kZS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgbGlrZWx5IHRvdWNoZXMgb24gQUNQSSBITUFUIG9yIHNpbWlsYXIgbWVjaGFuaXNtcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuXG5cbkxldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYSBjb3VwbGUgb2YgcmVsYXRlZCBmdW5jdGlvbnMsIGBub2RlX3N0b3JlYCBhbmQgYHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZWAgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBnZXQgYm9nZ2VkIGRvd24gaW4gaW50ZXJuYWwgc3RhdGljIGZ1bmN0aW9ucy4gQXJlIHRoZXJlIHB1YmxpYyBpbnRlcmZhY2VzIHRoYXQgbWF0dGVyP1xuXG5gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhhdCBzZWVtcyBwcm9taXNpbmcsIGJ1dCBJIHNob3VsZCBsb29rIGF0IGFsbCB0aGUgZW50cnkgcG9pbnRzIGluIHRoaXMgYXJlYS4gYGRvX21iaW5kYCBvciBgZG9fc2V0X21lbXBvbGljeWAgbG9vayBpbnRlcmVzdGluZywgdGhleSdyZSBzdGF0aWMgaW50ZXJuYWxseSwgYnV0IGNhbGxlZCB2aWEgdGhlIGBzeXNfbWJpbmRgIGFuZCBgc3lzX3NldF9tZW1wb2xpY3lgIHN5c2NhbGxzLCBzbyB0aGVyZSdzIGFuIGV4dGVybmFsIHBvaW50IG9mIGludGVyYWN0aW9uIHRoZXJlLlxuXG5TbywgdG8gZm9jdXMgbXkgYW5hbHlzaXMsIEknbSBnb2luZyB0byBjb25jZW50cmF0ZSBvbiBgc3lzX21iaW5kYCwgYHN5c19zZXRfbWVtcG9saWN5YCwgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAsIGFuZCBhbHNvIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAsIGl0IHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgYW4gaW1wb3J0YW50IGZ1bmN0aW9uLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYENPTkZJR19OVU1BYCBpcyB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0J3MgcmVsZXZhbnQgaGVyZSBvciBpZiB0aGVyZSBhcmUgc3BlY2lmaWMga25vYnMgZm9yIHdlaWdodGVkIGludGVybGVhdmUgb3Igc2ltaWxhciBmZWF0dXJlcy4gVGhhdCdzIHRoZSBuZXh0IHRoaW5nIHRvIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAzOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTo0NC44NTExNTg0MDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NTUzOTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1QT0xfV0VJR0hURURfSU5URVJMRUFWRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9NTkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtcG9saWN5X29wZXJhdGlvbnMgbXBvbF9vcHNbTVBPTF9NQVhdID0ge1xcbi0tXFxubW0vbWVtcG9saWN5LmMtNjE1LVxcdH0sXFxubW0vbWVtcG9saWN5LmM6NjE2OlxcdFtNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVdID0ge1xcbm1tL21lbXBvbGljeS5jLTYxNy1cXHRcXHQuY3JlYXRlID0gbXBvbF9uZXdfbm9kZW1hc2ssXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xMDgzPXN0YXRpYyBsb25nIGRvX3NldF9tZW1wb2xpY3kodW5zaWduZWQgc2hvcnQgbW9kZSwgdW5zaWduZWQgc2hvcnQgZmxhZ3MsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xMTA5LVxcdGlmIChuZXcgXFx1MDAyNlxcdTAwMjYgKG5ldy1cXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUgfHxcXG5tbS9tZW1wb2xpY3kuYzoxMTEwOlxcdFxcdCAgICBuZXctXFx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKSkge1xcbm1tL21lbXBvbGljeS5jLTExMTEtXFx0XFx0Y3VycmVudC1cXHUwMDNlaWxfcHJldiA9IE1BWF9OVU1OT0RFUy0xO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MTEyNz1zdGF0aWMgdm9pZCBnZXRfcG9saWN5X25vZGVtYXNrKHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgbm9kZW1hc2tfdCAqbm9kZXMpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xMTM3LVxcdGNhc2UgTVBPTF9QUkVGRVJSRURfTUFOWTpcXG5tbS9tZW1wb2xpY3kuYzoxMTM4OlxcdGNhc2UgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jLTExMzktXFx0XFx0Km5vZGVzID0gcG9sLVxcdTAwM2Vub2RlcztcXG4tLVxcbm1tL21lbXBvbGljeS5jPTExNjM9c3RhdGljIGxvbmcgZG9fZ2V0X21lbXBvbGljeShpbnQgKnBvbGljeSwgbm9kZW1hc2tfdCAqbm1hc2ssXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xMjIzLVxcdFxcdH0gZWxzZSBpZiAocG9sID09IGN1cnJlbnQtXFx1MDAzZW1lbXBvbGljeSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbXBvbGljeS5jOjEyMjQ6XFx0XFx0XFx0XFx0cG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkge1xcbm1tL21lbXBvbGljeS5jLTEyMjUtXFx0XFx0XFx0aWYgKGN1cnJlbnQtXFx1MDAzZWlsX3dlaWdodClcXG4tLVxcbm1tL21lbXBvbGljeS5jPTE1MDI9c3RhdGljIGxvbmcgZG9fbWJpbmQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNTk3LVxcdFxcdGlmIChuZXctXFx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFIHx8XFxubW0vbWVtcG9saWN5LmM6MTU5ODpcXHRcXHQgICAgbmV3LVxcdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSkge1xcbm1tL21lbXBvbGljeS5jLTE1OTktXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4tLVxcbm1tL21lbXBvbGljeS5jPTIwMzQ9c3RydWN0IG1lbXBvbGljeSAqX19nZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIwNDctICogQGlseDogaW50ZXJsZWF2ZSBpbmRleCAob3V0cHV0KSwgZm9yIHVzZSBvbmx5IHdoZW4gTVBPTF9JTlRFUkxFQVZFIG9yXFxubW0vbWVtcG9saWN5LmM6MjA0ODogKiAgICAgICBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVcXG5tbS9tZW1wb2xpY3kuYy0yMDQ5LSAqXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDU3PXN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjA2NS1cXHRpZiAocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSB8fFxcbm1tL21lbXBvbGljeS5jOjIwNjY6XFx0ICAgIHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpIHtcXG5tbS9tZW1wb2xpY3kuYy0yMDY3LVxcdFxcdCppbHggKz0gdm1hLVxcdTAwM2V2bV9wZ29mZiBcXHUwMDNlXFx1MDAzZSBvcmRlcjtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTIxNTk9dW5zaWduZWQgaW50IG1lbXBvbGljeV9zbGFiX25vZGUodm9pZClcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIxNzctXFxubW0vbWVtcG9saWN5LmM6MjE3ODpcXHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcXG5tbS9tZW1wb2xpY3kuYy0yMTc5LVxcdFxcdHJldHVybiB3ZWlnaHRlZF9pbnRlcmxlYXZlX25vZGVzKHBvbGljeSk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMjg1PXN0YXRpYyBub2RlbWFza190ICpwb2xpY3lfbm9kZW1hc2soZ2ZwX3QgZ2ZwLCBzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMzE4LVxcdFxcdGJyZWFrO1xcbm1tL21lbXBvbGljeS5jOjIzMTk6XFx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XFxubW0vbWVtcG9saWN5LmMtMjMyMC1cXHRcXHQqbmlkID0gKGlseCA9PSBOT19JTlRFUkxFQVZFX0lOREVYKSA/XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMzcxPWJvb2wgaW5pdF9ub2RlbWFza19vZl9tZW1wb2xpY3kobm9kZW1hc2tfdCAqbWFzaylcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIzODQtXFx0Y2FzZSBNUE9MX0lOVEVSTEVBVkU6XFxubW0vbWVtcG9saWN5LmM6MjM4NTpcXHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcXG5tbS9tZW1wb2xpY3kuYy0yMzg2LVxcdFxcdCptYXNrID0gbWVtcG9saWN5LVxcdTAwM2Vub2RlcztcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI0NjE9c3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19tcG9sKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjQ4NS1cXHRcXHRpZiAocG9sLVxcdTAwM2Vtb2RlICE9IE1QT0xfSU5URVJMRUFWRSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbXBvbGljeS5jOjI0ODY6XFx0XFx0ICAgIHBvbC1cXHUwMDNlbW9kZSAhPSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1wb2xpY3kuYy0yNDg3LVxcdFxcdCAgICAoIW5vZGVtYXNrIHx8IG5vZGVfaXNzZXQobmlkLCAqbm9kZW1hc2spKSkge1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjUwOC1cXHRpZiAodW5saWtlbHkocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSB8fFxcbm1tL21lbXBvbGljeS5jOjI1MDk6XFx0XFx0ICAgICBwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKSBcXHUwMDI2XFx1MDAyNiBwYWdlKSB7XFxubW0vbWVtcG9saWN5LmMtMjUxMC1cXHRcXHQvKiBza2lwIE5VTUFfSU5URVJMRUFWRV9ISVQgdXBkYXRlIGlmIG51bWEgc3RhdHMgaXMgZGlzYWJsZWQgKi9cXG4tLVxcbm1tL21lbXBvbGljeS5jPTI3Nzc9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc5MC1cXG5tbS9tZW1wb2xpY3kuYzoyNzkxOlxcdGlmIChwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxcbm1tL21lbXBvbGljeS5jLTI3OTItXFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI4NTE9Ym9vbCBfX21wb2xfZXF1YWwoc3RydWN0IG1lbXBvbGljeSAqYSwgc3RydWN0IG1lbXBvbGljeSAqYilcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI4NjktXFx0Y2FzZSBNUE9MX1BSRUZFUlJFRF9NQU5ZOlxcbm1tL21lbXBvbGljeS5jOjI4NzA6XFx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XFxubW0vbWVtcG9saWN5LmMtMjg3MS1cXHRcXHRyZXR1cm4gISFub2Rlc19lcXVhbChhLVxcdTAwM2Vub2RlcywgYi1cXHUwMDNlbm9kZXMpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9Mjk4Nz1pbnQgbXBvbF9taXNwbGFjZWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zMDEzLVxcbm1tL21lbXBvbGljeS5jOjMwMTQ6XFx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XFxubW0vbWVtcG9saWN5LmMtMzAxNS1cXHRcXHRwb2xuaWQgPSB3ZWlnaHRlZF9pbnRlcmxlYXZlX25pZChwb2wsIGlseCk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zNDAwPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcG9saWN5X21vZGVzW10gPVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzQwNS1cXHRbTVBPTF9JTlRFUkxFQVZFXSA9IFxcXCJpbnRlcmxlYXZlXFxcIixcXG5tbS9tZW1wb2xpY3kuYzozNDA2OlxcdFtNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVdID0gXFxcIndlaWdodGVkIGludGVybGVhdmVcXFwiLFxcbm1tL21lbXBvbGljeS5jLTM0MDctXFx0W01QT0xfTE9DQUxdICAgICAgPSBcXFwibG9jYWxcXFwiLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9MzQyMj1pbnQgbXBvbF9wYXJzZV9zdHIoY2hhciAqc3RyLCBzdHJ1Y3QgbWVtcG9saWN5ICoqbXBvbClcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM0NjUtXFx0Y2FzZSBNUE9MX0lOVEVSTEVBVkU6XFxubW0vbWVtcG9saWN5LmM6MzQ2NjpcXHRjYXNlIE1QT0xfV0VJR0hURURfSU5URVJMRUFWRTpcXG5tbS9tZW1wb2xpY3kuYy0zNDY3LVxcdFxcdC8qXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zNTU4PXZvaWQgbXBvbF90b19zdHIoY2hhciAqYnVmZmVyLCBpbnQgbWF4bGVuLCBzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0zNTgwLVxcdGNhc2UgTVBPTF9JTlRFUkxFQVZFOlxcbm1tL21lbXBvbGljeS5jOjM1ODE6XFx0Y2FzZSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkU6XFxubW0vbWVtcG9saWN5LmMtMzU4Mi1cXHRcXHRub2RlcyA9IHBvbC1cXHUwMDNlbm9kZXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI1OjQ0LjkyODcyMTE4OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTgzNDYxODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBOVU1BIENvbmZpZ3VyYXRpb24gYW5kIEJ1bGsgQWxsb2NhdGlvbiBCZWhhdmlvcioqXG5cbkFscmlnaHQsIHRoZSBjdXJyZW50IGNvbmZpZyBpcyBmbGFnZ2luZyBgQ09ORklHX05VTUFgLiBUaGF0J3MgaW1wb3J0YW50LiBJdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gdGhhdCBoYXMgTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2Vzcy4gU28sIE5VTUEgaW1wbGljYXRpb25zIGFyZSBnb2luZyB0byBiZSBjZW50cmFsIHRvIHdoYXQgSSdtIGxvb2tpbmcgYXQuIE5vdywgd2l0aCBOVU1BIGVuYWJsZWQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBidWxrIHBhZ2UgYWxsb2NhdGlvbiBpcyBiZWluZyBoYW5kbGVkIGFuZCBlc3BlY2lhbGx5LCB3aGV0aGVyIHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgZm9yIHVzZS4gTGV0IG1lIGNoZWNrIGlmIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIGV2ZW4gYXZhaWxhYmxlLiBJdHMgcHJlc2VuY2Ugb3IgYWJzZW5jZSB3aWxsIHN0cm9uZ2x5IGluZmx1ZW5jZSBteSBuZXh0IHN0ZXBzIGFuZCBob3cgSSBhcHByb2FjaCB0aGUgb3ZlcmFsbCBwcm9ibGVtLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZSBtZW1wb2xpY3ktYXdhcmUgYnVsayBhbGxvY2F0aW9uIGZ1bmN0aW9uIGlzIHZpc2libGUgYW5kIGFjY2Vzc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjE5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6NDguOTEyMTg4OTA1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQ2NjY2MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6NDguOTkzNjYxODk2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTAyMTY1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24sIGFuZCB0aGUgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGl0J3MgKm5vdCogYW4gZXhwb3J0ZWQgc3ltYm9sLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSG93ZXZlciwgaXQncyBhbHNvIG5vdCBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0IGhhcyBzb21lIGxldmVsIG9mIHZpc2liaWxpdHkgd2l0aGluIHRoZSBrZXJuZWwsIGFsYmVpdCBwb3RlbnRpYWxseSBsaW1pdGVkLiBMZXQncyBkZWx2ZSBkZWVwZXIuXG5cbkkgcmVtZW1iZXIgc2VlaW5nIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGluIGBtbS9tZW1wb2xpY3kuY2AsIGFuZCBJIGFsc28gcmVjYWxsIHNlZWluZyBhIGRlY2xhcmF0aW9uIGZvciBpdCBpbiBgaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaGAuIFRoaXMgaXMgYSBjcnVjaWFsIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjb25maXJtIHRoZSBkZWNsYXJhdGlvbiBhbmQgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24ncyBpbnRlbmRlZCBpbnRlcmZhY2UuIFRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcsIEknbSBnb2luZyB0byBxdWlja2x5IHJlZmVyZW5jZSB0aGUgZGVmaW5pdGlvbiBpbiBgaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaGAgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBoZWFkZXIgZmlsZSB0ZWxscyBtZSBhYm91dCBpdHMgYXJndW1lbnRzIGFuZCB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4ODAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTo1Mi44ODM4ODA5NzJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3Mzc5MDIxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6NTIuOTcxMjY2MzUzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTQ5NjI3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgTGFieXJpbnRoIG9mIERlY2xhcmF0aW9ucyoqXG5cbkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIEknbSBsb29raW5nIGF0IHRoaXMgY29kZS9zcGVjaWZpY2F0aW9uL2RvY3VtZW50LCBhbmQgbXkgaW5pdGlhbCByZWFjdGlvbiBpcywgKndoZXJlKiBwcmVjaXNlbHkgaXMgdGhpcyB2YXJpYWJsZS9mdW5jdGlvbi9jbGFzcy9jb25zdGFudC93aGF0ZXZlciAqZGVjbGFyZWQqPyBJdCdzIHRoZSBmaXJzdCBhbmQgbW9zdCBmdW5kYW1lbnRhbCBxdWVzdGlvbiwgcmVhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUsIGl0cyB0eXBlLCBhbnkgYXNzb2NpYXRlZCBtZXRhZGF0YSDigJMgYWxsIG9mIHRoYXQgaGluZ2VzIG9uIGZpbmRpbmcgaXRzIG9yaWdpbiBwb2ludC4gSXMgaXQgaW4gdGhpcyBmaWxlPyBBbm90aGVyIG9uZT8gQSBoZWFkZXI/IEEgcHJlY29tcGlsZWQgbGlicmFyeT8gSXMgaXQgYSBmb3J3YXJkIGRlY2xhcmF0aW9uLCBtZWFuaW5nIEkgbmVlZCB0byBjaGFzZSBkb3duIGl0cyBkZWZpbml0aW9uIGxhdGVyPyBUaGUgYWJzZW5jZSBvZiBhIGNsZWFyIGRlY2xhcmF0aW9uIHNjcmVhbXMgZm9yIGltbWVkaWF0ZSBpbnZlc3RpZ2F0aW9uLiBJIGNhbuKAmXQgcHJvY2VlZCB1bnRpbCBJJ3ZlIGVzdGFibGlzaGVkIHRoYXQgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjI5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNTo1Ni4zMjYyMzI0NTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTI0NzAxMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2dmcC5oPTIzNz11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTI0MS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjI0Mjp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yNDMtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQ1LSNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyNDY6XFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTI0Ny1cXG4tLVxcbm1tL21lbXBvbGljeS5jPTI3NTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzc2LSAqL1xcbm1tL21lbXBvbGljeS5jOjI3Nzc6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI3NzgtXFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KVxcbi0tXFxubW0vdm1hbGxvYy5jPTM2NDE9dm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXFxuLS1cXG5tbS92bWFsbG9jLmMtMzcwNS1cXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgXFx1MDAyNlxcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcXG5tbS92bWFsbG9jLmM6MzcwNjpcXHRcXHRcXHRcXHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnAsXFxubW0vdm1hbGxvYy5jLTM3MDctXFx0XFx0XFx0XFx0XFx0XFx0XFx0bnJfcGFnZXNfcmVxdWVzdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjU6NTguODE4NzA4MjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkyOTYwNDA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgd2hlcmUgd2UgY2FuIGV4cGFuZCBvdXIgZnV6emluZyBjb3ZlcmFnZS4gVGhlIHN0YXJ0aW5nIHBvaW50IHNlZW1zIHRvIGJlIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCBpbiBgbW0vdm1hbGxvYy5jYC4gVGhpcyBzdWdnZXN0cyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCB3b3VsZCBiZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuXG5cbkhtbSwgdGhlbiB0aGVyZSdzIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBkcml2ZXJzL2Jhc2Uvbm9kZS5jYC4gTm93LCBzaG91bGQgSSBjb25zaWRlciBgc3lzX21iaW5kYCBvciBgc3lzX3NldF9tZW1wb2xpY3lgIGFzIHRhcmdldHM/IE5vLCB0aG9zZSBzeXNjYWxscyBhcmUgYWxyZWFkeSB0aG9yb3VnaGx5IGZ1enplZCBieSBzeXprYWxsZXIsIHNvIHRoZXkncmUgcHJvYmFibHkgbm90IHRoZSBoaWdoZXN0IHByaW9yaXR5LlxuXG5CdXQsIEkgdGhpbmsgYWRkaW5nIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGFuZCBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgIHRvIGBGb2N1c1N5bWJvbHNgIGlzIGRlZmluaXRlbHkgd29ydGggaXQuXG5cbk5vdywgaG9sZCBvbi4uLiBsZXQgbWUganVzdCBtYWtlIHN1cmUgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCBpcyBhY3R1YWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIG9yIGlmIGl0J3Mgc3RyaWN0bHkgdGllZCB0byBBQ1BJIEhNQVQgcGFyc2luZy4gQWgsIHJpZ2h0LCBpdCdzIGNhbGxlZCBmcm9tIGBkcml2ZXJzL2FjcGkvbnVtYS9obWF0LmNgIHZpYSBgbm9kZV9zZXRfcGVyZl9hdHRyc2AuIE9rLCB0aGF0IGxvb2tzIGxpa2UgaXQncyB0aGUgbW9yZSBkaXJlY3QgcGF0aCwgc28gbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBub2RlX3NldF9wZXJmX2F0dHJzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4ODYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6MDMuNzQ4MzE1OTA1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMyODMzNDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vZGVfc2V0X3BlcmZfYXR0cnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYWNwaS9udW1hL2htYXQuYz04NTM9c3RhdGljIHZvaWQgaG1hdF9yZWdpc3Rlcl90YXJnZXRfcGVyZihzdHJ1Y3QgbWVtb3J5X3RhcmdldCAqdGFyZ2V0LCBpbnQgYWNjZXNzKVxcbi0tXFxuZHJpdmVycy9hY3BpL251bWEvaG1hdC5jLTg1NS1cXHR1bnNpZ25lZCBtZW1fbmlkID0gcHhtX3RvX25vZGUodGFyZ2V0LVxcdTAwM2VtZW1vcnlfcHhtKTtcXG5kcml2ZXJzL2FjcGkvbnVtYS9obWF0LmM6ODU2OlxcdG5vZGVfc2V0X3BlcmZfYXR0cnMobWVtX25pZCwgXFx1MDAyNnRhcmdldC1cXHUwMDNlY29vcmRbYWNjZXNzXSwgYWNjZXNzKTtcXG5kcml2ZXJzL2FjcGkvbnVtYS9obWF0LmMtODU3LX1cXG4tLVxcbmRyaXZlcnMvYmFzZS9ub2RlLmM9MjAyPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphY2Nlc3NfYXR0cnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9ub2RlLmMtMjEwLS8qKlxcbmRyaXZlcnMvYmFzZS9ub2RlLmM6MjExOiAqIG5vZGVfc2V0X3BlcmZfYXR0cnMgLSBTZXQgdGhlIHBlcmZvcm1hbmNlIHZhbHVlcyBmb3IgZ2l2ZW4gYWNjZXNzIGNsYXNzXFxuZHJpdmVycy9iYXNlL25vZGUuYy0yMTItICogQG5pZDogTm9kZSBpZGVudGlmaWVyIHRvIGJlIHNldFxcbi0tXFxuZHJpdmVycy9iYXNlL25vZGUuYy0yMTUtICovXFxuZHJpdmVycy9iYXNlL25vZGUuYzoyMTY6dm9pZCBub2RlX3NldF9wZXJmX2F0dHJzKHVuc2lnbmVkIGludCBuaWQsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmQsXFxuZHJpdmVycy9iYXNlL25vZGUuYy0yMTctXFx0XFx0XFx0IGVudW0gYWNjZXNzX2Nvb3JkaW5hdGVfY2xhc3MgYWNjZXNzKVxcbi0tXFxuZHJpdmVycy9iYXNlL25vZGUuYy0yNDgtfVxcbmRyaXZlcnMvYmFzZS9ub2RlLmM6MjQ5OkVYUE9SVF9TWU1CT0xfR1BMKG5vZGVfc2V0X3BlcmZfYXR0cnMpO1xcbmRyaXZlcnMvYmFzZS9ub2RlLmMtMjUwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9ub2RlLmg9ODU9dm9pZCBub2RlX2FkZF9jYWNoZSh1bnNpZ25lZCBpbnQgbmlkLCBzdHJ1Y3Qgbm9kZV9jYWNoZV9hdHRycyAqY2FjaGVfYXR0cnMpO1xcbmluY2x1ZGUvbGludXgvbm9kZS5oOjg2OnZvaWQgbm9kZV9zZXRfcGVyZl9hdHRycyh1bnNpZ25lZCBpbnQgbmlkLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkLFxcbmluY2x1ZGUvbGludXgvbm9kZS5oLTg3LVxcdFxcdFxcdCBlbnVtIGFjY2Vzc19jb29yZGluYXRlX2NsYXNzIGFjY2Vzcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25vZGUuaD05MT1zdGF0aWMgaW5saW5lIHZvaWQgbm9kZV9hZGRfY2FjaGUodW5zaWduZWQgaW50IG5pZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbm9kZS5oLTk1LVxcbmluY2x1ZGUvbGludXgvbm9kZS5oOjk2OnN0YXRpYyBpbmxpbmUgdm9pZCBub2RlX3NldF9wZXJmX2F0dHJzKHVuc2lnbmVkIGludCBuaWQsXFxuaW5jbHVkZS9saW51eC9ub2RlLmgtOTctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI2OjA1Ljk4MTE1NTI3N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDM5ODcxMzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOVU1BIE1lbW9yeSBQb2xpY3kgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgcG9saWN5IHN0dWZmLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBOVU1BLiBJdCBzZWVtcyBsaWtlIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAgaXMgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQsIGJ1dCBpdCdzIHByb2JhYmx5IG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIHRvIHVucHJpdmlsZWdlZCB1c2Vyc3BhY2UsICp1bmxlc3MqIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYm9vdCBvciBob3RwbHVnIHNjZW5hcmlvcyB3aGVyZSBITUFUIGlzIGFjdGl2ZS4gSG93ZXZlciwgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgbG9va3MgbW9yZSBjb25jZXJuaW5nIGJlY2F1c2UgaXQncyByZWFjaGFibGUgdGhyb3VnaCBgdm1hbGxvY2Agd2hlbiBgTlVNQV9OT19OT0RFYCBpcyBiZWluZyB1c2VkLCB3aGljaCBpcyBzdXJwcmlzaW5nbHkgY29tbW9uLiBBbmQgdGhlbiB0aGVyZSBhcmUgdGhvc2Ugc3lzZnMgZW50cmllcywgYG5vZGVfc3RvcmVgIGFuZCBgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlYCwgdGhhdCByb290IHVzZXJzIGNhbiBhYnNvbHV0ZWx5IGdldCB0aGVpciBoYW5kcyBvbi5cblxuVGhlIHByb2JsZW0gd2l0aCB0aGUgc3lzZnMgZnVuY3Rpb25zIGlzIHRoYXQgdGhleSdyZSBzdGF0aWMsIHNvIEkgY2FuJ3QgZGlyZWN0bHkgbGlzdCB0aGVtIGluIEZvY3VzU3ltYm9scywgb3IgYXQgbGVhc3QgaXQgd291bGQgYmUgYSBiaXQgY2x1bmt5LiBXYWl0LCBob2xkIG9uIOKAkyBgc3lzX21iaW5kYCBhbmQgYHN5c19zZXRfbWVtcG9saWN5YCBhcmUgc3lzdGVtIGNhbGxzLCBzbyB0aGF0J3MgYSBkaWZmZXJlbnQgc3RvcnkuIFRoZSBwYXRjaCBpcyBtZXNzaW5nIHdpdGggYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZWAgd2hpY2ggZ2V0cyBjYWxsZWQgYnkgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuXG5cbk5vdywgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIG1vZGlmaWVkIG9yIHJlbGF0ZWQgdGhhdCBhcmVuJ3Qgc3RhdGljLiBPa2F5LCBgd2lfc3RhdGVfZ2V0YCBhbmQgYHdpX3N0YXRlX3B1dGAgYXJlIHN0YXRpYywgc28gdGhleSdyZSBwcm9iYWJseSBub3QgdGhlIGltbWVkaWF0ZSB0YXJnZXQuIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAgaXMgbm9uLXN0YXRpYywgc2FtZSB3aXRoIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLlxuXG5JIGFsc28gaGF2ZSB0byBjb25maXJtIHRoYXQgQ09ORklHX05VTUEgaXMgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnIGhlcmUuIFNvLCB5ZXMsIGBDT05GSUdfTlVNQWAgaXMgdGhlIGJpZyBvbmUuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBgbW0vS2NvbmZpZ2AgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciByZWxhdGVkIGNvbmZpZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTgyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI2OjEzLjAyMTAyOTg3OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5OTU0ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5VTUFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTQ0MT1jb25maWcgQVJDSF9LRUVQX01FTUJMT0NLXFxuLS1cXG5tbS9LY29uZmlnLTQ0NC0jIEtlZXAgYXJjaCBOVU1BIG1hcHBpbmcgaW5mcmFzdHJ1Y3R1cmUgcG9zdC1pbml0Llxcbm1tL0tjb25maWc6NDQ1OmNvbmZpZyBOVU1BX0tFRVBfTUVNSU5GT1xcbm1tL0tjb25maWctNDQ2LVxcdGJvb2xcXG4tLVxcbm1tL0tjb25maWc9MTQxOT1jb25maWcgRVhFQ01FTVxcbi0tXFxubW0vS2NvbmZpZy0xNDIxLVxcbm1tL0tjb25maWc6MTQyMjpjb25maWcgTlVNQV9NRU1CTEtTXFxubW0vS2NvbmZpZy0xNDIzLVxcdGJvb2xcXG5tbS9LY29uZmlnLTE0MjQtXFxubW0vS2NvbmZpZzoxNDI1OmNvbmZpZyBOVU1BX0VNVVxcbm1tL0tjb25maWctMTQyNi1cXHRib29sIFxcXCJOVU1BIGVtdWxhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6MTMuMDg5MDMwMjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1OTg1OTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKldoZXJlIERpZCBUaGF0IENvbmZpZ3VyYXRpb24gT3B0aW9uIEdvPyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYGNvbmZpZyBOVU1BYCBhbmQgaW1tZWRpYXRlbHkgbXkgbWluZCBnb2VzIHRvIHdoZXJlIHRoZXNlIHRoaW5ncyAqdXN1YWxseSogbGl2ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkhtbSwgTlVNQS4uLiB0aGF0J3MgdHlwaWNhbGx5IGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB0aGluZywgcmlnaHQ/XCIgU28sIG15IGZpcnN0IG1lbnRhbCBjaGVjayBpcyBmb3IgYGFyY2gveDg2L0tjb25maWdgIG9yIHNvbWV0aGluZyBzaW1pbGFyIHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRpcmVjdG9yaWVzLiBUaGF0J3MgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludC4gT3IsIGdpdmVuIGl0cyBhc3NvY2lhdGlvbiB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBpdCBjb3VsZCBiZSB0dWNrZWQgYXdheSBpbiBgbW0vS2NvbmZpZ2AuIFRoYXQncyB0aGUgc2Vjb25kIHBsYWNlIEknZCBsb29rLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IHRoaW5nIGlzIGRlZmluZWQgYW5kIGhvdyBpdCdzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTMxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6MTYuNzQ4ODkzMjkxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjc5MDMyNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVU1BJFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTE1MzY9Y29uZmlnIEhPVFBMVUdfQ1BVXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTU0My0jIENvbW1vbiBOVU1BIEZlYXR1cmVzXFxuYXJjaC9hcm02NC9LY29uZmlnOjE1NDQ6Y29uZmlnIE5VTUFcXG5hcmNoL2FybTY0L0tjb25maWctMTU0NS1cXHRib29sIFxcXCJOVU1BIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBTY2hlZHVsZXIgU3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9NDkyPWNvbmZpZyBOUl9DUFVTXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTUwMC1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjUwMTpjb25maWcgTlVNQVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNTAyLVxcdGJvb2wgXFxcIk5VTUEgU3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnPTI2MTA9Y29uZmlnIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRVxcbi0tXFxuYXJjaC9taXBzL0tjb25maWctMjYxMi1cXG5hcmNoL21pcHMvS2NvbmZpZzoyNjEzOmNvbmZpZyBOVU1BXFxuYXJjaC9taXBzL0tjb25maWctMjYxNC1cXHRib29sIFxcXCJOVU1BIFN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz03NTg9Y29uZmlnIElSUV9BTExfQ1BVU1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctNzY2LVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjc2Nzpjb25maWcgTlVNQVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTc2OC1cXHRib29sIFxcXCJOVU1BIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBTY2hlZHVsZXIgU3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZz00ODE9ZW5kY2hvaWNlXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctNDgzLSMgQ29tbW9uIE5VTUEgRmVhdHVyZXNcXG5hcmNoL3Jpc2N2L0tjb25maWc6NDg0OmNvbmZpZyBOVU1BXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQ4NS1cXHRib29sIFxcXCJOVU1BIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBTY2hlZHVsZXIgU3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTU0MD1jb25maWcgSE9UUExVR19DUFVcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTU0Mi1cXG5hcmNoL3MzOTAvS2NvbmZpZzo1NDM6Y29uZmlnIE5VTUFcXG5hcmNoL3MzOTAvS2NvbmZpZy01NDQtXFx0Ym9vbCBcXFwiTlVNQSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnPTEwMj1jb25maWcgVlNZU0NBTExcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xMTQtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjExNTpjb25maWcgTlVNQVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xMTYtXFx0Ym9vbCBcXFwiTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2VzcyAoTlVNQSkgU3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvc3BhcmMvS2NvbmZpZz0yNTQ9Y29uZmlnIEdFTkVSSUNfTE9DS0JSRUFLXFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWctMjU4LVxcbmFyY2gvc3BhcmMvS2NvbmZpZzoyNTk6Y29uZmlnIE5VTUFcXG5hcmNoL3NwYXJjL0tjb25maWctMjYwLVxcdGJvb2wgXFxcIk5VTUEgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9MTUwNT1jb25maWcgQU1EX01FTV9FTkNSWVBUXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTE1MjEtIyBDb21tb24gTlVNQSBGZWF0dXJlc1xcbmFyY2gveDg2L0tjb25maWc6MTUyMjpjb25maWcgTlVNQVxcbmFyY2gveDg2L0tjb25maWctMTUyMy1cXHRib29sIFxcXCJOVU1BIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBTY2hlZHVsZXIgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6MTkuNDI3OTM0NTg2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDMzNzQ2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVU1BIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGRlZmluaXRlbHkgTlVNQS4gTXkgaW5pdGlhbCBodW5jaCB3YXMgY29ycmVjdC4gTm93LCBsZXQncyBzZWUgaWYgd2UgaGF2ZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGFuZ2luZyBhcm91bmQuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIG1vZGlmaWNhdGlvbnMgdG8gYG1tL21lbXBvbGljeS5jYC4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byBjb25maXJtIGlmIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIEFMV0FZUyBjb21waWxlZCB3aGVuIE5VTUEgaXMgZW5hYmxlZCwgSSdtIHByZXR0eSBjZXJ0YWluIHRoYXQgaXQgaXMsIHNvIGxldCdzIGNvbmZpcm0uIFllcywgaXQgbG9va3MgbGlrZSBgbW0vbWVtcG9saWN5Lm9gIGdldHMgY29tcGlsZWQgd2hlbiBgQ09ORklHX05VTUFgIGlzIGVuYWJsZWQsIHdoaWNoIHN1cHBvcnRzIHRoYXQgbGluZSBvZiB0aG91Z2h0LlxuXG5SaWdodCwgYXJlIHRoZXJlIGFueSAqb3RoZXIqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIG9mIGludGVyZXN0PyBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCBhbmQsIG9mIGNvdXJzZSwgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuXG5cbkkgdGhpbmsgaXTigJlzIHdvcnRoIGRvdWJsZS1jaGVja2luZyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBvbmUgbW9yZSB0aW1lLCBqdXN0IHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg3NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNjoyMy44MzEzMTM3NzdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDMxMTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1wb2xpY3kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0yNzUxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc3Ni0gKi9cXG5tbS9tZW1wb2xpY3kuYzoyNzc3OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNzc4LVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6MjMuODkxMzUxNjdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNjMyNjU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIE5vbi1TdGF0aWMgTWVtb3J5IFBvbGljeSoqXG5cblJpZ2h0LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIHNpdHVhdGlvbi4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBub24tc3RhdGljIGFzcGVjdHMgb2YgdGhpcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbWVtcG9saWN5X3NldF9ub2RlX3BlcmZgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4sIGdpdmVuIHRoYXQgaXQncyBkZWFsaW5nIHdpdGggbWVtb3J5IHBvbGljeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBub24tc3RhdGljIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mzk4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6MjcuMTA3NjgxNDY4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTE0MTc5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1wb2xpY3lfc2V0X25vZGVfcGVyZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1wb2xpY3kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0yMTE9c3RhdGljIHZvaWQgcmVkdWNlX2ludGVybGVhdmVfd2VpZ2h0cyh1bnNpZ25lZCBpbnQgKmJ3LCB1OCAqbmV3X2l3KVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjQzLVxcbm1tL21lbXBvbGljeS5jOjI0NDppbnQgbWVtcG9saWN5X3NldF9ub2RlX3BlcmYodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKVxcbm1tL21lbXBvbGljeS5jLTI0NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI2OjI3LjE4MjgzMDk5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTY5MzI4OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uIGFuZCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgaWRlbnRpZnlpbmcgZ29vZCBmdXp6aW5nIHRhcmdldHMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBJIGNhbiBzZWUgdGhhdCB0aGUgY29kZSBJJ20gbG9va2luZyBhdCBpc24ndCBzdGF0aWMsIHdoaWNoIGlzIHRoZSBmaXJzdCBnb29kIHNpZ24uIExldCdzIHNlZS4uLiBsb29raW5nIHRocm91Z2ggdGhlIGZ1bmN0aW9ucywgYHdpX3N0YXRlX2dldGAsIGB3aV9zdGF0ZV9wdXRgLCBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlYCwgYG5vZGVfc3RvcmVgLCBgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9hdXRvX3N0b3JlYCwgYW5kIGB3aV9zdGF0ZV9mcmVlYCBhcmUgYWxsIHN0YXRpYy4gVGhhdCBuYXJyb3dzIGl0IGRvd24uXG5cblRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgYW5kIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAuIFJpZ2h0IGF3YXksIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGxvb2tzIHByb21pc2luZyBiZWNhdXNlIGl0J3MgdGhlIGVudHJ5IHBvaW50IGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbiB3aXRoIG1lbXBvbGljeSwgYW5kIGl0IHNlZW1zIHRvIGNhbGwgdGhlIG1vZGlmaWVkIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmVgLiBZZWFoLCB0aGF0J3MgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0LiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAgYXMgaXQgbW9kaWZpZXMgdGhlIHdlaWdodGVkIGludGVybGVhdmUgc3RhdGUuXG5cbk5vdywgcmVhY2hhYmlsaXR5LiBJcyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCByZWFjaGFibGUgZnJvbSBzeXNjYWxscz8gWXVwLCBpdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGZyb20gYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCB3aGljaCB0aGVuIGdldHMgY2FsbGVkIGZyb20gc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMsIGV2ZW50dWFsbHkgYmVpbmcgY2FsbGVkIGJ5IGB2bWFsbG9jYC4gVGhhdCBtZWFucyBpdCdzIHByZXR0eSBleHBvc2VkLlxuXG5XaGF0IGFib3V0IGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmA/ICBJdCdzIGNhbGxlZCBmcm9tIGBub2RlX3NldF9wZXJmX2F0dHJzYCBhbmQgYG5vZGVfdXBkYXRlX3BlcmZfYXR0cnNgLiBUaGVzZSBhcmUgY2FsbGVkIGZyb20gYGhtYXRfcmVnaXN0ZXJfdGFyZ2V0X3BlcmZgIChBQ1BJIEhNQVQpIGFuZCBgY3hsX3JlZ2lvbl9wZXJmX2RhdGFfY2FsY3VsYXRlYCAoQ1hMKS4gU28gaXQncyByZWFjaGFibGUgaWYgQUNQSSBITUFUIG9yIENYTCBpcyBwcmVzZW50LCBzbyBtYXliZSBub3QgYWx3YXlzIHJlYWNoYWJsZSBidXQgcG90ZW50aWFsbHkgd29ydGggZnV6emluZy5cblxuSGFuZyBvbi4uLiBUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIHdpdGggYHN5bmNocm9uaXplX3JjdSgpYC4gVGhlIGNvbW1pdCBtZXNzYWdlIHNheXMgXCJzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcsXCIgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoZSBwYXRjaCBpcyB1c2luZyBgcmVmY291bnRfdGAgYW5kIGBrZnJlZV9yY3VgIGluc3RlYWQgb2YgYHN5bmNocm9uaXplX3JjdWAgYW5kIGBrZnJlZWAuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlLCByZXBsYWNpbmcgY2FsbHMgdG8gYHN5bmNocm9uaXplX3JjdWAgd2l0aCBhbiBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbi5cblxuQWxyaWdodCwgSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4gTXkgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBhbmQgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYC4gQW5kIEknbGwgbmVlZCB0byBlbmFibGUgdGhlIGBOVU1BYCBjb25maWcuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGlzIHRoZSBjb3JyZWN0IG5hbWUuIFllcCwgaXQgaXMuXG5cbkFuZCBpdCBsb29rcyBsaWtlIHRoZSBgTlVNQWAgY29uZmlnIHdpbGwgY292ZXIgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYC4gU28gdGhhdCBsb29rcyBnb29kISBJIGRvbid0IHNlZSBhbnkgb3RoZXIgY29uZmlnIG5lY2Vzc2FyeSBmb3IgYE1QT0xfV0VJR0hURURfSU5URVJMRUFWRWAsIGl0IGlzIGp1c3QgYW4gZW51bS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NTksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6MzcuNzUyMTYzMzQ1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDgwNDE5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaD0xOT1lbnVtIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaC0yNS1cXHRNUE9MX1BSRUZFUlJFRF9NQU5ZLFxcbmluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaDoyNjpcXHRNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUsXFxuaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oLTI3LVxcdE1QT0xfTUFYLFxcdC8qIGFsd2F5cyBsYXN0IG1lbWJlciBvZiBlbnVtICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI2OjM3LjgyNjk3NDE2NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzg5NTQ3MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgdmlhYmxlIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIHNwZWNpZmljYWxseSB0aG9zZSByZWxhdGVkIHRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgYXJlYS4gRmlyc3QsIGxldCdzIHNlZSBpZiBgbm9kZV9zdG9yZWAgYW5kIGB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmVgIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMuIEFoLCB5ZXMsIHRoZXkgYXJlIGluZGVlZCBzeXNmcyBzdG9yZSBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRoZXkncmUgZGVjbGFyZWQgc3RhdGljLCBzbyBJIGNhbid0IGluY2x1ZGUgdGhlbSBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4gQnV0IHRoZSBnb29kIG5ld3MgaXMgdGhhdCBzeXprYWxsZXIgKmNhbiogZnV6eiBzeXNmcywgd2hpY2ggb3BlbnMgdXAgc29tZSBwb3NzaWJpbGl0aWVzIHRoZXJlLlxuXG5HaXZlbiB0aGF0IHJlc3RyaWN0aW9uLCBteSBmb2N1cyBzaGlmdHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgYW5kIGBtZW1wb2xpY3lfc2V0X25vZGVfcGVyZmAuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRob3NlIHNwZWxsaW5ncy4uLiBZdXAsIGNvbmZpcm1lZDogYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgaXMgY29ycmVjdCBhbmQgYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCBpcyBhbHNvIGNvcnJlY3QuXG5cbk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgZWxzZS4gTGV0J3Mgc2VlLi4uIGB3aV9zdGF0ZV9mcmVlYCBpcyBzdGF0aWMuIGB3aV9zdGF0ZV9nZXRgIGlzIGFsc28gc3RhdGljLiBBbmQgc28gaXMgYHdpX3N0YXRlX3B1dGAuIE9oLCBhbmQgYGdldF9pbF93ZWlnaHRgIGFzIHdlbGwuIFRoYXQgbG9va3MgbGlrZSBhIGNvbXBsZXRlIGxpc3QgZm9yIHRoaXMgYXJlYSwgbWVhbmluZyBJIGhhdmUgYSBnb29kIGJhc2UgdG8gc3RhcnQgZnJvbS4gU28sIEkgdGhpbmsgSSdtIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTM0LCJPdXRwdXRUb2tlbnMiOjEyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNjo0NC4yMTY1MjUzOTdaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg5NDA0NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZcIixcbiAgICBcIm1lbXBvbGljeV9zZXRfbm9kZV9wZXJmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdlaWdodGVkIGludGVybGVhdmUgbWVtb3J5IHBvbGljeSBsb2dpYyBpbiBtbS9tZW1wb2xpY3kuYyBieSBpbnRyb2R1Y2luZyBhIHJlZmNvdW50IGFuZCByZXBsYWNpbmcgc3luY2hyb25pemVfcmN1KCkgKyBrZnJlZSgpIHdpdGgga2ZyZWVfcmN1KCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIGFuZCBzeXNmcyBub2RlIHBlcmZvcm1hbmNlIHVwZGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiLFxuICAgIFwibWVtcG9saWN5X3NldF9ub2RlX3BlcmZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBtZW1vcnkgcG9saWN5IGxvZ2ljIGluIG1tL21lbXBvbGljeS5jIGJ5IGludHJvZHVjaW5nIGEgcmVmY291bnQgYW5kIHJlcGxhY2luZyBzeW5jaHJvbml6ZV9yY3UoKSArIGtmcmVlKCkgd2l0aCBrZnJlZV9yY3UoKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgYnVsayBwYWdlIGFsbG9jYXRpb24gYW5kIHN5c2ZzIG5vZGUgcGVyZm9ybWFuY2UgdXBkYXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MjY6NDQuMzU1NDk4ODEyWiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ0OTUxNjg0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjI2OjQ0LjM1NjM2NTM3MloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDQ0ODY0NTY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCBieSByZXBsYWNpbmcgYHN5bmNocm9uaXplX3JjdSgpYCB3aXRoIGEgcmVmZXJlbmNlIGNvdW50IChgcmVmY291bnRfdGApIGFuZCBga2ZyZWVfcmN1KClgLiBJdCBhbHNvIG9wdGltaXplcyBgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKClgIGJ5IHBpbm5pbmcgdGhlIHN0YXRlIHdpdGggYHdpX3N0YXRlX2dldCgpYCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbG9jYWwgY29weSBvZiB0aGUgd2VpZ2h0cyBhcnJheS4gQWxsIGFsbG9jYXRpb25zIG9mIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgdXNlIGBremFsbG9jX2ZsZXgoKWAsIHdoaWNoIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgc3RydWN0dXJlIGFuZCBpdHMgZmxleGlibGUgYXJyYXkgbWVtYmVyIGBpd190YWJsZWAuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3MzI4OTdkNzExYzhhZGYwNjg0NjA3N2Y0NWQ1MDM3ODNmNDQ2OTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAwMzoyNTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcbmluZGV4IDBlNTE3NWYxYzc2N2QuLjRhMzcyMmM2M2IzMWIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xuKysrIGIvbW0vbWVtcG9saWN5LmNcbkBAIC0xMTIsNiArMTEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xlYWZvcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2djZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGJmbHVzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYi5oXHUwMDNlXG5AQCAtMTU2LDcgKzE1Nyw5IEBAIHN0YXRpYyBjb25zdCBpbnQgd2VpZ2h0aW5lc3MgPSAzMjtcbiAgKi9cbiBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZSB7XG4gXHRib29sIG1vZGVfYXV0bztcbi1cdHU4IGl3X3RhYmxlW107XG4rXHRyZWZjb3VudF90IHJlZmNudDtcbitcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4rXHR1OCBpd190YWJsZVtdIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gfTtcbiBzdGF0aWMgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgX19yY3UgKndpX3N0YXRlO1xuIHN0YXRpYyB1bnNpZ25lZCBpbnQgKm5vZGVfYndfdGFibGU7XG5AQCAtMTY3LDYgKzE3MCwyNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50ICpub2RlX2J3X3RhYmxlO1xuICAqL1xuIHN0YXRpYyBERUZJTkVfTVVURVgod2lfc3RhdGVfbG9jayk7XG4gXG4rLyogQWxsb3cgc2xlZXBpbmcgcmVhZGVycyB0byBwaW4gdGhlIHN0YXRlIHRvIGF2b2lkIHRha2luZyBjb3BpZXMgKi9cbitzdGF0aWMgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGUgKndpX3N0YXRlX2dldCh2b2lkKVxuK3tcbitcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHdoaWxlICgoc3RhdGUgPSByY3VfZGVyZWZlcmVuY2Uod2lfc3RhdGUpKSkge1xuK1x0XHRpZiAocmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnN0YXRlLVx1MDAzZXJlZmNudCkpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJldHVybiBzdGF0ZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgd2lfc3RhdGVfcHV0KHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRpZiAoc3RhdGUgXHUwMDI2XHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZzdGF0ZS1cdTAwM2VyZWZjbnQpKVxuK1x0XHRrZnJlZV9yY3Uoc3RhdGUsIHJjdSk7XG4rfVxuK1xuIHN0YXRpYyB1OCBnZXRfaWxfd2VpZ2h0KGludCBub2RlKVxuIHtcbiBcdHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlICpzdGF0ZTtcbkBAIC0yMzUsNiArMjU5LDcgQEAgaW50IG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmKHVuc2lnbmVkIGludCBub2RlLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKmNvb3JkcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXHRuZXdfd2lfc3RhdGUtXHUwMDNlbW9kZV9hdXRvID0gdHJ1ZTtcbitcdHJlZmNvdW50X3NldChcdTAwMjZuZXdfd2lfc3RhdGUtXHUwMDNlcmVmY250LCAxKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXG4gXHRcdG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZVtpXSA9IDE7XG4gXG5AQCAtMjY1LDEwICsyOTAsNyBAQCBpbnQgbWVtcG9saWN5X3NldF9ub2RlX3BlcmYodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBhY2Nlc3NfY29vcmRpbmF0ZSAqY29vcmRzKVxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpO1xuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuLVx0aWYgKG9sZF93aV9zdGF0ZSkge1xuLVx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbi1cdFx0a2ZyZWUob2xkX3dpX3N0YXRlKTtcbi1cdH1cbitcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xuIG91dDpcbiBcdGtmcmVlKG9sZF9idyk7XG4gXHRyZXR1cm4gMDtcbkBAIC0yNjMyLDcgKzI2NTQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0dW5zaWduZWQgbG9uZyBucl9hbGxvY2F0ZWQgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyByb3VuZHM7XG4gXHR1bnNpZ25lZCBsb25nIG5vZGVfcGFnZXMsIGRlbHRhO1xuLVx0dTggKndlaWdodHMsIHdlaWdodDtcbitcdHU4ICp0YWJsZSwgd2VpZ2h0O1xuIFx0dW5zaWduZWQgaW50IHdlaWdodF90b3RhbCA9IDA7XG4gXHR1bnNpZ25lZCBsb25nIHJlbV9wYWdlcyA9IG5yX3BhZ2VzO1xuIFx0bm9kZW1hc2tfdCBub2RlcztcbkBAIC0yNjc2LDI1ICsyNjk4LDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG4gXHRtZS1cdTAwM2VpbF93ZWlnaHQgPSAwO1xuIFx0cHJldl9ub2RlID0gbm9kZTtcbiBcbi1cdC8qIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2Ygbm9kZSB3ZWlnaHRzIHRvIG9wZXJhdGUgb24gb3V0c2lkZSByY3UgKi9cbi1cdHdlaWdodHMgPSBremFsbG9jKG5yX25vZGVfaWRzLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghd2VpZ2h0cylcbi1cdFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcbi1cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdHN0YXRlID0gcmN1X2RlcmVmZXJlbmNlKHdpX3N0YXRlKTtcbi1cdGlmIChzdGF0ZSkge1xuLVx0XHRtZW1jcHkod2VpZ2h0cywgc3RhdGUtXHUwMDNlaXdfdGFibGUsIG5yX25vZGVfaWRzICogc2l6ZW9mKHU4KSk7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0fSBlbHNlIHtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXG4tXHRcdFx0d2VpZ2h0c1tpXSA9IDE7XG4tXHR9XG4rXHRzdGF0ZSA9IHdpX3N0YXRlX2dldCgpO1xuK1x0dGFibGUgPSBzdGF0ZSA/IHN0YXRlLVx1MDAzZWl3X3RhYmxlIDogTlVMTDtcbiBcbiBcdC8qIGNhbGN1bGF0ZSB0b3RhbCwgZGV0ZWN0IHN5c3RlbSBkZWZhdWx0IHVzYWdlICovXG4gXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZXMpXG4tXHRcdHdlaWdodF90b3RhbCArPSB3ZWlnaHRzW25vZGVdO1xuK1x0XHR3ZWlnaHRfdG90YWwgKz0gdGFibGUgPyB0YWJsZVtub2RlXSA6IDE7XG4gXG4gXHQvKlxuIFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXG5AQCAtMjcwNiwxMCArMjcxNSwxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuIFx0cm91bmRzID0gcmVtX3BhZ2VzIC8gd2VpZ2h0X3RvdGFsO1xuIFx0ZGVsdGEgPSByZW1fcGFnZXMgJSB3ZWlnaHRfdG90YWw7XG4gXHRyZXN1bWVfbm9kZSA9IG5leHRfbm9kZV9pbihwcmV2X25vZGUsIG5vZGVzKTtcbi1cdHJlc3VtZV93ZWlnaHQgPSB3ZWlnaHRzW3Jlc3VtZV9ub2RlXTtcbitcdHJlc3VtZV93ZWlnaHQgPSB0YWJsZSA/IHRhYmxlW3Jlc3VtZV9ub2RlXSA6IDE7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBubm9kZXM7IGkrKykge1xuIFx0XHRub2RlID0gbmV4dF9ub2RlX2luKHByZXZfbm9kZSwgbm9kZXMpO1xuLVx0XHR3ZWlnaHQgPSB3ZWlnaHRzW25vZGVdO1xuK1x0XHR3ZWlnaHQgPSB0YWJsZSA/IHRhYmxlW25vZGVdIDogMTtcbiBcdFx0bm9kZV9wYWdlcyA9IHdlaWdodCAqIHJvdW5kcztcbiBcdFx0LyogSWYgYSBkZWx0YSBleGlzdHMsIGFkZCB0aGlzIG5vZGUncyBwb3J0aW9uIG9mIHRoZSBkZWx0YSAqL1xuIFx0XHRpZiAoZGVsdGEgXHUwMDNlIHdlaWdodCkge1xuQEAgLTI3MzUsNyArMjc0NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG4gXHR9XG4gXHRtZS1cdTAwM2VpbF9wcmV2ID0gcmVzdW1lX25vZGU7XG4gXHRtZS1cdTAwM2VpbF93ZWlnaHQgPSByZXN1bWVfd2VpZ2h0O1xuLVx0a2ZyZWUod2VpZ2h0cyk7XG4rXHR3aV9zdGF0ZV9wdXQoc3RhdGUpO1xuIFx0cmV0dXJuIHRvdGFsX2FsbG9jYXRlZDtcbiB9XG4gXG5AQCAtMzY0NCw2ICszNjUzLDcgQEAgc3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuIFx0bmV3X3dpX3N0YXRlID0ga3phbGxvY19mbGV4KCpuZXdfd2lfc3RhdGUsIGl3X3RhYmxlLCBucl9ub2RlX2lkcyk7XG4gXHRpZiAoIW5ld193aV9zdGF0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2bmV3X3dpX3N0YXRlLVx1MDAzZXJlZmNudCwgMSk7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuIFx0b2xkX3dpX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3aV9zdGF0ZSxcbkBAIC0zNjYwLDEwICszNjcwLDcgQEAgc3RhdGljIHNzaXplX3Qgbm9kZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuIFxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKHdpX3N0YXRlLCBuZXdfd2lfc3RhdGUpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuLVx0aWYgKG9sZF93aV9zdGF0ZSkge1xuLVx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbi1cdFx0a2ZyZWUob2xkX3dpX3N0YXRlKTtcbi1cdH1cbitcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xuIFx0cmV0dXJuIGNvdW50O1xuIH1cbiBcbkBAIC0zNjk2LDYgKzM3MDMsNyBAQCBzdGF0aWMgc3NpemVfdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX2F1dG9fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRuZXdfd2lfc3RhdGUgPSBremFsbG9jX2ZsZXgoKm5ld193aV9zdGF0ZSwgaXdfdGFibGUsIG5yX25vZGVfaWRzKTtcbiBcdGlmICghbmV3X3dpX3N0YXRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdHJlZmNvdW50X3NldChcdTAwMjZuZXdfd2lfc3RhdGUtXHUwMDNlcmVmY250LCAxKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX25vZGVfaWRzOyBpKyspXG4gXHRcdG5ld193aV9zdGF0ZS1cdTAwM2Vpd190YWJsZVtpXSA9IDE7XG4gXG5AQCAtMzcyOCwxMCArMzczNiw3IEBAIHN0YXRpYyBzc2l6ZV90IHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiB1cGRhdGVfd2lfc3RhdGU6XG4gXHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIG5ld193aV9zdGF0ZSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2d2lfc3RhdGVfbG9jayk7XG4tXHRpZiAob2xkX3dpX3N0YXRlKSB7XG4tXHRcdHN5bmNocm9uaXplX3JjdSgpO1xuLVx0XHRrZnJlZShvbGRfd2lfc3RhdGUpO1xuLVx0fVxuK1x0d2lfc3RhdGVfcHV0KG9sZF93aV9zdGF0ZSk7XG4gXHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuQEAgLTM3NzUsMTAgKzM3ODAsNyBAQCBzdGF0aWMgdm9pZCB3aV9zdGF0ZV9mcmVlKHZvaWQpXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIod2lfc3RhdGUsIE5VTEwpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNndpX3N0YXRlX2xvY2spO1xuIFxuLVx0aWYgKG9sZF93aV9zdGF0ZSkge1xuLVx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbi1cdFx0a2ZyZWUob2xkX3dpX3N0YXRlKTtcbi1cdH1cbitcdHdpX3N0YXRlX3B1dChvbGRfd2lfc3RhdGUpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHdpX2F1dG9fYXR0ciA9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNjo0NC4zNTYzNjcyMDJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0NDg2MTE1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWZjb3VudC1CYXNlZCBgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGZvciBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIGluIGBtbS9tZW1wb2xpY3kuY2AuIE15IGluaXRpYWwgY29uY2VybiwgYXMgYWx3YXlzIHdoZW4gdG91Y2hpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIGV4aXN0aW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgYW5kIGBrZnJlZSgpYCBwYXR0ZXJuIHdpdGggYSByZWZjb3VudCAoYHJlZmNvdW50X3RgKSBhbmQgYGtmcmVlX3JjdSgpYCwgcGx1cyB0aGUgaW50cm9kdWN0aW9uIG9mIGB3aV9zdGF0ZV9nZXQoKWAgYW5kIGB3aV9zdGF0ZV9wdXQoKWAuIEl0IGFsc28gZWxpbWluYXRlcyB0aGUgbG9jYWwgYHdlaWdodHNgIGNvcHkgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpYCwgb3B0aW5nIHRvIHBpbiB0aGUgYHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIGRpcmVjdGx5LiBTbWFydCwgdGhhdCBzaG91bGQgYmUgYSBwZXJmb3JtYW5jZSB3aW4uXG5cblRoZSBvbGQgY29kZSB1c2VkIHRvIGBremFsbG9jKClgIHRoZSBgd2VpZ2h0c2AgYXJyYXkuIE5vdywgaXQncyB1c2luZyB0aGUgYGl3X3RhYmxlYCBkaXJlY3RseSBmcm9tIHRoZSBgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgd2hpY2ggaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NfZmxleCgpYC4gQWhhISBUaGF0J3MgdGhlIGtleS4gU2luY2UgYGt6YWxsb2NfZmxleCgpYCBpcyB1c2VkIGluIGV2ZXJ5IGFsbG9jYXRpb24gcGF0aCAoYG1lbXBvbGljeV9zZXRfbm9kZV9wZXJmYCwgYG5vZGVfc3RvcmVgLCBhbmQgYHdlaWdodGVkX2ludGVybGVhdmVfYXV0b19zdG9yZWApLCB0aGlzIGVuc3VyZXMgdGhlIGBpd190YWJsZWAgaXMgemVyby1pbml0aWFsaXplZC4gSSB3ZW50IHRocm91Z2ggdGhlIGNvZGUgdG8gY29uZmlybSB0aGUgYGt6YWxsb2NfZmxleGAgY2FsbHMuXG5cblRoZXJlZm9yZSwgdGhlIGB3ZWlnaHRzYCBhcnJheSwgd2hpY2ggaXMgbm93IHRoZSBgaXdfdGFibGVgLCB3aWxsICphbHdheXMqIGJlIGluaXRpYWxpemVkIHRvIHplcm8uIFRoaXMgc2hvdWxkIGVsaW1pbmF0ZSB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBkdWUgdG8gdGhpcyBjaGFuZ2UuIFRoZSBwYXRjaCBpcyBhYm91dCBsaWZldGltZSBtYW5hZ2VtZW50IGFuZCBjb25jdXJyZW5jeTsgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gQW55IGJ1Z3MgaW50cm9kdWNlZCB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MuIEtBU0FOIHNob3VsZCBiZSB3ZWxsLWVxdWlwcGVkIHRvIGNhdGNoIHRob3NlLiBTbyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEl0J3MgYW4gUkNVLXRvLXJlZmNvdW50IGNvbnZlcnNpb24uXG5cbkluIHN1bW1hcnksIHRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgdGhlIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgYnkgcmVwbGFjaW5nIFJDVSB3aXRoIGEgcmVmY291bnQgYW5kIGBrZnJlZV9yY3UoKWAuIEl0IGFsc28gb3B0aW1pemVzIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKWAgYnkgZGlyZWN0bHkgcGlubmluZyB0aGUgYHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBsb2NhbCBjb3B5IG9mIHRoZSB3ZWlnaHRzIGFycmF5LiBBbGwgYWxsb2NhdGlvbnMgb2YgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCB1c2UgYGt6YWxsb2NfZmxleCgpYCwgZ3VhcmFudGVlaW5nIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0cnVjdHVyZSBpbmNsdWRpbmcgaXRzIGBpd190YWJsZWAuIEFueSBwb3RlbnRpYWwgYnVncyBhcmUgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcyB3aGljaCBzaG91bGQgYmUgZGV0ZWN0YWJsZSBieSBLQVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA3NSwiT3V0cHV0VG9rZW5zIjoyMTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzoyNjo1NC44MDQ5ODI2MTlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIGBzdHJ1Y3Qgd2VpZ2h0ZWRfaW50ZXJsZWF2ZV9zdGF0ZWAgYnkgcmVwbGFjaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCAoYHJlZmNvdW50X3RgKSBhbmQgYGtmcmVlX3JjdSgpYC4gSXQgYWxzbyBvcHRpbWl6ZXMgYGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZSgpYCBieSBwaW5uaW5nIHRoZSBzdGF0ZSB3aXRoIGB3aV9zdGF0ZV9nZXQoKWAgaW5zdGVhZCBvZiBjcmVhdGluZyBhIGxvY2FsIGNvcHkgb2YgdGhlIHdlaWdodHMgYXJyYXkuIEFsbCBhbGxvY2F0aW9ucyBvZiBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIHVzZSBga3phbGxvY19mbGV4KClgLCB3aGljaCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0cnVjdHVyZSBhbmQgaXRzIGZsZXhpYmxlIGFycmF5IG1lbWJlciBgaXdfdGFibGVgLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZXRpbWUgbWFuYWdlbWVudCBvZiBgc3RydWN0IHdlaWdodGVkX2ludGVybGVhdmVfc3RhdGVgIGJ5IHJlcGxhY2luZyBgc3luY2hyb25pemVfcmN1KClgIHdpdGggYSByZWZlcmVuY2UgY291bnQgKGByZWZjb3VudF90YCkgYW5kIGBrZnJlZV9yY3UoKWAuIEl0IGFsc28gb3B0aW1pemVzIGBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoKWAgYnkgcGlubmluZyB0aGUgc3RhdGUgd2l0aCBgd2lfc3RhdGVfZ2V0KClgIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBsb2NhbCBjb3B5IG9mIHRoZSB3ZWlnaHRzIGFycmF5LiBBbGwgYWxsb2NhdGlvbnMgb2YgYHN0cnVjdCB3ZWlnaHRlZF9pbnRlcmxlYXZlX3N0YXRlYCB1c2UgYGt6YWxsb2NfZmxleCgpYCwgd2hpY2ggZ3VhcmFudGVlcyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIHRoZSBzdHJ1Y3R1cmUgYW5kIGl0cyBmbGV4aWJsZSBhcnJheSBtZW1iZXIgYGl3X3RhYmxlYC4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gY29uY3VycmVuY3ksIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow7jbv5[1] Phase: Succeeded StartedAt: 2026-08-24 03:27:05 +0000 UTC FinishedAt: 2026-08-24 03:27:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 03:27:05 +0000 UTC FinishedAt: 2026-08-24 03:27:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2] Phase: Succeeded StartedAt: 2026-08-24 03:27:05 +0000 UTC FinishedAt: 2026-08-24 07:21:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-24 03:27:05 +0000 UTC FinishedAt: 2026-08-24 07:21:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-24 03:27:05 +0000 UTC FinishedAt: 2026-08-24 03:27:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-24 03:27:05 +0000 UTC FinishedAt: 2026-08-24 03:27:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow7jbv5/series-workflow7jbv5-convert-artifact-998861636/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-24 03:27:16 +0000 UTC FinishedAt: 2026-08-24 03:55:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-24 03:27:16 +0000 UTC FinishedAt: 2026-08-24 03:55:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5eacd515-c92e-49d6-a409-2f8bf9edd3bf,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-workflow7jbv5/series-workflow7jbv5-convert-artifact-998861636/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": "eaae0c78-529e-4a73-b3a7-fc93c0b8d75b", "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-workflow7jbv5/series-workflow7jbv5-build-action-652193410/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-24 03:27:16 +0000 UTC FinishedAt: 2026-08-24 03:55:13 +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:*5eacd515-c92e-49d6-a409-2f8bf9edd3bf,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-workflow7jbv5/series-workflow7jbv5-convert-artifact-998861636/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": "eaae0c78-529e-4a73-b3a7-fc93c0b8d75b", "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-workflow7jbv5/series-workflow7jbv5-build-action-652193410/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-24 03:55:24 +0000 UTC FinishedAt: 2026-08-24 03:55:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-24 03:55:24 +0000 UTC FinishedAt: 2026-08-24 03:55:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-24 03:55:24 +0000 UTC FinishedAt: 2026-08-24 03:55:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-24 03:55:24 +0000 UTC FinishedAt: 2026-08-24 03:55:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow7jbv5/series-workflow7jbv5-convert-artifact-3392917443/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-24 03:55:36 +0000 UTC FinishedAt: 2026-08-24 03:57:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-24 03:55:36 +0000 UTC FinishedAt: 2026-08-24 03:57:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*eaae0c78-529e-4a73-b3a7-fc93c0b8d75b,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-workflow7jbv5/series-workflow7jbv5-build-action-652193410/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-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-24 03:57:42 +0000 UTC FinishedAt: 2026-08-24 03:57:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-24 03:57:42 +0000 UTC FinishedAt: 2026-08-24 03:57:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-24 03:57:42 +0000 UTC FinishedAt: 2026-08-24 04:13:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-24 03:57:42 +0000 UTC FinishedAt: 2026-08-24 04:13:50 +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:*5eacd515-c92e-49d6-a409-2f8bf9edd3bf,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-workflow7jbv5/series-workflow7jbv5-convert-artifact-3392917443/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": "d10d81bf-f90a-475f-bd8c-7ee3fe08dcec", "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-workflow7jbv5/series-workflow7jbv5-build-action-452672119/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-24 03:57:42 +0000 UTC FinishedAt: 2026-08-24 04:13:40 +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:*5eacd515-c92e-49d6-a409-2f8bf9edd3bf,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-workflow7jbv5/series-workflow7jbv5-convert-artifact-3392917443/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": "d10d81bf-f90a-475f-bd8c-7ee3fe08dcec", "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-workflow7jbv5/series-workflow7jbv5-build-action-452672119/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-24 04:13:50 +0000 UTC FinishedAt: 2026-08-24 04:13:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-24 04:13:50 +0000 UTC FinishedAt: 2026-08-24 04:13:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-24 04:13:50 +0000 UTC FinishedAt: 2026-08-24 04:15:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-24 04:13:50 +0000 UTC FinishedAt: 2026-08-24 04:15:39 +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:*d10d81bf-f90a-475f-bd8c-7ee3fe08dcec,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-workflow7jbv5/series-workflow7jbv5-build-action-452672119/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-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-24 04:15:49 +0000 UTC FinishedAt: 2026-08-24 07:21:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-24 04:15:49 +0000 UTC FinishedAt: 2026-08-24 07:21:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},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:*eaae0c78-529e-4a73-b3a7-fc93c0b8d75b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d10d81bf-f90a-475f-bd8c-7ee3fe08dcec,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-workflow7jbv5/series-workflow7jbv5-build-action-652193410/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-workflow7jbv5/series-workflow7jbv5-build-action-452672119/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-24 04:15:49 +0000 UTC FinishedAt: 2026-08-24 04:15:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-24 04:15:49 +0000 UTC FinishedAt: 2026-08-24 04:15:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},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-workflow7jbv5/series-workflow7jbv5-convert-artifact-432320220/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-24 04:15:49 +0000 UTC FinishedAt: 2026-08-24 04:15:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-24 04:15:49 +0000 UTC FinishedAt: 2026-08-24 04:15:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-24 04:15:49 +0000 UTC FinishedAt: 2026-08-24 04:15:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-24 04:15:59 +0000 UTC FinishedAt: 2026-08-24 07:21:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jbv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_mempolicy_noprof","mempolicy_set_node_perf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f3835771dff512750205aa5f5f61aec0f2b8cb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"5d24fc95-e9bb-4b9d-ad86-87c88c54e814","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-24 04:15:59 +0000 UTC FinishedAt: 2026-08-24 07:21:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*eaae0c78-529e-4a73-b3a7-fc93c0b8d75b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d10d81bf-f90a-475f-bd8c-7ee3fe08dcec,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-workflow7jbv5/series-workflow7jbv5-build-action-652193410/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-workflow7jbv5/series-workflow7jbv5-build-action-452672119/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-workflow7jbv5/series-workflow7jbv5-convert-artifact-432320220/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,}