Name: series-workflowxgjxg Phase: Succeeded StartedAt: 2026-08-01 06:24:50 +0000 UTC FinishedAt: 2026-08-01 07:40:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[0] Phase: Succeeded StartedAt: 2026-08-01 06:24:50 +0000 UTC FinishedAt: 2026-08-01 06:45:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 06:24:50 +0000 UTC FinishedAt: 2026-08-01 06:45:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "1bf9e983-10ac-4f0f-8936-71acd7ec53b4" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vm_ioctl", "kvm_arch_vcpu_create", "kvm_arch_vcpu_postcreate", "kvm_arch_commit_memory_region", "kvm_arch_prepare_memory_region", "kvm_s390_pv_create_cpu", "kvm_s390_pv_destroy_cpu", "dat_reset_reference_bit", "kvm_s390_faultin_gfn" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfY3JlYXRlX2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9kZXN0cm95X2NwdSYjMzQ7LAogICAgJiMzNDtkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9mYXVsdGluX2dmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGZpeGVzIGZvciBtZW1vcnkgbGVha3MsIGxvY2tpbmcsIGluaXRpYWxpemF0aW9uIHJhY2VzLCBhbmQgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cy4gSXQgbW9kaWZpZXMgY29yZSBLVk0gaW9jdGxzLCBtZW1vcnkgcmVnaW9uIG1hbmFnZW1lbnQsIGFuZCBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBDUFUgbGlmZWN5Y2xlIGZ1bmN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgYWNjZXNzZXMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjY3YjIyZWI5YzMzOTgxOTFlZDFmOTBkMzU5NjVkY2M2OGVhZjkxM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDY6NDI6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggZWFhMzRjNWJkM2MxMS4uZWRmNzViNmFkMjBjZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTQ0MCw2ICYjNDM7NDQwLDcgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFx0Ym9vbCBza2V5X2VuYWJsZWQ7XG4gXHQvKiBJbmRpY2F0b3IgaWYgdGhlIGFjY2VzcyByZWdpc3RlcnMgaGF2ZSBiZWVuIGxvYWRlZCBmcm9tIGd1ZXN0ICovXG4gXHRib29sIGFjcnNfbG9hZGVkO1xuJiM0MztcdGJvb2wgaW5pdGlhbGl6ZWQ7XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfcHZfdmNwdSBwdjtcbiBcdHVuaW9uIGRpYWczMThfaW5mbyBkaWFnMzE4X2luZm87XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuaW5kZXggZWQ0MjU5ZDE3NjI5NS4uM2YyZDZlODkwMmQ3NiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbkBAIC03NTUsMTMgJiM0Mzs3NTUsMTUgQEAgaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZcbiBcdHJldHVybiByYztcbiB9XG4gXG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxuJiM0MztpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpXG4ge1xuIFx0dW5pb24gcGdzdGUgcGdzdGUsIG9sZDtcbiBcdHVuaW9uIGNyc3RlICpjcnN0ZXA7XG4gXHR1bmlvbiBwdGUgKnB0ZXA7XG4gXHRpbnQgcmM7XG4gXG4mIzQzO1x0c2tleS1cdTAwM2Vza2V5ID0gMDtcbiYjNDM7XG4gXHRyYyA9IGRhdF9lbnRyeV93YWxrKE5VTEwsIGdmbiwgYXNjZSwgREFUX1dBTEtfQU5ZLCBUQUJMRV9UWVBFX1BBR0VfVEFCTEUsIFx1MDAyNmNyc3RlcCwgXHUwMDI2cHRlcCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbkBAIC03NzEsMjEgJiM0Mzs3NzMsMjMgQEAgaW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxuIFxuIFx0XHRpZiAoIWNyc3RlLmguZmMgfHwgIWNyc3RlLnMuZmMxLnByKVxuIFx0XHRcdHJldHVybiAwO1xuLVx0XHRyZXR1cm4gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSk7XG4mIzQzO1x0XHRza2V5LVx1MDAzZXNrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKSBcdTAwM2NcdTAwM2MgMTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuIFx0b2xkID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4gXHRwZ3N0ZSA9IG9sZDtcbiBcbiBcdGlmICghcHRlcC1cdTAwM2VoLmkpIHtcbi1cdFx0cmMgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQocHRlX29yaWdpbigqcHRlcCkpO1xuLVx0XHRwZ3N0ZS5ociA9IHJjIFx1MDAzZVx1MDAzZSAxO1xuJiM0MztcdFx0c2tleS1cdTAwM2Vza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKSBcdTAwM2NcdTAwM2MgMTtcbiYjNDM7XHRcdHBnc3RlLmhyID0gc2tleS1cdTAwM2VyO1xuIFx0fVxuLVx0cmMgfD0gKHBnc3RlLmdyIFx1MDAzY1x1MDAzYyAxKSB8IHBnc3RlLmdjO1xuJiM0MztcdHNrZXktXHUwMDNlciB8PSBwZ3N0ZS5ncjtcbiYjNDM7XHRza2V5LVx1MDAzZWMgfD0gcGdzdGUuZ2M7XG4gXHRwZ3N0ZS5nciA9IDA7XG4gXG4gXHRkYXRfdXBkYXRlX3B0ZXBfc2Qob2xkLCBwZ3N0ZSwgcHRlcCk7XG4gXHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbi1cdHJldHVybiByYztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGxvbmcgZGF0X3Jlc2V0X3NrZXlzX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuQEAgLTg0Niw2ICYjNDM7ODUwLDcgQEAgc3RhdGljIGxvbmcgX2RhdF9zbG90X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxcbiBcdHN0cnVjdCBzbG90X3ByaXYgKnAgPSB3YWxrLVx1MDAzZXByaXY7XG4gXHR1bmlvbiBjcnN0ZSBkdW1teSA9IHsgLnZhbCA9IHAtXHUwMDNldG9rZW4gfTtcbiBcdHVuaW9uIHB0ZSBuZXdfcHRlLCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApO1xuJiM0MztcdHVuaW9uIHBnc3RlIHBnc3RlO1xuIFxuIFx0bmV3X3B0ZSA9IF9QVEVfVE9LKGR1bW15LnRvay50eXBlLCBkdW1teS50b2sucGFyKTtcbiBcbkBAIC04NTMsNyAmIzQzOzg1OCwxMSBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxuIFx0aWYgKHB0ZS52YWwgPT0gbmV3X3B0ZS52YWwpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZGF0X3B0ZXBfeGNoZyhwdGVwLCBuZXdfcHRlLCBnZm4sIHdhbGstXHUwMDNlYXNjZSwgZmFsc2UpO1xuJiM0MztcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4mIzQzO1x0cGdzdGUgPSBfX2RhdF9wdGVwX3hjaGcocHRlcCwgcGdzdGUsIG5ld19wdGUsIGdmbiwgd2Fsay1cdTAwM2Vhc2NlLCBmYWxzZSk7XG4mIzQzO1x0cGdzdGUuY21tYV9kID0gMDtcbiYjNDM7XHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuaCBiL2FyY2gvczM5MC9rdm0vZGF0LmhcbmluZGV4IGZhZDYwNTMwNWUwNWMuLjE0MWVlN2I5ZjAxOTEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2RhdC5oXG5AQCAtNTM3LDcgJiM0Mzs1MzcsNyBAQCBpbnQgZGF0X3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZlxuIFx0XHRcdHVuaW9uIHNrZXkgc2tleSwgYm9vbCBucSk7XG4gaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRcdCAgICAgdW5pb24gc2tleSBza2V5LCB1bmlvbiBza2V5ICpvbGRrZXksIGJvb2wgbnEsIGJvb2wgbXIsIGJvb2wgbWMpO1xuLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbik7XG4mIzQzO2ludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSk7XG4gbG9uZyBkYXRfcmVzZXRfc2tleXModW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCk7XG4gXG4gdW5zaWduZWQgbG9uZyBkYXRfZ2V0X3B0dmFsKHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IHB0dmFsX3BhcmFtIHBhcmFtKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXG5pbmRleCBmZWU4MDA0N2JkOTRmLi4zY2M0NWY3ZjViMmQ3IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXG5AQCAtOTEsOSAmIzQzOzkxLDkgQEAgaW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmFcbiBcdFx0LyogQWNjZXNzIG91dHNpZGUgbWVtb3J5LCBhZGRyZXNzaW5nIGV4Y2VwdGlvbi4gKi9cbiBcdFx0aWYgKGlzX25vc2xvdF9wZm4oZi1cdTAwM2VwZm4pKVxuIFx0XHRcdHJldHVybiBQR01fQUREUkVTU0lORztcbi1cdFx0LyogU2lnbmFsIHBlbmRpbmc6IHRyeSBhZ2Fpbi4gKi9cbi1cdFx0aWYgKGYtXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1NJR1BFTkRJTkcpXG4tXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0XHQvKiBGYXRhbCBzaWduYWwgcGVuZGluZzogYmFpbCBvdXQuICovXG4mIzQzO1x0XHRpZiAoaXNfc2lncGVuZGluZ19wZm4oZi1cdTAwM2VwZm4pKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIFx0XHQvKiBDaGVjayBpZiBpdCYjMzk7cyByZWFkLW9ubHkgbWVtb3J5OyBkb24mIzM5O3QgdHJ5IHRvIGFjdHVhbGx5IGhhbmRsZSB0aGF0IGNhc2UuICovXG4gXHRcdGlmIChmLVx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9ST19GQVVMVClcbiBcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbmluZGV4IDllM2U2YjBkNzJhZDYuLjYwMTNmMjhlMzQ2MWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5AQCAtNDUsMTMgJiM0Mzs0NSwxNiBAQCBzdGF0aWMgc3RydWN0IGt2bV9zMzkwX2dpYiAqZ2liO1xuIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4tXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCBzaWdwX2N0cmwgPSBzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuJiM0MztcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybDtcbiBcbiBcdGlmICgha3ZtX3MzOTBfdGVzdF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHRpZiAoS1ZNX0JVR19PTihrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdEJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpO1xuIFxuJiM0MztcdHNpZ3BfY3RybCA9IHNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4gXHRpZiAoc3JjX2lkKVxuIFx0XHQqc3JjX2lkID0gc2lncF9jdHJsLnNjbjtcbiBcbkBAIC02MCwxMyAmIzQzOzYzLDE2IEBAIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcbiBcbiBzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKVxuIHtcbi1cdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnNjYTtcbi1cdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmwgPSBcdTAwMjZzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuIFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgb2xkX3ZhbCwgbmV3X3ZhbCA9IHsuc2NuID0gc3JjX2lkLCAuYyA9IDF9O1xuJiM0MztcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnNjYTtcbiYjNDM7XHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsO1xuIFx0aW50IGV4cGVjdCwgcmM7XG4gXG4gXHRCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTtcbiYjNDM7XHRpZiAoS1ZNX0JVR19PTihrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRzaWdwX2N0cmwgPSBcdTAwMjZzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuIFx0b2xkX3ZhbCA9IFJFQURfT05DRSgqc2lncF9jdHJsKTtcbiBcdG9sZF92YWwuYyA9IDA7XG4gXG5AQCAtODQsMTAgJiM0Mzs5MCwxMyBAQCBzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKVxuIHN0YXRpYyB2b2lkIHNjYV9jbGVhcl9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuLVx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4mIzQzO1x0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybDtcbiBcbi1cdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXG4mIzQzO1x0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkIHx8IGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGl6ZSBhZnRlciB0aGUgYWJvdmUgY2hlY2ssIHRvIHByZXZlbnQgZ29pbmcgb3V0IG9mIGJvdW5kcyAqL1xuJiM0MztcdHNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4gXHRrdm1fczM5MF9jbGVhcl9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpO1xuIFxuIFx0V1JJVEVfT05DRShzaWdwX2N0cmwtXHUwMDNldmFsdWUsIDApO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuaW5kZXggMTUwYjVkZDIxNzBlMi4uNjY4MjcyZGZmYTE4YiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5AQCAtNTcxLDcgJiM0Mzs1NzEsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcFxuIFx0c3dpdGNoIChvcCkge1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9TU0tFOlxuIFx0XHRyID0gZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KG1jLCBhc2NlLCBnZm4sIHNrZXksIFx1MDAyNnNrZXksIDAsIDAsIDApO1xuLVx0XHRpZiAociBcdTAwM2U9IDApXG4mIzQzO1x0XHRpZiAociA9PSAwIHx8IHIgPT0gMSlcbiBcdFx0XHRyZXR1cm4gc2tleS5za2V5O1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfSVNLRTpcbkBAIC01ODAsMTQgJiM0Mzs1ODAsMTQgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3BcbiBcdFx0XHRyZXR1cm4gc2tleS5za2V5O1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfUlJCRTpcbi1cdFx0ciA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KGFzY2UsIGdmbik7XG4tXHRcdGlmIChyIFx1MDAzZSAwKVxuLVx0XHRcdHJldHVybiByIFx1MDAzY1x1MDAzYyAxO1xuJiM0MztcdFx0ciA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KGFzY2UsIGdmbiwgXHUwMDI2c2tleSk7XG4mIzQzO1x0XHRpZiAoIXIpXG4mIzQzO1x0XHRcdHJldHVybiBza2V5LnNrZXk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4tXHRyZXR1cm4gcjtcbiYjNDM7XHRyZXR1cm4gciBcdTAwM2UgMCA/IC1FRkFVTFQgOiByO1xuIH1cbiBcbiAvKiBTZWN0aW9uOiBkZXZpY2UgcmVsYXRlZCAqL1xuQEAgLTEyMTksOCAmIzQzOzEyMTksOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KHN0cnVjdCBrdm0gKmt2bSwgaW50IHJlcSlcbiBcbiAvKlxuICAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVx1MDAzZXNyY3UgaGVsZCB0byBhdm9pZCByYWNlcyBvbiBtZW1zbG90cywgYW5kIHdpdGhcbi0gKiBrdm0tXHUwMDNlc2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcywga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oKSxcbi0gKiBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxuJiM0MzsgKiBrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxuJiM0MzsgKiBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLCBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxuICAqL1xuIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG5AQCAtMTI2NSw3ICYjNDM7MTI2NSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbiB9XG4gXG4gLypcbi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cdTAwM2VzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxuJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG4gICoga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKCkgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cbiAgKi9cbiBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbkBAIC0xMzAwLDcgJiM0MzsxMzAwLDkgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcbiB7XG4gXHRpbnQgcmVzID0gLUVOWElPO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4mIzQzO1x0Z3VhcmQoc3JjdSkoXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiYjNDM7XG4gXHRzd2l0Y2ggKGF0dHItXHUwMDNlYXR0cikge1xuIFx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT05fU1RBUlQ6XG4gXHRcdHJlcyA9IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihrdm0pO1xuQEAgLTEzMTEsNyAmIzQzOzEzMTMsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG4tXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuIFxuIFx0cmV0dXJuIHJlcztcbiB9XG5AQCAtMjIxNCw3ICYjNDM7MjIxNSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuIFx0fVxuIFxuIFx0a3ZmcmVlKGtleXMpO1xuLVx0cmV0dXJuIHI7XG4mIzQzO1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuQEAgLTIyNzYsNyAmIzQzOzIyNzcsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcbiBcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcbiBvdXQ6XG4gXHRrdmZyZWUoa2V5cyk7XG4tXHRyZXR1cm4gcjtcbiYjNDM7XHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gLypcbkBAIC0yMzg2LDcgJiM0MzsyMzg3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbiBcbiBcdHNldF9iaXQoR01BUF9GTEFHX1VTRVNfQ01NLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWZsYWdzKTtcbiBcbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiByIFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xuIH1cbiBcbiAvKipcbkBAIC0yOTM0LDYgJiM0MzsyOTM1LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0Y2FzZSBLVk1fUzM5MF9JTlRFUlJVUFQ6IHtcbiBcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50O1xuIFxuJiM0MztcdFx0ciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAoa3ZtX2lzX3Vjb250cm9sKGt2bSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHRyID0gLUVGQVVMVDtcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMzOTBpbnQsIGFyZ3AsIHNpemVvZihzMzkwaW50KSkpXG4gXHRcdFx0YnJlYWs7XG5AQCAtMjk5OCw5ICYjNDM7MzAwMiw4IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhcmdzLCBhcmdwLCBzaXplb2YoYXJncykpKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbi1cdFx0ciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XHRcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jaylcbiYjNDM7XHRcdFx0ciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbiBcdFx0aWYgKCFyKSB7XG4gXHRcdFx0ciA9IGNvcHlfdG9fdXNlcihhcmdwLCBcdTAwMjZhcmdzLCBzaXplb2YoYXJncykpO1xuIFx0XHRcdGlmIChyKVxuQEAgLTMwMTQsOSAmIzQzOzMwMTcsOSBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHIgPSAtRUZBVUxUO1xuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSlcbiBcdFx0XHRicmVhaztcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuIFx0XHRyID0ga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhrdm0sIFx1MDAyNmFyZ3MpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcdGNhc2UgS1ZNX1MzOTBfUFZfQ09NTUFORDoge1xuQEAgLTM0NjEsNyAmIzQzOzM0NjQsNyBAQCBzdGF0aWMgdm9pZCBzY2FfZGVsX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnNjYTtcbiBcbi1cdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXG4mIzQzO1x0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRjbGVhcl9iaXRfaW52KHZjcHUtXHUwMDNldmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtXHUwMDNlbWNuKTtcbkBAIC0zNDgxLDggJiM0MzszNDg0LDggQEAgc3RhdGljIHZvaWQgc2NhX2FkZF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRXUklURV9PTkNFKHNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zZGEsIHZpcnRfdG9fcGh5cyh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4gXHRzZXRfYml0X2ludih2Y3B1LVx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVx1MDAzZW1jbik7XG4tXHRzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2RhID0gdmlydF90b19waHlzKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNjYV9jYW5fYWRkX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG5AQCAtMzYxMyw2ICYjNDM7MzYxNiw5IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICh0ZXN0X2t2bV9mYWNpbGl0eSh2Y3B1LVx1MDAzZWt2bSwgNzQpIHx8IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudXNlcl9pbnN0cjAgfHxcbiBcdCAgICB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnVzZXJfb3BlcmV4ZWMpXG4gXHRcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlaWN0bCB8PSBJQ1RMX09QRVJFWEM7XG4mIzQzO1xuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZCwgdHJ1ZSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGt2bV9oYXNfcGNrbW9fc3ViZnVuYyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbnIpXG5AQCAtMzY3NCw3ICYjNDM7MzY4MCw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiB2b2lkIGt2bV9zMzkwX3ZjcHVfdW5zZXR1cF9jbW1hKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8pKTtcbiYjNDM7XHRpZiAodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VjYnJsbylcbiYjNDM7XHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VjYnJsbykpO1xuIFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VjYnJsbyA9IDA7XG4gfVxuIFxuQEAgLTM3OTIsMjEgJiM0MzszNzk5LDIxIEBAIGludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7REVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSlcbiYjNDM7XG4gaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlO1xuJiM0MztcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlIF9fZnJlZShzaWVfcGFnZSkgPSBOVUxMO1xuIFx0aW50IHJjO1xuIFxuIFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgc2llX3BhZ2UpICE9IDQwOTYpO1xuLVx0dmNwdS1cdTAwM2VhcmNoLm1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuLVx0aWYgKCF2Y3B1LVx1MDAzZWFyY2gubWMpXG4mIzQzO1x0bWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XG4mIzQzO1x0aWYgKCFtYylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRzaWVfcGFnZSA9IChzdHJ1Y3Qgc2llX3BhZ2UgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tXHRpZiAoIXNpZV9wYWdlKSB7XG4tXHRcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKHZjcHUtXHUwMDNlYXJjaC5tYyk7XG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5tYyA9IE5VTEw7XG4mIzQzO1x0aWYgKCFzaWVfcGFnZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4gXG4gXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrID0gXHUwMDI2c2llX3BhZ2UtXHUwMDNlc2llX2Jsb2NrO1xuIFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VpdGRiYSA9IHZpcnRfdG9fcGh5cyhcdTAwMjZzaWVfcGFnZS1cdTAwM2VpdGRiKTtcbkBAIC0zODQ4LDEwICYjNDM7Mzg1NSw5IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWt2bV92YWxpZF9yZWdzIHw9IEtWTV9TWU5DX0ZQUlM7XG4gXG4gXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSkge1xuLVx0XHRyYyA9IC1FTk9NRU07XG4gXHRcdHZjcHUtXHUwMDNlYXJjaC5nbWFwID0gZ21hcF9uZXdfY2hpbGQodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwLCAtMVVMKTtcbiBcdFx0aWYgKCF2Y3B1LVx1MDAzZWFyY2guZ21hcClcbi1cdFx0XHRnb3RvIG91dF9mcmVlX3NpZV9ibG9jaztcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRWTV9FVkVOVCh2Y3B1LVx1MDAzZWt2bSwgMywgXCYjMzQ7Y3JlYXRlIGNwdSAlZCBhdCAweCVwLCBzaWUgYmxvY2sgYXQgMHglcFwmIzM0OyxcbkBAIC0zODU5LDIwICYjNDM7Mzg2NSwxOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0dHJhY2Vfa3ZtX3MzOTBfY3JlYXRlX3ZjcHUodmNwdS1cdTAwM2V2Y3B1X2lkLCB2Y3B1LCB2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKTtcbiBcbiBcdHJjID0ga3ZtX3MzOTBfdmNwdV9zZXR1cCh2Y3B1KTtcbi1cdGlmIChyYylcbi1cdFx0Z290byBvdXRfdWNvbnRyb2xfdW5pbml0O1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbiYjNDM7XHRcdFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlY2hpbGRyZW5fbG9jaylcbiYjNDM7XHRcdFx0XHRnbWFwX3JlbW92ZV9jaGlsZCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4mIzQzO1x0XHRcdHZjcHUtXHUwMDNlYXJjaC5nbWFwID0gZ21hcF9wdXQodmNwdS1cdTAwM2VhcmNoLmdtYXApO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcdH1cbiBcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBub19mcmVlX3B0cihtYyk7XG4mIzQzO1x0c2llX3BhZ2UgPSBOVUxMO1xuIFx0a3ZtX3MzOTBfdXBkYXRlX3RvcG9sb2d5X2NoYW5nZV9yZXBvcnQodmNwdS1cdTAwM2Vrdm0sIDEpO1xuIFx0cmV0dXJuIDA7XG4tXG4tb3V0X3Vjb250cm9sX3VuaW5pdDpcbi1cdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4tXHRcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4tXHR9XG4tb3V0X2ZyZWVfc2llX2Jsb2NrOlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4tXHRyZXR1cm4gcmM7XG4gfVxuIFxuIGludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC01MDM5LDYgJiM0Mzs1MDQ0LDEwIEBAIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgICAga3ZtX3J1bi1cdTAwM2Vrdm1fZGlydHlfcmVncyBcdTAwMjYgfktWTV9TWU5DX1MzOTBfVkFMSURfRklFTERTKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi9cbiYjNDM7XHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdHZjcHVfbG9hZCh2Y3B1KTtcbiBcbiBcdGlmIChndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpIHtcbkBAIC01NTIzLDYgJiM0Mzs1NTMyLDEwIEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdGxvbmcgcjtcbiBcdHUxNiByYywgcnJjO1xuIFxuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoKSAqL1xuJiM0MztcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0dmNwdV9sb2FkKHZjcHUpO1xuIFxuIFx0c3dpdGNoIChpb2N0bCkge1xuQEAgLTU3NDgsMTEgJiM0Mzs1NzYxLDMwIEBAIGJvb2wga3ZtX2FyY2hfaXJxY2hpcF9pbl9rZXJuZWwoc3RydWN0IGt2bSAqa3ZtKVxuIH1cbiBcbiAvKiBTZWN0aW9uOiBtZW1vcnkgcmVsYXRlZCAqL1xuJiM0MztzdGF0aWMgbG9uZyBjbW1hX2RfY291bnRfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4mIzQzO3tcbiYjNDM7XHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbiYjNDM7XG4mIzQzO1x0cGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcbiYjNDM7XHRpZiAocGdzdGUuY21tYV9kKSB7XG4mIzQzO1x0XHRwZ3N0ZS5jbW1hX2QgPSAwO1xuJiM0MztcdFx0YXRvbWljNjRfZGVjKHdhbGstXHUwMDNlcHJpdik7XG4mIzQzO1x0fVxuJiM0MztcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxuIFx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LFxuIFx0XHRcdFx0ICAgZW51bSBrdm1fbXJfY2hhbmdlIGNoYW5nZSlcbiB7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBjbW1hX2RfY291bnRfcHRlLCB9O1xuJiM0MztcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDtcbiYjNDM7XHRpbnQgcmMgPSAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuJiM0MztcbiBcdGlmIChrdm1faXNfdWNvbnRyb2woa3ZtKSBcdTAwMjZcdTAwMjYgbmV3IFx1MDAyNlx1MDAyNiBuZXctXHUwMDNlaWQgXHUwMDNjIEtWTV9VU0VSX01FTV9TTE9UUylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtNTc3NSw0MyAmIzQzOzU4MDcsMzUgQEAgaW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRpZiAoIWt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdC8qXG4tXHQgKiBUdXJuIG9mZiBtaWdyYXRpb24gbW9kZSB3aGVuOlxuLVx0ICogLSB1c2Vyc3BhY2UgY3JlYXRlcyBhIG5ldyBtZW1zbG90IHdpdGggZGlydHkgbG9nZ2luZyBvZmYsXG4tXHQgKiAtIHVzZXJzcGFjZSBtb2RpZmllcyBhbiBleGlzdGluZyBtZW1zbG90IChNT1ZFIG9yIEZMQUdTX09OTFkpIGFuZFxuLVx0ICogICBkaXJ0eSBsb2dnaW5nIGlzIHR1cm5lZCBvZmYuXG4tXHQgKiBNaWdyYXRpb24gbW9kZSBleHBlY3RzIGRpcnR5IHBhZ2UgbG9nZ2luZyBiZWluZyBlbmFibGVkIHRvIHN0b3JlXG4tXHQgKiBpdHMgZGlydHkgYml0bWFwLlxuLVx0ICovXG4tXHRpZiAoY2hhbmdlICE9IEtWTV9NUl9ERUxFVEUgXHUwMDI2XHUwMDI2XG4tXHQgICAgIShuZXctXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTKSlcbi1cdFx0V0FSTihrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihrdm0pLFxuLVx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBzdG9wIG1pZ3JhdGlvbiBtb2RlXCYjMzQ7KTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi1cdFx0XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcbi1cdFx0XHRcdGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldyxcbi1cdFx0XHRcdGVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpXG4te1xuLVx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgPSBOVUxMO1xuLVx0aW50IHJjID0gMDtcbiYjNDM7XHRpZiAoa3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUdXJuIG9mZiBtaWdyYXRpb24gbW9kZSB3aGVuOlxuJiM0MztcdFx0ICogLSB1c2Vyc3BhY2UgY3JlYXRlcyBhIG5ldyBtZW1zbG90IHdpdGggZGlydHkgbG9nZ2luZyBvZmYsXG4mIzQzO1x0XHQgKiAtIHVzZXJzcGFjZSBtb2RpZmllcyBhbiBleGlzdGluZyBtZW1zbG90IChNT1ZFIG9yIEZMQUdTX09OTFkpXG4mIzQzO1x0XHQgKiAgIGFuZCBkaXJ0eSBsb2dnaW5nIGlzIHR1cm5lZCBvZmYuXG4mIzQzO1x0XHQgKiBNaWdyYXRpb24gbW9kZSBleHBlY3RzIGRpcnR5IHBhZ2UgbG9nZ2luZyBiZWluZyBlbmFibGVkIHRvXG4mIzQzO1x0XHQgKiBzdG9yZSBpdHMgZGlydHkgYml0bWFwLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoY2hhbmdlICE9IEtWTV9NUl9ERUxFVEUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIShuZXctXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTKSlcbiYjNDM7XHRcdFx0V0FSTihrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihrdm0pLFxuJiM0MztcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBzdG9wIG1pZ3JhdGlvbiBtb2RlXCYjMzQ7KTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoY2hhbmdlID09IEtWTV9NUl9GTEFHU19PTkxZKVxuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbiBcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuLVx0aWYgKCFtYykge1xuLVx0XHRyYyA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuJiM0MztcdGlmICghbWMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7cmV0cnk6XG4gXHRzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKSB7XG4mIzQzO1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnVzZV9jbW1hIFx1MDAyNlx1MDAyNiBvbGQpIHtcbiYjNDM7XHRcdFx0X2RhdF93YWxrX2dmbl9yYW5nZShvbGQtXHUwMDNlYmFzZV9nZm4sIG9sZC1cdTAwM2ViYXNlX2dmbiAmIzQzOyBvbGQtXHUwMDNlbnBhZ2VzLFxuJiM0MztcdFx0XHRcdFx0ICAgIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsXG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2a3ZtLVx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRzd2l0Y2ggKGNoYW5nZSkge1xuIFx0XHRjYXNlIEtWTV9NUl9ERUxFVEU6XG4gXHRcdFx0cmMgPSBkYXRfZGVsZXRlX3Nsb3QobWMsIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgb2xkLVx1MDAzZWJhc2VfZ2ZuLCBvbGQtXHUwMDNlbnBhZ2VzKTtcbkBAIC01ODI3LDE0ICYjNDM7NTg1MSwyMSBAQCB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0Y2FzZSBLVk1fTVJfRkxBR1NfT05MWTpcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0cmMgPSAwO1xuIFx0XHRcdFdBUk4oMSwgXCYjMzQ7VW5rbm93biBLVk0gTVIgQ0hBTkdFOiAlZFxcblwmIzM0OywgY2hhbmdlKTtcbiBcdFx0fVxuIFx0fVxuLW91dDpcbi1cdGlmIChyYylcbi1cdFx0cHJfd2FybihcJiMzNDtmYWlsZWQgdG8gY29tbWl0IG1lbW9yeSByZWdpb25cXG5cJiMzNDspO1xuLVx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuLVx0cmV0dXJuO1xuJiM0MztcdGlmIChyYyA9PSAtRU5PTUVNKSB7XG4mIzQzO1x0XHRyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7XG4mIzQzO1x0XHRpZiAoIXJjKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LCBlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxuJiM0Mzt7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbmluZGV4IGFkMGRkYzQzM2E3M2MuLmIxYmEyNGMzNDZlZmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbkBAIC0yODksNiAmIzQzOzI4OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lza2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZ2FkZHI7XG4mIzQzO1x0dW5pb24gc2tleSBza2V5O1xuIFx0aW50IHJlZzEsIHJlZzI7XG4gXHRpbnQgcmM7XG4gXG5AQCAtMzA3LDEyICYjNDM7MzA4LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0Z2FkZHIgPSBrdm1fczM5MF9sb2dpY2FsX3RvX2VmZmVjdGl2ZSh2Y3B1LCBnYWRkcik7XG4gXHRnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTtcbiBcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpKTtcbiYjNDM7XHRcdHJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgZ3BhX3RvX2dmbihnYWRkciksIFx1MDAyNnNrZXkpO1xuIFx0aWYgKHJjIFx1MDAzZSAwKVxuIFx0XHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIHJjKTtcbiBcdGlmIChyYyBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJjO1xuLVx0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCByYyk7XG4mIzQzO1x0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCAoc2tleS5za2V5IFx1MDAzZVx1MDAzZSAxKSBcdTAwMjYgMyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTI2MCw4ICYjNDM7MTI2MSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqL1xuIFx0XHRrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTtcbiBcdH0gZWxzZSB7XG4tXHRcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcbiYjNDM7XHRcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxuJiM0MztcdFx0XHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaylcbiYjNDM7XHRcdFx0XHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XG4gXHRcdGlmIChpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuaW5kZXggMWJlYWNjODQxY2E4NS4uYjAyZTAxNTlkM2NkMiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wdi5jXG5AQCAtMjQ0LDYgJiM0MzsyNDQsMjQgQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfY2xlYXJfcHZfc3RhdGUoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIgPSBOVUxMO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZyZWVfc3Rvcl9iYXNlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGZyZWVfc3Rvcl9iYXNlKVxuJiM0MztcdFx0ZnJlZV9wYWdlcyh2Y3B1LVx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTtcbiYjNDM7XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXHUwMDNlYXJjaC5wdikpO1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlc2RmID0gMDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXG4mIzQzO1x0ICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mXG4mIzQzO1x0ICogdGhlIGp1c3QgZnJlZWQgc2lkYS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWdiZWEgPSAxO1xuJiM0MztcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxuIHtcbiBcdGludCBjYztcbkBAIC0yNTgsMjQgJiM0MzsyNzYsOSBAQCBpbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbiBcdFdBUk5fT05DRShjYywgXCYjMzQ7cHJvdHZpcnQgZGVzdHJveSBjcHUgZmFpbGVkIHJjICV4IHJyYyAleFwmIzM0OywgKnJjLCAqcnJjKTtcbiBcbiBcdC8qIEludGVuZGVkIG1lbW9yeSBsZWFrIGZvciBzb21ldGhpbmcgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLiAqL1xuLVx0aWYgKCFjYylcbi1cdFx0ZnJlZV9wYWdlcyh2Y3B1LVx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLFxuLVx0XHRcdCAgIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2NwdV9zdG9yX2xlbikpO1xuLVxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNpZGFfYWRkcih2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2Vwdl9oYW5kbGVfY29uZmlnID0gMDtcbi1cdG1lbXNldChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gucHYsIDAsIHNpemVvZih2Y3B1LVx1MDAzZWFyY2gucHYpKTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlc2RmID0gMDtcbi1cdC8qXG4tXHQgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLlxuLVx0ICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mXG4tXHQgKiB0aGUganVzdCBmcmVlZCBzaWRhLlxuLVx0ICovXG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWdiZWEgPSAxO1xuLVx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSCwgdmNwdSk7XG4mIzQzO1x0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgIWNjKTtcbiBcbi1cdHJldHVybiBjYyA/IEVJTyA6IDA7XG4mIzQzO1x0cmV0dXJuIGNjID8gLUVJTyA6IDA7XG4gfVxuIFxuIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG5AQCAtMzE5LDkgJiM0MzszMjIsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxuIFx0XHQgICAgIHV2Y2IuaGVhZGVyLnJyYyk7XG4gXG4gXHRpZiAoY2MpIHtcbi1cdFx0dTE2IGR1bW15O1xuLVxuLVx0XHRrdm1fczM5MF9wdl9kZXN0cm95X2NwdSh2Y3B1LCBcdTAwMjZkdW1teSwgXHUwMDI2ZHVtbXkpO1xuJiM0MztcdFx0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgdHJ1ZSk7XG4gXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuIFxuQEAgLTgwOSw3ICYjNDM7ODEwLDcgQEAgc3RhdGljIGludCB1bnBhY2tfb25lKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgdHdlYWssXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHR9XG4gXG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTilcbiYjNDM7XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FSU5UUilcbiBcdFx0S1ZNX1VWX0VWRU5UKGt2bSwgMywgXCYjMzQ7UFJPVFZJUlQgVk0gVU5QQUNLOiBmYWlsZWQgYWRkciAlbGx4IHdpdGggcmMgJXggcnJjICV4XCYjMzQ7LFxuIFx0XHRcdCAgICAgdXZjYi5nYWRkciwgKnJjLCAqcnJjKTtcbiBcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfY3JlYXRlX2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9kZXN0cm95X2NwdSYjMzQ7LAogICAgJiMzNDtkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9mYXVsdGluX2dmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGZpeGVzIGZvciBtZW1vcnkgbGVha3MsIGxvY2tpbmcsIGluaXRpYWxpemF0aW9uIHJhY2VzLCBhbmQgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cy4gSXQgbW9kaWZpZXMgY29yZSBLVk0gaW9jdGxzLCBtZW1vcnkgcmVnaW9uIG1hbmFnZW1lbnQsIGFuZCBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBDUFUgbGlmZWN5Y2xlIGZ1bmN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgYWNjZXNzZXMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjY3YjIyZWI5YzMzOTgxOTFlZDFmOTBkMzU5NjVkY2M2OGVhZjkxMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMDY6NDI6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGVhYTM0YzViZDNjMTEuLmVkZjc1YjZhZDIwY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC00NDAsNiAmIzQzOzQ0MCw3IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHsKIAlib29sIHNrZXlfZW5hYmxlZDsKIAkvKiBJbmRpY2F0b3IgaWYgdGhlIGFjY2VzcyByZWdpc3RlcnMgaGF2ZSBiZWVuIGxvYWRlZCBmcm9tIGd1ZXN0ICovCiAJYm9vbCBhY3JzX2xvYWRlZDsKJiM0MzsJYm9vbCBpbml0aWFsaXplZDsKIAlzdHJ1Y3Qga3ZtX3MzOTBfcHZfdmNwdSBwdjsKIAl1bmlvbiBkaWFnMzE4X2luZm8gZGlhZzMxOF9pbmZvOwogCXN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuYyBiL2FyY2gvczM5MC9rdm0vZGF0LmMKaW5kZXggZWQ0MjU5ZDE3NjI5NS4uM2YyZDZlODkwMmQ3NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2RhdC5jCkBAIC03NTUsMTMgJiM0Mzs3NTUsMTUgQEAgaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2YKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbikKJiM0MztpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpCiB7CiAJdW5pb24gcGdzdGUgcGdzdGUsIG9sZDsKIAl1bmlvbiBjcnN0ZSAqY3JzdGVwOwogCXVuaW9uIHB0ZSAqcHRlcDsKIAlpbnQgcmM7CiAKJiM0MzsJc2tleS0mZ3Q7c2tleSA9IDA7CiYjNDM7CiAJcmMgPSBkYXRfZW50cnlfd2FsayhOVUxMLCBnZm4sIGFzY2UsIERBVF9XQUxLX0FOWSwgVEFCTEVfVFlQRV9QQUdFX1RBQkxFLCAmYW1wO2Nyc3RlcCwgJmFtcDtwdGVwKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKQEAgLTc3MSwyMSAmIzQzOzc3MywyMyBAQCBpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pCiAKIAkJaWYgKCFjcnN0ZS5oLmZjIHx8ICFjcnN0ZS5zLmZjMS5wcikKIAkJCXJldHVybiAwOwotCQlyZXR1cm4gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSk7CiYjNDM7CQlza2V5LSZndDtza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSkgJmx0OyZsdDsgMTsKJiM0MzsJCXJldHVybiAwOwogCX0KIAlvbGQgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTsKIAlwZ3N0ZSA9IG9sZDsKIAogCWlmICghcHRlcC0mZ3Q7aC5pKSB7Ci0JCXJjID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKTsKLQkJcGdzdGUuaHIgPSByYyAmZ3Q7Jmd0OyAxOwomIzQzOwkJc2tleS0mZ3Q7c2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSkgJmx0OyZsdDsgMTsKJiM0MzsJCXBnc3RlLmhyID0gc2tleS0mZ3Q7cjsKIAl9Ci0JcmMgfD0gKHBnc3RlLmdyICZsdDsmbHQ7IDEpIHwgcGdzdGUuZ2M7CiYjNDM7CXNrZXktJmd0O3IgfD0gcGdzdGUuZ3I7CiYjNDM7CXNrZXktJmd0O2MgfD0gcGdzdGUuZ2M7CiAJcGdzdGUuZ3IgPSAwOwogCiAJZGF0X3VwZGF0ZV9wdGVwX3NkKG9sZCwgcGdzdGUsIHB0ZXApOwogCXBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpOwotCXJldHVybiByYzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBsb25nIGRhdF9yZXNldF9za2V5c19wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaykKQEAgLTg0Niw2ICYjNDM7ODUwLDcgQEAgc3RhdGljIGxvbmcgX2RhdF9zbG90X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWwKIAlzdHJ1Y3Qgc2xvdF9wcml2ICpwID0gd2Fsay0mZ3Q7cHJpdjsKIAl1bmlvbiBjcnN0ZSBkdW1teSA9IHsgLnZhbCA9IHAtJmd0O3Rva2VuIH07CiAJdW5pb24gcHRlIG5ld19wdGUsIHB0ZSA9IFJFQURfT05DRSgqcHRlcCk7CiYjNDM7CXVuaW9uIHBnc3RlIHBnc3RlOwogCiAJbmV3X3B0ZSA9IF9QVEVfVE9LKGR1bW15LnRvay50eXBlLCBkdW1teS50b2sucGFyKTsKIApAQCAtODUzLDcgJiM0Mzs4NTgsMTEgQEAgc3RhdGljIGxvbmcgX2RhdF9zbG90X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWwKIAlpZiAocHRlLnZhbCA9PSBuZXdfcHRlLnZhbCkKIAkJcmV0dXJuIDA7CiAKLQlkYXRfcHRlcF94Y2hnKHB0ZXAsIG5ld19wdGUsIGdmbiwgd2Fsay0mZ3Q7YXNjZSwgZmFsc2UpOwomIzQzOwlwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApOwomIzQzOwlwZ3N0ZSA9IF9fZGF0X3B0ZXBfeGNoZyhwdGVwLCBwZ3N0ZSwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLSZndDthc2NlLCBmYWxzZSk7CiYjNDM7CXBnc3RlLmNtbWFfZCA9IDA7CiYjNDM7CXBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpOwomIzQzOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5oIGIvYXJjaC9zMzkwL2t2bS9kYXQuaAppbmRleCBmYWQ2MDUzMDVlMDVjLi4xNDFlZTdiOWYwMTkxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZGF0LmgKQEAgLTUzNyw3ICYjNDM7NTM3LDcgQEAgaW50IGRhdF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2YKIAkJCXVuaW9uIHNrZXkgc2tleSwgYm9vbCBucSk7CiBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sCiAJCQkgICAgIHVuaW9uIHNrZXkgc2tleSwgdW5pb24gc2tleSAqb2xka2V5LCBib29sIG5xLCBib29sIG1yLCBib29sIG1jKTsKLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbik7CiYjNDM7aW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KTsKIGxvbmcgZGF0X3Jlc2V0X3NrZXlzKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3Qgc3RhcnQpOwogCiB1bnNpZ25lZCBsb25nIGRhdF9nZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMgYi9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYwppbmRleCBmZWU4MDA0N2JkOTRmLi4zY2M0NWY3ZjViMmQ3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYwpAQCAtOTEsOSAmIzQzOzkxLDkgQEAgaW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmEKIAkJLyogQWNjZXNzIG91dHNpZGUgbWVtb3J5LCBhZGRyZXNzaW5nIGV4Y2VwdGlvbi4gKi8KIAkJaWYgKGlzX25vc2xvdF9wZm4oZi0mZ3Q7cGZuKSkKIAkJCXJldHVybiBQR01fQUREUkVTU0lORzsKLQkJLyogU2lnbmFsIHBlbmRpbmc6IHRyeSBhZ2Fpbi4gKi8KLQkJaWYgKGYtJmd0O3BmbiA9PSBLVk1fUEZOX0VSUl9TSUdQRU5ESU5HKQotCQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CQkvKiBGYXRhbCBzaWduYWwgcGVuZGluZzogYmFpbCBvdXQuICovCiYjNDM7CQlpZiAoaXNfc2lncGVuZGluZ19wZm4oZi0mZ3Q7cGZuKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlRSOwogCQkvKiBDaGVjayBpZiBpdCYjMzk7cyByZWFkLW9ubHkgbWVtb3J5OyBkb24mIzM5O3QgdHJ5IHRvIGFjdHVhbGx5IGhhbmRsZSB0aGF0IGNhc2UuICovCiAJCWlmIChmLSZndDtwZm4gPT0gS1ZNX1BGTl9FUlJfUk9fRkFVTFQpCiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwppbmRleCA5ZTNlNmIwZDcyYWQ2Li42MDEzZjI4ZTM0NjFmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKQEAgLTQ1LDEzICYjNDM7NDUsMTYgQEAgc3RhdGljIHN0cnVjdCBrdm1fczM5MF9naWIgKmdpYjsKIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZCkKIHsKIAlzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnNjYTsKLQl1bmlvbiBlc2NhX3NpZ3BfY3RybCBzaWdwX2N0cmwgPSBzY2EtJmd0O2NwdVt2Y3B1LSZndDt2Y3B1X2lkXS5zaWdwX2N0cmw7CiYjNDM7CXVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybDsKIAogCWlmICgha3ZtX3MzOTBfdGVzdF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpKQogCQlyZXR1cm4gMDsKIAomIzQzOwlpZiAoS1ZNX0JVR19PTihrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSwgdmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwogCUJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpOwogCiYjNDM7CXNpZ3BfY3RybCA9IHNjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNpZ3BfY3RybDsKIAlpZiAoc3JjX2lkKQogCQkqc3JjX2lkID0gc2lncF9jdHJsLnNjbjsKIApAQCAtNjAsMTMgJiM0Mzs2MywxNiBAQCBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpCiAKIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpCiB7Ci0Jc3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5zY2E7Ci0JdW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9ICZhbXA7c2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2lncF9jdHJsOwogCXVuaW9uIGVzY2Ffc2lncF9jdHJsIG9sZF92YWwsIG5ld192YWwgPSB7LnNjbiA9IHNyY19pZCwgLmMgPSAxfTsKJiM0MzsJc3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5zY2E7CiYjNDM7CXVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmw7CiAJaW50IGV4cGVjdCwgcmM7CiAKIAlCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTsKJiM0MzsJaWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSksIHZjcHUtJmd0O2t2bSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlzaWdwX2N0cmwgPSAmYW1wO3NjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNpZ3BfY3RybDsKIAlvbGRfdmFsID0gUkVBRF9PTkNFKCpzaWdwX2N0cmwpOwogCW9sZF92YWwuYyA9IDA7CiAKQEAgLTg0LDEwICYjNDM7OTAsMTMgQEAgc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZCkKIHN0YXRpYyB2b2lkIHNjYV9jbGVhcl9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5zY2E7Ci0JdW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9ICZhbXA7c2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2lncF9jdHJsOwomIzQzOwl1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsOwogCi0JaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSkKJiM0MzsJaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCB8fCBrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkKIAkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIGFmdGVyIHRoZSBhYm92ZSBjaGVjaywgdG8gcHJldmVudCBnb2luZyBvdXQgb2YgYm91bmRzICovCiYjNDM7CXNpZ3BfY3RybCA9ICZhbXA7c2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2lncF9jdHJsOwogCWt2bV9zMzkwX2NsZWFyX2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCk7CiAKIAlXUklURV9PTkNFKHNpZ3BfY3RybC0mZ3Q7dmFsdWUsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IDE1MGI1ZGQyMTcwZTIuLjY2ODI3MmRmZmExOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTU3MSw3ICYjNDM7NTcxLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3AKIAlzd2l0Y2ggKG9wKSB7CiAJY2FzZSBLVk1fUzM5MF9LRVlPUF9TU0tFOgogCQlyID0gZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KG1jLCBhc2NlLCBnZm4sIHNrZXksICZhbXA7c2tleSwgMCwgMCwgMCk7Ci0JCWlmIChyICZndDs9IDApCiYjNDM7CQlpZiAociA9PSAwIHx8IHIgPT0gMSkKIAkJCXJldHVybiBza2V5LnNrZXk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfS0VZT1BfSVNLRToKQEAgLTU4MCwxNCAmIzQzOzU4MCwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcAogCQkJcmV0dXJuIHNrZXkuc2tleTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fUzM5MF9LRVlPUF9SUkJFOgotCQlyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuKTsKLQkJaWYgKHIgJmd0OyAwKQotCQkJcmV0dXJuIHIgJmx0OyZsdDsgMTsKJiM0MzsJCXIgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdChhc2NlLCBnZm4sICZhbXA7c2tleSk7CiYjNDM7CQlpZiAoIXIpCiYjNDM7CQkJcmV0dXJuIHNrZXkuc2tleTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXJldHVybiByOwomIzQzOwlyZXR1cm4gciAmZ3Q7IDAgPyAtRUZBVUxUIDogcjsKIH0KIAogLyogU2VjdGlvbjogZGV2aWNlIHJlbGF0ZWQgKi8KQEAgLTEyMTksOCAmIzQzOzEyMTksOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KHN0cnVjdCBrdm0gKmt2bSwgaW50IHJlcSkKIAogLyoKICAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLSZndDtzcmN1IGhlbGQgdG8gYXZvaWQgcmFjZXMgb24gbWVtc2xvdHMsIGFuZCB3aXRoCi0gKiBrdm0tJmd0O3Nsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksCi0gKiBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLgomIzQzOyAqIGt2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLAomIzQzOyAqIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuCiAgKi8KIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSkKIHsKQEAgLTEyNjUsNyAmIzQzOzEyNjUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pCiB9CiAKIC8qCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS0mZ3Q7c2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcywKJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLAogICoga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKCkgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS4KICAqLwogc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pCkBAIC0xMzAwLDcgJiM0MzsxMzAwLDkgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSwKIHsKIAlpbnQgcmVzID0gLUVOWElPOwogCi0JbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CWd1YXJkKHNyY3UpKCZhbXA7a3ZtLSZndDtzcmN1KTsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spOwomIzQzOwogCXN3aXRjaCAoYXR0ci0mZ3Q7YXR0cikgewogCWNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OX1NUQVJUOgogCQlyZXMgPSBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oa3ZtKTsKQEAgLTEzMTEsNyAmIzQzOzEzMTMsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KLQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogCiAJcmV0dXJuIHJlczsKIH0KQEAgLTIyMTQsNyAmIzQzOzIyMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncykKIAl9CiAKIAlrdmZyZWUoa2V5cyk7Ci0JcmV0dXJuIHI7CiYjNDM7CXJldHVybiByICZsdDs9IDAgPyByIDogLUVGQVVMVDsKIH0KIAogc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpCkBAIC0yMjc2LDcgJiM0MzsyMjc3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpCiAJa3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpOwogb3V0OgogCWt2ZnJlZShrZXlzKTsKLQlyZXR1cm4gcjsKJiM0MzsJcmV0dXJuIHIgJmx0Oz0gMCA/IHIgOiAtRUZBVUxUOwogfQogCiAvKgpAQCAtMjM4Niw3ICYjNDM7MjM4Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sCiAKIAlzZXRfYml0KEdNQVBfRkxBR19VU0VTX0NNTSwgJmFtcDtrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7ZmxhZ3MpOwogCi0JcmV0dXJuIHI7CiYjNDM7CXJldHVybiByICZsdDs9IDAgPyByIDogLUVGQVVMVDsKIH0KIAogLyoqCkBAIC0yOTM0LDYgJiM0MzsyOTM1LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCWNhc2UgS1ZNX1MzOTBfSU5URVJSVVBUOiB7CiAJCXN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludDsKIAomIzQzOwkJciA9IC1FSU5WQUw7CiYjNDM7CQlpZiAoa3ZtX2lzX3Vjb250cm9sKGt2bSkpCiYjNDM7CQkJYnJlYWs7CiAJCXIgPSAtRUZBVUxUOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtzMzkwaW50LCBhcmdwLCBzaXplb2YoczM5MGludCkpKQogCQkJYnJlYWs7CkBAIC0yOTk4LDkgJiM0MzszMDAyLDggQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQlyID0gLUVGQVVMVDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSkKIAkJCWJyZWFrOwotCQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKLQkJciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCAmYW1wO2FyZ3MpOwotCQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwkJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO2t2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrKQomIzQzOwkJCXIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgJmFtcDthcmdzKTsKIAkJaWYgKCFyKSB7CiAJCQlyID0gY29weV90b191c2VyKGFyZ3AsICZhbXA7YXJncywgc2l6ZW9mKGFyZ3MpKTsKIAkJCWlmIChyKQpAQCAtMzAxNCw5ICYjNDM7MzAxNyw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKIAkJciA9IC1FRkFVTFQ7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2FyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpCiAJCQlicmVhazsKLQkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spOwogCQlyID0ga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhrdm0sICZhbXA7YXJncyk7Ci0JCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2FyY2hfbG9jayk7CiAJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9TMzkwX1BWX0NPTU1BTkQ6IHsKQEAgLTM0NjEsNyAmIzQzOzM0NjQsNyBAQCBzdGF0aWMgdm9pZCBzY2FfZGVsX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2guc2NhOwogCi0JaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSkKJiM0MzsJaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCkKIAkJcmV0dXJuOwogCiAJY2xlYXJfYml0X2ludih2Y3B1LSZndDt2Y3B1X2lkLCAodW5zaWduZWQgbG9uZyAqKXNjYS0mZ3Q7bWNuKTsKQEAgLTM0ODEsOCAmIzQzOzM0ODQsOCBAQCBzdGF0aWMgdm9pZCBzY2FfYWRkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpCiAJCXJldHVybjsKIAomIzQzOwlXUklURV9PTkNFKHNjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNkYSwgdmlydF90b19waHlzKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKSk7CiAJc2V0X2JpdF9pbnYodmNwdS0mZ3Q7dmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtJmd0O21jbik7Ci0Jc2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2RhID0gdmlydF90b19waHlzKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKTsKIH0KIAogc3RhdGljIGludCBzY2FfY2FuX2FkZF92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKQpAQCAtMzYxMyw2ICYjNDM7MzYxNiw5IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS0mZ3Q7a3ZtLCA3NCkgfHwgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnVzZXJfaW5zdHIwIHx8CiAJICAgIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC51c2VyX29wZXJleGVjKQogCQl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7aWN0bCB8PSBJQ1RMX09QRVJFWEM7CiYjNDM7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3ZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQsIHRydWUpOwogfQogCiBzdGF0aWMgYm9vbCBrdm1faGFzX3Bja21vX3N1YmZ1bmMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG5yKQpAQCAtMzY3NCw3ICYjNDM7MzY4MCw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogdm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7Y2JybG8pKTsKJiM0MzsJaWYgKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtjYnJsbykKJiM0MzsJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2NicmxvKSk7CiAJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2NicmxvID0gMDsKIH0KIApAQCAtMzc5MiwyMSAmIzQzOzM3OTksMjEgQEAgaW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKQogCXJldHVybiAwOwogfQogCiYjNDM7REVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSkKJiM0MzsKIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jc3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZTsKJiM0MzsJc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgX19mcmVlKGt2bV9zMzkwX21tdV9jYWNoZSkgPSBOVUxMOwomIzQzOwlzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlIF9fZnJlZShzaWVfcGFnZSkgPSBOVUxMOwogCWludCByYzsKIAogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNpZV9wYWdlKSAhPSA0MDk2KTsKLQl2Y3B1LSZndDthcmNoLm1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpOwotCWlmICghdmNwdS0mZ3Q7YXJjaC5tYykKJiM0MzsJbWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7CiYjNDM7CWlmICghbWMpCiAJCXJldHVybiAtRU5PTUVNOwogCXNpZV9wYWdlID0gKHN0cnVjdCBzaWVfcGFnZSAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKLQlpZiAoIXNpZV9wYWdlKSB7Ci0JCWt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKHZjcHUtJmd0O2FyY2gubWMpOwotCQl2Y3B1LSZndDthcmNoLm1jID0gTlVMTDsKJiM0MzsJaWYgKCFzaWVfcGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2sgPSAmYW1wO3NpZV9wYWdlLSZndDtzaWVfYmxvY2s7CiAJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2l0ZGJhID0gdmlydF90b19waHlzKCZhbXA7c2llX3BhZ2UtJmd0O2l0ZGIpOwpAQCAtMzg0OCwxMCAmIzQzOzM4NTUsOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQl2Y3B1LSZndDtydW4tJmd0O2t2bV92YWxpZF9yZWdzIHw9IEtWTV9TWU5DX0ZQUlM7CiAKIAlpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSkpIHsKLQkJcmMgPSAtRU5PTUVNOwogCQl2Y3B1LSZndDthcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LSZndDtrdm0tJmd0O2FyY2guZ21hcCwgLTFVTCk7CiAJCWlmICghdmNwdS0mZ3Q7YXJjaC5nbWFwKQotCQkJZ290byBvdXRfZnJlZV9zaWVfYmxvY2s7CiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJVk1fRVZFTlQodmNwdS0mZ3Q7a3ZtLCAzLCAmIzM0O2NyZWF0ZSBjcHUgJWQgYXQgMHglcCwgc2llIGJsb2NrIGF0IDB4JXAmIzM0OywKQEAgLTM4NTksMjAgJiM0MzszODY1LDE5IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJdHJhY2Vfa3ZtX3MzOTBfY3JlYXRlX3ZjcHUodmNwdS0mZ3Q7dmNwdV9pZCwgdmNwdSwgdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spOwogCiAJcmMgPSBrdm1fczM5MF92Y3B1X3NldHVwKHZjcHUpOwotCWlmIChyYykKLQkJZ290byBvdXRfdWNvbnRyb2xfdW5pbml0OwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCWlmIChrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkgewomIzQzOwkJCXNjb3BlZF9ndWFyZChzcGlubG9jaywgJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7Y2hpbGRyZW5fbG9jaykKJiM0MzsJCQkJZ21hcF9yZW1vdmVfY2hpbGQodmNwdS0mZ3Q7YXJjaC5nbWFwKTsKJiM0MzsJCQl2Y3B1LSZndDthcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LSZndDthcmNoLmdtYXApOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiAKJiM0MzsJdmNwdS0mZ3Q7YXJjaC5tYyA9IG5vX2ZyZWVfcHRyKG1jKTsKJiM0MzsJc2llX3BhZ2UgPSBOVUxMOwogCWt2bV9zMzkwX3VwZGF0ZV90b3BvbG9neV9jaGFuZ2VfcmVwb3J0KHZjcHUtJmd0O2t2bSwgMSk7CiAJcmV0dXJuIDA7Ci0KLW91dF91Y29udHJvbF91bmluaXQ6Ci0JaWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LSZndDtrdm0pKSB7Ci0JCWdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtJmd0O2FyY2guZ21hcCk7Ci0JCXZjcHUtJmd0O2FyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtJmd0O2FyY2guZ21hcCk7Ci0JfQotb3V0X2ZyZWVfc2llX2Jsb2NrOgotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spKTsKLQlyZXR1cm4gcmM7CiB9CiAKIGludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTUwMzksNiAmIzQzOzUwNDQsMTAgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgICAga3ZtX3J1bi0mZ3Q7a3ZtX2RpcnR5X3JlZ3MgJmFtcDsgfktWTV9TWU5DX1MzOTBfVkFMSURfRklFTERTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi8KJiM0MzsJaWYgKCFzbXBfbG9hZF9hY3F1aXJlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAl2Y3B1X2xvYWQodmNwdSk7CiAKIAlpZiAoZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKSB7CkBAIC01NTIzLDYgJiM0Mzs1NTMyLDEwIEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAlsb25nIHI7CiAJdTE2IHJjLCBycmM7CiAKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovCiYjNDM7CWlmICghc21wX2xvYWRfYWNxdWlyZSgmYW1wO3ZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJdmNwdV9sb2FkKHZjcHUpOwogCiAJc3dpdGNoIChpb2N0bCkgewpAQCAtNTc0OCwxMSAmIzQzOzU3NjEsMzAgQEAgYm9vbCBrdm1fYXJjaF9pcnFjaGlwX2luX2tlcm5lbChzdHJ1Y3Qga3ZtICprdm0pCiB9CiAKIC8qIFNlY3Rpb246IG1lbW9yeSByZWxhdGVkICovCiYjNDM7c3RhdGljIGxvbmcgY21tYV9kX2NvdW50X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKQomIzQzO3sKJiM0MzsJdW5pb24gcGdzdGUgcGdzdGU7CiYjNDM7CiYjNDM7CXBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7CiYjNDM7CWlmIChwZ3N0ZS5jbW1hX2QpIHsKJiM0MzsJCXBnc3RlLmNtbWFfZCA9IDA7CiYjNDM7CQlhdG9taWM2NF9kZWMod2Fsay0mZ3Q7cHJpdik7CiYjNDM7CX0KJiM0MzsJcGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCwKIAkJCQkgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsCiAJCQkJICAgZW51bSBrdm1fbXJfY2hhbmdlIGNoYW5nZSkKIHsKJiM0MzsJY29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBjbW1hX2RfY291bnRfcHRlLCB9OwomIzQzOwlzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7CiYjNDM7CWludCByYyA9IC1FTk9NRU07CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O3Nsb3RzX2FyY2hfbG9jayk7CiYjNDM7CiAJaWYgKGt2bV9pc191Y29udHJvbChrdm0pICZhbXA7JmFtcDsgbmV3ICZhbXA7JmFtcDsgbmV3LSZndDtpZCAmbHQ7IEtWTV9VU0VSX01FTV9TTE9UUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTU3NzUsNDMgJiM0Mzs1ODA3LDM1IEBAIGludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCFrdm0tJmd0O2FyY2gubWlncmF0aW9uX21vZGUpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBUdXJuIG9mZiBtaWdyYXRpb24gbW9kZSB3aGVuOgotCSAqIC0gdXNlcnNwYWNlIGNyZWF0ZXMgYSBuZXcgbWVtc2xvdCB3aXRoIGRpcnR5IGxvZ2dpbmcgb2ZmLAotCSAqIC0gdXNlcnNwYWNlIG1vZGlmaWVzIGFuIGV4aXN0aW5nIG1lbXNsb3QgKE1PVkUgb3IgRkxBR1NfT05MWSkgYW5kCi0JICogICBkaXJ0eSBsb2dnaW5nIGlzIHR1cm5lZCBvZmYuCi0JICogTWlncmF0aW9uIG1vZGUgZXhwZWN0cyBkaXJ0eSBwYWdlIGxvZ2dpbmcgYmVpbmcgZW5hYmxlZCB0byBzdG9yZQotCSAqIGl0cyBkaXJ0eSBiaXRtYXAuCi0JICovCi0JaWYgKGNoYW5nZSAhPSBLVk1fTVJfREVMRVRFICZhbXA7JmFtcDsKLQkgICAgIShuZXctJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTKSkKLQkJV0FSTihrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihrdm0pLAotCQkgICAgICYjMzQ7RmFpbGVkIHRvIHN0b3AgbWlncmF0aW9uIG1vZGUmIzM0Oyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCi0JCQkJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLAotCQkJCWNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldywKLQkJCQllbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKQotewotCXN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDsKLQlpbnQgcmMgPSAwOwomIzQzOwlpZiAoa3ZtLSZndDthcmNoLm1pZ3JhdGlvbl9tb2RlKSB7CiYjNDM7CQkvKgomIzQzOwkJICogVHVybiBvZmYgbWlncmF0aW9uIG1vZGUgd2hlbjoKJiM0MzsJCSAqIC0gdXNlcnNwYWNlIGNyZWF0ZXMgYSBuZXcgbWVtc2xvdCB3aXRoIGRpcnR5IGxvZ2dpbmcgb2ZmLAomIzQzOwkJICogLSB1c2Vyc3BhY2UgbW9kaWZpZXMgYW4gZXhpc3RpbmcgbWVtc2xvdCAoTU9WRSBvciBGTEFHU19PTkxZKQomIzQzOwkJICogICBhbmQgZGlydHkgbG9nZ2luZyBpcyB0dXJuZWQgb2ZmLgomIzQzOwkJICogTWlncmF0aW9uIG1vZGUgZXhwZWN0cyBkaXJ0eSBwYWdlIGxvZ2dpbmcgYmVpbmcgZW5hYmxlZCB0bwomIzQzOwkJICogc3RvcmUgaXRzIGRpcnR5IGJpdG1hcC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGNoYW5nZSAhPSBLVk1fTVJfREVMRVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKG5ldy0mZ3Q7ZmxhZ3MgJmFtcDsgS1ZNX01FTV9MT0dfRElSVFlfUEFHRVMpKQomIzQzOwkJCVdBUk4oa3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oa3ZtKSwKJiM0MzsJCQkgICAgICYjMzQ7RmFpbGVkIHRvIHN0b3AgbWlncmF0aW9uIG1vZGUmIzM0Oyk7CiYjNDM7CX0KIAogCWlmIChjaGFuZ2UgPT0gS1ZNX01SX0ZMQUdTX09OTFkpCi0JCXJldHVybjsKJiM0MzsJCXJldHVybiAwOwogCiAJbWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7Ci0JaWYgKCFtYykgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQomIzQzOwlpZiAoIW1jKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7cmV0cnk6CiAJc2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssICZhbXA7a3ZtLSZndDttbXVfbG9jaykgewomIzQzOwkJaWYgKGt2bS0mZ3Q7YXJjaC5taWdyYXRpb25fbW9kZSAmYW1wOyZhbXA7IGt2bS0mZ3Q7YXJjaC51c2VfY21tYSAmYW1wOyZhbXA7IG9sZCkgewomIzQzOwkJCV9kYXRfd2Fsa19nZm5fcmFuZ2Uob2xkLSZndDtiYXNlX2dmbiwgb2xkLSZndDtiYXNlX2dmbiAmIzQzOyBvbGQtJmd0O25wYWdlcywKJiM0MzsJCQkJCSAgICBrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7YXNjZSwgJmFtcDtvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywKJiM0MzsJCQkJCSAgICAmYW1wO2t2bS0mZ3Q7YXJjaC5jbW1hX2RpcnR5X3BhZ2VzKTsKJiM0MzsJCX0KJiM0MzsKIAkJc3dpdGNoIChjaGFuZ2UpIHsKIAkJY2FzZSBLVk1fTVJfREVMRVRFOgogCQkJcmMgPSBkYXRfZGVsZXRlX3Nsb3QobWMsIGt2bS0mZ3Q7YXJjaC5nbWFwLSZndDthc2NlLCBvbGQtJmd0O2Jhc2VfZ2ZuLCBvbGQtJmd0O25wYWdlcyk7CkBAIC01ODI3LDE0ICYjNDM7NTg1MSwyMSBAQCB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKIAkJY2FzZSBLVk1fTVJfRkxBR1NfT05MWToKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgomIzQzOwkJCXJjID0gMDsKIAkJCVdBUk4oMSwgJiMzNDtVbmtub3duIEtWTSBNUiBDSEFOR0U6ICVkXG4mIzM0OywgY2hhbmdlKTsKIAkJfQogCX0KLW91dDoKLQlpZiAocmMpCi0JCXByX3dhcm4oJiMzNDtmYWlsZWQgdG8gY29tbWl0IG1lbW9yeSByZWdpb25cbiYjMzQ7KTsKLQlrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7Ci0JcmV0dXJuOwomIzQzOwlpZiAocmMgPT0gLUVOT01FTSkgewomIzQzOwkJcmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAobWMpOwomIzQzOwkJaWYgKCFyYykKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwl9CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LCBlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKQomIzQzO3sKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCmluZGV4IGFkMGRkYzQzM2E3M2MuLmIxYmEyNGMzNDZlZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vcHJpdi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCkBAIC0yODksNiAmIzQzOzI4OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lza2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdW5zaWduZWQgbG9uZyBnYWRkcjsKJiM0MzsJdW5pb24gc2tleSBza2V5OwogCWludCByZWcxLCByZWcyOwogCWludCByYzsKIApAQCAtMzA3LDEyICYjNDM7MzA4LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWdhZGRyID0ga3ZtX3MzOTBfbG9naWNhbF90b19lZmZlY3RpdmUodmNwdSwgZ2FkZHIpOwogCWdhZGRyID0ga3ZtX3MzOTBfcmVhbF90b19hYnModmNwdSwgZ2FkZHIpOwogCXNjb3BlZF9ndWFyZChyZWFkX2xvY2ssICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDttbXVfbG9jaykKLQkJcmMgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh2Y3B1LSZndDthcmNoLmdtYXAtJmd0O2FzY2UsIGdwYV90b19nZm4oZ2FkZHIpKTsKJiM0MzsJCXJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS0mZ3Q7YXJjaC5nbWFwLSZndDthc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSwgJmFtcDtza2V5KTsKIAlpZiAocmMgJmd0OyAwKQogCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIHJjKTsKIAlpZiAocmMgJmx0OyAwKQogCQlyZXR1cm4gcmM7Ci0Ja3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCByYyk7CiYjNDM7CWt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgKHNrZXkuc2tleSAmZ3Q7Jmd0OyAxKSAmYW1wOyAzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI2MCw4ICYjNDM7MTI2MSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqLwogCQlrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTsKIAl9IGVsc2UgewotCQlzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCAmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7bW11X2xvY2spCi0JCQlpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7CiYjNDM7CQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spCiYjNDM7CQkJc2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgJmFtcDt2Y3B1LSZndDtrdm0tJmd0O21tdV9sb2NrKQomIzQzOwkJCQlpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7CiAJCWlmIChpICZsdDsgMCkKIAkJCXJldHVybiBpOwogCQkvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wdi5jIGIvYXJjaC9zMzkwL2t2bS9wdi5jCmluZGV4IDFiZWFjYzg0MWNhODUuLmIwMmUwMTU5ZDNjZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vcHYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3B2LmMKQEAgLTI0NCw2ICYjNDM7MjQ0LDI0IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX2NsZWFyX3B2X3N0YXRlKHN0cnVjdCBrdm0gKmt2bSkKIAlrdm0tJmd0O2FyY2gucHYuc3Rvcl92YXIgPSBOVUxMOwogfQogCiYjNDM7c3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZyZWVfc3Rvcl9iYXNlKQomIzQzO3sKJiM0MzsJaWYgKGZyZWVfc3Rvcl9iYXNlKQomIzQzOwkJZnJlZV9wYWdlcyh2Y3B1LSZndDthcmNoLnB2LnN0b3JfYmFzZSwgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7CiYjNDM7CWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spKTsKJiM0MzsJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3B2X2hhbmRsZV9jcHUgPSAwOwomIzQzOwl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7cHZfaGFuZGxlX2NvbmZpZyA9IDA7CiYjNDM7CW1lbXNldCgmYW1wO3ZjcHUtJmd0O2FyY2gucHYsIDAsIHNpemVvZih2Y3B1LSZndDthcmNoLnB2KSk7CiYjNDM7CXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtzZGYgPSAwOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLgomIzQzOwkgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2YKJiM0MzsJICogdGhlIGp1c3QgZnJlZWQgc2lkYS4KJiM0MzsJICovCiYjNDM7CXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtnYmVhID0gMTsKJiM0MzsJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSCwgdmNwdSk7CiYjNDM7fQomIzQzOwogaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpCiB7CiAJaW50IGNjOwpAQCAtMjU4LDI0ICYjNDM7Mjc2LDkgQEAgaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpCiAJV0FSTl9PTkNFKGNjLCAmIzM0O3Byb3R2aXJ0IGRlc3Ryb3kgY3B1IGZhaWxlZCByYyAleCBycmMgJXgmIzM0OywgKnJjLCAqcnJjKTsKIAogCS8qIEludGVuZGVkIG1lbW9yeSBsZWFrIGZvciBzb21ldGhpbmcgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLiAqLwotCWlmICghY2MpCi0JCWZyZWVfcGFnZXModmNwdS0mZ3Q7YXJjaC5wdi5zdG9yX2Jhc2UsCi0JCQkgICBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTsKLQotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spKTsKLQl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7cHZfaGFuZGxlX2NwdSA9IDA7Ci0JdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3B2X2hhbmRsZV9jb25maWcgPSAwOwotCW1lbXNldCgmYW1wO3ZjcHUtJmd0O2FyY2gucHYsIDAsIHNpemVvZih2Y3B1LSZndDthcmNoLnB2KSk7Ci0JdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3NkZiA9IDA7Ci0JLyoKLQkgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLgotCSAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZgotCSAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuCi0JICovCi0JdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2diZWEgPSAxOwotCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpOwomIzQzOwlrdm1fczM5MF9wdl9kaXNwb3NlX2NwdSh2Y3B1LCAhY2MpOwogCi0JcmV0dXJuIGNjID8gRUlPIDogMDsKJiM0MzsJcmV0dXJuIGNjID8gLUVJTyA6IDA7CiB9CiAKIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpCkBAIC0zMTksOSAmIzQzOzMyMiw3IEBAIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpCiAJCSAgICAgdXZjYi5oZWFkZXIucnJjKTsKIAogCWlmIChjYykgewotCQl1MTYgZHVtbXk7Ci0KLQkJa3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUodmNwdSwgJmFtcDtkdW1teSwgJmFtcDtkdW1teSk7CiYjNDM7CQlrdm1fczM5MF9wdl9kaXNwb3NlX2NwdSh2Y3B1LCB0cnVlKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC04MDksNyAmIzQzOzgxMCw3IEBAIHN0YXRpYyBpbnQgdW5wYWNrX29uZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkciwgdTY0IHR3ZWFrLAogCQkJcmV0dXJuIC1FQUdBSU47CiAJfQogCi0JaWYgKHJldCAmYW1wOyZhbXA7IHJldCAhPSAtRUFHQUlOKQomIzQzOwlpZiAocmV0ICZhbXA7JmFtcDsgcmV0ICE9IC1FQUdBSU4gJmFtcDsmYW1wOyByZXQgIT0gLUVJTlRSKQogCQlLVk1fVVZfRVZFTlQoa3ZtLCAzLCAmIzM0O1BST1RWSVJUIFZNIFVOUEFDSzogZmFpbGVkIGFkZHIgJWxseCB3aXRoIHJjICV4IHJyYyAleCYjMzQ7LAogCQkJICAgICB1dmNiLmdhZGRyLCAqcmMsICpycmMpOwogCXJldHVybiByZXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjkzCgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMTcwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHMzOTAgS1ZNIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCB0YXJnZXRpbmcgczM5MCBLVk0uIE15IGluaXRpYWwgYXNzZXNzbWVudCBzdWdnZXN0cyBhIHNldCBvZiByZWZpbmVtZW50cyBhbmQgZml4ZXMgYWNyb3NzIHNldmVyYWwgY3JpdGljYWwgYXJlYXMuIEZpcnN0LCBJIHNlZSBhIG5ldyBib29sZWFuLCBgaW5pdGlhbGl6ZWRgLCBiZWluZyBpbnRyb2R1Y2VkIHdpdGhpbiBgc3RydWN0IGt2bV92Y3B1X2FyY2hgLiBUaGlzIGxpa2VseSBhZGRyZXNzZXMgaW5pdGlhbGl6YXRpb24gcmFjZXMuIFRoZW4gSSBhbSBnb2luZyB0byBzZWUgaG93IGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgaXMgbm93IHRha2luZyBhIGB1bmlvbiBza2V5ICpza2V5YCBwYXJhbWV0ZXIgYW5kIHJldHVybmluZyB0aGUgc2tleSB2aWEgcG9pbnRlciBhbmQgYWxzbyBob3cgYF9kYXRfc2xvdF9wdGVgIGNsZWFycyBgcGdzdGUuY21tYV9kYCBkdXJpbmcgUFRFIGV4Y2hhbmdlcy4gVGhlc2UgaW5kaWNhdGUgY2hhbmdlcyBpbiBTZWN1cmUgS2V5IG1hbmFnZW1lbnQgYW5kIENNTUFzLgoKVGhlIGNoYW5nZSBpbiBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gIGlzIGltbWVkaWF0ZWx5IGFwcGFyZW50LiBXZSYjMzk7cmUgc2hpZnRpbmcgZnJvbSByZXRyeWluZyBvbiBgS1ZNX1BGTl9FUlJfU0lHUEVORElOR2AgdG8gYmFpbGluZyBvdXQgd2l0aCBgRUlOVFJgIHdoZW4gYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZy4gVGhpcyBpcyBhIHNlbnNpYmxlIGNoYW5nZSBpbiBlcnJvciBoYW5kbGluZy4KClRoZSBpbnRyb2R1Y3Rpb24gb2YgY2hlY2tzIGZvciBga3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSlgIGFuZCBgdmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZGAgd2l0aGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgZnVuY3Rpb25zIChgc2NhX2V4dF9jYWxsX3BlbmRpbmdgLCBgc2NhX2luamVjdF9leHRfY2FsbGAsIGFuZCBgc2NhX2NsZWFyX2V4dF9jYWxsYCkgaW1tZWRpYXRlbHkgY2FwdHVyZXMgbXkgYXR0ZW50aW9uLiBUaGlzIHN1Z2dlc3RzIHRpZ2h0ZXIgY29udHJvbCBhbmQgcG90ZW50aWFsbHkgc2VjdXJpdHktcmVsYXRlZCByZWZpbmVtZW50cyBmb3IgVXNlciBDb250cm9sIHNjZW5hcmlvcy4KCkxvb2tpbmcgYXQgYGt2bS1zMzkwLmNgLCBJIHNlZSB0aGF0IGBrdm1fczM5MF9rZXlvcGAgaXMgdXBkYXRlZCB0byB0aGUgbmV3IGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgc2lnbmF0dXJlLiBUaGUgbG9ja2luZyBzdHJhdGVneSBmb3IgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gIGFwcGVhcnMgdG8gYmUgcmVmaW5lZCwgc2hpZnRpbmcgdG8gYHNyY3VgIGFuZCBgbXV0ZXhgIGd1YXJkcywgd2hpY2ggY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgb24gY29uY3VycmVuY3kuIFRoZSBlcnJvciByZXR1cm4gdmFsdWVzIGhhdmUgYmVlbiBob21vZ2VuaXplZCB0byBgLUVGQVVMVGAgaW4gc2V2ZXJhbCBga3ZtX3MzOTBfYCBmdW5jdGlvbnMuIFRoZSB1c2Ugb2YgYHNsb3RzX2FyY2hfbG9ja2AgY29uc2lzdGVudGx5IHdpdGhpbiB0aGUgcmVsZXZhbnQgaW9jdGxzIGFuZCB0aGUgc2NhIGZ1bmN0aW9ucyBmb3IgYWRkaW5nIGFuZCBkZWxldGluZyB2Q1BVcyBzZWVtcyB0byBiZSBhIHNpZ25pZmljYW50IGxvY2tpbmcgc3RyYXRlZ3kgY2hhbmdlLiBJbXBvcnRhbnRseSwgSSBub3RlIHRoZSB1c2Ugb2YgYHNtcF9zdG9yZV9yZWxlYXNlYCB3aGVuIHNldHRpbmcgYHZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQgPSB0cnVlYCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbWVtb3J5IG9yZGVyaW5nLiBUaGUgY2xlYW51cCBpbiBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgIGxldmVyYWdpbmcgYF9fZnJlZWAgbWFjcm9zIGFuZCB0aGUgZGlmZmVyZW50IGhhbmRsaW5nIG9mIGBrdm1faXNfdWNvbnRyb2xgIGFyZSBhbHNvIGludGVyZXN0aW5nLiBUaGUgY2hlY2tzIG9mIGBzbXBfbG9hZF9hY3F1aXJlYCBpbiB0aGUgcnVuIGFuZCBpb2N0bCBhcmUgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBpcyBjb3JyZWN0LiBGaW5hbGx5LCB0aGUgcmVmYWN0b3Jpbmcgb2YgbWVtb3J5IHJlZ2lvbiBwcmVwYXJhdGlvbiBhbmQgY29tbWl0IGxvb2tzIHNpZ25pZmljYW50LCB3aXRoIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgbm93IGhhbmRsaW5nIG1pZ3JhdGlvbiBhbmQgQ01NQSBtb2RlcyBpbiBjb25qdW5jdGlvbiB3aXRoIGBfZGF0X3dhbGtfZ2ZuX3JhbmdlYC4KClRoZSBjb2RlIHdpdGhpbiBgcHJpdi5jYCBjb25maXJtcyB0aGUgbmV3IGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgc2lnbmF0dXJlIGlzIGluIHVzZSBhbmQgdGhhdCBgc2xvdHNfYXJjaF9sb2NrYCBpcyBub3cgYmVpbmcgdGFrZW4gYXJvdW5kIHRoZSBgX19kb19lc3NhYCBpbiBgaGFuZGxlX2Vzc2FgLgoKQW5kIGZpbmFsbHksIGBwdi5jYCBzaG93cyBmdW5jdGlvbiByZS1hcnJhbmdlbWVudCBmb3IgQ1BVIGRpc3Bvc2FsIGFuZCB0aGF0IGAtRUlOVFJgIGhhbmRsaW5nIGluIGB1bnBhY2tfb25lYC4KCkluIHN1bW1hcnksIHRoaXMgc2VlbXMgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgczM5MCBLVk0gc3Vic3lzdGVtLCBhbmQgaXQmIzM5O3MgY2VydGFpbmx5IHdvcnRoIGZ1enppbmcgdG8gdW5jb3ZlciBhbnkgcmVtYWluaW5nIGlzc3Vlcy4gU2luY2Ugc3l6a2FsbGVyIHN1cHBvcnRzIHMzOTB4IGFuZCBLVk0gb24gczM5MHgsIHRoYXQgc2VlbXMgbGlrZSBhIHZpYWJsZSBwYXRoLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBJZGVhbGx5LCB0aGVzZSBzaG91bGQgYmUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBHaXZlbiB0aGUgcGF0Y2gsIHNvbWUgcHJvbWlzaW5nIGNhbmRpZGF0ZXMgaW5jbHVkZToKCiogICBga3ZtX2FyY2hfdm1faW9jdGxgOiBBIGdlbmVyYWwgaW9jdGwgZW50cnlwb2ludC4KKiAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YDogTm9uLXN0YXRpYyBhbmQgc2VlbXMgdG8gYmUgYSBnb29kIGVudHJ5IHBvaW50LgoqICAgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YDogTm9uLXN0YXRpYyBhbmQgc2VlbXMgdG8gYmUgYSBnb29kIGVudHJ5IHBvaW50LgoqICAgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YDogTm9uLXN0YXRpYyBhbmQgcGFydCBvZiBhIHNpZ25pZmljYW50IGRhdGEgc3RydWN0dXJlIGNoYW5nZS4KKiAgIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmA6IEFsc28gbW9kaWZpZWQgc2lnbmlmaWNhbnRseS4KCkkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdG8gY29uZmlybSB0aGF0IENPTkZJR1xfS1ZNIGlzIHNldCwgYW5kIGNvbmZpcm0gdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgZXhpc3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHZvaWR8bG9uZ3xib29sKSBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMzU0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTMwLVxuYXJjaC9zMzkwL2t2bS9kYXQuYzozMTppbnQga3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jKVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0zMi17XG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYz03Nj1zdHJ1Y3QgY3JzdF90YWJsZSAqZGF0X2FsbG9jX2Nyc3Rfc2xlZXBhYmxlKHVuc2lnbmVkIGxvbmcgaW5pdClcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTg5LVxuYXJjaC9zMzkwL2t2bS9kYXQuYzo5MDp2b2lkIGRhdF9mcmVlX2xldmVsKHN0cnVjdCBjcnN0X3RhYmxlICp0YWJsZSwgYm9vbCBvd25zX3B0ZXMpXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTkxLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEwNC1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTA1OmludCBkYXRfc2V0X2FzY2VfbGltaXQoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgKmFzY2UsIGludCBuZXd0eXBlKVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMDYte1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmM9MzAyPXN0YXRpYyBpbnQgZGF0X3NwbGl0X2Nyc3RlKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBjcnN0ZSAqY3JzdGVwLFxuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMzc4LSAqL1xuYXJjaC9zMzkwL2t2bS9kYXQuYzozNzk6aW50IGRhdF9lbnRyeV93YWxrKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBnZm5fdCBnZm4sIHVuaW9uIGFzY2UgYXNjZSwgaW50IGZsYWdzLFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0zODAtXHRcdCAgIGludCB3YWxrX2xldmVsLCB1bmlvbiBjcnN0ZSAqKmxhc3QsIHVuaW9uIHB0ZSAqKnB0ZXBwKVxuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmM9NTM0PXN0YXRpYyBsb25nIGRhdF9jcnN0ZV93YWxrX3JhbmdlKGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIHN0cnVjdCBjcnN0X3RhYmxlICp0YWJsZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTU5NC0gKi9cbmFyY2gvczM5MC9rdm0vZGF0LmM6NTk1OmxvbmcgX2RhdF93YWxrX2dmbl9yYW5nZShnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCB1bmlvbiBhc2NlIGFzY2UsXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTU5Ni1cdFx0XHQgY29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyAqb3BzLCBpbnQgZmxhZ3MsIHZvaWQgKnByaXYpXG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYy02MTUtXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjYxNjppbnQgZGF0X2dldF9zdG9yYWdlX2tleSh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSlcbmFyY2gvczM5MC9rdm0vZGF0LmMtNjE3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTY1MD1zdGF0aWMgdm9pZCBkYXRfdXBkYXRlX3B0ZXBfc2QodW5pb24gcGdzdGUgb2xkLCB1bmlvbiBwZ3N0ZSBwZ3N0ZSwgdW5pb24gcHRlICpwdGVwKVxuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtNjU1LVxuYXJjaC9zMzkwL2t2bS9kYXQuYzo2NTY6aW50IGRhdF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxuYXJjaC9zMzkwL2t2bS9kYXQuYy02NTctXHRcdFx0dW5pb24gc2tleSBza2V5LCBib29sIG5xKVxuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmM9NzAwPXN0YXRpYyBib29sIHBhZ2VfY29uZF9zZXRfc3RvcmFnZV9rZXkocGh5c19hZGRyX3QgcGFkZHIsIHVuaW9uIHNrZXkgc2tleSwgdW5pb24gc2tleSAqb2xka2V5LFxuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtNzEwLVxuYXJjaC9zMzkwL2t2bS9kYXQuYzo3MTE6aW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxuYXJjaC9zMzkwL2t2bS9kYXQuYy03MTItXHRcdFx0ICAgICB1bmlvbiBza2V5IHNrZXksIHVuaW9uIHNrZXkgKm9sZGtleSwgYm9vbCBucSwgYm9vbCBtciwgYm9vbCBtYylcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTc1Ny1cbmFyY2gvczM5MC9rdm0vZGF0LmM6NzU4OmludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSlcbmFyY2gvczM5MC9rdm0vZGF0LmMtNzU5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTgxMz1zdGF0aWMgbG9uZyBkYXRfcmVzZXRfc2tleXNfY3JzdGUodW5pb24gY3JzdGUgKmNyc3RlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYy04MzEtXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjgzMjpsb25nIGRhdF9yZXNldF9za2V5cyh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KVxuYXJjaC9zMzkwL2t2bS9kYXQuYy04MzMte1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmM9OTAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIGRhdF9zbG90X29wcyA9IHtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTkwNi1cbmFyY2gvczM5MC9rdm0vZGF0LmM6OTA3OmludCBkYXRfc2V0X3Nsb3Qoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcbmFyY2gvczM5MC9rdm0vZGF0LmMtOTA4LVx0XHQgdTE2IHR5cGUsIHUxNiBwYXJhbSlcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTk0ND11bnNpZ25lZCBsb25nIGRhdF9nZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0pXG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYy05NjEtXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjk2Mjp2b2lkIGRhdF9zZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0sIHVuc2lnbmVkIGxvbmcgdmFsKVxuYXJjaC9zMzkwL2t2bS9kYXQuYy05NjMte1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmM9OTkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIHRlc3RfYWdlX29wcyA9IHtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEwMDYtICovXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEwMDc6Ym9vbCBkYXRfdGVzdF9hZ2VfZ2ZuKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZClcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTAwOC17XG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYz0xMDMwPXN0YXRpYyBsb25nIGRhdF9zZXRfcG5fcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMDQzLVxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMDQ0OmludCBkYXRfc2V0X3ByZWZpeF9ub3RpZl9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEwNDUte1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTA3NC0gKi9cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTA3NTppbnQgZGF0X3BlcmZvcm1fZXNzYSh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgaW50IG9yYywgdW5pb24gZXNzYV9zdGF0ZSAqc3RhdGUsIGJvb2wgKmRpcnR5KVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMDc2LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTExNTY9c3RhdGljIGxvbmcgZGF0X3Jlc2V0X2NtbWFfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTY5LVxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMTcwOmxvbmcgZGF0X3Jlc2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydClcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE3MS17XG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYz0xMjAxPXN0YXRpYyBsb25nIF9fZGF0X3BlZWtfY21tYV9jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2Fsaylcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyMDktXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMTA6aW50IGRhdF9wZWVrX2NtbWEoZ2ZuX3Qgc3RhcnQsIHVuaW9uIGFzY2UgYXNjZSwgdW5zaWduZWQgaW50ICpjb3VudCwgdTggKnZhbHVlcylcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIxMS17XG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYz0xMjI4PXN0YXRpYyBsb25nIF9fZGF0X2dldF9jbW1hX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTI1NS1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTI1NjppbnQgZGF0X2dldF9jbW1hKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzLCBhdG9taWM2NF90ICpyZW0pXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyNTcte1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmM9MTI4Nj1zdGF0aWMgbG9uZyBfX2RhdF9zZXRfY21tYV9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2Fsaylcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEzMTgtICovXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEzMTk6aW50IGRhdF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbixcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTMyMC1cdFx0ICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyBtYXNrLCBjb25zdCB1aW50OF90ICpiaXRzKVxuLS1cbmFyY2gvczM5MC9rdm0vZGF0Lmg9NTIxPXVuaW9uIHBnc3RlIF9fbXVzdF9jaGVjayBfX2RhdF9wdGVwX3hjaGcodW5pb24gcHRlICpwdGVwLCB1bmlvbiBwZ3N0ZSBwZ3N0ZSwgdW5pb24gcHRlIG5ldyxcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTIyLVx0XHRcdFx0XHQgZ2ZuX3QgZ2ZuLCB1bmlvbiBhc2NlIGFzY2UsIGJvb2wgdXNlc19za2V5cyk7XG5hcmNoL3MzOTAva3ZtL2RhdC5oOjUyMzpib29sIGRhdF9jcnN0ZXBfeGNoZ19hdG9taWModW5pb24gY3JzdGUgKmNyc3RlcCwgdW5pb24gY3JzdGUgb2xkLCB1bmlvbiBjcnN0ZSBuZXcsIGdmbl90IGdmbixcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTI0LVx0XHRcdCAgICB1bmlvbiBhc2NlIGFzY2UpO1xuYXJjaC9zMzkwL2t2bS9kYXQuaDo1MjU6dm9pZCBkYXRfY3JzdGVwX3hjaGcodW5pb24gY3JzdGUgKmNyc3RlcCwgdW5pb24gY3JzdGUgbmV3LCBnZm5fdCBnZm4sIHVuaW9uIGFzY2UgYXNjZSk7XG5hcmNoL3MzOTAva3ZtL2RhdC5oLTUyNi1cbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTI3OmxvbmcgX2RhdF93YWxrX2dmbl9yYW5nZShnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCB1bmlvbiBhc2NlIGFzY2UsXG5hcmNoL3MzOTAva3ZtL2RhdC5oLTUyOC1cdFx0XHQgY29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyAqb3BzLCBpbnQgZmxhZ3MsIHZvaWQgKnByaXYpO1xuYXJjaC9zMzkwL2t2bS9kYXQuaC01MjktXG5hcmNoL3MzOTAva3ZtL2RhdC5oOjUzMDppbnQgZGF0X2VudHJ5X3dhbGsoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIGdmbl90IGdmbiwgdW5pb24gYXNjZSBhc2NlLCBpbnQgZmxhZ3MsXG5hcmNoL3MzOTAva3ZtL2RhdC5oLTUzMS1cdFx0ICAgaW50IHdhbGtfbGV2ZWwsIHVuaW9uIGNyc3RlICoqbGFzdCwgdW5pb24gcHRlICoqcHRlcHApO1xuYXJjaC9zMzkwL2t2bS9kYXQuaDo1MzI6dm9pZCBkYXRfZnJlZV9sZXZlbChzdHJ1Y3QgY3JzdF90YWJsZSAqdGFibGUsIGJvb2wgb3duc19wdGVzKTtcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTMzLXN0cnVjdCBjcnN0X3RhYmxlICpkYXRfYWxsb2NfY3JzdF9zbGVlcGFibGUodW5zaWduZWQgbG9uZyBpbml0KTtcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTM0OmludCBkYXRfc2V0X2FzY2VfbGltaXQoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgKmFzY2UsIGludCBuZXd0eXBlKTtcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTM1OmludCBkYXRfZ2V0X3N0b3JhZ2Vfa2V5KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KTtcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTM2OmludCBkYXRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbixcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTM3LVx0XHRcdHVuaW9uIHNrZXkgc2tleSwgYm9vbCBucSk7XG5hcmNoL3MzOTAva3ZtL2RhdC5oOjUzODppbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sXG5hcmNoL3MzOTAva3ZtL2RhdC5oLTUzOS1cdFx0XHQgICAgIHVuaW9uIHNrZXkgc2tleSwgdW5pb24gc2tleSAqb2xka2V5LCBib29sIG5xLCBib29sIG1yLCBib29sIG1jKTtcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTQwOmludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSk7XG5hcmNoL3MzOTAva3ZtL2RhdC5oOjU0MTpsb25nIGRhdF9yZXNldF9za2V5cyh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KTtcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTQyLVxuYXJjaC9zMzkwL2t2bS9kYXQuaD01NDM9dW5zaWduZWQgbG9uZyBkYXRfZ2V0X3B0dmFsKHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IHB0dmFsX3BhcmFtIHBhcmFtKTtcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTQ0OnZvaWQgZGF0X3NldF9wdHZhbChzdHJ1Y3QgcGFnZV90YWJsZSAqdGFibGUsIHN0cnVjdCBwdHZhbF9wYXJhbSBwYXJhbSwgdW5zaWduZWQgbG9uZyB2YWwpO1xuYXJjaC9zMzkwL2t2bS9kYXQuaC01NDUtXG5hcmNoL3MzOTAva3ZtL2RhdC5oOjU0NjppbnQgZGF0X3NldF9zbG90KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG5hcmNoL3MzOTAva3ZtL2RhdC5oLTU0Ny1cdFx0IHUxNiB0eXBlLCB1MTYgcGFyYW0pO1xuYXJjaC9zMzkwL2t2bS9kYXQuaDo1NDg6aW50IGRhdF9zZXRfcHJlZml4X25vdGlmX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbik7XG5hcmNoL3MzOTAva3ZtL2RhdC5oOjU0OTpib29sIGRhdF90ZXN0X2FnZV9nZm4odW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKTtcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTUwLVxuYXJjaC9zMzkwL2t2bS9kYXQuaDo1NTE6aW50IGRhdF9wZXJmb3JtX2Vzc2EodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIGludCBvcmMsIHVuaW9uIGVzc2Ffc3RhdGUgKnN0YXRlLCBib29sICpkaXJ0eSk7XG5hcmNoL3MzOTAva3ZtL2RhdC5oOjU1Mjpsb25nIGRhdF9yZXNldF9jbW1hKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3Qgc3RhcnRfZ2ZuKTtcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTUzOmludCBkYXRfcGVla19jbW1hKGdmbl90IHN0YXJ0LCB1bmlvbiBhc2NlIGFzY2UsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMpO1xuYXJjaC9zMzkwL2t2bS9kYXQuaDo1NTQ6aW50IGRhdF9nZXRfY21tYSh1bmlvbiBhc2NlIGFzY2UsIGdmbl90ICpzdGFydCwgdW5zaWduZWQgaW50ICpjb3VudCwgdTggKnZhbHVlcywgYXRvbWljNjRfdCAqcmVtKTtcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTU1OmludCBkYXRfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sXG5hcmNoL3MzOTAva3ZtL2RhdC5oLTU1Ni1cdFx0ICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyBtYXNrLCBjb25zdCB1aW50OF90ICpiaXRzKTtcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTU3LVxuYXJjaC9zMzkwL2t2bS9kYXQuaDo1NTg6aW50IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyk7XG5hcmNoL3MzOTAva3ZtL2RhdC5oLTU1OS1cbi0tXG5hcmNoL3MzOTAva3ZtL2RpYWcuYz0yNjY9c3RhdGljIGludCBfX2RpYWdfdmlydGlvX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9kaWFnLmMtMzAxLVxuYXJjaC9zMzkwL2t2bS9kaWFnLmM6MzAyOmludCBrdm1fczM5MF9oYW5kbGVfZGlhZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2RpYWcuYy0zMDMte1xuLS1cbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTE0LVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6MTU6Ym9vbCBrdm1fYXJjaF9zZXR1cF9hc3luY19wZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTYtXG4tLVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMzItICovXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzozMzppbnQga3ZtX3MzOTBfZmF1bHRpbl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYXVsdCAqZilcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTM0LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0xMjgtXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzoxMjk6aW50IGt2bV9zMzkwX2dldF9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmLCBnZm5fdCBnZm4sIGJvb2wgdylcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTEzMC17XG4tLVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmgtMTUtXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uaDoxNjppbnQga3ZtX3MzOTBfZmF1bHRpbl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYXVsdCAqZik7XG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uaDoxNzppbnQga3ZtX3MzOTBfZ2V0X2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmYsIGdmbl90IGdmbiwgYm9vbCB3KTtcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5oLTE4LVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jPTExMj11bmlvbiBvYWMge1xuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEzMy1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjEzNDppbnQgaXB0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTM1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYz0yMDI9c3RhdGljIHZvaWQgaXB0ZV91bmxvY2tfc2lpZihzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMjE3LVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6MjE4OnZvaWQgaXB0ZV9sb2NrKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTIxOS17XG4tLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMjI1LVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6MjI2OnZvaWQgaXB0ZV91bmxvY2soc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMjI3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYz04ODI9c3RhdGljIGludCBhY2Nlc3NfZ3Vlc3RfcGFnZV93aXRoX2tleV9ncGEoc3RydWN0IGt2bSAqa3ZtLCBlbnVtIGdhY2NfbW9kZSBtb2RlLCBncGFfdCBncGEsXG4tLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtOTA4LVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6OTA5OmludCBhY2Nlc3NfZ3Vlc3RfYWJzX3dpdGhfa2V5KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCB2b2lkICpkYXRhLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtOTEwLVx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCBlbnVtIGdhY2NfbW9kZSBtb2RlLCB1OCBhY2Nlc3Nfa2V5KVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTkyOC1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjkyOTppbnQgYWNjZXNzX2d1ZXN0X3dpdGhfa2V5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBnYSwgdTggYXIsXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy05MzAtXHRcdFx0ICB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGxlbiwgZW51bSBnYWNjX21vZGUgbW9kZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xMDA4LVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6MTAwOTppbnQgYWNjZXNzX2d1ZXN0X3JlYWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEwMTAtXHRcdCAgICAgIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbGVuLCBlbnVtIGdhY2NfbW9kZSBtb2RlKVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jPTExMDQ9c3RhdGljIHZvaWQgX2NtcHhjaGdfZ3Vlc3RfYWJzX3dpdGhfa2V5KHN0cnVjdCBndWVzdF9mYXVsdCAqZilcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xMTM2LSAqL1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6MTEzNzppbnQgY21weGNoZ19ndWVzdF9hYnNfd2l0aF9rZXkoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGludCBsZW4sIHVuaW9uIGt2bV9zMzkwX3F1YWQgKm9sZCxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTExMzgtXHRcdFx0ICAgICAgIHVuaW9uIGt2bV9zMzkwX3F1YWQgbmV3LCB1OCBhY2MsIGJvb2wgKnN1Y2Nlc3MpXG4tLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTE4My0gKi9cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjExODQ6aW50IGd1ZXN0X3RyYW5zbGF0ZV9hZGRyZXNzX3dpdGhfa2V5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBndmEsIHU4IGFyLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTE4NS1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqZ3BhLCBlbnVtIGdhY2NfbW9kZSBtb2RlLFxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEyMDctICovXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYzoxMjA4OmludCBjaGVja19ndmFfcmFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGd2YSwgdTggYXIsXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xMjA5LVx0XHQgICAgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGVudW0gZ2FjY19tb2RlIG1vZGUsIHU4IGFjY2Vzc19rZXkpXG4tLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTIzMi0gKi9cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjEyMzM6aW50IGNoZWNrX2dwYV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ3BhLCB1bnNpZ25lZCBsb25nIGxlbmd0aCxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEyMzQtXHRcdCAgICBlbnVtIGdhY2NfbW9kZSBtb2RlLCB1OCBhY2Nlc3Nfa2V5KVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEyNTctICovXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYzoxMjU4OmludCBrdm1fczM5MF9jaGVja19sb3dfYWRkcl9wcm90X3JlYWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSlcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEyNTkte1xuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jPTE2NDY9c3RhdGljIGludCBfX2dhY2Nlc3Nfc2hhZG93X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGdtYXAgKnNnLCBncGFfdCBzYWRkcixcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xNjcwLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6MTY3MTppbnQgZ2FjY2Vzc19zaGFkb3dfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZ21hcCAqc2csIGdwYV90IHNhZGRyLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTY3Mi1cdFx0XHQgdW5pb24gbXZwZ19wZWkgKmRhdHB0ciwgYm9vbCB3cilcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaD0xNDg9c3RhdGljIGlubGluZSBfX211c3RfY2hlY2tcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjE0OTppbnQgd3JpdGVfZ3Vlc3RfbGMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSwgdm9pZCAqZGF0YSxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTE1MC1cdFx0ICAgdW5zaWduZWQgbG9uZyBsZW4pXG4tLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg9MTc0PXN0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDoxNzU6aW50IHJlYWRfZ3Vlc3RfbGMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSwgdm9pZCAqZGF0YSxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTE3Ni1cdFx0ICB1bnNpZ25lZCBsb25nIGxlbilcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaD0xODM9ZW51bSBnYWNjX21vZGUge1xuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTE4OC1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjE4OTppbnQgZ3Vlc3RfdHJhbnNsYXRlX2FkZHJlc3Nfd2l0aF9rZXkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGd2YSwgdTggYXIsXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0xOTAtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKmdwYSwgZW51bSBnYWNjX21vZGUgbW9kZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0xOTItXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDoxOTM6aW50IGNoZWNrX2d2YV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhLCB1OCBhcixcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTE5NC1cdFx0ICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBlbnVtIGdhY2NfbW9kZSBtb2RlLCB1OCBhY2Nlc3Nfa2V5KTtcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTE5NS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjE5NjppbnQgY2hlY2tfZ3BhX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGEsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMTk3LVx0XHQgICAgZW51bSBnYWNjX21vZGUgbW9kZSwgdTggYWNjZXNzX2tleSk7XG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0xOTgtXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDoxOTk6aW50IGFjY2Vzc19ndWVzdF9hYnNfd2l0aF9rZXkoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIHZvaWQgKmRhdGEsXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0yMDAtXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIGVudW0gZ2FjY19tb2RlIG1vZGUsIHU4IGFjY2Vzc19rZXkpO1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMjAxLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6MjAyOmludCBhY2Nlc3NfZ3Vlc3Rfd2l0aF9rZXkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdhLCB1OCBhcixcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTIwMy1cdFx0XHQgIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbGVuLCBlbnVtIGdhY2NfbW9kZSBtb2RlLFxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTIwNS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjIwNjppbnQgYWNjZXNzX2d1ZXN0X3JlYWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTIwNy1cdFx0ICAgICAgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBsZW4sIGVudW0gZ2FjY19tb2RlIG1vZGUpO1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMjA4LVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6MjA5OmludCBjbXB4Y2hnX2d1ZXN0X2Fic193aXRoX2tleShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgaW50IGxlbiwgdW5pb24ga3ZtX3MzOTBfcXVhZCAqb2xkLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMjEwLVx0XHRcdCAgICAgICB1bmlvbiBrdm1fczM5MF9xdWFkIG5ldywgdTggYWNjZXNzX2tleSwgYm9vbCAqc3VjY2Vzcyk7XG4tLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg9MjU4PXN0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDoyNTk6aW50IHdyaXRlX2d1ZXN0X3dpdGhfa2V5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBnYSwgdTggYXIsXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0yNjAtXHRcdFx0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbGVuLCB1OCBhY2Nlc3Nfa2V5KVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTI3Nz1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6Mjc4OmludCB3cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ2EsIHU4IGFyLCB2b2lkICpkYXRhLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMjc5LVx0XHR1bnNpZ25lZCBsb25nIGxlbilcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaD0zMDA9c3RhdGljIGlubGluZSBfX211c3RfY2hlY2tcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjMwMTppbnQgcmVhZF9ndWVzdF93aXRoX2tleShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ2EsIHU4IGFyLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMzAyLVx0XHRcdHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbGVuLCB1OCBhY2Nlc3Nfa2V5KVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTMyMT1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6MzIyOmludCByZWFkX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBnYSwgdTggYXIsIHZvaWQgKmRhdGEsXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0zMjMtXHQgICAgICAgdW5zaWduZWQgbG9uZyBsZW4pXG4tLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg9MzQ0PXN0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDozNDU6aW50IHJlYWRfZ3Vlc3RfaW5zdHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdhLCB2b2lkICpkYXRhLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMzQ2LVx0XHQgICAgIHVuc2lnbmVkIGxvbmcgbGVuKVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTM3MD1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6MzcxOmludCB3cml0ZV9ndWVzdF9hYnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdwYSwgdm9pZCAqZGF0YSxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTM3Mi1cdFx0ICAgIHVuc2lnbmVkIGxvbmcgbGVuKVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTM5Mz1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6Mzk0OmludCByZWFkX2d1ZXN0X2FicyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3BhLCB2b2lkICpkYXRhLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMzk1LVx0XHQgICB1bnNpZ25lZCBsb25nIGxlbilcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaD00MTc9c3RhdGljIGlubGluZSBfX211c3RfY2hlY2tcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjQxODppbnQgd3JpdGVfZ3Vlc3RfcmVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3JhLCB2b2lkICpkYXRhLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtNDE5LVx0XHQgICAgIHVuc2lnbmVkIGxvbmcgbGVuKVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTQ0MT1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6NDQyOmludCByZWFkX2d1ZXN0X3JlYWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSwgdm9pZCAqZGF0YSxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTQ0My1cdFx0ICAgIHVuc2lnbmVkIGxvbmcgbGVuKVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTQ0Ny1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjQ0ODp2b2lkIGlwdGVfbG9jayhzdHJ1Y3Qga3ZtICprdm0pO1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6NDQ5OnZvaWQgaXB0ZV91bmxvY2soc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjQ1MDppbnQgaXB0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjQ1MTppbnQga3ZtX3MzOTBfY2hlY2tfbG93X2FkZHJfcHJvdF9yZWFsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBncmEpO1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtNDUyLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg9NDUzPXVuaW9uIG12cGdfcGVpIHtcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC00NjItXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDo0NjM6aW50IGdhY2Nlc3Nfc2hhZG93X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGdtYXAgKnNnLCBncGFfdCBzYWRkcixcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTQ2NC1cdFx0XHQgdW5pb24gbXZwZ19wZWkgKmRhdHB0ciwgYm9vbCB3cik7XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTE4PXN0cnVjdCBnbWFwICpnbWFwX25ld19jaGlsZChzdHJ1Y3QgZ21hcCAqcGFyZW50LCBnZm5fdCBsaW1pdClcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMzAtXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzE6aW50IGdtYXBfc2V0X2xpbWl0KHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBsaW1pdClcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzMi17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTUzPXN0YXRpYyB2b2lkIGdtYXBfcm1hcF9yYWRpeF90cmVlX2ZyZWUoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqcm9vdClcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xNzktXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxODA6dm9pZCBnbWFwX3JlbW92ZV9jaGlsZChzdHJ1Y3QgZ21hcCAqY2hpbGQpXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xODEte1xuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTE5NC0gKi9cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjE5NTp2b2lkIGdtYXBfZGlzcG9zZShzdHJ1Y3QgZ21hcCAqZ21hcClcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTE5Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMjM2LSAqL1xuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MjM3OmludCBzMzkwX3JlcGxhY2VfYXNjZShzdHJ1Y3QgZ21hcCAqZ21hcClcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTIzOC17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMjU4LVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MjU5OmJvb2wgX2dtYXBfdW5tYXBfcHJlZml4KHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBnZm4sIGdmbl90IGVuZCwgYm9vbCBoaW50KVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMjYwLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz0zMTY9c3RhdGljIGxvbmcgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IGVuZCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTM1My0gKi9cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjM1NDpib29sIGdtYXBfYWdlX2dmbihzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZClcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTM1NS17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9Mzk4PXN0YXRpYyBsb25nIF9nbWFwX3VubWFwX2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTQ0MC0gKi9cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjQ0MTpib29sIGdtYXBfdW5tYXBfZ2ZuX3JhbmdlKHN0cnVjdCBnbWFwICpnbWFwLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtNDQyLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz00OTQ9c3RhdGljIGxvbmcgX2Nyc3RlX3Rlc3RfYW5kX2NsZWFyX3NvZnRkaXJ0eSh1bmlvbiBjcnN0ZSAqdGFibGUsIGdmbl90IGdmbiwgZ2ZuX3QgZW5kLFxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTUyNi1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjUyNzp2b2lkIGdtYXBfc3luY19kaXJ0eV9sb2coc3RydWN0IGdtYXAgKmdtYXAsIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQpXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy01Mjgte1xuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jPTU3Mz1zdGF0aWMgaW50IF9nbWFwX2hhbmRsZV9taW5vcl9wdGVfZmF1bHQoc3RydWN0IGdtYXAgKmdtYXAsIHVuaW9uIHBnc3RlICpwZ3N0ZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy02MTEtICovXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzo2MTI6aW50IGdtYXBfdHJ5X2ZpeHVwX21pbm9yKHN0cnVjdCBnbWFwICpnbWFwLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmZhdWx0KVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtNjEzLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz02ODU9c3RhdGljIGludCBfZ21hcF9saW5rKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqZ21hcCwgaW50IGxldmVsLFxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTczNi1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjczNzppbnQgZ21hcF9saW5rKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqZ21hcCwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmLFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtNzM4LVx0ICAgICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz03OTQ9c3RhdGljIGludCBnbWFwX3VjYXNfdHJhbnNsYXRlX3NpbXBsZShzdHJ1Y3QgZ21hcCAqZ21hcCwgZ3BhX3QgKmdhZGRyLCB1bmlvbiBjcnN0ZSAqKmNyc3RlcHApXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtODIyLSAqL1xuYXJjaC9zMzkwL2t2bS9nbWFwLmM6ODIzOmludCBnbWFwX3VjYXNfdHJhbnNsYXRlKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqZ21hcCwgZ3BhX3QgKmdhZGRyKVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtODI0LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy04NTgtXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzo4NTk6aW50IGdtYXBfdWNhc19tYXAoc3RydWN0IGdtYXAgKmdtYXAsIGdmbl90IHBfZ2ZuLCBnZm5fdCBjX2dmbiwgdW5zaWduZWQgbG9uZyBjb3VudClcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTg2MC17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9ODg3PXN0YXRpYyB2b2lkIGdtYXBfdWNhc191bm1hcF9vbmUoc3RydWN0IGdtYXAgKmdtYXAsIGdmbl90IGNfZ2ZuKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTg5OS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjkwMDp2b2lkIGdtYXBfdWNhc191bm1hcChzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3QgY19nZm4sIHVuc2lnbmVkIGxvbmcgY291bnQpXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy05MDEte1xuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jPTkwOD1zdGF0aWMgbG9uZyBfZ21hcF9zcGxpdF9jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2Fsaylcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy05MzEtXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzo5MzI6dm9pZCBnbWFwX3NwbGl0X2h1Z2VfcGFnZXMoc3RydWN0IGdtYXAgKmdtYXApXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy05MzMte1xuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jPTk0OD1zdGF0aWMgaW50IF9nbWFwX2VuYWJsZV9za2V5cyhzdHJ1Y3QgZ21hcCAqZ21hcClcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy05NzAtXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzo5NzE6aW50IGdtYXBfZW5hYmxlX3NrZXlzKHN0cnVjdCBnbWFwICpnbWFwKVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtOTcyLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz05OTE9c3RhdGljIGxvbmcgX2Rlc3Ryb3lfcGFnZXNfY3JzdGUodW5pb24gY3JzdGUgKmNyc3RlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTAwNy1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEwMDg6aW50IGdtYXBfcHZfZGVzdHJveV9yYW5nZShzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBpbnRlcnJ1cHRpYmxlKVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTAwOS17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTAyNi1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEwMjc6aW50IGdtYXBfaW5zZXJ0X3JtYXAoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZywgZ2ZuX3QgcF9nZm4sXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMDI4LVx0XHQgICAgIGdmbl90IHJfZ2ZuLCBpbnQgbGV2ZWwpXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTA2Mi1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEwNjM6aW50IGdtYXBfcHJvdGVjdF9ybWFwKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqc2csIGdmbl90IHBfZ2ZuLCBnZm5fdCByX2dmbixcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEwNjQtXHRcdCAgICAgIGt2bV9wZm5fdCBwZm4sIGludCBsZXZlbCwgYm9vbCB3cilcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz0xMTE0PXN0YXRpYyBsb25nIF9fc2V0X2NtbWFfZGlydHlfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTEyOC1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjExMjk6dm9pZCBfZ21hcF9zZXRfY21tYV9hbGwoc3RydWN0IGdtYXAgKmdtYXAsIGJvb2wgZGlydHkpXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMTMwLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz0xMTc0PXN0YXRpYyB2b2lkIGdtYXBfdW5zaGFkb3coc3RydWN0IGdtYXAgKnNnKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTExOTMtXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMTk0OnZvaWQgX2dtYXBfaGFuZGxlX3ZzaWVfdW5zaGFkb3dfZXZlbnQoc3RydWN0IGdtYXAgKnBhcmVudCwgZ2ZuX3QgZ2ZuKVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTE5NS17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmg9Nzc9c3RydWN0IGdtYXBfY2FjaGUge1xuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5oLTg0LVxuYXJjaC9zMzkwL2t2bS9nbWFwLmg6ODU6aW50IHMzOTBfcmVwbGFjZV9hc2NlKHN0cnVjdCBnbWFwICpnbWFwKTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjg2OmJvb2wgX2dtYXBfdW5tYXBfcHJlZml4KHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBnZm4sIGdmbl90IGVuZCwgYm9vbCBoaW50KTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjg3OmJvb2wgZ21hcF9hZ2VfZ2ZuKHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjg4OmJvb2wgZ21hcF91bm1hcF9nZm5fcmFuZ2Uoc3RydWN0IGdtYXAgKmdtYXAsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQpO1xuYXJjaC9zMzkwL2t2bS9nbWFwLmg6ODk6aW50IGdtYXBfdHJ5X2ZpeHVwX21pbm9yKHN0cnVjdCBnbWFwICpnbWFwLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmZhdWx0KTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oLTkwLXN0cnVjdCBnbWFwICpnbWFwX25ldyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGxpbWl0KTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oPTkxPXN0cnVjdCBnbWFwICpnbWFwX25ld19jaGlsZChzdHJ1Y3QgZ21hcCAqcGFyZW50LCBnZm5fdCBsaW1pdCk7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaDo5Mjp2b2lkIGdtYXBfcmVtb3ZlX2NoaWxkKHN0cnVjdCBnbWFwICpjaGlsZCk7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaDo5Mzp2b2lkIGdtYXBfZGlzcG9zZShzdHJ1Y3QgZ21hcCAqZ21hcCk7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaDo5NDppbnQgZ21hcF9saW5rKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqZ21hcCwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmYXVsdCxcbmFyY2gvczM5MC9rdm0vZ21hcC5oLTk1LVx0ICAgICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCk7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaDo5Njp2b2lkIGdtYXBfc3luY19kaXJ0eV9sb2coc3RydWN0IGdtYXAgKmdtYXAsIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQpO1xuYXJjaC9zMzkwL2t2bS9nbWFwLmg6OTc6aW50IGdtYXBfc2V0X2xpbWl0KHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBsaW1pdCk7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaDo5ODppbnQgZ21hcF91Y2FzX3RyYW5zbGF0ZShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKmdtYXAsIGdwYV90ICpnYWRkcik7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaDo5OTppbnQgZ21hcF91Y2FzX21hcChzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3QgcF9nZm4sIGdmbl90IGNfZ2ZuLCB1bnNpZ25lZCBsb25nIGNvdW50KTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwMDp2b2lkIGdtYXBfdWNhc191bm1hcChzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3QgY19nZm4sIHVuc2lnbmVkIGxvbmcgY291bnQpO1xuYXJjaC9zMzkwL2t2bS9nbWFwLmg6MTAxOmludCBnbWFwX2VuYWJsZV9za2V5cyhzdHJ1Y3QgZ21hcCAqZ21hcCk7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaDoxMDI6aW50IGdtYXBfcHZfZGVzdHJveV9yYW5nZShzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBpbnRlcnJ1cHRpYmxlKTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwMzppbnQgZ21hcF9pbnNlcnRfcm1hcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnLCBnZm5fdCBwX2dmbixcbmFyY2gvczM5MC9rdm0vZ21hcC5oLTEwNC1cdFx0ICAgICBnZm5fdCByX2dmbiwgaW50IGxldmVsKTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwNTppbnQgZ21hcF9wcm90ZWN0X3JtYXAoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZywgZ2ZuX3QgcF9nZm4sIGdmbl90IHJfZ2ZuLFxuYXJjaC9zMzkwL2t2bS9nbWFwLmgtMTA2LVx0XHQgICAgICBrdm1fcGZuX3QgcGZuLCBpbnQgbGV2ZWwsIGJvb2wgd3IpO1xuYXJjaC9zMzkwL2t2bS9nbWFwLmg6MTA3OnZvaWQgX2dtYXBfc2V0X2NtbWFfYWxsKHN0cnVjdCBnbWFwICpnbWFwLCBib29sIGRpcnR5KTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwODp2b2lkIF9nbWFwX2hhbmRsZV92c2llX3Vuc2hhZG93X2V2ZW50KHN0cnVjdCBnbWFwICpwYXJlbnQsIGdmbl90IGdmbik7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaC0xMDktc3RydWN0IGdtYXAgKmdtYXBfY3JlYXRlX3NoYWRvdyhzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKmdtYXAsXG5hcmNoL3MzOTAva3ZtL2dtYXAuaC0xMTAtXHRcdFx0XHR1bmlvbiBhc2NlIGFzY2UsIGludCBlZGF0X2xldmVsKTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjExMTp2b2lkIGdtYXBfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3QgZ21hcCAqZ21hcCk7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaC0xMTItXG4tLVxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jPTk5PXN0YXRpYyB2b2lkIGVuYWJsZV9hbGxfaHdfd3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0xMjktXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM6MTMwOnZvaWQga3ZtX3MzOTBfYmFja3VwX2d1ZXN0X3Blcl9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0xMzEte1xuLS1cbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0xMzctXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM6MTM4OnZvaWQga3ZtX3MzOTBfcmVzdG9yZV9ndWVzdF9wZXJfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMTM5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMTQ1LVxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjE0Njp2b2lkIGt2bV9zMzkwX3BhdGNoX2d1ZXN0X3Blcl9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0xNDcte1xuLS1cbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYz0xNzQ9c3RhdGljIGludCBfX2ltcG9ydF93cF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjAyLVxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjIwMzppbnQga3ZtX3MzOTBfaW1wb3J0X2JwX2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTIwNC1cdFx0XHQgICAgc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnKVxuLS1cbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0yNzctXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM6Mjc4OnZvaWQga3ZtX3MzOTBfY2xlYXJfYnBfZGF0YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjc5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM9MzM0PXN0YXRpYyBzdHJ1Y3Qga3ZtX2h3X3dwX2luZm9fYXJjaCAqYW55X3dwX2NoYW5nZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0zNjYtXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM6MzY3OnZvaWQga3ZtX3MzOTBfcHJlcGFyZV9kZWJ1Z19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0zNjgte1xuLS1cbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYz00MzI9c3RhdGljIGludCBwZXJfZmV0Y2hlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyAqYWRkcilcbi0tXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtNDkyLVxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjQ5MzppbnQga3ZtX3MzOTBfaGFuZGxlX3Blcl9pZmV0Y2hfaWNwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtNDk0LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM9NTMzPXN0YXRpYyBpbnQgZmlsdGVyX2d1ZXN0X3Blcl9ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTU4MS1cbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYzo1ODI6aW50IGt2bV9zMzkwX2hhbmRsZV9wZXJfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTU4My17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYz0zOTU9c3RhdGljIGludCBoYW5kbGVfcGFydGlhbF9leGVjdXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNDExLSAqL1xuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYzo0MTI6aW50IGhhbmRsZV9zdGh5aShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTQxMy17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYz02MDA9c3RhdGljIGJvb2wgc2hvdWxkX2hhbmRsZV9wZXJfaWZldGNoKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHJjKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNjEyLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYzo2MTM6aW50IGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTYxNC17XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU0MwoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEtWTS9zMzkwIENQVSBQViBDcmVhdGlvbiBhbmQgRGVzdHJ1Y3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIG91dHB1dCBhcHBlYXJzIHRydW5jYXRlZCwgYnV0IEkgY2FuIGFscmVhZHkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9ucyBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAgYW5kIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAgYXJlIGJvdGggbG9jYXRlZCBpbiBgYXJjaC9zMzkwL2t2bS9wdi5jYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRpdmUgaW50byB0aGF0IGZpbGUsIGBhcmNoL3MzOTAva3ZtL3B2LmNgLCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBmdW5jdGlvbnMuIEkmIzM5O2xsIGFsc28gd2FudCB0byB0YWtlIGEgbG9vayBhdCBgYXJjaC9zMzkwL2t2bS9wcml2LmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgcmVsYXRlZCBjb2RlIHRoZXJlLiBNaWdodCBhcyB3ZWxsIGJyb2FkZW4gdGhlIHNlYXJjaCBhIGxpdHRsZSBhdCB0aGlzIGVhcmx5IHN0YWdlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgcGFyYXZpcnR1YWxpemF0aW9uIGFzcGVjdHMgaW50ZXJhY3Qgd2l0aCB0aGUgQ1BVIG1hbmFnZW1lbnQgd2l0aGluIEtWTSBvbiBzMzkwLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIFBWIHNldHVwIGFuZCB0ZWFyZG93biBhcmUgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGxvbmd8Ym9vbCkgW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3B2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wdi5jLTI2LVxuYXJjaC9zMzkwL2t2bS9wdi5jOjI3OmJvb2wga3ZtX3MzOTBfcHZfaXNfcHJvdGVjdGVkKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0vcHYuYy0yOC17XG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jPTMyPUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9zMzkwX3B2X2lzX3Byb3RlY3RlZCk7XG5hcmNoL3MzOTAva3ZtL3B2LmMtMzMtXG5hcmNoL3MzOTAva3ZtL3B2LmM6MzQ6Ym9vbCBrdm1fczM5MF9wdl9jcHVfaXNfcHJvdGVjdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vcHYuYy0zNS17XG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jPTEwND1zdGF0aWMgdm9pZCBfa3ZtX3MzOTBfcHZfbWFrZV9zZWN1cmUoc3RydWN0IGd1ZXN0X2ZhdWx0ICpmKVxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYy0xNDYtICovXG5hcmNoL3MzOTAva3ZtL3B2LmM6MTQ3OmludCBrdm1fczM5MF9wdl9tYWtlX3NlY3VyZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ2FkZHIsIHZvaWQgKnV2Y2IpXG5hcmNoL3MzOTAva3ZtL3B2LmMtMTQ4LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmMtMTc4LVxuYXJjaC9zMzkwL2t2bS9wdi5jOjE3OTppbnQga3ZtX3MzOTBfcHZfY29udmVydF90b19zZWN1cmUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGdhZGRyKVxuYXJjaC9zMzkwL2t2bS9wdi5jLTE4MC17XG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTIwMS0gKi9cbmFyY2gvczM5MC9rdm0vcHYuYzoyMDI6aW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ2FkZHIpXG5hcmNoL3MzOTAva3ZtL3B2LmMtMjAzLXtcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmM9MjQ3PXN0YXRpYyB2b2lkIGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcmVlX3N0b3JfYmFzZSlcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmMtMjY0LVxuYXJjaC9zMzkwL2t2bS9wdi5jOjI2NTppbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbmFyY2gvczM5MC9rdm0vcHYuYy0yNjYte1xuLS1cbmFyY2gvczM5MC9rdm0vcHYuYy0yODMtXG5hcmNoL3MzOTAva3ZtL3B2LmM6Mjg0OmludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG5hcmNoL3MzOTAva3ZtL3B2LmMtMjg1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmM9NDQ5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19kZXN0cm95X2Zhc3RfYXZhaWxhYmxlKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTQ3MS0gKi9cbmFyY2gvczM5MC9rdm0vcHYuYzo0NzI6aW50IGt2bV9zMzkwX3B2X3NldF9hc2lkZShzdHJ1Y3Qga3ZtICprdm0sIHUxNiAqcmMsIHUxNiAqcnJjKVxuYXJjaC9zMzkwL2t2bS9wdi5jLTQ3My17XG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTUzNi0gKi9cbmFyY2gvczM5MC9rdm0vcHYuYzo1Mzc6aW50IGt2bV9zMzkwX3B2X2RlaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHUxNiAqcmMsIHUxNiAqcnJjKVxuYXJjaC9zMzkwL2t2bS9wdi5jLTUzOC17XG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTU3MS0gKi9cbmFyY2gvczM5MC9rdm0vcHYuYzo1NzI6aW50IGt2bV9zMzkwX3B2X2RlaW5pdF9jbGVhbnVwX2FsbChzdHJ1Y3Qga3ZtICprdm0sIHUxNiAqcmMsIHUxNiAqcnJjKVxuYXJjaC9zMzkwL2t2bS9wdi5jLTU3My17XG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTY0OC0gKi9cbmFyY2gvczM5MC9rdm0vcHYuYzo2NDk6aW50IGt2bV9zMzkwX3B2X2RlaW5pdF9hc2lkZV92bShzdHJ1Y3Qga3ZtICprdm0sIHUxNiAqcmMsIHUxNiAqcnJjKVxuYXJjaC9zMzkwL2t2bS9wdi5jLTY1MC17XG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jPTcwNT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9vcHMga3ZtX3MzOTBfcHZfbW11X25vdGlmaWVyX29wcyA9IHtcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmMtNzA4LVxuYXJjaC9zMzkwL2t2bS9wdi5jOjcwOTppbnQga3ZtX3MzOTBfcHZfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHUxNiAqcmMsIHUxNiAqcnJjKVxuYXJjaC9zMzkwL2t2bS9wdi5jLTcxMC17XG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTc3MS1cbmFyY2gvczM5MC9rdm0vcHYuYzo3NzI6aW50IGt2bV9zMzkwX3B2X3NldF9zZWNfcGFybXMoc3RydWN0IGt2bSAqa3ZtLCB2b2lkICpoZHIsIHU2NCBsZW5ndGgsIHUxNiAqcmMsXG5hcmNoL3MzOTAva3ZtL3B2LmMtNzczLVx0XHRcdCAgICAgIHUxNiAqcnJjKVxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYz03OTE9c3RhdGljIGludCB1bnBhY2tfb25lKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgdHdlYWssXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTgxOC1cbmFyY2gvczM5MC9rdm0vcHYuYzo4MTk6aW50IGt2bV9zMzkwX3B2X3VucGFjayhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLFxuYXJjaC9zMzkwL2t2bS9wdi5jLTgyMC1cdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgdHdlYWssIHUxNiAqcmMsIHUxNiAqcnJjKVxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYy04NTAtXG5hcmNoL3MzOTAva3ZtL3B2LmM6ODUxOmludCBrdm1fczM5MF9wdl9zZXRfY3B1X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggc3RhdGUpXG5hcmNoL3MzOTAva3ZtL3B2LmMtODUyLXtcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmMtODY4LVxuYXJjaC9zMzkwL2t2bS9wdi5jOjg2OTppbnQga3ZtX3MzOTBfcHZfZHVtcF9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpidWZmLCB1MTYgKnJjLCB1MTYgKnJyYylcbmFyY2gvczM5MC9rdm0vcHYuYy04NzAte1xuLS1cbmFyY2gvczM5MC9rdm0vcHYuYy05MTUtICovXG5hcmNoL3MzOTAva3ZtL3B2LmM6OTE2OmludCBrdm1fczM5MF9wdl9kdW1wX3N0b3Jfc3RhdGUoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYnVmZl91c2VyLFxuYXJjaC9zMzkwL2t2bS9wdi5jLTkxNy1cdFx0XHRcdHU2NCAqZ2FkZHIsIHU2NCBidWZmX3VzZXJfbGVuLCB1MTYgKnJjLCB1MTYgKnJyYylcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmMtMTAyMy0gKi9cbmFyY2gvczM5MC9rdm0vcHYuYzoxMDI0OmludCBrdm1fczM5MF9wdl9kdW1wX2NvbXBsZXRlKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmJ1ZmZfdXNlcixcbmFyY2gvczM5MC9rdm0vcHYuYy0xMDI1LVx0XHRcdCAgICAgIHUxNiAqcmMsIHUxNiAqcnJjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTQxCgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gczM5MCBLVk0gSW50ZXJydXB0IEhhbmRsaW5nKioKClJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgYXJjaC9zMzkwL2t2bS9wcml2LmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGludGVycnVwdCBoYW5kbGluZyByb3V0aW5lcyB3aXRoaW4gdGhhdCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgYGhhbmRsZV9ycmJlYCBhbmQgYGhhbmRsZV9lc3NhYC4gR2l2ZW4gdGhlIGNvbnRleHQsIEkmIzM5O20gbGlrZWx5IGRlYWxpbmcgd2l0aCBlcnJvciBldmVudHMsIGFuZCB0aGVzZSBwcm9iYWJseSByZWxhdGUgdG8gc3BlY2lmaWMgaGFyZHdhcmUgZXhjZXB0aW9ucyBvciBwcm9jZXNzb3IgY29uZGl0aW9ucyB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIHJ1bm5pbmcgaW4gYSBLVk0gZW52aXJvbm1lbnQuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIHdoZXJlIEtWTSBpbnRlcmNlcHRzIGFuZCBwb3RlbnRpYWxseSBlbXVsYXRlcyBvciBoYW5kbGVzIHRoZXNlIGV2ZW50cyBmb3IgdGhlIGd1ZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBoYW5kbGVycy4gQXJlIHRoZXkgaW52b2x2ZWQgaW4gdGhlIFJSQkUgaGFuZGxpbmcgaW4gdGhlIG5ldyBoYXJkd2FyZSwgb3IgYW4gb2xkZXIgbWVjaGFuaXNtPyBXaGF0IGFib3V0IEVTQSBoYW5kbGluZz8gQXJlIHRoZXNlIHBlcmZvcm1hbmNlIGNyaXRpY2FsPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBldmVudHMgYXQgdGhlIGhhcmR3YXJlIGxldmVsIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHJlcHJlc2VudGF0aW9ucyB3aXRoaW4gS1ZNIGFuZCB0aGVuIHJldmlldyB0aGUgS1ZNIHNwZWNpZmljIGhhbmRsaW5nLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCBob3cgS1ZNIGlzIG1hbmFnaW5nIHRoZXNlIHNwZWNpZmljIGV4Y2VwdGlvbiBhbmQgc3RhdHVzIGV2ZW50cyBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZHxsb25nfGJvb2wpIFthLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmM9MzM9c3RhdGljIGludCBoYW5kbGVfcmkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTQ1LVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NDY6aW50IGt2bV9zMzkwX2hhbmRsZV9hYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy00Ny17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NTQ9c3RhdGljIGludCBoYW5kbGVfZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTczLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NzQ6aW50IGt2bV9zMzkwX2hhbmRsZV9lMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy03NS17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTkxPXN0YXRpYyBpbnQgaGFuZGxlX3N0b3JlX2NwdV9hZGRyZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0yMTYtXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoyMTc6aW50IGt2bV9zMzkwX3NrZXlfY2hlY2tfZW5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTIxOC17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NTQxPXN0YXRpYyBpbnQgaGFuZGxlX2lvX2luc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTU3MC0jaWYgSVNfRU5BQkxFRChDT05GSUdfVkZJT19BUClcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjU3MTpib29sIGt2bV9zMzkwX2lzX2dwYV9pbl9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhKVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNTcyLXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz02NzA9c3RhdGljIGludCBoYW5kbGVfc3RmbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNjk4LVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6Njk5OmludCBpc192YWxpZF9wc3cocHN3X3QgKnBzdylcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTcwMC17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNzE1LVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NzE2OmludCBrdm1fczM5MF9oYW5kbGVfbHBzdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy03MTcte1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTg2Nz1zdGF0aWMgaW50IGhhbmRsZV9zdHNpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05NTgtXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzo5NTk6aW50IGt2bV9zMzkwX2hhbmRsZV9iMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05NjAte1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTEyMTc9c3RhdGljIGludCBoYW5kbGVfZXNzYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI4My1cbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEyODQ6aW50IGt2bV9zMzkwX2hhbmRsZV9iOShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjg1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMzAxLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTMwMjppbnQga3ZtX3MzOTBfaGFuZGxlX2xjdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTMwMy17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTM0MC1cbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEzNDE6aW50IGt2bV9zMzkwX2hhbmRsZV9zdGN0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMzQyLXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz0xNDEzPXN0YXRpYyBpbnQgaGFuZGxlX3N0Y3RnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xNDQ2LVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTQ0NzppbnQga3ZtX3MzOTBfaGFuZGxlX2ViKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTE0NDgte1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTE0NjU9c3RhdGljIGludCBoYW5kbGVfdHByb3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTE1MjMtXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxNTI0OmludCBrdm1fczM5MF9oYW5kbGVfZTUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTUyNS17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTU1Mz1zdGF0aWMgaW50IGhhbmRsZV9wdGZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xNTYxLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTU2MjppbnQga3ZtX3MzOTBfaGFuZGxlXzAxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTE1NjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzg5CgkJCQkJCQlvdXRwdXQ6IDYwCgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTdGF0aWMgdnMuIE5vbi1TdGF0aWMgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnM6IGBoYW5kbGVfcnJiZWAgYW5kIGBoYW5kbGVfZXNzYWAuIEhtbSwgdGhleSYjMzk7cmUgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgbWFrZXMgbWUgdGhpbmsgYWJvdXQgc2NvcGUgYW5kIHBvdGVudGlhbCBmb3IgaW5saW5pbmcsIGRlcGVuZGluZyBvbiB0aGUgY29tcGlsZXImIzM5O3Mgb3B0aW1pemF0aW9uIHN0cmF0ZWd5LiBOb3csIGhvbGQgb24uLi4gYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGFuZCBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgLCB0aG9zZSBhcmVuJiMzOTt0IHN0YXRpYy4gQWxyaWdodC4gQW5kIHRoZSBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgIGZ1bmN0aW9uLCBhbHNvIG5vbi1zdGF0aWMuIFRoZW4gdGhlcmUgYXJlIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgYW5kIGBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25gLCBhbHNvIG5vbi1zdGF0aWMuCgpHaXZlbiB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmVuJiMzOTt0IHN0YXRpYywgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIHRoZXkmIzM5O3JlIGJlaW5nIGNhbGxlZCBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIHRob3NlIGxhc3QgdHdvIGZ1bmN0aW9ucywgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCBhbmQgYGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbmAsIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHZvaWR8bG9uZ3xib29sKSBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTYyPXN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTMtLyogU2VjdGlvbjogZGV2aWNlIHJlbGF0ZWQgKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1OTQ6bG9uZyBrdm1fYXJjaF9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTk1LVx0XHRcdHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTYwMS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo2MDI6aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy02MDMte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy03MzEtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NzMyOnZvaWQga3ZtX2FyY2hfc3luY19kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTczMy17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTc0MT1zdGF0aWMgdm9pZCBzY2FfZGVsX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNzQ1LSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjc0NjppbnQga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTc0Ny1cdFx0XHQgICAgICAgc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9Nzc4PXN0YXRpYyB2b2lkIGljcHRfb3BlcmV4Y19vbl9hbGxfdmNwdXMoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy03ODctXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Nzg4OmludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTc4OS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEwODc9c3RhdGljIHZvaWQga3ZtX3MzOTBfdmNwdV9jcnlwdG9fc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMDg4LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEwODk6dm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19yZXNldF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEwOTAte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMTc1PXN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfcGNpX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE4NC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTg1OnZvaWQga3ZtX3MzOTBfdmNwdV9wY2lfZW5hYmxlX2ludGVycChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE4Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIzNDg9c3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjQwNS0gKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyNDA2OmludCBrdm1fczM5MF9jcHVzX2Zyb21fcHYoc3RydWN0IGt2bSAqa3ZtLCB1MTYgKnJjLCB1MTYgKnJyYylcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNDA3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkwMT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX21lbV9vcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9tZW1fb3AgKm1vcClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkyNS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTI2OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTI3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzEyNj1zdGF0aWMgdm9pZCBrdm1fczM5MF9zZXRfY3J5Y2JfZm9ybWF0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE1Ny0gKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTU4OnZvaWQga3ZtX2FyY2hfY3J5cHRvX3NldF9tYXNrcyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKmFwbSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTU5LVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nICphcW0sIHVuc2lnbmVkIGxvbmcgKmFkbSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzE5ND1FWFBPUlRfU1lNQk9MX0dQTChrdm1fYXJjaF9jcnlwdG9fc2V0X21hc2tzKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzIwNy0gKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjA4OnZvaWQga3ZtX2FyY2hfY3J5cHRvX2NsZWFyX21hc2tzKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjA5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzI1MT1zdGF0aWMgdm9pZCBzY2FfZGlzcG9zZShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyNTYtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzI1Nzp2b2lkIGt2bV9hcmNoX2ZyZWVfdm0oc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyNTgte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjY0LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyNjU6aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzI2Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM0MDMtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzQwNDp2b2lkIGt2bV9hcmNoX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQwNS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM0MzAtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzQzMTp2b2lkIGt2bV9hcmNoX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM0MzIte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNTQxPXN0YXRpYyB2b2lkIGRpc2FibGVfY3B1X3RpbWVyX2FjY291bnRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNTQ4LS8qIHNldCB0aGUgY3B1IHRpbWVyIC0gbWF5IG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIFZDUFUgdGhyZWFkIGl0c2VsZiAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM1NDk6dm9pZCBrdm1fczM5MF9zZXRfY3B1X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgX191NjQgY3B1dG0pXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzU1MC17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM1NjE9X191NjQga3ZtX3MzOTBfZ2V0X2NwdV90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM1ODUtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzU4Njp2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzU4Ny17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM1OTQtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzU5NTp2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNTk2LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzYwMy1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozNjA0OnZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjA1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzY1MD1zdGF0aWMgdm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2ODAtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzY4MTp2b2lkIGt2bV9zMzkwX3ZjcHVfdW5zZXR1cF9jbW1hKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjgyLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzY4Ny1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozNjg4OmludCBrdm1fczM5MF92Y3B1X3NldHVwX2NtbWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2ODkte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNzA4PXN0YXRpYyBpbnQga3ZtX3MzOTBfdmNwdV9zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM3OTQtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzc5NTppbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzc5Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM4MDI9REVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODAzLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM4MDQ6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODA1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg4Mi1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozODgzOmludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODg0LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg4OC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozODg5OmJvb2wga3ZtX2FyY2hfdmNwdV9pbl9rZXJuZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM4OTAte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODkzLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM4OTQ6dm9pZCBrdm1fczM5MF92Y3B1X2Jsb2NrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODk1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg5OS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozOTAwOnZvaWQga3ZtX3MzOTBfdmNwdV91bmJsb2NrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTAxLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzkwNT1zdGF0aWMgdm9pZCBrdm1fczM5MF92Y3B1X3JlcXVlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTEwLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM5MTE6Ym9vbCBrdm1fczM5MF92Y3B1X3NpZV9pbmhpYml0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM5MTIte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zOTE3PXN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfcmVxdWVzdF9oYW5kbGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzkyNS0gKiByZXR1cm4gaW1tZWRpYXRlbHkuICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzkyNjp2b2lkIGV4aXRfc2llKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTI3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzkzNC0vKiBLaWNrIGEgZ3Vlc3QgY3B1IG91dCBvZiBTSUUgdG8gcHJvY2VzcyBhIHJlcXVlc3Qgc3luY2hyb25vdXNseSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM5MzU6dm9pZCBrdm1fczM5MF9zeW5jX3JlcXVlc3QoaW50IHJlcSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM5MzYte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTQwLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM5NDE6Ym9vbCBrdm1fYXJjaF9ub19wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTQyLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzk1MS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozOTUyOmludCBrdm1fYXJjaF92Y3B1X3Nob3VsZF9raWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTUzLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDExNz1zdGF0aWMgdm9pZCBrdm1fYXJjaF92Y3B1X2lvY3RsX2NsZWFyX3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDEzMi1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTMzOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9yZWdzICpyZWdzKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxMzQte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTQwLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQxNDE6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3JlZ3MgKnJlZ3MpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDE0Mi17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNDgtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDE0OTppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNTAtXHRcdFx0XHQgIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTYwLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQxNjE6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTYyLVx0XHRcdFx0ICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDE3Mi1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTczOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNzQte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTg3LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQxODg6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X2ZwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZnB1ICpmcHUpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDE4OS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQyMDM9c3RhdGljIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9pbml0aWFsX3BzdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBzd190IHBzdylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDIxNS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MjE2OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3RyYW5zbGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDIxNy1cdFx0XHRcdCAgc3RydWN0IGt2bV90cmFuc2xhdGlvbiAqdHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyMjUtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDIyNjppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyMjctXHRcdFx0XHRcdHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDI2Ny1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MjY4OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9tcHN0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MjY5LVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fbXBfc3RhdGUgKm1wX3N0YXRlKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MjgyLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQyODM6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X21wc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyODQtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9tcF9zdGF0ZSAqbXBfc3RhdGUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ0MzY9c3RhdGljIHZvaWQgX19rdm1fczM5MF9zZXRfdG9kX2Nsb2NrKHN0cnVjdCBrdm0gKmt2bSwgY29uc3Qgc3RydWN0IGt2bV9zMzkwX3ZtX3RvZF9jbG9jayAqZ3RvZClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ2My1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NDY0OmludCBrdm1fczM5MF90cnlfc2V0X3RvZF9jbG9jayhzdHJ1Y3Qga3ZtICprdm0sIGNvbnN0IHN0cnVjdCBrdm1fczM5MF92bV90b2RfY2xvY2sgKmd0b2QpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ2NS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ0NzM9c3RhdGljIHZvaWQgX19rdm1faW5qZWN0X3BmYXVsdF90b2tlbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgc3RhcnRfdG9rZW4sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ0OTgtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDQ5OTpib29sIGt2bV9hcmNoX2FzeW5jX3BhZ2Vfbm90X3ByZXNlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1MDAtXHRcdFx0XHQgICAgIHN0cnVjdCBrdm1fYXN5bmNfcGYgKndvcmspXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1MDctXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDUwODp2b2lkIGt2bV9hcmNoX2FzeW5jX3BhZ2VfcHJlc2VudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDUwOS1cdFx0XHRcdCBzdHJ1Y3Qga3ZtX2FzeW5jX3BmICp3b3JrKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTE0LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1MTU6dm9pZCBrdm1fYXJjaF9hc3luY19wYWdlX3JlYWR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTE2LVx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX2FzeW5jX3BmICp3b3JrKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTIwLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1MjE6Ym9vbCBrdm1fYXJjaF9jYW5fZGVxdWV1ZV9hc3luY19wYWdlX3ByZXNlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1MjIte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTI5LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1MzA6Ym9vbCBrdm1fYXJjaF9zZXR1cF9hc3luY19wZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDUzMS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTUwMDQ9c3RhdGljIHZvaWQgc3RvcmVfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUwMjQtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTAyNTppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUwMjYte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MTE0LSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjUxMTU6aW50IGt2bV9zMzkwX3N0b3JlX3N0YXR1c191bmxvYWRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3BhKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUxMTYte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MTY2LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjUxNjc6aW50IGt2bV9zMzkwX3ZjcHVfc3RvcmVfc3RhdHVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUxNjgte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01MTk2PXN0YXRpYyB2b2lkIF9fZW5hYmxlX2lic19vbl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTIwMy1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1MjA0OmludCBrdm1fczM5MF92Y3B1X3N0YXJ0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MjA1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTI1OC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1MjU5OmludCBrdm1fczM5MF92Y3B1X3N0b3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUyNjAte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NDE0PXN0YXRpYyBsb25nIGt2bV9zMzkwX3ZjcHVfbWVtc2lkYV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU0MzgtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTQzOTpsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDQwLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTQ4ND1zdGF0aWMgaW50IGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTI1LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU1MjY6bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1MjctXHRcdFx0IHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU3NDU9dm1fZmF1bHRfdCBrdm1fYXJjaF92Y3B1X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3NTctXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTc1ODpib29sIGt2bV9hcmNoX2lycWNoaXBfaW5fa2VybmVsKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzU5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTc2ND1zdGF0aWMgbG9uZyBjbW1hX2RfY291bnRfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3NzYtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTc3NzppbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01Nzc4LVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODY1LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU4NjY6dm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODY3LVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LCBlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODkwLSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU4OTE6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4OTIte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTIyLSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU5MjM6Ym9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU5MjQte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTM2LSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU5Mzc6Ym9vbCBrdm1fYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTM4LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTk1NC0gKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1OTU1OmJvb2wga3ZtX3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTU2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE1MjMKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAxNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIEtWTSBBcmNoaXRlY3R1cmUgTm9uLVN0YXRpYyBGdW5jdGlvbnMqKgoKUmlnaHQsIGxldCBtZSBzZWUuLi4gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIEtWTS1yZWxhdGVkIGZ1bmN0aW9ucy4gSXQgc2VlbXMgSSYjMzk7dmUgaWRlbnRpZmllZCBzZXZlcmFsIHRoYXQgYXJlIG5vbi1zdGF0aWM6IGBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25gLCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGFuZCBga3ZtX2FyY2hfdm1faW9jdGxgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBzbyB0aGVzZSBhcmUgYWNjZXNzaWJsZSBvdXRzaWRlIG9mIHRoZWlyIHJlc3BlY3RpdmUgY29tcGlsYXRpb24gdW5pdHMsIHdoaWNoIGltcGxpZXMgYSBwb3RlbnRpYWwgZm9yIGV4dGVybmFsIG1vZGlmaWNhdGlvbiBvciB1c2UuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBwYXJ0aWN1bGFybHkgaW4gYSBjb250ZXh0IGFzIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGFzIEtWTS4KCk5vdywgY29uc2lkZXJpbmcgdGhlIGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgSSYjMzk7bGwgc2hpZnQgZ2VhcnMuIEkgcmVtZW1iZXIgdGhvc2UgU0NBcyBhbmQgZXh0ZXJuYWwgY2FsbHMgcmVsYXRlZCB0byBpbnRlcnJ1cHRzLCBzbyBJIG5lZWQgdG8gY2hlY2sgYGFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBkZWZpbml0aW9ucyBvZiBgc2NhX2V4dF9jYWxsX3BlbmRpbmdgLCBgc2NhX2luamVjdF9leHRfY2FsbGAsIGFuZCBgc2NhX2NsZWFyX2V4dF9jYWxsYCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtaWdodCBpbnRlcmFjdCB3aXRoIHRob3NlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBpZiB0aGV5IGludHJvZHVjZSBhbnl0aGluZyB1bmV4cGVjdGVkLiBUaGlzIGlzIGFib3V0IG1ha2luZyBzdXJlIG5vdGhpbmcgdW50b3dhcmQgaGFwcGVucyB3aXRoIGV4dGVybmFsIGNhbGxzLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGludGVycnVwdCBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGxvbmd8Ym9vbCkgW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9OTA9c3RhdGljIHZvaWQgc2NhX2NsZWFyX2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTEwNC1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTA1OmludCBwc3dfZXh0aW50X2Rpc2FibGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTA2LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTExMjM9c3RhdGljIGludCBfX211c3RfY2hlY2sgX19kZWxpdmVyX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTExOTMtLyogQ2hlY2sgd2hldGhlciBhbiBleHRlcm5hbCBjYWxsIGlzIHBlbmRpbmcgKGRlbGl2ZXJhYmxlIG9yIG5vdCkgKi9cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTE5NDppbnQga3ZtX3MzOTBfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTExOTUte1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTIwMy1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTIwNDppbnQga3ZtX3MzOTBfdmNwdV9oYXNfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGV4Y2x1ZGVfc3RvcClcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTIwNS17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMjIyLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxMjIzOmludCBrdm1fY3B1X2hhc19wZW5kaW5nX3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTIyNC17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xMjI4PXN0YXRpYyB1NjQgX19jYWxjdWxhdGVfc2x0aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTEyNTktXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjEyNjA6aW50IGt2bV9zMzkwX2hhbmRsZV93YWl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTI2MS17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMzA2LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxMzA3OnZvaWQga3ZtX3MzOTBfdmNwdV93YWtldXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMzA4LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTEzMTk9ZW51bSBocnRpbWVyX3Jlc3RhcnQga3ZtX3MzOTBfaWRsZV93YWtldXAoc3RydWN0IGhydGltZXIgKnRpbWVyKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTMzNi1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTMzNzp2b2lkIGt2bV9zMzkwX2NsZWFyX2xvY2FsX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMzM4LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE5NTg9c3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE5ODgtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE5ODk6aW50IGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE5OTAtXHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDMxLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMDMyOmludCBrdm1fczM5MF9yZWluamVjdF9pb19pbnQoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDMzLVx0XHRcdCAgICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwMzctXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwMzg6aW50IHMzOTBpbnRfdG9fczM5MGlycShzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDM5LVx0XHQgICAgICAgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4MC1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA4MTppbnQga3ZtX3MzOTBfaXNfc3RvcF9pcnFfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwODIte1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4Ny1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA4ODppbnQga3ZtX3MzOTBfaXNfcmVzdGFydF9pcnFfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwODkte1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA5NC1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA5NTp2b2lkIGt2bV9zMzkwX2NsZWFyX3N0b3BfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA5Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMTA1PXN0YXRpYyBpbnQgZG9faW5qZWN0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTQ5LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMTUwOmludCBrdm1fczM5MF9pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjE1MS17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMTczPXN0YXRpYyB2b2lkIGludGlfdG9faXJxKHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxODgtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxODk6dm9pZCBrdm1fczM5MF9jbGVhcl9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjE5MC17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNDI2PXN0YXRpYyBpbnQgcmVnaXN0ZXJfaW9fYWRhcHRlcihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjQ3Mi1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjQ3MzppbnQga3ZtX3MzOTBfbWFza19hZGFwdGVyKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBib29sIG1hc2tlZClcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjQ3NC17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNTUyPXN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI1ODktXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI1OTA6dm9pZCBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnMoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNTkxLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MTktXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI2MjA6dm9pZCBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjYyMS17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMDUzPXN0YXRpYyBpbnQgc2V0X2FkYXB0ZXJfaW50KHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzA3OS0gKi9cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzA4MDp2b2lkIGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMDgxLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWNja192b2xhdGlsZV9pbmZvICptY2NrX2luZm8pXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTIwLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMTIxOmludCBrdm1fc2V0X3JvdXRpbmdfZW50cnkoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTIyLVx0XHRcdCAgc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTYyLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMTYzOmludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTY0LVx0XHRpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzE2OC1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzE2OTppbnQga3ZtX3MzOTBfc2V0X2lycV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgX191c2VyICppcnFzdGF0ZSwgaW50IGxlbilcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzE3MC17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMjA5PXN0YXRpYyB2b2lkIHN0b3JlX2xvY2FsX2lycShzdHJ1Y3Qga3ZtX3MzOTBfbG9jYWxfaW50ZXJydXB0ICpsaSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMyNTAtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMyNTE6aW50IGt2bV9zMzkwX2dldF9pcnFfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBfX3U4IF9fdXNlciAqYnVmLCBpbnQgbGVuKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMjUyLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTMzNTE9c3RhdGljIHZvaWQgcHJvY2Vzc19naWJfYWxlcnRfbGlzdCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzM5NS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzM5Njp2b2lkIGt2bV9zMzkwX2dpc2FfY2xlYXIoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMzk3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM0MDUtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM0MDY6dm9pZCBrdm1fczM5MF9naXNhX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNDA3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM0MjEtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM0MjI6dm9pZCBrdm1fczM5MF9naXNhX2VuYWJsZShzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM0MjMte1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzQ0NC1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzQ0NTp2b2lkIGt2bV9zMzkwX2dpc2FfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM0NDYte1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzQ2Mi1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzQ2Mzp2b2lkIGt2bV9zMzkwX2dpc2FfZGlzYWJsZShzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM0NjQte1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzQ5Ny0gKi9cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzQ5ODppbnQga3ZtX3MzOTBfZ2lzY19yZWdpc3RlcihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBnaXNjKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNDk5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTM1MTc9RVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3MzOTBfZ2lzY19yZWdpc3Rlcik7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNTM2LSAqL1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNTM3OmludCBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXIoc3RydWN0IGt2bSAqa3ZtLCB1MzIgZ2lzYylcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzUzOC17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zNjQ2PXN0YXRpYyBzdHJ1Y3QgYWlycV9zdHJ1Y3QgZ2liX2FsZXJ0X2lycSA9IHtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM2NDktXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM2NTA6dm9pZCBrdm1fczM5MF9naWJfZGVzdHJveSh2b2lkKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNjUxLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTM2NjU9aW50IF9faW5pdCBrdm1fczM5MF9naWJfaW5pdCh1OCBuaXNjKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzcyMi0gKi9cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzcyMzppbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzcyNC1cdFx0XHQgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjU2CgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipGb2N1c2luZyBvbiBFeHRlcm5hbCBDYWxsIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gaG93IHRoZXNlIGV4dGVybmFsIGNhbGxzIGFyZSBoYW5kbGVkLiBJIG5lZWQgdG8ga2VlcCB0aGUgY29kZSBlZmZpY2llbnQgYW5kIHN0cmVhbWxpbmVkLiBJJiMzOTttIG5vdGluZyB0aGF0IGBzY2FfZXh0X2NhbGxfcGVuZGluZ2AsIGBzY2FfaW5qZWN0X2V4dF9jYWxsYCwgYW5kIGBzY2FfY2xlYXJfZXh0X2NhbGxgIGFyZSBzdGF0aWMsIHdoaWNoIHNpbXBsaWZpZXMgdGhlaXIgaW5jbHVzaW9uIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gQ29uc2lkZXJpbmcgdGhlaXIgc3RhdGljIG5hdHVyZSwgSSB3b24mIzM5O3QgbmVlZCB0byBjb25zaWRlciB0aGVtLiBJJiMzOTttIGdvaW5nIHRvIHNraXAgdGhlbSBmcm9tIGFueSBmdXJ0aGVyIGFuYWx5c2lzIGluIHRoaXMgY2FzZSwgYXMgdGhleSBkb24mIzM5O3Qgc2VlbSBkaXJlY3RseSByZWxldmFudCB0byB3aGF0IEkmIzM5O20gY3VycmVudGx5IGludmVzdGlnYXRpbmcuIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHdvcmsgd2l0aCB0aGUgbWVtb3J5LgoKUmlnaHQgbm93LCBJIGFtIGdvaW5nIHRvIGNoZWNrIGBhcmNoL3MzOTAva3ZtL2ZhdWx0aW4uY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGF0IHRoZSBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gIGZ1bmN0aW9uIGZvciBzb21lIGNsdWVzLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7bGwgb2ZmZXIgc29tZSBpbnNpZ2h0IGludG8gaG93IGZhdWx0cyBhcmUgaGFuZGxlZCwgd2hpY2ggcmVsYXRlcyBkaXJlY3RseSB0byB0aGUgZXh0ZXJuYWwgY2FsbCBtZWNoYW5pc21zIEkmIzM5O20gbG9va2luZyBpbnRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGxvbmd8Ym9vbCkgW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0xNC1cbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jOjE1OmJvb2wga3ZtX2FyY2hfc2V0dXBfYXN5bmNfcGYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTE2LVxuLS1cbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTMyLSAqL1xuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6MzM6aW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmYpXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0zNC17XG4tLVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTI4LVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6MTI5OmludCBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYXVsdCAqZiwgZ2ZuX3QgZ2ZuLCBib29sIHcpXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0xMzAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjMwOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNL3MzOTAgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBtYWtpbmcgc29tZSBkZWNpc2lvbnMgYWJvdXQgcG90ZW50aWFsIGFyZWFzIGZvciByZXZpZXcgb3IgcmVmYWN0b3JpbmcsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBzeW1ib2wgdmlzaWJpbGl0eS4gSSBub3RlZCB0aGF0IGBrdm1fczM5MF9mYXVsdGluX2dmbmAgaXMgKm5vdCogZGVjbGFyZWQgc3RhdGljLCB3aGljaCBpcyBhIGtleSBvYnNlcnZhdGlvbi4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSYjMzk7bSBnb2luZyB0byBzdW1tYXJpemUgdGhlIHJlbGV2YW50IHN5bWJvbHM6IGBrdm1fYXJjaF92bV9pb2N0bGAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25gLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAsIGFuZCBvZiBjb3Vyc2UgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCDigJMgdGhpcyBpcyBteSBwcmltYXJ5IGludGVyZXN0LgoKSSBpbml0aWFsbHkgdGhvdWdodCBga3ZtX2FyY2hfdm1faW9jdGxgIG1pZ2h0IGJlIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiwgYnV0IHF1aWNrbHkgcmVhbGl6ZWQgaXQmIzM5O3MgYWN0dWFsbHkgdGhlIFZNIGlvY3RsIGhhbmRsZXIuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgZW50cnkgcG9pbnQsIGJ1dCBub3QgaW4gdGhlIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhdGggbGlrZSBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBUaGF0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlciBmb3IgZnV0dXJlIG9wdGltaXphdGlvbiBjb25zaWRlcmF0aW9ucy4gSSB3YW50ZWQgdG8gdmVyaWZ5IGlmIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCBpcyByZWFjaGFibGUgdmlhIGBrdm1fYXJjaF92bV9pb2N0bGAgYmVjYXVzZSBJIHRob3VnaHQgdGhhdCBtaWdodCBoYXZlIGJlZW4gdGhlIGJldHRlciBvcHRpb24uIEkgY2FuIGNvbmZpcm0sIHZpYSB0aGUgYEtWTV9TRVRfREVWSUNFX0FUVFJgIGlvY3RsIGZvciBgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OYCwgdGhhdCBpdCBpcy4gQnV0LCBJIGxvb2tlZCBhdCBpdCBhbmQgaXQmIzM5O3Mgc3RhdGljLiBTbywgaXQgbG9va3MgbGlrZSBga3ZtX2FyY2hfdm1faW9jdGxgIGlzIHRoZSBjb3JyZWN0IHN5bWJvbC4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoZSBvdGhlciBzeW1ib2xzLiBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgIGlzIGFsc28gbm9uLXN0YXRpYy4gVGhlbiBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAgYW5kIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAgYXJlIG5vbi1zdGF0aWMgYXMgd2VsbC4gQWxzbywgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCBpcywgdG9vLCBub24tc3RhdGljLgoKQmVmb3JlIEkgbW92ZSBvbiwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHMzOTAgS2NvbmZpZyB0byBzZWUgaWYgYW55dGhpbmcgdGhlcmUgaW5mbHVlbmNlcyB0aGVzZSBjaG9pY2VzLiBUaGF0IG1pZ2h0IGdpdmUgbWUgc29tZSBjbHVlcyBhYm91dCB3aHkgdGhlc2Ugd2VyZSBkZXNpZ25lZCB0aGlzIHdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzQyMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDk0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgS1ZNIHBhdGNoLCBhbmQgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBzZWVtcyB0byBiZSBgS1ZNYCwgbmF0dXJhbGx5LiBIb3dldmVyLCBgS1ZNX1MzOTBfVUNPTlRST0xgIGlzIGFsc28gbWVudGlvbmVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKWAuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYEtWTV9TMzkwX1VDT05UUk9MYCBpcyBlc3NlbnRpYWwgaGVyZSwgc28gbGV0JiMzOTtzIGNoZWNrLgoKVGhlIGNvZGUgc25pcHBldHMgaW5jbHVkZSBjaGVja3MgbGlrZSBgaWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LSZndDtrdm0pKWAgd2hpY2ggZGlyZWN0bHkgdXNlcyBgS1ZNX1MzOTBfVUNPTlRST0xgLCBhbmQgYmFzZWQgb24gdGhhdCwgaXTigJlzIHJlbGV2YW50IHRvIHRoZSBvcGVyYXRpb24uIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGluY2x1ZGUgaXQgaW4gdGhlIGBFbmFibGVDb25maWdzYC4KCk5leHQsIEkmIzM5O2xsIHNjYW4gZm9yIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19LVk1gIGlzIGRlZmluaXRlbHkgYSBjb3JlIHJlcXVpcmVtZW50LgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhlICYjMzk7Zm9jdXMgc3ltYm9scyYjMzk7IOKAkyB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhpcyBwYXRjaC4gSSYjMzk7dmUgYWxyZWFkeSBpZGVudGlmaWVkIHNldmVyYWw6IGBrdm1fYXJjaF92bV9pb2N0bGAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25gLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAsIGFuZCBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gLiBCdXQgYXJlIHRoZXJlIGFueSBvdGhlcnM/CgpJIHNlZSBgaGFuZGxlX3JyYmVgIGFuZCBgaGFuZGxlX2Vzc2FgIGFyZSBzdGF0aWMsIGJ1dCB0aGV5IGFyZSBjYWxsZWQgZnJvbSBpbnN0cnVjdGlvbiBpbnRlcmNlcHQgaGFuZGxlcnMuIFRoZSBlbnRyeSBwb2ludCBmb3IgdGhhdCBzZWVtcyB0byBiZSBga3ZtX2hhbmRsZV9zaWVfaW50ZXJjZXB0YCwgd2hpY2ggaXMgYSBob3QgcGF0aC4gQW5kIGFsc28sIGBrdm1fczM5MF9rZXlvcGAgaXMgc3RhdGljLCBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfZGV2X2lvY3RsYCBvciBga3ZtX2FyY2hfdm1faW9jdGxgLiBBbHNvLCBga3ZtX3MzOTBfZ2V0X3NrZXlzYCwgYGt2bV9zMzkwX3NldF9za2V5c2AsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCBhcmUgc3RhdGljLCBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdm1faW9jdGxgLiBUaGVuIHRoZXJlIGFyZSBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgIHdoaWNoIGluY2x1ZGVzIGNoYW5nZXMgcmVsYXRlZCB0byBga3ZtX2lzX3Vjb250cm9sYCBhbmQgYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAgd2hpY2ggaW5jbHVkZXMgY2hhbmdlcyByZWxhdGVkIHRvIGB2Y3B1LSZndDthcmNoLmluaXRpYWxpemVkYC4KCk9rYXksIEkgbmVlZCB0byBhZGQgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCBhbmQgYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAgdG8gdGhlIGZvY3VzIHN5bWJvbHMuCgpTbywgaGVyZSYjMzk7cyBteSB1cGRhdGVkIGxpc3Q6IGBrdm1fYXJjaF92bV9pb2N0bGAsIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAsIGBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVgLCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uYCwgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgLCBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgLCBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgLCBhbmQgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYC4KCk5vdywgdGltZSB0byByZWZpbmUgdGhlIGxpc3QgdG8gYXZvaWQgZ2VuZXJpYyBzeW1ib2xzLiBga3ZtX2FyY2hfdm1faW9jdGxgIGlzIGZpbmU7IGl0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCBmb3IgVk0gaW9jdGxzLiBTYW1lIHdpdGggYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYW5kIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAuIEhvd2V2ZXIsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBhbmQgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCBhcmUgc3BlY2lmaWMgdG8gUFYgKFByb3RlY3RlZCBWaXJ0dWFsaXphdGlvbikuIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgaXMgREFULXNwZWNpZmljIChEeW5hbWljIEFkZHJlc3MgVHJhbnNsYXRpb24pLCBhbmQgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCBpcyBhYm91dCBwYWdlIGZhdWx0IGhhbmRsaW5nLgoKVGhpcyBsb29rcyBsaWtlIGEgc29saWQsIHNwZWNpZmljIGxpc3Qgb2YgZm9jdXMgc3ltYm9scy4KCk5vdywgZmluYWwgY2hlY2sg4oCTIGFyZSBgS1ZNYCBhbmQgYEtWTV9TMzkwX1VDT05UUk9MYCB0aGUgb25seSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcz8gSSBuZWVkIHRvIHRoaW5rIGlmIHRoZXJlIGFyZSBQVi1yZWxhdGVkIGNvbmZpZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk0NTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggUGVyc2lzdGVudCBWaXJ0dWFsIE1hY2hpbmVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyB0aGluZz8mIzM0OyBJIGtub3cgdGhlIGFyY2hpdGVjdHVyZSBpcyBzMzkwLCBzbyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludHMgYXJlIHRoZSBLY29uZmlnIGZpbGVzIHNwZWNpZmljIHRvIHRoZSBhcmNoaXRlY3R1cmUgYW5kIEtWTSBpbnRlZ3JhdGlvbiwgbmFtZWx5IGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIGFuZCBgYXJjaC9zMzkwL0tjb25maWdgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBQZXJzaXN0ZW50IFZNcyBleGlzdCBpbiB0aG9zZSBsb2NhdGlvbnMuIExldCYjMzk7cyBkaWcgaW4gYW5kIGNoZWNrLiBUaGF0IHNob3VsZCBiZSB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIC4qUFYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk2NTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBwcm90ZWN0ZWQgbWVtb3J5IHJlZ2lvbnMgYXJlIGNvbmZpZ3VyZWQgZm9yIHMzOTAgYXJjaGl0ZWN0dXJlIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZSBmb3IgdGhhdCBhcmNoaXRlY3R1cmUuIEl0JiMzOTtzIGFsbW9zdCBhbHdheXMgdGhlIGNlbnRyYWwgcmVwb3NpdG9yeSBmb3IgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYSBzeW1ib2wgcmVsYXRlZCB0byBwcm90ZWN0aW9uLCBtYXliZSBgUFJPVEVDVEVEYCBpdHNlbGYsIG9yIHNvbWV0aGluZyBzaW1pbGFyIOKAkyBpdCBjb3VsZCBiZSBgU0VDVVJFYCwgYEdVQVJERURgLCBgUkVTVFJJQ1RFRGAsIG9yIGFueXRoaW5nIG9mIHRoYXQgbmF0dXJlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZpbGUgdG8gY29udGFpbiB0aGUgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGdvdmVybiB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbGl0eSBnZXRzIGJ1aWx0IGludG8gdGhlIGtlcm5lbC4gRnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgYmFjayB3aGVyZSB0aGlzIGlzIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIC4qUFJPVEVDVEVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5ODgzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlBvdGVudGlhbCBNaXNpbnRlcnByZXRhdGlvbiBvZiBNZW1vcnkgUHJvdGVjdGlvbiBGbGFnKioKCkhtbSwgSSB3YXMganVzdCByZXZpZXdpbmcgdGhlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgbWVtb3J5IHByb3RlY3Rpb24gZmxhZ3MgZm9yIHRoYXQgbmV3IG1hcHBpbmcsIGFuZCBmb3IgYSBtb21lbnQgSSB0aG91Z2h0IEkgaGFkIHRoZSB3cm9uZyBmbGFnLiBJIHdhcyBjb25zaWRlcmluZyBgUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQ2AsIGJ1dCB0aGVuIEkgaGFkIHRoaXMgZmxpY2tlciBvZiBkb3VidC4gRGlkIEkgcGVyaGFwcyBtaXNyZWFkIHRoZSBkb2N1bWVudGF0aW9uLCBvciBtYXliZSBtaXNyZW1lbWJlciB0aGUgaW50ZW5kZWQgYWNjZXNzIHBlcm1pc3Npb25zPyBDb3VsZCBpdCBiZSB0aGF0IHdoYXQgSSAqcmVhbGx5KiBuZWVkIGhlcmUgaXMgYFBST1RfVklSVGA/IEl0JiMzOTtzIHRoZSBvbmUgSSBzaG91bGQgZG91YmxlLWNoZWNrIHNpbmNlIEkgZG8gbm90IHdhbnQgdG8gbWlzdGFrZW5seSBncmFudCB1bm5lY2Vzc2FyeSBwZXJtaXNzaW9ucyBmb3Igc2VjdXJpdHkgb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gSSBzaG91bGQgZ28gYmFjayBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9uIGFnYWluc3QgdGhlIGRvY3VtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIC4qUFJPVF9WSVJUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMTE2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHB2LmNgIG9uIHMzOTB4IEtWTSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBzMzkweCBLVk0mIzM5O3MgcGFyYXZpcnR1YWxpemF0aW9uIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gcG90ZW50aWFsIHBsYXRmb3JtLXNwZWNpZmljIGFkYXB0YXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzY2FuIGBhcmNoL3MzOTAva3ZtL3B2LmNgIHdpdGggYSBsYXNlciBmb2N1cyBvbiBgI2lmZGVmYCBkaXJlY3RpdmVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2Nrcy4gVGhpcyB3aWxsIHNob3cgbWUgd2hlcmUgdGhlIGFyY2hpdGVjdHVyZSBtaWdodCBoYXZlIGRpdmVyZ2VkIGZvciBzcGVjaWZpYyBmZWF0dXJlIHNldHMsIHZlbmRvciBxdWlya3MsIG9yIG9sZGVyIGtlcm5lbHMgYW5kIEkgd2FudCB0byBzZWUgaG93IHRoZSBQViBjb2RlIGhhbmRsZXMgaXQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXQgY2hlY2tzIG9yIG1heWJlIGV2ZW4gaGFuZGxpbmcgb2YgZGlmZmVyZW50IEtWTSBoeXBlcnZpc29yIHZlcnNpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgYWRhcHRzIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCBwb3RlbnRpYWxseSB2YXJ5aW5nIEtWTSBob3N0IGNhcGFiaWxpdGllcy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhcmUgZ29pbmcgdG8gZ3VpZGUgbWUgdG8gdGhvc2UgY3JpdGljYWwgYXJlYXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGRlYnVnZ2luZyBhbmQgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmZGVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA0MDkKCQkJCQkJCW91dHB1dDogMjQ4CgkJCQkJCQl0aG91Z2h0czogMzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBzMzkwIEtWTSBTdWJzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBpcyBjb25zaXN0ZW50bHkgY29tcGlsZWQgd2hlbmV2ZXIgS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBpcyBlbmFibGVkIG9uIHMzOTAuIFRoaXMgaXMgaW1wb3J0YW50IHRvIG5vdGUgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uczogYEtWTWAgYW5kIGBLVk1fUzM5MF9VQ09OVFJPTGAuIE5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHN5bWJvbHMgdGhhdCBkcml2ZSB0aGUgZm9jdXMgb2Ygb3VyIGFuYWx5c2lzLiBJIHNlZSB0aGVzZTogYGt2bV9hcmNoX3ZtX2lvY3RsYCwgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25gLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAsIGFuZCBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gLgoKVGhlIHJlYXNvbiB0aGVzZSBhcmUgaW1wb3J0YW50IGlzIGJlY2F1c2UgdGhlIHBhdGNoIGl0c2VsZiBzZWVtcyB0byBiZSBtYWtpbmcgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBzdWJzeXN0ZW0uIFRoZXNlIGNoYW5nZXMgYXJlIGFkZHJlc3NpbmcgdGhpbmdzIGxpa2UgbWVtb3J5IGxlYWtzLCBsb2NraW5nIGlzc3VlcywgaW5pdGlhbGl6YXRpb24gcmFjZXMsIGFuZCBzaWduYWwgaGFuZGxpbmcgZHVyaW5nIHBhZ2UgZmF1bHRzLiBJdCYjMzk7cyBtb2RpZnlpbmcgY29yZSBLVk0gaW9jdGxzLCBob3cgbWVtb3J5IHJlZ2lvbnMgYXJlIG1hbmFnZWQsIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBQViBDUFUgbGlmZWN5Y2xlLgoKVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgYWxsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgZWl0aGVyIHRocm91Z2ggS1ZNIGlvY3RscyBvciBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIG1lYW5zIHRoZXkmIzM5O3JlIGV4Y2VsbGVudCB0YXJnZXRzIGZvciBmdXp6aW5nLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgYSBjb3VwbGUgb2YgdGhlc2Ugc3ltYm9scy4gYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAgc2VlbXMgZmluZSBhcyBhIHN5bWJvbCwgYXMgaXQmIzM5O3MgY2FsbGVkIG9uY2UgcGVyIHZDUFUgY3JlYXRpb24uIGBrdm1fczM5MF9mYXVsdGluX2dmbmAgaXMgdHJpZ2dlcmVkIGR1cmluZyBwYWdlIGZhdWx0cywgd2hpY2ggaXMgYWxzbyBhIGdvb2QgdGFyZ2V0LiBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgIGlzIGNhbGxlZCBkdXJpbmcgYEtWTV9TMzkwX0tFWU9QX1JSQkVgIGFuZCBgaGFuZGxlX3JyYmVgLiBUaGF0JiMzOTtzIGFsc28gZ29vZC4KCldpdGggdGhpcyBzb2xpZCB1bmRlcnN0YW5kaW5nLCBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9TMzkwX1VDT05UUk9MPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fUzM5MF9VQ09OVFJPTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfY3JlYXRlX2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9kZXN0cm95X2NwdSYjMzQ7LAogICAgJiMzNDtkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9mYXVsdGluX2dmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGZpeGVzIGZvciBtZW1vcnkgbGVha3MsIGxvY2tpbmcsIGluaXRpYWxpemF0aW9uIHJhY2VzLCBhbmQgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cy4gSXQgbW9kaWZpZXMgY29yZSBLVk0gaW9jdGxzLCBtZW1vcnkgcmVnaW9uIG1hbmFnZW1lbnQsIGFuZCBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBDUFUgbGlmZWN5Y2xlIGZ1bmN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgYWNjZXNzZXMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9TMzkwX1VDT05UUk9MJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTU0OAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCBhc3N1bWluZyBJJiMzOTttIGEgTGludXgga2VybmVsIGRldmVsb3Blci9LVk0gc3BlY2lhbGlzdDoKCioqQ2hlY2tpbmcgZm9yIEtWTV9TMzkwX1VDT05UUk9MIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsICpLVk1fUzM5MF9VQ09OVFJPTCouLi4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGJlaW5nIGEgdGhpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gTGV0IG1lIGNvbmZpcm0sIGl0IHNob3VsZCBiZSBpbiB0aGUgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGV4YWN0IG5hbWUgY29ycmVjdCwgYXMgYSBtaXNzcGVsbGluZyBoZXJlIHdvdWxkIGJlIGEgcmVhbCB3YXN0ZSBvZiB0aW1lLiBJIGNhbiYjMzk7dCBiZSBvZmYgYnkgZXZlbiBhIGNoYXJhY3Rlci4gT2theSwgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZSBleGFjdCBkZXNpZ25hdGlvbi4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1MzOTBfVUNPTlRST0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTE5PWNvbmZpZyBLVk1cbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE4ODAKCQkJCQkJCW91dHB1dDogMjM1CgkJCQkJCQl0aG91Z2h0czogMTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIEVycm9yKioKCk9rYXksIHNvIHRoZSBlcnJvciBtZXNzYWdlIGlzIHNjcmVhbWluZyBhYm91dCBgS1ZNX1MzOTBfVUNPTlRST0xgIG5vdCBiZWluZyBmb3VuZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvLCBvZiBjb3Vyc2UsIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZS4gQnV0IGhvbGQgb24sIHRoZSB0b29sIG1pZ2h0IGJlIGxvb2tpbmcgZm9yIHRoaXMgY29uZmlndXJhdGlvbiB1bmRlciBgeDg2YCwgd2hpY2gsIGFzIHdlIGtub3csIGlzbiYjMzk7dCB0aGUgb25seSBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHNlYXJjaCBpc24mIzM5O3QgZXJyb25lb3VzbHkgZmlsdGVyaW5nIGJ5IGFyY2hpdGVjdHVyZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYEtWTV9TMzkwX1VDT05UUk9MYCBpcyAqYWN0dWFsbHkqIHRoZSBjb3JyZWN0IG5hbWUgZm9yIHRoZSBjb25maWcsIGp1c3QgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgZmF0LWZpbmdlcmVkIHNvbWV0aGluZy4gWWVwLCBsb29rcyBnb29kIHRoZXJlLiBJZiB0aGUgdG9vbCBpcyBzdGlsbCBiZWluZyBkaWZmaWN1bHQgYW5kIHJlamVjdGluZyBpdCwgSSYjMzk7bGwganVzdCBza2lwIGBLVk1fUzM5MF9VQ09OVFJPTGAgYW5kIHVzZSB0aGUgbW9yZSBnZW5lcmFsIGBLVk1gIGNvbmZpZy4gSXQgbWlnaHQgYmUgYSB3b3JrYXJvdW5kLCBidXQgSSBoYXZlIGEgaGlnaCBkZWdyZWUgb2YgY29uZmlkZW5jZSB0aGF0IHRoZSBtb3JlIGdlbmVyYWwgY29uZmlnIHdpbGwgYmUgZnVuY3Rpb25hbGx5IHN1ZmZpY2llbnQsIGF0IGxlYXN0IGFzIGEgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92bV9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24mIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2NyZWF0ZV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUmIzM0OywKICAgICYjMzQ7ZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfZmF1bHRpbl9nZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBzdWJzeXN0ZW0sIGluY2x1ZGluZyBmaXhlcyBmb3IgbWVtb3J5IGxlYWtzLCBsb2NraW5nLCBpbml0aWFsaXphdGlvbiByYWNlcywgYW5kIHNpZ25hbCBoYW5kbGluZyBkdXJpbmcgcGFnZSBmYXVsdHMuIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIGlvY3RscywgbWVtb3J5IHJlZ2lvbiBtYW5hZ2VtZW50LCBhbmQgUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgQ1BVIGxpZmVjeWNsZSBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgbWVtb3J5IGFjY2Vzc2VzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdm1faW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9jcmVhdGUmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9jcmVhdGVfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1JiMzNDssCiAgICAmIzM0O2RhdF9yZXNldF9yZWZlcmVuY2VfYml0JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2ZhdWx0aW5fZ2ZuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gc3Vic3lzdGVtLCBpbmNsdWRpbmcgZml4ZXMgZm9yIG1lbW9yeSBsZWFrcywgbG9ja2luZywgaW5pdGlhbGl6YXRpb24gcmFjZXMsIGFuZCBzaWduYWwgaGFuZGxpbmcgZHVyaW5nIHBhZ2UgZmF1bHRzLiBJdCBtb2RpZmllcyBjb3JlIEtWTSBpb2N0bHMsIG1lbW9yeSByZWdpb24gbWFuYWdlbWVudCwgYW5kIFByb3RlY3RlZCBWaXJ0dWFsaXphdGlvbiAoUFYpIENQVSBsaWZlY3ljbGUgZnVuY3Rpb25zLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBhY2Nlc3NlcywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0Mjo1NC4yMDUyMjQ3NDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMzNDA2NTQ1MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdm1faW9jdGxcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfY3JlYXRlXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVcIixcbiAgICBcImt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdFwiLFxuICAgIFwia3ZtX3MzOTBfZmF1bHRpbl9nZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGZpeGVzIGZvciBtZW1vcnkgbGVha3MsIGxvY2tpbmcsIGluaXRpYWxpemF0aW9uIHJhY2VzLCBhbmQgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cy4gSXQgbW9kaWZpZXMgY29yZSBLVk0gaW9jdGxzLCBtZW1vcnkgcmVnaW9uIG1hbmFnZW1lbnQsIGFuZCBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBDUFUgbGlmZWN5Y2xlIGZ1bmN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgYWNjZXNzZXMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0Mjo1NC4yMDUyMzI1MThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxODE0OTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY2N2IyMmViOWMzMzk4MTkxZWQxZjkwZDM1OTY1ZGNjNjhlYWY5MTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAwNjo0Mjo1MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggZWFhMzRjNWJkM2MxMS4uZWRmNzViNmFkMjBjZSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTQ0MCw2ICs0NDAsNyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XFxuIFxcdGJvb2wgc2tleV9lbmFibGVkO1xcbiBcXHQvKiBJbmRpY2F0b3IgaWYgdGhlIGFjY2VzcyByZWdpc3RlcnMgaGF2ZSBiZWVuIGxvYWRlZCBmcm9tIGd1ZXN0ICovXFxuIFxcdGJvb2wgYWNyc19sb2FkZWQ7XFxuK1xcdGJvb2wgaW5pdGlhbGl6ZWQ7XFxuIFxcdHN0cnVjdCBrdm1fczM5MF9wdl92Y3B1IHB2O1xcbiBcXHR1bmlvbiBkaWFnMzE4X2luZm8gZGlhZzMxOF9pbmZvO1xcbiBcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuYyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcXG5pbmRleCBlZDQyNTlkMTc2Mjk1Li4zZjJkNmU4OTAyZDc2IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2RhdC5jXFxuQEAgLTc1NSwxMyArNzU1LDE1IEBAIGludCBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbW1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmXFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxcbitpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpXFxuIHtcXG4gXFx0dW5pb24gcGdzdGUgcGdzdGUsIG9sZDtcXG4gXFx0dW5pb24gY3JzdGUgKmNyc3RlcDtcXG4gXFx0dW5pb24gcHRlICpwdGVwO1xcbiBcXHRpbnQgcmM7XFxuIFxcbitcXHRza2V5LVxcdTAwM2Vza2V5ID0gMDtcXG4rXFxuIFxcdHJjID0gZGF0X2VudHJ5X3dhbGsoTlVMTCwgZ2ZuLCBhc2NlLCBEQVRfV0FMS19BTlksIFRBQkxFX1RZUEVfUEFHRV9UQUJMRSwgXFx1MDAyNmNyc3RlcCwgXFx1MDAyNnB0ZXApO1xcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiByYztcXG5AQCAtNzcxLDIxICs3NzMsMjMgQEAgaW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxcbiBcXG4gXFx0XFx0aWYgKCFjcnN0ZS5oLmZjIHx8ICFjcnN0ZS5zLmZjMS5wcilcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuLVxcdFxcdHJldHVybiBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKTtcXG4rXFx0XFx0c2tleS1cXHUwMDNlc2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChsYXJnZV9jcnN0ZV90b19waHlzKCpjcnN0ZXAsIGdmbikpIFxcdTAwM2NcXHUwMDNjIDE7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcdG9sZCA9IHBnc3RlX2dldF9sb2NrKHB0ZXApO1xcbiBcXHRwZ3N0ZSA9IG9sZDtcXG4gXFxuIFxcdGlmICghcHRlcC1cXHUwMDNlaC5pKSB7XFxuLVxcdFxcdHJjID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKTtcXG4tXFx0XFx0cGdzdGUuaHIgPSByYyBcXHUwMDNlXFx1MDAzZSAxO1xcbitcXHRcXHRza2V5LVxcdTAwM2Vza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKSBcXHUwMDNjXFx1MDAzYyAxO1xcbitcXHRcXHRwZ3N0ZS5ociA9IHNrZXktXFx1MDAzZXI7XFxuIFxcdH1cXG4tXFx0cmMgfD0gKHBnc3RlLmdyIFxcdTAwM2NcXHUwMDNjIDEpIHwgcGdzdGUuZ2M7XFxuK1xcdHNrZXktXFx1MDAzZXIgfD0gcGdzdGUuZ3I7XFxuK1xcdHNrZXktXFx1MDAzZWMgfD0gcGdzdGUuZ2M7XFxuIFxcdHBnc3RlLmdyID0gMDtcXG4gXFxuIFxcdGRhdF91cGRhdGVfcHRlcF9zZChvbGQsIHBnc3RlLCBwdGVwKTtcXG4gXFx0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XFxuLVxcdHJldHVybiByYztcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBsb25nIGRhdF9yZXNldF9za2V5c19wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG5AQCAtODQ2LDYgKzg1MCw3IEBAIHN0YXRpYyBsb25nIF9kYXRfc2xvdF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsXFxuIFxcdHN0cnVjdCBzbG90X3ByaXYgKnAgPSB3YWxrLVxcdTAwM2Vwcml2O1xcbiBcXHR1bmlvbiBjcnN0ZSBkdW1teSA9IHsgLnZhbCA9IHAtXFx1MDAzZXRva2VuIH07XFxuIFxcdHVuaW9uIHB0ZSBuZXdfcHRlLCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApO1xcbitcXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcXG4gXFxuIFxcdG5ld19wdGUgPSBfUFRFX1RPSyhkdW1teS50b2sudHlwZSwgZHVtbXkudG9rLnBhcik7XFxuIFxcbkBAIC04NTMsNyArODU4LDExIEBAIHN0YXRpYyBsb25nIF9kYXRfc2xvdF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsXFxuIFxcdGlmIChwdGUudmFsID09IG5ld19wdGUudmFsKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGRhdF9wdGVwX3hjaGcocHRlcCwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLVxcdTAwM2Vhc2NlLCBmYWxzZSk7XFxuK1xcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XFxuK1xcdHBnc3RlID0gX19kYXRfcHRlcF94Y2hnKHB0ZXAsIHBnc3RlLCBuZXdfcHRlLCBnZm4sIHdhbGstXFx1MDAzZWFzY2UsIGZhbHNlKTtcXG4rXFx0cGdzdGUuY21tYV9kID0gMDtcXG4rXFx0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuaCBiL2FyY2gvczM5MC9rdm0vZGF0LmhcXG5pbmRleCBmYWQ2MDUzMDVlMDVjLi4xNDFlZTdiOWYwMTkxIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmhcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2RhdC5oXFxuQEAgLTUzNyw3ICs1MzcsNyBAQCBpbnQgZGF0X3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZlxcbiBcXHRcXHRcXHR1bmlvbiBza2V5IHNrZXksIGJvb2wgbnEpO1xcbiBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sXFxuIFxcdFxcdFxcdCAgICAgdW5pb24gc2tleSBza2V5LCB1bmlvbiBza2V5ICpvbGRrZXksIGJvb2wgbnEsIGJvb2wgbXIsIGJvb2wgbWMpO1xcbi1pbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pO1xcbitpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpO1xcbiBsb25nIGRhdF9yZXNldF9za2V5cyh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KTtcXG4gXFxuIHVuc2lnbmVkIGxvbmcgZGF0X2dldF9wdHZhbChzdHJ1Y3QgcGFnZV90YWJsZSAqdGFibGUsIHN0cnVjdCBwdHZhbF9wYXJhbSBwYXJhbSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcXG5pbmRleCBmZWU4MDA0N2JkOTRmLi4zY2M0NWY3ZjViMmQ3IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcXG5AQCAtOTEsOSArOTEsOSBAQCBpbnQga3ZtX3MzOTBfZmF1bHRpbl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYVxcbiBcXHRcXHQvKiBBY2Nlc3Mgb3V0c2lkZSBtZW1vcnksIGFkZHJlc3NpbmcgZXhjZXB0aW9uLiAqL1xcbiBcXHRcXHRpZiAoaXNfbm9zbG90X3BmbihmLVxcdTAwM2VwZm4pKVxcbiBcXHRcXHRcXHRyZXR1cm4gUEdNX0FERFJFU1NJTkc7XFxuLVxcdFxcdC8qIFNpZ25hbCBwZW5kaW5nOiB0cnkgYWdhaW4uICovXFxuLVxcdFxcdGlmIChmLVxcdTAwM2VwZm4gPT0gS1ZNX1BGTl9FUlJfU0lHUEVORElORylcXG4tXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcdFxcdC8qIEZhdGFsIHNpZ25hbCBwZW5kaW5nOiBiYWlsIG91dC4gKi9cXG4rXFx0XFx0aWYgKGlzX3NpZ3BlbmRpbmdfcGZuKGYtXFx1MDAzZXBmbikpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuIFxcdFxcdC8qIENoZWNrIGlmIGl0J3MgcmVhZC1vbmx5IG1lbW9yeTsgZG9uJ3QgdHJ5IHRvIGFjdHVhbGx5IGhhbmRsZSB0aGF0IGNhc2UuICovXFxuIFxcdFxcdGlmIChmLVxcdTAwM2VwZm4gPT0gS1ZNX1BGTl9FUlJfUk9fRkFVTFQpXFxuIFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcXG5pbmRleCA5ZTNlNmIwZDcyYWQ2Li42MDEzZjI4ZTM0NjFmIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXFxuQEAgLTQ1LDEzICs0NSwxNiBAQCBzdGF0aWMgc3RydWN0IGt2bV9zMzkwX2dpYiAqZ2liO1xcbiBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXFxuIHtcXG4gXFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5zY2E7XFxuLVxcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybCA9IHNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4rXFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgc2lncF9jdHJsO1xcbiBcXG4gXFx0aWYgKCFrdm1fczM5MF90ZXN0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0aWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSksIHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTtcXG4gXFxuK1xcdHNpZ3BfY3RybCA9IHNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4gXFx0aWYgKHNyY19pZClcXG4gXFx0XFx0KnNyY19pZCA9IHNpZ3BfY3RybC5zY247XFxuIFxcbkBAIC02MCwxMyArNjMsMTYgQEAgc3RhdGljIGludCBzY2FfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqc3JjX2lkKVxcbiBcXG4gc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZClcXG4ge1xcbi1cXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnNjYTtcXG4tXFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9IFxcdTAwMjZzY2EtXFx1MDAzZWNwdVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XFxuIFxcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIG9sZF92YWwsIG5ld192YWwgPSB7LnNjbiA9IHNyY19pZCwgLmMgPSAxfTtcXG4rXFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5zY2E7XFxuK1xcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmw7XFxuIFxcdGludCBleHBlY3QsIHJjO1xcbiBcXG4gXFx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XFxuK1xcdGlmIChLVk1fQlVHX09OKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pLCB2Y3B1LVxcdTAwM2Vrdm0pKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdHNpZ3BfY3RybCA9IFxcdTAwMjZzY2EtXFx1MDAzZWNwdVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XFxuIFxcdG9sZF92YWwgPSBSRUFEX09OQ0UoKnNpZ3BfY3RybCk7XFxuIFxcdG9sZF92YWwuYyA9IDA7XFxuIFxcbkBAIC04NCwxMCArOTAsMTMgQEAgc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZClcXG4gc3RhdGljIHZvaWQgc2NhX2NsZWFyX2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnNjYTtcXG4tXFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9IFxcdTAwMjZzY2EtXFx1MDAzZWNwdVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XFxuK1xcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmw7XFxuIFxcbi1cXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxcbitcXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIHx8ICF2Y3B1LVxcdTAwM2VhcmNoLmluaXRpYWxpemVkIHx8IGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbiBcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBJbml0aWFsaXplIGFmdGVyIHRoZSBhYm92ZSBjaGVjaywgdG8gcHJldmVudCBnb2luZyBvdXQgb2YgYm91bmRzICovXFxuK1xcdHNpZ3BfY3RybCA9IFxcdTAwMjZzY2EtXFx1MDAzZWNwdVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XFxuIFxcdGt2bV9zMzkwX2NsZWFyX2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCk7XFxuIFxcbiBcXHRXUklURV9PTkNFKHNpZ3BfY3RybC1cXHUwMDNldmFsdWUsIDApO1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcXG5pbmRleCAxNTBiNWRkMjE3MGUyLi42NjgyNzJkZmZhMThiIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbkBAIC01NzEsNyArNTcxLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3BcXG4gXFx0c3dpdGNoIChvcCkge1xcbiBcXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1NTS0U6XFxuIFxcdFxcdHIgPSBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkobWMsIGFzY2UsIGdmbiwgc2tleSwgXFx1MDAyNnNrZXksIDAsIDAsIDApO1xcbi1cXHRcXHRpZiAociBcXHUwMDNlPSAwKVxcbitcXHRcXHRpZiAociA9PSAwIHx8IHIgPT0gMSlcXG4gXFx0XFx0XFx0cmV0dXJuIHNrZXkuc2tleTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfSVNLRTpcXG5AQCAtNTgwLDE0ICs1ODAsMTQgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3BcXG4gXFx0XFx0XFx0cmV0dXJuIHNrZXkuc2tleTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfUlJCRTpcXG4tXFx0XFx0ciA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KGFzY2UsIGdmbik7XFxuLVxcdFxcdGlmIChyIFxcdTAwM2UgMClcXG4tXFx0XFx0XFx0cmV0dXJuIHIgXFx1MDAzY1xcdTAwM2MgMTtcXG4rXFx0XFx0ciA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KGFzY2UsIGdmbiwgXFx1MDAyNnNrZXkpO1xcbitcXHRcXHRpZiAoIXIpXFxuK1xcdFxcdFxcdHJldHVybiBza2V5LnNrZXk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIHIgXFx1MDAzZSAwID8gLUVGQVVMVCA6IHI7XFxuIH1cXG4gXFxuIC8qIFNlY3Rpb246IGRldmljZSByZWxhdGVkICovXFxuQEAgLTEyMTksOCArMTIxOSw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoc3RydWN0IGt2bSAqa3ZtLCBpbnQgcmVxKVxcbiBcXG4gLypcXG4gICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXFx1MDAzZXNyY3UgaGVsZCB0byBhdm9pZCByYWNlcyBvbiBtZW1zbG90cywgYW5kIHdpdGhcXG4tICoga3ZtLVxcdTAwM2VzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLFxcbi0gKiBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxcbisgKiBrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcXG4rICoga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oKSwgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cXG4gICovXFxuIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbkBAIC0xMjY1LDcgKzEyNjUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuIH1cXG4gXFxuIC8qXFxuLSAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVxcdTAwM2VzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxcbisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxcbiAgKiBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oKSBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxcbiAgKi9cXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuQEAgLTEzMDAsNyArMTMwMCw5IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIHtcXG4gXFx0aW50IHJlcyA9IC1FTlhJTztcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuK1xcdGd1YXJkKHNyY3UpKFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UpO1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcXG4rXFxuIFxcdHN3aXRjaCAoYXR0ci1cXHUwMDNlYXR0cikge1xcbiBcXHRjYXNlIEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVDpcXG4gXFx0XFx0cmVzID0ga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKGt2bSk7XFxuQEAgLTEzMTEsNyArMTMxMyw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4gXFxuIFxcdHJldHVybiByZXM7XFxuIH1cXG5AQCAtMjIxNCw3ICsyMjE1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9nZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXFxuIFxcdH1cXG4gXFxuIFxcdGt2ZnJlZShrZXlzKTtcXG4tXFx0cmV0dXJuIHI7XFxuK1xcdHJldHVybiByIFxcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXFxuQEAgLTIyNzYsNyArMjI3Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxcbiBcXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XFxuIG91dDpcXG4gXFx0a3ZmcmVlKGtleXMpO1xcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIHIgXFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0yMzg2LDcgKzIzODcsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXG4gXFx0c2V0X2JpdChHTUFQX0ZMQUdfVVNFU19DTU0sIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlZmxhZ3MpO1xcbiBcXG4tXFx0cmV0dXJuIHI7XFxuK1xcdHJldHVybiByIFxcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI5MzQsNiArMjkzNSw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0Y2FzZSBLVk1fUzM5MF9JTlRFUlJVUFQ6IHtcXG4gXFx0XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50O1xcbiBcXG4rXFx0XFx0ciA9IC1FSU5WQUw7XFxuK1xcdFxcdGlmIChrdm1faXNfdWNvbnRyb2woa3ZtKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdHIgPSAtRUZBVUxUO1xcbiBcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnMzOTBpbnQsIGFyZ3AsIHNpemVvZihzMzkwaW50KSkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0yOTk4LDkgKzMwMDIsOCBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdFxcdHIgPSAtRUZBVUxUO1xcbiBcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmFyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbi1cXHRcXHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFxcdTAwMjZhcmdzKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jaylcXG4rXFx0XFx0XFx0ciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCBcXHUwMDI2YXJncyk7XFxuIFxcdFxcdGlmICghcikge1xcbiBcXHRcXHRcXHRyID0gY29weV90b191c2VyKGFyZ3AsIFxcdTAwMjZhcmdzLCBzaXplb2YoYXJncykpO1xcbiBcXHRcXHRcXHRpZiAocilcXG5AQCAtMzAxNCw5ICszMDE3LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRcXHRyID0gLUVGQVVMVDtcXG4gXFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZhcmdzLCBhcmdwLCBzaXplb2YoYXJncykpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2spO1xcbiBcXHRcXHRyID0ga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhrdm0sIFxcdTAwMjZhcmdzKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFx0Y2FzZSBLVk1fUzM5MF9QVl9DT01NQU5EOiB7XFxuQEAgLTM0NjEsNyArMzQ2NCw3IEBAIHN0YXRpYyB2b2lkIHNjYV9kZWxfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5zY2E7XFxuIFxcbi1cXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxcbitcXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIHx8ICF2Y3B1LVxcdTAwM2VhcmNoLmluaXRpYWxpemVkKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRjbGVhcl9iaXRfaW52KHZjcHUtXFx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVxcdTAwM2VtY24pO1xcbkBAIC0zNDgxLDggKzM0ODQsOCBAQCBzdGF0aWMgdm9pZCBzY2FfYWRkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRXUklURV9PTkNFKHNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNkYSwgdmlydF90b19waHlzKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XFxuIFxcdHNldF9iaXRfaW52KHZjcHUtXFx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVxcdTAwM2VtY24pO1xcbi1cXHRzY2EtXFx1MDAzZWNwdVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXS5zZGEgPSB2aXJ0X3RvX3BoeXModmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHNjYV9jYW5fYWRkX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXFxuQEAgLTM2MTMsNiArMzYxNiw5IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKHRlc3Rfa3ZtX2ZhY2lsaXR5KHZjcHUtXFx1MDAzZWt2bSwgNzQpIHx8IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC51c2VyX2luc3RyMCB8fFxcbiBcXHQgICAgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnVzZXJfb3BlcmV4ZWMpXFxuIFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VpY3RsIHw9IElDVExfT1BFUkVYQztcXG4rXFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pbml0aWFsaXplZCwgdHJ1ZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGt2bV9oYXNfcGNrbW9fc3ViZnVuYyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbnIpXFxuQEAgLTM2NzQsNyArMzY4MCw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIHZvaWQga3ZtX3MzOTBfdmNwdV91bnNldHVwX2NtbWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWNicmxvKSk7XFxuK1xcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlY2JybG8pXFxuK1xcdFxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWNicmxvKSk7XFxuIFxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VjYnJsbyA9IDA7XFxuIH1cXG4gXFxuQEAgLTM3OTIsMjEgKzM3OTksMjEgQEAgaW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rREVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSlcXG4rXFxuIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0c3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZTtcXG4rXFx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgX19mcmVlKGt2bV9zMzkwX21tdV9jYWNoZSkgPSBOVUxMO1xcbitcXHRzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlIF9fZnJlZShzaWVfcGFnZSkgPSBOVUxMO1xcbiBcXHRpbnQgcmM7XFxuIFxcbiBcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzaWVfcGFnZSkgIT0gNDA5Nik7XFxuLVxcdHZjcHUtXFx1MDAzZWFyY2gubWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XFxuLVxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC5tYylcXG4rXFx0bWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XFxuK1xcdGlmICghbWMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRzaWVfcGFnZSA9IChzdHJ1Y3Qgc2llX3BhZ2UgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLVxcdGlmICghc2llX3BhZ2UpIHtcXG4tXFx0XFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUodmNwdS1cXHUwMDNlYXJjaC5tYyk7XFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2gubWMgPSBOVUxMO1xcbitcXHRpZiAoIXNpZV9wYWdlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0fVxcbiBcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2sgPSBcXHUwMDI2c2llX3BhZ2UtXFx1MDAzZXNpZV9ibG9jaztcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWl0ZGJhID0gdmlydF90b19waHlzKFxcdTAwMjZzaWVfcGFnZS1cXHUwMDNlaXRkYik7XFxuQEAgLTM4NDgsMTAgKzM4NTUsOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWt2bV92YWxpZF9yZWdzIHw9IEtWTV9TWU5DX0ZQUlM7XFxuIFxcbiBcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4tXFx0XFx0cmMgPSAtRU5PTUVNO1xcbiBcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ21hcCwgLTFVTCk7XFxuIFxcdFxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC5nbWFwKVxcbi1cXHRcXHRcXHRnb3RvIG91dF9mcmVlX3NpZV9ibG9jaztcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuIFxcdFZNX0VWRU5UKHZjcHUtXFx1MDAzZWt2bSwgMywgXFxcImNyZWF0ZSBjcHUgJWQgYXQgMHglcCwgc2llIGJsb2NrIGF0IDB4JXBcXFwiLFxcbkBAIC0zODU5LDIwICszODY1LDE5IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHRyYWNlX2t2bV9zMzkwX2NyZWF0ZV92Y3B1KHZjcHUtXFx1MDAzZXZjcHVfaWQsIHZjcHUsIHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrKTtcXG4gXFxuIFxcdHJjID0ga3ZtX3MzOTBfdmNwdV9zZXR1cCh2Y3B1KTtcXG4tXFx0aWYgKHJjKVxcbi1cXHRcXHRnb3RvIG91dF91Y29udHJvbF91bmluaXQ7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4rXFx0XFx0XFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWNoaWxkcmVuX2xvY2spXFxuK1xcdFxcdFxcdFxcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXFx1MDAzZWFyY2guZ21hcCk7XFxuK1xcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXFx1MDAzZWFyY2guZ21hcCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuIFxcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLm1jID0gbm9fZnJlZV9wdHIobWMpO1xcbitcXHRzaWVfcGFnZSA9IE5VTEw7XFxuIFxcdGt2bV9zMzkwX3VwZGF0ZV90b3BvbG9neV9jaGFuZ2VfcmVwb3J0KHZjcHUtXFx1MDAzZWt2bSwgMSk7XFxuIFxcdHJldHVybiAwO1xcbi1cXG4tb3V0X3Vjb250cm9sX3VuaW5pdDpcXG4tXFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuLVxcdFxcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXFx1MDAzZWFyY2guZ21hcCk7XFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXFx1MDAzZWFyY2guZ21hcCk7XFxuLVxcdH1cXG4tb3V0X2ZyZWVfc2llX2Jsb2NrOlxcbi1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XFxuLVxcdHJldHVybiByYztcXG4gfVxcbiBcXG4gaW50IGt2bV9hcmNoX3ZjcHVfcnVubmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC01MDM5LDYgKzUwNDQsMTAgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICAgIGt2bV9ydW4tXFx1MDAzZWt2bV9kaXJ0eV9yZWdzIFxcdTAwMjYgfktWTV9TWU5DX1MzOTBfVkFMSURfRklFTERTKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoKSAqL1xcbitcXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdHZjcHVfbG9hZCh2Y3B1KTtcXG4gXFxuIFxcdGlmIChndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpIHtcXG5AQCAtNTUyMyw2ICs1NTMyLDEwIEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0bG9uZyByO1xcbiBcXHR1MTYgcmMsIHJyYztcXG4gXFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoKSAqL1xcbitcXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdHZjcHVfbG9hZCh2Y3B1KTtcXG4gXFxuIFxcdHN3aXRjaCAoaW9jdGwpIHtcXG5AQCAtNTc0OCwxMSArNTc2MSwzMCBAQCBib29sIGt2bV9hcmNoX2lycWNoaXBfaW5fa2VybmVsKHN0cnVjdCBrdm0gKmt2bSlcXG4gfVxcbiBcXG4gLyogU2VjdGlvbjogbWVtb3J5IHJlbGF0ZWQgKi9cXG4rc3RhdGljIGxvbmcgY21tYV9kX2NvdW50X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbit7XFxuK1xcdHVuaW9uIHBnc3RlIHBnc3RlO1xcbitcXG4rXFx0cGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcXG4rXFx0aWYgKHBnc3RlLmNtbWFfZCkge1xcbitcXHRcXHRwZ3N0ZS5jbW1hX2QgPSAwO1xcbitcXHRcXHRhdG9taWM2NF9kZWMod2Fsay1cXHUwMDNlcHJpdik7XFxuK1xcdH1cXG4rXFx0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXFxuIFxcdFxcdFxcdFxcdCAgIGVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpXFxuIHtcXG4rXFx0Y29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBjbW1hX2RfY291bnRfcHRlLCB9O1xcbitcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XFxuK1xcdGludCByYyA9IC1FTk9NRU07XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XFxuK1xcbiBcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKGt2bSkgXFx1MDAyNlxcdTAwMjYgbmV3IFxcdTAwMjZcXHUwMDI2IG5ldy1cXHUwMDNlaWQgXFx1MDAzYyBLVk1fVVNFUl9NRU1fU0xPVFMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5AQCAtNTc3NSw0MyArNTgwNywzNSBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICgha3ZtLVxcdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFR1cm4gb2ZmIG1pZ3JhdGlvbiBtb2RlIHdoZW46XFxuLVxcdCAqIC0gdXNlcnNwYWNlIGNyZWF0ZXMgYSBuZXcgbWVtc2xvdCB3aXRoIGRpcnR5IGxvZ2dpbmcgb2ZmLFxcbi1cXHQgKiAtIHVzZXJzcGFjZSBtb2RpZmllcyBhbiBleGlzdGluZyBtZW1zbG90IChNT1ZFIG9yIEZMQUdTX09OTFkpIGFuZFxcbi1cXHQgKiAgIGRpcnR5IGxvZ2dpbmcgaXMgdHVybmVkIG9mZi5cXG4tXFx0ICogTWlncmF0aW9uIG1vZGUgZXhwZWN0cyBkaXJ0eSBwYWdlIGxvZ2dpbmcgYmVpbmcgZW5hYmxlZCB0byBzdG9yZVxcbi1cXHQgKiBpdHMgZGlydHkgYml0bWFwLlxcbi1cXHQgKi9cXG4tXFx0aWYgKGNoYW5nZSAhPSBLVk1fTVJfREVMRVRFIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhKG5ldy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUykpXFxuLVxcdFxcdFdBUk4oa3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oa3ZtKSxcXG4tXFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIHN0b3AgbWlncmF0aW9uIG1vZGVcXFwiKTtcXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tXFx0XFx0XFx0XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxcbi1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXFxuLVxcdFxcdFxcdFxcdGVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpXFxuLXtcXG4tXFx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgPSBOVUxMO1xcbi1cXHRpbnQgcmMgPSAwO1xcbitcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFR1cm4gb2ZmIG1pZ3JhdGlvbiBtb2RlIHdoZW46XFxuK1xcdFxcdCAqIC0gdXNlcnNwYWNlIGNyZWF0ZXMgYSBuZXcgbWVtc2xvdCB3aXRoIGRpcnR5IGxvZ2dpbmcgb2ZmLFxcbitcXHRcXHQgKiAtIHVzZXJzcGFjZSBtb2RpZmllcyBhbiBleGlzdGluZyBtZW1zbG90IChNT1ZFIG9yIEZMQUdTX09OTFkpXFxuK1xcdFxcdCAqICAgYW5kIGRpcnR5IGxvZ2dpbmcgaXMgdHVybmVkIG9mZi5cXG4rXFx0XFx0ICogTWlncmF0aW9uIG1vZGUgZXhwZWN0cyBkaXJ0eSBwYWdlIGxvZ2dpbmcgYmVpbmcgZW5hYmxlZCB0b1xcbitcXHRcXHQgKiBzdG9yZSBpdHMgZGlydHkgYml0bWFwLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGNoYW5nZSAhPSBLVk1fTVJfREVMRVRFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhKG5ldy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUykpXFxuK1xcdFxcdFxcdFdBUk4oa3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oa3ZtKSxcXG4rXFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIHN0b3AgbWlncmF0aW9uIG1vZGVcXFwiKTtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGNoYW5nZSA9PSBLVk1fTVJfRkxBR1NfT05MWSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xcbi1cXHRpZiAoIW1jKSB7XFxuLVxcdFxcdHJjID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuK1xcdGlmICghbWMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbityZXRyeTpcXG4gXFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKSB7XFxuK1xcdFxcdGlmIChrdm0tXFx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgXFx1MDAyNlxcdTAwMjYga3ZtLVxcdTAwM2VhcmNoLnVzZV9jbW1hIFxcdTAwMjZcXHUwMDI2IG9sZCkge1xcbitcXHRcXHRcXHRfZGF0X3dhbGtfZ2ZuX3JhbmdlKG9sZC1cXHUwMDNlYmFzZV9nZm4sIG9sZC1cXHUwMDNlYmFzZV9nZm4gKyBvbGQtXFx1MDAzZW5wYWdlcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBcXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMpO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRzd2l0Y2ggKGNoYW5nZSkge1xcbiBcXHRcXHRjYXNlIEtWTV9NUl9ERUxFVEU6XFxuIFxcdFxcdFxcdHJjID0gZGF0X2RlbGV0ZV9zbG90KG1jLCBrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZSwgb2xkLVxcdTAwM2ViYXNlX2dmbiwgb2xkLVxcdTAwM2VucGFnZXMpO1xcbkBAIC01ODI3LDE0ICs1ODUxLDIxIEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRjYXNlIEtWTV9NUl9GTEFHU19PTkxZOlxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0cmMgPSAwO1xcbiBcXHRcXHRcXHRXQVJOKDEsIFxcXCJVbmtub3duIEtWTSBNUiBDSEFOR0U6ICVkXFxcXG5cXFwiLCBjaGFuZ2UpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tb3V0Olxcbi1cXHRpZiAocmMpXFxuLVxcdFxcdHByX3dhcm4oXFxcImZhaWxlZCB0byBjb21taXQgbWVtb3J5IHJlZ2lvblxcXFxuXFxcIik7XFxuLVxcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcXG4tXFx0cmV0dXJuO1xcbitcXHRpZiAocmMgPT0gLUVOT01FTSkge1xcbitcXHRcXHRyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7XFxuK1xcdFxcdGlmICghcmMpXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbit2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxcbitcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsIGVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpXFxuK3tcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcXG5pbmRleCBhZDBkZGM0MzNhNzNjLi5iMWJhMjRjMzQ2ZWZhIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHJpdi5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcXG5AQCAtMjg5LDYgKzI4OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lza2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBzdGF0aWMgaW50IGhhbmRsZV9ycmJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGdhZGRyO1xcbitcXHR1bmlvbiBza2V5IHNrZXk7XFxuIFxcdGludCByZWcxLCByZWcyO1xcbiBcXHRpbnQgcmM7XFxuIFxcbkBAIC0zMDcsMTIgKzMwOCwxMiBAQCBzdGF0aWMgaW50IGhhbmRsZV9ycmJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0Z2FkZHIgPSBrdm1fczM5MF9sb2dpY2FsX3RvX2VmZmVjdGl2ZSh2Y3B1LCBnYWRkcik7XFxuIFxcdGdhZGRyID0ga3ZtX3MzOTBfcmVhbF90b19hYnModmNwdSwgZ2FkZHIpO1xcbiBcXHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfbG9jaylcXG4tXFx0XFx0cmMgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh2Y3B1LVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpKTtcXG4rXFx0XFx0cmMgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh2Y3B1LVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpLCBcXHUwMDI2c2tleSk7XFxuIFxcdGlmIChyYyBcXHUwMDNlIDApXFxuIFxcdFxcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgcmMpO1xcbiBcXHRpZiAocmMgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuLVxcdGt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgcmMpO1xcbitcXHRrdm1fczM5MF9zZXRfcHN3X2NjKHZjcHUsIChza2V5LnNrZXkgXFx1MDAzZVxcdTAwM2UgMSkgXFx1MDAyNiAzKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTEyNjAsOCArMTI2MSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHQvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqL1xcbiBcXHRcXHRrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlbW11X2xvY2spXFxuLVxcdFxcdFxcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcXG4rXFx0XFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2spXFxuK1xcdFxcdFxcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9sb2NrKVxcbitcXHRcXHRcXHRcXHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XFxuIFxcdFxcdGlmIChpIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIGk7XFxuIFxcdFxcdC8qIEFjY291bnQgZm9yIHRoZSBwb3NzaWJsZSBleHRyYSBjYnJsIGVudHJ5ICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xcbmluZGV4IDFiZWFjYzg0MWNhODUuLmIwMmUwMTU5ZDNjZDIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wdi5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9wdi5jXFxuQEAgLTI0NCw2ICsyNDQsMjQgQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfY2xlYXJfcHZfc3RhdGUoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRrdm0tXFx1MDAzZWFyY2gucHYuc3Rvcl92YXIgPSBOVUxMO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBrdm1fczM5MF9wdl9kaXNwb3NlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZnJlZV9zdG9yX2Jhc2UpXFxuK3tcXG4rXFx0aWYgKGZyZWVfc3Rvcl9iYXNlKVxcbitcXHRcXHRmcmVlX3BhZ2VzKHZjcHUtXFx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTtcXG4rXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNpZGFfYWRkcih2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jaykpO1xcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlcHZfaGFuZGxlX2NwdSA9IDA7XFxuK1xcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2Vwdl9oYW5kbGVfY29uZmlnID0gMDtcXG4rXFx0bWVtc2V0KFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnB2LCAwLCBzaXplb2YodmNwdS1cXHUwMDNlYXJjaC5wdikpO1xcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlc2RmID0gMDtcXG4rXFx0LypcXG4rXFx0ICogVGhlIHNpZGFkIGZpZWxkIChmb3Igc2RmID09IDIpIGlzIG5vdyB0aGUgZ2JlYSBmaWVsZCAoZm9yIHNkZiA9PSAwKS5cXG4rXFx0ICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mXFxuK1xcdCAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuXFxuK1xcdCAqL1xcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlZ2JlYSA9IDE7XFxuK1xcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpO1xcbit9XFxuK1xcbiBpbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcXG4ge1xcbiBcXHRpbnQgY2M7XFxuQEAgLTI1OCwyNCArMjc2LDkgQEAgaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXFxuIFxcdFdBUk5fT05DRShjYywgXFxcInByb3R2aXJ0IGRlc3Ryb3kgY3B1IGZhaWxlZCByYyAleCBycmMgJXhcXFwiLCAqcmMsICpycmMpO1xcbiBcXG4gXFx0LyogSW50ZW5kZWQgbWVtb3J5IGxlYWsgZm9yIHNvbWV0aGluZyB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4uICovXFxuLVxcdGlmICghY2MpXFxuLVxcdFxcdGZyZWVfcGFnZXModmNwdS1cXHUwMDNlYXJjaC5wdi5zdG9yX2Jhc2UsXFxuLVxcdFxcdFxcdCAgIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2NwdV9zdG9yX2xlbikpO1xcbi1cXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNpZGFfYWRkcih2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jaykpO1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlcHZfaGFuZGxlX2NwdSA9IDA7XFxuLVxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2Vwdl9oYW5kbGVfY29uZmlnID0gMDtcXG4tXFx0bWVtc2V0KFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnB2LCAwLCBzaXplb2YodmNwdS1cXHUwMDNlYXJjaC5wdikpO1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlc2RmID0gMDtcXG4tXFx0LypcXG4tXFx0ICogVGhlIHNpZGFkIGZpZWxkIChmb3Igc2RmID09IDIpIGlzIG5vdyB0aGUgZ2JlYSBmaWVsZCAoZm9yIHNkZiA9PSAwKS5cXG4tXFx0ICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mXFxuLVxcdCAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuXFxuLVxcdCAqL1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlZ2JlYSA9IDE7XFxuLVxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpO1xcbitcXHRrdm1fczM5MF9wdl9kaXNwb3NlX2NwdSh2Y3B1LCAhY2MpO1xcbiBcXG4tXFx0cmV0dXJuIGNjID8gRUlPIDogMDtcXG4rXFx0cmV0dXJuIGNjID8gLUVJTyA6IDA7XFxuIH1cXG4gXFxuIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXFxuQEAgLTMxOSw5ICszMjIsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbiBcXHRcXHQgICAgIHV2Y2IuaGVhZGVyLnJyYyk7XFxuIFxcbiBcXHRpZiAoY2MpIHtcXG4tXFx0XFx0dTE2IGR1bW15O1xcbi1cXG4tXFx0XFx0a3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUodmNwdSwgXFx1MDAyNmR1bW15LCBcXHUwMDI2ZHVtbXkpO1xcbitcXHRcXHRrdm1fczM5MF9wdl9kaXNwb3NlX2NwdSh2Y3B1LCB0cnVlKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdH1cXG4gXFxuQEAgLTgwOSw3ICs4MTAsNyBAQCBzdGF0aWMgaW50IHVucGFja19vbmUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIsIHU2NCB0d2VhayxcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FQUdBSU4pXFxuK1xcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FQUdBSU4gXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FSU5UUilcXG4gXFx0XFx0S1ZNX1VWX0VWRU5UKGt2bSwgMywgXFxcIlBST1RWSVJUIFZNIFVOUEFDSzogZmFpbGVkIGFkZHIgJWxseCB3aXRoIHJjICV4IHJyYyAleFxcXCIsXFxuIFxcdFxcdFxcdCAgICAgdXZjYi5nYWRkciwgKnJjLCAqcnJjKTtcXG4gXFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDI6NTQuODIzOTk2ODA4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQyNzIxODc0NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZtX2lvY3RsXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2NyZWF0ZVwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiLFxuICAgIFwia3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJrdm1fczM5MF9wdl9jcmVhdGVfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9wdl9kZXN0cm95X2NwdVwiLFxuICAgIFwiZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRcIixcbiAgICBcImt2bV9zMzkwX2ZhdWx0aW5fZ2ZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBzdWJzeXN0ZW0sIGluY2x1ZGluZyBmaXhlcyBmb3IgbWVtb3J5IGxlYWtzLCBsb2NraW5nLCBpbml0aWFsaXphdGlvbiByYWNlcywgYW5kIHNpZ25hbCBoYW5kbGluZyBkdXJpbmcgcGFnZSBmYXVsdHMuIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIGlvY3RscywgbWVtb3J5IHJlZ2lvbiBtYW5hZ2VtZW50LCBhbmQgUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgQ1BVIGxpZmVjeWNsZSBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgbWVtb3J5IGFjY2Vzc2VzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjY3YjIyZWI5YzMzOTgxOTFlZDFmOTBkMzU5NjVkY2M2OGVhZjkxM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDY6NDI6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCBlYWEzNGM1YmQzYzExLi5lZGY3NWI2YWQyMGNlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtNDQwLDYgKzQ0MCw3IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdGJvb2wgc2tleV9lbmFibGVkO1xuIFx0LyogSW5kaWNhdG9yIGlmIHRoZSBhY2Nlc3MgcmVnaXN0ZXJzIGhhdmUgYmVlbiBsb2FkZWQgZnJvbSBndWVzdCAqL1xuIFx0Ym9vbCBhY3JzX2xvYWRlZDtcbitcdGJvb2wgaW5pdGlhbGl6ZWQ7XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfcHZfdmNwdSBwdjtcbiBcdHVuaW9uIGRpYWczMThfaW5mbyBkaWFnMzE4X2luZm87XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuaW5kZXggZWQ0MjU5ZDE3NjI5NS4uM2YyZDZlODkwMmQ3NiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbkBAIC03NTUsMTMgKzc1NSwxNSBAQCBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZlxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi1pbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pXG4raW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KVxuIHtcbiBcdHVuaW9uIHBnc3RlIHBnc3RlLCBvbGQ7XG4gXHR1bmlvbiBjcnN0ZSAqY3JzdGVwO1xuIFx0dW5pb24gcHRlICpwdGVwO1xuIFx0aW50IHJjO1xuIFxuK1x0c2tleS1cdTAwM2Vza2V5ID0gMDtcbitcbiBcdHJjID0gZGF0X2VudHJ5X3dhbGsoTlVMTCwgZ2ZuLCBhc2NlLCBEQVRfV0FMS19BTlksIFRBQkxFX1RZUEVfUEFHRV9UQUJMRSwgXHUwMDI2Y3JzdGVwLCBcdTAwMjZwdGVwKTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuQEAgLTc3MSwyMSArNzczLDIzIEBAIGludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbilcbiBcbiBcdFx0aWYgKCFjcnN0ZS5oLmZjIHx8ICFjcnN0ZS5zLmZjMS5wcilcbiBcdFx0XHRyZXR1cm4gMDtcbi1cdFx0cmV0dXJuIHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChsYXJnZV9jcnN0ZV90b19waHlzKCpjcnN0ZXAsIGdmbikpO1xuK1x0XHRza2V5LVx1MDAzZXNrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKSBcdTAwM2NcdTAwM2MgMTtcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRvbGQgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcbiBcdHBnc3RlID0gb2xkO1xuIFxuIFx0aWYgKCFwdGVwLVx1MDAzZWguaSkge1xuLVx0XHRyYyA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSk7XG4tXHRcdHBnc3RlLmhyID0gcmMgXHUwMDNlXHUwMDNlIDE7XG4rXHRcdHNrZXktXHUwMDNlc2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSkgXHUwMDNjXHUwMDNjIDE7XG4rXHRcdHBnc3RlLmhyID0gc2tleS1cdTAwM2VyO1xuIFx0fVxuLVx0cmMgfD0gKHBnc3RlLmdyIFx1MDAzY1x1MDAzYyAxKSB8IHBnc3RlLmdjO1xuK1x0c2tleS1cdTAwM2VyIHw9IHBnc3RlLmdyO1xuK1x0c2tleS1cdTAwM2VjIHw9IHBnc3RlLmdjO1xuIFx0cGdzdGUuZ3IgPSAwO1xuIFxuIFx0ZGF0X3VwZGF0ZV9wdGVwX3NkKG9sZCwgcGdzdGUsIHB0ZXApO1xuIFx0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XG4tXHRyZXR1cm4gcmM7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGxvbmcgZGF0X3Jlc2V0X3NrZXlzX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuQEAgLTg0Niw2ICs4NTAsNyBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxuIFx0c3RydWN0IHNsb3RfcHJpdiAqcCA9IHdhbGstXHUwMDNlcHJpdjtcbiBcdHVuaW9uIGNyc3RlIGR1bW15ID0geyAudmFsID0gcC1cdTAwM2V0b2tlbiB9O1xuIFx0dW5pb24gcHRlIG5ld19wdGUsIHB0ZSA9IFJFQURfT05DRSgqcHRlcCk7XG4rXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbiBcbiBcdG5ld19wdGUgPSBfUFRFX1RPSyhkdW1teS50b2sudHlwZSwgZHVtbXkudG9rLnBhcik7XG4gXG5AQCAtODUzLDcgKzg1OCwxMSBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxuIFx0aWYgKHB0ZS52YWwgPT0gbmV3X3B0ZS52YWwpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZGF0X3B0ZXBfeGNoZyhwdGVwLCBuZXdfcHRlLCBnZm4sIHdhbGstXHUwMDNlYXNjZSwgZmFsc2UpO1xuK1x0cGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcbitcdHBnc3RlID0gX19kYXRfcHRlcF94Y2hnKHB0ZXAsIHBnc3RlLCBuZXdfcHRlLCBnZm4sIHdhbGstXHUwMDNlYXNjZSwgZmFsc2UpO1xuK1x0cGdzdGUuY21tYV9kID0gMDtcbitcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmggYi9hcmNoL3MzOTAva3ZtL2RhdC5oXG5pbmRleCBmYWQ2MDUzMDVlMDVjLi4xNDFlZTdiOWYwMTkxIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuaFxuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuaFxuQEAgLTUzNyw3ICs1MzcsNyBAQCBpbnQgZGF0X3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZlxuIFx0XHRcdHVuaW9uIHNrZXkgc2tleSwgYm9vbCBucSk7XG4gaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRcdCAgICAgdW5pb24gc2tleSBza2V5LCB1bmlvbiBza2V5ICpvbGRrZXksIGJvb2wgbnEsIGJvb2wgbXIsIGJvb2wgbWMpO1xuLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbik7XG4raW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KTtcbiBsb25nIGRhdF9yZXNldF9za2V5cyh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KTtcbiBcbiB1bnNpZ25lZCBsb25nIGRhdF9nZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0pO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbmluZGV4IGZlZTgwMDQ3YmQ5NGYuLjNjYzQ1ZjdmNWIyZDcgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbkBAIC05MSw5ICs5MSw5IEBAIGludCBrdm1fczM5MF9mYXVsdGluX2dmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhXG4gXHRcdC8qIEFjY2VzcyBvdXRzaWRlIG1lbW9yeSwgYWRkcmVzc2luZyBleGNlcHRpb24uICovXG4gXHRcdGlmIChpc19ub3Nsb3RfcGZuKGYtXHUwMDNlcGZuKSlcbiBcdFx0XHRyZXR1cm4gUEdNX0FERFJFU1NJTkc7XG4tXHRcdC8qIFNpZ25hbCBwZW5kaW5nOiB0cnkgYWdhaW4uICovXG4tXHRcdGlmIChmLVx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9TSUdQRU5ESU5HKVxuLVx0XHRcdHJldHVybiAtRUFHQUlOO1xuK1x0XHQvKiBGYXRhbCBzaWduYWwgcGVuZGluZzogYmFpbCBvdXQuICovXG4rXHRcdGlmIChpc19zaWdwZW5kaW5nX3BmbihmLVx1MDAzZXBmbikpXG4rXHRcdFx0cmV0dXJuIC1FSU5UUjtcbiBcdFx0LyogQ2hlY2sgaWYgaXQncyByZWFkLW9ubHkgbWVtb3J5OyBkb24ndCB0cnkgdG8gYWN0dWFsbHkgaGFuZGxlIHRoYXQgY2FzZS4gKi9cbiBcdFx0aWYgKGYtXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1JPX0ZBVUxUKVxuIFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuaW5kZXggOWUzZTZiMGQ3MmFkNi4uNjAxM2YyOGUzNDYxZiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbkBAIC00NSwxMyArNDUsMTYgQEAgc3RhdGljIHN0cnVjdCBrdm1fczM5MF9naWIgKmdpYjtcbiBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXG4ge1xuIFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuLVx0dW5pb24gZXNjYV9zaWdwX2N0cmwgc2lncF9jdHJsID0gc2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbitcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybDtcbiBcbiBcdGlmICgha3ZtX3MzOTBfdGVzdF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdGlmIChLVk1fQlVHX09OKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSksIHZjcHUtXHUwMDNla3ZtKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTtcbiBcbitcdHNpZ3BfY3RybCA9IHNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4gXHRpZiAoc3JjX2lkKVxuIFx0XHQqc3JjX2lkID0gc2lncF9jdHJsLnNjbjtcbiBcbkBAIC02MCwxMyArNjMsMTYgQEAgc3RhdGljIGludCBzY2FfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqc3JjX2lkKVxuIFxuIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXG4ge1xuLVx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuLVx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4gXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCBvbGRfdmFsLCBuZXdfdmFsID0gey5zY24gPSBzcmNfaWQsIC5jID0gMX07XG4rXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4rXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsO1xuIFx0aW50IGV4cGVjdCwgcmM7XG4gXG4gXHRCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTtcbitcdGlmIChLVk1fQlVHX09OKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSksIHZjcHUtXHUwMDNla3ZtKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRzaWdwX2N0cmwgPSBcdTAwMjZzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuIFx0b2xkX3ZhbCA9IFJFQURfT05DRSgqc2lncF9jdHJsKTtcbiBcdG9sZF92YWwuYyA9IDA7XG4gXG5AQCAtODQsMTAgKzkwLDEzIEBAIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXG4gc3RhdGljIHZvaWQgc2NhX2NsZWFyX2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4tXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbitcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmw7XG4gXG4tXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxuK1x0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkIHx8IGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdHJldHVybjtcbitcbitcdC8qIEluaXRpYWxpemUgYWZ0ZXIgdGhlIGFib3ZlIGNoZWNrLCB0byBwcmV2ZW50IGdvaW5nIG91dCBvZiBib3VuZHMgKi9cbitcdHNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4gXHRrdm1fczM5MF9jbGVhcl9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpO1xuIFxuIFx0V1JJVEVfT05DRShzaWdwX2N0cmwtXHUwMDNldmFsdWUsIDApO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuaW5kZXggMTUwYjVkZDIxNzBlMi4uNjY4MjcyZGZmYTE4YiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5AQCAtNTcxLDcgKzU3MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wXG4gXHRzd2l0Y2ggKG9wKSB7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1NTS0U6XG4gXHRcdHIgPSBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkobWMsIGFzY2UsIGdmbiwgc2tleSwgXHUwMDI2c2tleSwgMCwgMCwgMCk7XG4tXHRcdGlmIChyIFx1MDAzZT0gMClcbitcdFx0aWYgKHIgPT0gMCB8fCByID09IDEpXG4gXHRcdFx0cmV0dXJuIHNrZXkuc2tleTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX0lTS0U6XG5AQCAtNTgwLDE0ICs1ODAsMTQgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3BcbiBcdFx0XHRyZXR1cm4gc2tleS5za2V5O1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfUlJCRTpcbi1cdFx0ciA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KGFzY2UsIGdmbik7XG4tXHRcdGlmIChyIFx1MDAzZSAwKVxuLVx0XHRcdHJldHVybiByIFx1MDAzY1x1MDAzYyAxO1xuK1x0XHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuLCBcdTAwMjZza2V5KTtcbitcdFx0aWYgKCFyKVxuK1x0XHRcdHJldHVybiBza2V5LnNrZXk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4tXHRyZXR1cm4gcjtcbitcdHJldHVybiByIFx1MDAzZSAwID8gLUVGQVVMVCA6IHI7XG4gfVxuIFxuIC8qIFNlY3Rpb246IGRldmljZSByZWxhdGVkICovXG5AQCAtMTIxOSw4ICsxMjE5LDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChzdHJ1Y3Qga3ZtICprdm0sIGludCByZXEpXG4gXG4gLypcbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cdTAwM2VzcmN1IGhlbGQgdG8gYXZvaWQgcmFjZXMgb24gbWVtc2xvdHMsIGFuZCB3aXRoXG4tICoga3ZtLVx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksXG4tICogYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cbisgKiBrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxuKyAqIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4gICovXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIHtcbkBAIC0xMjY1LDcgKzEyNjUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4gfVxuIFxuIC8qXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcbisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG4gICoga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKCkgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cbiAgKi9cbiBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbkBAIC0xMzAwLDcgKzEzMDAsOSBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxuIHtcbiBcdGludCByZXMgPSAtRU5YSU87XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcdGd1YXJkKHNyY3UpKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbitcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbitcbiBcdHN3aXRjaCAoYXR0ci1cdTAwM2VhdHRyKSB7XG4gXHRjYXNlIEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVDpcbiBcdFx0cmVzID0ga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKGt2bSk7XG5AQCAtMTMxMSw3ICsxMzEzLDYgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiBcbiBcdHJldHVybiByZXM7XG4gfVxuQEAgLTIyMTQsNyArMjIxNSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuIFx0fVxuIFxuIFx0a3ZmcmVlKGtleXMpO1xuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG5AQCAtMjI3Niw3ICsyMjc3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG4gXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XG4gb3V0OlxuIFx0a3ZmcmVlKGtleXMpO1xuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gLypcbkBAIC0yMzg2LDcgKzIzODcsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxuIFxuIFx0c2V0X2JpdChHTUFQX0ZMQUdfVVNFU19DTU0sIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlZmxhZ3MpO1xuIFxuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gLyoqXG5AQCAtMjkzNCw2ICsyOTM1LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0Y2FzZSBLVk1fUzM5MF9JTlRFUlJVUFQ6IHtcbiBcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50O1xuIFxuK1x0XHRyID0gLUVJTlZBTDtcbitcdFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxuK1x0XHRcdGJyZWFrO1xuIFx0XHRyID0gLUVGQVVMVDtcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMzOTBpbnQsIGFyZ3AsIHNpemVvZihzMzkwaW50KSkpXG4gXHRcdFx0YnJlYWs7XG5AQCAtMjk5OCw5ICszMDAyLDggQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyID0gLUVGQVVMVDtcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmFyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuLVx0XHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFx1MDAyNmFyZ3MpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuK1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spXG4rXHRcdFx0ciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbiBcdFx0aWYgKCFyKSB7XG4gXHRcdFx0ciA9IGNvcHlfdG9fdXNlcihhcmdwLCBcdTAwMjZhcmdzLCBzaXplb2YoYXJncykpO1xuIFx0XHRcdGlmIChyKVxuQEAgLTMwMTQsOSArMzAxNyw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhcmdzLCBhcmdwLCBzaXplb2YoYXJncykpKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcdFx0ciA9IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcdGNhc2UgS1ZNX1MzOTBfUFZfQ09NTUFORDoge1xuQEAgLTM0NjEsNyArMzQ2NCw3IEBAIHN0YXRpYyB2b2lkIHNjYV9kZWxfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuIFxuLVx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSlcbitcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Y2xlYXJfYml0X2ludih2Y3B1LVx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVx1MDAzZW1jbik7XG5AQCAtMzQ4MSw4ICszNDg0LDggQEAgc3RhdGljIHZvaWQgc2NhX2FkZF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXG4gXHRcdHJldHVybjtcbiBcbitcdFdSSVRFX09OQ0Uoc2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNkYSwgdmlydF90b19waHlzKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbiBcdHNldF9iaXRfaW52KHZjcHUtXHUwMDNldmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtXHUwMDNlbWNuKTtcbi1cdHNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zZGEgPSB2aXJ0X3RvX3BoeXModmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc2NhX2Nhbl9hZGRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbkBAIC0zNjEzLDYgKzM2MTYsOSBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS1cdTAwM2Vrdm0sIDc0KSB8fCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnVzZXJfaW5zdHIwIHx8XG4gXHQgICAgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC51c2VyX29wZXJleGVjKVxuIFx0XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWljdGwgfD0gSUNUTF9PUEVSRVhDO1xuK1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4ga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oKSBhbmQga3ZtX2FyY2hfdmNwdV9pb2N0bCgpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBrdm1faGFzX3Bja21vX3N1YmZ1bmMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG5yKVxuQEAgLTM2NzQsNyArMzY4MCw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiB2b2lkIGt2bV9zMzkwX3ZjcHVfdW5zZXR1cF9jbW1hKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8pKTtcbitcdGlmICh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKVxuK1x0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8pKTtcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8gPSAwO1xuIH1cbiBcbkBAIC0zNzkyLDIxICszNzk5LDIxIEBAIGludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitERUZJTkVfRlJFRShzaWVfcGFnZSwgc3RydWN0IHNpZV9wYWdlICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShfVCkpKVxuK1xuIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0c3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZTtcbitcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDtcbitcdHN0cnVjdCBzaWVfcGFnZSAqc2llX3BhZ2UgX19mcmVlKHNpZV9wYWdlKSA9IE5VTEw7XG4gXHRpbnQgcmM7XG4gXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzaWVfcGFnZSkgIT0gNDA5Nik7XG4tXHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XG4tXHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5tYylcbitcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuK1x0aWYgKCFtYylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRzaWVfcGFnZSA9IChzdHJ1Y3Qgc2llX3BhZ2UgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tXHRpZiAoIXNpZV9wYWdlKSB7XG4tXHRcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKHZjcHUtXHUwMDNlYXJjaC5tYyk7XG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5tYyA9IE5VTEw7XG4rXHRpZiAoIXNpZV9wYWdlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbiBcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2sgPSBcdTAwMjZzaWVfcGFnZS1cdTAwM2VzaWVfYmxvY2s7XG4gXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWl0ZGJhID0gdmlydF90b19waHlzKFx1MDAyNnNpZV9wYWdlLVx1MDAzZWl0ZGIpO1xuQEAgLTM4NDgsMTAgKzM4NTUsOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2Vrdm1fdmFsaWRfcmVncyB8PSBLVk1fU1lOQ19GUFJTO1xuIFxuIFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0cmMgPSAtRU5PTUVNO1xuIFx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfbmV3X2NoaWxkKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZ21hcCwgLTFVTCk7XG4gXHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLmdtYXApXG4tXHRcdFx0Z290byBvdXRfZnJlZV9zaWVfYmxvY2s7XG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRWTV9FVkVOVCh2Y3B1LVx1MDAzZWt2bSwgMywgXCJjcmVhdGUgY3B1ICVkIGF0IDB4JXAsIHNpZSBibG9jayBhdCAweCVwXCIsXG5AQCAtMzg1OSwyMCArMzg2NSwxOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0dHJhY2Vfa3ZtX3MzOTBfY3JlYXRlX3ZjcHUodmNwdS1cdTAwM2V2Y3B1X2lkLCB2Y3B1LCB2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKTtcbiBcbiBcdHJjID0ga3ZtX3MzOTBfdmNwdV9zZXR1cCh2Y3B1KTtcbi1cdGlmIChyYylcbi1cdFx0Z290byBvdXRfdWNvbnRyb2xfdW5pbml0O1xuK1x0aWYgKHJjKSB7XG4rXHRcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4rXHRcdFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlY2hpbGRyZW5fbG9jaylcbitcdFx0XHRcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbitcdFx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbitcdFx0fVxuK1x0XHRyZXR1cm4gcmM7XG4rXHR9XG4gXG4rXHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBub19mcmVlX3B0cihtYyk7XG4rXHRzaWVfcGFnZSA9IE5VTEw7XG4gXHRrdm1fczM5MF91cGRhdGVfdG9wb2xvZ3lfY2hhbmdlX3JlcG9ydCh2Y3B1LVx1MDAzZWt2bSwgMSk7XG4gXHRyZXR1cm4gMDtcbi1cbi1vdXRfdWNvbnRyb2xfdW5pbml0OlxuLVx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0Z21hcF9yZW1vdmVfY2hpbGQodmNwdS1cdTAwM2VhcmNoLmdtYXApO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbi1cdH1cbi1vdXRfZnJlZV9zaWVfYmxvY2s6XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbi1cdHJldHVybiByYztcbiB9XG4gXG4gaW50IGt2bV9hcmNoX3ZjcHVfcnVubmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTUwMzksNiArNTA0NCwxMCBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgIGt2bV9ydW4tXHUwMDNla3ZtX2RpcnR5X3JlZ3MgXHUwMDI2IH5LVk1fU1lOQ19TMzkwX1ZBTElEX0ZJRUxEUylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi9cbitcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHZjcHVfbG9hZCh2Y3B1KTtcbiBcbiBcdGlmIChndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpIHtcbkBAIC01NTIzLDYgKzU1MzIsMTAgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0bG9uZyByO1xuIFx0dTE2IHJjLCBycmM7XG4gXG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi9cbitcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHZjcHVfbG9hZCh2Y3B1KTtcbiBcbiBcdHN3aXRjaCAoaW9jdGwpIHtcbkBAIC01NzQ4LDExICs1NzYxLDMwIEBAIGJvb2wga3ZtX2FyY2hfaXJxY2hpcF9pbl9rZXJuZWwoc3RydWN0IGt2bSAqa3ZtKVxuIH1cbiBcbiAvKiBTZWN0aW9uOiBtZW1vcnkgcmVsYXRlZCAqL1xuK3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2Fsaylcbit7XG4rXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbitcbitcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4rXHRpZiAocGdzdGUuY21tYV9kKSB7XG4rXHRcdHBnc3RlLmNtbWFfZCA9IDA7XG4rXHRcdGF0b21pYzY0X2RlYyh3YWxrLVx1MDAzZXByaXYpO1xuK1x0fVxuK1x0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gaW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXG4gXHRcdFx0XHQgICBlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxuIHtcbitcdGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0geyAucHRlX2VudHJ5ID0gY21tYV9kX2NvdW50X3B0ZSwgfTtcbitcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDtcbitcdGludCByYyA9IC1FTk9NRU07XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuK1xuIFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pIFx1MDAyNlx1MDAyNiBuZXcgXHUwMDI2XHUwMDI2IG5ldy1cdTAwM2VpZCBcdTAwM2MgS1ZNX1VTRVJfTUVNX1NMT1RTKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC01Nzc1LDQzICs1ODA3LDM1IEBAIGludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0aWYgKCFrdm0tXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHQvKlxuLVx0ICogVHVybiBvZmYgbWlncmF0aW9uIG1vZGUgd2hlbjpcbi1cdCAqIC0gdXNlcnNwYWNlIGNyZWF0ZXMgYSBuZXcgbWVtc2xvdCB3aXRoIGRpcnR5IGxvZ2dpbmcgb2ZmLFxuLVx0ICogLSB1c2Vyc3BhY2UgbW9kaWZpZXMgYW4gZXhpc3RpbmcgbWVtc2xvdCAoTU9WRSBvciBGTEFHU19PTkxZKSBhbmRcbi1cdCAqICAgZGlydHkgbG9nZ2luZyBpcyB0dXJuZWQgb2ZmLlxuLVx0ICogTWlncmF0aW9uIG1vZGUgZXhwZWN0cyBkaXJ0eSBwYWdlIGxvZ2dpbmcgYmVpbmcgZW5hYmxlZCB0byBzdG9yZVxuLVx0ICogaXRzIGRpcnR5IGJpdG1hcC5cbi1cdCAqL1xuLVx0aWYgKGNoYW5nZSAhPSBLVk1fTVJfREVMRVRFIFx1MDAyNlx1MDAyNlxuLVx0ICAgICEobmV3LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUykpXG4tXHRcdFdBUk4oa3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oa3ZtKSxcbi1cdFx0ICAgICBcIkZhaWxlZCB0byBzdG9wIG1pZ3JhdGlvbiBtb2RlXCIpO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLVx0XHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxuLVx0XHRcdFx0Y29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LFxuLVx0XHRcdFx0ZW51bSBrdm1fbXJfY2hhbmdlIGNoYW5nZSlcbi17XG4tXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyA9IE5VTEw7XG4tXHRpbnQgcmMgPSAwO1xuK1x0aWYgKGt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFR1cm4gb2ZmIG1pZ3JhdGlvbiBtb2RlIHdoZW46XG4rXHRcdCAqIC0gdXNlcnNwYWNlIGNyZWF0ZXMgYSBuZXcgbWVtc2xvdCB3aXRoIGRpcnR5IGxvZ2dpbmcgb2ZmLFxuK1x0XHQgKiAtIHVzZXJzcGFjZSBtb2RpZmllcyBhbiBleGlzdGluZyBtZW1zbG90IChNT1ZFIG9yIEZMQUdTX09OTFkpXG4rXHRcdCAqICAgYW5kIGRpcnR5IGxvZ2dpbmcgaXMgdHVybmVkIG9mZi5cbitcdFx0ICogTWlncmF0aW9uIG1vZGUgZXhwZWN0cyBkaXJ0eSBwYWdlIGxvZ2dpbmcgYmVpbmcgZW5hYmxlZCB0b1xuK1x0XHQgKiBzdG9yZSBpdHMgZGlydHkgYml0bWFwLlxuK1x0XHQgKi9cbitcdFx0aWYgKGNoYW5nZSAhPSBLVk1fTVJfREVMRVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIShuZXctXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTKSlcbitcdFx0XHRXQVJOKGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKGt2bSksXG4rXHRcdFx0ICAgICBcIkZhaWxlZCB0byBzdG9wIG1pZ3JhdGlvbiBtb2RlXCIpO1xuK1x0fVxuIFxuIFx0aWYgKGNoYW5nZSA9PSBLVk1fTVJfRkxBR1NfT05MWSlcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gMDtcbiBcbiBcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuLVx0aWYgKCFtYykge1xuLVx0XHRyYyA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuK1x0aWYgKCFtYylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rcmV0cnk6XG4gXHRzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKSB7XG4rXHRcdGlmIChrdm0tXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gudXNlX2NtbWEgXHUwMDI2XHUwMDI2IG9sZCkge1xuK1x0XHRcdF9kYXRfd2Fsa19nZm5fcmFuZ2Uob2xkLVx1MDAzZWJhc2VfZ2ZuLCBvbGQtXHUwMDNlYmFzZV9nZm4gKyBvbGQtXHUwMDNlbnBhZ2VzLFxuK1x0XHRcdFx0XHQgICAga3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlLCBcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUyxcbitcdFx0XHRcdFx0ICAgIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMpO1xuK1x0XHR9XG4rXG4gXHRcdHN3aXRjaCAoY2hhbmdlKSB7XG4gXHRcdGNhc2UgS1ZNX01SX0RFTEVURTpcbiBcdFx0XHRyYyA9IGRhdF9kZWxldGVfc2xvdChtYywga3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlLCBvbGQtXHUwMDNlYmFzZV9nZm4sIG9sZC1cdTAwM2VucGFnZXMpO1xuQEAgLTU4MjcsMTQgKzU4NTEsMjEgQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdGNhc2UgS1ZNX01SX0ZMQUdTX09OTFk6XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4rXHRcdFx0cmMgPSAwO1xuIFx0XHRcdFdBUk4oMSwgXCJVbmtub3duIEtWTSBNUiBDSEFOR0U6ICVkXFxuXCIsIGNoYW5nZSk7XG4gXHRcdH1cbiBcdH1cbi1vdXQ6XG4tXHRpZiAocmMpXG4tXHRcdHByX3dhcm4oXCJmYWlsZWQgdG8gY29tbWl0IG1lbW9yeSByZWdpb25cXG5cIik7XG4tXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XG4tXHRyZXR1cm47XG4rXHRpZiAocmMgPT0gLUVOT01FTSkge1xuK1x0XHRyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbitcdHJldHVybiByYztcbit9XG4rXG4rdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcbitcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldywgZW51bSBrdm1fbXJfY2hhbmdlIGNoYW5nZSlcbit7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbmluZGV4IGFkMGRkYzQzM2E3M2MuLmIxYmEyNGMzNDZlZmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbkBAIC0yODksNiArMjg5LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaXNrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBnYWRkcjtcbitcdHVuaW9uIHNrZXkgc2tleTtcbiBcdGludCByZWcxLCByZWcyO1xuIFx0aW50IHJjO1xuIFxuQEAgLTMwNywxMiArMzA4LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0Z2FkZHIgPSBrdm1fczM5MF9sb2dpY2FsX3RvX2VmZmVjdGl2ZSh2Y3B1LCBnYWRkcik7XG4gXHRnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTtcbiBcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpKTtcbitcdFx0cmMgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh2Y3B1LVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSwgXHUwMDI2c2tleSk7XG4gXHRpZiAocmMgXHUwMDNlIDApXG4gXHRcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgcmMpO1xuIFx0aWYgKHJjIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmM7XG4tXHRrdm1fczM5MF9zZXRfcHN3X2NjKHZjcHUsIHJjKTtcbitcdGt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgKHNrZXkuc2tleSBcdTAwM2VcdTAwM2UgMSkgXHUwMDI2IDMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEyNjAsOCArMTI2MSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqL1xuIFx0XHRrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTtcbiBcdH0gZWxzZSB7XG4tXHRcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcbitcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spXG4rXHRcdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4rXHRcdFx0XHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XG4gXHRcdGlmIChpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuaW5kZXggMWJlYWNjODQxY2E4NS4uYjAyZTAxNTlkM2NkMiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHYuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9wdi5jXG5AQCAtMjQ0LDYgKzI0NCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9jbGVhcl9wdl9zdGF0ZShzdHJ1Y3Qga3ZtICprdm0pXG4gXHRrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IE5VTEw7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcmVlX3N0b3JfYmFzZSlcbit7XG4rXHRpZiAoZnJlZV9zdG9yX2Jhc2UpXG4rXHRcdGZyZWVfcGFnZXModmNwdS1cdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSwgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XG4rXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbitcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NwdSA9IDA7XG4rXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jb25maWcgPSAwO1xuK1x0bWVtc2V0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXHUwMDNlYXJjaC5wdikpO1xuK1x0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VzZGYgPSAwO1xuK1x0LypcbitcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXG4rXHQgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2ZcbitcdCAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuXG4rXHQgKi9cbitcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZ2JlYSA9IDE7XG4rXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcbit9XG4rXG4gaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4ge1xuIFx0aW50IGNjO1xuQEAgLTI1OCwyNCArMjc2LDkgQEAgaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gXHRXQVJOX09OQ0UoY2MsIFwicHJvdHZpcnQgZGVzdHJveSBjcHUgZmFpbGVkIHJjICV4IHJyYyAleFwiLCAqcmMsICpycmMpO1xuIFxuIFx0LyogSW50ZW5kZWQgbWVtb3J5IGxlYWsgZm9yIHNvbWV0aGluZyB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4uICovXG4tXHRpZiAoIWNjKVxuLVx0XHRmcmVlX3BhZ2VzKHZjcHUtXHUwMDNlYXJjaC5wdi5zdG9yX2Jhc2UsXG4tXHRcdFx0ICAgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XG4tXG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NwdSA9IDA7XG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jb25maWcgPSAwO1xuLVx0bWVtc2V0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXHUwMDNlYXJjaC5wdikpO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VzZGYgPSAwO1xuLVx0Lypcbi1cdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXG4tXHQgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2Zcbi1cdCAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuXG4tXHQgKi9cbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZ2JlYSA9IDE7XG4tXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcbitcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsICFjYyk7XG4gXG4tXHRyZXR1cm4gY2MgPyBFSU8gOiAwO1xuK1x0cmV0dXJuIGNjID8gLUVJTyA6IDA7XG4gfVxuIFxuIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG5AQCAtMzE5LDkgKzMyMiw3IEBAIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gXHRcdCAgICAgdXZjYi5oZWFkZXIucnJjKTtcbiBcbiBcdGlmIChjYykge1xuLVx0XHR1MTYgZHVtbXk7XG4tXG4tXHRcdGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHZjcHUsIFx1MDAyNmR1bW15LCBcdTAwMjZkdW1teSk7XG4rXHRcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsIHRydWUpO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcbkBAIC04MDksNyArODEwLDcgQEAgc3RhdGljIGludCB1bnBhY2tfb25lKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgdHdlYWssXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHR9XG4gXG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTilcbitcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUFHQUlOIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVJTlRSKVxuIFx0XHRLVk1fVVZfRVZFTlQoa3ZtLCAzLCBcIlBST1RWSVJUIFZNIFVOUEFDSzogZmFpbGVkIGFkZHIgJWxseCB3aXRoIHJjICV4IHJyYyAleFwiLFxuIFx0XHRcdCAgICAgdXZjYi5nYWRkciwgKnJjLCAqcnJjKTtcbiBcdHJldHVybiByZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0Mjo1NC44MjM5OTgyNzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDgxMjE1MTYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHMzOTAgS1ZNIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggdGFyZ2V0aW5nIHMzOTAgS1ZNLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgc3VnZ2VzdHMgYSBzZXQgb2YgcmVmaW5lbWVudHMgYW5kIGZpeGVzIGFjcm9zcyBzZXZlcmFsIGNyaXRpY2FsIGFyZWFzLiBGaXJzdCwgSSBzZWUgYSBuZXcgYm9vbGVhbiwgYGluaXRpYWxpemVkYCwgYmVpbmcgaW50cm9kdWNlZCB3aXRoaW4gYHN0cnVjdCBrdm1fdmNwdV9hcmNoYC4gVGhpcyBsaWtlbHkgYWRkcmVzc2VzIGluaXRpYWxpemF0aW9uIHJhY2VzLiBUaGVuIEkgYW0gZ29pbmcgdG8gc2VlIGhvdyBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgIGlzIG5vdyB0YWtpbmcgYSBgdW5pb24gc2tleSAqc2tleWAgcGFyYW1ldGVyIGFuZCByZXR1cm5pbmcgdGhlIHNrZXkgdmlhIHBvaW50ZXIgYW5kIGFsc28gaG93IGBfZGF0X3Nsb3RfcHRlYCBjbGVhcnMgYHBnc3RlLmNtbWFfZGAgZHVyaW5nIFBURSBleGNoYW5nZXMuIFRoZXNlIGluZGljYXRlIGNoYW5nZXMgaW4gU2VjdXJlIEtleSBtYW5hZ2VtZW50IGFuZCBDTU1Bcy5cblxuVGhlIGNoYW5nZSBpbiBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gIGlzIGltbWVkaWF0ZWx5IGFwcGFyZW50LiBXZSdyZSBzaGlmdGluZyBmcm9tIHJldHJ5aW5nIG9uIGBLVk1fUEZOX0VSUl9TSUdQRU5ESU5HYCB0byBiYWlsaW5nIG91dCB3aXRoIGBFSU5UUmAgd2hlbiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGlzIGlzIGEgc2Vuc2libGUgY2hhbmdlIGluIGVycm9yIGhhbmRsaW5nLlxuXG5UaGUgaW50cm9kdWN0aW9uIG9mIGNoZWNrcyBmb3IgYGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSlgIGFuZCBgdmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkYCB3aXRoaW4gdGhlIGludGVycnVwdCBoYW5kbGluZyBmdW5jdGlvbnMgKGBzY2FfZXh0X2NhbGxfcGVuZGluZ2AsIGBzY2FfaW5qZWN0X2V4dF9jYWxsYCwgYW5kIGBzY2FfY2xlYXJfZXh0X2NhbGxgKSBpbW1lZGlhdGVseSBjYXB0dXJlcyBteSBhdHRlbnRpb24uIFRoaXMgc3VnZ2VzdHMgdGlnaHRlciBjb250cm9sIGFuZCBwb3RlbnRpYWxseSBzZWN1cml0eS1yZWxhdGVkIHJlZmluZW1lbnRzIGZvciBVc2VyIENvbnRyb2wgc2NlbmFyaW9zLlxuXG5Mb29raW5nIGF0IGBrdm0tczM5MC5jYCwgSSBzZWUgdGhhdCBga3ZtX3MzOTBfa2V5b3BgIGlzIHVwZGF0ZWQgdG8gdGhlIG5ldyBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgIHNpZ25hdHVyZS4gVGhlIGxvY2tpbmcgc3RyYXRlZ3kgZm9yIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCBhcHBlYXJzIHRvIGJlIHJlZmluZWQsIHNoaWZ0aW5nIHRvIGBzcmN1YCBhbmQgYG11dGV4YCBndWFyZHMsIHdoaWNoIGNvdWxkIGhhdmUgaW1wbGljYXRpb25zIG9uIGNvbmN1cnJlbmN5LiBUaGUgZXJyb3IgcmV0dXJuIHZhbHVlcyBoYXZlIGJlZW4gaG9tb2dlbml6ZWQgdG8gYC1FRkFVTFRgIGluIHNldmVyYWwgYGt2bV9zMzkwX2AgZnVuY3Rpb25zLiBUaGUgdXNlIG9mIGBzbG90c19hcmNoX2xvY2tgIGNvbnNpc3RlbnRseSB3aXRoaW4gdGhlIHJlbGV2YW50IGlvY3RscyBhbmQgdGhlIHNjYSBmdW5jdGlvbnMgZm9yIGFkZGluZyBhbmQgZGVsZXRpbmcgdkNQVXMgc2VlbXMgdG8gYmUgYSBzaWduaWZpY2FudCBsb2NraW5nIHN0cmF0ZWd5IGNoYW5nZS4gSW1wb3J0YW50bHksIEkgbm90ZSB0aGUgdXNlIG9mIGBzbXBfc3RvcmVfcmVsZWFzZWAgd2hlbiBzZXR0aW5nIGB2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQgPSB0cnVlYCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbWVtb3J5IG9yZGVyaW5nLiBUaGUgY2xlYW51cCBpbiBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgIGxldmVyYWdpbmcgYF9fZnJlZWAgbWFjcm9zIGFuZCB0aGUgZGlmZmVyZW50IGhhbmRsaW5nIG9mIGBrdm1faXNfdWNvbnRyb2xgIGFyZSBhbHNvIGludGVyZXN0aW5nLiBUaGUgY2hlY2tzIG9mIGBzbXBfbG9hZF9hY3F1aXJlYCBpbiB0aGUgcnVuIGFuZCBpb2N0bCBhcmUgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBpcyBjb3JyZWN0LiBGaW5hbGx5LCB0aGUgcmVmYWN0b3Jpbmcgb2YgbWVtb3J5IHJlZ2lvbiBwcmVwYXJhdGlvbiBhbmQgY29tbWl0IGxvb2tzIHNpZ25pZmljYW50LCB3aXRoIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgbm93IGhhbmRsaW5nIG1pZ3JhdGlvbiBhbmQgQ01NQSBtb2RlcyBpbiBjb25qdW5jdGlvbiB3aXRoIGBfZGF0X3dhbGtfZ2ZuX3JhbmdlYC5cblxuVGhlIGNvZGUgd2l0aGluIGBwcml2LmNgIGNvbmZpcm1zIHRoZSBuZXcgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCBzaWduYXR1cmUgaXMgaW4gdXNlIGFuZCB0aGF0IGBzbG90c19hcmNoX2xvY2tgIGlzIG5vdyBiZWluZyB0YWtlbiBhcm91bmQgdGhlIGBfX2RvX2Vzc2FgIGluIGBoYW5kbGVfZXNzYWAuXG5cbkFuZCBmaW5hbGx5LCBgcHYuY2Agc2hvd3MgZnVuY3Rpb24gcmUtYXJyYW5nZW1lbnQgZm9yIENQVSBkaXNwb3NhbCBhbmQgdGhhdCBgLUVJTlRSYCBoYW5kbGluZyBpbiBgdW5wYWNrX29uZWAuXG5cbkluIHN1bW1hcnksIHRoaXMgc2VlbXMgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgczM5MCBLVk0gc3Vic3lzdGVtLCBhbmQgaXQncyBjZXJ0YWlubHkgd29ydGggZnV6emluZyB0byB1bmNvdmVyIGFueSByZW1haW5pbmcgaXNzdWVzLiBTaW5jZSBzeXprYWxsZXIgc3VwcG9ydHMgczM5MHggYW5kIEtWTSBvbiBzMzkweCwgdGhhdCBzZWVtcyBsaWtlIGEgdmlhYmxlIHBhdGguXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBJZGVhbGx5LCB0aGVzZSBzaG91bGQgYmUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBHaXZlbiB0aGUgcGF0Y2gsIHNvbWUgcHJvbWlzaW5nIGNhbmRpZGF0ZXMgaW5jbHVkZTpcblxuKiAgIGBrdm1fYXJjaF92bV9pb2N0bGA6IEEgZ2VuZXJhbCBpb2N0bCBlbnRyeXBvaW50LlxuKiAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YDogTm9uLXN0YXRpYyBhbmQgc2VlbXMgdG8gYmUgYSBnb29kIGVudHJ5IHBvaW50LlxuKiAgIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWA6IE5vbi1zdGF0aWMgYW5kIHNlZW1zIHRvIGJlIGEgZ29vZCBlbnRyeSBwb2ludC5cbiogICBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgOiBOb24tc3RhdGljIGFuZCBwYXJ0IG9mIGEgc2lnbmlmaWNhbnQgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlLlxuKiAgIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmA6IEFsc28gbW9kaWZpZWQgc2lnbmlmaWNhbnRseS5cblxuSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRvIGNvbmZpcm0gdGhhdCBDT05GSUdcXF9LVk0gaXMgc2V0LCBhbmQgY29uZmlybSB0aGVzZSBub24tc3RhdGljIGZ1bmN0aW9ucyBleGlzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjkzLCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjQzOjM5LjYzNjE1MjU2N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTI3OTM2NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZHxsb25nfGJvb2wpIFthLXpBLVowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEzNTQgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMzAtXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzozMTppbnQga3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jKVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMzIte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYz03Nj1zdHJ1Y3QgY3JzdF90YWJsZSAqZGF0X2FsbG9jX2Nyc3Rfc2xlZXBhYmxlKHVuc2lnbmVkIGxvbmcgaW5pdClcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtODktXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzo5MDp2b2lkIGRhdF9mcmVlX2xldmVsKHN0cnVjdCBjcnN0X3RhYmxlICp0YWJsZSwgYm9vbCBvd25zX3B0ZXMpXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy05MS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEwNC1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEwNTppbnQgZGF0X3NldF9hc2NlX2xpbWl0KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlICphc2NlLCBpbnQgbmV3dHlwZSlcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEwNi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTMwMj1zdGF0aWMgaW50IGRhdF9zcGxpdF9jcnN0ZShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gY3JzdGUgKmNyc3RlcCxcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMzc4LSAqL1xcbmFyY2gvczM5MC9rdm0vZGF0LmM6Mzc5OmludCBkYXRfZW50cnlfd2FsayhzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgZ2ZuX3QgZ2ZuLCB1bmlvbiBhc2NlIGFzY2UsIGludCBmbGFncyxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTM4MC1cXHRcXHQgICBpbnQgd2Fsa19sZXZlbCwgdW5pb24gY3JzdGUgKipsYXN0LCB1bmlvbiBwdGUgKipwdGVwcClcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmM9NTM0PXN0YXRpYyBsb25nIGRhdF9jcnN0ZV93YWxrX3JhbmdlKGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIHN0cnVjdCBjcnN0X3RhYmxlICp0YWJsZSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtNTk0LSAqL1xcbmFyY2gvczM5MC9rdm0vZGF0LmM6NTk1OmxvbmcgX2RhdF93YWxrX2dmbl9yYW5nZShnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCB1bmlvbiBhc2NlIGFzY2UsXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy01OTYtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgKm9wcywgaW50IGZsYWdzLCB2b2lkICpwcml2KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy02MTUtXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzo2MTY6aW50IGRhdF9nZXRfc3RvcmFnZV9rZXkodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy02MTcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYz02NTA9c3RhdGljIHZvaWQgZGF0X3VwZGF0ZV9wdGVwX3NkKHVuaW9uIHBnc3RlIG9sZCwgdW5pb24gcGdzdGUgcGdzdGUsIHVuaW9uIHB0ZSAqcHRlcClcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtNjU1LVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6NjU2OmludCBkYXRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbixcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTY1Ny1cXHRcXHRcXHR1bmlvbiBza2V5IHNrZXksIGJvb2wgbnEpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTcwMD1zdGF0aWMgYm9vbCBwYWdlX2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHBoeXNfYWRkcl90IHBhZGRyLCB1bmlvbiBza2V5IHNrZXksIHVuaW9uIHNrZXkgKm9sZGtleSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtNzEwLVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6NzExOmludCBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbW1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbixcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTcxMi1cXHRcXHRcXHQgICAgIHVuaW9uIHNrZXkgc2tleSwgdW5pb24gc2tleSAqb2xka2V5LCBib29sIG5xLCBib29sIG1yLCBib29sIG1jKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy03NTctXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzo3NTg6aW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtNzU5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmM9ODEzPXN0YXRpYyBsb25nIGRhdF9yZXNldF9za2V5c19jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtODMxLVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6ODMyOmxvbmcgZGF0X3Jlc2V0X3NrZXlzKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3Qgc3RhcnQpXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy04MzMte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYz05MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgZGF0X3Nsb3Rfb3BzID0ge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy05MDYtXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzo5MDc6aW50IGRhdF9zZXRfc2xvdChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxcbmFyY2gvczM5MC9rdm0vZGF0LmMtOTA4LVxcdFxcdCB1MTYgdHlwZSwgdTE2IHBhcmFtKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYz05NDQ9dW5zaWduZWQgbG9uZyBkYXRfZ2V0X3B0dmFsKHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IHB0dmFsX3BhcmFtIHBhcmFtKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy05NjEtXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzo5NjI6dm9pZCBkYXRfc2V0X3B0dmFsKHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IHB0dmFsX3BhcmFtIHBhcmFtLCB1bnNpZ25lZCBsb25nIHZhbClcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTk2My17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTk5MT1zdGF0aWMgY29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyB0ZXN0X2FnZV9vcHMgPSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEwMDYtICovXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMDA3OmJvb2wgZGF0X3Rlc3RfYWdlX2dmbih1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQpXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMDA4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmM9MTAzMD1zdGF0aWMgbG9uZyBkYXRfc2V0X3BuX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMDQzLVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTA0NDppbnQgZGF0X3NldF9wcmVmaXhfbm90aWZfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTA0NS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEwNzQtICovXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMDc1OmludCBkYXRfcGVyZm9ybV9lc3NhKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCBpbnQgb3JjLCB1bmlvbiBlc3NhX3N0YXRlICpzdGF0ZSwgYm9vbCAqZGlydHkpXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMDc2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmM9MTE1Nj1zdGF0aWMgbG9uZyBkYXRfcmVzZXRfY21tYV9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE2OS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjExNzA6bG9uZyBkYXRfcmVzZXRfY21tYSh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE3MS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTEyMDE9c3RhdGljIGxvbmcgX19kYXRfcGVla19jbW1hX2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjA5LVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIxMDppbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIxMS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTEyMjg9c3RhdGljIGxvbmcgX19kYXRfZ2V0X2NtbWFfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyNTUtXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMjU2OmludCBkYXRfZ2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCAqc3RhcnQsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMsIGF0b21pYzY0X3QgKnJlbSlcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyNTcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYz0xMjg2PXN0YXRpYyBsb25nIF9fZGF0X3NldF9jbW1hX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMzE4LSAqL1xcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTMxOTppbnQgZGF0X3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTMyMC1cXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25nIG1hc2ssIGNvbnN0IHVpbnQ4X3QgKmJpdHMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5oPTUyMT11bmlvbiBwZ3N0ZSBfX211c3RfY2hlY2sgX19kYXRfcHRlcF94Y2hnKHVuaW9uIHB0ZSAqcHRlcCwgdW5pb24gcGdzdGUgcGdzdGUsIHVuaW9uIHB0ZSBuZXcsXFxuYXJjaC9zMzkwL2t2bS9kYXQuaC01MjItXFx0XFx0XFx0XFx0XFx0IGdmbl90IGdmbiwgdW5pb24gYXNjZSBhc2NlLCBib29sIHVzZXNfc2tleXMpO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTIzOmJvb2wgZGF0X2Nyc3RlcF94Y2hnX2F0b21pYyh1bmlvbiBjcnN0ZSAqY3JzdGVwLCB1bmlvbiBjcnN0ZSBvbGQsIHVuaW9uIGNyc3RlIG5ldywgZ2ZuX3QgZ2ZuLFxcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTI0LVxcdFxcdFxcdCAgICB1bmlvbiBhc2NlIGFzY2UpO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTI1OnZvaWQgZGF0X2Nyc3RlcF94Y2hnKHVuaW9uIGNyc3RlICpjcnN0ZXAsIHVuaW9uIGNyc3RlIG5ldywgZ2ZuX3QgZ2ZuLCB1bmlvbiBhc2NlIGFzY2UpO1xcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTI2LVxcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTI3OmxvbmcgX2RhdF93YWxrX2dmbl9yYW5nZShnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCB1bmlvbiBhc2NlIGFzY2UsXFxuYXJjaC9zMzkwL2t2bS9kYXQuaC01MjgtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgKm9wcywgaW50IGZsYWdzLCB2b2lkICpwcml2KTtcXG5hcmNoL3MzOTAva3ZtL2RhdC5oLTUyOS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5oOjUzMDppbnQgZGF0X2VudHJ5X3dhbGsoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIGdmbl90IGdmbiwgdW5pb24gYXNjZSBhc2NlLCBpbnQgZmxhZ3MsXFxuYXJjaC9zMzkwL2t2bS9kYXQuaC01MzEtXFx0XFx0ICAgaW50IHdhbGtfbGV2ZWwsIHVuaW9uIGNyc3RlICoqbGFzdCwgdW5pb24gcHRlICoqcHRlcHApO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTMyOnZvaWQgZGF0X2ZyZWVfbGV2ZWwoc3RydWN0IGNyc3RfdGFibGUgKnRhYmxlLCBib29sIG93bnNfcHRlcyk7XFxuYXJjaC9zMzkwL2t2bS9kYXQuaC01MzMtc3RydWN0IGNyc3RfdGFibGUgKmRhdF9hbGxvY19jcnN0X3NsZWVwYWJsZSh1bnNpZ25lZCBsb25nIGluaXQpO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTM0OmludCBkYXRfc2V0X2FzY2VfbGltaXQoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgKmFzY2UsIGludCBuZXd0eXBlKTtcXG5hcmNoL3MzOTAva3ZtL2RhdC5oOjUzNTppbnQgZGF0X2dldF9zdG9yYWdlX2tleSh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSk7XFxuYXJjaC9zMzkwL2t2bS9kYXQuaDo1MzY6aW50IGRhdF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTM3LVxcdFxcdFxcdHVuaW9uIHNrZXkgc2tleSwgYm9vbCBucSk7XFxuYXJjaC9zMzkwL2t2bS9kYXQuaDo1Mzg6aW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTM5LVxcdFxcdFxcdCAgICAgdW5pb24gc2tleSBza2V5LCB1bmlvbiBza2V5ICpvbGRrZXksIGJvb2wgbnEsIGJvb2wgbXIsIGJvb2wgbWMpO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTQwOmludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSk7XFxuYXJjaC9zMzkwL2t2bS9kYXQuaDo1NDE6bG9uZyBkYXRfcmVzZXRfc2tleXModW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCk7XFxuYXJjaC9zMzkwL2t2bS9kYXQuaC01NDItXFxuYXJjaC9zMzkwL2t2bS9kYXQuaD01NDM9dW5zaWduZWQgbG9uZyBkYXRfZ2V0X3B0dmFsKHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IHB0dmFsX3BhcmFtIHBhcmFtKTtcXG5hcmNoL3MzOTAva3ZtL2RhdC5oOjU0NDp2b2lkIGRhdF9zZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0sIHVuc2lnbmVkIGxvbmcgdmFsKTtcXG5hcmNoL3MzOTAva3ZtL2RhdC5oLTU0NS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5oOjU0NjppbnQgZGF0X3NldF9zbG90KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXFxuYXJjaC9zMzkwL2t2bS9kYXQuaC01NDctXFx0XFx0IHUxNiB0eXBlLCB1MTYgcGFyYW0pO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTQ4OmludCBkYXRfc2V0X3ByZWZpeF9ub3RpZl9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTQ5OmJvb2wgZGF0X3Rlc3RfYWdlX2dmbih1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQpO1xcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTUwLVxcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTUxOmludCBkYXRfcGVyZm9ybV9lc3NhKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCBpbnQgb3JjLCB1bmlvbiBlc3NhX3N0YXRlICpzdGF0ZSwgYm9vbCAqZGlydHkpO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTUyOmxvbmcgZGF0X3Jlc2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydF9nZm4pO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTUzOmludCBkYXRfcGVla19jbW1hKGdmbl90IHN0YXJ0LCB1bmlvbiBhc2NlIGFzY2UsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMpO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTU0OmludCBkYXRfZ2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCAqc3RhcnQsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMsIGF0b21pYzY0X3QgKnJlbSk7XFxuYXJjaC9zMzkwL2t2bS9kYXQuaDo1NTU6aW50IGRhdF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbixcXG5hcmNoL3MzOTAva3ZtL2RhdC5oLTU1Ni1cXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25nIG1hc2ssIGNvbnN0IHVpbnQ4X3QgKmJpdHMpO1xcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTU3LVxcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTU4OmludCBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMpO1xcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTU5LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kaWFnLmM9MjY2PXN0YXRpYyBpbnQgX19kaWFnX3ZpcnRpb19oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kaWFnLmMtMzAxLVxcbmFyY2gvczM5MC9rdm0vZGlhZy5jOjMwMjppbnQga3ZtX3MzOTBfaGFuZGxlX2RpYWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vZGlhZy5jLTMwMy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0xNC1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzoxNTpib29sIGt2bV9hcmNoX3NldHVwX2FzeW5jX3BmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTYtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0zMi0gKi9cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzozMzppbnQga3ZtX3MzOTBfZmF1bHRpbl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYXVsdCAqZilcXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0zNC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0xMjgtXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6MTI5OmludCBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYXVsdCAqZiwgZ2ZuX3QgZ2ZuLCBib29sIHcpXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTMwLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5oLTE1LVxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5oOjE2OmludCBrdm1fczM5MF9mYXVsdGluX2dmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmKTtcXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uaDoxNzppbnQga3ZtX3MzOTBfZ2V0X2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmYsIGdmbl90IGdmbiwgYm9vbCB3KTtcXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uaC0xOC1cXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jPTExMj11bmlvbiBvYWMge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTMzLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjEzNDppbnQgaXB0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEzNS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYz0yMDI9c3RhdGljIHZvaWQgaXB0ZV91bmxvY2tfc2lpZihzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0yMTctXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6MjE4OnZvaWQgaXB0ZV9sb2NrKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0yMTkte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMjI1LVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjIyNjp2b2lkIGlwdGVfdW5sb2NrKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0yMjcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM9ODgyPXN0YXRpYyBpbnQgYWNjZXNzX2d1ZXN0X3BhZ2Vfd2l0aF9rZXlfZ3BhKHN0cnVjdCBrdm0gKmt2bSwgZW51bSBnYWNjX21vZGUgbW9kZSwgZ3BhX3QgZ3BhLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtOTA4LVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjkwOTppbnQgYWNjZXNzX2d1ZXN0X2Fic193aXRoX2tleShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgdm9pZCAqZGF0YSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy05MTAtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIGVudW0gZ2FjY19tb2RlIG1vZGUsIHU4IGFjY2Vzc19rZXkpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy05MjgtXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6OTI5OmludCBhY2Nlc3NfZ3Vlc3Rfd2l0aF9rZXkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdhLCB1OCBhcixcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy05MzAtXFx0XFx0XFx0ICB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGxlbiwgZW51bSBnYWNjX21vZGUgbW9kZSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEwMDgtXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6MTAwOTppbnQgYWNjZXNzX2d1ZXN0X3JlYWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xMDEwLVxcdFxcdCAgICAgIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbGVuLCBlbnVtIGdhY2NfbW9kZSBtb2RlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM9MTEwND1zdGF0aWMgdm9pZCBfY21weGNoZ19ndWVzdF9hYnNfd2l0aF9rZXkoc3RydWN0IGd1ZXN0X2ZhdWx0ICpmKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTEzNi0gKi9cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYzoxMTM3OmludCBjbXB4Y2hnX2d1ZXN0X2Fic193aXRoX2tleShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgaW50IGxlbiwgdW5pb24ga3ZtX3MzOTBfcXVhZCAqb2xkLFxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTExMzgtXFx0XFx0XFx0ICAgICAgIHVuaW9uIGt2bV9zMzkwX3F1YWQgbmV3LCB1OCBhY2MsIGJvb2wgKnN1Y2Nlc3MpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xMTgzLSAqL1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjExODQ6aW50IGd1ZXN0X3RyYW5zbGF0ZV9hZGRyZXNzX3dpdGhfa2V5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBndmEsIHU4IGFyLFxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTExODUtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpncGEsIGVudW0gZ2FjY19tb2RlIG1vZGUsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xMjA3LSAqL1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjEyMDg6aW50IGNoZWNrX2d2YV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhLCB1OCBhcixcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xMjA5LVxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCwgZW51bSBnYWNjX21vZGUgbW9kZSwgdTggYWNjZXNzX2tleSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEyMzItICovXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6MTIzMzppbnQgY2hlY2tfZ3BhX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGEsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLFxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEyMzQtXFx0XFx0ICAgIGVudW0gZ2FjY19tb2RlIG1vZGUsIHU4IGFjY2Vzc19rZXkpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xMjU3LSAqL1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjEyNTg6aW50IGt2bV9zMzkwX2NoZWNrX2xvd19hZGRyX3Byb3RfcmVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3JhKVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEyNTkte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM9MTY0Nj1zdGF0aWMgaW50IF9fZ2FjY2Vzc19zaGFkb3dfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZ21hcCAqc2csIGdwYV90IHNhZGRyLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTY3MC1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYzoxNjcxOmludCBnYWNjZXNzX3NoYWRvd19mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBnbWFwICpzZywgZ3BhX3Qgc2FkZHIsXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTY3Mi1cXHRcXHRcXHQgdW5pb24gbXZwZ19wZWkgKmRhdHB0ciwgYm9vbCB3cilcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTE0OD1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjE0OTppbnQgd3JpdGVfZ3Vlc3RfbGMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSwgdm9pZCAqZGF0YSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0xNTAtXFx0XFx0ICAgdW5zaWduZWQgbG9uZyBsZW4pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaD0xNzQ9c3RhdGljIGlubGluZSBfX211c3RfY2hlY2tcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDoxNzU6aW50IHJlYWRfZ3Vlc3RfbGMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSwgdm9pZCAqZGF0YSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0xNzYtXFx0XFx0ICB1bnNpZ25lZCBsb25nIGxlbilcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTE4Mz1lbnVtIGdhY2NfbW9kZSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0xODgtXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6MTg5OmludCBndWVzdF90cmFuc2xhdGVfYWRkcmVzc193aXRoX2tleShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhLCB1OCBhcixcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0xOTAtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpncGEsIGVudW0gZ2FjY19tb2RlIG1vZGUsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0xOTItXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6MTkzOmludCBjaGVja19ndmFfcmFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGd2YSwgdTggYXIsXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMTk0LVxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCwgZW51bSBnYWNjX21vZGUgbW9kZSwgdTggYWNjZXNzX2tleSk7XFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMTk1LVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjE5NjppbnQgY2hlY2tfZ3BhX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGEsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLFxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTE5Ny1cXHRcXHQgICAgZW51bSBnYWNjX21vZGUgbW9kZSwgdTggYWNjZXNzX2tleSk7XFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMTk4LVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjE5OTppbnQgYWNjZXNzX2d1ZXN0X2Fic193aXRoX2tleShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgdm9pZCAqZGF0YSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0yMDAtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIGVudW0gZ2FjY19tb2RlIG1vZGUsIHU4IGFjY2Vzc19rZXkpO1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTIwMS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDoyMDI6aW50IGFjY2Vzc19ndWVzdF93aXRoX2tleShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ2EsIHU4IGFyLFxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTIwMy1cXHRcXHRcXHQgIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbGVuLCBlbnVtIGdhY2NfbW9kZSBtb2RlLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMjA1LVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjIwNjppbnQgYWNjZXNzX2d1ZXN0X3JlYWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0yMDctXFx0XFx0ICAgICAgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBsZW4sIGVudW0gZ2FjY19tb2RlIG1vZGUpO1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTIwOC1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDoyMDk6aW50IGNtcHhjaGdfZ3Vlc3RfYWJzX3dpdGhfa2V5KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBpbnQgbGVuLCB1bmlvbiBrdm1fczM5MF9xdWFkICpvbGQsXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMjEwLVxcdFxcdFxcdCAgICAgICB1bmlvbiBrdm1fczM5MF9xdWFkIG5ldywgdTggYWNjZXNzX2tleSwgYm9vbCAqc3VjY2Vzcyk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaD0yNTg9c3RhdGljIGlubGluZSBfX211c3RfY2hlY2tcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDoyNTk6aW50IHdyaXRlX2d1ZXN0X3dpdGhfa2V5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBnYSwgdTggYXIsXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMjYwLVxcdFxcdFxcdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGxlbiwgdTggYWNjZXNzX2tleSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTI3Nz1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjI3ODppbnQgd3JpdGVfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdhLCB1OCBhciwgdm9pZCAqZGF0YSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0yNzktXFx0XFx0dW5zaWduZWQgbG9uZyBsZW4pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaD0zMDA9c3RhdGljIGlubGluZSBfX211c3RfY2hlY2tcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDozMDE6aW50IHJlYWRfZ3Vlc3Rfd2l0aF9rZXkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdhLCB1OCBhcixcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0zMDItXFx0XFx0XFx0dm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBsZW4sIHU4IGFjY2Vzc19rZXkpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaD0zMjE9c3RhdGljIGlubGluZSBfX211c3RfY2hlY2tcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDozMjI6aW50IHJlYWRfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdhLCB1OCBhciwgdm9pZCAqZGF0YSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0zMjMtXFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg9MzQ0PXN0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6MzQ1OmludCByZWFkX2d1ZXN0X2luc3RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBnYSwgdm9pZCAqZGF0YSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0zNDYtXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGxlbilcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTM3MD1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjM3MTppbnQgd3JpdGVfZ3Vlc3RfYWJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBncGEsIHZvaWQgKmRhdGEsXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMzcyLVxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGxlbilcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTM5Mz1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjM5NDppbnQgcmVhZF9ndWVzdF9hYnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdwYSwgdm9pZCAqZGF0YSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0zOTUtXFx0XFx0ICAgdW5zaWduZWQgbG9uZyBsZW4pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaD00MTc9c3RhdGljIGlubGluZSBfX211c3RfY2hlY2tcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDo0MTg6aW50IHdyaXRlX2d1ZXN0X3JlYWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSwgdm9pZCAqZGF0YSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC00MTktXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGxlbilcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTQ0MT1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjQ0MjppbnQgcmVhZF9ndWVzdF9yZWFsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBncmEsIHZvaWQgKmRhdGEsXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtNDQzLVxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGxlbilcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTQ0Ny1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDo0NDg6dm9pZCBpcHRlX2xvY2soc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDo0NDk6dm9pZCBpcHRlX3VubG9jayhzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjQ1MDppbnQgaXB0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDo0NTE6aW50IGt2bV9zMzkwX2NoZWNrX2xvd19hZGRyX3Byb3RfcmVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3JhKTtcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC00NTItXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg9NDUzPXVuaW9uIG12cGdfcGVpIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTQ2Mi1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDo0NjM6aW50IGdhY2Nlc3Nfc2hhZG93X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGdtYXAgKnNnLCBncGFfdCBzYWRkcixcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC00NjQtXFx0XFx0XFx0IHVuaW9uIG12cGdfcGVpICpkYXRwdHIsIGJvb2wgd3IpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTE4PXN0cnVjdCBnbWFwICpnbWFwX25ld19jaGlsZChzdHJ1Y3QgZ21hcCAqcGFyZW50LCBnZm5fdCBsaW1pdClcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzMC1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzE6aW50IGdtYXBfc2V0X2xpbWl0KHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBsaW1pdClcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMzIte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTUzPXN0YXRpYyB2b2lkIGdtYXBfcm1hcF9yYWRpeF90cmVlX2ZyZWUoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqcm9vdClcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTE3OS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxODA6dm9pZCBnbWFwX3JlbW92ZV9jaGlsZChzdHJ1Y3QgZ21hcCAqY2hpbGQpXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTgxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTE5NC0gKi9cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxOTU6dm9pZCBnbWFwX2Rpc3Bvc2Uoc3RydWN0IGdtYXAgKmdtYXApXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTk2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTIzNi0gKi9cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoyMzc6aW50IHMzOTBfcmVwbGFjZV9hc2NlKHN0cnVjdCBnbWFwICpnbWFwKVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTIzOC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0yNTgtXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MjU5OmJvb2wgX2dtYXBfdW5tYXBfcHJlZml4KHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBnZm4sIGdmbl90IGVuZCwgYm9vbCBoaW50KVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTI2MC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz0zMTY9c3RhdGljIGxvbmcgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IGVuZCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMzUzLSAqL1xcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjM1NDpib29sIGdtYXBfYWdlX2dmbihzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZClcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0zNTUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9Mzk4PXN0YXRpYyBsb25nIF9nbWFwX3VubWFwX2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtNDQwLSAqL1xcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjQ0MTpib29sIGdtYXBfdW5tYXBfZ2ZuX3JhbmdlKHN0cnVjdCBnbWFwICpnbWFwLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTQ0Mi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz00OTQ9c3RhdGljIGxvbmcgX2Nyc3RlX3Rlc3RfYW5kX2NsZWFyX3NvZnRkaXJ0eSh1bmlvbiBjcnN0ZSAqdGFibGUsIGdmbl90IGdmbiwgZ2ZuX3QgZW5kLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtNTI2LVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjUyNzp2b2lkIGdtYXBfc3luY19kaXJ0eV9sb2coc3RydWN0IGdtYXAgKmdtYXAsIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQpXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtNTI4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jPTU3Mz1zdGF0aWMgaW50IF9nbWFwX2hhbmRsZV9taW5vcl9wdGVfZmF1bHQoc3RydWN0IGdtYXAgKmdtYXAsIHVuaW9uIHBnc3RlICpwZ3N0ZSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTYxMS0gKi9cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzo2MTI6aW50IGdtYXBfdHJ5X2ZpeHVwX21pbm9yKHN0cnVjdCBnbWFwICpnbWFwLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmZhdWx0KVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTYxMy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz02ODU9c3RhdGljIGludCBfZ21hcF9saW5rKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqZ21hcCwgaW50IGxldmVsLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtNzM2LVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjczNzppbnQgZ21hcF9saW5rKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqZ21hcCwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmLFxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTczOC1cXHQgICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9Nzk0PXN0YXRpYyBpbnQgZ21hcF91Y2FzX3RyYW5zbGF0ZV9zaW1wbGUoc3RydWN0IGdtYXAgKmdtYXAsIGdwYV90ICpnYWRkciwgdW5pb24gY3JzdGUgKipjcnN0ZXBwKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtODIyLSAqL1xcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjgyMzppbnQgZ21hcF91Y2FzX3RyYW5zbGF0ZShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKmdtYXAsIGdwYV90ICpnYWRkcilcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy04MjQte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtODU4LVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjg1OTppbnQgZ21hcF91Y2FzX21hcChzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3QgcF9nZm4sIGdmbl90IGNfZ2ZuLCB1bnNpZ25lZCBsb25nIGNvdW50KVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTg2MC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz04ODc9c3RhdGljIHZvaWQgZ21hcF91Y2FzX3VubWFwX29uZShzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3QgY19nZm4pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy04OTktXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6OTAwOnZvaWQgZ21hcF91Y2FzX3VubWFwKHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBjX2dmbiwgdW5zaWduZWQgbG9uZyBjb3VudClcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy05MDEte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9OTA4PXN0YXRpYyBsb25nIF9nbWFwX3NwbGl0X2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtOTMxLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjkzMjp2b2lkIGdtYXBfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3QgZ21hcCAqZ21hcClcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy05MzMte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9OTQ4PXN0YXRpYyBpbnQgX2dtYXBfZW5hYmxlX3NrZXlzKHN0cnVjdCBnbWFwICpnbWFwKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtOTcwLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjk3MTppbnQgZ21hcF9lbmFibGVfc2tleXMoc3RydWN0IGdtYXAgKmdtYXApXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtOTcyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jPTk5MT1zdGF0aWMgbG9uZyBfZGVzdHJveV9wYWdlc19jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEwMDctXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTAwODppbnQgZ21hcF9wdl9kZXN0cm95X3JhbmdlKHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGludGVycnVwdGlibGUpXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTAwOS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMDI2LVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEwMjc6aW50IGdtYXBfaW5zZXJ0X3JtYXAoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZywgZ2ZuX3QgcF9nZm4sXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTAyOC1cXHRcXHQgICAgIGdmbl90IHJfZ2ZuLCBpbnQgbGV2ZWwpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMDYyLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEwNjM6aW50IGdtYXBfcHJvdGVjdF9ybWFwKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqc2csIGdmbl90IHBfZ2ZuLCBnZm5fdCByX2dmbixcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMDY0LVxcdFxcdCAgICAgIGt2bV9wZm5fdCBwZm4sIGludCBsZXZlbCwgYm9vbCB3cilcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jPTExMTQ9c3RhdGljIGxvbmcgX19zZXRfY21tYV9kaXJ0eV9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTExMjgtXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTEyOTp2b2lkIF9nbWFwX3NldF9jbW1hX2FsbChzdHJ1Y3QgZ21hcCAqZ21hcCwgYm9vbCBkaXJ0eSlcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMTMwLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jPTExNzQ9c3RhdGljIHZvaWQgZ21hcF91bnNoYWRvdyhzdHJ1Y3QgZ21hcCAqc2cpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMTkzLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjExOTQ6dm9pZCBfZ21hcF9oYW5kbGVfdnNpZV91bnNoYWRvd19ldmVudChzdHJ1Y3QgZ21hcCAqcGFyZW50LCBnZm5fdCBnZm4pXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTE5NS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuaD03Nz1zdHJ1Y3QgZ21hcF9jYWNoZSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuaC04NC1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuaDo4NTppbnQgczM5MF9yZXBsYWNlX2FzY2Uoc3RydWN0IGdtYXAgKmdtYXApO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjg2OmJvb2wgX2dtYXBfdW5tYXBfcHJlZml4KHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBnZm4sIGdmbl90IGVuZCwgYm9vbCBoaW50KTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaDo4Nzpib29sIGdtYXBfYWdlX2dmbihzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCk7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmg6ODg6Ym9vbCBnbWFwX3VubWFwX2dmbl9yYW5nZShzdHJ1Y3QgZ21hcCAqZ21hcCwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCk7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmg6ODk6aW50IGdtYXBfdHJ5X2ZpeHVwX21pbm9yKHN0cnVjdCBnbWFwICpnbWFwLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmZhdWx0KTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaC05MC1zdHJ1Y3QgZ21hcCAqZ21hcF9uZXcoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBsaW1pdCk7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmg9OTE9c3RydWN0IGdtYXAgKmdtYXBfbmV3X2NoaWxkKHN0cnVjdCBnbWFwICpwYXJlbnQsIGdmbl90IGxpbWl0KTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaDo5Mjp2b2lkIGdtYXBfcmVtb3ZlX2NoaWxkKHN0cnVjdCBnbWFwICpjaGlsZCk7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmg6OTM6dm9pZCBnbWFwX2Rpc3Bvc2Uoc3RydWN0IGdtYXAgKmdtYXApO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjk0OmludCBnbWFwX2xpbmsoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpnbWFwLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmZhdWx0LFxcbmFyY2gvczM5MC9rdm0vZ21hcC5oLTk1LVxcdCAgICAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjk2OnZvaWQgZ21hcF9zeW5jX2RpcnR5X2xvZyhzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCk7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmg6OTc6aW50IGdtYXBfc2V0X2xpbWl0KHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBsaW1pdCk7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmg6OTg6aW50IGdtYXBfdWNhc190cmFuc2xhdGUoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpnbWFwLCBncGFfdCAqZ2FkZHIpO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjk5OmludCBnbWFwX3VjYXNfbWFwKHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBwX2dmbiwgZ2ZuX3QgY19nZm4sIHVuc2lnbmVkIGxvbmcgY291bnQpO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwMDp2b2lkIGdtYXBfdWNhc191bm1hcChzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3QgY19nZm4sIHVuc2lnbmVkIGxvbmcgY291bnQpO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwMTppbnQgZ21hcF9lbmFibGVfc2tleXMoc3RydWN0IGdtYXAgKmdtYXApO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwMjppbnQgZ21hcF9wdl9kZXN0cm95X3JhbmdlKHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGludGVycnVwdGlibGUpO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwMzppbnQgZ21hcF9pbnNlcnRfcm1hcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnLCBnZm5fdCBwX2dmbixcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaC0xMDQtXFx0XFx0ICAgICBnZm5fdCByX2dmbiwgaW50IGxldmVsKTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaDoxMDU6aW50IGdtYXBfcHJvdGVjdF9ybWFwKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqc2csIGdmbl90IHBfZ2ZuLCBnZm5fdCByX2dmbixcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaC0xMDYtXFx0XFx0ICAgICAga3ZtX3Bmbl90IHBmbiwgaW50IGxldmVsLCBib29sIHdyKTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaDoxMDc6dm9pZCBfZ21hcF9zZXRfY21tYV9hbGwoc3RydWN0IGdtYXAgKmdtYXAsIGJvb2wgZGlydHkpO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwODp2b2lkIF9nbWFwX2hhbmRsZV92c2llX3Vuc2hhZG93X2V2ZW50KHN0cnVjdCBnbWFwICpwYXJlbnQsIGdmbl90IGdmbik7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmgtMTA5LXN0cnVjdCBnbWFwICpnbWFwX2NyZWF0ZV9zaGFkb3coc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpnbWFwLFxcbmFyY2gvczM5MC9rdm0vZ21hcC5oLTExMC1cXHRcXHRcXHRcXHR1bmlvbiBhc2NlIGFzY2UsIGludCBlZGF0X2xldmVsKTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaDoxMTE6dm9pZCBnbWFwX3NwbGl0X2h1Z2VfcGFnZXMoc3RydWN0IGdtYXAgKmdtYXApO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oLTExMi1cXG4tLVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYz05OT1zdGF0aWMgdm9pZCBlbmFibGVfYWxsX2h3X3dwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0xMjktXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjEzMDp2b2lkIGt2bV9zMzkwX2JhY2t1cF9ndWVzdF9wZXJfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTEzMS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMTM3LVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYzoxMzg6dm9pZCBrdm1fczM5MF9yZXN0b3JlX2d1ZXN0X3Blcl9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMTM5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0xNDUtXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjE0Njp2b2lkIGt2bV9zMzkwX3BhdGNoX2d1ZXN0X3Blcl9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMTQ3LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYz0xNzQ9c3RhdGljIGludCBfX2ltcG9ydF93cF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0yMDItXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjIwMzppbnQga3ZtX3MzOTBfaW1wb3J0X2JwX2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0yMDQtXFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZylcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0yNzctXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjI3ODp2b2lkIGt2bV9zMzkwX2NsZWFyX2JwX2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0yNzkte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jPTMzND1zdGF0aWMgc3RydWN0IGt2bV9od193cF9pbmZvX2FyY2ggKmFueV93cF9jaGFuZ2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0zNjYtXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjM2Nzp2b2lkIGt2bV9zMzkwX3ByZXBhcmVfZGVidWdfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTM2OC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM9NDMyPXN0YXRpYyBpbnQgcGVyX2ZldGNoZWRfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgKmFkZHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtNDkyLVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYzo0OTM6aW50IGt2bV9zMzkwX2hhbmRsZV9wZXJfaWZldGNoX2ljcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy00OTQte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jPTUzMz1zdGF0aWMgaW50IGZpbHRlcl9ndWVzdF9wZXJfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTU4MS1cXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM6NTgyOmludCBrdm1fczM5MF9oYW5kbGVfcGVyX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtNTgzLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM9Mzk1PXN0YXRpYyBpbnQgaGFuZGxlX3BhcnRpYWxfZXhlY3V0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNDExLSAqL1xcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM6NDEyOmludCBoYW5kbGVfc3RoeWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNDEzLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM9NjAwPXN0YXRpYyBib29sIHNob3VsZF9oYW5kbGVfcGVyX2lmZXRjaChjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCByYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNjEyLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM6NjEzOmludCBrdm1faGFuZGxlX3NpZV9pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNjE0LXtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDM6MzkuOTI4OTUzNjEzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3NjgwNjk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgS1ZNL3MzOTAgQ1BVIFBWIENyZWF0aW9uIGFuZCBEZXN0cnVjdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBvdXRwdXQgYXBwZWFycyB0cnVuY2F0ZWQsIGJ1dCBJIGNhbiBhbHJlYWR5IHNlZSB0aGF0IHRoZSBmdW5jdGlvbnMgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGFuZCBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgIGFyZSBib3RoIGxvY2F0ZWQgaW4gYGFyY2gvczM5MC9rdm0vcHYuY2AuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRpdmUgaW50byB0aGF0IGZpbGUsIGBhcmNoL3MzOTAva3ZtL3B2LmNgLCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBmdW5jdGlvbnMuIEknbGwgYWxzbyB3YW50IHRvIHRha2UgYSBsb29rIGF0IGBhcmNoL3MzOTAva3ZtL3ByaXYuY2AgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IHJlbGF0ZWQgY29kZSB0aGVyZS4gTWlnaHQgYXMgd2VsbCBicm9hZGVuIHRoZSBzZWFyY2ggYSBsaXR0bGUgYXQgdGhpcyBlYXJseSBzdGFnZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHBhcmF2aXJ0dWFsaXphdGlvbiBhc3BlY3RzIGludGVyYWN0IHdpdGggdGhlIENQVSBtYW5hZ2VtZW50IHdpdGhpbiBLVk0gb24gczM5MC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIFBWIHNldHVwIGFuZCB0ZWFyZG93biBhcmUgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1NDMsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0Mzo0NC44MDU3NjM2MzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDQ2ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8bG9uZ3xib29sKSBbYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9wdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vcHYuYy0yNi1cXG5hcmNoL3MzOTAva3ZtL3B2LmM6Mjc6Ym9vbCBrdm1fczM5MF9wdl9pc19wcm90ZWN0ZWQoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0vcHYuYy0yOC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmM9MzI9RVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3MzOTBfcHZfaXNfcHJvdGVjdGVkKTtcXG5hcmNoL3MzOTAva3ZtL3B2LmMtMzMtXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjM0OmJvb2wga3ZtX3MzOTBfcHZfY3B1X2lzX3Byb3RlY3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTM1LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYz0xMDQ9c3RhdGljIHZvaWQgX2t2bV9zMzkwX3B2X21ha2Vfc2VjdXJlKHN0cnVjdCBndWVzdF9mYXVsdCAqZilcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy0xNDYtICovXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjE0NzppbnQga3ZtX3MzOTBfcHZfbWFrZV9zZWN1cmUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGdhZGRyLCB2b2lkICp1dmNiKVxcbmFyY2gvczM5MC9rdm0vcHYuYy0xNDgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTE3OC1cXG5hcmNoL3MzOTAva3ZtL3B2LmM6MTc5OmludCBrdm1fczM5MF9wdl9jb252ZXJ0X3RvX3NlY3VyZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ2FkZHIpXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTE4MC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtMjAxLSAqL1xcbmFyY2gvczM5MC9rdm0vcHYuYzoyMDI6aW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ2FkZHIpXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTIwMy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmM9MjQ3PXN0YXRpYyB2b2lkIGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcmVlX3N0b3JfYmFzZSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy0yNjQtXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjI2NTppbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcXG5hcmNoL3MzOTAva3ZtL3B2LmMtMjY2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy0yODMtXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjI4NDppbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbmFyY2gvczM5MC9rdm0vcHYuYy0yODUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jPTQ0OT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfZGVzdHJveV9mYXN0X2F2YWlsYWJsZSh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTQ3MS0gKi9cXG5hcmNoL3MzOTAva3ZtL3B2LmM6NDcyOmludCBrdm1fczM5MF9wdl9zZXRfYXNpZGUoc3RydWN0IGt2bSAqa3ZtLCB1MTYgKnJjLCB1MTYgKnJyYylcXG5hcmNoL3MzOTAva3ZtL3B2LmMtNDczLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy01MzYtICovXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjUzNzppbnQga3ZtX3MzOTBfcHZfZGVpbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdTE2ICpyYywgdTE2ICpycmMpXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTUzOC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtNTcxLSAqL1xcbmFyY2gvczM5MC9rdm0vcHYuYzo1NzI6aW50IGt2bV9zMzkwX3B2X2RlaW5pdF9jbGVhbnVwX2FsbChzdHJ1Y3Qga3ZtICprdm0sIHUxNiAqcmMsIHUxNiAqcnJjKVxcbmFyY2gvczM5MC9rdm0vcHYuYy01NzMte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTY0OC0gKi9cXG5hcmNoL3MzOTAva3ZtL3B2LmM6NjQ5OmludCBrdm1fczM5MF9wdl9kZWluaXRfYXNpZGVfdm0oc3RydWN0IGt2bSAqa3ZtLCB1MTYgKnJjLCB1MTYgKnJyYylcXG5hcmNoL3MzOTAva3ZtL3B2LmMtNjUwLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYz03MDU9c3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfb3BzIGt2bV9zMzkwX3B2X21tdV9ub3RpZmllcl9vcHMgPSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtNzA4LVxcbmFyY2gvczM5MC9rdm0vcHYuYzo3MDk6aW50IGt2bV9zMzkwX3B2X2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1MTYgKnJjLCB1MTYgKnJyYylcXG5hcmNoL3MzOTAva3ZtL3B2LmMtNzEwLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy03NzEtXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjc3MjppbnQga3ZtX3MzOTBfcHZfc2V0X3NlY19wYXJtcyhzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgKmhkciwgdTY0IGxlbmd0aCwgdTE2ICpyYyxcXG5hcmNoL3MzOTAva3ZtL3B2LmMtNzczLVxcdFxcdFxcdCAgICAgIHUxNiAqcnJjKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jPTc5MT1zdGF0aWMgaW50IHVucGFja19vbmUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIsIHU2NCB0d2VhayxcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy04MTgtXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjgxOTppbnQga3ZtX3MzOTBfcHZfdW5wYWNrKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTgyMC1cXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyB0d2VhaywgdTE2ICpyYywgdTE2ICpycmMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtODUwLVxcbmFyY2gvczM5MC9rdm0vcHYuYzo4NTE6aW50IGt2bV9zMzkwX3B2X3NldF9jcHVfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBzdGF0ZSlcXG5hcmNoL3MzOTAva3ZtL3B2LmMtODUyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy04NjgtXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjg2OTppbnQga3ZtX3MzOTBfcHZfZHVtcF9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpidWZmLCB1MTYgKnJjLCB1MTYgKnJyYylcXG5hcmNoL3MzOTAva3ZtL3B2LmMtODcwLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy05MTUtICovXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjkxNjppbnQga3ZtX3MzOTBfcHZfZHVtcF9zdG9yX3N0YXRlKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmJ1ZmZfdXNlcixcXG5hcmNoL3MzOTAva3ZtL3B2LmMtOTE3LVxcdFxcdFxcdFxcdHU2NCAqZ2FkZHIsIHU2NCBidWZmX3VzZXJfbGVuLCB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy0xMDIzLSAqL1xcbmFyY2gvczM5MC9rdm0vcHYuYzoxMDI0OmludCBrdm1fczM5MF9wdl9kdW1wX2NvbXBsZXRlKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmJ1ZmZfdXNlcixcXG5hcmNoL3MzOTAva3ZtL3B2LmMtMTAyNS1cXHRcXHRcXHQgICAgICB1MTYgKnJjLCB1MTYgKnJyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDM6NDQuOTEyMjE1MTc1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTUwODUzMTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gczM5MCBLVk0gSW50ZXJydXB0IEhhbmRsaW5nKipcblxuUmlnaHQsIGxldCdzIHplcm8gaW4gb24gYGFyY2gvczM5MC9rdm0vcHJpdi5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgcm91dGluZXMgd2l0aGluIHRoYXQgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIGBoYW5kbGVfcnJiZWAgYW5kIGBoYW5kbGVfZXNzYWAuIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gbGlrZWx5IGRlYWxpbmcgd2l0aCBlcnJvciBldmVudHMsIGFuZCB0aGVzZSBwcm9iYWJseSByZWxhdGUgdG8gc3BlY2lmaWMgaGFyZHdhcmUgZXhjZXB0aW9ucyBvciBwcm9jZXNzb3IgY29uZGl0aW9ucyB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIHJ1bm5pbmcgaW4gYSBLVk0gZW52aXJvbm1lbnQuIEknbSBhc3N1bWluZyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgd2hlcmUgS1ZNIGludGVyY2VwdHMgYW5kIHBvdGVudGlhbGx5IGVtdWxhdGVzIG9yIGhhbmRsZXMgdGhlc2UgZXZlbnRzIGZvciB0aGUgZ3Vlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGhhbmRsZXJzLiBBcmUgdGhleSBpbnZvbHZlZCBpbiB0aGUgUlJCRSBoYW5kbGluZyBpbiB0aGUgbmV3IGhhcmR3YXJlLCBvciBhbiBvbGRlciBtZWNoYW5pc20/IFdoYXQgYWJvdXQgRVNBIGhhbmRsaW5nPyBBcmUgdGhlc2UgcGVyZm9ybWFuY2UgY3JpdGljYWw/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGV2ZW50cyBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgcmVwcmVzZW50YXRpb25zIHdpdGhpbiBLVk0gYW5kIHRoZW4gcmV2aWV3IHRoZSBLVk0gc3BlY2lmaWMgaGFuZGxpbmcuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIGhvdyBLVk0gaXMgbWFuYWdpbmcgdGhlc2Ugc3BlY2lmaWMgZXhjZXB0aW9uIGFuZCBzdGF0dXMgZXZlbnRzIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5NDEsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0Mzo1NC40MjA3NDkzODZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MjUxOTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8bG9uZ3xib29sKSBbYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9wcml2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9wcml2LmM9MzM9c3RhdGljIGludCBoYW5kbGVfcmkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNDUtXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NDY6aW50IGt2bV9zMzkwX2hhbmRsZV9hYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNDcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NTQ9c3RhdGljIGludCBoYW5kbGVfZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNzMtXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NzQ6aW50IGt2bV9zMzkwX2hhbmRsZV9lMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNzUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTkxPXN0YXRpYyBpbnQgaGFuZGxlX3N0b3JlX2NwdV9hZGRyZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTIxNi1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoyMTc6aW50IGt2bV9zMzkwX3NrZXlfY2hlY2tfZW5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0yMTgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NTQxPXN0YXRpYyBpbnQgaGFuZGxlX2lvX2luc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNTcwLSNpZiBJU19FTkFCTEVEKENPTkZJR19WRklPX0FQKVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjU3MTpib29sIGt2bV9zMzkwX2lzX2dwYV9pbl9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhKVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTU3Mi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz02NzA9c3RhdGljIGludCBoYW5kbGVfc3RmbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy02OTgtXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6Njk5OmludCBpc192YWxpZF9wc3cocHN3X3QgKnBzdylcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy03MDAte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNzE1LVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjcxNjppbnQga3ZtX3MzOTBfaGFuZGxlX2xwc3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTcxNy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz04Njc9c3RhdGljIGludCBoYW5kbGVfc3RzaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05NTgtXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6OTU5OmludCBrdm1fczM5MF9oYW5kbGVfYjIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk2MC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz0xMjE3PXN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI4My1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxMjg0OmludCBrdm1fczM5MF9oYW5kbGVfYjkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyODUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTMwMS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxMzAyOmludCBrdm1fczM5MF9oYW5kbGVfbGN0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTMwMy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMzQwLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEzNDE6aW50IGt2bV9zMzkwX2hhbmRsZV9zdGN0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTM0Mi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz0xNDEzPXN0YXRpYyBpbnQgaGFuZGxlX3N0Y3RnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTE0NDYtXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTQ0NzppbnQga3ZtX3MzOTBfaGFuZGxlX2ViKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xNDQ4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jPTE0NjU9c3RhdGljIGludCBoYW5kbGVfdHByb3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTUyMy1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxNTI0OmludCBrdm1fczM5MF9oYW5kbGVfZTUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTE1MjUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTU1Mz1zdGF0aWMgaW50IGhhbmRsZV9wdGZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTE1NjEtXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTU2MjppbnQga3ZtX3MzOTBfaGFuZGxlXzAxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xNTYzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDM6NTQuNjI5MDA1ODAzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcxNjIxMTk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3RhdGljIHZzLiBOb24tU3RhdGljIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYGhhbmRsZV9ycmJlYCBhbmQgYGhhbmRsZV9lc3NhYC4gSG1tLCB0aGV5J3JlIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IG1ha2VzIG1lIHRoaW5rIGFib3V0IHNjb3BlIGFuZCBwb3RlbnRpYWwgZm9yIGlubGluaW5nLCBkZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyJ3Mgb3B0aW1pemF0aW9uIHN0cmF0ZWd5LiBOb3csIGhvbGQgb24uLi4gYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGFuZCBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgLCB0aG9zZSBhcmVuJ3Qgc3RhdGljLiBBbHJpZ2h0LiBBbmQgdGhlIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgZnVuY3Rpb24sIGFsc28gbm9uLXN0YXRpYy4gVGhlbiB0aGVyZSBhcmUgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCBhbmQgYGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbmAsIGFsc28gbm9uLXN0YXRpYy5cblxuR2l2ZW4gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlbid0IHN0YXRpYywgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIHRoZXkncmUgYmVpbmcgY2FsbGVkIGFuZCBob3cgdGhleSdyZSB1c2VkLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aG9zZSBsYXN0IHR3byBmdW5jdGlvbnMsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgYW5kIGBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25gLCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGVpciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjc4OSwiT3V0cHV0VG9rZW5zIjo2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0NDowMS4zNDUyMjEwOTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjc0NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8bG9uZ3xib29sKSBbYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NjI9c3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3AsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTkzLS8qIFNlY3Rpb246IGRldmljZSByZWxhdGVkICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU5NDpsb25nIGt2bV9hcmNoX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTk1LVxcdFxcdFxcdHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNjAxLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo2MDI6aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNjAzLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy03MzEtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjczMjp2b2lkIGt2bV9hcmNoX3N5bmNfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdClcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNzMzLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz03NDE9c3RhdGljIHZvaWQgc2NhX2RlbF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNzQ1LSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo3NDY6aW50IGt2bV92bV9pb2N0bF9nZXRfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNzQ3LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX2RpcnR5X2xvZyAqbG9nKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTc3OD1zdGF0aWMgdm9pZCBpY3B0X29wZXJleGNfb25fYWxsX3ZjcHVzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy03ODctXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjc4ODppbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNzg5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMDg3PXN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEwODgtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEwODk6dm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19yZXNldF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMDkwLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMTc1PXN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfcGNpX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTg0LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTg1OnZvaWQga3ZtX3MzOTBfdmNwdV9wY2lfZW5hYmxlX2ludGVycChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExODYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIzNDg9c3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNDA1LSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyNDA2OmludCBrdm1fczM5MF9jcHVzX2Zyb21fcHYoc3RydWN0IGt2bSAqa3ZtLCB1MTYgKnJjLCB1MTYgKnJyYylcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjQwNy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkwMT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX21lbV9vcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9tZW1fb3AgKm1vcClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTI1LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTI2OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkyNy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzEyNj1zdGF0aWMgdm9pZCBrdm1fczM5MF9zZXRfY3J5Y2JfZm9ybWF0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTU3LSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTU4OnZvaWQga3ZtX2FyY2hfY3J5cHRvX3NldF9tYXNrcyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKmFwbSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE1OS1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyAqYXFtLCB1bnNpZ25lZCBsb25nICphZG0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzE5ND1FWFBPUlRfU1lNQk9MX0dQTChrdm1fYXJjaF9jcnlwdG9fc2V0X21hc2tzKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjA3LSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjA4OnZvaWQga3ZtX2FyY2hfY3J5cHRvX2NsZWFyX21hc2tzKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzIwOS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzI1MT1zdGF0aWMgdm9pZCBzY2FfZGlzcG9zZShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzI1Ni1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzI1Nzp2b2lkIGt2bV9hcmNoX2ZyZWVfdm0oc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjU4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjY0LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjY1OmludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjY2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNDAzLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozNDA0OnZvaWQga3ZtX2FyY2hfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQwNS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQzMC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzQzMTp2b2lkIGt2bV9hcmNoX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNDMyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNTQxPXN0YXRpYyB2b2lkIGRpc2FibGVfY3B1X3RpbWVyX2FjY291bnRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM1NDgtLyogc2V0IHRoZSBjcHUgdGltZXIgLSBtYXkgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgVkNQVSB0aHJlYWQgaXRzZWxmICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM1NDk6dm9pZCBrdm1fczM5MF9zZXRfY3B1X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgX191NjQgY3B1dG0pXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM1NTAte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM1NjE9X191NjQga3ZtX3MzOTBfZ2V0X2NwdV90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzU4NS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzU4Njp2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM1ODcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM1OTQtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM1OTU6dm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM1OTYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2MDMtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM2MDQ6dm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjA1LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNjUwPXN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjgwLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozNjgxOnZvaWQga3ZtX3MzOTBfdmNwdV91bnNldHVwX2NtbWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjgyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjg3LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozNjg4OmludCBrdm1fczM5MF92Y3B1X3NldHVwX2NtbWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjg5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNzA4PXN0YXRpYyBpbnQga3ZtX3MzOTBfdmNwdV9zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzc5NC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzc5NTppbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM3OTYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM4MDI9REVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzgwMy1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzgwNDppbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODA1LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODgyLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozODgzOmludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg4NC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg4OC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzg4OTpib29sIGt2bV9hcmNoX3ZjcHVfaW5fa2VybmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg5MC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg5My1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzg5NDp2b2lkIGt2bV9zMzkwX3ZjcHVfYmxvY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODk1LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODk5LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozOTAwOnZvaWQga3ZtX3MzOTBfdmNwdV91bmJsb2NrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzkwMS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzkwNT1zdGF0aWMgdm9pZCBrdm1fczM5MF92Y3B1X3JlcXVlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM5MTAtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM5MTE6Ym9vbCBrdm1fczM5MF92Y3B1X3NpZV9pbmhpYml0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTEyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zOTE3PXN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfcmVxdWVzdF9oYW5kbGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTI1LSAqIHJldHVybiBpbW1lZGlhdGVseS4gKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzkyNjp2b2lkIGV4aXRfc2llKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzkyNy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzkzNC0vKiBLaWNrIGEgZ3Vlc3QgY3B1IG91dCBvZiBTSUUgdG8gcHJvY2VzcyBhIHJlcXVlc3Qgc3luY2hyb25vdXNseSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozOTM1OnZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0KGludCByZXEsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzkzNi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzk0MC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzk0MTpib29sIGt2bV9hcmNoX25vX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTQyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTUxLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozOTUyOmludCBrdm1fYXJjaF92Y3B1X3Nob3VsZF9raWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzk1My17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDExNz1zdGF0aWMgdm9pZCBrdm1fYXJjaF92Y3B1X2lvY3RsX2NsZWFyX3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTMyLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTMzOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9yZWdzICpyZWdzKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTM0LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTQwLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTQxOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9yZWdzICpyZWdzKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTQyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTQ4LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTQ5OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNTAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTYwLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTYxOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTcyLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTczOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTc0LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTg3LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTg4OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTg5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz00MjAzPXN0YXRpYyBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfaW5pdGlhbF9wc3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwc3dfdCBwc3cpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDIxNS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDIxNjppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF90cmFuc2xhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MjE3LVxcdFxcdFxcdFxcdCAgc3RydWN0IGt2bV90cmFuc2xhdGlvbiAqdHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDIyNS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDIyNjppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MjI3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MjY3LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MjY4OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9tcHN0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDI2OS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9tcF9zdGF0ZSAqbXBfc3RhdGUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDI4Mi1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDI4MzppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfbXBzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyODQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fbXBfc3RhdGUgKm1wX3N0YXRlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ0MzY9c3RhdGljIHZvaWQgX19rdm1fczM5MF9zZXRfdG9kX2Nsb2NrKHN0cnVjdCBrdm0gKmt2bSwgY29uc3Qgc3RydWN0IGt2bV9zMzkwX3ZtX3RvZF9jbG9jayAqZ3RvZClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NDYzLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NDY0OmludCBrdm1fczM5MF90cnlfc2V0X3RvZF9jbG9jayhzdHJ1Y3Qga3ZtICprdm0sIGNvbnN0IHN0cnVjdCBrdm1fczM5MF92bV90b2RfY2xvY2sgKmd0b2QpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ0NjUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ0NzM9c3RhdGljIHZvaWQgX19rdm1faW5qZWN0X3BmYXVsdF90b2tlbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgc3RhcnRfdG9rZW4sXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ5OC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDQ5OTpib29sIGt2bV9hcmNoX2FzeW5jX3BhZ2Vfbm90X3ByZXNlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTAwLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9hc3luY19wZiAqd29yaylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTA3LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NTA4OnZvaWQga3ZtX2FyY2hfYXN5bmNfcGFnZV9wcmVzZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDUwOS1cXHRcXHRcXHRcXHQgc3RydWN0IGt2bV9hc3luY19wZiAqd29yaylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTE0LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NTE1OnZvaWQga3ZtX2FyY2hfYXN5bmNfcGFnZV9yZWFkeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1MTYtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fYXN5bmNfcGYgKndvcmspXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDUyMC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDUyMTpib29sIGt2bV9hcmNoX2Nhbl9kZXF1ZXVlX2FzeW5jX3BhZ2VfcHJlc2VudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1MjIte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1MjktXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1MzA6Ym9vbCBrdm1fYXJjaF9zZXR1cF9hc3luY19wZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1MzEte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTUwMDQ9c3RhdGljIHZvaWQgc3RvcmVfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTAyNC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTAyNTppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MDI2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MTE0LSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1MTE1OmludCBrdm1fczM5MF9zdG9yZV9zdGF0dXNfdW5sb2FkZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdwYSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTExNi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTE2Ni1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTE2NzppbnQga3ZtX3MzOTBfdmNwdV9zdG9yZV9zdGF0dXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUxNjgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTUxOTY9c3RhdGljIHZvaWQgX19lbmFibGVfaWJzX29uX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUyMDMtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjUyMDQ6aW50IGt2bV9zMzkwX3ZjcHVfc3RhcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MjA1LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MjU4LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1MjU5OmludCBrdm1fczM5MF92Y3B1X3N0b3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MjYwLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NDE0PXN0YXRpYyBsb25nIGt2bV9zMzkwX3ZjcHVfbWVtc2lkYV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTQzOC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTQzOTpsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTQ0MC1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU0ODQ9c3RhdGljIGludCBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTI1LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NTI2Omxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTUyNy1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NzQ1PXZtX2ZhdWx0X3Qga3ZtX2FyY2hfdmNwdV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3NTctXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3NTg6Ym9vbCBrdm1fYXJjaF9pcnFjaGlwX2luX2tlcm5lbChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3NTkte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU3NjQ9c3RhdGljIGxvbmcgY21tYV9kX2NvdW50X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3NzYtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3Nzc6aW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3NzgtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NjUtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU4NjY6dm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg2Ny1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsIGVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg5MC0gKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTg5MTpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4OTIte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU5MjItICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU5MjM6Ym9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTI0LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTM2LSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1OTM3OmJvb2wga3ZtX2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU5Mzgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU5NTQtICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU5NTU6Ym9vbCBrdm1fdW5tYXBfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTU2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDQ6MDEuNDI4OTAyMjE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyOTQ0NDg0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyBLVk0gQXJjaGl0ZWN0dXJlIE5vbi1TdGF0aWMgRnVuY3Rpb25zKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgdGhlc2UgS1ZNLXJlbGF0ZWQgZnVuY3Rpb25zLiBJdCBzZWVtcyBJJ3ZlIGlkZW50aWZpZWQgc2V2ZXJhbCB0aGF0IGFyZSBub24tc3RhdGljOiBga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCwgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgLCBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgLCBhbmQgYGt2bV9hcmNoX3ZtX2lvY3RsYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgc28gdGhlc2UgYXJlIGFjY2Vzc2libGUgb3V0c2lkZSBvZiB0aGVpciByZXNwZWN0aXZlIGNvbXBpbGF0aW9uIHVuaXRzLCB3aGljaCBpbXBsaWVzIGEgcG90ZW50aWFsIGZvciBleHRlcm5hbCBtb2RpZmljYXRpb24gb3IgdXNlLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcywgcGFydGljdWxhcmx5IGluIGEgY29udGV4dCBhcyBwZXJmb3JtYW5jZS1jcml0aWNhbCBhcyBLVk0uXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgSSdsbCBzaGlmdCBnZWFycy4gSSByZW1lbWJlciB0aG9zZSBTQ0FzIGFuZCBleHRlcm5hbCBjYWxscyByZWxhdGVkIHRvIGludGVycnVwdHMsIHNvIEkgbmVlZCB0byBjaGVjayBgYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY2AuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgZGVmaW5pdGlvbnMgb2YgYHNjYV9leHRfY2FsbF9wZW5kaW5nYCwgYHNjYV9pbmplY3RfZXh0X2NhbGxgLCBhbmQgYHNjYV9jbGVhcl9leHRfY2FsbGAgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgaWYgdGhleSBpbnRyb2R1Y2UgYW55dGhpbmcgdW5leHBlY3RlZC4gVGhpcyBpcyBhYm91dCBtYWtpbmcgc3VyZSBub3RoaW5nIHVudG93YXJkIGhhcHBlbnMgd2l0aCBleHRlcm5hbCBjYWxscywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBpbnRlcnJ1cHQgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE1MjMsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDQ6MDYuNzIzMzUyNTYyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODk3NDE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkfGxvbmd8Ym9vbCkgW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz05MD1zdGF0aWMgdm9pZCBzY2FfY2xlYXJfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDQtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxMDU6aW50IHBzd19leHRpbnRfZGlzYWJsZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTA2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTEyMz1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBfX2RlbGl2ZXJfaW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMTkzLS8qIENoZWNrIHdoZXRoZXIgYW4gZXh0ZXJuYWwgY2FsbCBpcyBwZW5kaW5nIChkZWxpdmVyYWJsZSBvciBub3QpICovXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxMTk0OmludCBrdm1fczM5MF9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTExOTUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMjAzLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTIwNDppbnQga3ZtX3MzOTBfdmNwdV9oYXNfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGV4Y2x1ZGVfc3RvcClcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTEyMDUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMjIyLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTIyMzppbnQga3ZtX2NwdV9oYXNfcGVuZGluZ190aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMjI0LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTIyOD1zdGF0aWMgdTY0IF9fY2FsY3VsYXRlX3NsdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTEyNTktXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxMjYwOmludCBrdm1fczM5MF9oYW5kbGVfd2FpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMjYxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTMwNi1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjEzMDc6dm9pZCBrdm1fczM5MF92Y3B1X3dha2V1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMzA4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTMxOT1lbnVtIGhydGltZXJfcmVzdGFydCBrdm1fczM5MF9pZGxlX3dha2V1cChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTEzMzYtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxMzM3OnZvaWQga3ZtX3MzOTBfY2xlYXJfbG9jYWxfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMzM4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTk1OD1zdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xOTg4LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTk4OTppbnQga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE5OTAtXFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjAzMS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwMzI6aW50IGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDMzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjAzNy1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwMzg6aW50IHMzOTBpbnRfdG9fczM5MGlycShzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjAzOS1cXHRcXHQgICAgICAgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDgwLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA4MTppbnQga3ZtX3MzOTBfaXNfc3RvcF9pcnFfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDgyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4Ny1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwODg6aW50IGt2bV9zMzkwX2lzX3Jlc3RhcnRfaXJxX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4OS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwOTQtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMDk1OnZvaWQga3ZtX3MzOTBfY2xlYXJfc3RvcF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA5Ni17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIxMDU9c3RhdGljIGludCBkb19pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjE0OS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxNTA6aW50IGt2bV9zMzkwX2luamVjdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjE1MS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIxNzM9c3RhdGljIHZvaWQgaW50aV90b19pcnEoc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTg4LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjE4OTp2b2lkIGt2bV9zMzkwX2NsZWFyX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjE5MC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI0MjY9c3RhdGljIGludCByZWdpc3Rlcl9pb19hZGFwdGVyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI0NzItXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNDczOmludCBrdm1fczM5MF9tYXNrX2FkYXB0ZXIoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQsIGJvb2wgbWFza2VkKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjQ3NC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI1NTI9c3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBfX3U2NCBhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNTg5LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjU5MDp2b2lkIGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNTkxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjYxOS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI2MjA6dm9pZCBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MjEte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMDUzPXN0YXRpYyBpbnQgc2V0X2FkYXB0ZXJfaW50KHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMDc5LSAqL1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzA4MDp2b2lkIGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzA4MS1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtY2NrX3ZvbGF0aWxlX2luZm8gKm1jY2tfaW5mbylcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzEyMC1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMxMjE6aW50IGt2bV9zZXRfcm91dGluZ19lbnRyeShzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTIyLVxcdFxcdFxcdCAgc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMxNjItXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMTYzOmludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzE2NC1cXHRcXHRpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTY4LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzE2OTppbnQga3ZtX3MzOTBfc2V0X2lycV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgX191c2VyICppcnFzdGF0ZSwgaW50IGxlbilcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMxNzAte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMjA5PXN0YXRpYyB2b2lkIHN0b3JlX2xvY2FsX2lycShzdHJ1Y3Qga3ZtX3MzOTBfbG9jYWxfaW50ZXJydXB0ICpsaSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzI1MC1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMyNTE6aW50IGt2bV9zMzkwX2dldF9pcnFfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBfX3U4IF9fdXNlciAqYnVmLCBpbnQgbGVuKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzI1Mi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTMzNTE9c3RhdGljIHZvaWQgcHJvY2Vzc19naWJfYWxlcnRfbGlzdCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMzk1LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzM5Njp2b2lkIGt2bV9zMzkwX2dpc2FfY2xlYXIoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzM5Ny17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM0MDUtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNDA2OnZvaWQga3ZtX3MzOTBfZ2lzYV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM0MDcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNDIxLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzQyMjp2b2lkIGt2bV9zMzkwX2dpc2FfZW5hYmxlKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM0MjMte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNDQ0LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzQ0NTp2b2lkIGt2bV9zMzkwX2dpc2FfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNDQ2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzQ2Mi1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM0NjM6dm9pZCBrdm1fczM5MF9naXNhX2Rpc2FibGUoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzQ2NC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM0OTctICovXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNDk4OmludCBrdm1fczM5MF9naXNjX3JlZ2lzdGVyKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGdpc2MpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNDk5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzUxNz1FWFBPUlRfU1lNQk9MX0dQTChrdm1fczM5MF9naXNjX3JlZ2lzdGVyKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzUzNi0gKi9cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM1Mzc6aW50IGt2bV9zMzkwX2dpc2NfdW5yZWdpc3RlcihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBnaXNjKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzUzOC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTM2NDY9c3RhdGljIHN0cnVjdCBhaXJxX3N0cnVjdCBnaWJfYWxlcnRfaXJxID0ge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNjQ5LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzY1MDp2b2lkIGt2bV9zMzkwX2dpYl9kZXN0cm95KHZvaWQpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNjUxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzY2NT1pbnQgX19pbml0IGt2bV9zMzkwX2dpYl9pbml0KHU4IG5pc2MpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3MjItICovXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNzIzOmludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzcyNC1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjQ0OjA2LjgxMjMzMDM3MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzk1NTExNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkZvY3VzaW5nIG9uIEV4dGVybmFsIENhbGwgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gaG93IHRoZXNlIGV4dGVybmFsIGNhbGxzIGFyZSBoYW5kbGVkLiBJIG5lZWQgdG8ga2VlcCB0aGUgY29kZSBlZmZpY2llbnQgYW5kIHN0cmVhbWxpbmVkLiBJJ20gbm90aW5nIHRoYXQgYHNjYV9leHRfY2FsbF9wZW5kaW5nYCwgYHNjYV9pbmplY3RfZXh0X2NhbGxgLCBhbmQgYHNjYV9jbGVhcl9leHRfY2FsbGAgYXJlIHN0YXRpYywgd2hpY2ggc2ltcGxpZmllcyB0aGVpciBpbmNsdXNpb24gaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBDb25zaWRlcmluZyB0aGVpciBzdGF0aWMgbmF0dXJlLCBJIHdvbid0IG5lZWQgdG8gY29uc2lkZXIgdGhlbS4gSSdtIGdvaW5nIHRvIHNraXAgdGhlbSBmcm9tIGFueSBmdXJ0aGVyIGFuYWx5c2lzIGluIHRoaXMgY2FzZSwgYXMgdGhleSBkb24ndCBzZWVtIGRpcmVjdGx5IHJlbGV2YW50IHRvIHdoYXQgSSdtIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHdvcmsgd2l0aCB0aGUgbWVtb3J5LlxuXG5SaWdodCBub3csIEkgYW0gZ29pbmcgdG8gY2hlY2sgYGFyY2gvczM5MC9rdm0vZmF1bHRpbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGxvb2sgYXQgdGhlIGBrdm1fczM5MF9mYXVsdGluX2dmbmAgZnVuY3Rpb24gZm9yIHNvbWUgY2x1ZXMuIEknbSBob3BpbmcgaXQnbGwgb2ZmZXIgc29tZSBpbnNpZ2h0IGludG8gaG93IGZhdWx0cyBhcmUgaGFuZGxlZCwgd2hpY2ggcmVsYXRlcyBkaXJlY3RseSB0byB0aGUgZXh0ZXJuYWwgY2FsbCBtZWNoYW5pc21zIEknbSBsb29raW5nIGludG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NjU2LCJPdXRwdXRUb2tlbnMiOjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDQ6MTMuMjA3ODQ1NDYxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA5OTA1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZHxsb25nfGJvb2wpIFthLXpBLVowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2ZhdWx0aW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0xNC1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzoxNTpib29sIGt2bV9hcmNoX3NldHVwX2FzeW5jX3BmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTYtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0zMi0gKi9cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzozMzppbnQga3ZtX3MzOTBfZmF1bHRpbl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYXVsdCAqZilcXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0zNC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0xMjgtXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6MTI5OmludCBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYXVsdCAqZiwgZ2ZuX3QgZ2ZuLCBib29sIHcpXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTMwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDQ6MTMuMzE4ODQwMzQ5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MTU3OTgyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTS9zMzkwIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIG1ha2luZyBzb21lIGRlY2lzaW9ucyBhYm91dCBwb3RlbnRpYWwgYXJlYXMgZm9yIHJldmlldyBvciByZWZhY3RvcmluZywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHN5bWJvbCB2aXNpYmlsaXR5LiBJIG5vdGVkIHRoYXQgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCBpcyAqbm90KiBkZWNsYXJlZCBzdGF0aWMsIHdoaWNoIGlzIGEga2V5IG9ic2VydmF0aW9uLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEknbSBnb2luZyB0byBzdW1tYXJpemUgdGhlIHJlbGV2YW50IHN5bWJvbHM6IGBrdm1fYXJjaF92bV9pb2N0bGAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25gLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAsIGFuZCBvZiBjb3Vyc2UgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCDigJMgdGhpcyBpcyBteSBwcmltYXJ5IGludGVyZXN0LlxuXG5JIGluaXRpYWxseSB0aG91Z2h0IGBrdm1fYXJjaF92bV9pb2N0bGAgbWlnaHQgYmUgYSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9uLCBidXQgcXVpY2tseSByZWFsaXplZCBpdCdzIGFjdHVhbGx5IHRoZSBWTSBpb2N0bCBoYW5kbGVyLiBJdCdzIGEgZnVuZGFtZW50YWwgZW50cnkgcG9pbnQsIGJ1dCBub3QgaW4gdGhlIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhdGggbGlrZSBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBUaGF0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIGZvciBmdXR1cmUgb3B0aW1pemF0aW9uIGNvbnNpZGVyYXRpb25zLiBJIHdhbnRlZCB0byB2ZXJpZnkgaWYgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gIGlzIHJlYWNoYWJsZSB2aWEgYGt2bV9hcmNoX3ZtX2lvY3RsYCBiZWNhdXNlIEkgdGhvdWdodCB0aGF0IG1pZ2h0IGhhdmUgYmVlbiB0aGUgYmV0dGVyIG9wdGlvbi4gSSBjYW4gY29uZmlybSwgdmlhIHRoZSBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgaW9jdGwgZm9yIGBLVk1fUzM5MF9WTV9NSUdSQVRJT05gLCB0aGF0IGl0IGlzLiBCdXQsIEkgbG9va2VkIGF0IGl0IGFuZCBpdCdzIHN0YXRpYy4gU28sIGl0IGxvb2tzIGxpa2UgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyB0aGUgY29ycmVjdCBzeW1ib2wuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhlIG90aGVyIHN5bWJvbHMuIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgaXMgYWxzbyBub24tc3RhdGljLiBUaGVuIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBhbmQgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCBhcmUgbm9uLXN0YXRpYyBhcyB3ZWxsLiBBbHNvLCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gIGlzLCB0b28sIG5vbi1zdGF0aWMuXG5cbkJlZm9yZSBJIG1vdmUgb24sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBzMzkwIEtjb25maWcgdG8gc2VlIGlmIGFueXRoaW5nIHRoZXJlIGluZmx1ZW5jZXMgdGhlc2UgY2hvaWNlcy4gVGhhdCBtaWdodCBnaXZlIG1lIHNvbWUgY2x1ZXMgYWJvdXQgd2h5IHRoZXNlIHdlcmUgZGVzaWduZWQgdGhpcyB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MzA4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjQ0OjIxLjkzNDY0Njc3NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMwNjczODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0NDoyMi4wMjc3MTgxMDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4ODAzMzAyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBDb25maWd1cmF0aW9uIGFuZCBGb2N1cyBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBLVk0gcGF0Y2gsIGFuZCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIHNlZW1zIHRvIGJlIGBLVk1gLCBuYXR1cmFsbHkuIEhvd2V2ZXIsIGBLVk1fUzM5MF9VQ09OVFJPTGAgaXMgYWxzbyBtZW50aW9uZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSlgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBLVk1fUzM5MF9VQ09OVFJPTGAgaXMgZXNzZW50aWFsIGhlcmUsIHNvIGxldCdzIGNoZWNrLlxuXG5UaGUgY29kZSBzbmlwcGV0cyBpbmNsdWRlIGNoZWNrcyBsaWtlIGBpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlgIHdoaWNoIGRpcmVjdGx5IHVzZXMgYEtWTV9TMzkwX1VDT05UUk9MYCwgYW5kIGJhc2VkIG9uIHRoYXQsIGl04oCZcyByZWxldmFudCB0byB0aGUgb3BlcmF0aW9uLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbmNsdWRlIGl0IGluIHRoZSBgRW5hYmxlQ29uZmlnc2AuXG5cbk5leHQsIEknbGwgc2NhbiBmb3IgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgQ09ORklHX0tWTWAgaXMgZGVmaW5pdGVseSBhIGNvcmUgcmVxdWlyZW1lbnQuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhlICdmb2N1cyBzeW1ib2xzJyDigJMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIHNldmVyYWw6IGBrdm1fYXJjaF92bV9pb2N0bGAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25gLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAsIGFuZCBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gLiBCdXQgYXJlIHRoZXJlIGFueSBvdGhlcnM/XG5cbkkgc2VlIGBoYW5kbGVfcnJiZWAgYW5kIGBoYW5kbGVfZXNzYWAgYXJlIHN0YXRpYywgYnV0IHRoZXkgYXJlIGNhbGxlZCBmcm9tIGluc3RydWN0aW9uIGludGVyY2VwdCBoYW5kbGVycy4gVGhlIGVudHJ5IHBvaW50IGZvciB0aGF0IHNlZW1zIHRvIGJlIGBrdm1faGFuZGxlX3NpZV9pbnRlcmNlcHRgLCB3aGljaCBpcyBhIGhvdCBwYXRoLiBBbmQgYWxzbywgYGt2bV9zMzkwX2tleW9wYCBpcyBzdGF0aWMsIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF9kZXZfaW9jdGxgIG9yIGBrdm1fYXJjaF92bV9pb2N0bGAuIEFsc28sIGBrdm1fczM5MF9nZXRfc2tleXNgLCBga3ZtX3MzOTBfc2V0X3NrZXlzYCwgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgIGFyZSBzdGF0aWMsIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF92bV9pb2N0bGAuIFRoZW4gdGhlcmUgYXJlIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAgd2hpY2ggaW5jbHVkZXMgY2hhbmdlcyByZWxhdGVkIHRvIGBrdm1faXNfdWNvbnRyb2xgIGFuZCBga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlYCB3aGljaCBpbmNsdWRlcyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYHZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZGAuXG5cbk9rYXksIEkgbmVlZCB0byBhZGQgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCBhbmQgYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAgdG8gdGhlIGZvY3VzIHN5bWJvbHMuXG5cblNvLCBoZXJlJ3MgbXkgdXBkYXRlZCBsaXN0OiBga3ZtX2FyY2hfdm1faW9jdGxgLCBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLCBga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCwgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCwgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCwgYW5kIGBrdm1fczM5MF9mYXVsdGluX2dmbmAuXG5cbk5vdywgdGltZSB0byByZWZpbmUgdGhlIGxpc3QgdG8gYXZvaWQgZ2VuZXJpYyBzeW1ib2xzLiBga3ZtX2FyY2hfdm1faW9jdGxgIGlzIGZpbmU7IGl0J3MgdGhlIGVudHJ5IHBvaW50IGZvciBWTSBpb2N0bHMuIFNhbWUgd2l0aCBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLCBhbmQgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYC4gSG93ZXZlciwgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGFuZCBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgIGFyZSBzcGVjaWZpYyB0byBQViAoUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uKS4gYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCBpcyBEQVQtc3BlY2lmaWMgKER5bmFtaWMgQWRkcmVzcyBUcmFuc2xhdGlvbiksIGFuZCBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gIGlzIGFib3V0IHBhZ2UgZmF1bHQgaGFuZGxpbmcuXG5cblRoaXMgbG9va3MgbGlrZSBhIHNvbGlkLCBzcGVjaWZpYyBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuXG5cbk5vdywgZmluYWwgY2hlY2sg4oCTIGFyZSBgS1ZNYCBhbmQgYEtWTV9TMzkwX1VDT05UUk9MYCB0aGUgb25seSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcz8gSSBuZWVkIHRvIHRoaW5rIGlmIHRoZXJlIGFyZSBQVi1yZWxhdGVkIGNvbmZpZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NDIyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjQ0OjM0LjkwODA1MTAzMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4NjI5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0NDozNC45NzA5MjAzNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg0Mjg1OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGggUGVyc2lzdGVudCBWaXJ0dWFsIE1hY2hpbmVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSdzIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIHRoaW5nP1wiIEkga25vdyB0aGUgYXJjaGl0ZWN0dXJlIGlzIHMzOTAsIHNvIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50cyBhcmUgdGhlIEtjb25maWcgZmlsZXMgc3BlY2lmaWMgdG8gdGhlIGFyY2hpdGVjdHVyZSBhbmQgS1ZNIGludGVncmF0aW9uLCBuYW1lbHkgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgYW5kIGBhcmNoL3MzOTAvS2NvbmZpZ2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFBlcnNpc3RlbnQgVk1zIGV4aXN0IGluIHRob3NlIGxvY2F0aW9ucy4gTGV0J3MgZGlnIGluIGFuZCBjaGVjay4gVGhhdCBzaG91bGQgYmUgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIGludmVzdGlnYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTQ1MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjQ0OjM4LjY1NTIwOTUyM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzNzcyMjgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyAuKlBWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjQ0OjM4LjcyNzU5NTU0MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjIxMjI3MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHByb3RlY3RlZCBtZW1vcnkgcmVnaW9ucyBhcmUgY29uZmlndXJlZCBmb3IgczM5MCBhcmNoaXRlY3R1cmUgd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IGFyY2hpdGVjdHVyZS4gSXQncyBhbG1vc3QgYWx3YXlzIHRoZSBjZW50cmFsIHJlcG9zaXRvcnkgZm9yIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgYSBzeW1ib2wgcmVsYXRlZCB0byBwcm90ZWN0aW9uLCBtYXliZSBgUFJPVEVDVEVEYCBpdHNlbGYsIG9yIHNvbWV0aGluZyBzaW1pbGFyIOKAkyBpdCBjb3VsZCBiZSBgU0VDVVJFYCwgYEdVQVJERURgLCBgUkVTVFJJQ1RFRGAsIG9yIGFueXRoaW5nIG9mIHRoYXQgbmF0dXJlLiBJJ20gZXhwZWN0aW5nIHRoaXMgZmlsZSB0byBjb250YWluIHRoZSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIHdoZXRoZXIgdGhpcyBmdW5jdGlvbmFsaXR5IGdldHMgYnVpbHQgaW50byB0aGUga2VybmVsLiBGcm9tIHRoZXJlLCBJIGNhbiB0cmFjZSBiYWNrIHdoZXJlIHRoaXMgaXMgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk2NTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0NDo0My4zNDg4MjU1MjlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTYwNDEzNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIC4qUFJPVEVDVEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjQ0OjQzLjU3ODQzNzAwNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzQ1ODI2NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqUG90ZW50aWFsIE1pc2ludGVycHJldGF0aW9uIG9mIE1lbW9yeSBQcm90ZWN0aW9uIEZsYWcqKlxuXG5IbW0sIEkgd2FzIGp1c3QgcmV2aWV3aW5nIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIG1lbW9yeSBwcm90ZWN0aW9uIGZsYWdzIGZvciB0aGF0IG5ldyBtYXBwaW5nLCBhbmQgZm9yIGEgbW9tZW50IEkgdGhvdWdodCBJIGhhZCB0aGUgd3JvbmcgZmxhZy4gSSB3YXMgY29uc2lkZXJpbmcgYFBST1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUNgLCBidXQgdGhlbiBJIGhhZCB0aGlzIGZsaWNrZXIgb2YgZG91YnQuIERpZCBJIHBlcmhhcHMgbWlzcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiwgb3IgbWF5YmUgbWlzcmVtZW1iZXIgdGhlIGludGVuZGVkIGFjY2VzcyBwZXJtaXNzaW9ucz8gQ291bGQgaXQgYmUgdGhhdCB3aGF0IEkgKnJlYWxseSogbmVlZCBoZXJlIGlzIGBQUk9UX1ZJUlRgPyBJdCdzIHRoZSBvbmUgSSBzaG91bGQgZG91YmxlLWNoZWNrIHNpbmNlIEkgZG8gbm90IHdhbnQgdG8gbWlzdGFrZW5seSBncmFudCB1bm5lY2Vzc2FyeSBwZXJtaXNzaW9ucyBmb3Igc2VjdXJpdHkgb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gSSBzaG91bGQgZ28gYmFjayBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9uIGFnYWluc3QgdGhlIGRvY3VtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5ODgzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDQ6NDguMzI0MjY2MjIxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDAwNDU4OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIC4qUFJPVF9WSVJUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjQ0OjQ4LjM3NDI3NjgxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NzQ3MjYzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBwdi5jYCBvbiBzMzkweCBLVk0qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBzMzkweCBLVk0ncyBwYXJhdmlydHVhbGl6YXRpb24gY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBwb3RlbnRpYWwgcGxhdGZvcm0tc3BlY2lmaWMgYWRhcHRhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNjYW4gYGFyY2gvczM5MC9rdm0vcHYuY2Agd2l0aCBhIGxhc2VyIGZvY3VzIG9uIGAjaWZkZWZgIGRpcmVjdGl2ZXMuIEknbSBsb29raW5nIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MuIFRoaXMgd2lsbCBzaG93IG1lIHdoZXJlIHRoZSBhcmNoaXRlY3R1cmUgbWlnaHQgaGF2ZSBkaXZlcmdlZCBmb3Igc3BlY2lmaWMgZmVhdHVyZSBzZXRzLCB2ZW5kb3IgcXVpcmtzLCBvciBvbGRlciBrZXJuZWxzIGFuZCBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgUFYgY29kZSBoYW5kbGVzIGl0LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXQgY2hlY2tzIG9yIG1heWJlIGV2ZW4gaGFuZGxpbmcgb2YgZGlmZmVyZW50IEtWTSBoeXBlcnZpc29yIHZlcnNpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgYWRhcHRzIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCBwb3RlbnRpYWxseSB2YXJ5aW5nIEtWTSBob3N0IGNhcGFiaWxpdGllcy4gSSdtIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGFyZSBnb2luZyB0byBndWlkZSBtZSB0byB0aG9zZSBjcml0aWNhbCBhcmVhcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZGVidWdnaW5nIGFuZCBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAxMTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0NDo1Mi45NDkwMDYyODhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNDQ0MzA5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9wdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0NDo1Mi45OTA0NTgxMTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM1MzY1NjkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgczM5MCBLVk0gU3Vic3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBpcyBjb25zaXN0ZW50bHkgY29tcGlsZWQgd2hlbmV2ZXIgS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBpcyBlbmFibGVkIG9uIHMzOTAuIFRoaXMgaXMgaW1wb3J0YW50IHRvIG5vdGUgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLlxuXG5MZXQncyBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uczogYEtWTWAgYW5kIGBLVk1fUzM5MF9VQ09OVFJPTGAuIE5vdywgbGV0J3MgbG9vayBhdCB0aGUgc3ltYm9scyB0aGF0IGRyaXZlIHRoZSBmb2N1cyBvZiBvdXIgYW5hbHlzaXMuIEkgc2VlIHRoZXNlOiBga3ZtX2FyY2hfdm1faW9jdGxgLCBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLCBga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCwgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCwgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCwgYW5kIGBrdm1fczM5MF9mYXVsdGluX2dmbmAuXG5cblRoZSByZWFzb24gdGhlc2UgYXJlIGltcG9ydGFudCBpcyBiZWNhdXNlIHRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgbWFraW5nIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gc3Vic3lzdGVtLiBUaGVzZSBjaGFuZ2VzIGFyZSBhZGRyZXNzaW5nIHRoaW5ncyBsaWtlIG1lbW9yeSBsZWFrcywgbG9ja2luZyBpc3N1ZXMsIGluaXRpYWxpemF0aW9uIHJhY2VzLCBhbmQgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cy4gSXQncyBtb2RpZnlpbmcgY29yZSBLVk0gaW9jdGxzLCBob3cgbWVtb3J5IHJlZ2lvbnMgYXJlIG1hbmFnZWQsIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBQViBDUFUgbGlmZWN5Y2xlLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGFyZSBhbGwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBlaXRoZXIgdGhyb3VnaCBLVk0gaW9jdGxzIG9yIG1lbW9yeSBhY2Nlc3Nlcywgd2hpY2ggbWVhbnMgdGhleSdyZSBleGNlbGxlbnQgdGFyZ2V0cyBmb3IgZnV6emluZy5cblxuTGV0J3MgcXVpY2tseSBjaGVjayBhIGNvdXBsZSBvZiB0aGVzZSBzeW1ib2xzLiBga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlYCBzZWVtcyBmaW5lIGFzIGEgc3ltYm9sLCBhcyBpdCdzIGNhbGxlZCBvbmNlIHBlciB2Q1BVIGNyZWF0aW9uLiBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gIGlzIHRyaWdnZXJlZCBkdXJpbmcgcGFnZSBmYXVsdHMsIHdoaWNoIGlzIGFsc28gYSBnb29kIHRhcmdldC4gYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCBpcyBjYWxsZWQgZHVyaW5nIGBLVk1fUzM5MF9LRVlPUF9SUkJFYCBhbmQgYGhhbmRsZV9ycmJlYC4gVGhhdCdzIGFsc28gZ29vZC5cblxuV2l0aCB0aGlzIHNvbGlkIHVuZGVyc3RhbmRpbmcsIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA0MDksIk91dHB1dFRva2VucyI6MjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjQ1OjAyLjM0NDExNzY2MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNjQzMDY5LCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fUzM5MF9VQ09OVFJPTCIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9TMzkwX1VDT05UUk9MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdm1faW9jdGxcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfY3JlYXRlXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVcIixcbiAgICBcImt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdFwiLFxuICAgIFwia3ZtX3MzOTBfZmF1bHRpbl9nZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGZpeGVzIGZvciBtZW1vcnkgbGVha3MsIGxvY2tpbmcsIGluaXRpYWxpemF0aW9uIHJhY2VzLCBhbmQgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cy4gSXQgbW9kaWZpZXMgY29yZSBLVk0gaW9jdGxzLCBtZW1vcnkgcmVnaW9uIG1hbmFnZW1lbnQsIGFuZCBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBDUFUgbGlmZWN5Y2xlIGZ1bmN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgYWNjZXNzZXMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fUzM5MF9VQ09OVFJPTFwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0NTowMi40MTc3Njg1MjlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyNjUxNjQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCBhc3N1bWluZyBJJ20gYSBMaW51eCBrZXJuZWwgZGV2ZWxvcGVyL0tWTSBzcGVjaWFsaXN0OlxuXG4qKkNoZWNraW5nIGZvciBLVk1fUzM5MF9VQ09OVFJPTCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsICpLVk1fUzM5MF9VQ09OVFJPTCouLi4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGJlaW5nIGEgdGhpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gTGV0IG1lIGNvbmZpcm0sIGl0IHNob3VsZCBiZSBpbiB0aGUgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgZXhhY3QgbmFtZSBjb3JyZWN0LCBhcyBhIG1pc3NwZWxsaW5nIGhlcmUgd291bGQgYmUgYSByZWFsIHdhc3RlIG9mIHRpbWUuIEkgY2FuJ3QgYmUgb2ZmIGJ5IGV2ZW4gYSBjaGFyYWN0ZXIuIE9rYXksIGxldCBtZSBxdWlja2x5IHZlcmlmeSB0aGUgZXhhY3QgZGVzaWduYXRpb24uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE1NDgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInNldC1yZXN1bHRzIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDU6MDYuNzQ0Mjg4MTgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYzMTcxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWc9MTk9Y29uZmlnIEtWTVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDU6MDYuODgwNjExMTc5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTk4NDI2MTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIEVycm9yKipcblxuT2theSwgc28gdGhlIGVycm9yIG1lc3NhZ2UgaXMgc2NyZWFtaW5nIGFib3V0IGBLVk1fUzM5MF9VQ09OVFJPTGAgbm90IGJlaW5nIGZvdW5kLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8sIG9mIGNvdXJzZSwgY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLiBCdXQgaG9sZCBvbiwgdGhlIHRvb2wgbWlnaHQgYmUgbG9va2luZyBmb3IgdGhpcyBjb25maWd1cmF0aW9uIHVuZGVyIGB4ODZgLCB3aGljaCwgYXMgd2Uga25vdywgaXNuJ3QgdGhlIG9ubHkgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzZWFyY2ggaXNuJ3QgZXJyb25lb3VzbHkgZmlsdGVyaW5nIGJ5IGFyY2hpdGVjdHVyZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYEtWTV9TMzkwX1VDT05UUk9MYCBpcyAqYWN0dWFsbHkqIHRoZSBjb3JyZWN0IG5hbWUgZm9yIHRoZSBjb25maWcsIGp1c3QgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBmYXQtZmluZ2VyZWQgc29tZXRoaW5nLiBZZXAsIGxvb2tzIGdvb2QgdGhlcmUuIElmIHRoZSB0b29sIGlzIHN0aWxsIGJlaW5nIGRpZmZpY3VsdCBhbmQgcmVqZWN0aW5nIGl0LCBJJ2xsIGp1c3Qgc2tpcCBgS1ZNX1MzOTBfVUNPTlRST0xgIGFuZCB1c2UgdGhlIG1vcmUgZ2VuZXJhbCBgS1ZNYCBjb25maWcuIEl0IG1pZ2h0IGJlIGEgd29ya2Fyb3VuZCwgYnV0IEkgaGF2ZSBhIGhpZ2ggZGVncmVlIG9mIGNvbmZpZGVuY2UgdGhhdCB0aGUgbW9yZSBnZW5lcmFsIGNvbmZpZyB3aWxsIGJlIGZ1bmN0aW9uYWxseSBzdWZmaWNpZW50LCBhdCBsZWFzdCBhcyBhIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTg4MCwiT3V0cHV0VG9rZW5zIjoyMzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDU6MTcuNDc5MDQwNjMzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4Mjg1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZtX2lvY3RsXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2NyZWF0ZVwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiLFxuICAgIFwia3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJrdm1fczM5MF9wdl9jcmVhdGVfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9wdl9kZXN0cm95X2NwdVwiLFxuICAgIFwiZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRcIixcbiAgICBcImt2bV9zMzkwX2ZhdWx0aW5fZ2ZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBzdWJzeXN0ZW0sIGluY2x1ZGluZyBmaXhlcyBmb3IgbWVtb3J5IGxlYWtzLCBsb2NraW5nLCBpbml0aWFsaXphdGlvbiByYWNlcywgYW5kIHNpZ25hbCBoYW5kbGluZyBkdXJpbmcgcGFnZSBmYXVsdHMuIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIGlvY3RscywgbWVtb3J5IHJlZ2lvbiBtYW5hZ2VtZW50LCBhbmQgUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgQ1BVIGxpZmVjeWNsZSBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgbWVtb3J5IGFjY2Vzc2VzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9jcmVhdGVcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZVwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvblwiLFxuICAgIFwia3ZtX3MzOTBfcHZfY3JlYXRlX2NwdVwiLFxuICAgIFwia3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVcIixcbiAgICBcImRhdF9yZXNldF9yZWZlcmVuY2VfYml0XCIsXG4gICAgXCJrdm1fczM5MF9mYXVsdGluX2dmblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gc3Vic3lzdGVtLCBpbmNsdWRpbmcgZml4ZXMgZm9yIG1lbW9yeSBsZWFrcywgbG9ja2luZywgaW5pdGlhbGl6YXRpb24gcmFjZXMsIGFuZCBzaWduYWwgaGFuZGxpbmcgZHVyaW5nIHBhZ2UgZmF1bHRzLiBJdCBtb2RpZmllcyBjb3JlIEtWTSBpb2N0bHMsIG1lbW9yeSByZWdpb24gbWFuYWdlbWVudCwgYW5kIFByb3RlY3RlZCBWaXJ0dWFsaXphdGlvbiAoUFYpIENQVSBsaWZlY3ljbGUgZnVuY3Rpb25zLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBhY2Nlc3NlcywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxgjxg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 06:24:50 +0000 UTC FinishedAt: 2026-08-01 06:45:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "1bf9e983-10ac-4f0f-8936-71acd7ec53b4" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vm_ioctl", "kvm_arch_vcpu_create", "kvm_arch_vcpu_postcreate", "kvm_arch_commit_memory_region", "kvm_arch_prepare_memory_region", "kvm_s390_pv_create_cpu", "kvm_s390_pv_destroy_cpu", "dat_reset_reference_bit", "kvm_s390_faultin_gfn" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfY3JlYXRlX2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9kZXN0cm95X2NwdSYjMzQ7LAogICAgJiMzNDtkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9mYXVsdGluX2dmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGZpeGVzIGZvciBtZW1vcnkgbGVha3MsIGxvY2tpbmcsIGluaXRpYWxpemF0aW9uIHJhY2VzLCBhbmQgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cy4gSXQgbW9kaWZpZXMgY29yZSBLVk0gaW9jdGxzLCBtZW1vcnkgcmVnaW9uIG1hbmFnZW1lbnQsIGFuZCBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBDUFUgbGlmZWN5Y2xlIGZ1bmN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgYWNjZXNzZXMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjY3YjIyZWI5YzMzOTgxOTFlZDFmOTBkMzU5NjVkY2M2OGVhZjkxM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDY6NDI6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggZWFhMzRjNWJkM2MxMS4uZWRmNzViNmFkMjBjZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTQ0MCw2ICYjNDM7NDQwLDcgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFx0Ym9vbCBza2V5X2VuYWJsZWQ7XG4gXHQvKiBJbmRpY2F0b3IgaWYgdGhlIGFjY2VzcyByZWdpc3RlcnMgaGF2ZSBiZWVuIGxvYWRlZCBmcm9tIGd1ZXN0ICovXG4gXHRib29sIGFjcnNfbG9hZGVkO1xuJiM0MztcdGJvb2wgaW5pdGlhbGl6ZWQ7XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfcHZfdmNwdSBwdjtcbiBcdHVuaW9uIGRpYWczMThfaW5mbyBkaWFnMzE4X2luZm87XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuaW5kZXggZWQ0MjU5ZDE3NjI5NS4uM2YyZDZlODkwMmQ3NiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbkBAIC03NTUsMTMgJiM0Mzs3NTUsMTUgQEAgaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZcbiBcdHJldHVybiByYztcbiB9XG4gXG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxuJiM0MztpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpXG4ge1xuIFx0dW5pb24gcGdzdGUgcGdzdGUsIG9sZDtcbiBcdHVuaW9uIGNyc3RlICpjcnN0ZXA7XG4gXHR1bmlvbiBwdGUgKnB0ZXA7XG4gXHRpbnQgcmM7XG4gXG4mIzQzO1x0c2tleS1cdTAwM2Vza2V5ID0gMDtcbiYjNDM7XG4gXHRyYyA9IGRhdF9lbnRyeV93YWxrKE5VTEwsIGdmbiwgYXNjZSwgREFUX1dBTEtfQU5ZLCBUQUJMRV9UWVBFX1BBR0VfVEFCTEUsIFx1MDAyNmNyc3RlcCwgXHUwMDI2cHRlcCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbkBAIC03NzEsMjEgJiM0Mzs3NzMsMjMgQEAgaW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxuIFxuIFx0XHRpZiAoIWNyc3RlLmguZmMgfHwgIWNyc3RlLnMuZmMxLnByKVxuIFx0XHRcdHJldHVybiAwO1xuLVx0XHRyZXR1cm4gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSk7XG4mIzQzO1x0XHRza2V5LVx1MDAzZXNrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKSBcdTAwM2NcdTAwM2MgMTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuIFx0b2xkID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4gXHRwZ3N0ZSA9IG9sZDtcbiBcbiBcdGlmICghcHRlcC1cdTAwM2VoLmkpIHtcbi1cdFx0cmMgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQocHRlX29yaWdpbigqcHRlcCkpO1xuLVx0XHRwZ3N0ZS5ociA9IHJjIFx1MDAzZVx1MDAzZSAxO1xuJiM0MztcdFx0c2tleS1cdTAwM2Vza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKSBcdTAwM2NcdTAwM2MgMTtcbiYjNDM7XHRcdHBnc3RlLmhyID0gc2tleS1cdTAwM2VyO1xuIFx0fVxuLVx0cmMgfD0gKHBnc3RlLmdyIFx1MDAzY1x1MDAzYyAxKSB8IHBnc3RlLmdjO1xuJiM0MztcdHNrZXktXHUwMDNlciB8PSBwZ3N0ZS5ncjtcbiYjNDM7XHRza2V5LVx1MDAzZWMgfD0gcGdzdGUuZ2M7XG4gXHRwZ3N0ZS5nciA9IDA7XG4gXG4gXHRkYXRfdXBkYXRlX3B0ZXBfc2Qob2xkLCBwZ3N0ZSwgcHRlcCk7XG4gXHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbi1cdHJldHVybiByYztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGxvbmcgZGF0X3Jlc2V0X3NrZXlzX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuQEAgLTg0Niw2ICYjNDM7ODUwLDcgQEAgc3RhdGljIGxvbmcgX2RhdF9zbG90X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxcbiBcdHN0cnVjdCBzbG90X3ByaXYgKnAgPSB3YWxrLVx1MDAzZXByaXY7XG4gXHR1bmlvbiBjcnN0ZSBkdW1teSA9IHsgLnZhbCA9IHAtXHUwMDNldG9rZW4gfTtcbiBcdHVuaW9uIHB0ZSBuZXdfcHRlLCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApO1xuJiM0MztcdHVuaW9uIHBnc3RlIHBnc3RlO1xuIFxuIFx0bmV3X3B0ZSA9IF9QVEVfVE9LKGR1bW15LnRvay50eXBlLCBkdW1teS50b2sucGFyKTtcbiBcbkBAIC04NTMsNyAmIzQzOzg1OCwxMSBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxuIFx0aWYgKHB0ZS52YWwgPT0gbmV3X3B0ZS52YWwpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZGF0X3B0ZXBfeGNoZyhwdGVwLCBuZXdfcHRlLCBnZm4sIHdhbGstXHUwMDNlYXNjZSwgZmFsc2UpO1xuJiM0MztcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4mIzQzO1x0cGdzdGUgPSBfX2RhdF9wdGVwX3hjaGcocHRlcCwgcGdzdGUsIG5ld19wdGUsIGdmbiwgd2Fsay1cdTAwM2Vhc2NlLCBmYWxzZSk7XG4mIzQzO1x0cGdzdGUuY21tYV9kID0gMDtcbiYjNDM7XHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuaCBiL2FyY2gvczM5MC9rdm0vZGF0LmhcbmluZGV4IGZhZDYwNTMwNWUwNWMuLjE0MWVlN2I5ZjAxOTEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2RhdC5oXG5AQCAtNTM3LDcgJiM0Mzs1MzcsNyBAQCBpbnQgZGF0X3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZlxuIFx0XHRcdHVuaW9uIHNrZXkgc2tleSwgYm9vbCBucSk7XG4gaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRcdCAgICAgdW5pb24gc2tleSBza2V5LCB1bmlvbiBza2V5ICpvbGRrZXksIGJvb2wgbnEsIGJvb2wgbXIsIGJvb2wgbWMpO1xuLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbik7XG4mIzQzO2ludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSk7XG4gbG9uZyBkYXRfcmVzZXRfc2tleXModW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCk7XG4gXG4gdW5zaWduZWQgbG9uZyBkYXRfZ2V0X3B0dmFsKHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IHB0dmFsX3BhcmFtIHBhcmFtKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXG5pbmRleCBmZWU4MDA0N2JkOTRmLi4zY2M0NWY3ZjViMmQ3IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXG5AQCAtOTEsOSAmIzQzOzkxLDkgQEAgaW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmFcbiBcdFx0LyogQWNjZXNzIG91dHNpZGUgbWVtb3J5LCBhZGRyZXNzaW5nIGV4Y2VwdGlvbi4gKi9cbiBcdFx0aWYgKGlzX25vc2xvdF9wZm4oZi1cdTAwM2VwZm4pKVxuIFx0XHRcdHJldHVybiBQR01fQUREUkVTU0lORztcbi1cdFx0LyogU2lnbmFsIHBlbmRpbmc6IHRyeSBhZ2Fpbi4gKi9cbi1cdFx0aWYgKGYtXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1NJR1BFTkRJTkcpXG4tXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0XHQvKiBGYXRhbCBzaWduYWwgcGVuZGluZzogYmFpbCBvdXQuICovXG4mIzQzO1x0XHRpZiAoaXNfc2lncGVuZGluZ19wZm4oZi1cdTAwM2VwZm4pKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIFx0XHQvKiBDaGVjayBpZiBpdCYjMzk7cyByZWFkLW9ubHkgbWVtb3J5OyBkb24mIzM5O3QgdHJ5IHRvIGFjdHVhbGx5IGhhbmRsZSB0aGF0IGNhc2UuICovXG4gXHRcdGlmIChmLVx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9ST19GQVVMVClcbiBcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbmluZGV4IDllM2U2YjBkNzJhZDYuLjYwMTNmMjhlMzQ2MWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5AQCAtNDUsMTMgJiM0Mzs0NSwxNiBAQCBzdGF0aWMgc3RydWN0IGt2bV9zMzkwX2dpYiAqZ2liO1xuIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4tXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCBzaWdwX2N0cmwgPSBzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuJiM0MztcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybDtcbiBcbiBcdGlmICgha3ZtX3MzOTBfdGVzdF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHRpZiAoS1ZNX0JVR19PTihrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdEJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpO1xuIFxuJiM0MztcdHNpZ3BfY3RybCA9IHNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4gXHRpZiAoc3JjX2lkKVxuIFx0XHQqc3JjX2lkID0gc2lncF9jdHJsLnNjbjtcbiBcbkBAIC02MCwxMyAmIzQzOzYzLDE2IEBAIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcbiBcbiBzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKVxuIHtcbi1cdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnNjYTtcbi1cdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmwgPSBcdTAwMjZzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuIFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgb2xkX3ZhbCwgbmV3X3ZhbCA9IHsuc2NuID0gc3JjX2lkLCAuYyA9IDF9O1xuJiM0MztcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnNjYTtcbiYjNDM7XHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsO1xuIFx0aW50IGV4cGVjdCwgcmM7XG4gXG4gXHRCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTtcbiYjNDM7XHRpZiAoS1ZNX0JVR19PTihrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRzaWdwX2N0cmwgPSBcdTAwMjZzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuIFx0b2xkX3ZhbCA9IFJFQURfT05DRSgqc2lncF9jdHJsKTtcbiBcdG9sZF92YWwuYyA9IDA7XG4gXG5AQCAtODQsMTAgJiM0Mzs5MCwxMyBAQCBzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKVxuIHN0YXRpYyB2b2lkIHNjYV9jbGVhcl9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuLVx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4mIzQzO1x0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybDtcbiBcbi1cdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXG4mIzQzO1x0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkIHx8IGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGl6ZSBhZnRlciB0aGUgYWJvdmUgY2hlY2ssIHRvIHByZXZlbnQgZ29pbmcgb3V0IG9mIGJvdW5kcyAqL1xuJiM0MztcdHNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4gXHRrdm1fczM5MF9jbGVhcl9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpO1xuIFxuIFx0V1JJVEVfT05DRShzaWdwX2N0cmwtXHUwMDNldmFsdWUsIDApO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuaW5kZXggMTUwYjVkZDIxNzBlMi4uNjY4MjcyZGZmYTE4YiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5AQCAtNTcxLDcgJiM0Mzs1NzEsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcFxuIFx0c3dpdGNoIChvcCkge1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9TU0tFOlxuIFx0XHRyID0gZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KG1jLCBhc2NlLCBnZm4sIHNrZXksIFx1MDAyNnNrZXksIDAsIDAsIDApO1xuLVx0XHRpZiAociBcdTAwM2U9IDApXG4mIzQzO1x0XHRpZiAociA9PSAwIHx8IHIgPT0gMSlcbiBcdFx0XHRyZXR1cm4gc2tleS5za2V5O1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfSVNLRTpcbkBAIC01ODAsMTQgJiM0Mzs1ODAsMTQgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3BcbiBcdFx0XHRyZXR1cm4gc2tleS5za2V5O1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfUlJCRTpcbi1cdFx0ciA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KGFzY2UsIGdmbik7XG4tXHRcdGlmIChyIFx1MDAzZSAwKVxuLVx0XHRcdHJldHVybiByIFx1MDAzY1x1MDAzYyAxO1xuJiM0MztcdFx0ciA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KGFzY2UsIGdmbiwgXHUwMDI2c2tleSk7XG4mIzQzO1x0XHRpZiAoIXIpXG4mIzQzO1x0XHRcdHJldHVybiBza2V5LnNrZXk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4tXHRyZXR1cm4gcjtcbiYjNDM7XHRyZXR1cm4gciBcdTAwM2UgMCA/IC1FRkFVTFQgOiByO1xuIH1cbiBcbiAvKiBTZWN0aW9uOiBkZXZpY2UgcmVsYXRlZCAqL1xuQEAgLTEyMTksOCAmIzQzOzEyMTksOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KHN0cnVjdCBrdm0gKmt2bSwgaW50IHJlcSlcbiBcbiAvKlxuICAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVx1MDAzZXNyY3UgaGVsZCB0byBhdm9pZCByYWNlcyBvbiBtZW1zbG90cywgYW5kIHdpdGhcbi0gKiBrdm0tXHUwMDNlc2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcywga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oKSxcbi0gKiBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxuJiM0MzsgKiBrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxuJiM0MzsgKiBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLCBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxuICAqL1xuIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG5AQCAtMTI2NSw3ICYjNDM7MTI2NSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbiB9XG4gXG4gLypcbi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cdTAwM2VzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxuJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG4gICoga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKCkgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cbiAgKi9cbiBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbkBAIC0xMzAwLDcgJiM0MzsxMzAwLDkgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcbiB7XG4gXHRpbnQgcmVzID0gLUVOWElPO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4mIzQzO1x0Z3VhcmQoc3JjdSkoXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiYjNDM7XG4gXHRzd2l0Y2ggKGF0dHItXHUwMDNlYXR0cikge1xuIFx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT05fU1RBUlQ6XG4gXHRcdHJlcyA9IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihrdm0pO1xuQEAgLTEzMTEsNyAmIzQzOzEzMTMsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG4tXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuIFxuIFx0cmV0dXJuIHJlcztcbiB9XG5AQCAtMjIxNCw3ICYjNDM7MjIxNSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuIFx0fVxuIFxuIFx0a3ZmcmVlKGtleXMpO1xuLVx0cmV0dXJuIHI7XG4mIzQzO1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuQEAgLTIyNzYsNyAmIzQzOzIyNzcsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcbiBcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcbiBvdXQ6XG4gXHRrdmZyZWUoa2V5cyk7XG4tXHRyZXR1cm4gcjtcbiYjNDM7XHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gLypcbkBAIC0yMzg2LDcgJiM0MzsyMzg3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbiBcbiBcdHNldF9iaXQoR01BUF9GTEFHX1VTRVNfQ01NLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWZsYWdzKTtcbiBcbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiByIFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xuIH1cbiBcbiAvKipcbkBAIC0yOTM0LDYgJiM0MzsyOTM1LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0Y2FzZSBLVk1fUzM5MF9JTlRFUlJVUFQ6IHtcbiBcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50O1xuIFxuJiM0MztcdFx0ciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAoa3ZtX2lzX3Vjb250cm9sKGt2bSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHRyID0gLUVGQVVMVDtcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMzOTBpbnQsIGFyZ3AsIHNpemVvZihzMzkwaW50KSkpXG4gXHRcdFx0YnJlYWs7XG5AQCAtMjk5OCw5ICYjNDM7MzAwMiw4IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhcmdzLCBhcmdwLCBzaXplb2YoYXJncykpKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbi1cdFx0ciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XHRcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jaylcbiYjNDM7XHRcdFx0ciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbiBcdFx0aWYgKCFyKSB7XG4gXHRcdFx0ciA9IGNvcHlfdG9fdXNlcihhcmdwLCBcdTAwMjZhcmdzLCBzaXplb2YoYXJncykpO1xuIFx0XHRcdGlmIChyKVxuQEAgLTMwMTQsOSAmIzQzOzMwMTcsOSBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHIgPSAtRUZBVUxUO1xuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSlcbiBcdFx0XHRicmVhaztcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuIFx0XHRyID0ga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhrdm0sIFx1MDAyNmFyZ3MpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcdGNhc2UgS1ZNX1MzOTBfUFZfQ09NTUFORDoge1xuQEAgLTM0NjEsNyAmIzQzOzM0NjQsNyBAQCBzdGF0aWMgdm9pZCBzY2FfZGVsX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnNjYTtcbiBcbi1cdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXG4mIzQzO1x0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRjbGVhcl9iaXRfaW52KHZjcHUtXHUwMDNldmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtXHUwMDNlbWNuKTtcbkBAIC0zNDgxLDggJiM0MzszNDg0LDggQEAgc3RhdGljIHZvaWQgc2NhX2FkZF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRXUklURV9PTkNFKHNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zZGEsIHZpcnRfdG9fcGh5cyh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4gXHRzZXRfYml0X2ludih2Y3B1LVx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVx1MDAzZW1jbik7XG4tXHRzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2RhID0gdmlydF90b19waHlzKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNjYV9jYW5fYWRkX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG5AQCAtMzYxMyw2ICYjNDM7MzYxNiw5IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICh0ZXN0X2t2bV9mYWNpbGl0eSh2Y3B1LVx1MDAzZWt2bSwgNzQpIHx8IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudXNlcl9pbnN0cjAgfHxcbiBcdCAgICB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnVzZXJfb3BlcmV4ZWMpXG4gXHRcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlaWN0bCB8PSBJQ1RMX09QRVJFWEM7XG4mIzQzO1xuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZCwgdHJ1ZSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGt2bV9oYXNfcGNrbW9fc3ViZnVuYyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbnIpXG5AQCAtMzY3NCw3ICYjNDM7MzY4MCw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiB2b2lkIGt2bV9zMzkwX3ZjcHVfdW5zZXR1cF9jbW1hKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8pKTtcbiYjNDM7XHRpZiAodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VjYnJsbylcbiYjNDM7XHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VjYnJsbykpO1xuIFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VjYnJsbyA9IDA7XG4gfVxuIFxuQEAgLTM3OTIsMjEgJiM0MzszNzk5LDIxIEBAIGludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7REVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSlcbiYjNDM7XG4gaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlO1xuJiM0MztcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlIF9fZnJlZShzaWVfcGFnZSkgPSBOVUxMO1xuIFx0aW50IHJjO1xuIFxuIFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgc2llX3BhZ2UpICE9IDQwOTYpO1xuLVx0dmNwdS1cdTAwM2VhcmNoLm1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuLVx0aWYgKCF2Y3B1LVx1MDAzZWFyY2gubWMpXG4mIzQzO1x0bWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XG4mIzQzO1x0aWYgKCFtYylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRzaWVfcGFnZSA9IChzdHJ1Y3Qgc2llX3BhZ2UgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tXHRpZiAoIXNpZV9wYWdlKSB7XG4tXHRcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKHZjcHUtXHUwMDNlYXJjaC5tYyk7XG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5tYyA9IE5VTEw7XG4mIzQzO1x0aWYgKCFzaWVfcGFnZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4gXG4gXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrID0gXHUwMDI2c2llX3BhZ2UtXHUwMDNlc2llX2Jsb2NrO1xuIFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VpdGRiYSA9IHZpcnRfdG9fcGh5cyhcdTAwMjZzaWVfcGFnZS1cdTAwM2VpdGRiKTtcbkBAIC0zODQ4LDEwICYjNDM7Mzg1NSw5IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWt2bV92YWxpZF9yZWdzIHw9IEtWTV9TWU5DX0ZQUlM7XG4gXG4gXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSkge1xuLVx0XHRyYyA9IC1FTk9NRU07XG4gXHRcdHZjcHUtXHUwMDNlYXJjaC5nbWFwID0gZ21hcF9uZXdfY2hpbGQodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwLCAtMVVMKTtcbiBcdFx0aWYgKCF2Y3B1LVx1MDAzZWFyY2guZ21hcClcbi1cdFx0XHRnb3RvIG91dF9mcmVlX3NpZV9ibG9jaztcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRWTV9FVkVOVCh2Y3B1LVx1MDAzZWt2bSwgMywgXCYjMzQ7Y3JlYXRlIGNwdSAlZCBhdCAweCVwLCBzaWUgYmxvY2sgYXQgMHglcFwmIzM0OyxcbkBAIC0zODU5LDIwICYjNDM7Mzg2NSwxOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0dHJhY2Vfa3ZtX3MzOTBfY3JlYXRlX3ZjcHUodmNwdS1cdTAwM2V2Y3B1X2lkLCB2Y3B1LCB2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKTtcbiBcbiBcdHJjID0ga3ZtX3MzOTBfdmNwdV9zZXR1cCh2Y3B1KTtcbi1cdGlmIChyYylcbi1cdFx0Z290byBvdXRfdWNvbnRyb2xfdW5pbml0O1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbiYjNDM7XHRcdFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlY2hpbGRyZW5fbG9jaylcbiYjNDM7XHRcdFx0XHRnbWFwX3JlbW92ZV9jaGlsZCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4mIzQzO1x0XHRcdHZjcHUtXHUwMDNlYXJjaC5nbWFwID0gZ21hcF9wdXQodmNwdS1cdTAwM2VhcmNoLmdtYXApO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcdH1cbiBcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBub19mcmVlX3B0cihtYyk7XG4mIzQzO1x0c2llX3BhZ2UgPSBOVUxMO1xuIFx0a3ZtX3MzOTBfdXBkYXRlX3RvcG9sb2d5X2NoYW5nZV9yZXBvcnQodmNwdS1cdTAwM2Vrdm0sIDEpO1xuIFx0cmV0dXJuIDA7XG4tXG4tb3V0X3Vjb250cm9sX3VuaW5pdDpcbi1cdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4tXHRcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4tXHR9XG4tb3V0X2ZyZWVfc2llX2Jsb2NrOlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4tXHRyZXR1cm4gcmM7XG4gfVxuIFxuIGludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC01MDM5LDYgJiM0Mzs1MDQ0LDEwIEBAIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgICAga3ZtX3J1bi1cdTAwM2Vrdm1fZGlydHlfcmVncyBcdTAwMjYgfktWTV9TWU5DX1MzOTBfVkFMSURfRklFTERTKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi9cbiYjNDM7XHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdHZjcHVfbG9hZCh2Y3B1KTtcbiBcbiBcdGlmIChndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpIHtcbkBAIC01NTIzLDYgJiM0Mzs1NTMyLDEwIEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdGxvbmcgcjtcbiBcdHUxNiByYywgcnJjO1xuIFxuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoKSAqL1xuJiM0MztcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0dmNwdV9sb2FkKHZjcHUpO1xuIFxuIFx0c3dpdGNoIChpb2N0bCkge1xuQEAgLTU3NDgsMTEgJiM0Mzs1NzYxLDMwIEBAIGJvb2wga3ZtX2FyY2hfaXJxY2hpcF9pbl9rZXJuZWwoc3RydWN0IGt2bSAqa3ZtKVxuIH1cbiBcbiAvKiBTZWN0aW9uOiBtZW1vcnkgcmVsYXRlZCAqL1xuJiM0MztzdGF0aWMgbG9uZyBjbW1hX2RfY291bnRfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4mIzQzO3tcbiYjNDM7XHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbiYjNDM7XG4mIzQzO1x0cGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcbiYjNDM7XHRpZiAocGdzdGUuY21tYV9kKSB7XG4mIzQzO1x0XHRwZ3N0ZS5jbW1hX2QgPSAwO1xuJiM0MztcdFx0YXRvbWljNjRfZGVjKHdhbGstXHUwMDNlcHJpdik7XG4mIzQzO1x0fVxuJiM0MztcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxuIFx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LFxuIFx0XHRcdFx0ICAgZW51bSBrdm1fbXJfY2hhbmdlIGNoYW5nZSlcbiB7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBjbW1hX2RfY291bnRfcHRlLCB9O1xuJiM0MztcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDtcbiYjNDM7XHRpbnQgcmMgPSAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuJiM0MztcbiBcdGlmIChrdm1faXNfdWNvbnRyb2woa3ZtKSBcdTAwMjZcdTAwMjYgbmV3IFx1MDAyNlx1MDAyNiBuZXctXHUwMDNlaWQgXHUwMDNjIEtWTV9VU0VSX01FTV9TTE9UUylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtNTc3NSw0MyAmIzQzOzU4MDcsMzUgQEAgaW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRpZiAoIWt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdC8qXG4tXHQgKiBUdXJuIG9mZiBtaWdyYXRpb24gbW9kZSB3aGVuOlxuLVx0ICogLSB1c2Vyc3BhY2UgY3JlYXRlcyBhIG5ldyBtZW1zbG90IHdpdGggZGlydHkgbG9nZ2luZyBvZmYsXG4tXHQgKiAtIHVzZXJzcGFjZSBtb2RpZmllcyBhbiBleGlzdGluZyBtZW1zbG90IChNT1ZFIG9yIEZMQUdTX09OTFkpIGFuZFxuLVx0ICogICBkaXJ0eSBsb2dnaW5nIGlzIHR1cm5lZCBvZmYuXG4tXHQgKiBNaWdyYXRpb24gbW9kZSBleHBlY3RzIGRpcnR5IHBhZ2UgbG9nZ2luZyBiZWluZyBlbmFibGVkIHRvIHN0b3JlXG4tXHQgKiBpdHMgZGlydHkgYml0bWFwLlxuLVx0ICovXG4tXHRpZiAoY2hhbmdlICE9IEtWTV9NUl9ERUxFVEUgXHUwMDI2XHUwMDI2XG4tXHQgICAgIShuZXctXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTKSlcbi1cdFx0V0FSTihrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihrdm0pLFxuLVx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBzdG9wIG1pZ3JhdGlvbiBtb2RlXCYjMzQ7KTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi1cdFx0XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcbi1cdFx0XHRcdGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldyxcbi1cdFx0XHRcdGVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpXG4te1xuLVx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgPSBOVUxMO1xuLVx0aW50IHJjID0gMDtcbiYjNDM7XHRpZiAoa3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUdXJuIG9mZiBtaWdyYXRpb24gbW9kZSB3aGVuOlxuJiM0MztcdFx0ICogLSB1c2Vyc3BhY2UgY3JlYXRlcyBhIG5ldyBtZW1zbG90IHdpdGggZGlydHkgbG9nZ2luZyBvZmYsXG4mIzQzO1x0XHQgKiAtIHVzZXJzcGFjZSBtb2RpZmllcyBhbiBleGlzdGluZyBtZW1zbG90IChNT1ZFIG9yIEZMQUdTX09OTFkpXG4mIzQzO1x0XHQgKiAgIGFuZCBkaXJ0eSBsb2dnaW5nIGlzIHR1cm5lZCBvZmYuXG4mIzQzO1x0XHQgKiBNaWdyYXRpb24gbW9kZSBleHBlY3RzIGRpcnR5IHBhZ2UgbG9nZ2luZyBiZWluZyBlbmFibGVkIHRvXG4mIzQzO1x0XHQgKiBzdG9yZSBpdHMgZGlydHkgYml0bWFwLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoY2hhbmdlICE9IEtWTV9NUl9ERUxFVEUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIShuZXctXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTKSlcbiYjNDM7XHRcdFx0V0FSTihrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihrdm0pLFxuJiM0MztcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBzdG9wIG1pZ3JhdGlvbiBtb2RlXCYjMzQ7KTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoY2hhbmdlID09IEtWTV9NUl9GTEFHU19PTkxZKVxuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbiBcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuLVx0aWYgKCFtYykge1xuLVx0XHRyYyA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuJiM0MztcdGlmICghbWMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7cmV0cnk6XG4gXHRzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKSB7XG4mIzQzO1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnVzZV9jbW1hIFx1MDAyNlx1MDAyNiBvbGQpIHtcbiYjNDM7XHRcdFx0X2RhdF93YWxrX2dmbl9yYW5nZShvbGQtXHUwMDNlYmFzZV9nZm4sIG9sZC1cdTAwM2ViYXNlX2dmbiAmIzQzOyBvbGQtXHUwMDNlbnBhZ2VzLFxuJiM0MztcdFx0XHRcdFx0ICAgIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsXG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2a3ZtLVx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRzd2l0Y2ggKGNoYW5nZSkge1xuIFx0XHRjYXNlIEtWTV9NUl9ERUxFVEU6XG4gXHRcdFx0cmMgPSBkYXRfZGVsZXRlX3Nsb3QobWMsIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgb2xkLVx1MDAzZWJhc2VfZ2ZuLCBvbGQtXHUwMDNlbnBhZ2VzKTtcbkBAIC01ODI3LDE0ICYjNDM7NTg1MSwyMSBAQCB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0Y2FzZSBLVk1fTVJfRkxBR1NfT05MWTpcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0cmMgPSAwO1xuIFx0XHRcdFdBUk4oMSwgXCYjMzQ7VW5rbm93biBLVk0gTVIgQ0hBTkdFOiAlZFxcblwmIzM0OywgY2hhbmdlKTtcbiBcdFx0fVxuIFx0fVxuLW91dDpcbi1cdGlmIChyYylcbi1cdFx0cHJfd2FybihcJiMzNDtmYWlsZWQgdG8gY29tbWl0IG1lbW9yeSByZWdpb25cXG5cJiMzNDspO1xuLVx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuLVx0cmV0dXJuO1xuJiM0MztcdGlmIChyYyA9PSAtRU5PTUVNKSB7XG4mIzQzO1x0XHRyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7XG4mIzQzO1x0XHRpZiAoIXJjKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LCBlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxuJiM0Mzt7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbmluZGV4IGFkMGRkYzQzM2E3M2MuLmIxYmEyNGMzNDZlZmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbkBAIC0yODksNiAmIzQzOzI4OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lza2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZ2FkZHI7XG4mIzQzO1x0dW5pb24gc2tleSBza2V5O1xuIFx0aW50IHJlZzEsIHJlZzI7XG4gXHRpbnQgcmM7XG4gXG5AQCAtMzA3LDEyICYjNDM7MzA4LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0Z2FkZHIgPSBrdm1fczM5MF9sb2dpY2FsX3RvX2VmZmVjdGl2ZSh2Y3B1LCBnYWRkcik7XG4gXHRnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTtcbiBcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpKTtcbiYjNDM7XHRcdHJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgZ3BhX3RvX2dmbihnYWRkciksIFx1MDAyNnNrZXkpO1xuIFx0aWYgKHJjIFx1MDAzZSAwKVxuIFx0XHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIHJjKTtcbiBcdGlmIChyYyBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJjO1xuLVx0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCByYyk7XG4mIzQzO1x0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCAoc2tleS5za2V5IFx1MDAzZVx1MDAzZSAxKSBcdTAwMjYgMyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTI2MCw4ICYjNDM7MTI2MSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqL1xuIFx0XHRrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTtcbiBcdH0gZWxzZSB7XG4tXHRcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcbiYjNDM7XHRcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxuJiM0MztcdFx0XHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaylcbiYjNDM7XHRcdFx0XHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XG4gXHRcdGlmIChpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuaW5kZXggMWJlYWNjODQxY2E4NS4uYjAyZTAxNTlkM2NkMiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wdi5jXG5AQCAtMjQ0LDYgJiM0MzsyNDQsMjQgQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfY2xlYXJfcHZfc3RhdGUoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIgPSBOVUxMO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZyZWVfc3Rvcl9iYXNlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGZyZWVfc3Rvcl9iYXNlKVxuJiM0MztcdFx0ZnJlZV9wYWdlcyh2Y3B1LVx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTtcbiYjNDM7XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXHUwMDNlYXJjaC5wdikpO1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlc2RmID0gMDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXG4mIzQzO1x0ICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mXG4mIzQzO1x0ICogdGhlIGp1c3QgZnJlZWQgc2lkYS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWdiZWEgPSAxO1xuJiM0MztcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxuIHtcbiBcdGludCBjYztcbkBAIC0yNTgsMjQgJiM0MzsyNzYsOSBAQCBpbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbiBcdFdBUk5fT05DRShjYywgXCYjMzQ7cHJvdHZpcnQgZGVzdHJveSBjcHUgZmFpbGVkIHJjICV4IHJyYyAleFwmIzM0OywgKnJjLCAqcnJjKTtcbiBcbiBcdC8qIEludGVuZGVkIG1lbW9yeSBsZWFrIGZvciBzb21ldGhpbmcgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLiAqL1xuLVx0aWYgKCFjYylcbi1cdFx0ZnJlZV9wYWdlcyh2Y3B1LVx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLFxuLVx0XHRcdCAgIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2NwdV9zdG9yX2xlbikpO1xuLVxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNpZGFfYWRkcih2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2Vwdl9oYW5kbGVfY29uZmlnID0gMDtcbi1cdG1lbXNldChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gucHYsIDAsIHNpemVvZih2Y3B1LVx1MDAzZWFyY2gucHYpKTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlc2RmID0gMDtcbi1cdC8qXG4tXHQgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLlxuLVx0ICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mXG4tXHQgKiB0aGUganVzdCBmcmVlZCBzaWRhLlxuLVx0ICovXG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWdiZWEgPSAxO1xuLVx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSCwgdmNwdSk7XG4mIzQzO1x0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgIWNjKTtcbiBcbi1cdHJldHVybiBjYyA/IEVJTyA6IDA7XG4mIzQzO1x0cmV0dXJuIGNjID8gLUVJTyA6IDA7XG4gfVxuIFxuIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG5AQCAtMzE5LDkgJiM0MzszMjIsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxuIFx0XHQgICAgIHV2Y2IuaGVhZGVyLnJyYyk7XG4gXG4gXHRpZiAoY2MpIHtcbi1cdFx0dTE2IGR1bW15O1xuLVxuLVx0XHRrdm1fczM5MF9wdl9kZXN0cm95X2NwdSh2Y3B1LCBcdTAwMjZkdW1teSwgXHUwMDI2ZHVtbXkpO1xuJiM0MztcdFx0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgdHJ1ZSk7XG4gXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuIFxuQEAgLTgwOSw3ICYjNDM7ODEwLDcgQEAgc3RhdGljIGludCB1bnBhY2tfb25lKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgdHdlYWssXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHR9XG4gXG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTilcbiYjNDM7XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FSU5UUilcbiBcdFx0S1ZNX1VWX0VWRU5UKGt2bSwgMywgXCYjMzQ7UFJPVFZJUlQgVk0gVU5QQUNLOiBmYWlsZWQgYWRkciAlbGx4IHdpdGggcmMgJXggcnJjICV4XCYjMzQ7LFxuIFx0XHRcdCAgICAgdXZjYi5nYWRkciwgKnJjLCAqcnJjKTtcbiBcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfY3JlYXRlX2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9kZXN0cm95X2NwdSYjMzQ7LAogICAgJiMzNDtkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9mYXVsdGluX2dmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGZpeGVzIGZvciBtZW1vcnkgbGVha3MsIGxvY2tpbmcsIGluaXRpYWxpemF0aW9uIHJhY2VzLCBhbmQgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cy4gSXQgbW9kaWZpZXMgY29yZSBLVk0gaW9jdGxzLCBtZW1vcnkgcmVnaW9uIG1hbmFnZW1lbnQsIGFuZCBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBDUFUgbGlmZWN5Y2xlIGZ1bmN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgYWNjZXNzZXMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjY3YjIyZWI5YzMzOTgxOTFlZDFmOTBkMzU5NjVkY2M2OGVhZjkxMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMDY6NDI6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGVhYTM0YzViZDNjMTEuLmVkZjc1YjZhZDIwY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC00NDAsNiAmIzQzOzQ0MCw3IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHsKIAlib29sIHNrZXlfZW5hYmxlZDsKIAkvKiBJbmRpY2F0b3IgaWYgdGhlIGFjY2VzcyByZWdpc3RlcnMgaGF2ZSBiZWVuIGxvYWRlZCBmcm9tIGd1ZXN0ICovCiAJYm9vbCBhY3JzX2xvYWRlZDsKJiM0MzsJYm9vbCBpbml0aWFsaXplZDsKIAlzdHJ1Y3Qga3ZtX3MzOTBfcHZfdmNwdSBwdjsKIAl1bmlvbiBkaWFnMzE4X2luZm8gZGlhZzMxOF9pbmZvOwogCXN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuYyBiL2FyY2gvczM5MC9rdm0vZGF0LmMKaW5kZXggZWQ0MjU5ZDE3NjI5NS4uM2YyZDZlODkwMmQ3NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2RhdC5jCkBAIC03NTUsMTMgJiM0Mzs3NTUsMTUgQEAgaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2YKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbikKJiM0MztpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpCiB7CiAJdW5pb24gcGdzdGUgcGdzdGUsIG9sZDsKIAl1bmlvbiBjcnN0ZSAqY3JzdGVwOwogCXVuaW9uIHB0ZSAqcHRlcDsKIAlpbnQgcmM7CiAKJiM0MzsJc2tleS0mZ3Q7c2tleSA9IDA7CiYjNDM7CiAJcmMgPSBkYXRfZW50cnlfd2FsayhOVUxMLCBnZm4sIGFzY2UsIERBVF9XQUxLX0FOWSwgVEFCTEVfVFlQRV9QQUdFX1RBQkxFLCAmYW1wO2Nyc3RlcCwgJmFtcDtwdGVwKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKQEAgLTc3MSwyMSAmIzQzOzc3MywyMyBAQCBpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pCiAKIAkJaWYgKCFjcnN0ZS5oLmZjIHx8ICFjcnN0ZS5zLmZjMS5wcikKIAkJCXJldHVybiAwOwotCQlyZXR1cm4gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSk7CiYjNDM7CQlza2V5LSZndDtza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSkgJmx0OyZsdDsgMTsKJiM0MzsJCXJldHVybiAwOwogCX0KIAlvbGQgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTsKIAlwZ3N0ZSA9IG9sZDsKIAogCWlmICghcHRlcC0mZ3Q7aC5pKSB7Ci0JCXJjID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKTsKLQkJcGdzdGUuaHIgPSByYyAmZ3Q7Jmd0OyAxOwomIzQzOwkJc2tleS0mZ3Q7c2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSkgJmx0OyZsdDsgMTsKJiM0MzsJCXBnc3RlLmhyID0gc2tleS0mZ3Q7cjsKIAl9Ci0JcmMgfD0gKHBnc3RlLmdyICZsdDsmbHQ7IDEpIHwgcGdzdGUuZ2M7CiYjNDM7CXNrZXktJmd0O3IgfD0gcGdzdGUuZ3I7CiYjNDM7CXNrZXktJmd0O2MgfD0gcGdzdGUuZ2M7CiAJcGdzdGUuZ3IgPSAwOwogCiAJZGF0X3VwZGF0ZV9wdGVwX3NkKG9sZCwgcGdzdGUsIHB0ZXApOwogCXBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpOwotCXJldHVybiByYzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBsb25nIGRhdF9yZXNldF9za2V5c19wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaykKQEAgLTg0Niw2ICYjNDM7ODUwLDcgQEAgc3RhdGljIGxvbmcgX2RhdF9zbG90X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWwKIAlzdHJ1Y3Qgc2xvdF9wcml2ICpwID0gd2Fsay0mZ3Q7cHJpdjsKIAl1bmlvbiBjcnN0ZSBkdW1teSA9IHsgLnZhbCA9IHAtJmd0O3Rva2VuIH07CiAJdW5pb24gcHRlIG5ld19wdGUsIHB0ZSA9IFJFQURfT05DRSgqcHRlcCk7CiYjNDM7CXVuaW9uIHBnc3RlIHBnc3RlOwogCiAJbmV3X3B0ZSA9IF9QVEVfVE9LKGR1bW15LnRvay50eXBlLCBkdW1teS50b2sucGFyKTsKIApAQCAtODUzLDcgJiM0Mzs4NTgsMTEgQEAgc3RhdGljIGxvbmcgX2RhdF9zbG90X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWwKIAlpZiAocHRlLnZhbCA9PSBuZXdfcHRlLnZhbCkKIAkJcmV0dXJuIDA7CiAKLQlkYXRfcHRlcF94Y2hnKHB0ZXAsIG5ld19wdGUsIGdmbiwgd2Fsay0mZ3Q7YXNjZSwgZmFsc2UpOwomIzQzOwlwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApOwomIzQzOwlwZ3N0ZSA9IF9fZGF0X3B0ZXBfeGNoZyhwdGVwLCBwZ3N0ZSwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLSZndDthc2NlLCBmYWxzZSk7CiYjNDM7CXBnc3RlLmNtbWFfZCA9IDA7CiYjNDM7CXBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpOwomIzQzOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5oIGIvYXJjaC9zMzkwL2t2bS9kYXQuaAppbmRleCBmYWQ2MDUzMDVlMDVjLi4xNDFlZTdiOWYwMTkxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZGF0LmgKQEAgLTUzNyw3ICYjNDM7NTM3LDcgQEAgaW50IGRhdF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2YKIAkJCXVuaW9uIHNrZXkgc2tleSwgYm9vbCBucSk7CiBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sCiAJCQkgICAgIHVuaW9uIHNrZXkgc2tleSwgdW5pb24gc2tleSAqb2xka2V5LCBib29sIG5xLCBib29sIG1yLCBib29sIG1jKTsKLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbik7CiYjNDM7aW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KTsKIGxvbmcgZGF0X3Jlc2V0X3NrZXlzKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3Qgc3RhcnQpOwogCiB1bnNpZ25lZCBsb25nIGRhdF9nZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMgYi9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYwppbmRleCBmZWU4MDA0N2JkOTRmLi4zY2M0NWY3ZjViMmQ3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYwpAQCAtOTEsOSAmIzQzOzkxLDkgQEAgaW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmEKIAkJLyogQWNjZXNzIG91dHNpZGUgbWVtb3J5LCBhZGRyZXNzaW5nIGV4Y2VwdGlvbi4gKi8KIAkJaWYgKGlzX25vc2xvdF9wZm4oZi0mZ3Q7cGZuKSkKIAkJCXJldHVybiBQR01fQUREUkVTU0lORzsKLQkJLyogU2lnbmFsIHBlbmRpbmc6IHRyeSBhZ2Fpbi4gKi8KLQkJaWYgKGYtJmd0O3BmbiA9PSBLVk1fUEZOX0VSUl9TSUdQRU5ESU5HKQotCQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CQkvKiBGYXRhbCBzaWduYWwgcGVuZGluZzogYmFpbCBvdXQuICovCiYjNDM7CQlpZiAoaXNfc2lncGVuZGluZ19wZm4oZi0mZ3Q7cGZuKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlRSOwogCQkvKiBDaGVjayBpZiBpdCYjMzk7cyByZWFkLW9ubHkgbWVtb3J5OyBkb24mIzM5O3QgdHJ5IHRvIGFjdHVhbGx5IGhhbmRsZSB0aGF0IGNhc2UuICovCiAJCWlmIChmLSZndDtwZm4gPT0gS1ZNX1BGTl9FUlJfUk9fRkFVTFQpCiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwppbmRleCA5ZTNlNmIwZDcyYWQ2Li42MDEzZjI4ZTM0NjFmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKQEAgLTQ1LDEzICYjNDM7NDUsMTYgQEAgc3RhdGljIHN0cnVjdCBrdm1fczM5MF9naWIgKmdpYjsKIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZCkKIHsKIAlzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnNjYTsKLQl1bmlvbiBlc2NhX3NpZ3BfY3RybCBzaWdwX2N0cmwgPSBzY2EtJmd0O2NwdVt2Y3B1LSZndDt2Y3B1X2lkXS5zaWdwX2N0cmw7CiYjNDM7CXVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybDsKIAogCWlmICgha3ZtX3MzOTBfdGVzdF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpKQogCQlyZXR1cm4gMDsKIAomIzQzOwlpZiAoS1ZNX0JVR19PTihrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSwgdmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwogCUJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpOwogCiYjNDM7CXNpZ3BfY3RybCA9IHNjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNpZ3BfY3RybDsKIAlpZiAoc3JjX2lkKQogCQkqc3JjX2lkID0gc2lncF9jdHJsLnNjbjsKIApAQCAtNjAsMTMgJiM0Mzs2MywxNiBAQCBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpCiAKIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpCiB7Ci0Jc3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5zY2E7Ci0JdW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9ICZhbXA7c2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2lncF9jdHJsOwogCXVuaW9uIGVzY2Ffc2lncF9jdHJsIG9sZF92YWwsIG5ld192YWwgPSB7LnNjbiA9IHNyY19pZCwgLmMgPSAxfTsKJiM0MzsJc3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5zY2E7CiYjNDM7CXVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmw7CiAJaW50IGV4cGVjdCwgcmM7CiAKIAlCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTsKJiM0MzsJaWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSksIHZjcHUtJmd0O2t2bSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlzaWdwX2N0cmwgPSAmYW1wO3NjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNpZ3BfY3RybDsKIAlvbGRfdmFsID0gUkVBRF9PTkNFKCpzaWdwX2N0cmwpOwogCW9sZF92YWwuYyA9IDA7CiAKQEAgLTg0LDEwICYjNDM7OTAsMTMgQEAgc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZCkKIHN0YXRpYyB2b2lkIHNjYV9jbGVhcl9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5zY2E7Ci0JdW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9ICZhbXA7c2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2lncF9jdHJsOwomIzQzOwl1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsOwogCi0JaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSkKJiM0MzsJaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCB8fCBrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkKIAkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIGFmdGVyIHRoZSBhYm92ZSBjaGVjaywgdG8gcHJldmVudCBnb2luZyBvdXQgb2YgYm91bmRzICovCiYjNDM7CXNpZ3BfY3RybCA9ICZhbXA7c2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2lncF9jdHJsOwogCWt2bV9zMzkwX2NsZWFyX2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCk7CiAKIAlXUklURV9PTkNFKHNpZ3BfY3RybC0mZ3Q7dmFsdWUsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IDE1MGI1ZGQyMTcwZTIuLjY2ODI3MmRmZmExOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTU3MSw3ICYjNDM7NTcxLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3AKIAlzd2l0Y2ggKG9wKSB7CiAJY2FzZSBLVk1fUzM5MF9LRVlPUF9TU0tFOgogCQlyID0gZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KG1jLCBhc2NlLCBnZm4sIHNrZXksICZhbXA7c2tleSwgMCwgMCwgMCk7Ci0JCWlmIChyICZndDs9IDApCiYjNDM7CQlpZiAociA9PSAwIHx8IHIgPT0gMSkKIAkJCXJldHVybiBza2V5LnNrZXk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfS0VZT1BfSVNLRToKQEAgLTU4MCwxNCAmIzQzOzU4MCwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcAogCQkJcmV0dXJuIHNrZXkuc2tleTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fUzM5MF9LRVlPUF9SUkJFOgotCQlyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuKTsKLQkJaWYgKHIgJmd0OyAwKQotCQkJcmV0dXJuIHIgJmx0OyZsdDsgMTsKJiM0MzsJCXIgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdChhc2NlLCBnZm4sICZhbXA7c2tleSk7CiYjNDM7CQlpZiAoIXIpCiYjNDM7CQkJcmV0dXJuIHNrZXkuc2tleTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXJldHVybiByOwomIzQzOwlyZXR1cm4gciAmZ3Q7IDAgPyAtRUZBVUxUIDogcjsKIH0KIAogLyogU2VjdGlvbjogZGV2aWNlIHJlbGF0ZWQgKi8KQEAgLTEyMTksOCAmIzQzOzEyMTksOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KHN0cnVjdCBrdm0gKmt2bSwgaW50IHJlcSkKIAogLyoKICAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLSZndDtzcmN1IGhlbGQgdG8gYXZvaWQgcmFjZXMgb24gbWVtc2xvdHMsIGFuZCB3aXRoCi0gKiBrdm0tJmd0O3Nsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksCi0gKiBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLgomIzQzOyAqIGt2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLAomIzQzOyAqIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuCiAgKi8KIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSkKIHsKQEAgLTEyNjUsNyAmIzQzOzEyNjUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pCiB9CiAKIC8qCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS0mZ3Q7c2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcywKJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLAogICoga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKCkgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS4KICAqLwogc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pCkBAIC0xMzAwLDcgJiM0MzsxMzAwLDkgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSwKIHsKIAlpbnQgcmVzID0gLUVOWElPOwogCi0JbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CWd1YXJkKHNyY3UpKCZhbXA7a3ZtLSZndDtzcmN1KTsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spOwomIzQzOwogCXN3aXRjaCAoYXR0ci0mZ3Q7YXR0cikgewogCWNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OX1NUQVJUOgogCQlyZXMgPSBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oa3ZtKTsKQEAgLTEzMTEsNyAmIzQzOzEzMTMsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KLQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogCiAJcmV0dXJuIHJlczsKIH0KQEAgLTIyMTQsNyAmIzQzOzIyMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncykKIAl9CiAKIAlrdmZyZWUoa2V5cyk7Ci0JcmV0dXJuIHI7CiYjNDM7CXJldHVybiByICZsdDs9IDAgPyByIDogLUVGQVVMVDsKIH0KIAogc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpCkBAIC0yMjc2LDcgJiM0MzsyMjc3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpCiAJa3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpOwogb3V0OgogCWt2ZnJlZShrZXlzKTsKLQlyZXR1cm4gcjsKJiM0MzsJcmV0dXJuIHIgJmx0Oz0gMCA/IHIgOiAtRUZBVUxUOwogfQogCiAvKgpAQCAtMjM4Niw3ICYjNDM7MjM4Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sCiAKIAlzZXRfYml0KEdNQVBfRkxBR19VU0VTX0NNTSwgJmFtcDtrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7ZmxhZ3MpOwogCi0JcmV0dXJuIHI7CiYjNDM7CXJldHVybiByICZsdDs9IDAgPyByIDogLUVGQVVMVDsKIH0KIAogLyoqCkBAIC0yOTM0LDYgJiM0MzsyOTM1LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCWNhc2UgS1ZNX1MzOTBfSU5URVJSVVBUOiB7CiAJCXN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludDsKIAomIzQzOwkJciA9IC1FSU5WQUw7CiYjNDM7CQlpZiAoa3ZtX2lzX3Vjb250cm9sKGt2bSkpCiYjNDM7CQkJYnJlYWs7CiAJCXIgPSAtRUZBVUxUOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtzMzkwaW50LCBhcmdwLCBzaXplb2YoczM5MGludCkpKQogCQkJYnJlYWs7CkBAIC0yOTk4LDkgJiM0MzszMDAyLDggQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQlyID0gLUVGQVVMVDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSkKIAkJCWJyZWFrOwotCQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKLQkJciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCAmYW1wO2FyZ3MpOwotCQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwkJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO2t2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrKQomIzQzOwkJCXIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgJmFtcDthcmdzKTsKIAkJaWYgKCFyKSB7CiAJCQlyID0gY29weV90b191c2VyKGFyZ3AsICZhbXA7YXJncywgc2l6ZW9mKGFyZ3MpKTsKIAkJCWlmIChyKQpAQCAtMzAxNCw5ICYjNDM7MzAxNyw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKIAkJciA9IC1FRkFVTFQ7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2FyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpCiAJCQlicmVhazsKLQkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spOwogCQlyID0ga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhrdm0sICZhbXA7YXJncyk7Ci0JCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2FyY2hfbG9jayk7CiAJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9TMzkwX1BWX0NPTU1BTkQ6IHsKQEAgLTM0NjEsNyAmIzQzOzM0NjQsNyBAQCBzdGF0aWMgdm9pZCBzY2FfZGVsX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2guc2NhOwogCi0JaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSkKJiM0MzsJaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCkKIAkJcmV0dXJuOwogCiAJY2xlYXJfYml0X2ludih2Y3B1LSZndDt2Y3B1X2lkLCAodW5zaWduZWQgbG9uZyAqKXNjYS0mZ3Q7bWNuKTsKQEAgLTM0ODEsOCAmIzQzOzM0ODQsOCBAQCBzdGF0aWMgdm9pZCBzY2FfYWRkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpCiAJCXJldHVybjsKIAomIzQzOwlXUklURV9PTkNFKHNjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNkYSwgdmlydF90b19waHlzKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKSk7CiAJc2V0X2JpdF9pbnYodmNwdS0mZ3Q7dmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtJmd0O21jbik7Ci0Jc2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2RhID0gdmlydF90b19waHlzKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKTsKIH0KIAogc3RhdGljIGludCBzY2FfY2FuX2FkZF92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKQpAQCAtMzYxMyw2ICYjNDM7MzYxNiw5IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS0mZ3Q7a3ZtLCA3NCkgfHwgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnVzZXJfaW5zdHIwIHx8CiAJICAgIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC51c2VyX29wZXJleGVjKQogCQl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7aWN0bCB8PSBJQ1RMX09QRVJFWEM7CiYjNDM7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3ZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQsIHRydWUpOwogfQogCiBzdGF0aWMgYm9vbCBrdm1faGFzX3Bja21vX3N1YmZ1bmMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG5yKQpAQCAtMzY3NCw3ICYjNDM7MzY4MCw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogdm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7Y2JybG8pKTsKJiM0MzsJaWYgKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtjYnJsbykKJiM0MzsJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2NicmxvKSk7CiAJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2NicmxvID0gMDsKIH0KIApAQCAtMzc5MiwyMSAmIzQzOzM3OTksMjEgQEAgaW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKQogCXJldHVybiAwOwogfQogCiYjNDM7REVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSkKJiM0MzsKIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jc3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZTsKJiM0MzsJc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgX19mcmVlKGt2bV9zMzkwX21tdV9jYWNoZSkgPSBOVUxMOwomIzQzOwlzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlIF9fZnJlZShzaWVfcGFnZSkgPSBOVUxMOwogCWludCByYzsKIAogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNpZV9wYWdlKSAhPSA0MDk2KTsKLQl2Y3B1LSZndDthcmNoLm1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpOwotCWlmICghdmNwdS0mZ3Q7YXJjaC5tYykKJiM0MzsJbWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7CiYjNDM7CWlmICghbWMpCiAJCXJldHVybiAtRU5PTUVNOwogCXNpZV9wYWdlID0gKHN0cnVjdCBzaWVfcGFnZSAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKLQlpZiAoIXNpZV9wYWdlKSB7Ci0JCWt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKHZjcHUtJmd0O2FyY2gubWMpOwotCQl2Y3B1LSZndDthcmNoLm1jID0gTlVMTDsKJiM0MzsJaWYgKCFzaWVfcGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2sgPSAmYW1wO3NpZV9wYWdlLSZndDtzaWVfYmxvY2s7CiAJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2l0ZGJhID0gdmlydF90b19waHlzKCZhbXA7c2llX3BhZ2UtJmd0O2l0ZGIpOwpAQCAtMzg0OCwxMCAmIzQzOzM4NTUsOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQl2Y3B1LSZndDtydW4tJmd0O2t2bV92YWxpZF9yZWdzIHw9IEtWTV9TWU5DX0ZQUlM7CiAKIAlpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSkpIHsKLQkJcmMgPSAtRU5PTUVNOwogCQl2Y3B1LSZndDthcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LSZndDtrdm0tJmd0O2FyY2guZ21hcCwgLTFVTCk7CiAJCWlmICghdmNwdS0mZ3Q7YXJjaC5nbWFwKQotCQkJZ290byBvdXRfZnJlZV9zaWVfYmxvY2s7CiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJVk1fRVZFTlQodmNwdS0mZ3Q7a3ZtLCAzLCAmIzM0O2NyZWF0ZSBjcHUgJWQgYXQgMHglcCwgc2llIGJsb2NrIGF0IDB4JXAmIzM0OywKQEAgLTM4NTksMjAgJiM0MzszODY1LDE5IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJdHJhY2Vfa3ZtX3MzOTBfY3JlYXRlX3ZjcHUodmNwdS0mZ3Q7dmNwdV9pZCwgdmNwdSwgdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spOwogCiAJcmMgPSBrdm1fczM5MF92Y3B1X3NldHVwKHZjcHUpOwotCWlmIChyYykKLQkJZ290byBvdXRfdWNvbnRyb2xfdW5pbml0OwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCWlmIChrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkgewomIzQzOwkJCXNjb3BlZF9ndWFyZChzcGlubG9jaywgJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7Y2hpbGRyZW5fbG9jaykKJiM0MzsJCQkJZ21hcF9yZW1vdmVfY2hpbGQodmNwdS0mZ3Q7YXJjaC5nbWFwKTsKJiM0MzsJCQl2Y3B1LSZndDthcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LSZndDthcmNoLmdtYXApOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiAKJiM0MzsJdmNwdS0mZ3Q7YXJjaC5tYyA9IG5vX2ZyZWVfcHRyKG1jKTsKJiM0MzsJc2llX3BhZ2UgPSBOVUxMOwogCWt2bV9zMzkwX3VwZGF0ZV90b3BvbG9neV9jaGFuZ2VfcmVwb3J0KHZjcHUtJmd0O2t2bSwgMSk7CiAJcmV0dXJuIDA7Ci0KLW91dF91Y29udHJvbF91bmluaXQ6Ci0JaWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LSZndDtrdm0pKSB7Ci0JCWdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtJmd0O2FyY2guZ21hcCk7Ci0JCXZjcHUtJmd0O2FyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtJmd0O2FyY2guZ21hcCk7Ci0JfQotb3V0X2ZyZWVfc2llX2Jsb2NrOgotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spKTsKLQlyZXR1cm4gcmM7CiB9CiAKIGludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTUwMzksNiAmIzQzOzUwNDQsMTAgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgICAga3ZtX3J1bi0mZ3Q7a3ZtX2RpcnR5X3JlZ3MgJmFtcDsgfktWTV9TWU5DX1MzOTBfVkFMSURfRklFTERTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi8KJiM0MzsJaWYgKCFzbXBfbG9hZF9hY3F1aXJlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAl2Y3B1X2xvYWQodmNwdSk7CiAKIAlpZiAoZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKSB7CkBAIC01NTIzLDYgJiM0Mzs1NTMyLDEwIEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAlsb25nIHI7CiAJdTE2IHJjLCBycmM7CiAKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovCiYjNDM7CWlmICghc21wX2xvYWRfYWNxdWlyZSgmYW1wO3ZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJdmNwdV9sb2FkKHZjcHUpOwogCiAJc3dpdGNoIChpb2N0bCkgewpAQCAtNTc0OCwxMSAmIzQzOzU3NjEsMzAgQEAgYm9vbCBrdm1fYXJjaF9pcnFjaGlwX2luX2tlcm5lbChzdHJ1Y3Qga3ZtICprdm0pCiB9CiAKIC8qIFNlY3Rpb246IG1lbW9yeSByZWxhdGVkICovCiYjNDM7c3RhdGljIGxvbmcgY21tYV9kX2NvdW50X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKQomIzQzO3sKJiM0MzsJdW5pb24gcGdzdGUgcGdzdGU7CiYjNDM7CiYjNDM7CXBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7CiYjNDM7CWlmIChwZ3N0ZS5jbW1hX2QpIHsKJiM0MzsJCXBnc3RlLmNtbWFfZCA9IDA7CiYjNDM7CQlhdG9taWM2NF9kZWMod2Fsay0mZ3Q7cHJpdik7CiYjNDM7CX0KJiM0MzsJcGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCwKIAkJCQkgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsCiAJCQkJICAgZW51bSBrdm1fbXJfY2hhbmdlIGNoYW5nZSkKIHsKJiM0MzsJY29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBjbW1hX2RfY291bnRfcHRlLCB9OwomIzQzOwlzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7CiYjNDM7CWludCByYyA9IC1FTk9NRU07CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O3Nsb3RzX2FyY2hfbG9jayk7CiYjNDM7CiAJaWYgKGt2bV9pc191Y29udHJvbChrdm0pICZhbXA7JmFtcDsgbmV3ICZhbXA7JmFtcDsgbmV3LSZndDtpZCAmbHQ7IEtWTV9VU0VSX01FTV9TTE9UUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTU3NzUsNDMgJiM0Mzs1ODA3LDM1IEBAIGludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCFrdm0tJmd0O2FyY2gubWlncmF0aW9uX21vZGUpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBUdXJuIG9mZiBtaWdyYXRpb24gbW9kZSB3aGVuOgotCSAqIC0gdXNlcnNwYWNlIGNyZWF0ZXMgYSBuZXcgbWVtc2xvdCB3aXRoIGRpcnR5IGxvZ2dpbmcgb2ZmLAotCSAqIC0gdXNlcnNwYWNlIG1vZGlmaWVzIGFuIGV4aXN0aW5nIG1lbXNsb3QgKE1PVkUgb3IgRkxBR1NfT05MWSkgYW5kCi0JICogICBkaXJ0eSBsb2dnaW5nIGlzIHR1cm5lZCBvZmYuCi0JICogTWlncmF0aW9uIG1vZGUgZXhwZWN0cyBkaXJ0eSBwYWdlIGxvZ2dpbmcgYmVpbmcgZW5hYmxlZCB0byBzdG9yZQotCSAqIGl0cyBkaXJ0eSBiaXRtYXAuCi0JICovCi0JaWYgKGNoYW5nZSAhPSBLVk1fTVJfREVMRVRFICZhbXA7JmFtcDsKLQkgICAgIShuZXctJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTKSkKLQkJV0FSTihrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihrdm0pLAotCQkgICAgICYjMzQ7RmFpbGVkIHRvIHN0b3AgbWlncmF0aW9uIG1vZGUmIzM0Oyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCi0JCQkJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLAotCQkJCWNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldywKLQkJCQllbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKQotewotCXN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDsKLQlpbnQgcmMgPSAwOwomIzQzOwlpZiAoa3ZtLSZndDthcmNoLm1pZ3JhdGlvbl9tb2RlKSB7CiYjNDM7CQkvKgomIzQzOwkJICogVHVybiBvZmYgbWlncmF0aW9uIG1vZGUgd2hlbjoKJiM0MzsJCSAqIC0gdXNlcnNwYWNlIGNyZWF0ZXMgYSBuZXcgbWVtc2xvdCB3aXRoIGRpcnR5IGxvZ2dpbmcgb2ZmLAomIzQzOwkJICogLSB1c2Vyc3BhY2UgbW9kaWZpZXMgYW4gZXhpc3RpbmcgbWVtc2xvdCAoTU9WRSBvciBGTEFHU19PTkxZKQomIzQzOwkJICogICBhbmQgZGlydHkgbG9nZ2luZyBpcyB0dXJuZWQgb2ZmLgomIzQzOwkJICogTWlncmF0aW9uIG1vZGUgZXhwZWN0cyBkaXJ0eSBwYWdlIGxvZ2dpbmcgYmVpbmcgZW5hYmxlZCB0bwomIzQzOwkJICogc3RvcmUgaXRzIGRpcnR5IGJpdG1hcC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGNoYW5nZSAhPSBLVk1fTVJfREVMRVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKG5ldy0mZ3Q7ZmxhZ3MgJmFtcDsgS1ZNX01FTV9MT0dfRElSVFlfUEFHRVMpKQomIzQzOwkJCVdBUk4oa3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oa3ZtKSwKJiM0MzsJCQkgICAgICYjMzQ7RmFpbGVkIHRvIHN0b3AgbWlncmF0aW9uIG1vZGUmIzM0Oyk7CiYjNDM7CX0KIAogCWlmIChjaGFuZ2UgPT0gS1ZNX01SX0ZMQUdTX09OTFkpCi0JCXJldHVybjsKJiM0MzsJCXJldHVybiAwOwogCiAJbWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7Ci0JaWYgKCFtYykgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQomIzQzOwlpZiAoIW1jKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7cmV0cnk6CiAJc2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssICZhbXA7a3ZtLSZndDttbXVfbG9jaykgewomIzQzOwkJaWYgKGt2bS0mZ3Q7YXJjaC5taWdyYXRpb25fbW9kZSAmYW1wOyZhbXA7IGt2bS0mZ3Q7YXJjaC51c2VfY21tYSAmYW1wOyZhbXA7IG9sZCkgewomIzQzOwkJCV9kYXRfd2Fsa19nZm5fcmFuZ2Uob2xkLSZndDtiYXNlX2dmbiwgb2xkLSZndDtiYXNlX2dmbiAmIzQzOyBvbGQtJmd0O25wYWdlcywKJiM0MzsJCQkJCSAgICBrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7YXNjZSwgJmFtcDtvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywKJiM0MzsJCQkJCSAgICAmYW1wO2t2bS0mZ3Q7YXJjaC5jbW1hX2RpcnR5X3BhZ2VzKTsKJiM0MzsJCX0KJiM0MzsKIAkJc3dpdGNoIChjaGFuZ2UpIHsKIAkJY2FzZSBLVk1fTVJfREVMRVRFOgogCQkJcmMgPSBkYXRfZGVsZXRlX3Nsb3QobWMsIGt2bS0mZ3Q7YXJjaC5nbWFwLSZndDthc2NlLCBvbGQtJmd0O2Jhc2VfZ2ZuLCBvbGQtJmd0O25wYWdlcyk7CkBAIC01ODI3LDE0ICYjNDM7NTg1MSwyMSBAQCB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKIAkJY2FzZSBLVk1fTVJfRkxBR1NfT05MWToKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgomIzQzOwkJCXJjID0gMDsKIAkJCVdBUk4oMSwgJiMzNDtVbmtub3duIEtWTSBNUiBDSEFOR0U6ICVkXG4mIzM0OywgY2hhbmdlKTsKIAkJfQogCX0KLW91dDoKLQlpZiAocmMpCi0JCXByX3dhcm4oJiMzNDtmYWlsZWQgdG8gY29tbWl0IG1lbW9yeSByZWdpb25cbiYjMzQ7KTsKLQlrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7Ci0JcmV0dXJuOwomIzQzOwlpZiAocmMgPT0gLUVOT01FTSkgewomIzQzOwkJcmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAobWMpOwomIzQzOwkJaWYgKCFyYykKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwl9CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LCBlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKQomIzQzO3sKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCmluZGV4IGFkMGRkYzQzM2E3M2MuLmIxYmEyNGMzNDZlZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vcHJpdi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCkBAIC0yODksNiAmIzQzOzI4OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lza2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdW5zaWduZWQgbG9uZyBnYWRkcjsKJiM0MzsJdW5pb24gc2tleSBza2V5OwogCWludCByZWcxLCByZWcyOwogCWludCByYzsKIApAQCAtMzA3LDEyICYjNDM7MzA4LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWdhZGRyID0ga3ZtX3MzOTBfbG9naWNhbF90b19lZmZlY3RpdmUodmNwdSwgZ2FkZHIpOwogCWdhZGRyID0ga3ZtX3MzOTBfcmVhbF90b19hYnModmNwdSwgZ2FkZHIpOwogCXNjb3BlZF9ndWFyZChyZWFkX2xvY2ssICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDttbXVfbG9jaykKLQkJcmMgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh2Y3B1LSZndDthcmNoLmdtYXAtJmd0O2FzY2UsIGdwYV90b19nZm4oZ2FkZHIpKTsKJiM0MzsJCXJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS0mZ3Q7YXJjaC5nbWFwLSZndDthc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSwgJmFtcDtza2V5KTsKIAlpZiAocmMgJmd0OyAwKQogCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIHJjKTsKIAlpZiAocmMgJmx0OyAwKQogCQlyZXR1cm4gcmM7Ci0Ja3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCByYyk7CiYjNDM7CWt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgKHNrZXkuc2tleSAmZ3Q7Jmd0OyAxKSAmYW1wOyAzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI2MCw4ICYjNDM7MTI2MSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqLwogCQlrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTsKIAl9IGVsc2UgewotCQlzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCAmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7bW11X2xvY2spCi0JCQlpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7CiYjNDM7CQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spCiYjNDM7CQkJc2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgJmFtcDt2Y3B1LSZndDtrdm0tJmd0O21tdV9sb2NrKQomIzQzOwkJCQlpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7CiAJCWlmIChpICZsdDsgMCkKIAkJCXJldHVybiBpOwogCQkvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wdi5jIGIvYXJjaC9zMzkwL2t2bS9wdi5jCmluZGV4IDFiZWFjYzg0MWNhODUuLmIwMmUwMTU5ZDNjZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vcHYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3B2LmMKQEAgLTI0NCw2ICYjNDM7MjQ0LDI0IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX2NsZWFyX3B2X3N0YXRlKHN0cnVjdCBrdm0gKmt2bSkKIAlrdm0tJmd0O2FyY2gucHYuc3Rvcl92YXIgPSBOVUxMOwogfQogCiYjNDM7c3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZyZWVfc3Rvcl9iYXNlKQomIzQzO3sKJiM0MzsJaWYgKGZyZWVfc3Rvcl9iYXNlKQomIzQzOwkJZnJlZV9wYWdlcyh2Y3B1LSZndDthcmNoLnB2LnN0b3JfYmFzZSwgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7CiYjNDM7CWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spKTsKJiM0MzsJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3B2X2hhbmRsZV9jcHUgPSAwOwomIzQzOwl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7cHZfaGFuZGxlX2NvbmZpZyA9IDA7CiYjNDM7CW1lbXNldCgmYW1wO3ZjcHUtJmd0O2FyY2gucHYsIDAsIHNpemVvZih2Y3B1LSZndDthcmNoLnB2KSk7CiYjNDM7CXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtzZGYgPSAwOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLgomIzQzOwkgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2YKJiM0MzsJICogdGhlIGp1c3QgZnJlZWQgc2lkYS4KJiM0MzsJICovCiYjNDM7CXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtnYmVhID0gMTsKJiM0MzsJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSCwgdmNwdSk7CiYjNDM7fQomIzQzOwogaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpCiB7CiAJaW50IGNjOwpAQCAtMjU4LDI0ICYjNDM7Mjc2LDkgQEAgaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpCiAJV0FSTl9PTkNFKGNjLCAmIzM0O3Byb3R2aXJ0IGRlc3Ryb3kgY3B1IGZhaWxlZCByYyAleCBycmMgJXgmIzM0OywgKnJjLCAqcnJjKTsKIAogCS8qIEludGVuZGVkIG1lbW9yeSBsZWFrIGZvciBzb21ldGhpbmcgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLiAqLwotCWlmICghY2MpCi0JCWZyZWVfcGFnZXModmNwdS0mZ3Q7YXJjaC5wdi5zdG9yX2Jhc2UsCi0JCQkgICBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTsKLQotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spKTsKLQl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7cHZfaGFuZGxlX2NwdSA9IDA7Ci0JdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3B2X2hhbmRsZV9jb25maWcgPSAwOwotCW1lbXNldCgmYW1wO3ZjcHUtJmd0O2FyY2gucHYsIDAsIHNpemVvZih2Y3B1LSZndDthcmNoLnB2KSk7Ci0JdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3NkZiA9IDA7Ci0JLyoKLQkgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLgotCSAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZgotCSAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuCi0JICovCi0JdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2diZWEgPSAxOwotCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpOwomIzQzOwlrdm1fczM5MF9wdl9kaXNwb3NlX2NwdSh2Y3B1LCAhY2MpOwogCi0JcmV0dXJuIGNjID8gRUlPIDogMDsKJiM0MzsJcmV0dXJuIGNjID8gLUVJTyA6IDA7CiB9CiAKIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpCkBAIC0zMTksOSAmIzQzOzMyMiw3IEBAIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpCiAJCSAgICAgdXZjYi5oZWFkZXIucnJjKTsKIAogCWlmIChjYykgewotCQl1MTYgZHVtbXk7Ci0KLQkJa3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUodmNwdSwgJmFtcDtkdW1teSwgJmFtcDtkdW1teSk7CiYjNDM7CQlrdm1fczM5MF9wdl9kaXNwb3NlX2NwdSh2Y3B1LCB0cnVlKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC04MDksNyAmIzQzOzgxMCw3IEBAIHN0YXRpYyBpbnQgdW5wYWNrX29uZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkciwgdTY0IHR3ZWFrLAogCQkJcmV0dXJuIC1FQUdBSU47CiAJfQogCi0JaWYgKHJldCAmYW1wOyZhbXA7IHJldCAhPSAtRUFHQUlOKQomIzQzOwlpZiAocmV0ICZhbXA7JmFtcDsgcmV0ICE9IC1FQUdBSU4gJmFtcDsmYW1wOyByZXQgIT0gLUVJTlRSKQogCQlLVk1fVVZfRVZFTlQoa3ZtLCAzLCAmIzM0O1BST1RWSVJUIFZNIFVOUEFDSzogZmFpbGVkIGFkZHIgJWxseCB3aXRoIHJjICV4IHJyYyAleCYjMzQ7LAogCQkJICAgICB1dmNiLmdhZGRyLCAqcmMsICpycmMpOwogCXJldHVybiByZXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjkzCgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMTcwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHMzOTAgS1ZNIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCB0YXJnZXRpbmcgczM5MCBLVk0uIE15IGluaXRpYWwgYXNzZXNzbWVudCBzdWdnZXN0cyBhIHNldCBvZiByZWZpbmVtZW50cyBhbmQgZml4ZXMgYWNyb3NzIHNldmVyYWwgY3JpdGljYWwgYXJlYXMuIEZpcnN0LCBJIHNlZSBhIG5ldyBib29sZWFuLCBgaW5pdGlhbGl6ZWRgLCBiZWluZyBpbnRyb2R1Y2VkIHdpdGhpbiBgc3RydWN0IGt2bV92Y3B1X2FyY2hgLiBUaGlzIGxpa2VseSBhZGRyZXNzZXMgaW5pdGlhbGl6YXRpb24gcmFjZXMuIFRoZW4gSSBhbSBnb2luZyB0byBzZWUgaG93IGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgaXMgbm93IHRha2luZyBhIGB1bmlvbiBza2V5ICpza2V5YCBwYXJhbWV0ZXIgYW5kIHJldHVybmluZyB0aGUgc2tleSB2aWEgcG9pbnRlciBhbmQgYWxzbyBob3cgYF9kYXRfc2xvdF9wdGVgIGNsZWFycyBgcGdzdGUuY21tYV9kYCBkdXJpbmcgUFRFIGV4Y2hhbmdlcy4gVGhlc2UgaW5kaWNhdGUgY2hhbmdlcyBpbiBTZWN1cmUgS2V5IG1hbmFnZW1lbnQgYW5kIENNTUFzLgoKVGhlIGNoYW5nZSBpbiBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gIGlzIGltbWVkaWF0ZWx5IGFwcGFyZW50LiBXZSYjMzk7cmUgc2hpZnRpbmcgZnJvbSByZXRyeWluZyBvbiBgS1ZNX1BGTl9FUlJfU0lHUEVORElOR2AgdG8gYmFpbGluZyBvdXQgd2l0aCBgRUlOVFJgIHdoZW4gYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZy4gVGhpcyBpcyBhIHNlbnNpYmxlIGNoYW5nZSBpbiBlcnJvciBoYW5kbGluZy4KClRoZSBpbnRyb2R1Y3Rpb24gb2YgY2hlY2tzIGZvciBga3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSlgIGFuZCBgdmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZGAgd2l0aGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgZnVuY3Rpb25zIChgc2NhX2V4dF9jYWxsX3BlbmRpbmdgLCBgc2NhX2luamVjdF9leHRfY2FsbGAsIGFuZCBgc2NhX2NsZWFyX2V4dF9jYWxsYCkgaW1tZWRpYXRlbHkgY2FwdHVyZXMgbXkgYXR0ZW50aW9uLiBUaGlzIHN1Z2dlc3RzIHRpZ2h0ZXIgY29udHJvbCBhbmQgcG90ZW50aWFsbHkgc2VjdXJpdHktcmVsYXRlZCByZWZpbmVtZW50cyBmb3IgVXNlciBDb250cm9sIHNjZW5hcmlvcy4KCkxvb2tpbmcgYXQgYGt2bS1zMzkwLmNgLCBJIHNlZSB0aGF0IGBrdm1fczM5MF9rZXlvcGAgaXMgdXBkYXRlZCB0byB0aGUgbmV3IGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgc2lnbmF0dXJlLiBUaGUgbG9ja2luZyBzdHJhdGVneSBmb3IgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gIGFwcGVhcnMgdG8gYmUgcmVmaW5lZCwgc2hpZnRpbmcgdG8gYHNyY3VgIGFuZCBgbXV0ZXhgIGd1YXJkcywgd2hpY2ggY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgb24gY29uY3VycmVuY3kuIFRoZSBlcnJvciByZXR1cm4gdmFsdWVzIGhhdmUgYmVlbiBob21vZ2VuaXplZCB0byBgLUVGQVVMVGAgaW4gc2V2ZXJhbCBga3ZtX3MzOTBfYCBmdW5jdGlvbnMuIFRoZSB1c2Ugb2YgYHNsb3RzX2FyY2hfbG9ja2AgY29uc2lzdGVudGx5IHdpdGhpbiB0aGUgcmVsZXZhbnQgaW9jdGxzIGFuZCB0aGUgc2NhIGZ1bmN0aW9ucyBmb3IgYWRkaW5nIGFuZCBkZWxldGluZyB2Q1BVcyBzZWVtcyB0byBiZSBhIHNpZ25pZmljYW50IGxvY2tpbmcgc3RyYXRlZ3kgY2hhbmdlLiBJbXBvcnRhbnRseSwgSSBub3RlIHRoZSB1c2Ugb2YgYHNtcF9zdG9yZV9yZWxlYXNlYCB3aGVuIHNldHRpbmcgYHZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQgPSB0cnVlYCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbWVtb3J5IG9yZGVyaW5nLiBUaGUgY2xlYW51cCBpbiBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgIGxldmVyYWdpbmcgYF9fZnJlZWAgbWFjcm9zIGFuZCB0aGUgZGlmZmVyZW50IGhhbmRsaW5nIG9mIGBrdm1faXNfdWNvbnRyb2xgIGFyZSBhbHNvIGludGVyZXN0aW5nLiBUaGUgY2hlY2tzIG9mIGBzbXBfbG9hZF9hY3F1aXJlYCBpbiB0aGUgcnVuIGFuZCBpb2N0bCBhcmUgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBpcyBjb3JyZWN0LiBGaW5hbGx5LCB0aGUgcmVmYWN0b3Jpbmcgb2YgbWVtb3J5IHJlZ2lvbiBwcmVwYXJhdGlvbiBhbmQgY29tbWl0IGxvb2tzIHNpZ25pZmljYW50LCB3aXRoIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgbm93IGhhbmRsaW5nIG1pZ3JhdGlvbiBhbmQgQ01NQSBtb2RlcyBpbiBjb25qdW5jdGlvbiB3aXRoIGBfZGF0X3dhbGtfZ2ZuX3JhbmdlYC4KClRoZSBjb2RlIHdpdGhpbiBgcHJpdi5jYCBjb25maXJtcyB0aGUgbmV3IGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgc2lnbmF0dXJlIGlzIGluIHVzZSBhbmQgdGhhdCBgc2xvdHNfYXJjaF9sb2NrYCBpcyBub3cgYmVpbmcgdGFrZW4gYXJvdW5kIHRoZSBgX19kb19lc3NhYCBpbiBgaGFuZGxlX2Vzc2FgLgoKQW5kIGZpbmFsbHksIGBwdi5jYCBzaG93cyBmdW5jdGlvbiByZS1hcnJhbmdlbWVudCBmb3IgQ1BVIGRpc3Bvc2FsIGFuZCB0aGF0IGAtRUlOVFJgIGhhbmRsaW5nIGluIGB1bnBhY2tfb25lYC4KCkluIHN1bW1hcnksIHRoaXMgc2VlbXMgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgczM5MCBLVk0gc3Vic3lzdGVtLCBhbmQgaXQmIzM5O3MgY2VydGFpbmx5IHdvcnRoIGZ1enppbmcgdG8gdW5jb3ZlciBhbnkgcmVtYWluaW5nIGlzc3Vlcy4gU2luY2Ugc3l6a2FsbGVyIHN1cHBvcnRzIHMzOTB4IGFuZCBLVk0gb24gczM5MHgsIHRoYXQgc2VlbXMgbGlrZSBhIHZpYWJsZSBwYXRoLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBJZGVhbGx5LCB0aGVzZSBzaG91bGQgYmUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBHaXZlbiB0aGUgcGF0Y2gsIHNvbWUgcHJvbWlzaW5nIGNhbmRpZGF0ZXMgaW5jbHVkZToKCiogICBga3ZtX2FyY2hfdm1faW9jdGxgOiBBIGdlbmVyYWwgaW9jdGwgZW50cnlwb2ludC4KKiAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YDogTm9uLXN0YXRpYyBhbmQgc2VlbXMgdG8gYmUgYSBnb29kIGVudHJ5IHBvaW50LgoqICAgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YDogTm9uLXN0YXRpYyBhbmQgc2VlbXMgdG8gYmUgYSBnb29kIGVudHJ5IHBvaW50LgoqICAgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YDogTm9uLXN0YXRpYyBhbmQgcGFydCBvZiBhIHNpZ25pZmljYW50IGRhdGEgc3RydWN0dXJlIGNoYW5nZS4KKiAgIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmA6IEFsc28gbW9kaWZpZWQgc2lnbmlmaWNhbnRseS4KCkkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdG8gY29uZmlybSB0aGF0IENPTkZJR1xfS1ZNIGlzIHNldCwgYW5kIGNvbmZpcm0gdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgZXhpc3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHZvaWR8bG9uZ3xib29sKSBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMzU0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTMwLVxuYXJjaC9zMzkwL2t2bS9kYXQuYzozMTppbnQga3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jKVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0zMi17XG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYz03Nj1zdHJ1Y3QgY3JzdF90YWJsZSAqZGF0X2FsbG9jX2Nyc3Rfc2xlZXBhYmxlKHVuc2lnbmVkIGxvbmcgaW5pdClcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTg5LVxuYXJjaC9zMzkwL2t2bS9kYXQuYzo5MDp2b2lkIGRhdF9mcmVlX2xldmVsKHN0cnVjdCBjcnN0X3RhYmxlICp0YWJsZSwgYm9vbCBvd25zX3B0ZXMpXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTkxLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEwNC1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTA1OmludCBkYXRfc2V0X2FzY2VfbGltaXQoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgKmFzY2UsIGludCBuZXd0eXBlKVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMDYte1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmM9MzAyPXN0YXRpYyBpbnQgZGF0X3NwbGl0X2Nyc3RlKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBjcnN0ZSAqY3JzdGVwLFxuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMzc4LSAqL1xuYXJjaC9zMzkwL2t2bS9kYXQuYzozNzk6aW50IGRhdF9lbnRyeV93YWxrKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBnZm5fdCBnZm4sIHVuaW9uIGFzY2UgYXNjZSwgaW50IGZsYWdzLFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0zODAtXHRcdCAgIGludCB3YWxrX2xldmVsLCB1bmlvbiBjcnN0ZSAqKmxhc3QsIHVuaW9uIHB0ZSAqKnB0ZXBwKVxuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmM9NTM0PXN0YXRpYyBsb25nIGRhdF9jcnN0ZV93YWxrX3JhbmdlKGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIHN0cnVjdCBjcnN0X3RhYmxlICp0YWJsZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTU5NC0gKi9cbmFyY2gvczM5MC9rdm0vZGF0LmM6NTk1OmxvbmcgX2RhdF93YWxrX2dmbl9yYW5nZShnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCB1bmlvbiBhc2NlIGFzY2UsXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTU5Ni1cdFx0XHQgY29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyAqb3BzLCBpbnQgZmxhZ3MsIHZvaWQgKnByaXYpXG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYy02MTUtXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjYxNjppbnQgZGF0X2dldF9zdG9yYWdlX2tleSh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSlcbmFyY2gvczM5MC9rdm0vZGF0LmMtNjE3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTY1MD1zdGF0aWMgdm9pZCBkYXRfdXBkYXRlX3B0ZXBfc2QodW5pb24gcGdzdGUgb2xkLCB1bmlvbiBwZ3N0ZSBwZ3N0ZSwgdW5pb24gcHRlICpwdGVwKVxuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtNjU1LVxuYXJjaC9zMzkwL2t2bS9kYXQuYzo2NTY6aW50IGRhdF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxuYXJjaC9zMzkwL2t2bS9kYXQuYy02NTctXHRcdFx0dW5pb24gc2tleSBza2V5LCBib29sIG5xKVxuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmM9NzAwPXN0YXRpYyBib29sIHBhZ2VfY29uZF9zZXRfc3RvcmFnZV9rZXkocGh5c19hZGRyX3QgcGFkZHIsIHVuaW9uIHNrZXkgc2tleSwgdW5pb24gc2tleSAqb2xka2V5LFxuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtNzEwLVxuYXJjaC9zMzkwL2t2bS9kYXQuYzo3MTE6aW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxuYXJjaC9zMzkwL2t2bS9kYXQuYy03MTItXHRcdFx0ICAgICB1bmlvbiBza2V5IHNrZXksIHVuaW9uIHNrZXkgKm9sZGtleSwgYm9vbCBucSwgYm9vbCBtciwgYm9vbCBtYylcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTc1Ny1cbmFyY2gvczM5MC9rdm0vZGF0LmM6NzU4OmludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSlcbmFyY2gvczM5MC9rdm0vZGF0LmMtNzU5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTgxMz1zdGF0aWMgbG9uZyBkYXRfcmVzZXRfc2tleXNfY3JzdGUodW5pb24gY3JzdGUgKmNyc3RlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYy04MzEtXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjgzMjpsb25nIGRhdF9yZXNldF9za2V5cyh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KVxuYXJjaC9zMzkwL2t2bS9kYXQuYy04MzMte1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmM9OTAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIGRhdF9zbG90X29wcyA9IHtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTkwNi1cbmFyY2gvczM5MC9rdm0vZGF0LmM6OTA3OmludCBkYXRfc2V0X3Nsb3Qoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcbmFyY2gvczM5MC9rdm0vZGF0LmMtOTA4LVx0XHQgdTE2IHR5cGUsIHUxNiBwYXJhbSlcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTk0ND11bnNpZ25lZCBsb25nIGRhdF9nZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0pXG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYy05NjEtXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjk2Mjp2b2lkIGRhdF9zZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0sIHVuc2lnbmVkIGxvbmcgdmFsKVxuYXJjaC9zMzkwL2t2bS9kYXQuYy05NjMte1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmM9OTkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIHRlc3RfYWdlX29wcyA9IHtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEwMDYtICovXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEwMDc6Ym9vbCBkYXRfdGVzdF9hZ2VfZ2ZuKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZClcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTAwOC17XG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYz0xMDMwPXN0YXRpYyBsb25nIGRhdF9zZXRfcG5fcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMDQzLVxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMDQ0OmludCBkYXRfc2V0X3ByZWZpeF9ub3RpZl9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEwNDUte1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTA3NC0gKi9cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTA3NTppbnQgZGF0X3BlcmZvcm1fZXNzYSh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgaW50IG9yYywgdW5pb24gZXNzYV9zdGF0ZSAqc3RhdGUsIGJvb2wgKmRpcnR5KVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMDc2LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTExNTY9c3RhdGljIGxvbmcgZGF0X3Jlc2V0X2NtbWFfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTY5LVxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMTcwOmxvbmcgZGF0X3Jlc2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydClcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE3MS17XG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYz0xMjAxPXN0YXRpYyBsb25nIF9fZGF0X3BlZWtfY21tYV9jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2Fsaylcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyMDktXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMTA6aW50IGRhdF9wZWVrX2NtbWEoZ2ZuX3Qgc3RhcnQsIHVuaW9uIGFzY2UgYXNjZSwgdW5zaWduZWQgaW50ICpjb3VudCwgdTggKnZhbHVlcylcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIxMS17XG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYz0xMjI4PXN0YXRpYyBsb25nIF9fZGF0X2dldF9jbW1hX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTI1NS1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTI1NjppbnQgZGF0X2dldF9jbW1hKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzLCBhdG9taWM2NF90ICpyZW0pXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyNTcte1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmM9MTI4Nj1zdGF0aWMgbG9uZyBfX2RhdF9zZXRfY21tYV9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2Fsaylcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEzMTgtICovXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEzMTk6aW50IGRhdF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbixcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTMyMC1cdFx0ICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyBtYXNrLCBjb25zdCB1aW50OF90ICpiaXRzKVxuLS1cbmFyY2gvczM5MC9rdm0vZGF0Lmg9NTIxPXVuaW9uIHBnc3RlIF9fbXVzdF9jaGVjayBfX2RhdF9wdGVwX3hjaGcodW5pb24gcHRlICpwdGVwLCB1bmlvbiBwZ3N0ZSBwZ3N0ZSwgdW5pb24gcHRlIG5ldyxcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTIyLVx0XHRcdFx0XHQgZ2ZuX3QgZ2ZuLCB1bmlvbiBhc2NlIGFzY2UsIGJvb2wgdXNlc19za2V5cyk7XG5hcmNoL3MzOTAva3ZtL2RhdC5oOjUyMzpib29sIGRhdF9jcnN0ZXBfeGNoZ19hdG9taWModW5pb24gY3JzdGUgKmNyc3RlcCwgdW5pb24gY3JzdGUgb2xkLCB1bmlvbiBjcnN0ZSBuZXcsIGdmbl90IGdmbixcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTI0LVx0XHRcdCAgICB1bmlvbiBhc2NlIGFzY2UpO1xuYXJjaC9zMzkwL2t2bS9kYXQuaDo1MjU6dm9pZCBkYXRfY3JzdGVwX3hjaGcodW5pb24gY3JzdGUgKmNyc3RlcCwgdW5pb24gY3JzdGUgbmV3LCBnZm5fdCBnZm4sIHVuaW9uIGFzY2UgYXNjZSk7XG5hcmNoL3MzOTAva3ZtL2RhdC5oLTUyNi1cbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTI3OmxvbmcgX2RhdF93YWxrX2dmbl9yYW5nZShnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCB1bmlvbiBhc2NlIGFzY2UsXG5hcmNoL3MzOTAva3ZtL2RhdC5oLTUyOC1cdFx0XHQgY29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyAqb3BzLCBpbnQgZmxhZ3MsIHZvaWQgKnByaXYpO1xuYXJjaC9zMzkwL2t2bS9kYXQuaC01MjktXG5hcmNoL3MzOTAva3ZtL2RhdC5oOjUzMDppbnQgZGF0X2VudHJ5X3dhbGsoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIGdmbl90IGdmbiwgdW5pb24gYXNjZSBhc2NlLCBpbnQgZmxhZ3MsXG5hcmNoL3MzOTAva3ZtL2RhdC5oLTUzMS1cdFx0ICAgaW50IHdhbGtfbGV2ZWwsIHVuaW9uIGNyc3RlICoqbGFzdCwgdW5pb24gcHRlICoqcHRlcHApO1xuYXJjaC9zMzkwL2t2bS9kYXQuaDo1MzI6dm9pZCBkYXRfZnJlZV9sZXZlbChzdHJ1Y3QgY3JzdF90YWJsZSAqdGFibGUsIGJvb2wgb3duc19wdGVzKTtcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTMzLXN0cnVjdCBjcnN0X3RhYmxlICpkYXRfYWxsb2NfY3JzdF9zbGVlcGFibGUodW5zaWduZWQgbG9uZyBpbml0KTtcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTM0OmludCBkYXRfc2V0X2FzY2VfbGltaXQoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgKmFzY2UsIGludCBuZXd0eXBlKTtcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTM1OmludCBkYXRfZ2V0X3N0b3JhZ2Vfa2V5KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KTtcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTM2OmludCBkYXRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbixcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTM3LVx0XHRcdHVuaW9uIHNrZXkgc2tleSwgYm9vbCBucSk7XG5hcmNoL3MzOTAva3ZtL2RhdC5oOjUzODppbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sXG5hcmNoL3MzOTAva3ZtL2RhdC5oLTUzOS1cdFx0XHQgICAgIHVuaW9uIHNrZXkgc2tleSwgdW5pb24gc2tleSAqb2xka2V5LCBib29sIG5xLCBib29sIG1yLCBib29sIG1jKTtcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTQwOmludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSk7XG5hcmNoL3MzOTAva3ZtL2RhdC5oOjU0MTpsb25nIGRhdF9yZXNldF9za2V5cyh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KTtcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTQyLVxuYXJjaC9zMzkwL2t2bS9kYXQuaD01NDM9dW5zaWduZWQgbG9uZyBkYXRfZ2V0X3B0dmFsKHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IHB0dmFsX3BhcmFtIHBhcmFtKTtcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTQ0OnZvaWQgZGF0X3NldF9wdHZhbChzdHJ1Y3QgcGFnZV90YWJsZSAqdGFibGUsIHN0cnVjdCBwdHZhbF9wYXJhbSBwYXJhbSwgdW5zaWduZWQgbG9uZyB2YWwpO1xuYXJjaC9zMzkwL2t2bS9kYXQuaC01NDUtXG5hcmNoL3MzOTAva3ZtL2RhdC5oOjU0NjppbnQgZGF0X3NldF9zbG90KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG5hcmNoL3MzOTAva3ZtL2RhdC5oLTU0Ny1cdFx0IHUxNiB0eXBlLCB1MTYgcGFyYW0pO1xuYXJjaC9zMzkwL2t2bS9kYXQuaDo1NDg6aW50IGRhdF9zZXRfcHJlZml4X25vdGlmX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbik7XG5hcmNoL3MzOTAva3ZtL2RhdC5oOjU0OTpib29sIGRhdF90ZXN0X2FnZV9nZm4odW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKTtcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTUwLVxuYXJjaC9zMzkwL2t2bS9kYXQuaDo1NTE6aW50IGRhdF9wZXJmb3JtX2Vzc2EodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIGludCBvcmMsIHVuaW9uIGVzc2Ffc3RhdGUgKnN0YXRlLCBib29sICpkaXJ0eSk7XG5hcmNoL3MzOTAva3ZtL2RhdC5oOjU1Mjpsb25nIGRhdF9yZXNldF9jbW1hKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3Qgc3RhcnRfZ2ZuKTtcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTUzOmludCBkYXRfcGVla19jbW1hKGdmbl90IHN0YXJ0LCB1bmlvbiBhc2NlIGFzY2UsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMpO1xuYXJjaC9zMzkwL2t2bS9kYXQuaDo1NTQ6aW50IGRhdF9nZXRfY21tYSh1bmlvbiBhc2NlIGFzY2UsIGdmbl90ICpzdGFydCwgdW5zaWduZWQgaW50ICpjb3VudCwgdTggKnZhbHVlcywgYXRvbWljNjRfdCAqcmVtKTtcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTU1OmludCBkYXRfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sXG5hcmNoL3MzOTAva3ZtL2RhdC5oLTU1Ni1cdFx0ICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyBtYXNrLCBjb25zdCB1aW50OF90ICpiaXRzKTtcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTU3LVxuYXJjaC9zMzkwL2t2bS9kYXQuaDo1NTg6aW50IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyk7XG5hcmNoL3MzOTAva3ZtL2RhdC5oLTU1OS1cbi0tXG5hcmNoL3MzOTAva3ZtL2RpYWcuYz0yNjY9c3RhdGljIGludCBfX2RpYWdfdmlydGlvX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9kaWFnLmMtMzAxLVxuYXJjaC9zMzkwL2t2bS9kaWFnLmM6MzAyOmludCBrdm1fczM5MF9oYW5kbGVfZGlhZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2RpYWcuYy0zMDMte1xuLS1cbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTE0LVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6MTU6Ym9vbCBrdm1fYXJjaF9zZXR1cF9hc3luY19wZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTYtXG4tLVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMzItICovXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzozMzppbnQga3ZtX3MzOTBfZmF1bHRpbl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYXVsdCAqZilcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTM0LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0xMjgtXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzoxMjk6aW50IGt2bV9zMzkwX2dldF9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmLCBnZm5fdCBnZm4sIGJvb2wgdylcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTEzMC17XG4tLVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmgtMTUtXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uaDoxNjppbnQga3ZtX3MzOTBfZmF1bHRpbl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYXVsdCAqZik7XG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uaDoxNzppbnQga3ZtX3MzOTBfZ2V0X2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmYsIGdmbl90IGdmbiwgYm9vbCB3KTtcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5oLTE4LVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jPTExMj11bmlvbiBvYWMge1xuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEzMy1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjEzNDppbnQgaXB0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTM1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYz0yMDI9c3RhdGljIHZvaWQgaXB0ZV91bmxvY2tfc2lpZihzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMjE3LVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6MjE4OnZvaWQgaXB0ZV9sb2NrKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTIxOS17XG4tLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMjI1LVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6MjI2OnZvaWQgaXB0ZV91bmxvY2soc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMjI3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYz04ODI9c3RhdGljIGludCBhY2Nlc3NfZ3Vlc3RfcGFnZV93aXRoX2tleV9ncGEoc3RydWN0IGt2bSAqa3ZtLCBlbnVtIGdhY2NfbW9kZSBtb2RlLCBncGFfdCBncGEsXG4tLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtOTA4LVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6OTA5OmludCBhY2Nlc3NfZ3Vlc3RfYWJzX3dpdGhfa2V5KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCB2b2lkICpkYXRhLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtOTEwLVx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCBlbnVtIGdhY2NfbW9kZSBtb2RlLCB1OCBhY2Nlc3Nfa2V5KVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTkyOC1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjkyOTppbnQgYWNjZXNzX2d1ZXN0X3dpdGhfa2V5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBnYSwgdTggYXIsXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy05MzAtXHRcdFx0ICB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGxlbiwgZW51bSBnYWNjX21vZGUgbW9kZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xMDA4LVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6MTAwOTppbnQgYWNjZXNzX2d1ZXN0X3JlYWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEwMTAtXHRcdCAgICAgIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbGVuLCBlbnVtIGdhY2NfbW9kZSBtb2RlKVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jPTExMDQ9c3RhdGljIHZvaWQgX2NtcHhjaGdfZ3Vlc3RfYWJzX3dpdGhfa2V5KHN0cnVjdCBndWVzdF9mYXVsdCAqZilcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xMTM2LSAqL1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6MTEzNzppbnQgY21weGNoZ19ndWVzdF9hYnNfd2l0aF9rZXkoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGludCBsZW4sIHVuaW9uIGt2bV9zMzkwX3F1YWQgKm9sZCxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTExMzgtXHRcdFx0ICAgICAgIHVuaW9uIGt2bV9zMzkwX3F1YWQgbmV3LCB1OCBhY2MsIGJvb2wgKnN1Y2Nlc3MpXG4tLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTE4My0gKi9cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjExODQ6aW50IGd1ZXN0X3RyYW5zbGF0ZV9hZGRyZXNzX3dpdGhfa2V5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBndmEsIHU4IGFyLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTE4NS1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqZ3BhLCBlbnVtIGdhY2NfbW9kZSBtb2RlLFxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEyMDctICovXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYzoxMjA4OmludCBjaGVja19ndmFfcmFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGd2YSwgdTggYXIsXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xMjA5LVx0XHQgICAgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGVudW0gZ2FjY19tb2RlIG1vZGUsIHU4IGFjY2Vzc19rZXkpXG4tLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTIzMi0gKi9cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjEyMzM6aW50IGNoZWNrX2dwYV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ3BhLCB1bnNpZ25lZCBsb25nIGxlbmd0aCxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEyMzQtXHRcdCAgICBlbnVtIGdhY2NfbW9kZSBtb2RlLCB1OCBhY2Nlc3Nfa2V5KVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEyNTctICovXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYzoxMjU4OmludCBrdm1fczM5MF9jaGVja19sb3dfYWRkcl9wcm90X3JlYWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSlcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEyNTkte1xuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jPTE2NDY9c3RhdGljIGludCBfX2dhY2Nlc3Nfc2hhZG93X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGdtYXAgKnNnLCBncGFfdCBzYWRkcixcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xNjcwLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6MTY3MTppbnQgZ2FjY2Vzc19zaGFkb3dfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZ21hcCAqc2csIGdwYV90IHNhZGRyLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTY3Mi1cdFx0XHQgdW5pb24gbXZwZ19wZWkgKmRhdHB0ciwgYm9vbCB3cilcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaD0xNDg9c3RhdGljIGlubGluZSBfX211c3RfY2hlY2tcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjE0OTppbnQgd3JpdGVfZ3Vlc3RfbGMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSwgdm9pZCAqZGF0YSxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTE1MC1cdFx0ICAgdW5zaWduZWQgbG9uZyBsZW4pXG4tLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg9MTc0PXN0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDoxNzU6aW50IHJlYWRfZ3Vlc3RfbGMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSwgdm9pZCAqZGF0YSxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTE3Ni1cdFx0ICB1bnNpZ25lZCBsb25nIGxlbilcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaD0xODM9ZW51bSBnYWNjX21vZGUge1xuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTE4OC1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjE4OTppbnQgZ3Vlc3RfdHJhbnNsYXRlX2FkZHJlc3Nfd2l0aF9rZXkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGd2YSwgdTggYXIsXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0xOTAtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKmdwYSwgZW51bSBnYWNjX21vZGUgbW9kZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0xOTItXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDoxOTM6aW50IGNoZWNrX2d2YV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhLCB1OCBhcixcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTE5NC1cdFx0ICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBlbnVtIGdhY2NfbW9kZSBtb2RlLCB1OCBhY2Nlc3Nfa2V5KTtcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTE5NS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjE5NjppbnQgY2hlY2tfZ3BhX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGEsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMTk3LVx0XHQgICAgZW51bSBnYWNjX21vZGUgbW9kZSwgdTggYWNjZXNzX2tleSk7XG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0xOTgtXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDoxOTk6aW50IGFjY2Vzc19ndWVzdF9hYnNfd2l0aF9rZXkoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIHZvaWQgKmRhdGEsXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0yMDAtXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIGVudW0gZ2FjY19tb2RlIG1vZGUsIHU4IGFjY2Vzc19rZXkpO1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMjAxLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6MjAyOmludCBhY2Nlc3NfZ3Vlc3Rfd2l0aF9rZXkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdhLCB1OCBhcixcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTIwMy1cdFx0XHQgIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbGVuLCBlbnVtIGdhY2NfbW9kZSBtb2RlLFxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTIwNS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjIwNjppbnQgYWNjZXNzX2d1ZXN0X3JlYWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTIwNy1cdFx0ICAgICAgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBsZW4sIGVudW0gZ2FjY19tb2RlIG1vZGUpO1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMjA4LVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6MjA5OmludCBjbXB4Y2hnX2d1ZXN0X2Fic193aXRoX2tleShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgaW50IGxlbiwgdW5pb24ga3ZtX3MzOTBfcXVhZCAqb2xkLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMjEwLVx0XHRcdCAgICAgICB1bmlvbiBrdm1fczM5MF9xdWFkIG5ldywgdTggYWNjZXNzX2tleSwgYm9vbCAqc3VjY2Vzcyk7XG4tLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg9MjU4PXN0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDoyNTk6aW50IHdyaXRlX2d1ZXN0X3dpdGhfa2V5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBnYSwgdTggYXIsXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0yNjAtXHRcdFx0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbGVuLCB1OCBhY2Nlc3Nfa2V5KVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTI3Nz1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6Mjc4OmludCB3cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ2EsIHU4IGFyLCB2b2lkICpkYXRhLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMjc5LVx0XHR1bnNpZ25lZCBsb25nIGxlbilcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaD0zMDA9c3RhdGljIGlubGluZSBfX211c3RfY2hlY2tcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjMwMTppbnQgcmVhZF9ndWVzdF93aXRoX2tleShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ2EsIHU4IGFyLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMzAyLVx0XHRcdHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbGVuLCB1OCBhY2Nlc3Nfa2V5KVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTMyMT1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6MzIyOmludCByZWFkX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBnYSwgdTggYXIsIHZvaWQgKmRhdGEsXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0zMjMtXHQgICAgICAgdW5zaWduZWQgbG9uZyBsZW4pXG4tLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg9MzQ0PXN0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDozNDU6aW50IHJlYWRfZ3Vlc3RfaW5zdHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdhLCB2b2lkICpkYXRhLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMzQ2LVx0XHQgICAgIHVuc2lnbmVkIGxvbmcgbGVuKVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTM3MD1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6MzcxOmludCB3cml0ZV9ndWVzdF9hYnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdwYSwgdm9pZCAqZGF0YSxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTM3Mi1cdFx0ICAgIHVuc2lnbmVkIGxvbmcgbGVuKVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTM5Mz1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6Mzk0OmludCByZWFkX2d1ZXN0X2FicyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3BhLCB2b2lkICpkYXRhLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMzk1LVx0XHQgICB1bnNpZ25lZCBsb25nIGxlbilcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaD00MTc9c3RhdGljIGlubGluZSBfX211c3RfY2hlY2tcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjQxODppbnQgd3JpdGVfZ3Vlc3RfcmVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3JhLCB2b2lkICpkYXRhLFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtNDE5LVx0XHQgICAgIHVuc2lnbmVkIGxvbmcgbGVuKVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTQ0MT1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6NDQyOmludCByZWFkX2d1ZXN0X3JlYWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSwgdm9pZCAqZGF0YSxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTQ0My1cdFx0ICAgIHVuc2lnbmVkIGxvbmcgbGVuKVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTQ0Ny1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjQ0ODp2b2lkIGlwdGVfbG9jayhzdHJ1Y3Qga3ZtICprdm0pO1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6NDQ5OnZvaWQgaXB0ZV91bmxvY2soc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjQ1MDppbnQgaXB0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjQ1MTppbnQga3ZtX3MzOTBfY2hlY2tfbG93X2FkZHJfcHJvdF9yZWFsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBncmEpO1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtNDUyLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg9NDUzPXVuaW9uIG12cGdfcGVpIHtcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC00NjItXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDo0NjM6aW50IGdhY2Nlc3Nfc2hhZG93X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGdtYXAgKnNnLCBncGFfdCBzYWRkcixcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTQ2NC1cdFx0XHQgdW5pb24gbXZwZ19wZWkgKmRhdHB0ciwgYm9vbCB3cik7XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTE4PXN0cnVjdCBnbWFwICpnbWFwX25ld19jaGlsZChzdHJ1Y3QgZ21hcCAqcGFyZW50LCBnZm5fdCBsaW1pdClcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMzAtXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzE6aW50IGdtYXBfc2V0X2xpbWl0KHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBsaW1pdClcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzMi17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTUzPXN0YXRpYyB2b2lkIGdtYXBfcm1hcF9yYWRpeF90cmVlX2ZyZWUoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqcm9vdClcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xNzktXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxODA6dm9pZCBnbWFwX3JlbW92ZV9jaGlsZChzdHJ1Y3QgZ21hcCAqY2hpbGQpXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xODEte1xuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTE5NC0gKi9cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjE5NTp2b2lkIGdtYXBfZGlzcG9zZShzdHJ1Y3QgZ21hcCAqZ21hcClcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTE5Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMjM2LSAqL1xuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MjM3OmludCBzMzkwX3JlcGxhY2VfYXNjZShzdHJ1Y3QgZ21hcCAqZ21hcClcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTIzOC17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMjU4LVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MjU5OmJvb2wgX2dtYXBfdW5tYXBfcHJlZml4KHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBnZm4sIGdmbl90IGVuZCwgYm9vbCBoaW50KVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMjYwLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz0zMTY9c3RhdGljIGxvbmcgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IGVuZCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTM1My0gKi9cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjM1NDpib29sIGdtYXBfYWdlX2dmbihzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZClcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTM1NS17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9Mzk4PXN0YXRpYyBsb25nIF9nbWFwX3VubWFwX2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTQ0MC0gKi9cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjQ0MTpib29sIGdtYXBfdW5tYXBfZ2ZuX3JhbmdlKHN0cnVjdCBnbWFwICpnbWFwLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtNDQyLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz00OTQ9c3RhdGljIGxvbmcgX2Nyc3RlX3Rlc3RfYW5kX2NsZWFyX3NvZnRkaXJ0eSh1bmlvbiBjcnN0ZSAqdGFibGUsIGdmbl90IGdmbiwgZ2ZuX3QgZW5kLFxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTUyNi1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjUyNzp2b2lkIGdtYXBfc3luY19kaXJ0eV9sb2coc3RydWN0IGdtYXAgKmdtYXAsIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQpXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy01Mjgte1xuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jPTU3Mz1zdGF0aWMgaW50IF9nbWFwX2hhbmRsZV9taW5vcl9wdGVfZmF1bHQoc3RydWN0IGdtYXAgKmdtYXAsIHVuaW9uIHBnc3RlICpwZ3N0ZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy02MTEtICovXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzo2MTI6aW50IGdtYXBfdHJ5X2ZpeHVwX21pbm9yKHN0cnVjdCBnbWFwICpnbWFwLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmZhdWx0KVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtNjEzLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz02ODU9c3RhdGljIGludCBfZ21hcF9saW5rKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqZ21hcCwgaW50IGxldmVsLFxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTczNi1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjczNzppbnQgZ21hcF9saW5rKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqZ21hcCwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmLFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtNzM4LVx0ICAgICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz03OTQ9c3RhdGljIGludCBnbWFwX3VjYXNfdHJhbnNsYXRlX3NpbXBsZShzdHJ1Y3QgZ21hcCAqZ21hcCwgZ3BhX3QgKmdhZGRyLCB1bmlvbiBjcnN0ZSAqKmNyc3RlcHApXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtODIyLSAqL1xuYXJjaC9zMzkwL2t2bS9nbWFwLmM6ODIzOmludCBnbWFwX3VjYXNfdHJhbnNsYXRlKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqZ21hcCwgZ3BhX3QgKmdhZGRyKVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtODI0LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy04NTgtXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzo4NTk6aW50IGdtYXBfdWNhc19tYXAoc3RydWN0IGdtYXAgKmdtYXAsIGdmbl90IHBfZ2ZuLCBnZm5fdCBjX2dmbiwgdW5zaWduZWQgbG9uZyBjb3VudClcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTg2MC17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9ODg3PXN0YXRpYyB2b2lkIGdtYXBfdWNhc191bm1hcF9vbmUoc3RydWN0IGdtYXAgKmdtYXAsIGdmbl90IGNfZ2ZuKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTg5OS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjkwMDp2b2lkIGdtYXBfdWNhc191bm1hcChzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3QgY19nZm4sIHVuc2lnbmVkIGxvbmcgY291bnQpXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy05MDEte1xuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jPTkwOD1zdGF0aWMgbG9uZyBfZ21hcF9zcGxpdF9jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2Fsaylcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy05MzEtXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzo5MzI6dm9pZCBnbWFwX3NwbGl0X2h1Z2VfcGFnZXMoc3RydWN0IGdtYXAgKmdtYXApXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy05MzMte1xuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jPTk0OD1zdGF0aWMgaW50IF9nbWFwX2VuYWJsZV9za2V5cyhzdHJ1Y3QgZ21hcCAqZ21hcClcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy05NzAtXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzo5NzE6aW50IGdtYXBfZW5hYmxlX3NrZXlzKHN0cnVjdCBnbWFwICpnbWFwKVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtOTcyLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz05OTE9c3RhdGljIGxvbmcgX2Rlc3Ryb3lfcGFnZXNfY3JzdGUodW5pb24gY3JzdGUgKmNyc3RlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTAwNy1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEwMDg6aW50IGdtYXBfcHZfZGVzdHJveV9yYW5nZShzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBpbnRlcnJ1cHRpYmxlKVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTAwOS17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTAyNi1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEwMjc6aW50IGdtYXBfaW5zZXJ0X3JtYXAoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZywgZ2ZuX3QgcF9nZm4sXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMDI4LVx0XHQgICAgIGdmbl90IHJfZ2ZuLCBpbnQgbGV2ZWwpXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTA2Mi1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEwNjM6aW50IGdtYXBfcHJvdGVjdF9ybWFwKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqc2csIGdmbl90IHBfZ2ZuLCBnZm5fdCByX2dmbixcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEwNjQtXHRcdCAgICAgIGt2bV9wZm5fdCBwZm4sIGludCBsZXZlbCwgYm9vbCB3cilcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz0xMTE0PXN0YXRpYyBsb25nIF9fc2V0X2NtbWFfZGlydHlfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTEyOC1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjExMjk6dm9pZCBfZ21hcF9zZXRfY21tYV9hbGwoc3RydWN0IGdtYXAgKmdtYXAsIGJvb2wgZGlydHkpXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMTMwLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz0xMTc0PXN0YXRpYyB2b2lkIGdtYXBfdW5zaGFkb3coc3RydWN0IGdtYXAgKnNnKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTExOTMtXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMTk0OnZvaWQgX2dtYXBfaGFuZGxlX3ZzaWVfdW5zaGFkb3dfZXZlbnQoc3RydWN0IGdtYXAgKnBhcmVudCwgZ2ZuX3QgZ2ZuKVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTE5NS17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmg9Nzc9c3RydWN0IGdtYXBfY2FjaGUge1xuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5oLTg0LVxuYXJjaC9zMzkwL2t2bS9nbWFwLmg6ODU6aW50IHMzOTBfcmVwbGFjZV9hc2NlKHN0cnVjdCBnbWFwICpnbWFwKTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjg2OmJvb2wgX2dtYXBfdW5tYXBfcHJlZml4KHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBnZm4sIGdmbl90IGVuZCwgYm9vbCBoaW50KTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjg3OmJvb2wgZ21hcF9hZ2VfZ2ZuKHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjg4OmJvb2wgZ21hcF91bm1hcF9nZm5fcmFuZ2Uoc3RydWN0IGdtYXAgKmdtYXAsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQpO1xuYXJjaC9zMzkwL2t2bS9nbWFwLmg6ODk6aW50IGdtYXBfdHJ5X2ZpeHVwX21pbm9yKHN0cnVjdCBnbWFwICpnbWFwLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmZhdWx0KTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oLTkwLXN0cnVjdCBnbWFwICpnbWFwX25ldyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGxpbWl0KTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oPTkxPXN0cnVjdCBnbWFwICpnbWFwX25ld19jaGlsZChzdHJ1Y3QgZ21hcCAqcGFyZW50LCBnZm5fdCBsaW1pdCk7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaDo5Mjp2b2lkIGdtYXBfcmVtb3ZlX2NoaWxkKHN0cnVjdCBnbWFwICpjaGlsZCk7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaDo5Mzp2b2lkIGdtYXBfZGlzcG9zZShzdHJ1Y3QgZ21hcCAqZ21hcCk7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaDo5NDppbnQgZ21hcF9saW5rKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqZ21hcCwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmYXVsdCxcbmFyY2gvczM5MC9rdm0vZ21hcC5oLTk1LVx0ICAgICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCk7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaDo5Njp2b2lkIGdtYXBfc3luY19kaXJ0eV9sb2coc3RydWN0IGdtYXAgKmdtYXAsIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQpO1xuYXJjaC9zMzkwL2t2bS9nbWFwLmg6OTc6aW50IGdtYXBfc2V0X2xpbWl0KHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBsaW1pdCk7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaDo5ODppbnQgZ21hcF91Y2FzX3RyYW5zbGF0ZShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKmdtYXAsIGdwYV90ICpnYWRkcik7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaDo5OTppbnQgZ21hcF91Y2FzX21hcChzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3QgcF9nZm4sIGdmbl90IGNfZ2ZuLCB1bnNpZ25lZCBsb25nIGNvdW50KTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwMDp2b2lkIGdtYXBfdWNhc191bm1hcChzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3QgY19nZm4sIHVuc2lnbmVkIGxvbmcgY291bnQpO1xuYXJjaC9zMzkwL2t2bS9nbWFwLmg6MTAxOmludCBnbWFwX2VuYWJsZV9za2V5cyhzdHJ1Y3QgZ21hcCAqZ21hcCk7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaDoxMDI6aW50IGdtYXBfcHZfZGVzdHJveV9yYW5nZShzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBpbnRlcnJ1cHRpYmxlKTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwMzppbnQgZ21hcF9pbnNlcnRfcm1hcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnLCBnZm5fdCBwX2dmbixcbmFyY2gvczM5MC9rdm0vZ21hcC5oLTEwNC1cdFx0ICAgICBnZm5fdCByX2dmbiwgaW50IGxldmVsKTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwNTppbnQgZ21hcF9wcm90ZWN0X3JtYXAoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZywgZ2ZuX3QgcF9nZm4sIGdmbl90IHJfZ2ZuLFxuYXJjaC9zMzkwL2t2bS9nbWFwLmgtMTA2LVx0XHQgICAgICBrdm1fcGZuX3QgcGZuLCBpbnQgbGV2ZWwsIGJvb2wgd3IpO1xuYXJjaC9zMzkwL2t2bS9nbWFwLmg6MTA3OnZvaWQgX2dtYXBfc2V0X2NtbWFfYWxsKHN0cnVjdCBnbWFwICpnbWFwLCBib29sIGRpcnR5KTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwODp2b2lkIF9nbWFwX2hhbmRsZV92c2llX3Vuc2hhZG93X2V2ZW50KHN0cnVjdCBnbWFwICpwYXJlbnQsIGdmbl90IGdmbik7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaC0xMDktc3RydWN0IGdtYXAgKmdtYXBfY3JlYXRlX3NoYWRvdyhzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKmdtYXAsXG5hcmNoL3MzOTAva3ZtL2dtYXAuaC0xMTAtXHRcdFx0XHR1bmlvbiBhc2NlIGFzY2UsIGludCBlZGF0X2xldmVsKTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjExMTp2b2lkIGdtYXBfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3QgZ21hcCAqZ21hcCk7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaC0xMTItXG4tLVxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jPTk5PXN0YXRpYyB2b2lkIGVuYWJsZV9hbGxfaHdfd3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0xMjktXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM6MTMwOnZvaWQga3ZtX3MzOTBfYmFja3VwX2d1ZXN0X3Blcl9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0xMzEte1xuLS1cbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0xMzctXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM6MTM4OnZvaWQga3ZtX3MzOTBfcmVzdG9yZV9ndWVzdF9wZXJfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMTM5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMTQ1LVxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjE0Njp2b2lkIGt2bV9zMzkwX3BhdGNoX2d1ZXN0X3Blcl9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0xNDcte1xuLS1cbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYz0xNzQ9c3RhdGljIGludCBfX2ltcG9ydF93cF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjAyLVxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjIwMzppbnQga3ZtX3MzOTBfaW1wb3J0X2JwX2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTIwNC1cdFx0XHQgICAgc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnKVxuLS1cbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0yNzctXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM6Mjc4OnZvaWQga3ZtX3MzOTBfY2xlYXJfYnBfZGF0YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjc5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM9MzM0PXN0YXRpYyBzdHJ1Y3Qga3ZtX2h3X3dwX2luZm9fYXJjaCAqYW55X3dwX2NoYW5nZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0zNjYtXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM6MzY3OnZvaWQga3ZtX3MzOTBfcHJlcGFyZV9kZWJ1Z19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0zNjgte1xuLS1cbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYz00MzI9c3RhdGljIGludCBwZXJfZmV0Y2hlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyAqYWRkcilcbi0tXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtNDkyLVxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjQ5MzppbnQga3ZtX3MzOTBfaGFuZGxlX3Blcl9pZmV0Y2hfaWNwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtNDk0LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM9NTMzPXN0YXRpYyBpbnQgZmlsdGVyX2d1ZXN0X3Blcl9ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTU4MS1cbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYzo1ODI6aW50IGt2bV9zMzkwX2hhbmRsZV9wZXJfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTU4My17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYz0zOTU9c3RhdGljIGludCBoYW5kbGVfcGFydGlhbF9leGVjdXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNDExLSAqL1xuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYzo0MTI6aW50IGhhbmRsZV9zdGh5aShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTQxMy17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYz02MDA9c3RhdGljIGJvb2wgc2hvdWxkX2hhbmRsZV9wZXJfaWZldGNoKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHJjKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNjEyLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYzo2MTM6aW50IGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTYxNC17XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU0MwoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEtWTS9zMzkwIENQVSBQViBDcmVhdGlvbiBhbmQgRGVzdHJ1Y3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIG91dHB1dCBhcHBlYXJzIHRydW5jYXRlZCwgYnV0IEkgY2FuIGFscmVhZHkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9ucyBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAgYW5kIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAgYXJlIGJvdGggbG9jYXRlZCBpbiBgYXJjaC9zMzkwL2t2bS9wdi5jYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRpdmUgaW50byB0aGF0IGZpbGUsIGBhcmNoL3MzOTAva3ZtL3B2LmNgLCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBmdW5jdGlvbnMuIEkmIzM5O2xsIGFsc28gd2FudCB0byB0YWtlIGEgbG9vayBhdCBgYXJjaC9zMzkwL2t2bS9wcml2LmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgcmVsYXRlZCBjb2RlIHRoZXJlLiBNaWdodCBhcyB3ZWxsIGJyb2FkZW4gdGhlIHNlYXJjaCBhIGxpdHRsZSBhdCB0aGlzIGVhcmx5IHN0YWdlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgcGFyYXZpcnR1YWxpemF0aW9uIGFzcGVjdHMgaW50ZXJhY3Qgd2l0aCB0aGUgQ1BVIG1hbmFnZW1lbnQgd2l0aGluIEtWTSBvbiBzMzkwLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIFBWIHNldHVwIGFuZCB0ZWFyZG93biBhcmUgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGxvbmd8Ym9vbCkgW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3B2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wdi5jLTI2LVxuYXJjaC9zMzkwL2t2bS9wdi5jOjI3OmJvb2wga3ZtX3MzOTBfcHZfaXNfcHJvdGVjdGVkKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0vcHYuYy0yOC17XG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jPTMyPUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9zMzkwX3B2X2lzX3Byb3RlY3RlZCk7XG5hcmNoL3MzOTAva3ZtL3B2LmMtMzMtXG5hcmNoL3MzOTAva3ZtL3B2LmM6MzQ6Ym9vbCBrdm1fczM5MF9wdl9jcHVfaXNfcHJvdGVjdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vcHYuYy0zNS17XG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jPTEwND1zdGF0aWMgdm9pZCBfa3ZtX3MzOTBfcHZfbWFrZV9zZWN1cmUoc3RydWN0IGd1ZXN0X2ZhdWx0ICpmKVxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYy0xNDYtICovXG5hcmNoL3MzOTAva3ZtL3B2LmM6MTQ3OmludCBrdm1fczM5MF9wdl9tYWtlX3NlY3VyZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ2FkZHIsIHZvaWQgKnV2Y2IpXG5hcmNoL3MzOTAva3ZtL3B2LmMtMTQ4LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmMtMTc4LVxuYXJjaC9zMzkwL2t2bS9wdi5jOjE3OTppbnQga3ZtX3MzOTBfcHZfY29udmVydF90b19zZWN1cmUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGdhZGRyKVxuYXJjaC9zMzkwL2t2bS9wdi5jLTE4MC17XG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTIwMS0gKi9cbmFyY2gvczM5MC9rdm0vcHYuYzoyMDI6aW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ2FkZHIpXG5hcmNoL3MzOTAva3ZtL3B2LmMtMjAzLXtcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmM9MjQ3PXN0YXRpYyB2b2lkIGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcmVlX3N0b3JfYmFzZSlcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmMtMjY0LVxuYXJjaC9zMzkwL2t2bS9wdi5jOjI2NTppbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbmFyY2gvczM5MC9rdm0vcHYuYy0yNjYte1xuLS1cbmFyY2gvczM5MC9rdm0vcHYuYy0yODMtXG5hcmNoL3MzOTAva3ZtL3B2LmM6Mjg0OmludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG5hcmNoL3MzOTAva3ZtL3B2LmMtMjg1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmM9NDQ5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19kZXN0cm95X2Zhc3RfYXZhaWxhYmxlKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTQ3MS0gKi9cbmFyY2gvczM5MC9rdm0vcHYuYzo0NzI6aW50IGt2bV9zMzkwX3B2X3NldF9hc2lkZShzdHJ1Y3Qga3ZtICprdm0sIHUxNiAqcmMsIHUxNiAqcnJjKVxuYXJjaC9zMzkwL2t2bS9wdi5jLTQ3My17XG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTUzNi0gKi9cbmFyY2gvczM5MC9rdm0vcHYuYzo1Mzc6aW50IGt2bV9zMzkwX3B2X2RlaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHUxNiAqcmMsIHUxNiAqcnJjKVxuYXJjaC9zMzkwL2t2bS9wdi5jLTUzOC17XG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTU3MS0gKi9cbmFyY2gvczM5MC9rdm0vcHYuYzo1NzI6aW50IGt2bV9zMzkwX3B2X2RlaW5pdF9jbGVhbnVwX2FsbChzdHJ1Y3Qga3ZtICprdm0sIHUxNiAqcmMsIHUxNiAqcnJjKVxuYXJjaC9zMzkwL2t2bS9wdi5jLTU3My17XG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTY0OC0gKi9cbmFyY2gvczM5MC9rdm0vcHYuYzo2NDk6aW50IGt2bV9zMzkwX3B2X2RlaW5pdF9hc2lkZV92bShzdHJ1Y3Qga3ZtICprdm0sIHUxNiAqcmMsIHUxNiAqcnJjKVxuYXJjaC9zMzkwL2t2bS9wdi5jLTY1MC17XG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jPTcwNT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9vcHMga3ZtX3MzOTBfcHZfbW11X25vdGlmaWVyX29wcyA9IHtcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmMtNzA4LVxuYXJjaC9zMzkwL2t2bS9wdi5jOjcwOTppbnQga3ZtX3MzOTBfcHZfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHUxNiAqcmMsIHUxNiAqcnJjKVxuYXJjaC9zMzkwL2t2bS9wdi5jLTcxMC17XG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTc3MS1cbmFyY2gvczM5MC9rdm0vcHYuYzo3NzI6aW50IGt2bV9zMzkwX3B2X3NldF9zZWNfcGFybXMoc3RydWN0IGt2bSAqa3ZtLCB2b2lkICpoZHIsIHU2NCBsZW5ndGgsIHUxNiAqcmMsXG5hcmNoL3MzOTAva3ZtL3B2LmMtNzczLVx0XHRcdCAgICAgIHUxNiAqcnJjKVxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYz03OTE9c3RhdGljIGludCB1bnBhY2tfb25lKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgdHdlYWssXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTgxOC1cbmFyY2gvczM5MC9rdm0vcHYuYzo4MTk6aW50IGt2bV9zMzkwX3B2X3VucGFjayhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLFxuYXJjaC9zMzkwL2t2bS9wdi5jLTgyMC1cdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgdHdlYWssIHUxNiAqcmMsIHUxNiAqcnJjKVxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYy04NTAtXG5hcmNoL3MzOTAva3ZtL3B2LmM6ODUxOmludCBrdm1fczM5MF9wdl9zZXRfY3B1X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggc3RhdGUpXG5hcmNoL3MzOTAva3ZtL3B2LmMtODUyLXtcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmMtODY4LVxuYXJjaC9zMzkwL2t2bS9wdi5jOjg2OTppbnQga3ZtX3MzOTBfcHZfZHVtcF9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpidWZmLCB1MTYgKnJjLCB1MTYgKnJyYylcbmFyY2gvczM5MC9rdm0vcHYuYy04NzAte1xuLS1cbmFyY2gvczM5MC9rdm0vcHYuYy05MTUtICovXG5hcmNoL3MzOTAva3ZtL3B2LmM6OTE2OmludCBrdm1fczM5MF9wdl9kdW1wX3N0b3Jfc3RhdGUoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYnVmZl91c2VyLFxuYXJjaC9zMzkwL2t2bS9wdi5jLTkxNy1cdFx0XHRcdHU2NCAqZ2FkZHIsIHU2NCBidWZmX3VzZXJfbGVuLCB1MTYgKnJjLCB1MTYgKnJyYylcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmMtMTAyMy0gKi9cbmFyY2gvczM5MC9rdm0vcHYuYzoxMDI0OmludCBrdm1fczM5MF9wdl9kdW1wX2NvbXBsZXRlKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmJ1ZmZfdXNlcixcbmFyY2gvczM5MC9rdm0vcHYuYy0xMDI1LVx0XHRcdCAgICAgIHUxNiAqcmMsIHUxNiAqcnJjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTQxCgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gczM5MCBLVk0gSW50ZXJydXB0IEhhbmRsaW5nKioKClJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgYXJjaC9zMzkwL2t2bS9wcml2LmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGludGVycnVwdCBoYW5kbGluZyByb3V0aW5lcyB3aXRoaW4gdGhhdCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgYGhhbmRsZV9ycmJlYCBhbmQgYGhhbmRsZV9lc3NhYC4gR2l2ZW4gdGhlIGNvbnRleHQsIEkmIzM5O20gbGlrZWx5IGRlYWxpbmcgd2l0aCBlcnJvciBldmVudHMsIGFuZCB0aGVzZSBwcm9iYWJseSByZWxhdGUgdG8gc3BlY2lmaWMgaGFyZHdhcmUgZXhjZXB0aW9ucyBvciBwcm9jZXNzb3IgY29uZGl0aW9ucyB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIHJ1bm5pbmcgaW4gYSBLVk0gZW52aXJvbm1lbnQuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIHdoZXJlIEtWTSBpbnRlcmNlcHRzIGFuZCBwb3RlbnRpYWxseSBlbXVsYXRlcyBvciBoYW5kbGVzIHRoZXNlIGV2ZW50cyBmb3IgdGhlIGd1ZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBoYW5kbGVycy4gQXJlIHRoZXkgaW52b2x2ZWQgaW4gdGhlIFJSQkUgaGFuZGxpbmcgaW4gdGhlIG5ldyBoYXJkd2FyZSwgb3IgYW4gb2xkZXIgbWVjaGFuaXNtPyBXaGF0IGFib3V0IEVTQSBoYW5kbGluZz8gQXJlIHRoZXNlIHBlcmZvcm1hbmNlIGNyaXRpY2FsPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBldmVudHMgYXQgdGhlIGhhcmR3YXJlIGxldmVsIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHJlcHJlc2VudGF0aW9ucyB3aXRoaW4gS1ZNIGFuZCB0aGVuIHJldmlldyB0aGUgS1ZNIHNwZWNpZmljIGhhbmRsaW5nLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCBob3cgS1ZNIGlzIG1hbmFnaW5nIHRoZXNlIHNwZWNpZmljIGV4Y2VwdGlvbiBhbmQgc3RhdHVzIGV2ZW50cyBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZHxsb25nfGJvb2wpIFthLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmM9MzM9c3RhdGljIGludCBoYW5kbGVfcmkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTQ1LVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NDY6aW50IGt2bV9zMzkwX2hhbmRsZV9hYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy00Ny17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NTQ9c3RhdGljIGludCBoYW5kbGVfZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTczLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NzQ6aW50IGt2bV9zMzkwX2hhbmRsZV9lMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy03NS17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTkxPXN0YXRpYyBpbnQgaGFuZGxlX3N0b3JlX2NwdV9hZGRyZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0yMTYtXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoyMTc6aW50IGt2bV9zMzkwX3NrZXlfY2hlY2tfZW5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTIxOC17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NTQxPXN0YXRpYyBpbnQgaGFuZGxlX2lvX2luc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTU3MC0jaWYgSVNfRU5BQkxFRChDT05GSUdfVkZJT19BUClcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjU3MTpib29sIGt2bV9zMzkwX2lzX2dwYV9pbl9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhKVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNTcyLXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz02NzA9c3RhdGljIGludCBoYW5kbGVfc3RmbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNjk4LVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6Njk5OmludCBpc192YWxpZF9wc3cocHN3X3QgKnBzdylcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTcwMC17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNzE1LVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NzE2OmludCBrdm1fczM5MF9oYW5kbGVfbHBzdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy03MTcte1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTg2Nz1zdGF0aWMgaW50IGhhbmRsZV9zdHNpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05NTgtXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzo5NTk6aW50IGt2bV9zMzkwX2hhbmRsZV9iMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05NjAte1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTEyMTc9c3RhdGljIGludCBoYW5kbGVfZXNzYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI4My1cbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEyODQ6aW50IGt2bV9zMzkwX2hhbmRsZV9iOShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjg1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMzAxLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTMwMjppbnQga3ZtX3MzOTBfaGFuZGxlX2xjdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTMwMy17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTM0MC1cbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEzNDE6aW50IGt2bV9zMzkwX2hhbmRsZV9zdGN0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMzQyLXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz0xNDEzPXN0YXRpYyBpbnQgaGFuZGxlX3N0Y3RnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xNDQ2LVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTQ0NzppbnQga3ZtX3MzOTBfaGFuZGxlX2ViKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTE0NDgte1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTE0NjU9c3RhdGljIGludCBoYW5kbGVfdHByb3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTE1MjMtXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxNTI0OmludCBrdm1fczM5MF9oYW5kbGVfZTUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTUyNS17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTU1Mz1zdGF0aWMgaW50IGhhbmRsZV9wdGZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xNTYxLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTU2MjppbnQga3ZtX3MzOTBfaGFuZGxlXzAxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTE1NjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzg5CgkJCQkJCQlvdXRwdXQ6IDYwCgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTdGF0aWMgdnMuIE5vbi1TdGF0aWMgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnM6IGBoYW5kbGVfcnJiZWAgYW5kIGBoYW5kbGVfZXNzYWAuIEhtbSwgdGhleSYjMzk7cmUgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgbWFrZXMgbWUgdGhpbmsgYWJvdXQgc2NvcGUgYW5kIHBvdGVudGlhbCBmb3IgaW5saW5pbmcsIGRlcGVuZGluZyBvbiB0aGUgY29tcGlsZXImIzM5O3Mgb3B0aW1pemF0aW9uIHN0cmF0ZWd5LiBOb3csIGhvbGQgb24uLi4gYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGFuZCBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgLCB0aG9zZSBhcmVuJiMzOTt0IHN0YXRpYy4gQWxyaWdodC4gQW5kIHRoZSBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgIGZ1bmN0aW9uLCBhbHNvIG5vbi1zdGF0aWMuIFRoZW4gdGhlcmUgYXJlIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgYW5kIGBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25gLCBhbHNvIG5vbi1zdGF0aWMuCgpHaXZlbiB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmVuJiMzOTt0IHN0YXRpYywgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIHRoZXkmIzM5O3JlIGJlaW5nIGNhbGxlZCBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIHRob3NlIGxhc3QgdHdvIGZ1bmN0aW9ucywgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCBhbmQgYGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbmAsIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHZvaWR8bG9uZ3xib29sKSBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTYyPXN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTMtLyogU2VjdGlvbjogZGV2aWNlIHJlbGF0ZWQgKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1OTQ6bG9uZyBrdm1fYXJjaF9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTk1LVx0XHRcdHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTYwMS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo2MDI6aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy02MDMte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy03MzEtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NzMyOnZvaWQga3ZtX2FyY2hfc3luY19kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTczMy17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTc0MT1zdGF0aWMgdm9pZCBzY2FfZGVsX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNzQ1LSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjc0NjppbnQga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTc0Ny1cdFx0XHQgICAgICAgc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9Nzc4PXN0YXRpYyB2b2lkIGljcHRfb3BlcmV4Y19vbl9hbGxfdmNwdXMoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy03ODctXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Nzg4OmludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTc4OS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEwODc9c3RhdGljIHZvaWQga3ZtX3MzOTBfdmNwdV9jcnlwdG9fc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMDg4LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEwODk6dm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19yZXNldF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEwOTAte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMTc1PXN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfcGNpX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE4NC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTg1OnZvaWQga3ZtX3MzOTBfdmNwdV9wY2lfZW5hYmxlX2ludGVycChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE4Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIzNDg9c3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjQwNS0gKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyNDA2OmludCBrdm1fczM5MF9jcHVzX2Zyb21fcHYoc3RydWN0IGt2bSAqa3ZtLCB1MTYgKnJjLCB1MTYgKnJyYylcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNDA3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkwMT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX21lbV9vcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9tZW1fb3AgKm1vcClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkyNS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTI2OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTI3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzEyNj1zdGF0aWMgdm9pZCBrdm1fczM5MF9zZXRfY3J5Y2JfZm9ybWF0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE1Ny0gKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTU4OnZvaWQga3ZtX2FyY2hfY3J5cHRvX3NldF9tYXNrcyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKmFwbSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTU5LVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nICphcW0sIHVuc2lnbmVkIGxvbmcgKmFkbSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzE5ND1FWFBPUlRfU1lNQk9MX0dQTChrdm1fYXJjaF9jcnlwdG9fc2V0X21hc2tzKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzIwNy0gKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjA4OnZvaWQga3ZtX2FyY2hfY3J5cHRvX2NsZWFyX21hc2tzKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjA5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzI1MT1zdGF0aWMgdm9pZCBzY2FfZGlzcG9zZShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyNTYtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzI1Nzp2b2lkIGt2bV9hcmNoX2ZyZWVfdm0oc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyNTgte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjY0LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyNjU6aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzI2Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM0MDMtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzQwNDp2b2lkIGt2bV9hcmNoX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQwNS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM0MzAtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzQzMTp2b2lkIGt2bV9hcmNoX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM0MzIte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNTQxPXN0YXRpYyB2b2lkIGRpc2FibGVfY3B1X3RpbWVyX2FjY291bnRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNTQ4LS8qIHNldCB0aGUgY3B1IHRpbWVyIC0gbWF5IG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIFZDUFUgdGhyZWFkIGl0c2VsZiAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM1NDk6dm9pZCBrdm1fczM5MF9zZXRfY3B1X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgX191NjQgY3B1dG0pXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzU1MC17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM1NjE9X191NjQga3ZtX3MzOTBfZ2V0X2NwdV90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM1ODUtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzU4Njp2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzU4Ny17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM1OTQtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzU5NTp2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNTk2LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzYwMy1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozNjA0OnZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjA1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzY1MD1zdGF0aWMgdm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2ODAtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzY4MTp2b2lkIGt2bV9zMzkwX3ZjcHVfdW5zZXR1cF9jbW1hKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjgyLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzY4Ny1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozNjg4OmludCBrdm1fczM5MF92Y3B1X3NldHVwX2NtbWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2ODkte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNzA4PXN0YXRpYyBpbnQga3ZtX3MzOTBfdmNwdV9zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM3OTQtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzc5NTppbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzc5Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM4MDI9REVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODAzLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM4MDQ6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODA1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg4Mi1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozODgzOmludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODg0LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg4OC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozODg5OmJvb2wga3ZtX2FyY2hfdmNwdV9pbl9rZXJuZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM4OTAte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODkzLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM4OTQ6dm9pZCBrdm1fczM5MF92Y3B1X2Jsb2NrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODk1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg5OS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozOTAwOnZvaWQga3ZtX3MzOTBfdmNwdV91bmJsb2NrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTAxLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzkwNT1zdGF0aWMgdm9pZCBrdm1fczM5MF92Y3B1X3JlcXVlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTEwLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM5MTE6Ym9vbCBrdm1fczM5MF92Y3B1X3NpZV9pbmhpYml0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM5MTIte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zOTE3PXN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfcmVxdWVzdF9oYW5kbGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzkyNS0gKiByZXR1cm4gaW1tZWRpYXRlbHkuICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzkyNjp2b2lkIGV4aXRfc2llKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTI3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzkzNC0vKiBLaWNrIGEgZ3Vlc3QgY3B1IG91dCBvZiBTSUUgdG8gcHJvY2VzcyBhIHJlcXVlc3Qgc3luY2hyb25vdXNseSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM5MzU6dm9pZCBrdm1fczM5MF9zeW5jX3JlcXVlc3QoaW50IHJlcSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM5MzYte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTQwLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM5NDE6Ym9vbCBrdm1fYXJjaF9ub19wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTQyLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzk1MS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozOTUyOmludCBrdm1fYXJjaF92Y3B1X3Nob3VsZF9raWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTUzLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDExNz1zdGF0aWMgdm9pZCBrdm1fYXJjaF92Y3B1X2lvY3RsX2NsZWFyX3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDEzMi1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTMzOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9yZWdzICpyZWdzKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxMzQte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTQwLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQxNDE6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3JlZ3MgKnJlZ3MpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDE0Mi17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNDgtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDE0OTppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNTAtXHRcdFx0XHQgIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTYwLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQxNjE6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTYyLVx0XHRcdFx0ICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDE3Mi1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTczOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNzQte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTg3LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQxODg6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X2ZwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZnB1ICpmcHUpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDE4OS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQyMDM9c3RhdGljIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9pbml0aWFsX3BzdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBzd190IHBzdylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDIxNS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MjE2OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3RyYW5zbGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDIxNy1cdFx0XHRcdCAgc3RydWN0IGt2bV90cmFuc2xhdGlvbiAqdHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyMjUtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDIyNjppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyMjctXHRcdFx0XHRcdHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDI2Ny1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MjY4OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9tcHN0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MjY5LVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fbXBfc3RhdGUgKm1wX3N0YXRlKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MjgyLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQyODM6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X21wc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyODQtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9tcF9zdGF0ZSAqbXBfc3RhdGUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ0MzY9c3RhdGljIHZvaWQgX19rdm1fczM5MF9zZXRfdG9kX2Nsb2NrKHN0cnVjdCBrdm0gKmt2bSwgY29uc3Qgc3RydWN0IGt2bV9zMzkwX3ZtX3RvZF9jbG9jayAqZ3RvZClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ2My1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NDY0OmludCBrdm1fczM5MF90cnlfc2V0X3RvZF9jbG9jayhzdHJ1Y3Qga3ZtICprdm0sIGNvbnN0IHN0cnVjdCBrdm1fczM5MF92bV90b2RfY2xvY2sgKmd0b2QpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ2NS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ0NzM9c3RhdGljIHZvaWQgX19rdm1faW5qZWN0X3BmYXVsdF90b2tlbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgc3RhcnRfdG9rZW4sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ0OTgtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDQ5OTpib29sIGt2bV9hcmNoX2FzeW5jX3BhZ2Vfbm90X3ByZXNlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1MDAtXHRcdFx0XHQgICAgIHN0cnVjdCBrdm1fYXN5bmNfcGYgKndvcmspXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1MDctXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDUwODp2b2lkIGt2bV9hcmNoX2FzeW5jX3BhZ2VfcHJlc2VudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDUwOS1cdFx0XHRcdCBzdHJ1Y3Qga3ZtX2FzeW5jX3BmICp3b3JrKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTE0LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1MTU6dm9pZCBrdm1fYXJjaF9hc3luY19wYWdlX3JlYWR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTE2LVx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX2FzeW5jX3BmICp3b3JrKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTIwLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1MjE6Ym9vbCBrdm1fYXJjaF9jYW5fZGVxdWV1ZV9hc3luY19wYWdlX3ByZXNlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1MjIte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTI5LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1MzA6Ym9vbCBrdm1fYXJjaF9zZXR1cF9hc3luY19wZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDUzMS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTUwMDQ9c3RhdGljIHZvaWQgc3RvcmVfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUwMjQtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTAyNTppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUwMjYte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MTE0LSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjUxMTU6aW50IGt2bV9zMzkwX3N0b3JlX3N0YXR1c191bmxvYWRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3BhKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUxMTYte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MTY2LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjUxNjc6aW50IGt2bV9zMzkwX3ZjcHVfc3RvcmVfc3RhdHVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUxNjgte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01MTk2PXN0YXRpYyB2b2lkIF9fZW5hYmxlX2lic19vbl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTIwMy1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1MjA0OmludCBrdm1fczM5MF92Y3B1X3N0YXJ0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MjA1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTI1OC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1MjU5OmludCBrdm1fczM5MF92Y3B1X3N0b3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUyNjAte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NDE0PXN0YXRpYyBsb25nIGt2bV9zMzkwX3ZjcHVfbWVtc2lkYV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU0MzgtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTQzOTpsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDQwLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTQ4ND1zdGF0aWMgaW50IGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTI1LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU1MjY6bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1MjctXHRcdFx0IHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU3NDU9dm1fZmF1bHRfdCBrdm1fYXJjaF92Y3B1X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3NTctXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTc1ODpib29sIGt2bV9hcmNoX2lycWNoaXBfaW5fa2VybmVsKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzU5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTc2ND1zdGF0aWMgbG9uZyBjbW1hX2RfY291bnRfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3NzYtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTc3NzppbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01Nzc4LVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODY1LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU4NjY6dm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODY3LVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LCBlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODkwLSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU4OTE6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4OTIte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTIyLSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU5MjM6Ym9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU5MjQte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTM2LSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU5Mzc6Ym9vbCBrdm1fYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTM4LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTk1NC0gKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1OTU1OmJvb2wga3ZtX3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTU2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE1MjMKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAxNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIEtWTSBBcmNoaXRlY3R1cmUgTm9uLVN0YXRpYyBGdW5jdGlvbnMqKgoKUmlnaHQsIGxldCBtZSBzZWUuLi4gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIEtWTS1yZWxhdGVkIGZ1bmN0aW9ucy4gSXQgc2VlbXMgSSYjMzk7dmUgaWRlbnRpZmllZCBzZXZlcmFsIHRoYXQgYXJlIG5vbi1zdGF0aWM6IGBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25gLCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGFuZCBga3ZtX2FyY2hfdm1faW9jdGxgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBzbyB0aGVzZSBhcmUgYWNjZXNzaWJsZSBvdXRzaWRlIG9mIHRoZWlyIHJlc3BlY3RpdmUgY29tcGlsYXRpb24gdW5pdHMsIHdoaWNoIGltcGxpZXMgYSBwb3RlbnRpYWwgZm9yIGV4dGVybmFsIG1vZGlmaWNhdGlvbiBvciB1c2UuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBwYXJ0aWN1bGFybHkgaW4gYSBjb250ZXh0IGFzIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGFzIEtWTS4KCk5vdywgY29uc2lkZXJpbmcgdGhlIGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgSSYjMzk7bGwgc2hpZnQgZ2VhcnMuIEkgcmVtZW1iZXIgdGhvc2UgU0NBcyBhbmQgZXh0ZXJuYWwgY2FsbHMgcmVsYXRlZCB0byBpbnRlcnJ1cHRzLCBzbyBJIG5lZWQgdG8gY2hlY2sgYGFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBkZWZpbml0aW9ucyBvZiBgc2NhX2V4dF9jYWxsX3BlbmRpbmdgLCBgc2NhX2luamVjdF9leHRfY2FsbGAsIGFuZCBgc2NhX2NsZWFyX2V4dF9jYWxsYCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtaWdodCBpbnRlcmFjdCB3aXRoIHRob3NlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBpZiB0aGV5IGludHJvZHVjZSBhbnl0aGluZyB1bmV4cGVjdGVkLiBUaGlzIGlzIGFib3V0IG1ha2luZyBzdXJlIG5vdGhpbmcgdW50b3dhcmQgaGFwcGVucyB3aXRoIGV4dGVybmFsIGNhbGxzLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGludGVycnVwdCBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGxvbmd8Ym9vbCkgW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9OTA9c3RhdGljIHZvaWQgc2NhX2NsZWFyX2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTEwNC1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTA1OmludCBwc3dfZXh0aW50X2Rpc2FibGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTA2LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTExMjM9c3RhdGljIGludCBfX211c3RfY2hlY2sgX19kZWxpdmVyX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTExOTMtLyogQ2hlY2sgd2hldGhlciBhbiBleHRlcm5hbCBjYWxsIGlzIHBlbmRpbmcgKGRlbGl2ZXJhYmxlIG9yIG5vdCkgKi9cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTE5NDppbnQga3ZtX3MzOTBfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTExOTUte1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTIwMy1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTIwNDppbnQga3ZtX3MzOTBfdmNwdV9oYXNfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGV4Y2x1ZGVfc3RvcClcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTIwNS17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMjIyLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxMjIzOmludCBrdm1fY3B1X2hhc19wZW5kaW5nX3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTIyNC17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xMjI4PXN0YXRpYyB1NjQgX19jYWxjdWxhdGVfc2x0aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTEyNTktXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjEyNjA6aW50IGt2bV9zMzkwX2hhbmRsZV93YWl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTI2MS17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMzA2LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxMzA3OnZvaWQga3ZtX3MzOTBfdmNwdV93YWtldXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMzA4LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTEzMTk9ZW51bSBocnRpbWVyX3Jlc3RhcnQga3ZtX3MzOTBfaWRsZV93YWtldXAoc3RydWN0IGhydGltZXIgKnRpbWVyKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTMzNi1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTMzNzp2b2lkIGt2bV9zMzkwX2NsZWFyX2xvY2FsX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMzM4LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE5NTg9c3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE5ODgtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE5ODk6aW50IGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE5OTAtXHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDMxLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMDMyOmludCBrdm1fczM5MF9yZWluamVjdF9pb19pbnQoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDMzLVx0XHRcdCAgICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwMzctXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwMzg6aW50IHMzOTBpbnRfdG9fczM5MGlycShzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDM5LVx0XHQgICAgICAgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4MC1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA4MTppbnQga3ZtX3MzOTBfaXNfc3RvcF9pcnFfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwODIte1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4Ny1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA4ODppbnQga3ZtX3MzOTBfaXNfcmVzdGFydF9pcnFfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwODkte1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA5NC1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA5NTp2b2lkIGt2bV9zMzkwX2NsZWFyX3N0b3BfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA5Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMTA1PXN0YXRpYyBpbnQgZG9faW5qZWN0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTQ5LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMTUwOmludCBrdm1fczM5MF9pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjE1MS17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMTczPXN0YXRpYyB2b2lkIGludGlfdG9faXJxKHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxODgtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxODk6dm9pZCBrdm1fczM5MF9jbGVhcl9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjE5MC17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNDI2PXN0YXRpYyBpbnQgcmVnaXN0ZXJfaW9fYWRhcHRlcihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjQ3Mi1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjQ3MzppbnQga3ZtX3MzOTBfbWFza19hZGFwdGVyKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBib29sIG1hc2tlZClcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjQ3NC17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNTUyPXN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI1ODktXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI1OTA6dm9pZCBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnMoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNTkxLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MTktXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI2MjA6dm9pZCBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjYyMS17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMDUzPXN0YXRpYyBpbnQgc2V0X2FkYXB0ZXJfaW50KHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzA3OS0gKi9cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzA4MDp2b2lkIGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMDgxLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWNja192b2xhdGlsZV9pbmZvICptY2NrX2luZm8pXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTIwLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMTIxOmludCBrdm1fc2V0X3JvdXRpbmdfZW50cnkoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTIyLVx0XHRcdCAgc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTYyLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMTYzOmludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTY0LVx0XHRpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzE2OC1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzE2OTppbnQga3ZtX3MzOTBfc2V0X2lycV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgX191c2VyICppcnFzdGF0ZSwgaW50IGxlbilcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzE3MC17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMjA5PXN0YXRpYyB2b2lkIHN0b3JlX2xvY2FsX2lycShzdHJ1Y3Qga3ZtX3MzOTBfbG9jYWxfaW50ZXJydXB0ICpsaSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMyNTAtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMyNTE6aW50IGt2bV9zMzkwX2dldF9pcnFfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBfX3U4IF9fdXNlciAqYnVmLCBpbnQgbGVuKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMjUyLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTMzNTE9c3RhdGljIHZvaWQgcHJvY2Vzc19naWJfYWxlcnRfbGlzdCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzM5NS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzM5Njp2b2lkIGt2bV9zMzkwX2dpc2FfY2xlYXIoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMzk3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM0MDUtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM0MDY6dm9pZCBrdm1fczM5MF9naXNhX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNDA3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM0MjEtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM0MjI6dm9pZCBrdm1fczM5MF9naXNhX2VuYWJsZShzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM0MjMte1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzQ0NC1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzQ0NTp2b2lkIGt2bV9zMzkwX2dpc2FfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM0NDYte1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzQ2Mi1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzQ2Mzp2b2lkIGt2bV9zMzkwX2dpc2FfZGlzYWJsZShzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM0NjQte1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzQ5Ny0gKi9cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzQ5ODppbnQga3ZtX3MzOTBfZ2lzY19yZWdpc3RlcihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBnaXNjKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNDk5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTM1MTc9RVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3MzOTBfZ2lzY19yZWdpc3Rlcik7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNTM2LSAqL1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNTM3OmludCBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXIoc3RydWN0IGt2bSAqa3ZtLCB1MzIgZ2lzYylcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzUzOC17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zNjQ2PXN0YXRpYyBzdHJ1Y3QgYWlycV9zdHJ1Y3QgZ2liX2FsZXJ0X2lycSA9IHtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM2NDktXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM2NTA6dm9pZCBrdm1fczM5MF9naWJfZGVzdHJveSh2b2lkKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNjUxLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTM2NjU9aW50IF9faW5pdCBrdm1fczM5MF9naWJfaW5pdCh1OCBuaXNjKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzcyMi0gKi9cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzcyMzppbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzcyNC1cdFx0XHQgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjU2CgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipGb2N1c2luZyBvbiBFeHRlcm5hbCBDYWxsIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gaG93IHRoZXNlIGV4dGVybmFsIGNhbGxzIGFyZSBoYW5kbGVkLiBJIG5lZWQgdG8ga2VlcCB0aGUgY29kZSBlZmZpY2llbnQgYW5kIHN0cmVhbWxpbmVkLiBJJiMzOTttIG5vdGluZyB0aGF0IGBzY2FfZXh0X2NhbGxfcGVuZGluZ2AsIGBzY2FfaW5qZWN0X2V4dF9jYWxsYCwgYW5kIGBzY2FfY2xlYXJfZXh0X2NhbGxgIGFyZSBzdGF0aWMsIHdoaWNoIHNpbXBsaWZpZXMgdGhlaXIgaW5jbHVzaW9uIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gQ29uc2lkZXJpbmcgdGhlaXIgc3RhdGljIG5hdHVyZSwgSSB3b24mIzM5O3QgbmVlZCB0byBjb25zaWRlciB0aGVtLiBJJiMzOTttIGdvaW5nIHRvIHNraXAgdGhlbSBmcm9tIGFueSBmdXJ0aGVyIGFuYWx5c2lzIGluIHRoaXMgY2FzZSwgYXMgdGhleSBkb24mIzM5O3Qgc2VlbSBkaXJlY3RseSByZWxldmFudCB0byB3aGF0IEkmIzM5O20gY3VycmVudGx5IGludmVzdGlnYXRpbmcuIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHdvcmsgd2l0aCB0aGUgbWVtb3J5LgoKUmlnaHQgbm93LCBJIGFtIGdvaW5nIHRvIGNoZWNrIGBhcmNoL3MzOTAva3ZtL2ZhdWx0aW4uY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGF0IHRoZSBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gIGZ1bmN0aW9uIGZvciBzb21lIGNsdWVzLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7bGwgb2ZmZXIgc29tZSBpbnNpZ2h0IGludG8gaG93IGZhdWx0cyBhcmUgaGFuZGxlZCwgd2hpY2ggcmVsYXRlcyBkaXJlY3RseSB0byB0aGUgZXh0ZXJuYWwgY2FsbCBtZWNoYW5pc21zIEkmIzM5O20gbG9va2luZyBpbnRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGxvbmd8Ym9vbCkgW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0xNC1cbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jOjE1OmJvb2wga3ZtX2FyY2hfc2V0dXBfYXN5bmNfcGYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTE2LVxuLS1cbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTMyLSAqL1xuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6MzM6aW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmYpXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0zNC17XG4tLVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTI4LVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6MTI5OmludCBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYXVsdCAqZiwgZ2ZuX3QgZ2ZuLCBib29sIHcpXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0xMzAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjMwOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNL3MzOTAgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBtYWtpbmcgc29tZSBkZWNpc2lvbnMgYWJvdXQgcG90ZW50aWFsIGFyZWFzIGZvciByZXZpZXcgb3IgcmVmYWN0b3JpbmcsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBzeW1ib2wgdmlzaWJpbGl0eS4gSSBub3RlZCB0aGF0IGBrdm1fczM5MF9mYXVsdGluX2dmbmAgaXMgKm5vdCogZGVjbGFyZWQgc3RhdGljLCB3aGljaCBpcyBhIGtleSBvYnNlcnZhdGlvbi4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSYjMzk7bSBnb2luZyB0byBzdW1tYXJpemUgdGhlIHJlbGV2YW50IHN5bWJvbHM6IGBrdm1fYXJjaF92bV9pb2N0bGAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25gLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAsIGFuZCBvZiBjb3Vyc2UgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCDigJMgdGhpcyBpcyBteSBwcmltYXJ5IGludGVyZXN0LgoKSSBpbml0aWFsbHkgdGhvdWdodCBga3ZtX2FyY2hfdm1faW9jdGxgIG1pZ2h0IGJlIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiwgYnV0IHF1aWNrbHkgcmVhbGl6ZWQgaXQmIzM5O3MgYWN0dWFsbHkgdGhlIFZNIGlvY3RsIGhhbmRsZXIuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgZW50cnkgcG9pbnQsIGJ1dCBub3QgaW4gdGhlIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhdGggbGlrZSBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBUaGF0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlciBmb3IgZnV0dXJlIG9wdGltaXphdGlvbiBjb25zaWRlcmF0aW9ucy4gSSB3YW50ZWQgdG8gdmVyaWZ5IGlmIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCBpcyByZWFjaGFibGUgdmlhIGBrdm1fYXJjaF92bV9pb2N0bGAgYmVjYXVzZSBJIHRob3VnaHQgdGhhdCBtaWdodCBoYXZlIGJlZW4gdGhlIGJldHRlciBvcHRpb24uIEkgY2FuIGNvbmZpcm0sIHZpYSB0aGUgYEtWTV9TRVRfREVWSUNFX0FUVFJgIGlvY3RsIGZvciBgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OYCwgdGhhdCBpdCBpcy4gQnV0LCBJIGxvb2tlZCBhdCBpdCBhbmQgaXQmIzM5O3Mgc3RhdGljLiBTbywgaXQgbG9va3MgbGlrZSBga3ZtX2FyY2hfdm1faW9jdGxgIGlzIHRoZSBjb3JyZWN0IHN5bWJvbC4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoZSBvdGhlciBzeW1ib2xzLiBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgIGlzIGFsc28gbm9uLXN0YXRpYy4gVGhlbiBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAgYW5kIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAgYXJlIG5vbi1zdGF0aWMgYXMgd2VsbC4gQWxzbywgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCBpcywgdG9vLCBub24tc3RhdGljLgoKQmVmb3JlIEkgbW92ZSBvbiwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHMzOTAgS2NvbmZpZyB0byBzZWUgaWYgYW55dGhpbmcgdGhlcmUgaW5mbHVlbmNlcyB0aGVzZSBjaG9pY2VzLiBUaGF0IG1pZ2h0IGdpdmUgbWUgc29tZSBjbHVlcyBhYm91dCB3aHkgdGhlc2Ugd2VyZSBkZXNpZ25lZCB0aGlzIHdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzQyMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDk0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgS1ZNIHBhdGNoLCBhbmQgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBzZWVtcyB0byBiZSBgS1ZNYCwgbmF0dXJhbGx5LiBIb3dldmVyLCBgS1ZNX1MzOTBfVUNPTlRST0xgIGlzIGFsc28gbWVudGlvbmVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKWAuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYEtWTV9TMzkwX1VDT05UUk9MYCBpcyBlc3NlbnRpYWwgaGVyZSwgc28gbGV0JiMzOTtzIGNoZWNrLgoKVGhlIGNvZGUgc25pcHBldHMgaW5jbHVkZSBjaGVja3MgbGlrZSBgaWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LSZndDtrdm0pKWAgd2hpY2ggZGlyZWN0bHkgdXNlcyBgS1ZNX1MzOTBfVUNPTlRST0xgLCBhbmQgYmFzZWQgb24gdGhhdCwgaXTigJlzIHJlbGV2YW50IHRvIHRoZSBvcGVyYXRpb24uIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGluY2x1ZGUgaXQgaW4gdGhlIGBFbmFibGVDb25maWdzYC4KCk5leHQsIEkmIzM5O2xsIHNjYW4gZm9yIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19LVk1gIGlzIGRlZmluaXRlbHkgYSBjb3JlIHJlcXVpcmVtZW50LgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhlICYjMzk7Zm9jdXMgc3ltYm9scyYjMzk7IOKAkyB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhpcyBwYXRjaC4gSSYjMzk7dmUgYWxyZWFkeSBpZGVudGlmaWVkIHNldmVyYWw6IGBrdm1fYXJjaF92bV9pb2N0bGAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25gLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAsIGFuZCBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gLiBCdXQgYXJlIHRoZXJlIGFueSBvdGhlcnM/CgpJIHNlZSBgaGFuZGxlX3JyYmVgIGFuZCBgaGFuZGxlX2Vzc2FgIGFyZSBzdGF0aWMsIGJ1dCB0aGV5IGFyZSBjYWxsZWQgZnJvbSBpbnN0cnVjdGlvbiBpbnRlcmNlcHQgaGFuZGxlcnMuIFRoZSBlbnRyeSBwb2ludCBmb3IgdGhhdCBzZWVtcyB0byBiZSBga3ZtX2hhbmRsZV9zaWVfaW50ZXJjZXB0YCwgd2hpY2ggaXMgYSBob3QgcGF0aC4gQW5kIGFsc28sIGBrdm1fczM5MF9rZXlvcGAgaXMgc3RhdGljLCBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfZGV2X2lvY3RsYCBvciBga3ZtX2FyY2hfdm1faW9jdGxgLiBBbHNvLCBga3ZtX3MzOTBfZ2V0X3NrZXlzYCwgYGt2bV9zMzkwX3NldF9za2V5c2AsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCBhcmUgc3RhdGljLCBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdm1faW9jdGxgLiBUaGVuIHRoZXJlIGFyZSBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgIHdoaWNoIGluY2x1ZGVzIGNoYW5nZXMgcmVsYXRlZCB0byBga3ZtX2lzX3Vjb250cm9sYCBhbmQgYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAgd2hpY2ggaW5jbHVkZXMgY2hhbmdlcyByZWxhdGVkIHRvIGB2Y3B1LSZndDthcmNoLmluaXRpYWxpemVkYC4KCk9rYXksIEkgbmVlZCB0byBhZGQgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCBhbmQgYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAgdG8gdGhlIGZvY3VzIHN5bWJvbHMuCgpTbywgaGVyZSYjMzk7cyBteSB1cGRhdGVkIGxpc3Q6IGBrdm1fYXJjaF92bV9pb2N0bGAsIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAsIGBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVgLCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uYCwgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgLCBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgLCBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgLCBhbmQgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYC4KCk5vdywgdGltZSB0byByZWZpbmUgdGhlIGxpc3QgdG8gYXZvaWQgZ2VuZXJpYyBzeW1ib2xzLiBga3ZtX2FyY2hfdm1faW9jdGxgIGlzIGZpbmU7IGl0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCBmb3IgVk0gaW9jdGxzLiBTYW1lIHdpdGggYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYW5kIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAuIEhvd2V2ZXIsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBhbmQgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCBhcmUgc3BlY2lmaWMgdG8gUFYgKFByb3RlY3RlZCBWaXJ0dWFsaXphdGlvbikuIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgaXMgREFULXNwZWNpZmljIChEeW5hbWljIEFkZHJlc3MgVHJhbnNsYXRpb24pLCBhbmQgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCBpcyBhYm91dCBwYWdlIGZhdWx0IGhhbmRsaW5nLgoKVGhpcyBsb29rcyBsaWtlIGEgc29saWQsIHNwZWNpZmljIGxpc3Qgb2YgZm9jdXMgc3ltYm9scy4KCk5vdywgZmluYWwgY2hlY2sg4oCTIGFyZSBgS1ZNYCBhbmQgYEtWTV9TMzkwX1VDT05UUk9MYCB0aGUgb25seSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcz8gSSBuZWVkIHRvIHRoaW5rIGlmIHRoZXJlIGFyZSBQVi1yZWxhdGVkIGNvbmZpZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk0NTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggUGVyc2lzdGVudCBWaXJ0dWFsIE1hY2hpbmVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyB0aGluZz8mIzM0OyBJIGtub3cgdGhlIGFyY2hpdGVjdHVyZSBpcyBzMzkwLCBzbyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludHMgYXJlIHRoZSBLY29uZmlnIGZpbGVzIHNwZWNpZmljIHRvIHRoZSBhcmNoaXRlY3R1cmUgYW5kIEtWTSBpbnRlZ3JhdGlvbiwgbmFtZWx5IGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIGFuZCBgYXJjaC9zMzkwL0tjb25maWdgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBQZXJzaXN0ZW50IFZNcyBleGlzdCBpbiB0aG9zZSBsb2NhdGlvbnMuIExldCYjMzk7cyBkaWcgaW4gYW5kIGNoZWNrLiBUaGF0IHNob3VsZCBiZSB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIC4qUFYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk2NTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBwcm90ZWN0ZWQgbWVtb3J5IHJlZ2lvbnMgYXJlIGNvbmZpZ3VyZWQgZm9yIHMzOTAgYXJjaGl0ZWN0dXJlIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZSBmb3IgdGhhdCBhcmNoaXRlY3R1cmUuIEl0JiMzOTtzIGFsbW9zdCBhbHdheXMgdGhlIGNlbnRyYWwgcmVwb3NpdG9yeSBmb3IgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYSBzeW1ib2wgcmVsYXRlZCB0byBwcm90ZWN0aW9uLCBtYXliZSBgUFJPVEVDVEVEYCBpdHNlbGYsIG9yIHNvbWV0aGluZyBzaW1pbGFyIOKAkyBpdCBjb3VsZCBiZSBgU0VDVVJFYCwgYEdVQVJERURgLCBgUkVTVFJJQ1RFRGAsIG9yIGFueXRoaW5nIG9mIHRoYXQgbmF0dXJlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZpbGUgdG8gY29udGFpbiB0aGUgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGdvdmVybiB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbGl0eSBnZXRzIGJ1aWx0IGludG8gdGhlIGtlcm5lbC4gRnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgYmFjayB3aGVyZSB0aGlzIGlzIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIC4qUFJPVEVDVEVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5ODgzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlBvdGVudGlhbCBNaXNpbnRlcnByZXRhdGlvbiBvZiBNZW1vcnkgUHJvdGVjdGlvbiBGbGFnKioKCkhtbSwgSSB3YXMganVzdCByZXZpZXdpbmcgdGhlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgbWVtb3J5IHByb3RlY3Rpb24gZmxhZ3MgZm9yIHRoYXQgbmV3IG1hcHBpbmcsIGFuZCBmb3IgYSBtb21lbnQgSSB0aG91Z2h0IEkgaGFkIHRoZSB3cm9uZyBmbGFnLiBJIHdhcyBjb25zaWRlcmluZyBgUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQ2AsIGJ1dCB0aGVuIEkgaGFkIHRoaXMgZmxpY2tlciBvZiBkb3VidC4gRGlkIEkgcGVyaGFwcyBtaXNyZWFkIHRoZSBkb2N1bWVudGF0aW9uLCBvciBtYXliZSBtaXNyZW1lbWJlciB0aGUgaW50ZW5kZWQgYWNjZXNzIHBlcm1pc3Npb25zPyBDb3VsZCBpdCBiZSB0aGF0IHdoYXQgSSAqcmVhbGx5KiBuZWVkIGhlcmUgaXMgYFBST1RfVklSVGA/IEl0JiMzOTtzIHRoZSBvbmUgSSBzaG91bGQgZG91YmxlLWNoZWNrIHNpbmNlIEkgZG8gbm90IHdhbnQgdG8gbWlzdGFrZW5seSBncmFudCB1bm5lY2Vzc2FyeSBwZXJtaXNzaW9ucyBmb3Igc2VjdXJpdHkgb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gSSBzaG91bGQgZ28gYmFjayBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9uIGFnYWluc3QgdGhlIGRvY3VtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIC4qUFJPVF9WSVJUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMTE2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHB2LmNgIG9uIHMzOTB4IEtWTSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBzMzkweCBLVk0mIzM5O3MgcGFyYXZpcnR1YWxpemF0aW9uIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gcG90ZW50aWFsIHBsYXRmb3JtLXNwZWNpZmljIGFkYXB0YXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzY2FuIGBhcmNoL3MzOTAva3ZtL3B2LmNgIHdpdGggYSBsYXNlciBmb2N1cyBvbiBgI2lmZGVmYCBkaXJlY3RpdmVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2Nrcy4gVGhpcyB3aWxsIHNob3cgbWUgd2hlcmUgdGhlIGFyY2hpdGVjdHVyZSBtaWdodCBoYXZlIGRpdmVyZ2VkIGZvciBzcGVjaWZpYyBmZWF0dXJlIHNldHMsIHZlbmRvciBxdWlya3MsIG9yIG9sZGVyIGtlcm5lbHMgYW5kIEkgd2FudCB0byBzZWUgaG93IHRoZSBQViBjb2RlIGhhbmRsZXMgaXQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXQgY2hlY2tzIG9yIG1heWJlIGV2ZW4gaGFuZGxpbmcgb2YgZGlmZmVyZW50IEtWTSBoeXBlcnZpc29yIHZlcnNpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgYWRhcHRzIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCBwb3RlbnRpYWxseSB2YXJ5aW5nIEtWTSBob3N0IGNhcGFiaWxpdGllcy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhcmUgZ29pbmcgdG8gZ3VpZGUgbWUgdG8gdGhvc2UgY3JpdGljYWwgYXJlYXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGRlYnVnZ2luZyBhbmQgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmZGVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA0MDkKCQkJCQkJCW91dHB1dDogMjQ4CgkJCQkJCQl0aG91Z2h0czogMzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBzMzkwIEtWTSBTdWJzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBpcyBjb25zaXN0ZW50bHkgY29tcGlsZWQgd2hlbmV2ZXIgS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBpcyBlbmFibGVkIG9uIHMzOTAuIFRoaXMgaXMgaW1wb3J0YW50IHRvIG5vdGUgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uczogYEtWTWAgYW5kIGBLVk1fUzM5MF9VQ09OVFJPTGAuIE5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHN5bWJvbHMgdGhhdCBkcml2ZSB0aGUgZm9jdXMgb2Ygb3VyIGFuYWx5c2lzLiBJIHNlZSB0aGVzZTogYGt2bV9hcmNoX3ZtX2lvY3RsYCwgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25gLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAsIGFuZCBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gLgoKVGhlIHJlYXNvbiB0aGVzZSBhcmUgaW1wb3J0YW50IGlzIGJlY2F1c2UgdGhlIHBhdGNoIGl0c2VsZiBzZWVtcyB0byBiZSBtYWtpbmcgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBzdWJzeXN0ZW0uIFRoZXNlIGNoYW5nZXMgYXJlIGFkZHJlc3NpbmcgdGhpbmdzIGxpa2UgbWVtb3J5IGxlYWtzLCBsb2NraW5nIGlzc3VlcywgaW5pdGlhbGl6YXRpb24gcmFjZXMsIGFuZCBzaWduYWwgaGFuZGxpbmcgZHVyaW5nIHBhZ2UgZmF1bHRzLiBJdCYjMzk7cyBtb2RpZnlpbmcgY29yZSBLVk0gaW9jdGxzLCBob3cgbWVtb3J5IHJlZ2lvbnMgYXJlIG1hbmFnZWQsIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBQViBDUFUgbGlmZWN5Y2xlLgoKVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgYWxsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgZWl0aGVyIHRocm91Z2ggS1ZNIGlvY3RscyBvciBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIG1lYW5zIHRoZXkmIzM5O3JlIGV4Y2VsbGVudCB0YXJnZXRzIGZvciBmdXp6aW5nLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgYSBjb3VwbGUgb2YgdGhlc2Ugc3ltYm9scy4gYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAgc2VlbXMgZmluZSBhcyBhIHN5bWJvbCwgYXMgaXQmIzM5O3MgY2FsbGVkIG9uY2UgcGVyIHZDUFUgY3JlYXRpb24uIGBrdm1fczM5MF9mYXVsdGluX2dmbmAgaXMgdHJpZ2dlcmVkIGR1cmluZyBwYWdlIGZhdWx0cywgd2hpY2ggaXMgYWxzbyBhIGdvb2QgdGFyZ2V0LiBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgIGlzIGNhbGxlZCBkdXJpbmcgYEtWTV9TMzkwX0tFWU9QX1JSQkVgIGFuZCBgaGFuZGxlX3JyYmVgLiBUaGF0JiMzOTtzIGFsc28gZ29vZC4KCldpdGggdGhpcyBzb2xpZCB1bmRlcnN0YW5kaW5nLCBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9TMzkwX1VDT05UUk9MPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fUzM5MF9VQ09OVFJPTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfY3JlYXRlX2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9kZXN0cm95X2NwdSYjMzQ7LAogICAgJiMzNDtkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9mYXVsdGluX2dmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGZpeGVzIGZvciBtZW1vcnkgbGVha3MsIGxvY2tpbmcsIGluaXRpYWxpemF0aW9uIHJhY2VzLCBhbmQgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cy4gSXQgbW9kaWZpZXMgY29yZSBLVk0gaW9jdGxzLCBtZW1vcnkgcmVnaW9uIG1hbmFnZW1lbnQsIGFuZCBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBDUFUgbGlmZWN5Y2xlIGZ1bmN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgYWNjZXNzZXMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9TMzkwX1VDT05UUk9MJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTU0OAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCBhc3N1bWluZyBJJiMzOTttIGEgTGludXgga2VybmVsIGRldmVsb3Blci9LVk0gc3BlY2lhbGlzdDoKCioqQ2hlY2tpbmcgZm9yIEtWTV9TMzkwX1VDT05UUk9MIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsICpLVk1fUzM5MF9VQ09OVFJPTCouLi4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGJlaW5nIGEgdGhpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gTGV0IG1lIGNvbmZpcm0sIGl0IHNob3VsZCBiZSBpbiB0aGUgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGV4YWN0IG5hbWUgY29ycmVjdCwgYXMgYSBtaXNzcGVsbGluZyBoZXJlIHdvdWxkIGJlIGEgcmVhbCB3YXN0ZSBvZiB0aW1lLiBJIGNhbiYjMzk7dCBiZSBvZmYgYnkgZXZlbiBhIGNoYXJhY3Rlci4gT2theSwgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZSBleGFjdCBkZXNpZ25hdGlvbi4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1MzOTBfVUNPTlRST0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTE5PWNvbmZpZyBLVk1cbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE4ODAKCQkJCQkJCW91dHB1dDogMjM1CgkJCQkJCQl0aG91Z2h0czogMTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIEVycm9yKioKCk9rYXksIHNvIHRoZSBlcnJvciBtZXNzYWdlIGlzIHNjcmVhbWluZyBhYm91dCBgS1ZNX1MzOTBfVUNPTlRST0xgIG5vdCBiZWluZyBmb3VuZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvLCBvZiBjb3Vyc2UsIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZS4gQnV0IGhvbGQgb24sIHRoZSB0b29sIG1pZ2h0IGJlIGxvb2tpbmcgZm9yIHRoaXMgY29uZmlndXJhdGlvbiB1bmRlciBgeDg2YCwgd2hpY2gsIGFzIHdlIGtub3csIGlzbiYjMzk7dCB0aGUgb25seSBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHNlYXJjaCBpc24mIzM5O3QgZXJyb25lb3VzbHkgZmlsdGVyaW5nIGJ5IGFyY2hpdGVjdHVyZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYEtWTV9TMzkwX1VDT05UUk9MYCBpcyAqYWN0dWFsbHkqIHRoZSBjb3JyZWN0IG5hbWUgZm9yIHRoZSBjb25maWcsIGp1c3QgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgZmF0LWZpbmdlcmVkIHNvbWV0aGluZy4gWWVwLCBsb29rcyBnb29kIHRoZXJlLiBJZiB0aGUgdG9vbCBpcyBzdGlsbCBiZWluZyBkaWZmaWN1bHQgYW5kIHJlamVjdGluZyBpdCwgSSYjMzk7bGwganVzdCBza2lwIGBLVk1fUzM5MF9VQ09OVFJPTGAgYW5kIHVzZSB0aGUgbW9yZSBnZW5lcmFsIGBLVk1gIGNvbmZpZy4gSXQgbWlnaHQgYmUgYSB3b3JrYXJvdW5kLCBidXQgSSBoYXZlIGEgaGlnaCBkZWdyZWUgb2YgY29uZmlkZW5jZSB0aGF0IHRoZSBtb3JlIGdlbmVyYWwgY29uZmlnIHdpbGwgYmUgZnVuY3Rpb25hbGx5IHN1ZmZpY2llbnQsIGF0IGxlYXN0IGFzIGEgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92bV9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24mIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2NyZWF0ZV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUmIzM0OywKICAgICYjMzQ7ZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfZmF1bHRpbl9nZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBzdWJzeXN0ZW0sIGluY2x1ZGluZyBmaXhlcyBmb3IgbWVtb3J5IGxlYWtzLCBsb2NraW5nLCBpbml0aWFsaXphdGlvbiByYWNlcywgYW5kIHNpZ25hbCBoYW5kbGluZyBkdXJpbmcgcGFnZSBmYXVsdHMuIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIGlvY3RscywgbWVtb3J5IHJlZ2lvbiBtYW5hZ2VtZW50LCBhbmQgUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgQ1BVIGxpZmVjeWNsZSBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgbWVtb3J5IGFjY2Vzc2VzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdm1faW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9jcmVhdGUmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9jcmVhdGVfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1JiMzNDssCiAgICAmIzM0O2RhdF9yZXNldF9yZWZlcmVuY2VfYml0JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2ZhdWx0aW5fZ2ZuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gc3Vic3lzdGVtLCBpbmNsdWRpbmcgZml4ZXMgZm9yIG1lbW9yeSBsZWFrcywgbG9ja2luZywgaW5pdGlhbGl6YXRpb24gcmFjZXMsIGFuZCBzaWduYWwgaGFuZGxpbmcgZHVyaW5nIHBhZ2UgZmF1bHRzLiBJdCBtb2RpZmllcyBjb3JlIEtWTSBpb2N0bHMsIG1lbW9yeSByZWdpb24gbWFuYWdlbWVudCwgYW5kIFByb3RlY3RlZCBWaXJ0dWFsaXphdGlvbiAoUFYpIENQVSBsaWZlY3ljbGUgZnVuY3Rpb25zLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBhY2Nlc3NlcywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0Mjo1NC4yMDUyMjQ3NDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMzNDA2NTQ1MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdm1faW9jdGxcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfY3JlYXRlXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVcIixcbiAgICBcImt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdFwiLFxuICAgIFwia3ZtX3MzOTBfZmF1bHRpbl9nZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGZpeGVzIGZvciBtZW1vcnkgbGVha3MsIGxvY2tpbmcsIGluaXRpYWxpemF0aW9uIHJhY2VzLCBhbmQgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cy4gSXQgbW9kaWZpZXMgY29yZSBLVk0gaW9jdGxzLCBtZW1vcnkgcmVnaW9uIG1hbmFnZW1lbnQsIGFuZCBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBDUFUgbGlmZWN5Y2xlIGZ1bmN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgYWNjZXNzZXMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0Mjo1NC4yMDUyMzI1MThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxODE0OTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY2N2IyMmViOWMzMzk4MTkxZWQxZjkwZDM1OTY1ZGNjNjhlYWY5MTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAwNjo0Mjo1MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggZWFhMzRjNWJkM2MxMS4uZWRmNzViNmFkMjBjZSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTQ0MCw2ICs0NDAsNyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XFxuIFxcdGJvb2wgc2tleV9lbmFibGVkO1xcbiBcXHQvKiBJbmRpY2F0b3IgaWYgdGhlIGFjY2VzcyByZWdpc3RlcnMgaGF2ZSBiZWVuIGxvYWRlZCBmcm9tIGd1ZXN0ICovXFxuIFxcdGJvb2wgYWNyc19sb2FkZWQ7XFxuK1xcdGJvb2wgaW5pdGlhbGl6ZWQ7XFxuIFxcdHN0cnVjdCBrdm1fczM5MF9wdl92Y3B1IHB2O1xcbiBcXHR1bmlvbiBkaWFnMzE4X2luZm8gZGlhZzMxOF9pbmZvO1xcbiBcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuYyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcXG5pbmRleCBlZDQyNTlkMTc2Mjk1Li4zZjJkNmU4OTAyZDc2IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2RhdC5jXFxuQEAgLTc1NSwxMyArNzU1LDE1IEBAIGludCBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbW1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmXFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxcbitpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpXFxuIHtcXG4gXFx0dW5pb24gcGdzdGUgcGdzdGUsIG9sZDtcXG4gXFx0dW5pb24gY3JzdGUgKmNyc3RlcDtcXG4gXFx0dW5pb24gcHRlICpwdGVwO1xcbiBcXHRpbnQgcmM7XFxuIFxcbitcXHRza2V5LVxcdTAwM2Vza2V5ID0gMDtcXG4rXFxuIFxcdHJjID0gZGF0X2VudHJ5X3dhbGsoTlVMTCwgZ2ZuLCBhc2NlLCBEQVRfV0FMS19BTlksIFRBQkxFX1RZUEVfUEFHRV9UQUJMRSwgXFx1MDAyNmNyc3RlcCwgXFx1MDAyNnB0ZXApO1xcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiByYztcXG5AQCAtNzcxLDIxICs3NzMsMjMgQEAgaW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxcbiBcXG4gXFx0XFx0aWYgKCFjcnN0ZS5oLmZjIHx8ICFjcnN0ZS5zLmZjMS5wcilcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuLVxcdFxcdHJldHVybiBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKTtcXG4rXFx0XFx0c2tleS1cXHUwMDNlc2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChsYXJnZV9jcnN0ZV90b19waHlzKCpjcnN0ZXAsIGdmbikpIFxcdTAwM2NcXHUwMDNjIDE7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcdG9sZCA9IHBnc3RlX2dldF9sb2NrKHB0ZXApO1xcbiBcXHRwZ3N0ZSA9IG9sZDtcXG4gXFxuIFxcdGlmICghcHRlcC1cXHUwMDNlaC5pKSB7XFxuLVxcdFxcdHJjID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKTtcXG4tXFx0XFx0cGdzdGUuaHIgPSByYyBcXHUwMDNlXFx1MDAzZSAxO1xcbitcXHRcXHRza2V5LVxcdTAwM2Vza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKSBcXHUwMDNjXFx1MDAzYyAxO1xcbitcXHRcXHRwZ3N0ZS5ociA9IHNrZXktXFx1MDAzZXI7XFxuIFxcdH1cXG4tXFx0cmMgfD0gKHBnc3RlLmdyIFxcdTAwM2NcXHUwMDNjIDEpIHwgcGdzdGUuZ2M7XFxuK1xcdHNrZXktXFx1MDAzZXIgfD0gcGdzdGUuZ3I7XFxuK1xcdHNrZXktXFx1MDAzZWMgfD0gcGdzdGUuZ2M7XFxuIFxcdHBnc3RlLmdyID0gMDtcXG4gXFxuIFxcdGRhdF91cGRhdGVfcHRlcF9zZChvbGQsIHBnc3RlLCBwdGVwKTtcXG4gXFx0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XFxuLVxcdHJldHVybiByYztcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBsb25nIGRhdF9yZXNldF9za2V5c19wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG5AQCAtODQ2LDYgKzg1MCw3IEBAIHN0YXRpYyBsb25nIF9kYXRfc2xvdF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsXFxuIFxcdHN0cnVjdCBzbG90X3ByaXYgKnAgPSB3YWxrLVxcdTAwM2Vwcml2O1xcbiBcXHR1bmlvbiBjcnN0ZSBkdW1teSA9IHsgLnZhbCA9IHAtXFx1MDAzZXRva2VuIH07XFxuIFxcdHVuaW9uIHB0ZSBuZXdfcHRlLCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApO1xcbitcXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcXG4gXFxuIFxcdG5ld19wdGUgPSBfUFRFX1RPSyhkdW1teS50b2sudHlwZSwgZHVtbXkudG9rLnBhcik7XFxuIFxcbkBAIC04NTMsNyArODU4LDExIEBAIHN0YXRpYyBsb25nIF9kYXRfc2xvdF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsXFxuIFxcdGlmIChwdGUudmFsID09IG5ld19wdGUudmFsKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGRhdF9wdGVwX3hjaGcocHRlcCwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLVxcdTAwM2Vhc2NlLCBmYWxzZSk7XFxuK1xcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XFxuK1xcdHBnc3RlID0gX19kYXRfcHRlcF94Y2hnKHB0ZXAsIHBnc3RlLCBuZXdfcHRlLCBnZm4sIHdhbGstXFx1MDAzZWFzY2UsIGZhbHNlKTtcXG4rXFx0cGdzdGUuY21tYV9kID0gMDtcXG4rXFx0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuaCBiL2FyY2gvczM5MC9rdm0vZGF0LmhcXG5pbmRleCBmYWQ2MDUzMDVlMDVjLi4xNDFlZTdiOWYwMTkxIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmhcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2RhdC5oXFxuQEAgLTUzNyw3ICs1MzcsNyBAQCBpbnQgZGF0X3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZlxcbiBcXHRcXHRcXHR1bmlvbiBza2V5IHNrZXksIGJvb2wgbnEpO1xcbiBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sXFxuIFxcdFxcdFxcdCAgICAgdW5pb24gc2tleSBza2V5LCB1bmlvbiBza2V5ICpvbGRrZXksIGJvb2wgbnEsIGJvb2wgbXIsIGJvb2wgbWMpO1xcbi1pbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pO1xcbitpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpO1xcbiBsb25nIGRhdF9yZXNldF9za2V5cyh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KTtcXG4gXFxuIHVuc2lnbmVkIGxvbmcgZGF0X2dldF9wdHZhbChzdHJ1Y3QgcGFnZV90YWJsZSAqdGFibGUsIHN0cnVjdCBwdHZhbF9wYXJhbSBwYXJhbSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcXG5pbmRleCBmZWU4MDA0N2JkOTRmLi4zY2M0NWY3ZjViMmQ3IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcXG5AQCAtOTEsOSArOTEsOSBAQCBpbnQga3ZtX3MzOTBfZmF1bHRpbl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYVxcbiBcXHRcXHQvKiBBY2Nlc3Mgb3V0c2lkZSBtZW1vcnksIGFkZHJlc3NpbmcgZXhjZXB0aW9uLiAqL1xcbiBcXHRcXHRpZiAoaXNfbm9zbG90X3BmbihmLVxcdTAwM2VwZm4pKVxcbiBcXHRcXHRcXHRyZXR1cm4gUEdNX0FERFJFU1NJTkc7XFxuLVxcdFxcdC8qIFNpZ25hbCBwZW5kaW5nOiB0cnkgYWdhaW4uICovXFxuLVxcdFxcdGlmIChmLVxcdTAwM2VwZm4gPT0gS1ZNX1BGTl9FUlJfU0lHUEVORElORylcXG4tXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcdFxcdC8qIEZhdGFsIHNpZ25hbCBwZW5kaW5nOiBiYWlsIG91dC4gKi9cXG4rXFx0XFx0aWYgKGlzX3NpZ3BlbmRpbmdfcGZuKGYtXFx1MDAzZXBmbikpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuIFxcdFxcdC8qIENoZWNrIGlmIGl0J3MgcmVhZC1vbmx5IG1lbW9yeTsgZG9uJ3QgdHJ5IHRvIGFjdHVhbGx5IGhhbmRsZSB0aGF0IGNhc2UuICovXFxuIFxcdFxcdGlmIChmLVxcdTAwM2VwZm4gPT0gS1ZNX1BGTl9FUlJfUk9fRkFVTFQpXFxuIFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcXG5pbmRleCA5ZTNlNmIwZDcyYWQ2Li42MDEzZjI4ZTM0NjFmIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXFxuQEAgLTQ1LDEzICs0NSwxNiBAQCBzdGF0aWMgc3RydWN0IGt2bV9zMzkwX2dpYiAqZ2liO1xcbiBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXFxuIHtcXG4gXFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5zY2E7XFxuLVxcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybCA9IHNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4rXFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgc2lncF9jdHJsO1xcbiBcXG4gXFx0aWYgKCFrdm1fczM5MF90ZXN0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0aWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSksIHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTtcXG4gXFxuK1xcdHNpZ3BfY3RybCA9IHNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4gXFx0aWYgKHNyY19pZClcXG4gXFx0XFx0KnNyY19pZCA9IHNpZ3BfY3RybC5zY247XFxuIFxcbkBAIC02MCwxMyArNjMsMTYgQEAgc3RhdGljIGludCBzY2FfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqc3JjX2lkKVxcbiBcXG4gc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZClcXG4ge1xcbi1cXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnNjYTtcXG4tXFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9IFxcdTAwMjZzY2EtXFx1MDAzZWNwdVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XFxuIFxcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIG9sZF92YWwsIG5ld192YWwgPSB7LnNjbiA9IHNyY19pZCwgLmMgPSAxfTtcXG4rXFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5zY2E7XFxuK1xcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmw7XFxuIFxcdGludCBleHBlY3QsIHJjO1xcbiBcXG4gXFx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XFxuK1xcdGlmIChLVk1fQlVHX09OKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pLCB2Y3B1LVxcdTAwM2Vrdm0pKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdHNpZ3BfY3RybCA9IFxcdTAwMjZzY2EtXFx1MDAzZWNwdVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XFxuIFxcdG9sZF92YWwgPSBSRUFEX09OQ0UoKnNpZ3BfY3RybCk7XFxuIFxcdG9sZF92YWwuYyA9IDA7XFxuIFxcbkBAIC04NCwxMCArOTAsMTMgQEAgc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZClcXG4gc3RhdGljIHZvaWQgc2NhX2NsZWFyX2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnNjYTtcXG4tXFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9IFxcdTAwMjZzY2EtXFx1MDAzZWNwdVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XFxuK1xcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmw7XFxuIFxcbi1cXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxcbitcXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIHx8ICF2Y3B1LVxcdTAwM2VhcmNoLmluaXRpYWxpemVkIHx8IGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbiBcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBJbml0aWFsaXplIGFmdGVyIHRoZSBhYm92ZSBjaGVjaywgdG8gcHJldmVudCBnb2luZyBvdXQgb2YgYm91bmRzICovXFxuK1xcdHNpZ3BfY3RybCA9IFxcdTAwMjZzY2EtXFx1MDAzZWNwdVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XFxuIFxcdGt2bV9zMzkwX2NsZWFyX2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCk7XFxuIFxcbiBcXHRXUklURV9PTkNFKHNpZ3BfY3RybC1cXHUwMDNldmFsdWUsIDApO1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcXG5pbmRleCAxNTBiNWRkMjE3MGUyLi42NjgyNzJkZmZhMThiIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbkBAIC01NzEsNyArNTcxLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3BcXG4gXFx0c3dpdGNoIChvcCkge1xcbiBcXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1NTS0U6XFxuIFxcdFxcdHIgPSBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkobWMsIGFzY2UsIGdmbiwgc2tleSwgXFx1MDAyNnNrZXksIDAsIDAsIDApO1xcbi1cXHRcXHRpZiAociBcXHUwMDNlPSAwKVxcbitcXHRcXHRpZiAociA9PSAwIHx8IHIgPT0gMSlcXG4gXFx0XFx0XFx0cmV0dXJuIHNrZXkuc2tleTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfSVNLRTpcXG5AQCAtNTgwLDE0ICs1ODAsMTQgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3BcXG4gXFx0XFx0XFx0cmV0dXJuIHNrZXkuc2tleTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfUlJCRTpcXG4tXFx0XFx0ciA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KGFzY2UsIGdmbik7XFxuLVxcdFxcdGlmIChyIFxcdTAwM2UgMClcXG4tXFx0XFx0XFx0cmV0dXJuIHIgXFx1MDAzY1xcdTAwM2MgMTtcXG4rXFx0XFx0ciA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KGFzY2UsIGdmbiwgXFx1MDAyNnNrZXkpO1xcbitcXHRcXHRpZiAoIXIpXFxuK1xcdFxcdFxcdHJldHVybiBza2V5LnNrZXk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIHIgXFx1MDAzZSAwID8gLUVGQVVMVCA6IHI7XFxuIH1cXG4gXFxuIC8qIFNlY3Rpb246IGRldmljZSByZWxhdGVkICovXFxuQEAgLTEyMTksOCArMTIxOSw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoc3RydWN0IGt2bSAqa3ZtLCBpbnQgcmVxKVxcbiBcXG4gLypcXG4gICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXFx1MDAzZXNyY3UgaGVsZCB0byBhdm9pZCByYWNlcyBvbiBtZW1zbG90cywgYW5kIHdpdGhcXG4tICoga3ZtLVxcdTAwM2VzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLFxcbi0gKiBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxcbisgKiBrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcXG4rICoga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oKSwgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cXG4gICovXFxuIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbkBAIC0xMjY1LDcgKzEyNjUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuIH1cXG4gXFxuIC8qXFxuLSAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVxcdTAwM2VzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxcbisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxcbiAgKiBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oKSBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxcbiAgKi9cXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuQEAgLTEzMDAsNyArMTMwMCw5IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIHtcXG4gXFx0aW50IHJlcyA9IC1FTlhJTztcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuK1xcdGd1YXJkKHNyY3UpKFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UpO1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcXG4rXFxuIFxcdHN3aXRjaCAoYXR0ci1cXHUwMDNlYXR0cikge1xcbiBcXHRjYXNlIEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVDpcXG4gXFx0XFx0cmVzID0ga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKGt2bSk7XFxuQEAgLTEzMTEsNyArMTMxMyw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4gXFxuIFxcdHJldHVybiByZXM7XFxuIH1cXG5AQCAtMjIxNCw3ICsyMjE1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9nZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXFxuIFxcdH1cXG4gXFxuIFxcdGt2ZnJlZShrZXlzKTtcXG4tXFx0cmV0dXJuIHI7XFxuK1xcdHJldHVybiByIFxcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXFxuQEAgLTIyNzYsNyArMjI3Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxcbiBcXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XFxuIG91dDpcXG4gXFx0a3ZmcmVlKGtleXMpO1xcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIHIgXFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0yMzg2LDcgKzIzODcsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXG4gXFx0c2V0X2JpdChHTUFQX0ZMQUdfVVNFU19DTU0sIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlZmxhZ3MpO1xcbiBcXG4tXFx0cmV0dXJuIHI7XFxuK1xcdHJldHVybiByIFxcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI5MzQsNiArMjkzNSw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0Y2FzZSBLVk1fUzM5MF9JTlRFUlJVUFQ6IHtcXG4gXFx0XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50O1xcbiBcXG4rXFx0XFx0ciA9IC1FSU5WQUw7XFxuK1xcdFxcdGlmIChrdm1faXNfdWNvbnRyb2woa3ZtKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdHIgPSAtRUZBVUxUO1xcbiBcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnMzOTBpbnQsIGFyZ3AsIHNpemVvZihzMzkwaW50KSkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0yOTk4LDkgKzMwMDIsOCBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdFxcdHIgPSAtRUZBVUxUO1xcbiBcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmFyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbi1cXHRcXHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFxcdTAwMjZhcmdzKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jaylcXG4rXFx0XFx0XFx0ciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCBcXHUwMDI2YXJncyk7XFxuIFxcdFxcdGlmICghcikge1xcbiBcXHRcXHRcXHRyID0gY29weV90b191c2VyKGFyZ3AsIFxcdTAwMjZhcmdzLCBzaXplb2YoYXJncykpO1xcbiBcXHRcXHRcXHRpZiAocilcXG5AQCAtMzAxNCw5ICszMDE3LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRcXHRyID0gLUVGQVVMVDtcXG4gXFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZhcmdzLCBhcmdwLCBzaXplb2YoYXJncykpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2spO1xcbiBcXHRcXHRyID0ga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhrdm0sIFxcdTAwMjZhcmdzKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFx0Y2FzZSBLVk1fUzM5MF9QVl9DT01NQU5EOiB7XFxuQEAgLTM0NjEsNyArMzQ2NCw3IEBAIHN0YXRpYyB2b2lkIHNjYV9kZWxfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5zY2E7XFxuIFxcbi1cXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxcbitcXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIHx8ICF2Y3B1LVxcdTAwM2VhcmNoLmluaXRpYWxpemVkKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRjbGVhcl9iaXRfaW52KHZjcHUtXFx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVxcdTAwM2VtY24pO1xcbkBAIC0zNDgxLDggKzM0ODQsOCBAQCBzdGF0aWMgdm9pZCBzY2FfYWRkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRXUklURV9PTkNFKHNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNkYSwgdmlydF90b19waHlzKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XFxuIFxcdHNldF9iaXRfaW52KHZjcHUtXFx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVxcdTAwM2VtY24pO1xcbi1cXHRzY2EtXFx1MDAzZWNwdVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXS5zZGEgPSB2aXJ0X3RvX3BoeXModmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHNjYV9jYW5fYWRkX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXFxuQEAgLTM2MTMsNiArMzYxNiw5IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKHRlc3Rfa3ZtX2ZhY2lsaXR5KHZjcHUtXFx1MDAzZWt2bSwgNzQpIHx8IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC51c2VyX2luc3RyMCB8fFxcbiBcXHQgICAgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnVzZXJfb3BlcmV4ZWMpXFxuIFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VpY3RsIHw9IElDVExfT1BFUkVYQztcXG4rXFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pbml0aWFsaXplZCwgdHJ1ZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGt2bV9oYXNfcGNrbW9fc3ViZnVuYyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbnIpXFxuQEAgLTM2NzQsNyArMzY4MCw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIHZvaWQga3ZtX3MzOTBfdmNwdV91bnNldHVwX2NtbWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWNicmxvKSk7XFxuK1xcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlY2JybG8pXFxuK1xcdFxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWNicmxvKSk7XFxuIFxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VjYnJsbyA9IDA7XFxuIH1cXG4gXFxuQEAgLTM3OTIsMjEgKzM3OTksMjEgQEAgaW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rREVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSlcXG4rXFxuIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0c3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZTtcXG4rXFx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgX19mcmVlKGt2bV9zMzkwX21tdV9jYWNoZSkgPSBOVUxMO1xcbitcXHRzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlIF9fZnJlZShzaWVfcGFnZSkgPSBOVUxMO1xcbiBcXHRpbnQgcmM7XFxuIFxcbiBcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzaWVfcGFnZSkgIT0gNDA5Nik7XFxuLVxcdHZjcHUtXFx1MDAzZWFyY2gubWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XFxuLVxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC5tYylcXG4rXFx0bWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XFxuK1xcdGlmICghbWMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRzaWVfcGFnZSA9IChzdHJ1Y3Qgc2llX3BhZ2UgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLVxcdGlmICghc2llX3BhZ2UpIHtcXG4tXFx0XFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUodmNwdS1cXHUwMDNlYXJjaC5tYyk7XFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2gubWMgPSBOVUxMO1xcbitcXHRpZiAoIXNpZV9wYWdlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0fVxcbiBcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2sgPSBcXHUwMDI2c2llX3BhZ2UtXFx1MDAzZXNpZV9ibG9jaztcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWl0ZGJhID0gdmlydF90b19waHlzKFxcdTAwMjZzaWVfcGFnZS1cXHUwMDNlaXRkYik7XFxuQEAgLTM4NDgsMTAgKzM4NTUsOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWt2bV92YWxpZF9yZWdzIHw9IEtWTV9TWU5DX0ZQUlM7XFxuIFxcbiBcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4tXFx0XFx0cmMgPSAtRU5PTUVNO1xcbiBcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ21hcCwgLTFVTCk7XFxuIFxcdFxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC5nbWFwKVxcbi1cXHRcXHRcXHRnb3RvIG91dF9mcmVlX3NpZV9ibG9jaztcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuIFxcdFZNX0VWRU5UKHZjcHUtXFx1MDAzZWt2bSwgMywgXFxcImNyZWF0ZSBjcHUgJWQgYXQgMHglcCwgc2llIGJsb2NrIGF0IDB4JXBcXFwiLFxcbkBAIC0zODU5LDIwICszODY1LDE5IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHRyYWNlX2t2bV9zMzkwX2NyZWF0ZV92Y3B1KHZjcHUtXFx1MDAzZXZjcHVfaWQsIHZjcHUsIHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrKTtcXG4gXFxuIFxcdHJjID0ga3ZtX3MzOTBfdmNwdV9zZXR1cCh2Y3B1KTtcXG4tXFx0aWYgKHJjKVxcbi1cXHRcXHRnb3RvIG91dF91Y29udHJvbF91bmluaXQ7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4rXFx0XFx0XFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWNoaWxkcmVuX2xvY2spXFxuK1xcdFxcdFxcdFxcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXFx1MDAzZWFyY2guZ21hcCk7XFxuK1xcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXFx1MDAzZWFyY2guZ21hcCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuIFxcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLm1jID0gbm9fZnJlZV9wdHIobWMpO1xcbitcXHRzaWVfcGFnZSA9IE5VTEw7XFxuIFxcdGt2bV9zMzkwX3VwZGF0ZV90b3BvbG9neV9jaGFuZ2VfcmVwb3J0KHZjcHUtXFx1MDAzZWt2bSwgMSk7XFxuIFxcdHJldHVybiAwO1xcbi1cXG4tb3V0X3Vjb250cm9sX3VuaW5pdDpcXG4tXFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuLVxcdFxcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXFx1MDAzZWFyY2guZ21hcCk7XFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXFx1MDAzZWFyY2guZ21hcCk7XFxuLVxcdH1cXG4tb3V0X2ZyZWVfc2llX2Jsb2NrOlxcbi1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XFxuLVxcdHJldHVybiByYztcXG4gfVxcbiBcXG4gaW50IGt2bV9hcmNoX3ZjcHVfcnVubmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC01MDM5LDYgKzUwNDQsMTAgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICAgIGt2bV9ydW4tXFx1MDAzZWt2bV9kaXJ0eV9yZWdzIFxcdTAwMjYgfktWTV9TWU5DX1MzOTBfVkFMSURfRklFTERTKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoKSAqL1xcbitcXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdHZjcHVfbG9hZCh2Y3B1KTtcXG4gXFxuIFxcdGlmIChndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpIHtcXG5AQCAtNTUyMyw2ICs1NTMyLDEwIEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0bG9uZyByO1xcbiBcXHR1MTYgcmMsIHJyYztcXG4gXFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoKSAqL1xcbitcXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdHZjcHVfbG9hZCh2Y3B1KTtcXG4gXFxuIFxcdHN3aXRjaCAoaW9jdGwpIHtcXG5AQCAtNTc0OCwxMSArNTc2MSwzMCBAQCBib29sIGt2bV9hcmNoX2lycWNoaXBfaW5fa2VybmVsKHN0cnVjdCBrdm0gKmt2bSlcXG4gfVxcbiBcXG4gLyogU2VjdGlvbjogbWVtb3J5IHJlbGF0ZWQgKi9cXG4rc3RhdGljIGxvbmcgY21tYV9kX2NvdW50X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbit7XFxuK1xcdHVuaW9uIHBnc3RlIHBnc3RlO1xcbitcXG4rXFx0cGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcXG4rXFx0aWYgKHBnc3RlLmNtbWFfZCkge1xcbitcXHRcXHRwZ3N0ZS5jbW1hX2QgPSAwO1xcbitcXHRcXHRhdG9taWM2NF9kZWMod2Fsay1cXHUwMDNlcHJpdik7XFxuK1xcdH1cXG4rXFx0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXFxuIFxcdFxcdFxcdFxcdCAgIGVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpXFxuIHtcXG4rXFx0Y29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBjbW1hX2RfY291bnRfcHRlLCB9O1xcbitcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XFxuK1xcdGludCByYyA9IC1FTk9NRU07XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XFxuK1xcbiBcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKGt2bSkgXFx1MDAyNlxcdTAwMjYgbmV3IFxcdTAwMjZcXHUwMDI2IG5ldy1cXHUwMDNlaWQgXFx1MDAzYyBLVk1fVVNFUl9NRU1fU0xPVFMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5AQCAtNTc3NSw0MyArNTgwNywzNSBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICgha3ZtLVxcdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFR1cm4gb2ZmIG1pZ3JhdGlvbiBtb2RlIHdoZW46XFxuLVxcdCAqIC0gdXNlcnNwYWNlIGNyZWF0ZXMgYSBuZXcgbWVtc2xvdCB3aXRoIGRpcnR5IGxvZ2dpbmcgb2ZmLFxcbi1cXHQgKiAtIHVzZXJzcGFjZSBtb2RpZmllcyBhbiBleGlzdGluZyBtZW1zbG90IChNT1ZFIG9yIEZMQUdTX09OTFkpIGFuZFxcbi1cXHQgKiAgIGRpcnR5IGxvZ2dpbmcgaXMgdHVybmVkIG9mZi5cXG4tXFx0ICogTWlncmF0aW9uIG1vZGUgZXhwZWN0cyBkaXJ0eSBwYWdlIGxvZ2dpbmcgYmVpbmcgZW5hYmxlZCB0byBzdG9yZVxcbi1cXHQgKiBpdHMgZGlydHkgYml0bWFwLlxcbi1cXHQgKi9cXG4tXFx0aWYgKGNoYW5nZSAhPSBLVk1fTVJfREVMRVRFIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhKG5ldy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUykpXFxuLVxcdFxcdFdBUk4oa3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oa3ZtKSxcXG4tXFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIHN0b3AgbWlncmF0aW9uIG1vZGVcXFwiKTtcXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tXFx0XFx0XFx0XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxcbi1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXFxuLVxcdFxcdFxcdFxcdGVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpXFxuLXtcXG4tXFx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgPSBOVUxMO1xcbi1cXHRpbnQgcmMgPSAwO1xcbitcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFR1cm4gb2ZmIG1pZ3JhdGlvbiBtb2RlIHdoZW46XFxuK1xcdFxcdCAqIC0gdXNlcnNwYWNlIGNyZWF0ZXMgYSBuZXcgbWVtc2xvdCB3aXRoIGRpcnR5IGxvZ2dpbmcgb2ZmLFxcbitcXHRcXHQgKiAtIHVzZXJzcGFjZSBtb2RpZmllcyBhbiBleGlzdGluZyBtZW1zbG90IChNT1ZFIG9yIEZMQUdTX09OTFkpXFxuK1xcdFxcdCAqICAgYW5kIGRpcnR5IGxvZ2dpbmcgaXMgdHVybmVkIG9mZi5cXG4rXFx0XFx0ICogTWlncmF0aW9uIG1vZGUgZXhwZWN0cyBkaXJ0eSBwYWdlIGxvZ2dpbmcgYmVpbmcgZW5hYmxlZCB0b1xcbitcXHRcXHQgKiBzdG9yZSBpdHMgZGlydHkgYml0bWFwLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGNoYW5nZSAhPSBLVk1fTVJfREVMRVRFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhKG5ldy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUykpXFxuK1xcdFxcdFxcdFdBUk4oa3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oa3ZtKSxcXG4rXFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIHN0b3AgbWlncmF0aW9uIG1vZGVcXFwiKTtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGNoYW5nZSA9PSBLVk1fTVJfRkxBR1NfT05MWSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xcbi1cXHRpZiAoIW1jKSB7XFxuLVxcdFxcdHJjID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuK1xcdGlmICghbWMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbityZXRyeTpcXG4gXFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKSB7XFxuK1xcdFxcdGlmIChrdm0tXFx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgXFx1MDAyNlxcdTAwMjYga3ZtLVxcdTAwM2VhcmNoLnVzZV9jbW1hIFxcdTAwMjZcXHUwMDI2IG9sZCkge1xcbitcXHRcXHRcXHRfZGF0X3dhbGtfZ2ZuX3JhbmdlKG9sZC1cXHUwMDNlYmFzZV9nZm4sIG9sZC1cXHUwMDNlYmFzZV9nZm4gKyBvbGQtXFx1MDAzZW5wYWdlcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBcXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMpO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRzd2l0Y2ggKGNoYW5nZSkge1xcbiBcXHRcXHRjYXNlIEtWTV9NUl9ERUxFVEU6XFxuIFxcdFxcdFxcdHJjID0gZGF0X2RlbGV0ZV9zbG90KG1jLCBrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZSwgb2xkLVxcdTAwM2ViYXNlX2dmbiwgb2xkLVxcdTAwM2VucGFnZXMpO1xcbkBAIC01ODI3LDE0ICs1ODUxLDIxIEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRjYXNlIEtWTV9NUl9GTEFHU19PTkxZOlxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0cmMgPSAwO1xcbiBcXHRcXHRcXHRXQVJOKDEsIFxcXCJVbmtub3duIEtWTSBNUiBDSEFOR0U6ICVkXFxcXG5cXFwiLCBjaGFuZ2UpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tb3V0Olxcbi1cXHRpZiAocmMpXFxuLVxcdFxcdHByX3dhcm4oXFxcImZhaWxlZCB0byBjb21taXQgbWVtb3J5IHJlZ2lvblxcXFxuXFxcIik7XFxuLVxcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcXG4tXFx0cmV0dXJuO1xcbitcXHRpZiAocmMgPT0gLUVOT01FTSkge1xcbitcXHRcXHRyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7XFxuK1xcdFxcdGlmICghcmMpXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbit2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxcbitcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsIGVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpXFxuK3tcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcXG5pbmRleCBhZDBkZGM0MzNhNzNjLi5iMWJhMjRjMzQ2ZWZhIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHJpdi5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcXG5AQCAtMjg5LDYgKzI4OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lza2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBzdGF0aWMgaW50IGhhbmRsZV9ycmJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGdhZGRyO1xcbitcXHR1bmlvbiBza2V5IHNrZXk7XFxuIFxcdGludCByZWcxLCByZWcyO1xcbiBcXHRpbnQgcmM7XFxuIFxcbkBAIC0zMDcsMTIgKzMwOCwxMiBAQCBzdGF0aWMgaW50IGhhbmRsZV9ycmJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0Z2FkZHIgPSBrdm1fczM5MF9sb2dpY2FsX3RvX2VmZmVjdGl2ZSh2Y3B1LCBnYWRkcik7XFxuIFxcdGdhZGRyID0ga3ZtX3MzOTBfcmVhbF90b19hYnModmNwdSwgZ2FkZHIpO1xcbiBcXHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfbG9jaylcXG4tXFx0XFx0cmMgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh2Y3B1LVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpKTtcXG4rXFx0XFx0cmMgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh2Y3B1LVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpLCBcXHUwMDI2c2tleSk7XFxuIFxcdGlmIChyYyBcXHUwMDNlIDApXFxuIFxcdFxcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgcmMpO1xcbiBcXHRpZiAocmMgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuLVxcdGt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgcmMpO1xcbitcXHRrdm1fczM5MF9zZXRfcHN3X2NjKHZjcHUsIChza2V5LnNrZXkgXFx1MDAzZVxcdTAwM2UgMSkgXFx1MDAyNiAzKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTEyNjAsOCArMTI2MSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHQvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqL1xcbiBcXHRcXHRrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlbW11X2xvY2spXFxuLVxcdFxcdFxcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcXG4rXFx0XFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2spXFxuK1xcdFxcdFxcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9sb2NrKVxcbitcXHRcXHRcXHRcXHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XFxuIFxcdFxcdGlmIChpIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIGk7XFxuIFxcdFxcdC8qIEFjY291bnQgZm9yIHRoZSBwb3NzaWJsZSBleHRyYSBjYnJsIGVudHJ5ICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xcbmluZGV4IDFiZWFjYzg0MWNhODUuLmIwMmUwMTU5ZDNjZDIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wdi5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9wdi5jXFxuQEAgLTI0NCw2ICsyNDQsMjQgQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfY2xlYXJfcHZfc3RhdGUoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRrdm0tXFx1MDAzZWFyY2gucHYuc3Rvcl92YXIgPSBOVUxMO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBrdm1fczM5MF9wdl9kaXNwb3NlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZnJlZV9zdG9yX2Jhc2UpXFxuK3tcXG4rXFx0aWYgKGZyZWVfc3Rvcl9iYXNlKVxcbitcXHRcXHRmcmVlX3BhZ2VzKHZjcHUtXFx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTtcXG4rXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNpZGFfYWRkcih2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jaykpO1xcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlcHZfaGFuZGxlX2NwdSA9IDA7XFxuK1xcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2Vwdl9oYW5kbGVfY29uZmlnID0gMDtcXG4rXFx0bWVtc2V0KFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnB2LCAwLCBzaXplb2YodmNwdS1cXHUwMDNlYXJjaC5wdikpO1xcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlc2RmID0gMDtcXG4rXFx0LypcXG4rXFx0ICogVGhlIHNpZGFkIGZpZWxkIChmb3Igc2RmID09IDIpIGlzIG5vdyB0aGUgZ2JlYSBmaWVsZCAoZm9yIHNkZiA9PSAwKS5cXG4rXFx0ICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mXFxuK1xcdCAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuXFxuK1xcdCAqL1xcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlZ2JlYSA9IDE7XFxuK1xcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpO1xcbit9XFxuK1xcbiBpbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcXG4ge1xcbiBcXHRpbnQgY2M7XFxuQEAgLTI1OCwyNCArMjc2LDkgQEAgaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXFxuIFxcdFdBUk5fT05DRShjYywgXFxcInByb3R2aXJ0IGRlc3Ryb3kgY3B1IGZhaWxlZCByYyAleCBycmMgJXhcXFwiLCAqcmMsICpycmMpO1xcbiBcXG4gXFx0LyogSW50ZW5kZWQgbWVtb3J5IGxlYWsgZm9yIHNvbWV0aGluZyB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4uICovXFxuLVxcdGlmICghY2MpXFxuLVxcdFxcdGZyZWVfcGFnZXModmNwdS1cXHUwMDNlYXJjaC5wdi5zdG9yX2Jhc2UsXFxuLVxcdFxcdFxcdCAgIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2NwdV9zdG9yX2xlbikpO1xcbi1cXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNpZGFfYWRkcih2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jaykpO1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlcHZfaGFuZGxlX2NwdSA9IDA7XFxuLVxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2Vwdl9oYW5kbGVfY29uZmlnID0gMDtcXG4tXFx0bWVtc2V0KFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnB2LCAwLCBzaXplb2YodmNwdS1cXHUwMDNlYXJjaC5wdikpO1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlc2RmID0gMDtcXG4tXFx0LypcXG4tXFx0ICogVGhlIHNpZGFkIGZpZWxkIChmb3Igc2RmID09IDIpIGlzIG5vdyB0aGUgZ2JlYSBmaWVsZCAoZm9yIHNkZiA9PSAwKS5cXG4tXFx0ICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mXFxuLVxcdCAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuXFxuLVxcdCAqL1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlZ2JlYSA9IDE7XFxuLVxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpO1xcbitcXHRrdm1fczM5MF9wdl9kaXNwb3NlX2NwdSh2Y3B1LCAhY2MpO1xcbiBcXG4tXFx0cmV0dXJuIGNjID8gRUlPIDogMDtcXG4rXFx0cmV0dXJuIGNjID8gLUVJTyA6IDA7XFxuIH1cXG4gXFxuIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXFxuQEAgLTMxOSw5ICszMjIsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbiBcXHRcXHQgICAgIHV2Y2IuaGVhZGVyLnJyYyk7XFxuIFxcbiBcXHRpZiAoY2MpIHtcXG4tXFx0XFx0dTE2IGR1bW15O1xcbi1cXG4tXFx0XFx0a3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUodmNwdSwgXFx1MDAyNmR1bW15LCBcXHUwMDI2ZHVtbXkpO1xcbitcXHRcXHRrdm1fczM5MF9wdl9kaXNwb3NlX2NwdSh2Y3B1LCB0cnVlKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdH1cXG4gXFxuQEAgLTgwOSw3ICs4MTAsNyBAQCBzdGF0aWMgaW50IHVucGFja19vbmUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIsIHU2NCB0d2VhayxcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FQUdBSU4pXFxuK1xcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FQUdBSU4gXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FSU5UUilcXG4gXFx0XFx0S1ZNX1VWX0VWRU5UKGt2bSwgMywgXFxcIlBST1RWSVJUIFZNIFVOUEFDSzogZmFpbGVkIGFkZHIgJWxseCB3aXRoIHJjICV4IHJyYyAleFxcXCIsXFxuIFxcdFxcdFxcdCAgICAgdXZjYi5nYWRkciwgKnJjLCAqcnJjKTtcXG4gXFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDI6NTQuODIzOTk2ODA4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQyNzIxODc0NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZtX2lvY3RsXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2NyZWF0ZVwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiLFxuICAgIFwia3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJrdm1fczM5MF9wdl9jcmVhdGVfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9wdl9kZXN0cm95X2NwdVwiLFxuICAgIFwiZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRcIixcbiAgICBcImt2bV9zMzkwX2ZhdWx0aW5fZ2ZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBzdWJzeXN0ZW0sIGluY2x1ZGluZyBmaXhlcyBmb3IgbWVtb3J5IGxlYWtzLCBsb2NraW5nLCBpbml0aWFsaXphdGlvbiByYWNlcywgYW5kIHNpZ25hbCBoYW5kbGluZyBkdXJpbmcgcGFnZSBmYXVsdHMuIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIGlvY3RscywgbWVtb3J5IHJlZ2lvbiBtYW5hZ2VtZW50LCBhbmQgUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgQ1BVIGxpZmVjeWNsZSBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgbWVtb3J5IGFjY2Vzc2VzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjY3YjIyZWI5YzMzOTgxOTFlZDFmOTBkMzU5NjVkY2M2OGVhZjkxM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDY6NDI6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCBlYWEzNGM1YmQzYzExLi5lZGY3NWI2YWQyMGNlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtNDQwLDYgKzQ0MCw3IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdGJvb2wgc2tleV9lbmFibGVkO1xuIFx0LyogSW5kaWNhdG9yIGlmIHRoZSBhY2Nlc3MgcmVnaXN0ZXJzIGhhdmUgYmVlbiBsb2FkZWQgZnJvbSBndWVzdCAqL1xuIFx0Ym9vbCBhY3JzX2xvYWRlZDtcbitcdGJvb2wgaW5pdGlhbGl6ZWQ7XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfcHZfdmNwdSBwdjtcbiBcdHVuaW9uIGRpYWczMThfaW5mbyBkaWFnMzE4X2luZm87XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuaW5kZXggZWQ0MjU5ZDE3NjI5NS4uM2YyZDZlODkwMmQ3NiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbkBAIC03NTUsMTMgKzc1NSwxNSBAQCBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZlxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi1pbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pXG4raW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KVxuIHtcbiBcdHVuaW9uIHBnc3RlIHBnc3RlLCBvbGQ7XG4gXHR1bmlvbiBjcnN0ZSAqY3JzdGVwO1xuIFx0dW5pb24gcHRlICpwdGVwO1xuIFx0aW50IHJjO1xuIFxuK1x0c2tleS1cdTAwM2Vza2V5ID0gMDtcbitcbiBcdHJjID0gZGF0X2VudHJ5X3dhbGsoTlVMTCwgZ2ZuLCBhc2NlLCBEQVRfV0FMS19BTlksIFRBQkxFX1RZUEVfUEFHRV9UQUJMRSwgXHUwMDI2Y3JzdGVwLCBcdTAwMjZwdGVwKTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuQEAgLTc3MSwyMSArNzczLDIzIEBAIGludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbilcbiBcbiBcdFx0aWYgKCFjcnN0ZS5oLmZjIHx8ICFjcnN0ZS5zLmZjMS5wcilcbiBcdFx0XHRyZXR1cm4gMDtcbi1cdFx0cmV0dXJuIHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChsYXJnZV9jcnN0ZV90b19waHlzKCpjcnN0ZXAsIGdmbikpO1xuK1x0XHRza2V5LVx1MDAzZXNrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKSBcdTAwM2NcdTAwM2MgMTtcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRvbGQgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcbiBcdHBnc3RlID0gb2xkO1xuIFxuIFx0aWYgKCFwdGVwLVx1MDAzZWguaSkge1xuLVx0XHRyYyA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSk7XG4tXHRcdHBnc3RlLmhyID0gcmMgXHUwMDNlXHUwMDNlIDE7XG4rXHRcdHNrZXktXHUwMDNlc2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSkgXHUwMDNjXHUwMDNjIDE7XG4rXHRcdHBnc3RlLmhyID0gc2tleS1cdTAwM2VyO1xuIFx0fVxuLVx0cmMgfD0gKHBnc3RlLmdyIFx1MDAzY1x1MDAzYyAxKSB8IHBnc3RlLmdjO1xuK1x0c2tleS1cdTAwM2VyIHw9IHBnc3RlLmdyO1xuK1x0c2tleS1cdTAwM2VjIHw9IHBnc3RlLmdjO1xuIFx0cGdzdGUuZ3IgPSAwO1xuIFxuIFx0ZGF0X3VwZGF0ZV9wdGVwX3NkKG9sZCwgcGdzdGUsIHB0ZXApO1xuIFx0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XG4tXHRyZXR1cm4gcmM7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGxvbmcgZGF0X3Jlc2V0X3NrZXlzX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuQEAgLTg0Niw2ICs4NTAsNyBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxuIFx0c3RydWN0IHNsb3RfcHJpdiAqcCA9IHdhbGstXHUwMDNlcHJpdjtcbiBcdHVuaW9uIGNyc3RlIGR1bW15ID0geyAudmFsID0gcC1cdTAwM2V0b2tlbiB9O1xuIFx0dW5pb24gcHRlIG5ld19wdGUsIHB0ZSA9IFJFQURfT05DRSgqcHRlcCk7XG4rXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbiBcbiBcdG5ld19wdGUgPSBfUFRFX1RPSyhkdW1teS50b2sudHlwZSwgZHVtbXkudG9rLnBhcik7XG4gXG5AQCAtODUzLDcgKzg1OCwxMSBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxuIFx0aWYgKHB0ZS52YWwgPT0gbmV3X3B0ZS52YWwpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZGF0X3B0ZXBfeGNoZyhwdGVwLCBuZXdfcHRlLCBnZm4sIHdhbGstXHUwMDNlYXNjZSwgZmFsc2UpO1xuK1x0cGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcbitcdHBnc3RlID0gX19kYXRfcHRlcF94Y2hnKHB0ZXAsIHBnc3RlLCBuZXdfcHRlLCBnZm4sIHdhbGstXHUwMDNlYXNjZSwgZmFsc2UpO1xuK1x0cGdzdGUuY21tYV9kID0gMDtcbitcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmggYi9hcmNoL3MzOTAva3ZtL2RhdC5oXG5pbmRleCBmYWQ2MDUzMDVlMDVjLi4xNDFlZTdiOWYwMTkxIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuaFxuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuaFxuQEAgLTUzNyw3ICs1MzcsNyBAQCBpbnQgZGF0X3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZlxuIFx0XHRcdHVuaW9uIHNrZXkgc2tleSwgYm9vbCBucSk7XG4gaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRcdCAgICAgdW5pb24gc2tleSBza2V5LCB1bmlvbiBza2V5ICpvbGRrZXksIGJvb2wgbnEsIGJvb2wgbXIsIGJvb2wgbWMpO1xuLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbik7XG4raW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KTtcbiBsb25nIGRhdF9yZXNldF9za2V5cyh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KTtcbiBcbiB1bnNpZ25lZCBsb25nIGRhdF9nZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0pO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbmluZGV4IGZlZTgwMDQ3YmQ5NGYuLjNjYzQ1ZjdmNWIyZDcgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbkBAIC05MSw5ICs5MSw5IEBAIGludCBrdm1fczM5MF9mYXVsdGluX2dmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhXG4gXHRcdC8qIEFjY2VzcyBvdXRzaWRlIG1lbW9yeSwgYWRkcmVzc2luZyBleGNlcHRpb24uICovXG4gXHRcdGlmIChpc19ub3Nsb3RfcGZuKGYtXHUwMDNlcGZuKSlcbiBcdFx0XHRyZXR1cm4gUEdNX0FERFJFU1NJTkc7XG4tXHRcdC8qIFNpZ25hbCBwZW5kaW5nOiB0cnkgYWdhaW4uICovXG4tXHRcdGlmIChmLVx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9TSUdQRU5ESU5HKVxuLVx0XHRcdHJldHVybiAtRUFHQUlOO1xuK1x0XHQvKiBGYXRhbCBzaWduYWwgcGVuZGluZzogYmFpbCBvdXQuICovXG4rXHRcdGlmIChpc19zaWdwZW5kaW5nX3BmbihmLVx1MDAzZXBmbikpXG4rXHRcdFx0cmV0dXJuIC1FSU5UUjtcbiBcdFx0LyogQ2hlY2sgaWYgaXQncyByZWFkLW9ubHkgbWVtb3J5OyBkb24ndCB0cnkgdG8gYWN0dWFsbHkgaGFuZGxlIHRoYXQgY2FzZS4gKi9cbiBcdFx0aWYgKGYtXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1JPX0ZBVUxUKVxuIFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuaW5kZXggOWUzZTZiMGQ3MmFkNi4uNjAxM2YyOGUzNDYxZiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbkBAIC00NSwxMyArNDUsMTYgQEAgc3RhdGljIHN0cnVjdCBrdm1fczM5MF9naWIgKmdpYjtcbiBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXG4ge1xuIFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuLVx0dW5pb24gZXNjYV9zaWdwX2N0cmwgc2lncF9jdHJsID0gc2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbitcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybDtcbiBcbiBcdGlmICgha3ZtX3MzOTBfdGVzdF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdGlmIChLVk1fQlVHX09OKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSksIHZjcHUtXHUwMDNla3ZtKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTtcbiBcbitcdHNpZ3BfY3RybCA9IHNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4gXHRpZiAoc3JjX2lkKVxuIFx0XHQqc3JjX2lkID0gc2lncF9jdHJsLnNjbjtcbiBcbkBAIC02MCwxMyArNjMsMTYgQEAgc3RhdGljIGludCBzY2FfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqc3JjX2lkKVxuIFxuIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXG4ge1xuLVx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuLVx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4gXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCBvbGRfdmFsLCBuZXdfdmFsID0gey5zY24gPSBzcmNfaWQsIC5jID0gMX07XG4rXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4rXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsO1xuIFx0aW50IGV4cGVjdCwgcmM7XG4gXG4gXHRCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTtcbitcdGlmIChLVk1fQlVHX09OKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSksIHZjcHUtXHUwMDNla3ZtKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRzaWdwX2N0cmwgPSBcdTAwMjZzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuIFx0b2xkX3ZhbCA9IFJFQURfT05DRSgqc2lncF9jdHJsKTtcbiBcdG9sZF92YWwuYyA9IDA7XG4gXG5AQCAtODQsMTAgKzkwLDEzIEBAIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXG4gc3RhdGljIHZvaWQgc2NhX2NsZWFyX2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4tXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbitcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmw7XG4gXG4tXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxuK1x0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkIHx8IGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdHJldHVybjtcbitcbitcdC8qIEluaXRpYWxpemUgYWZ0ZXIgdGhlIGFib3ZlIGNoZWNrLCB0byBwcmV2ZW50IGdvaW5nIG91dCBvZiBib3VuZHMgKi9cbitcdHNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4gXHRrdm1fczM5MF9jbGVhcl9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpO1xuIFxuIFx0V1JJVEVfT05DRShzaWdwX2N0cmwtXHUwMDNldmFsdWUsIDApO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuaW5kZXggMTUwYjVkZDIxNzBlMi4uNjY4MjcyZGZmYTE4YiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5AQCAtNTcxLDcgKzU3MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wXG4gXHRzd2l0Y2ggKG9wKSB7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1NTS0U6XG4gXHRcdHIgPSBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkobWMsIGFzY2UsIGdmbiwgc2tleSwgXHUwMDI2c2tleSwgMCwgMCwgMCk7XG4tXHRcdGlmIChyIFx1MDAzZT0gMClcbitcdFx0aWYgKHIgPT0gMCB8fCByID09IDEpXG4gXHRcdFx0cmV0dXJuIHNrZXkuc2tleTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX0lTS0U6XG5AQCAtNTgwLDE0ICs1ODAsMTQgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3BcbiBcdFx0XHRyZXR1cm4gc2tleS5za2V5O1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfUlJCRTpcbi1cdFx0ciA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KGFzY2UsIGdmbik7XG4tXHRcdGlmIChyIFx1MDAzZSAwKVxuLVx0XHRcdHJldHVybiByIFx1MDAzY1x1MDAzYyAxO1xuK1x0XHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuLCBcdTAwMjZza2V5KTtcbitcdFx0aWYgKCFyKVxuK1x0XHRcdHJldHVybiBza2V5LnNrZXk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4tXHRyZXR1cm4gcjtcbitcdHJldHVybiByIFx1MDAzZSAwID8gLUVGQVVMVCA6IHI7XG4gfVxuIFxuIC8qIFNlY3Rpb246IGRldmljZSByZWxhdGVkICovXG5AQCAtMTIxOSw4ICsxMjE5LDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChzdHJ1Y3Qga3ZtICprdm0sIGludCByZXEpXG4gXG4gLypcbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cdTAwM2VzcmN1IGhlbGQgdG8gYXZvaWQgcmFjZXMgb24gbWVtc2xvdHMsIGFuZCB3aXRoXG4tICoga3ZtLVx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksXG4tICogYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cbisgKiBrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxuKyAqIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4gICovXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIHtcbkBAIC0xMjY1LDcgKzEyNjUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4gfVxuIFxuIC8qXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcbisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG4gICoga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKCkgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cbiAgKi9cbiBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbkBAIC0xMzAwLDcgKzEzMDAsOSBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxuIHtcbiBcdGludCByZXMgPSAtRU5YSU87XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcdGd1YXJkKHNyY3UpKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbitcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbitcbiBcdHN3aXRjaCAoYXR0ci1cdTAwM2VhdHRyKSB7XG4gXHRjYXNlIEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVDpcbiBcdFx0cmVzID0ga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKGt2bSk7XG5AQCAtMTMxMSw3ICsxMzEzLDYgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiBcbiBcdHJldHVybiByZXM7XG4gfVxuQEAgLTIyMTQsNyArMjIxNSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuIFx0fVxuIFxuIFx0a3ZmcmVlKGtleXMpO1xuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG5AQCAtMjI3Niw3ICsyMjc3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG4gXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XG4gb3V0OlxuIFx0a3ZmcmVlKGtleXMpO1xuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gLypcbkBAIC0yMzg2LDcgKzIzODcsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxuIFxuIFx0c2V0X2JpdChHTUFQX0ZMQUdfVVNFU19DTU0sIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlZmxhZ3MpO1xuIFxuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gLyoqXG5AQCAtMjkzNCw2ICsyOTM1LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0Y2FzZSBLVk1fUzM5MF9JTlRFUlJVUFQ6IHtcbiBcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50O1xuIFxuK1x0XHRyID0gLUVJTlZBTDtcbitcdFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxuK1x0XHRcdGJyZWFrO1xuIFx0XHRyID0gLUVGQVVMVDtcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMzOTBpbnQsIGFyZ3AsIHNpemVvZihzMzkwaW50KSkpXG4gXHRcdFx0YnJlYWs7XG5AQCAtMjk5OCw5ICszMDAyLDggQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyID0gLUVGQVVMVDtcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmFyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuLVx0XHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFx1MDAyNmFyZ3MpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuK1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spXG4rXHRcdFx0ciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbiBcdFx0aWYgKCFyKSB7XG4gXHRcdFx0ciA9IGNvcHlfdG9fdXNlcihhcmdwLCBcdTAwMjZhcmdzLCBzaXplb2YoYXJncykpO1xuIFx0XHRcdGlmIChyKVxuQEAgLTMwMTQsOSArMzAxNyw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhcmdzLCBhcmdwLCBzaXplb2YoYXJncykpKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcdFx0ciA9IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcdGNhc2UgS1ZNX1MzOTBfUFZfQ09NTUFORDoge1xuQEAgLTM0NjEsNyArMzQ2NCw3IEBAIHN0YXRpYyB2b2lkIHNjYV9kZWxfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuIFxuLVx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSlcbitcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Y2xlYXJfYml0X2ludih2Y3B1LVx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVx1MDAzZW1jbik7XG5AQCAtMzQ4MSw4ICszNDg0LDggQEAgc3RhdGljIHZvaWQgc2NhX2FkZF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXG4gXHRcdHJldHVybjtcbiBcbitcdFdSSVRFX09OQ0Uoc2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNkYSwgdmlydF90b19waHlzKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbiBcdHNldF9iaXRfaW52KHZjcHUtXHUwMDNldmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtXHUwMDNlbWNuKTtcbi1cdHNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zZGEgPSB2aXJ0X3RvX3BoeXModmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc2NhX2Nhbl9hZGRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbkBAIC0zNjEzLDYgKzM2MTYsOSBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS1cdTAwM2Vrdm0sIDc0KSB8fCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnVzZXJfaW5zdHIwIHx8XG4gXHQgICAgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC51c2VyX29wZXJleGVjKVxuIFx0XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWljdGwgfD0gSUNUTF9PUEVSRVhDO1xuK1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4ga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oKSBhbmQga3ZtX2FyY2hfdmNwdV9pb2N0bCgpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBrdm1faGFzX3Bja21vX3N1YmZ1bmMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG5yKVxuQEAgLTM2NzQsNyArMzY4MCw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiB2b2lkIGt2bV9zMzkwX3ZjcHVfdW5zZXR1cF9jbW1hKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8pKTtcbitcdGlmICh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKVxuK1x0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8pKTtcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8gPSAwO1xuIH1cbiBcbkBAIC0zNzkyLDIxICszNzk5LDIxIEBAIGludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitERUZJTkVfRlJFRShzaWVfcGFnZSwgc3RydWN0IHNpZV9wYWdlICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShfVCkpKVxuK1xuIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0c3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZTtcbitcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDtcbitcdHN0cnVjdCBzaWVfcGFnZSAqc2llX3BhZ2UgX19mcmVlKHNpZV9wYWdlKSA9IE5VTEw7XG4gXHRpbnQgcmM7XG4gXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzaWVfcGFnZSkgIT0gNDA5Nik7XG4tXHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XG4tXHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5tYylcbitcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuK1x0aWYgKCFtYylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRzaWVfcGFnZSA9IChzdHJ1Y3Qgc2llX3BhZ2UgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tXHRpZiAoIXNpZV9wYWdlKSB7XG4tXHRcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKHZjcHUtXHUwMDNlYXJjaC5tYyk7XG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5tYyA9IE5VTEw7XG4rXHRpZiAoIXNpZV9wYWdlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbiBcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2sgPSBcdTAwMjZzaWVfcGFnZS1cdTAwM2VzaWVfYmxvY2s7XG4gXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWl0ZGJhID0gdmlydF90b19waHlzKFx1MDAyNnNpZV9wYWdlLVx1MDAzZWl0ZGIpO1xuQEAgLTM4NDgsMTAgKzM4NTUsOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2Vrdm1fdmFsaWRfcmVncyB8PSBLVk1fU1lOQ19GUFJTO1xuIFxuIFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0cmMgPSAtRU5PTUVNO1xuIFx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfbmV3X2NoaWxkKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZ21hcCwgLTFVTCk7XG4gXHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLmdtYXApXG4tXHRcdFx0Z290byBvdXRfZnJlZV9zaWVfYmxvY2s7XG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRWTV9FVkVOVCh2Y3B1LVx1MDAzZWt2bSwgMywgXCJjcmVhdGUgY3B1ICVkIGF0IDB4JXAsIHNpZSBibG9jayBhdCAweCVwXCIsXG5AQCAtMzg1OSwyMCArMzg2NSwxOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0dHJhY2Vfa3ZtX3MzOTBfY3JlYXRlX3ZjcHUodmNwdS1cdTAwM2V2Y3B1X2lkLCB2Y3B1LCB2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKTtcbiBcbiBcdHJjID0ga3ZtX3MzOTBfdmNwdV9zZXR1cCh2Y3B1KTtcbi1cdGlmIChyYylcbi1cdFx0Z290byBvdXRfdWNvbnRyb2xfdW5pbml0O1xuK1x0aWYgKHJjKSB7XG4rXHRcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4rXHRcdFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlY2hpbGRyZW5fbG9jaylcbitcdFx0XHRcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbitcdFx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbitcdFx0fVxuK1x0XHRyZXR1cm4gcmM7XG4rXHR9XG4gXG4rXHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBub19mcmVlX3B0cihtYyk7XG4rXHRzaWVfcGFnZSA9IE5VTEw7XG4gXHRrdm1fczM5MF91cGRhdGVfdG9wb2xvZ3lfY2hhbmdlX3JlcG9ydCh2Y3B1LVx1MDAzZWt2bSwgMSk7XG4gXHRyZXR1cm4gMDtcbi1cbi1vdXRfdWNvbnRyb2xfdW5pbml0OlxuLVx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0Z21hcF9yZW1vdmVfY2hpbGQodmNwdS1cdTAwM2VhcmNoLmdtYXApO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbi1cdH1cbi1vdXRfZnJlZV9zaWVfYmxvY2s6XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbi1cdHJldHVybiByYztcbiB9XG4gXG4gaW50IGt2bV9hcmNoX3ZjcHVfcnVubmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTUwMzksNiArNTA0NCwxMCBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgIGt2bV9ydW4tXHUwMDNla3ZtX2RpcnR5X3JlZ3MgXHUwMDI2IH5LVk1fU1lOQ19TMzkwX1ZBTElEX0ZJRUxEUylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi9cbitcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHZjcHVfbG9hZCh2Y3B1KTtcbiBcbiBcdGlmIChndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpIHtcbkBAIC01NTIzLDYgKzU1MzIsMTAgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0bG9uZyByO1xuIFx0dTE2IHJjLCBycmM7XG4gXG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi9cbitcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHZjcHVfbG9hZCh2Y3B1KTtcbiBcbiBcdHN3aXRjaCAoaW9jdGwpIHtcbkBAIC01NzQ4LDExICs1NzYxLDMwIEBAIGJvb2wga3ZtX2FyY2hfaXJxY2hpcF9pbl9rZXJuZWwoc3RydWN0IGt2bSAqa3ZtKVxuIH1cbiBcbiAvKiBTZWN0aW9uOiBtZW1vcnkgcmVsYXRlZCAqL1xuK3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2Fsaylcbit7XG4rXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbitcbitcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4rXHRpZiAocGdzdGUuY21tYV9kKSB7XG4rXHRcdHBnc3RlLmNtbWFfZCA9IDA7XG4rXHRcdGF0b21pYzY0X2RlYyh3YWxrLVx1MDAzZXByaXYpO1xuK1x0fVxuK1x0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gaW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXG4gXHRcdFx0XHQgICBlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxuIHtcbitcdGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0geyAucHRlX2VudHJ5ID0gY21tYV9kX2NvdW50X3B0ZSwgfTtcbitcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDtcbitcdGludCByYyA9IC1FTk9NRU07XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuK1xuIFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pIFx1MDAyNlx1MDAyNiBuZXcgXHUwMDI2XHUwMDI2IG5ldy1cdTAwM2VpZCBcdTAwM2MgS1ZNX1VTRVJfTUVNX1NMT1RTKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC01Nzc1LDQzICs1ODA3LDM1IEBAIGludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0aWYgKCFrdm0tXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHQvKlxuLVx0ICogVHVybiBvZmYgbWlncmF0aW9uIG1vZGUgd2hlbjpcbi1cdCAqIC0gdXNlcnNwYWNlIGNyZWF0ZXMgYSBuZXcgbWVtc2xvdCB3aXRoIGRpcnR5IGxvZ2dpbmcgb2ZmLFxuLVx0ICogLSB1c2Vyc3BhY2UgbW9kaWZpZXMgYW4gZXhpc3RpbmcgbWVtc2xvdCAoTU9WRSBvciBGTEFHU19PTkxZKSBhbmRcbi1cdCAqICAgZGlydHkgbG9nZ2luZyBpcyB0dXJuZWQgb2ZmLlxuLVx0ICogTWlncmF0aW9uIG1vZGUgZXhwZWN0cyBkaXJ0eSBwYWdlIGxvZ2dpbmcgYmVpbmcgZW5hYmxlZCB0byBzdG9yZVxuLVx0ICogaXRzIGRpcnR5IGJpdG1hcC5cbi1cdCAqL1xuLVx0aWYgKGNoYW5nZSAhPSBLVk1fTVJfREVMRVRFIFx1MDAyNlx1MDAyNlxuLVx0ICAgICEobmV3LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUykpXG4tXHRcdFdBUk4oa3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oa3ZtKSxcbi1cdFx0ICAgICBcIkZhaWxlZCB0byBzdG9wIG1pZ3JhdGlvbiBtb2RlXCIpO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLVx0XHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxuLVx0XHRcdFx0Y29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LFxuLVx0XHRcdFx0ZW51bSBrdm1fbXJfY2hhbmdlIGNoYW5nZSlcbi17XG4tXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyA9IE5VTEw7XG4tXHRpbnQgcmMgPSAwO1xuK1x0aWYgKGt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFR1cm4gb2ZmIG1pZ3JhdGlvbiBtb2RlIHdoZW46XG4rXHRcdCAqIC0gdXNlcnNwYWNlIGNyZWF0ZXMgYSBuZXcgbWVtc2xvdCB3aXRoIGRpcnR5IGxvZ2dpbmcgb2ZmLFxuK1x0XHQgKiAtIHVzZXJzcGFjZSBtb2RpZmllcyBhbiBleGlzdGluZyBtZW1zbG90IChNT1ZFIG9yIEZMQUdTX09OTFkpXG4rXHRcdCAqICAgYW5kIGRpcnR5IGxvZ2dpbmcgaXMgdHVybmVkIG9mZi5cbitcdFx0ICogTWlncmF0aW9uIG1vZGUgZXhwZWN0cyBkaXJ0eSBwYWdlIGxvZ2dpbmcgYmVpbmcgZW5hYmxlZCB0b1xuK1x0XHQgKiBzdG9yZSBpdHMgZGlydHkgYml0bWFwLlxuK1x0XHQgKi9cbitcdFx0aWYgKGNoYW5nZSAhPSBLVk1fTVJfREVMRVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIShuZXctXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTKSlcbitcdFx0XHRXQVJOKGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKGt2bSksXG4rXHRcdFx0ICAgICBcIkZhaWxlZCB0byBzdG9wIG1pZ3JhdGlvbiBtb2RlXCIpO1xuK1x0fVxuIFxuIFx0aWYgKGNoYW5nZSA9PSBLVk1fTVJfRkxBR1NfT05MWSlcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gMDtcbiBcbiBcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuLVx0aWYgKCFtYykge1xuLVx0XHRyYyA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuK1x0aWYgKCFtYylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rcmV0cnk6XG4gXHRzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKSB7XG4rXHRcdGlmIChrdm0tXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gudXNlX2NtbWEgXHUwMDI2XHUwMDI2IG9sZCkge1xuK1x0XHRcdF9kYXRfd2Fsa19nZm5fcmFuZ2Uob2xkLVx1MDAzZWJhc2VfZ2ZuLCBvbGQtXHUwMDNlYmFzZV9nZm4gKyBvbGQtXHUwMDNlbnBhZ2VzLFxuK1x0XHRcdFx0XHQgICAga3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlLCBcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUyxcbitcdFx0XHRcdFx0ICAgIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMpO1xuK1x0XHR9XG4rXG4gXHRcdHN3aXRjaCAoY2hhbmdlKSB7XG4gXHRcdGNhc2UgS1ZNX01SX0RFTEVURTpcbiBcdFx0XHRyYyA9IGRhdF9kZWxldGVfc2xvdChtYywga3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlLCBvbGQtXHUwMDNlYmFzZV9nZm4sIG9sZC1cdTAwM2VucGFnZXMpO1xuQEAgLTU4MjcsMTQgKzU4NTEsMjEgQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdGNhc2UgS1ZNX01SX0ZMQUdTX09OTFk6XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4rXHRcdFx0cmMgPSAwO1xuIFx0XHRcdFdBUk4oMSwgXCJVbmtub3duIEtWTSBNUiBDSEFOR0U6ICVkXFxuXCIsIGNoYW5nZSk7XG4gXHRcdH1cbiBcdH1cbi1vdXQ6XG4tXHRpZiAocmMpXG4tXHRcdHByX3dhcm4oXCJmYWlsZWQgdG8gY29tbWl0IG1lbW9yeSByZWdpb25cXG5cIik7XG4tXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XG4tXHRyZXR1cm47XG4rXHRpZiAocmMgPT0gLUVOT01FTSkge1xuK1x0XHRyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbitcdHJldHVybiByYztcbit9XG4rXG4rdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcbitcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldywgZW51bSBrdm1fbXJfY2hhbmdlIGNoYW5nZSlcbit7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbmluZGV4IGFkMGRkYzQzM2E3M2MuLmIxYmEyNGMzNDZlZmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbkBAIC0yODksNiArMjg5LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaXNrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBnYWRkcjtcbitcdHVuaW9uIHNrZXkgc2tleTtcbiBcdGludCByZWcxLCByZWcyO1xuIFx0aW50IHJjO1xuIFxuQEAgLTMwNywxMiArMzA4LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0Z2FkZHIgPSBrdm1fczM5MF9sb2dpY2FsX3RvX2VmZmVjdGl2ZSh2Y3B1LCBnYWRkcik7XG4gXHRnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTtcbiBcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpKTtcbitcdFx0cmMgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh2Y3B1LVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSwgXHUwMDI2c2tleSk7XG4gXHRpZiAocmMgXHUwMDNlIDApXG4gXHRcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgcmMpO1xuIFx0aWYgKHJjIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmM7XG4tXHRrdm1fczM5MF9zZXRfcHN3X2NjKHZjcHUsIHJjKTtcbitcdGt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgKHNrZXkuc2tleSBcdTAwM2VcdTAwM2UgMSkgXHUwMDI2IDMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEyNjAsOCArMTI2MSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqL1xuIFx0XHRrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTtcbiBcdH0gZWxzZSB7XG4tXHRcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcbitcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spXG4rXHRcdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4rXHRcdFx0XHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XG4gXHRcdGlmIChpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuaW5kZXggMWJlYWNjODQxY2E4NS4uYjAyZTAxNTlkM2NkMiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHYuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9wdi5jXG5AQCAtMjQ0LDYgKzI0NCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9jbGVhcl9wdl9zdGF0ZShzdHJ1Y3Qga3ZtICprdm0pXG4gXHRrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IE5VTEw7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcmVlX3N0b3JfYmFzZSlcbit7XG4rXHRpZiAoZnJlZV9zdG9yX2Jhc2UpXG4rXHRcdGZyZWVfcGFnZXModmNwdS1cdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSwgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XG4rXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbitcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NwdSA9IDA7XG4rXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jb25maWcgPSAwO1xuK1x0bWVtc2V0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXHUwMDNlYXJjaC5wdikpO1xuK1x0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VzZGYgPSAwO1xuK1x0LypcbitcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXG4rXHQgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2ZcbitcdCAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuXG4rXHQgKi9cbitcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZ2JlYSA9IDE7XG4rXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcbit9XG4rXG4gaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4ge1xuIFx0aW50IGNjO1xuQEAgLTI1OCwyNCArMjc2LDkgQEAgaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gXHRXQVJOX09OQ0UoY2MsIFwicHJvdHZpcnQgZGVzdHJveSBjcHUgZmFpbGVkIHJjICV4IHJyYyAleFwiLCAqcmMsICpycmMpO1xuIFxuIFx0LyogSW50ZW5kZWQgbWVtb3J5IGxlYWsgZm9yIHNvbWV0aGluZyB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4uICovXG4tXHRpZiAoIWNjKVxuLVx0XHRmcmVlX3BhZ2VzKHZjcHUtXHUwMDNlYXJjaC5wdi5zdG9yX2Jhc2UsXG4tXHRcdFx0ICAgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XG4tXG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NwdSA9IDA7XG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jb25maWcgPSAwO1xuLVx0bWVtc2V0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXHUwMDNlYXJjaC5wdikpO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VzZGYgPSAwO1xuLVx0Lypcbi1cdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXG4tXHQgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2Zcbi1cdCAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuXG4tXHQgKi9cbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZ2JlYSA9IDE7XG4tXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcbitcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsICFjYyk7XG4gXG4tXHRyZXR1cm4gY2MgPyBFSU8gOiAwO1xuK1x0cmV0dXJuIGNjID8gLUVJTyA6IDA7XG4gfVxuIFxuIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG5AQCAtMzE5LDkgKzMyMiw3IEBAIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gXHRcdCAgICAgdXZjYi5oZWFkZXIucnJjKTtcbiBcbiBcdGlmIChjYykge1xuLVx0XHR1MTYgZHVtbXk7XG4tXG4tXHRcdGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHZjcHUsIFx1MDAyNmR1bW15LCBcdTAwMjZkdW1teSk7XG4rXHRcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsIHRydWUpO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcbkBAIC04MDksNyArODEwLDcgQEAgc3RhdGljIGludCB1bnBhY2tfb25lKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgdHdlYWssXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHR9XG4gXG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTilcbitcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUFHQUlOIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVJTlRSKVxuIFx0XHRLVk1fVVZfRVZFTlQoa3ZtLCAzLCBcIlBST1RWSVJUIFZNIFVOUEFDSzogZmFpbGVkIGFkZHIgJWxseCB3aXRoIHJjICV4IHJyYyAleFwiLFxuIFx0XHRcdCAgICAgdXZjYi5nYWRkciwgKnJjLCAqcnJjKTtcbiBcdHJldHVybiByZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0Mjo1NC44MjM5OTgyNzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDgxMjE1MTYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHMzOTAgS1ZNIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggdGFyZ2V0aW5nIHMzOTAgS1ZNLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgc3VnZ2VzdHMgYSBzZXQgb2YgcmVmaW5lbWVudHMgYW5kIGZpeGVzIGFjcm9zcyBzZXZlcmFsIGNyaXRpY2FsIGFyZWFzLiBGaXJzdCwgSSBzZWUgYSBuZXcgYm9vbGVhbiwgYGluaXRpYWxpemVkYCwgYmVpbmcgaW50cm9kdWNlZCB3aXRoaW4gYHN0cnVjdCBrdm1fdmNwdV9hcmNoYC4gVGhpcyBsaWtlbHkgYWRkcmVzc2VzIGluaXRpYWxpemF0aW9uIHJhY2VzLiBUaGVuIEkgYW0gZ29pbmcgdG8gc2VlIGhvdyBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgIGlzIG5vdyB0YWtpbmcgYSBgdW5pb24gc2tleSAqc2tleWAgcGFyYW1ldGVyIGFuZCByZXR1cm5pbmcgdGhlIHNrZXkgdmlhIHBvaW50ZXIgYW5kIGFsc28gaG93IGBfZGF0X3Nsb3RfcHRlYCBjbGVhcnMgYHBnc3RlLmNtbWFfZGAgZHVyaW5nIFBURSBleGNoYW5nZXMuIFRoZXNlIGluZGljYXRlIGNoYW5nZXMgaW4gU2VjdXJlIEtleSBtYW5hZ2VtZW50IGFuZCBDTU1Bcy5cblxuVGhlIGNoYW5nZSBpbiBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gIGlzIGltbWVkaWF0ZWx5IGFwcGFyZW50LiBXZSdyZSBzaGlmdGluZyBmcm9tIHJldHJ5aW5nIG9uIGBLVk1fUEZOX0VSUl9TSUdQRU5ESU5HYCB0byBiYWlsaW5nIG91dCB3aXRoIGBFSU5UUmAgd2hlbiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGlzIGlzIGEgc2Vuc2libGUgY2hhbmdlIGluIGVycm9yIGhhbmRsaW5nLlxuXG5UaGUgaW50cm9kdWN0aW9uIG9mIGNoZWNrcyBmb3IgYGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSlgIGFuZCBgdmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkYCB3aXRoaW4gdGhlIGludGVycnVwdCBoYW5kbGluZyBmdW5jdGlvbnMgKGBzY2FfZXh0X2NhbGxfcGVuZGluZ2AsIGBzY2FfaW5qZWN0X2V4dF9jYWxsYCwgYW5kIGBzY2FfY2xlYXJfZXh0X2NhbGxgKSBpbW1lZGlhdGVseSBjYXB0dXJlcyBteSBhdHRlbnRpb24uIFRoaXMgc3VnZ2VzdHMgdGlnaHRlciBjb250cm9sIGFuZCBwb3RlbnRpYWxseSBzZWN1cml0eS1yZWxhdGVkIHJlZmluZW1lbnRzIGZvciBVc2VyIENvbnRyb2wgc2NlbmFyaW9zLlxuXG5Mb29raW5nIGF0IGBrdm0tczM5MC5jYCwgSSBzZWUgdGhhdCBga3ZtX3MzOTBfa2V5b3BgIGlzIHVwZGF0ZWQgdG8gdGhlIG5ldyBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgIHNpZ25hdHVyZS4gVGhlIGxvY2tpbmcgc3RyYXRlZ3kgZm9yIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCBhcHBlYXJzIHRvIGJlIHJlZmluZWQsIHNoaWZ0aW5nIHRvIGBzcmN1YCBhbmQgYG11dGV4YCBndWFyZHMsIHdoaWNoIGNvdWxkIGhhdmUgaW1wbGljYXRpb25zIG9uIGNvbmN1cnJlbmN5LiBUaGUgZXJyb3IgcmV0dXJuIHZhbHVlcyBoYXZlIGJlZW4gaG9tb2dlbml6ZWQgdG8gYC1FRkFVTFRgIGluIHNldmVyYWwgYGt2bV9zMzkwX2AgZnVuY3Rpb25zLiBUaGUgdXNlIG9mIGBzbG90c19hcmNoX2xvY2tgIGNvbnNpc3RlbnRseSB3aXRoaW4gdGhlIHJlbGV2YW50IGlvY3RscyBhbmQgdGhlIHNjYSBmdW5jdGlvbnMgZm9yIGFkZGluZyBhbmQgZGVsZXRpbmcgdkNQVXMgc2VlbXMgdG8gYmUgYSBzaWduaWZpY2FudCBsb2NraW5nIHN0cmF0ZWd5IGNoYW5nZS4gSW1wb3J0YW50bHksIEkgbm90ZSB0aGUgdXNlIG9mIGBzbXBfc3RvcmVfcmVsZWFzZWAgd2hlbiBzZXR0aW5nIGB2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQgPSB0cnVlYCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbWVtb3J5IG9yZGVyaW5nLiBUaGUgY2xlYW51cCBpbiBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgIGxldmVyYWdpbmcgYF9fZnJlZWAgbWFjcm9zIGFuZCB0aGUgZGlmZmVyZW50IGhhbmRsaW5nIG9mIGBrdm1faXNfdWNvbnRyb2xgIGFyZSBhbHNvIGludGVyZXN0aW5nLiBUaGUgY2hlY2tzIG9mIGBzbXBfbG9hZF9hY3F1aXJlYCBpbiB0aGUgcnVuIGFuZCBpb2N0bCBhcmUgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBpcyBjb3JyZWN0LiBGaW5hbGx5LCB0aGUgcmVmYWN0b3Jpbmcgb2YgbWVtb3J5IHJlZ2lvbiBwcmVwYXJhdGlvbiBhbmQgY29tbWl0IGxvb2tzIHNpZ25pZmljYW50LCB3aXRoIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgbm93IGhhbmRsaW5nIG1pZ3JhdGlvbiBhbmQgQ01NQSBtb2RlcyBpbiBjb25qdW5jdGlvbiB3aXRoIGBfZGF0X3dhbGtfZ2ZuX3JhbmdlYC5cblxuVGhlIGNvZGUgd2l0aGluIGBwcml2LmNgIGNvbmZpcm1zIHRoZSBuZXcgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCBzaWduYXR1cmUgaXMgaW4gdXNlIGFuZCB0aGF0IGBzbG90c19hcmNoX2xvY2tgIGlzIG5vdyBiZWluZyB0YWtlbiBhcm91bmQgdGhlIGBfX2RvX2Vzc2FgIGluIGBoYW5kbGVfZXNzYWAuXG5cbkFuZCBmaW5hbGx5LCBgcHYuY2Agc2hvd3MgZnVuY3Rpb24gcmUtYXJyYW5nZW1lbnQgZm9yIENQVSBkaXNwb3NhbCBhbmQgdGhhdCBgLUVJTlRSYCBoYW5kbGluZyBpbiBgdW5wYWNrX29uZWAuXG5cbkluIHN1bW1hcnksIHRoaXMgc2VlbXMgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgczM5MCBLVk0gc3Vic3lzdGVtLCBhbmQgaXQncyBjZXJ0YWlubHkgd29ydGggZnV6emluZyB0byB1bmNvdmVyIGFueSByZW1haW5pbmcgaXNzdWVzLiBTaW5jZSBzeXprYWxsZXIgc3VwcG9ydHMgczM5MHggYW5kIEtWTSBvbiBzMzkweCwgdGhhdCBzZWVtcyBsaWtlIGEgdmlhYmxlIHBhdGguXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBJZGVhbGx5LCB0aGVzZSBzaG91bGQgYmUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBHaXZlbiB0aGUgcGF0Y2gsIHNvbWUgcHJvbWlzaW5nIGNhbmRpZGF0ZXMgaW5jbHVkZTpcblxuKiAgIGBrdm1fYXJjaF92bV9pb2N0bGA6IEEgZ2VuZXJhbCBpb2N0bCBlbnRyeXBvaW50LlxuKiAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YDogTm9uLXN0YXRpYyBhbmQgc2VlbXMgdG8gYmUgYSBnb29kIGVudHJ5IHBvaW50LlxuKiAgIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWA6IE5vbi1zdGF0aWMgYW5kIHNlZW1zIHRvIGJlIGEgZ29vZCBlbnRyeSBwb2ludC5cbiogICBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgOiBOb24tc3RhdGljIGFuZCBwYXJ0IG9mIGEgc2lnbmlmaWNhbnQgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlLlxuKiAgIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmA6IEFsc28gbW9kaWZpZWQgc2lnbmlmaWNhbnRseS5cblxuSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRvIGNvbmZpcm0gdGhhdCBDT05GSUdcXF9LVk0gaXMgc2V0LCBhbmQgY29uZmlybSB0aGVzZSBub24tc3RhdGljIGZ1bmN0aW9ucyBleGlzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjkzLCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjQzOjM5LjYzNjE1MjU2N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTI3OTM2NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZHxsb25nfGJvb2wpIFthLXpBLVowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEzNTQgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMzAtXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzozMTppbnQga3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jKVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMzIte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYz03Nj1zdHJ1Y3QgY3JzdF90YWJsZSAqZGF0X2FsbG9jX2Nyc3Rfc2xlZXBhYmxlKHVuc2lnbmVkIGxvbmcgaW5pdClcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtODktXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzo5MDp2b2lkIGRhdF9mcmVlX2xldmVsKHN0cnVjdCBjcnN0X3RhYmxlICp0YWJsZSwgYm9vbCBvd25zX3B0ZXMpXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy05MS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEwNC1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEwNTppbnQgZGF0X3NldF9hc2NlX2xpbWl0KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlICphc2NlLCBpbnQgbmV3dHlwZSlcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEwNi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTMwMj1zdGF0aWMgaW50IGRhdF9zcGxpdF9jcnN0ZShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gY3JzdGUgKmNyc3RlcCxcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMzc4LSAqL1xcbmFyY2gvczM5MC9rdm0vZGF0LmM6Mzc5OmludCBkYXRfZW50cnlfd2FsayhzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgZ2ZuX3QgZ2ZuLCB1bmlvbiBhc2NlIGFzY2UsIGludCBmbGFncyxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTM4MC1cXHRcXHQgICBpbnQgd2Fsa19sZXZlbCwgdW5pb24gY3JzdGUgKipsYXN0LCB1bmlvbiBwdGUgKipwdGVwcClcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmM9NTM0PXN0YXRpYyBsb25nIGRhdF9jcnN0ZV93YWxrX3JhbmdlKGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIHN0cnVjdCBjcnN0X3RhYmxlICp0YWJsZSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtNTk0LSAqL1xcbmFyY2gvczM5MC9rdm0vZGF0LmM6NTk1OmxvbmcgX2RhdF93YWxrX2dmbl9yYW5nZShnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCB1bmlvbiBhc2NlIGFzY2UsXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy01OTYtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgKm9wcywgaW50IGZsYWdzLCB2b2lkICpwcml2KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy02MTUtXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzo2MTY6aW50IGRhdF9nZXRfc3RvcmFnZV9rZXkodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy02MTcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYz02NTA9c3RhdGljIHZvaWQgZGF0X3VwZGF0ZV9wdGVwX3NkKHVuaW9uIHBnc3RlIG9sZCwgdW5pb24gcGdzdGUgcGdzdGUsIHVuaW9uIHB0ZSAqcHRlcClcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtNjU1LVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6NjU2OmludCBkYXRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbixcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTY1Ny1cXHRcXHRcXHR1bmlvbiBza2V5IHNrZXksIGJvb2wgbnEpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTcwMD1zdGF0aWMgYm9vbCBwYWdlX2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHBoeXNfYWRkcl90IHBhZGRyLCB1bmlvbiBza2V5IHNrZXksIHVuaW9uIHNrZXkgKm9sZGtleSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtNzEwLVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6NzExOmludCBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbW1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbixcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTcxMi1cXHRcXHRcXHQgICAgIHVuaW9uIHNrZXkgc2tleSwgdW5pb24gc2tleSAqb2xka2V5LCBib29sIG5xLCBib29sIG1yLCBib29sIG1jKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy03NTctXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzo3NTg6aW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtNzU5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmM9ODEzPXN0YXRpYyBsb25nIGRhdF9yZXNldF9za2V5c19jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtODMxLVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6ODMyOmxvbmcgZGF0X3Jlc2V0X3NrZXlzKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3Qgc3RhcnQpXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy04MzMte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYz05MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgZGF0X3Nsb3Rfb3BzID0ge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy05MDYtXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzo5MDc6aW50IGRhdF9zZXRfc2xvdChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxcbmFyY2gvczM5MC9rdm0vZGF0LmMtOTA4LVxcdFxcdCB1MTYgdHlwZSwgdTE2IHBhcmFtKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYz05NDQ9dW5zaWduZWQgbG9uZyBkYXRfZ2V0X3B0dmFsKHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IHB0dmFsX3BhcmFtIHBhcmFtKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy05NjEtXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzo5NjI6dm9pZCBkYXRfc2V0X3B0dmFsKHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IHB0dmFsX3BhcmFtIHBhcmFtLCB1bnNpZ25lZCBsb25nIHZhbClcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTk2My17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTk5MT1zdGF0aWMgY29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyB0ZXN0X2FnZV9vcHMgPSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEwMDYtICovXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMDA3OmJvb2wgZGF0X3Rlc3RfYWdlX2dmbih1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQpXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMDA4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmM9MTAzMD1zdGF0aWMgbG9uZyBkYXRfc2V0X3BuX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMDQzLVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTA0NDppbnQgZGF0X3NldF9wcmVmaXhfbm90aWZfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTA0NS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEwNzQtICovXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMDc1OmludCBkYXRfcGVyZm9ybV9lc3NhKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCBpbnQgb3JjLCB1bmlvbiBlc3NhX3N0YXRlICpzdGF0ZSwgYm9vbCAqZGlydHkpXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMDc2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmM9MTE1Nj1zdGF0aWMgbG9uZyBkYXRfcmVzZXRfY21tYV9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE2OS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjExNzA6bG9uZyBkYXRfcmVzZXRfY21tYSh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE3MS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTEyMDE9c3RhdGljIGxvbmcgX19kYXRfcGVla19jbW1hX2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjA5LVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIxMDppbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIxMS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTEyMjg9c3RhdGljIGxvbmcgX19kYXRfZ2V0X2NtbWFfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyNTUtXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMjU2OmludCBkYXRfZ2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCAqc3RhcnQsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMsIGF0b21pYzY0X3QgKnJlbSlcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyNTcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYz0xMjg2PXN0YXRpYyBsb25nIF9fZGF0X3NldF9jbW1hX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMzE4LSAqL1xcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTMxOTppbnQgZGF0X3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTMyMC1cXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25nIG1hc2ssIGNvbnN0IHVpbnQ4X3QgKmJpdHMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5oPTUyMT11bmlvbiBwZ3N0ZSBfX211c3RfY2hlY2sgX19kYXRfcHRlcF94Y2hnKHVuaW9uIHB0ZSAqcHRlcCwgdW5pb24gcGdzdGUgcGdzdGUsIHVuaW9uIHB0ZSBuZXcsXFxuYXJjaC9zMzkwL2t2bS9kYXQuaC01MjItXFx0XFx0XFx0XFx0XFx0IGdmbl90IGdmbiwgdW5pb24gYXNjZSBhc2NlLCBib29sIHVzZXNfc2tleXMpO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTIzOmJvb2wgZGF0X2Nyc3RlcF94Y2hnX2F0b21pYyh1bmlvbiBjcnN0ZSAqY3JzdGVwLCB1bmlvbiBjcnN0ZSBvbGQsIHVuaW9uIGNyc3RlIG5ldywgZ2ZuX3QgZ2ZuLFxcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTI0LVxcdFxcdFxcdCAgICB1bmlvbiBhc2NlIGFzY2UpO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTI1OnZvaWQgZGF0X2Nyc3RlcF94Y2hnKHVuaW9uIGNyc3RlICpjcnN0ZXAsIHVuaW9uIGNyc3RlIG5ldywgZ2ZuX3QgZ2ZuLCB1bmlvbiBhc2NlIGFzY2UpO1xcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTI2LVxcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTI3OmxvbmcgX2RhdF93YWxrX2dmbl9yYW5nZShnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCB1bmlvbiBhc2NlIGFzY2UsXFxuYXJjaC9zMzkwL2t2bS9kYXQuaC01MjgtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgKm9wcywgaW50IGZsYWdzLCB2b2lkICpwcml2KTtcXG5hcmNoL3MzOTAva3ZtL2RhdC5oLTUyOS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5oOjUzMDppbnQgZGF0X2VudHJ5X3dhbGsoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIGdmbl90IGdmbiwgdW5pb24gYXNjZSBhc2NlLCBpbnQgZmxhZ3MsXFxuYXJjaC9zMzkwL2t2bS9kYXQuaC01MzEtXFx0XFx0ICAgaW50IHdhbGtfbGV2ZWwsIHVuaW9uIGNyc3RlICoqbGFzdCwgdW5pb24gcHRlICoqcHRlcHApO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTMyOnZvaWQgZGF0X2ZyZWVfbGV2ZWwoc3RydWN0IGNyc3RfdGFibGUgKnRhYmxlLCBib29sIG93bnNfcHRlcyk7XFxuYXJjaC9zMzkwL2t2bS9kYXQuaC01MzMtc3RydWN0IGNyc3RfdGFibGUgKmRhdF9hbGxvY19jcnN0X3NsZWVwYWJsZSh1bnNpZ25lZCBsb25nIGluaXQpO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTM0OmludCBkYXRfc2V0X2FzY2VfbGltaXQoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgKmFzY2UsIGludCBuZXd0eXBlKTtcXG5hcmNoL3MzOTAva3ZtL2RhdC5oOjUzNTppbnQgZGF0X2dldF9zdG9yYWdlX2tleSh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSk7XFxuYXJjaC9zMzkwL2t2bS9kYXQuaDo1MzY6aW50IGRhdF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTM3LVxcdFxcdFxcdHVuaW9uIHNrZXkgc2tleSwgYm9vbCBucSk7XFxuYXJjaC9zMzkwL2t2bS9kYXQuaDo1Mzg6aW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTM5LVxcdFxcdFxcdCAgICAgdW5pb24gc2tleSBza2V5LCB1bmlvbiBza2V5ICpvbGRrZXksIGJvb2wgbnEsIGJvb2wgbXIsIGJvb2wgbWMpO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTQwOmludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSk7XFxuYXJjaC9zMzkwL2t2bS9kYXQuaDo1NDE6bG9uZyBkYXRfcmVzZXRfc2tleXModW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCk7XFxuYXJjaC9zMzkwL2t2bS9kYXQuaC01NDItXFxuYXJjaC9zMzkwL2t2bS9kYXQuaD01NDM9dW5zaWduZWQgbG9uZyBkYXRfZ2V0X3B0dmFsKHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IHB0dmFsX3BhcmFtIHBhcmFtKTtcXG5hcmNoL3MzOTAva3ZtL2RhdC5oOjU0NDp2b2lkIGRhdF9zZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0sIHVuc2lnbmVkIGxvbmcgdmFsKTtcXG5hcmNoL3MzOTAva3ZtL2RhdC5oLTU0NS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5oOjU0NjppbnQgZGF0X3NldF9zbG90KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXFxuYXJjaC9zMzkwL2t2bS9kYXQuaC01NDctXFx0XFx0IHUxNiB0eXBlLCB1MTYgcGFyYW0pO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTQ4OmludCBkYXRfc2V0X3ByZWZpeF9ub3RpZl9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTQ5OmJvb2wgZGF0X3Rlc3RfYWdlX2dmbih1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQpO1xcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTUwLVxcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTUxOmludCBkYXRfcGVyZm9ybV9lc3NhKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCBpbnQgb3JjLCB1bmlvbiBlc3NhX3N0YXRlICpzdGF0ZSwgYm9vbCAqZGlydHkpO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTUyOmxvbmcgZGF0X3Jlc2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydF9nZm4pO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTUzOmludCBkYXRfcGVla19jbW1hKGdmbl90IHN0YXJ0LCB1bmlvbiBhc2NlIGFzY2UsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMpO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTU0OmludCBkYXRfZ2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCAqc3RhcnQsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMsIGF0b21pYzY0X3QgKnJlbSk7XFxuYXJjaC9zMzkwL2t2bS9kYXQuaDo1NTU6aW50IGRhdF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbixcXG5hcmNoL3MzOTAva3ZtL2RhdC5oLTU1Ni1cXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25nIG1hc2ssIGNvbnN0IHVpbnQ4X3QgKmJpdHMpO1xcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTU3LVxcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTU4OmludCBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMpO1xcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTU5LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kaWFnLmM9MjY2PXN0YXRpYyBpbnQgX19kaWFnX3ZpcnRpb19oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kaWFnLmMtMzAxLVxcbmFyY2gvczM5MC9rdm0vZGlhZy5jOjMwMjppbnQga3ZtX3MzOTBfaGFuZGxlX2RpYWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vZGlhZy5jLTMwMy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0xNC1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzoxNTpib29sIGt2bV9hcmNoX3NldHVwX2FzeW5jX3BmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTYtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0zMi0gKi9cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzozMzppbnQga3ZtX3MzOTBfZmF1bHRpbl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYXVsdCAqZilcXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0zNC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0xMjgtXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6MTI5OmludCBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYXVsdCAqZiwgZ2ZuX3QgZ2ZuLCBib29sIHcpXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTMwLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5oLTE1LVxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5oOjE2OmludCBrdm1fczM5MF9mYXVsdGluX2dmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmKTtcXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uaDoxNzppbnQga3ZtX3MzOTBfZ2V0X2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmYsIGdmbl90IGdmbiwgYm9vbCB3KTtcXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uaC0xOC1cXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jPTExMj11bmlvbiBvYWMge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTMzLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjEzNDppbnQgaXB0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEzNS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYz0yMDI9c3RhdGljIHZvaWQgaXB0ZV91bmxvY2tfc2lpZihzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0yMTctXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6MjE4OnZvaWQgaXB0ZV9sb2NrKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0yMTkte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMjI1LVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjIyNjp2b2lkIGlwdGVfdW5sb2NrKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0yMjcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM9ODgyPXN0YXRpYyBpbnQgYWNjZXNzX2d1ZXN0X3BhZ2Vfd2l0aF9rZXlfZ3BhKHN0cnVjdCBrdm0gKmt2bSwgZW51bSBnYWNjX21vZGUgbW9kZSwgZ3BhX3QgZ3BhLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtOTA4LVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjkwOTppbnQgYWNjZXNzX2d1ZXN0X2Fic193aXRoX2tleShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgdm9pZCAqZGF0YSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy05MTAtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIGVudW0gZ2FjY19tb2RlIG1vZGUsIHU4IGFjY2Vzc19rZXkpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy05MjgtXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6OTI5OmludCBhY2Nlc3NfZ3Vlc3Rfd2l0aF9rZXkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdhLCB1OCBhcixcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy05MzAtXFx0XFx0XFx0ICB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGxlbiwgZW51bSBnYWNjX21vZGUgbW9kZSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEwMDgtXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6MTAwOTppbnQgYWNjZXNzX2d1ZXN0X3JlYWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xMDEwLVxcdFxcdCAgICAgIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbGVuLCBlbnVtIGdhY2NfbW9kZSBtb2RlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM9MTEwND1zdGF0aWMgdm9pZCBfY21weGNoZ19ndWVzdF9hYnNfd2l0aF9rZXkoc3RydWN0IGd1ZXN0X2ZhdWx0ICpmKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTEzNi0gKi9cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYzoxMTM3OmludCBjbXB4Y2hnX2d1ZXN0X2Fic193aXRoX2tleShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgaW50IGxlbiwgdW5pb24ga3ZtX3MzOTBfcXVhZCAqb2xkLFxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTExMzgtXFx0XFx0XFx0ICAgICAgIHVuaW9uIGt2bV9zMzkwX3F1YWQgbmV3LCB1OCBhY2MsIGJvb2wgKnN1Y2Nlc3MpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xMTgzLSAqL1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjExODQ6aW50IGd1ZXN0X3RyYW5zbGF0ZV9hZGRyZXNzX3dpdGhfa2V5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBndmEsIHU4IGFyLFxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTExODUtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpncGEsIGVudW0gZ2FjY19tb2RlIG1vZGUsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xMjA3LSAqL1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjEyMDg6aW50IGNoZWNrX2d2YV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhLCB1OCBhcixcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xMjA5LVxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCwgZW51bSBnYWNjX21vZGUgbW9kZSwgdTggYWNjZXNzX2tleSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEyMzItICovXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM6MTIzMzppbnQgY2hlY2tfZ3BhX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGEsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLFxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEyMzQtXFx0XFx0ICAgIGVudW0gZ2FjY19tb2RlIG1vZGUsIHU4IGFjY2Vzc19rZXkpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xMjU3LSAqL1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjEyNTg6aW50IGt2bV9zMzkwX2NoZWNrX2xvd19hZGRyX3Byb3RfcmVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3JhKVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTEyNTkte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmM9MTY0Nj1zdGF0aWMgaW50IF9fZ2FjY2Vzc19zaGFkb3dfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZ21hcCAqc2csIGdwYV90IHNhZGRyLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTY3MC1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYzoxNjcxOmludCBnYWNjZXNzX3NoYWRvd19mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBnbWFwICpzZywgZ3BhX3Qgc2FkZHIsXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTY3Mi1cXHRcXHRcXHQgdW5pb24gbXZwZ19wZWkgKmRhdHB0ciwgYm9vbCB3cilcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTE0OD1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjE0OTppbnQgd3JpdGVfZ3Vlc3RfbGMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSwgdm9pZCAqZGF0YSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0xNTAtXFx0XFx0ICAgdW5zaWduZWQgbG9uZyBsZW4pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaD0xNzQ9c3RhdGljIGlubGluZSBfX211c3RfY2hlY2tcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDoxNzU6aW50IHJlYWRfZ3Vlc3RfbGMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSwgdm9pZCAqZGF0YSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0xNzYtXFx0XFx0ICB1bnNpZ25lZCBsb25nIGxlbilcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTE4Mz1lbnVtIGdhY2NfbW9kZSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0xODgtXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6MTg5OmludCBndWVzdF90cmFuc2xhdGVfYWRkcmVzc193aXRoX2tleShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3ZhLCB1OCBhcixcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0xOTAtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpncGEsIGVudW0gZ2FjY19tb2RlIG1vZGUsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0xOTItXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6MTkzOmludCBjaGVja19ndmFfcmFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGd2YSwgdTggYXIsXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMTk0LVxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCwgZW51bSBnYWNjX21vZGUgbW9kZSwgdTggYWNjZXNzX2tleSk7XFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMTk1LVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjE5NjppbnQgY2hlY2tfZ3BhX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGEsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLFxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTE5Ny1cXHRcXHQgICAgZW51bSBnYWNjX21vZGUgbW9kZSwgdTggYWNjZXNzX2tleSk7XFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMTk4LVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjE5OTppbnQgYWNjZXNzX2d1ZXN0X2Fic193aXRoX2tleShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgdm9pZCAqZGF0YSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0yMDAtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIGVudW0gZ2FjY19tb2RlIG1vZGUsIHU4IGFjY2Vzc19rZXkpO1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTIwMS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDoyMDI6aW50IGFjY2Vzc19ndWVzdF93aXRoX2tleShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ2EsIHU4IGFyLFxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTIwMy1cXHRcXHRcXHQgIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbGVuLCBlbnVtIGdhY2NfbW9kZSBtb2RlLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMjA1LVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjIwNjppbnQgYWNjZXNzX2d1ZXN0X3JlYWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0yMDctXFx0XFx0ICAgICAgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBsZW4sIGVudW0gZ2FjY19tb2RlIG1vZGUpO1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTIwOC1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDoyMDk6aW50IGNtcHhjaGdfZ3Vlc3RfYWJzX3dpdGhfa2V5KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBpbnQgbGVuLCB1bmlvbiBrdm1fczM5MF9xdWFkICpvbGQsXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMjEwLVxcdFxcdFxcdCAgICAgICB1bmlvbiBrdm1fczM5MF9xdWFkIG5ldywgdTggYWNjZXNzX2tleSwgYm9vbCAqc3VjY2Vzcyk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaD0yNTg9c3RhdGljIGlubGluZSBfX211c3RfY2hlY2tcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDoyNTk6aW50IHdyaXRlX2d1ZXN0X3dpdGhfa2V5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBnYSwgdTggYXIsXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMjYwLVxcdFxcdFxcdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGxlbiwgdTggYWNjZXNzX2tleSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTI3Nz1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjI3ODppbnQgd3JpdGVfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdhLCB1OCBhciwgdm9pZCAqZGF0YSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0yNzktXFx0XFx0dW5zaWduZWQgbG9uZyBsZW4pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaD0zMDA9c3RhdGljIGlubGluZSBfX211c3RfY2hlY2tcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDozMDE6aW50IHJlYWRfZ3Vlc3Rfd2l0aF9rZXkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdhLCB1OCBhcixcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0zMDItXFx0XFx0XFx0dm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBsZW4sIHU4IGFjY2Vzc19rZXkpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaD0zMjE9c3RhdGljIGlubGluZSBfX211c3RfY2hlY2tcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDozMjI6aW50IHJlYWRfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdhLCB1OCBhciwgdm9pZCAqZGF0YSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0zMjMtXFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg9MzQ0PXN0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg6MzQ1OmludCByZWFkX2d1ZXN0X2luc3RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBnYSwgdm9pZCAqZGF0YSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0zNDYtXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGxlbilcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTM3MD1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjM3MTppbnQgd3JpdGVfZ3Vlc3RfYWJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBncGEsIHZvaWQgKmRhdGEsXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtMzcyLVxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGxlbilcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTM5Mz1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjM5NDppbnQgcmVhZF9ndWVzdF9hYnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdwYSwgdm9pZCAqZGF0YSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC0zOTUtXFx0XFx0ICAgdW5zaWduZWQgbG9uZyBsZW4pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaD00MTc9c3RhdGljIGlubGluZSBfX211c3RfY2hlY2tcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDo0MTg6aW50IHdyaXRlX2d1ZXN0X3JlYWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdyYSwgdm9pZCAqZGF0YSxcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC00MTktXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGxlbilcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oPTQ0MT1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjQ0MjppbnQgcmVhZF9ndWVzdF9yZWFsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBncmEsIHZvaWQgKmRhdGEsXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgtNDQzLVxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGxlbilcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTQ0Ny1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDo0NDg6dm9pZCBpcHRlX2xvY2soc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDo0NDk6dm9pZCBpcHRlX3VubG9jayhzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oOjQ1MDppbnQgaXB0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDo0NTE6aW50IGt2bV9zMzkwX2NoZWNrX2xvd19hZGRyX3Byb3RfcmVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZ3JhKTtcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC00NTItXFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmg9NDUzPXVuaW9uIG12cGdfcGVpIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oLTQ2Mi1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaDo0NjM6aW50IGdhY2Nlc3Nfc2hhZG93X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGdtYXAgKnNnLCBncGFfdCBzYWRkcixcXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaC00NjQtXFx0XFx0XFx0IHVuaW9uIG12cGdfcGVpICpkYXRwdHIsIGJvb2wgd3IpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTE4PXN0cnVjdCBnbWFwICpnbWFwX25ld19jaGlsZChzdHJ1Y3QgZ21hcCAqcGFyZW50LCBnZm5fdCBsaW1pdClcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzMC1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzE6aW50IGdtYXBfc2V0X2xpbWl0KHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBsaW1pdClcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMzIte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTUzPXN0YXRpYyB2b2lkIGdtYXBfcm1hcF9yYWRpeF90cmVlX2ZyZWUoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqcm9vdClcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTE3OS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxODA6dm9pZCBnbWFwX3JlbW92ZV9jaGlsZChzdHJ1Y3QgZ21hcCAqY2hpbGQpXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTgxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTE5NC0gKi9cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxOTU6dm9pZCBnbWFwX2Rpc3Bvc2Uoc3RydWN0IGdtYXAgKmdtYXApXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTk2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTIzNi0gKi9cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoyMzc6aW50IHMzOTBfcmVwbGFjZV9hc2NlKHN0cnVjdCBnbWFwICpnbWFwKVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTIzOC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0yNTgtXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MjU5OmJvb2wgX2dtYXBfdW5tYXBfcHJlZml4KHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBnZm4sIGdmbl90IGVuZCwgYm9vbCBoaW50KVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTI2MC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz0zMTY9c3RhdGljIGxvbmcgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IGVuZCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMzUzLSAqL1xcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjM1NDpib29sIGdtYXBfYWdlX2dmbihzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZClcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0zNTUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9Mzk4PXN0YXRpYyBsb25nIF9nbWFwX3VubWFwX2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtNDQwLSAqL1xcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjQ0MTpib29sIGdtYXBfdW5tYXBfZ2ZuX3JhbmdlKHN0cnVjdCBnbWFwICpnbWFwLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTQ0Mi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz00OTQ9c3RhdGljIGxvbmcgX2Nyc3RlX3Rlc3RfYW5kX2NsZWFyX3NvZnRkaXJ0eSh1bmlvbiBjcnN0ZSAqdGFibGUsIGdmbl90IGdmbiwgZ2ZuX3QgZW5kLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtNTI2LVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjUyNzp2b2lkIGdtYXBfc3luY19kaXJ0eV9sb2coc3RydWN0IGdtYXAgKmdtYXAsIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQpXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtNTI4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jPTU3Mz1zdGF0aWMgaW50IF9nbWFwX2hhbmRsZV9taW5vcl9wdGVfZmF1bHQoc3RydWN0IGdtYXAgKmdtYXAsIHVuaW9uIHBnc3RlICpwZ3N0ZSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTYxMS0gKi9cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzo2MTI6aW50IGdtYXBfdHJ5X2ZpeHVwX21pbm9yKHN0cnVjdCBnbWFwICpnbWFwLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmZhdWx0KVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTYxMy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz02ODU9c3RhdGljIGludCBfZ21hcF9saW5rKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqZ21hcCwgaW50IGxldmVsLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtNzM2LVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjczNzppbnQgZ21hcF9saW5rKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqZ21hcCwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmLFxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTczOC1cXHQgICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9Nzk0PXN0YXRpYyBpbnQgZ21hcF91Y2FzX3RyYW5zbGF0ZV9zaW1wbGUoc3RydWN0IGdtYXAgKmdtYXAsIGdwYV90ICpnYWRkciwgdW5pb24gY3JzdGUgKipjcnN0ZXBwKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtODIyLSAqL1xcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjgyMzppbnQgZ21hcF91Y2FzX3RyYW5zbGF0ZShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKmdtYXAsIGdwYV90ICpnYWRkcilcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy04MjQte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtODU4LVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjg1OTppbnQgZ21hcF91Y2FzX21hcChzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3QgcF9nZm4sIGdmbl90IGNfZ2ZuLCB1bnNpZ25lZCBsb25nIGNvdW50KVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTg2MC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz04ODc9c3RhdGljIHZvaWQgZ21hcF91Y2FzX3VubWFwX29uZShzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3QgY19nZm4pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy04OTktXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6OTAwOnZvaWQgZ21hcF91Y2FzX3VubWFwKHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBjX2dmbiwgdW5zaWduZWQgbG9uZyBjb3VudClcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy05MDEte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9OTA4PXN0YXRpYyBsb25nIF9nbWFwX3NwbGl0X2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtOTMxLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjkzMjp2b2lkIGdtYXBfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3QgZ21hcCAqZ21hcClcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy05MzMte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9OTQ4PXN0YXRpYyBpbnQgX2dtYXBfZW5hYmxlX3NrZXlzKHN0cnVjdCBnbWFwICpnbWFwKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtOTcwLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjk3MTppbnQgZ21hcF9lbmFibGVfc2tleXMoc3RydWN0IGdtYXAgKmdtYXApXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtOTcyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jPTk5MT1zdGF0aWMgbG9uZyBfZGVzdHJveV9wYWdlc19jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEwMDctXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTAwODppbnQgZ21hcF9wdl9kZXN0cm95X3JhbmdlKHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGludGVycnVwdGlibGUpXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTAwOS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMDI2LVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEwMjc6aW50IGdtYXBfaW5zZXJ0X3JtYXAoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZywgZ2ZuX3QgcF9nZm4sXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTAyOC1cXHRcXHQgICAgIGdmbl90IHJfZ2ZuLCBpbnQgbGV2ZWwpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMDYyLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEwNjM6aW50IGdtYXBfcHJvdGVjdF9ybWFwKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqc2csIGdmbl90IHBfZ2ZuLCBnZm5fdCByX2dmbixcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMDY0LVxcdFxcdCAgICAgIGt2bV9wZm5fdCBwZm4sIGludCBsZXZlbCwgYm9vbCB3cilcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jPTExMTQ9c3RhdGljIGxvbmcgX19zZXRfY21tYV9kaXJ0eV9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTExMjgtXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTEyOTp2b2lkIF9nbWFwX3NldF9jbW1hX2FsbChzdHJ1Y3QgZ21hcCAqZ21hcCwgYm9vbCBkaXJ0eSlcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMTMwLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jPTExNzQ9c3RhdGljIHZvaWQgZ21hcF91bnNoYWRvdyhzdHJ1Y3QgZ21hcCAqc2cpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMTkzLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjExOTQ6dm9pZCBfZ21hcF9oYW5kbGVfdnNpZV91bnNoYWRvd19ldmVudChzdHJ1Y3QgZ21hcCAqcGFyZW50LCBnZm5fdCBnZm4pXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTE5NS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuaD03Nz1zdHJ1Y3QgZ21hcF9jYWNoZSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuaC04NC1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuaDo4NTppbnQgczM5MF9yZXBsYWNlX2FzY2Uoc3RydWN0IGdtYXAgKmdtYXApO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjg2OmJvb2wgX2dtYXBfdW5tYXBfcHJlZml4KHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBnZm4sIGdmbl90IGVuZCwgYm9vbCBoaW50KTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaDo4Nzpib29sIGdtYXBfYWdlX2dmbihzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCk7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmg6ODg6Ym9vbCBnbWFwX3VubWFwX2dmbl9yYW5nZShzdHJ1Y3QgZ21hcCAqZ21hcCwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCk7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmg6ODk6aW50IGdtYXBfdHJ5X2ZpeHVwX21pbm9yKHN0cnVjdCBnbWFwICpnbWFwLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmZhdWx0KTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaC05MC1zdHJ1Y3QgZ21hcCAqZ21hcF9uZXcoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBsaW1pdCk7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmg9OTE9c3RydWN0IGdtYXAgKmdtYXBfbmV3X2NoaWxkKHN0cnVjdCBnbWFwICpwYXJlbnQsIGdmbl90IGxpbWl0KTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaDo5Mjp2b2lkIGdtYXBfcmVtb3ZlX2NoaWxkKHN0cnVjdCBnbWFwICpjaGlsZCk7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmg6OTM6dm9pZCBnbWFwX2Rpc3Bvc2Uoc3RydWN0IGdtYXAgKmdtYXApO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjk0OmludCBnbWFwX2xpbmsoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpnbWFwLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmZhdWx0LFxcbmFyY2gvczM5MC9rdm0vZ21hcC5oLTk1LVxcdCAgICAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjk2OnZvaWQgZ21hcF9zeW5jX2RpcnR5X2xvZyhzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCk7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmg6OTc6aW50IGdtYXBfc2V0X2xpbWl0KHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBsaW1pdCk7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmg6OTg6aW50IGdtYXBfdWNhc190cmFuc2xhdGUoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpnbWFwLCBncGFfdCAqZ2FkZHIpO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjk5OmludCBnbWFwX3VjYXNfbWFwKHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBwX2dmbiwgZ2ZuX3QgY19nZm4sIHVuc2lnbmVkIGxvbmcgY291bnQpO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwMDp2b2lkIGdtYXBfdWNhc191bm1hcChzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3QgY19nZm4sIHVuc2lnbmVkIGxvbmcgY291bnQpO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwMTppbnQgZ21hcF9lbmFibGVfc2tleXMoc3RydWN0IGdtYXAgKmdtYXApO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwMjppbnQgZ21hcF9wdl9kZXN0cm95X3JhbmdlKHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGludGVycnVwdGlibGUpO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwMzppbnQgZ21hcF9pbnNlcnRfcm1hcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnLCBnZm5fdCBwX2dmbixcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaC0xMDQtXFx0XFx0ICAgICBnZm5fdCByX2dmbiwgaW50IGxldmVsKTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaDoxMDU6aW50IGdtYXBfcHJvdGVjdF9ybWFwKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqc2csIGdmbl90IHBfZ2ZuLCBnZm5fdCByX2dmbixcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaC0xMDYtXFx0XFx0ICAgICAga3ZtX3Bmbl90IHBmbiwgaW50IGxldmVsLCBib29sIHdyKTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaDoxMDc6dm9pZCBfZ21hcF9zZXRfY21tYV9hbGwoc3RydWN0IGdtYXAgKmdtYXAsIGJvb2wgZGlydHkpO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwODp2b2lkIF9nbWFwX2hhbmRsZV92c2llX3Vuc2hhZG93X2V2ZW50KHN0cnVjdCBnbWFwICpwYXJlbnQsIGdmbl90IGdmbik7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmgtMTA5LXN0cnVjdCBnbWFwICpnbWFwX2NyZWF0ZV9zaGFkb3coc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpnbWFwLFxcbmFyY2gvczM5MC9rdm0vZ21hcC5oLTExMC1cXHRcXHRcXHRcXHR1bmlvbiBhc2NlIGFzY2UsIGludCBlZGF0X2xldmVsKTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaDoxMTE6dm9pZCBnbWFwX3NwbGl0X2h1Z2VfcGFnZXMoc3RydWN0IGdtYXAgKmdtYXApO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5oLTExMi1cXG4tLVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYz05OT1zdGF0aWMgdm9pZCBlbmFibGVfYWxsX2h3X3dwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0xMjktXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjEzMDp2b2lkIGt2bV9zMzkwX2JhY2t1cF9ndWVzdF9wZXJfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTEzMS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMTM3LVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYzoxMzg6dm9pZCBrdm1fczM5MF9yZXN0b3JlX2d1ZXN0X3Blcl9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMTM5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0xNDUtXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjE0Njp2b2lkIGt2bV9zMzkwX3BhdGNoX2d1ZXN0X3Blcl9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMTQ3LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYz0xNzQ9c3RhdGljIGludCBfX2ltcG9ydF93cF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0yMDItXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjIwMzppbnQga3ZtX3MzOTBfaW1wb3J0X2JwX2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0yMDQtXFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZylcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0yNzctXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjI3ODp2b2lkIGt2bV9zMzkwX2NsZWFyX2JwX2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0yNzkte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jPTMzND1zdGF0aWMgc3RydWN0IGt2bV9od193cF9pbmZvX2FyY2ggKmFueV93cF9jaGFuZ2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0zNjYtXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjM2Nzp2b2lkIGt2bV9zMzkwX3ByZXBhcmVfZGVidWdfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTM2OC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM9NDMyPXN0YXRpYyBpbnQgcGVyX2ZldGNoZWRfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgKmFkZHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtNDkyLVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYzo0OTM6aW50IGt2bV9zMzkwX2hhbmRsZV9wZXJfaWZldGNoX2ljcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy00OTQte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jPTUzMz1zdGF0aWMgaW50IGZpbHRlcl9ndWVzdF9wZXJfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTU4MS1cXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM6NTgyOmludCBrdm1fczM5MF9oYW5kbGVfcGVyX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtNTgzLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM9Mzk1PXN0YXRpYyBpbnQgaGFuZGxlX3BhcnRpYWxfZXhlY3V0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNDExLSAqL1xcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM6NDEyOmludCBoYW5kbGVfc3RoeWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNDEzLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM9NjAwPXN0YXRpYyBib29sIHNob3VsZF9oYW5kbGVfcGVyX2lmZXRjaChjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCByYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNjEyLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM6NjEzOmludCBrdm1faGFuZGxlX3NpZV9pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNjE0LXtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDM6MzkuOTI4OTUzNjEzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3NjgwNjk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgS1ZNL3MzOTAgQ1BVIFBWIENyZWF0aW9uIGFuZCBEZXN0cnVjdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBvdXRwdXQgYXBwZWFycyB0cnVuY2F0ZWQsIGJ1dCBJIGNhbiBhbHJlYWR5IHNlZSB0aGF0IHRoZSBmdW5jdGlvbnMgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGFuZCBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgIGFyZSBib3RoIGxvY2F0ZWQgaW4gYGFyY2gvczM5MC9rdm0vcHYuY2AuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRpdmUgaW50byB0aGF0IGZpbGUsIGBhcmNoL3MzOTAva3ZtL3B2LmNgLCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBmdW5jdGlvbnMuIEknbGwgYWxzbyB3YW50IHRvIHRha2UgYSBsb29rIGF0IGBhcmNoL3MzOTAva3ZtL3ByaXYuY2AgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IHJlbGF0ZWQgY29kZSB0aGVyZS4gTWlnaHQgYXMgd2VsbCBicm9hZGVuIHRoZSBzZWFyY2ggYSBsaXR0bGUgYXQgdGhpcyBlYXJseSBzdGFnZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHBhcmF2aXJ0dWFsaXphdGlvbiBhc3BlY3RzIGludGVyYWN0IHdpdGggdGhlIENQVSBtYW5hZ2VtZW50IHdpdGhpbiBLVk0gb24gczM5MC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIFBWIHNldHVwIGFuZCB0ZWFyZG93biBhcmUgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1NDMsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0Mzo0NC44MDU3NjM2MzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDQ2ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8bG9uZ3xib29sKSBbYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9wdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vcHYuYy0yNi1cXG5hcmNoL3MzOTAva3ZtL3B2LmM6Mjc6Ym9vbCBrdm1fczM5MF9wdl9pc19wcm90ZWN0ZWQoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0vcHYuYy0yOC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmM9MzI9RVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3MzOTBfcHZfaXNfcHJvdGVjdGVkKTtcXG5hcmNoL3MzOTAva3ZtL3B2LmMtMzMtXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjM0OmJvb2wga3ZtX3MzOTBfcHZfY3B1X2lzX3Byb3RlY3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTM1LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYz0xMDQ9c3RhdGljIHZvaWQgX2t2bV9zMzkwX3B2X21ha2Vfc2VjdXJlKHN0cnVjdCBndWVzdF9mYXVsdCAqZilcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy0xNDYtICovXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjE0NzppbnQga3ZtX3MzOTBfcHZfbWFrZV9zZWN1cmUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGdhZGRyLCB2b2lkICp1dmNiKVxcbmFyY2gvczM5MC9rdm0vcHYuYy0xNDgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTE3OC1cXG5hcmNoL3MzOTAva3ZtL3B2LmM6MTc5OmludCBrdm1fczM5MF9wdl9jb252ZXJ0X3RvX3NlY3VyZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ2FkZHIpXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTE4MC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtMjAxLSAqL1xcbmFyY2gvczM5MC9rdm0vcHYuYzoyMDI6aW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ2FkZHIpXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTIwMy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmM9MjQ3PXN0YXRpYyB2b2lkIGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcmVlX3N0b3JfYmFzZSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy0yNjQtXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjI2NTppbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcXG5hcmNoL3MzOTAva3ZtL3B2LmMtMjY2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy0yODMtXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjI4NDppbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbmFyY2gvczM5MC9rdm0vcHYuYy0yODUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jPTQ0OT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfZGVzdHJveV9mYXN0X2F2YWlsYWJsZSh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTQ3MS0gKi9cXG5hcmNoL3MzOTAva3ZtL3B2LmM6NDcyOmludCBrdm1fczM5MF9wdl9zZXRfYXNpZGUoc3RydWN0IGt2bSAqa3ZtLCB1MTYgKnJjLCB1MTYgKnJyYylcXG5hcmNoL3MzOTAva3ZtL3B2LmMtNDczLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy01MzYtICovXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjUzNzppbnQga3ZtX3MzOTBfcHZfZGVpbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdTE2ICpyYywgdTE2ICpycmMpXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTUzOC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtNTcxLSAqL1xcbmFyY2gvczM5MC9rdm0vcHYuYzo1NzI6aW50IGt2bV9zMzkwX3B2X2RlaW5pdF9jbGVhbnVwX2FsbChzdHJ1Y3Qga3ZtICprdm0sIHUxNiAqcmMsIHUxNiAqcnJjKVxcbmFyY2gvczM5MC9rdm0vcHYuYy01NzMte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTY0OC0gKi9cXG5hcmNoL3MzOTAva3ZtL3B2LmM6NjQ5OmludCBrdm1fczM5MF9wdl9kZWluaXRfYXNpZGVfdm0oc3RydWN0IGt2bSAqa3ZtLCB1MTYgKnJjLCB1MTYgKnJyYylcXG5hcmNoL3MzOTAva3ZtL3B2LmMtNjUwLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYz03MDU9c3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfb3BzIGt2bV9zMzkwX3B2X21tdV9ub3RpZmllcl9vcHMgPSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtNzA4LVxcbmFyY2gvczM5MC9rdm0vcHYuYzo3MDk6aW50IGt2bV9zMzkwX3B2X2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1MTYgKnJjLCB1MTYgKnJyYylcXG5hcmNoL3MzOTAva3ZtL3B2LmMtNzEwLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy03NzEtXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjc3MjppbnQga3ZtX3MzOTBfcHZfc2V0X3NlY19wYXJtcyhzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgKmhkciwgdTY0IGxlbmd0aCwgdTE2ICpyYyxcXG5hcmNoL3MzOTAva3ZtL3B2LmMtNzczLVxcdFxcdFxcdCAgICAgIHUxNiAqcnJjKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jPTc5MT1zdGF0aWMgaW50IHVucGFja19vbmUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIsIHU2NCB0d2VhayxcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy04MTgtXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjgxOTppbnQga3ZtX3MzOTBfcHZfdW5wYWNrKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTgyMC1cXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyB0d2VhaywgdTE2ICpyYywgdTE2ICpycmMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtODUwLVxcbmFyY2gvczM5MC9rdm0vcHYuYzo4NTE6aW50IGt2bV9zMzkwX3B2X3NldF9jcHVfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBzdGF0ZSlcXG5hcmNoL3MzOTAva3ZtL3B2LmMtODUyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy04NjgtXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjg2OTppbnQga3ZtX3MzOTBfcHZfZHVtcF9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpidWZmLCB1MTYgKnJjLCB1MTYgKnJyYylcXG5hcmNoL3MzOTAva3ZtL3B2LmMtODcwLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy05MTUtICovXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjkxNjppbnQga3ZtX3MzOTBfcHZfZHVtcF9zdG9yX3N0YXRlKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmJ1ZmZfdXNlcixcXG5hcmNoL3MzOTAva3ZtL3B2LmMtOTE3LVxcdFxcdFxcdFxcdHU2NCAqZ2FkZHIsIHU2NCBidWZmX3VzZXJfbGVuLCB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy0xMDIzLSAqL1xcbmFyY2gvczM5MC9rdm0vcHYuYzoxMDI0OmludCBrdm1fczM5MF9wdl9kdW1wX2NvbXBsZXRlKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmJ1ZmZfdXNlcixcXG5hcmNoL3MzOTAva3ZtL3B2LmMtMTAyNS1cXHRcXHRcXHQgICAgICB1MTYgKnJjLCB1MTYgKnJyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDM6NDQuOTEyMjE1MTc1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTUwODUzMTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gczM5MCBLVk0gSW50ZXJydXB0IEhhbmRsaW5nKipcblxuUmlnaHQsIGxldCdzIHplcm8gaW4gb24gYGFyY2gvczM5MC9rdm0vcHJpdi5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgcm91dGluZXMgd2l0aGluIHRoYXQgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIGBoYW5kbGVfcnJiZWAgYW5kIGBoYW5kbGVfZXNzYWAuIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gbGlrZWx5IGRlYWxpbmcgd2l0aCBlcnJvciBldmVudHMsIGFuZCB0aGVzZSBwcm9iYWJseSByZWxhdGUgdG8gc3BlY2lmaWMgaGFyZHdhcmUgZXhjZXB0aW9ucyBvciBwcm9jZXNzb3IgY29uZGl0aW9ucyB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIHJ1bm5pbmcgaW4gYSBLVk0gZW52aXJvbm1lbnQuIEknbSBhc3N1bWluZyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgd2hlcmUgS1ZNIGludGVyY2VwdHMgYW5kIHBvdGVudGlhbGx5IGVtdWxhdGVzIG9yIGhhbmRsZXMgdGhlc2UgZXZlbnRzIGZvciB0aGUgZ3Vlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGhhbmRsZXJzLiBBcmUgdGhleSBpbnZvbHZlZCBpbiB0aGUgUlJCRSBoYW5kbGluZyBpbiB0aGUgbmV3IGhhcmR3YXJlLCBvciBhbiBvbGRlciBtZWNoYW5pc20/IFdoYXQgYWJvdXQgRVNBIGhhbmRsaW5nPyBBcmUgdGhlc2UgcGVyZm9ybWFuY2UgY3JpdGljYWw/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGV2ZW50cyBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgcmVwcmVzZW50YXRpb25zIHdpdGhpbiBLVk0gYW5kIHRoZW4gcmV2aWV3IHRoZSBLVk0gc3BlY2lmaWMgaGFuZGxpbmcuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIGhvdyBLVk0gaXMgbWFuYWdpbmcgdGhlc2Ugc3BlY2lmaWMgZXhjZXB0aW9uIGFuZCBzdGF0dXMgZXZlbnRzIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5NDEsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0Mzo1NC40MjA3NDkzODZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MjUxOTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8bG9uZ3xib29sKSBbYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9wcml2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9wcml2LmM9MzM9c3RhdGljIGludCBoYW5kbGVfcmkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNDUtXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NDY6aW50IGt2bV9zMzkwX2hhbmRsZV9hYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNDcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NTQ9c3RhdGljIGludCBoYW5kbGVfZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNzMtXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NzQ6aW50IGt2bV9zMzkwX2hhbmRsZV9lMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNzUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTkxPXN0YXRpYyBpbnQgaGFuZGxlX3N0b3JlX2NwdV9hZGRyZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTIxNi1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoyMTc6aW50IGt2bV9zMzkwX3NrZXlfY2hlY2tfZW5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0yMTgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NTQxPXN0YXRpYyBpbnQgaGFuZGxlX2lvX2luc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNTcwLSNpZiBJU19FTkFCTEVEKENPTkZJR19WRklPX0FQKVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjU3MTpib29sIGt2bV9zMzkwX2lzX2dwYV9pbl9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhKVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTU3Mi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz02NzA9c3RhdGljIGludCBoYW5kbGVfc3RmbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy02OTgtXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6Njk5OmludCBpc192YWxpZF9wc3cocHN3X3QgKnBzdylcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy03MDAte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNzE1LVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjcxNjppbnQga3ZtX3MzOTBfaGFuZGxlX2xwc3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTcxNy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz04Njc9c3RhdGljIGludCBoYW5kbGVfc3RzaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05NTgtXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6OTU5OmludCBrdm1fczM5MF9oYW5kbGVfYjIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk2MC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz0xMjE3PXN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI4My1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxMjg0OmludCBrdm1fczM5MF9oYW5kbGVfYjkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyODUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTMwMS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxMzAyOmludCBrdm1fczM5MF9oYW5kbGVfbGN0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTMwMy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMzQwLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEzNDE6aW50IGt2bV9zMzkwX2hhbmRsZV9zdGN0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTM0Mi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz0xNDEzPXN0YXRpYyBpbnQgaGFuZGxlX3N0Y3RnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTE0NDYtXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTQ0NzppbnQga3ZtX3MzOTBfaGFuZGxlX2ViKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xNDQ4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jPTE0NjU9c3RhdGljIGludCBoYW5kbGVfdHByb3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTUyMy1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxNTI0OmludCBrdm1fczM5MF9oYW5kbGVfZTUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTE1MjUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTU1Mz1zdGF0aWMgaW50IGhhbmRsZV9wdGZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTE1NjEtXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTU2MjppbnQga3ZtX3MzOTBfaGFuZGxlXzAxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xNTYzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDM6NTQuNjI5MDA1ODAzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcxNjIxMTk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3RhdGljIHZzLiBOb24tU3RhdGljIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYGhhbmRsZV9ycmJlYCBhbmQgYGhhbmRsZV9lc3NhYC4gSG1tLCB0aGV5J3JlIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IG1ha2VzIG1lIHRoaW5rIGFib3V0IHNjb3BlIGFuZCBwb3RlbnRpYWwgZm9yIGlubGluaW5nLCBkZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyJ3Mgb3B0aW1pemF0aW9uIHN0cmF0ZWd5LiBOb3csIGhvbGQgb24uLi4gYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGFuZCBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgLCB0aG9zZSBhcmVuJ3Qgc3RhdGljLiBBbHJpZ2h0LiBBbmQgdGhlIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgZnVuY3Rpb24sIGFsc28gbm9uLXN0YXRpYy4gVGhlbiB0aGVyZSBhcmUgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCBhbmQgYGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbmAsIGFsc28gbm9uLXN0YXRpYy5cblxuR2l2ZW4gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlbid0IHN0YXRpYywgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIHRoZXkncmUgYmVpbmcgY2FsbGVkIGFuZCBob3cgdGhleSdyZSB1c2VkLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aG9zZSBsYXN0IHR3byBmdW5jdGlvbnMsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgYW5kIGBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25gLCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGVpciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjc4OSwiT3V0cHV0VG9rZW5zIjo2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0NDowMS4zNDUyMjEwOTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjc0NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8bG9uZ3xib29sKSBbYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NjI9c3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3AsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTkzLS8qIFNlY3Rpb246IGRldmljZSByZWxhdGVkICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU5NDpsb25nIGt2bV9hcmNoX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTk1LVxcdFxcdFxcdHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNjAxLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo2MDI6aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNjAzLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy03MzEtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjczMjp2b2lkIGt2bV9hcmNoX3N5bmNfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdClcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNzMzLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz03NDE9c3RhdGljIHZvaWQgc2NhX2RlbF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNzQ1LSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo3NDY6aW50IGt2bV92bV9pb2N0bF9nZXRfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNzQ3LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX2RpcnR5X2xvZyAqbG9nKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTc3OD1zdGF0aWMgdm9pZCBpY3B0X29wZXJleGNfb25fYWxsX3ZjcHVzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy03ODctXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjc4ODppbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNzg5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMDg3PXN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEwODgtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEwODk6dm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19yZXNldF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMDkwLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMTc1PXN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfcGNpX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTg0LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTg1OnZvaWQga3ZtX3MzOTBfdmNwdV9wY2lfZW5hYmxlX2ludGVycChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExODYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIzNDg9c3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNDA1LSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyNDA2OmludCBrdm1fczM5MF9jcHVzX2Zyb21fcHYoc3RydWN0IGt2bSAqa3ZtLCB1MTYgKnJjLCB1MTYgKnJyYylcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjQwNy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkwMT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX21lbV9vcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9tZW1fb3AgKm1vcClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTI1LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTI2OmludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkyNy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzEyNj1zdGF0aWMgdm9pZCBrdm1fczM5MF9zZXRfY3J5Y2JfZm9ybWF0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTU3LSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTU4OnZvaWQga3ZtX2FyY2hfY3J5cHRvX3NldF9tYXNrcyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKmFwbSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE1OS1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyAqYXFtLCB1bnNpZ25lZCBsb25nICphZG0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzE5ND1FWFBPUlRfU1lNQk9MX0dQTChrdm1fYXJjaF9jcnlwdG9fc2V0X21hc2tzKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjA3LSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjA4OnZvaWQga3ZtX2FyY2hfY3J5cHRvX2NsZWFyX21hc2tzKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzIwOS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzI1MT1zdGF0aWMgdm9pZCBzY2FfZGlzcG9zZShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzI1Ni1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzI1Nzp2b2lkIGt2bV9hcmNoX2ZyZWVfdm0oc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjU4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjY0LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjY1OmludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjY2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNDAzLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozNDA0OnZvaWQga3ZtX2FyY2hfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQwNS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQzMC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzQzMTp2b2lkIGt2bV9hcmNoX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNDMyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNTQxPXN0YXRpYyB2b2lkIGRpc2FibGVfY3B1X3RpbWVyX2FjY291bnRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM1NDgtLyogc2V0IHRoZSBjcHUgdGltZXIgLSBtYXkgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgVkNQVSB0aHJlYWQgaXRzZWxmICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM1NDk6dm9pZCBrdm1fczM5MF9zZXRfY3B1X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgX191NjQgY3B1dG0pXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM1NTAte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM1NjE9X191NjQga3ZtX3MzOTBfZ2V0X2NwdV90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzU4NS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzU4Njp2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM1ODcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM1OTQtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM1OTU6dm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM1OTYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2MDMtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM2MDQ6dm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjA1LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNjUwPXN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjgwLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozNjgxOnZvaWQga3ZtX3MzOTBfdmNwdV91bnNldHVwX2NtbWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjgyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjg3LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozNjg4OmludCBrdm1fczM5MF92Y3B1X3NldHVwX2NtbWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjg5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNzA4PXN0YXRpYyBpbnQga3ZtX3MzOTBfdmNwdV9zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzc5NC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzc5NTppbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM3OTYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM4MDI9REVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzgwMy1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzgwNDppbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODA1LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODgyLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozODgzOmludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg4NC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg4OC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzg4OTpib29sIGt2bV9hcmNoX3ZjcHVfaW5fa2VybmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg5MC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg5My1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzg5NDp2b2lkIGt2bV9zMzkwX3ZjcHVfYmxvY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODk1LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODk5LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozOTAwOnZvaWQga3ZtX3MzOTBfdmNwdV91bmJsb2NrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzkwMS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzkwNT1zdGF0aWMgdm9pZCBrdm1fczM5MF92Y3B1X3JlcXVlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM5MTAtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM5MTE6Ym9vbCBrdm1fczM5MF92Y3B1X3NpZV9pbmhpYml0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTEyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zOTE3PXN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfcmVxdWVzdF9oYW5kbGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTI1LSAqIHJldHVybiBpbW1lZGlhdGVseS4gKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzkyNjp2b2lkIGV4aXRfc2llKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzkyNy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzkzNC0vKiBLaWNrIGEgZ3Vlc3QgY3B1IG91dCBvZiBTSUUgdG8gcHJvY2VzcyBhIHJlcXVlc3Qgc3luY2hyb25vdXNseSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozOTM1OnZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0KGludCByZXEsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzkzNi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzk0MC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzk0MTpib29sIGt2bV9hcmNoX25vX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTQyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTUxLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozOTUyOmludCBrdm1fYXJjaF92Y3B1X3Nob3VsZF9raWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzk1My17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDExNz1zdGF0aWMgdm9pZCBrdm1fYXJjaF92Y3B1X2lvY3RsX2NsZWFyX3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTMyLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTMzOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9yZWdzICpyZWdzKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTM0LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTQwLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTQxOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9yZWdzICpyZWdzKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTQyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTQ4LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTQ5OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNTAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTYwLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTYxOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTcyLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTczOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTc0LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTg3LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTg4OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTg5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz00MjAzPXN0YXRpYyBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfaW5pdGlhbF9wc3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwc3dfdCBwc3cpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDIxNS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDIxNjppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF90cmFuc2xhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MjE3LVxcdFxcdFxcdFxcdCAgc3RydWN0IGt2bV90cmFuc2xhdGlvbiAqdHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDIyNS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDIyNjppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MjI3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MjY3LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MjY4OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9tcHN0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDI2OS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9tcF9zdGF0ZSAqbXBfc3RhdGUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDI4Mi1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDI4MzppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfbXBzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyODQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fbXBfc3RhdGUgKm1wX3N0YXRlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ0MzY9c3RhdGljIHZvaWQgX19rdm1fczM5MF9zZXRfdG9kX2Nsb2NrKHN0cnVjdCBrdm0gKmt2bSwgY29uc3Qgc3RydWN0IGt2bV9zMzkwX3ZtX3RvZF9jbG9jayAqZ3RvZClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NDYzLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NDY0OmludCBrdm1fczM5MF90cnlfc2V0X3RvZF9jbG9jayhzdHJ1Y3Qga3ZtICprdm0sIGNvbnN0IHN0cnVjdCBrdm1fczM5MF92bV90b2RfY2xvY2sgKmd0b2QpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ0NjUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ0NzM9c3RhdGljIHZvaWQgX19rdm1faW5qZWN0X3BmYXVsdF90b2tlbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgc3RhcnRfdG9rZW4sXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ5OC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDQ5OTpib29sIGt2bV9hcmNoX2FzeW5jX3BhZ2Vfbm90X3ByZXNlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTAwLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9hc3luY19wZiAqd29yaylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTA3LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NTA4OnZvaWQga3ZtX2FyY2hfYXN5bmNfcGFnZV9wcmVzZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDUwOS1cXHRcXHRcXHRcXHQgc3RydWN0IGt2bV9hc3luY19wZiAqd29yaylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTE0LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NTE1OnZvaWQga3ZtX2FyY2hfYXN5bmNfcGFnZV9yZWFkeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1MTYtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fYXN5bmNfcGYgKndvcmspXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDUyMC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDUyMTpib29sIGt2bV9hcmNoX2Nhbl9kZXF1ZXVlX2FzeW5jX3BhZ2VfcHJlc2VudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1MjIte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1MjktXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1MzA6Ym9vbCBrdm1fYXJjaF9zZXR1cF9hc3luY19wZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1MzEte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTUwMDQ9c3RhdGljIHZvaWQgc3RvcmVfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTAyNC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTAyNTppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MDI2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MTE0LSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1MTE1OmludCBrdm1fczM5MF9zdG9yZV9zdGF0dXNfdW5sb2FkZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdwYSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTExNi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTE2Ni1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTE2NzppbnQga3ZtX3MzOTBfdmNwdV9zdG9yZV9zdGF0dXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUxNjgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTUxOTY9c3RhdGljIHZvaWQgX19lbmFibGVfaWJzX29uX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUyMDMtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjUyMDQ6aW50IGt2bV9zMzkwX3ZjcHVfc3RhcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MjA1LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MjU4LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1MjU5OmludCBrdm1fczM5MF92Y3B1X3N0b3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MjYwLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NDE0PXN0YXRpYyBsb25nIGt2bV9zMzkwX3ZjcHVfbWVtc2lkYV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTQzOC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTQzOTpsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTQ0MC1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU0ODQ9c3RhdGljIGludCBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTI1LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NTI2Omxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTUyNy1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NzQ1PXZtX2ZhdWx0X3Qga3ZtX2FyY2hfdmNwdV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3NTctXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3NTg6Ym9vbCBrdm1fYXJjaF9pcnFjaGlwX2luX2tlcm5lbChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3NTkte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU3NjQ9c3RhdGljIGxvbmcgY21tYV9kX2NvdW50X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3NzYtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3Nzc6aW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3NzgtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NjUtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU4NjY6dm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg2Ny1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsIGVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg5MC0gKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTg5MTpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4OTIte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU5MjItICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU5MjM6Ym9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTI0LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTM2LSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1OTM3OmJvb2wga3ZtX2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU5Mzgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU5NTQtICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU5NTU6Ym9vbCBrdm1fdW5tYXBfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTU2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDQ6MDEuNDI4OTAyMjE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyOTQ0NDg0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyBLVk0gQXJjaGl0ZWN0dXJlIE5vbi1TdGF0aWMgRnVuY3Rpb25zKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgdGhlc2UgS1ZNLXJlbGF0ZWQgZnVuY3Rpb25zLiBJdCBzZWVtcyBJJ3ZlIGlkZW50aWZpZWQgc2V2ZXJhbCB0aGF0IGFyZSBub24tc3RhdGljOiBga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCwgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgLCBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgLCBhbmQgYGt2bV9hcmNoX3ZtX2lvY3RsYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgc28gdGhlc2UgYXJlIGFjY2Vzc2libGUgb3V0c2lkZSBvZiB0aGVpciByZXNwZWN0aXZlIGNvbXBpbGF0aW9uIHVuaXRzLCB3aGljaCBpbXBsaWVzIGEgcG90ZW50aWFsIGZvciBleHRlcm5hbCBtb2RpZmljYXRpb24gb3IgdXNlLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcywgcGFydGljdWxhcmx5IGluIGEgY29udGV4dCBhcyBwZXJmb3JtYW5jZS1jcml0aWNhbCBhcyBLVk0uXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgSSdsbCBzaGlmdCBnZWFycy4gSSByZW1lbWJlciB0aG9zZSBTQ0FzIGFuZCBleHRlcm5hbCBjYWxscyByZWxhdGVkIHRvIGludGVycnVwdHMsIHNvIEkgbmVlZCB0byBjaGVjayBgYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY2AuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgZGVmaW5pdGlvbnMgb2YgYHNjYV9leHRfY2FsbF9wZW5kaW5nYCwgYHNjYV9pbmplY3RfZXh0X2NhbGxgLCBhbmQgYHNjYV9jbGVhcl9leHRfY2FsbGAgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgaWYgdGhleSBpbnRyb2R1Y2UgYW55dGhpbmcgdW5leHBlY3RlZC4gVGhpcyBpcyBhYm91dCBtYWtpbmcgc3VyZSBub3RoaW5nIHVudG93YXJkIGhhcHBlbnMgd2l0aCBleHRlcm5hbCBjYWxscywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBpbnRlcnJ1cHQgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE1MjMsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDQ6MDYuNzIzMzUyNTYyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODk3NDE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkfGxvbmd8Ym9vbCkgW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz05MD1zdGF0aWMgdm9pZCBzY2FfY2xlYXJfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDQtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxMDU6aW50IHBzd19leHRpbnRfZGlzYWJsZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTA2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTEyMz1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBfX2RlbGl2ZXJfaW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMTkzLS8qIENoZWNrIHdoZXRoZXIgYW4gZXh0ZXJuYWwgY2FsbCBpcyBwZW5kaW5nIChkZWxpdmVyYWJsZSBvciBub3QpICovXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxMTk0OmludCBrdm1fczM5MF9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTExOTUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMjAzLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTIwNDppbnQga3ZtX3MzOTBfdmNwdV9oYXNfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGV4Y2x1ZGVfc3RvcClcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTEyMDUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMjIyLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTIyMzppbnQga3ZtX2NwdV9oYXNfcGVuZGluZ190aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMjI0LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTIyOD1zdGF0aWMgdTY0IF9fY2FsY3VsYXRlX3NsdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTEyNTktXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxMjYwOmludCBrdm1fczM5MF9oYW5kbGVfd2FpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMjYxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTMwNi1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjEzMDc6dm9pZCBrdm1fczM5MF92Y3B1X3dha2V1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMzA4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTMxOT1lbnVtIGhydGltZXJfcmVzdGFydCBrdm1fczM5MF9pZGxlX3dha2V1cChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTEzMzYtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxMzM3OnZvaWQga3ZtX3MzOTBfY2xlYXJfbG9jYWxfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMzM4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTk1OD1zdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xOTg4LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTk4OTppbnQga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE5OTAtXFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjAzMS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwMzI6aW50IGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDMzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjAzNy1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwMzg6aW50IHMzOTBpbnRfdG9fczM5MGlycShzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjAzOS1cXHRcXHQgICAgICAgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDgwLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA4MTppbnQga3ZtX3MzOTBfaXNfc3RvcF9pcnFfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDgyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4Ny1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwODg6aW50IGt2bV9zMzkwX2lzX3Jlc3RhcnRfaXJxX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4OS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwOTQtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMDk1OnZvaWQga3ZtX3MzOTBfY2xlYXJfc3RvcF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA5Ni17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIxMDU9c3RhdGljIGludCBkb19pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjE0OS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxNTA6aW50IGt2bV9zMzkwX2luamVjdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjE1MS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIxNzM9c3RhdGljIHZvaWQgaW50aV90b19pcnEoc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTg4LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjE4OTp2b2lkIGt2bV9zMzkwX2NsZWFyX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjE5MC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI0MjY9c3RhdGljIGludCByZWdpc3Rlcl9pb19hZGFwdGVyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI0NzItXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNDczOmludCBrdm1fczM5MF9tYXNrX2FkYXB0ZXIoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQsIGJvb2wgbWFza2VkKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjQ3NC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI1NTI9c3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBfX3U2NCBhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNTg5LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjU5MDp2b2lkIGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNTkxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjYxOS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI2MjA6dm9pZCBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MjEte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMDUzPXN0YXRpYyBpbnQgc2V0X2FkYXB0ZXJfaW50KHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMDc5LSAqL1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzA4MDp2b2lkIGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzA4MS1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtY2NrX3ZvbGF0aWxlX2luZm8gKm1jY2tfaW5mbylcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzEyMC1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMxMjE6aW50IGt2bV9zZXRfcm91dGluZ19lbnRyeShzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTIyLVxcdFxcdFxcdCAgc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMxNjItXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMTYzOmludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzE2NC1cXHRcXHRpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTY4LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzE2OTppbnQga3ZtX3MzOTBfc2V0X2lycV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgX191c2VyICppcnFzdGF0ZSwgaW50IGxlbilcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMxNzAte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMjA5PXN0YXRpYyB2b2lkIHN0b3JlX2xvY2FsX2lycShzdHJ1Y3Qga3ZtX3MzOTBfbG9jYWxfaW50ZXJydXB0ICpsaSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzI1MC1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMyNTE6aW50IGt2bV9zMzkwX2dldF9pcnFfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBfX3U4IF9fdXNlciAqYnVmLCBpbnQgbGVuKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzI1Mi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTMzNTE9c3RhdGljIHZvaWQgcHJvY2Vzc19naWJfYWxlcnRfbGlzdCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMzk1LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzM5Njp2b2lkIGt2bV9zMzkwX2dpc2FfY2xlYXIoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzM5Ny17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM0MDUtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNDA2OnZvaWQga3ZtX3MzOTBfZ2lzYV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM0MDcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNDIxLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzQyMjp2b2lkIGt2bV9zMzkwX2dpc2FfZW5hYmxlKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM0MjMte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNDQ0LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzQ0NTp2b2lkIGt2bV9zMzkwX2dpc2FfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNDQ2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzQ2Mi1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM0NjM6dm9pZCBrdm1fczM5MF9naXNhX2Rpc2FibGUoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzQ2NC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM0OTctICovXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNDk4OmludCBrdm1fczM5MF9naXNjX3JlZ2lzdGVyKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGdpc2MpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNDk5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzUxNz1FWFBPUlRfU1lNQk9MX0dQTChrdm1fczM5MF9naXNjX3JlZ2lzdGVyKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzUzNi0gKi9cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM1Mzc6aW50IGt2bV9zMzkwX2dpc2NfdW5yZWdpc3RlcihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBnaXNjKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzUzOC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTM2NDY9c3RhdGljIHN0cnVjdCBhaXJxX3N0cnVjdCBnaWJfYWxlcnRfaXJxID0ge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNjQ5LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzY1MDp2b2lkIGt2bV9zMzkwX2dpYl9kZXN0cm95KHZvaWQpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNjUxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzY2NT1pbnQgX19pbml0IGt2bV9zMzkwX2dpYl9pbml0KHU4IG5pc2MpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3MjItICovXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNzIzOmludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzcyNC1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjQ0OjA2LjgxMjMzMDM3MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzk1NTExNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkZvY3VzaW5nIG9uIEV4dGVybmFsIENhbGwgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gaG93IHRoZXNlIGV4dGVybmFsIGNhbGxzIGFyZSBoYW5kbGVkLiBJIG5lZWQgdG8ga2VlcCB0aGUgY29kZSBlZmZpY2llbnQgYW5kIHN0cmVhbWxpbmVkLiBJJ20gbm90aW5nIHRoYXQgYHNjYV9leHRfY2FsbF9wZW5kaW5nYCwgYHNjYV9pbmplY3RfZXh0X2NhbGxgLCBhbmQgYHNjYV9jbGVhcl9leHRfY2FsbGAgYXJlIHN0YXRpYywgd2hpY2ggc2ltcGxpZmllcyB0aGVpciBpbmNsdXNpb24gaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBDb25zaWRlcmluZyB0aGVpciBzdGF0aWMgbmF0dXJlLCBJIHdvbid0IG5lZWQgdG8gY29uc2lkZXIgdGhlbS4gSSdtIGdvaW5nIHRvIHNraXAgdGhlbSBmcm9tIGFueSBmdXJ0aGVyIGFuYWx5c2lzIGluIHRoaXMgY2FzZSwgYXMgdGhleSBkb24ndCBzZWVtIGRpcmVjdGx5IHJlbGV2YW50IHRvIHdoYXQgSSdtIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHdvcmsgd2l0aCB0aGUgbWVtb3J5LlxuXG5SaWdodCBub3csIEkgYW0gZ29pbmcgdG8gY2hlY2sgYGFyY2gvczM5MC9rdm0vZmF1bHRpbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGxvb2sgYXQgdGhlIGBrdm1fczM5MF9mYXVsdGluX2dmbmAgZnVuY3Rpb24gZm9yIHNvbWUgY2x1ZXMuIEknbSBob3BpbmcgaXQnbGwgb2ZmZXIgc29tZSBpbnNpZ2h0IGludG8gaG93IGZhdWx0cyBhcmUgaGFuZGxlZCwgd2hpY2ggcmVsYXRlcyBkaXJlY3RseSB0byB0aGUgZXh0ZXJuYWwgY2FsbCBtZWNoYW5pc21zIEknbSBsb29raW5nIGludG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NjU2LCJPdXRwdXRUb2tlbnMiOjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDQ6MTMuMjA3ODQ1NDYxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA5OTA1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZHxsb25nfGJvb2wpIFthLXpBLVowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2ZhdWx0aW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0xNC1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzoxNTpib29sIGt2bV9hcmNoX3NldHVwX2FzeW5jX3BmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTYtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0zMi0gKi9cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzozMzppbnQga3ZtX3MzOTBfZmF1bHRpbl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYXVsdCAqZilcXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0zNC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0xMjgtXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6MTI5OmludCBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYXVsdCAqZiwgZ2ZuX3QgZ2ZuLCBib29sIHcpXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTMwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDQ6MTMuMzE4ODQwMzQ5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MTU3OTgyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTS9zMzkwIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIG1ha2luZyBzb21lIGRlY2lzaW9ucyBhYm91dCBwb3RlbnRpYWwgYXJlYXMgZm9yIHJldmlldyBvciByZWZhY3RvcmluZywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHN5bWJvbCB2aXNpYmlsaXR5LiBJIG5vdGVkIHRoYXQgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCBpcyAqbm90KiBkZWNsYXJlZCBzdGF0aWMsIHdoaWNoIGlzIGEga2V5IG9ic2VydmF0aW9uLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEknbSBnb2luZyB0byBzdW1tYXJpemUgdGhlIHJlbGV2YW50IHN5bWJvbHM6IGBrdm1fYXJjaF92bV9pb2N0bGAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25gLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAsIGFuZCBvZiBjb3Vyc2UgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCDigJMgdGhpcyBpcyBteSBwcmltYXJ5IGludGVyZXN0LlxuXG5JIGluaXRpYWxseSB0aG91Z2h0IGBrdm1fYXJjaF92bV9pb2N0bGAgbWlnaHQgYmUgYSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9uLCBidXQgcXVpY2tseSByZWFsaXplZCBpdCdzIGFjdHVhbGx5IHRoZSBWTSBpb2N0bCBoYW5kbGVyLiBJdCdzIGEgZnVuZGFtZW50YWwgZW50cnkgcG9pbnQsIGJ1dCBub3QgaW4gdGhlIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhdGggbGlrZSBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBUaGF0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIGZvciBmdXR1cmUgb3B0aW1pemF0aW9uIGNvbnNpZGVyYXRpb25zLiBJIHdhbnRlZCB0byB2ZXJpZnkgaWYgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gIGlzIHJlYWNoYWJsZSB2aWEgYGt2bV9hcmNoX3ZtX2lvY3RsYCBiZWNhdXNlIEkgdGhvdWdodCB0aGF0IG1pZ2h0IGhhdmUgYmVlbiB0aGUgYmV0dGVyIG9wdGlvbi4gSSBjYW4gY29uZmlybSwgdmlhIHRoZSBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgaW9jdGwgZm9yIGBLVk1fUzM5MF9WTV9NSUdSQVRJT05gLCB0aGF0IGl0IGlzLiBCdXQsIEkgbG9va2VkIGF0IGl0IGFuZCBpdCdzIHN0YXRpYy4gU28sIGl0IGxvb2tzIGxpa2UgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyB0aGUgY29ycmVjdCBzeW1ib2wuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhlIG90aGVyIHN5bWJvbHMuIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgaXMgYWxzbyBub24tc3RhdGljLiBUaGVuIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBhbmQgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCBhcmUgbm9uLXN0YXRpYyBhcyB3ZWxsLiBBbHNvLCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gIGlzLCB0b28sIG5vbi1zdGF0aWMuXG5cbkJlZm9yZSBJIG1vdmUgb24sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBzMzkwIEtjb25maWcgdG8gc2VlIGlmIGFueXRoaW5nIHRoZXJlIGluZmx1ZW5jZXMgdGhlc2UgY2hvaWNlcy4gVGhhdCBtaWdodCBnaXZlIG1lIHNvbWUgY2x1ZXMgYWJvdXQgd2h5IHRoZXNlIHdlcmUgZGVzaWduZWQgdGhpcyB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MzA4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjQ0OjIxLjkzNDY0Njc3NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMwNjczODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0NDoyMi4wMjc3MTgxMDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4ODAzMzAyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBDb25maWd1cmF0aW9uIGFuZCBGb2N1cyBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBLVk0gcGF0Y2gsIGFuZCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIHNlZW1zIHRvIGJlIGBLVk1gLCBuYXR1cmFsbHkuIEhvd2V2ZXIsIGBLVk1fUzM5MF9VQ09OVFJPTGAgaXMgYWxzbyBtZW50aW9uZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSlgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBLVk1fUzM5MF9VQ09OVFJPTGAgaXMgZXNzZW50aWFsIGhlcmUsIHNvIGxldCdzIGNoZWNrLlxuXG5UaGUgY29kZSBzbmlwcGV0cyBpbmNsdWRlIGNoZWNrcyBsaWtlIGBpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlgIHdoaWNoIGRpcmVjdGx5IHVzZXMgYEtWTV9TMzkwX1VDT05UUk9MYCwgYW5kIGJhc2VkIG9uIHRoYXQsIGl04oCZcyByZWxldmFudCB0byB0aGUgb3BlcmF0aW9uLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbmNsdWRlIGl0IGluIHRoZSBgRW5hYmxlQ29uZmlnc2AuXG5cbk5leHQsIEknbGwgc2NhbiBmb3IgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgQ09ORklHX0tWTWAgaXMgZGVmaW5pdGVseSBhIGNvcmUgcmVxdWlyZW1lbnQuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhlICdmb2N1cyBzeW1ib2xzJyDigJMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIHNldmVyYWw6IGBrdm1fYXJjaF92bV9pb2N0bGAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25gLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAsIGFuZCBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gLiBCdXQgYXJlIHRoZXJlIGFueSBvdGhlcnM/XG5cbkkgc2VlIGBoYW5kbGVfcnJiZWAgYW5kIGBoYW5kbGVfZXNzYWAgYXJlIHN0YXRpYywgYnV0IHRoZXkgYXJlIGNhbGxlZCBmcm9tIGluc3RydWN0aW9uIGludGVyY2VwdCBoYW5kbGVycy4gVGhlIGVudHJ5IHBvaW50IGZvciB0aGF0IHNlZW1zIHRvIGJlIGBrdm1faGFuZGxlX3NpZV9pbnRlcmNlcHRgLCB3aGljaCBpcyBhIGhvdCBwYXRoLiBBbmQgYWxzbywgYGt2bV9zMzkwX2tleW9wYCBpcyBzdGF0aWMsIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF9kZXZfaW9jdGxgIG9yIGBrdm1fYXJjaF92bV9pb2N0bGAuIEFsc28sIGBrdm1fczM5MF9nZXRfc2tleXNgLCBga3ZtX3MzOTBfc2V0X3NrZXlzYCwgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgIGFyZSBzdGF0aWMsIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF92bV9pb2N0bGAuIFRoZW4gdGhlcmUgYXJlIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAgd2hpY2ggaW5jbHVkZXMgY2hhbmdlcyByZWxhdGVkIHRvIGBrdm1faXNfdWNvbnRyb2xgIGFuZCBga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlYCB3aGljaCBpbmNsdWRlcyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYHZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZGAuXG5cbk9rYXksIEkgbmVlZCB0byBhZGQgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCBhbmQgYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAgdG8gdGhlIGZvY3VzIHN5bWJvbHMuXG5cblNvLCBoZXJlJ3MgbXkgdXBkYXRlZCBsaXN0OiBga3ZtX2FyY2hfdm1faW9jdGxgLCBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLCBga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCwgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCwgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCwgYW5kIGBrdm1fczM5MF9mYXVsdGluX2dmbmAuXG5cbk5vdywgdGltZSB0byByZWZpbmUgdGhlIGxpc3QgdG8gYXZvaWQgZ2VuZXJpYyBzeW1ib2xzLiBga3ZtX2FyY2hfdm1faW9jdGxgIGlzIGZpbmU7IGl0J3MgdGhlIGVudHJ5IHBvaW50IGZvciBWTSBpb2N0bHMuIFNhbWUgd2l0aCBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLCBhbmQgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYC4gSG93ZXZlciwgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGFuZCBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgIGFyZSBzcGVjaWZpYyB0byBQViAoUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uKS4gYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCBpcyBEQVQtc3BlY2lmaWMgKER5bmFtaWMgQWRkcmVzcyBUcmFuc2xhdGlvbiksIGFuZCBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gIGlzIGFib3V0IHBhZ2UgZmF1bHQgaGFuZGxpbmcuXG5cblRoaXMgbG9va3MgbGlrZSBhIHNvbGlkLCBzcGVjaWZpYyBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuXG5cbk5vdywgZmluYWwgY2hlY2sg4oCTIGFyZSBgS1ZNYCBhbmQgYEtWTV9TMzkwX1VDT05UUk9MYCB0aGUgb25seSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcz8gSSBuZWVkIHRvIHRoaW5rIGlmIHRoZXJlIGFyZSBQVi1yZWxhdGVkIGNvbmZpZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NDIyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjQ0OjM0LjkwODA1MTAzMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4NjI5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0NDozNC45NzA5MjAzNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg0Mjg1OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGggUGVyc2lzdGVudCBWaXJ0dWFsIE1hY2hpbmVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSdzIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIHRoaW5nP1wiIEkga25vdyB0aGUgYXJjaGl0ZWN0dXJlIGlzIHMzOTAsIHNvIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50cyBhcmUgdGhlIEtjb25maWcgZmlsZXMgc3BlY2lmaWMgdG8gdGhlIGFyY2hpdGVjdHVyZSBhbmQgS1ZNIGludGVncmF0aW9uLCBuYW1lbHkgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgYW5kIGBhcmNoL3MzOTAvS2NvbmZpZ2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFBlcnNpc3RlbnQgVk1zIGV4aXN0IGluIHRob3NlIGxvY2F0aW9ucy4gTGV0J3MgZGlnIGluIGFuZCBjaGVjay4gVGhhdCBzaG91bGQgYmUgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIGludmVzdGlnYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTQ1MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjQ0OjM4LjY1NTIwOTUyM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzNzcyMjgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyAuKlBWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjQ0OjM4LjcyNzU5NTU0MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjIxMjI3MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHByb3RlY3RlZCBtZW1vcnkgcmVnaW9ucyBhcmUgY29uZmlndXJlZCBmb3IgczM5MCBhcmNoaXRlY3R1cmUgd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IGFyY2hpdGVjdHVyZS4gSXQncyBhbG1vc3QgYWx3YXlzIHRoZSBjZW50cmFsIHJlcG9zaXRvcnkgZm9yIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgYSBzeW1ib2wgcmVsYXRlZCB0byBwcm90ZWN0aW9uLCBtYXliZSBgUFJPVEVDVEVEYCBpdHNlbGYsIG9yIHNvbWV0aGluZyBzaW1pbGFyIOKAkyBpdCBjb3VsZCBiZSBgU0VDVVJFYCwgYEdVQVJERURgLCBgUkVTVFJJQ1RFRGAsIG9yIGFueXRoaW5nIG9mIHRoYXQgbmF0dXJlLiBJJ20gZXhwZWN0aW5nIHRoaXMgZmlsZSB0byBjb250YWluIHRoZSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIHdoZXRoZXIgdGhpcyBmdW5jdGlvbmFsaXR5IGdldHMgYnVpbHQgaW50byB0aGUga2VybmVsLiBGcm9tIHRoZXJlLCBJIGNhbiB0cmFjZSBiYWNrIHdoZXJlIHRoaXMgaXMgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk2NTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0NDo0My4zNDg4MjU1MjlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTYwNDEzNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIC4qUFJPVEVDVEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjQ0OjQzLjU3ODQzNzAwNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzQ1ODI2NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqUG90ZW50aWFsIE1pc2ludGVycHJldGF0aW9uIG9mIE1lbW9yeSBQcm90ZWN0aW9uIEZsYWcqKlxuXG5IbW0sIEkgd2FzIGp1c3QgcmV2aWV3aW5nIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIG1lbW9yeSBwcm90ZWN0aW9uIGZsYWdzIGZvciB0aGF0IG5ldyBtYXBwaW5nLCBhbmQgZm9yIGEgbW9tZW50IEkgdGhvdWdodCBJIGhhZCB0aGUgd3JvbmcgZmxhZy4gSSB3YXMgY29uc2lkZXJpbmcgYFBST1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUNgLCBidXQgdGhlbiBJIGhhZCB0aGlzIGZsaWNrZXIgb2YgZG91YnQuIERpZCBJIHBlcmhhcHMgbWlzcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiwgb3IgbWF5YmUgbWlzcmVtZW1iZXIgdGhlIGludGVuZGVkIGFjY2VzcyBwZXJtaXNzaW9ucz8gQ291bGQgaXQgYmUgdGhhdCB3aGF0IEkgKnJlYWxseSogbmVlZCBoZXJlIGlzIGBQUk9UX1ZJUlRgPyBJdCdzIHRoZSBvbmUgSSBzaG91bGQgZG91YmxlLWNoZWNrIHNpbmNlIEkgZG8gbm90IHdhbnQgdG8gbWlzdGFrZW5seSBncmFudCB1bm5lY2Vzc2FyeSBwZXJtaXNzaW9ucyBmb3Igc2VjdXJpdHkgb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gSSBzaG91bGQgZ28gYmFjayBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9uIGFnYWluc3QgdGhlIGRvY3VtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5ODgzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDQ6NDguMzI0MjY2MjIxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDAwNDU4OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIC4qUFJPVF9WSVJUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjQ0OjQ4LjM3NDI3NjgxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NzQ3MjYzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBwdi5jYCBvbiBzMzkweCBLVk0qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBzMzkweCBLVk0ncyBwYXJhdmlydHVhbGl6YXRpb24gY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBwb3RlbnRpYWwgcGxhdGZvcm0tc3BlY2lmaWMgYWRhcHRhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNjYW4gYGFyY2gvczM5MC9rdm0vcHYuY2Agd2l0aCBhIGxhc2VyIGZvY3VzIG9uIGAjaWZkZWZgIGRpcmVjdGl2ZXMuIEknbSBsb29raW5nIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MuIFRoaXMgd2lsbCBzaG93IG1lIHdoZXJlIHRoZSBhcmNoaXRlY3R1cmUgbWlnaHQgaGF2ZSBkaXZlcmdlZCBmb3Igc3BlY2lmaWMgZmVhdHVyZSBzZXRzLCB2ZW5kb3IgcXVpcmtzLCBvciBvbGRlciBrZXJuZWxzIGFuZCBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgUFYgY29kZSBoYW5kbGVzIGl0LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXQgY2hlY2tzIG9yIG1heWJlIGV2ZW4gaGFuZGxpbmcgb2YgZGlmZmVyZW50IEtWTSBoeXBlcnZpc29yIHZlcnNpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgYWRhcHRzIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCBwb3RlbnRpYWxseSB2YXJ5aW5nIEtWTSBob3N0IGNhcGFiaWxpdGllcy4gSSdtIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGFyZSBnb2luZyB0byBndWlkZSBtZSB0byB0aG9zZSBjcml0aWNhbCBhcmVhcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZGVidWdnaW5nIGFuZCBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAxMTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0NDo1Mi45NDkwMDYyODhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNDQ0MzA5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9wdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0NDo1Mi45OTA0NTgxMTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM1MzY1NjkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgczM5MCBLVk0gU3Vic3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBpcyBjb25zaXN0ZW50bHkgY29tcGlsZWQgd2hlbmV2ZXIgS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBpcyBlbmFibGVkIG9uIHMzOTAuIFRoaXMgaXMgaW1wb3J0YW50IHRvIG5vdGUgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLlxuXG5MZXQncyBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uczogYEtWTWAgYW5kIGBLVk1fUzM5MF9VQ09OVFJPTGAuIE5vdywgbGV0J3MgbG9vayBhdCB0aGUgc3ltYm9scyB0aGF0IGRyaXZlIHRoZSBmb2N1cyBvZiBvdXIgYW5hbHlzaXMuIEkgc2VlIHRoZXNlOiBga3ZtX2FyY2hfdm1faW9jdGxgLCBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLCBga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCwgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCwgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCwgYW5kIGBrdm1fczM5MF9mYXVsdGluX2dmbmAuXG5cblRoZSByZWFzb24gdGhlc2UgYXJlIGltcG9ydGFudCBpcyBiZWNhdXNlIHRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgbWFraW5nIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gc3Vic3lzdGVtLiBUaGVzZSBjaGFuZ2VzIGFyZSBhZGRyZXNzaW5nIHRoaW5ncyBsaWtlIG1lbW9yeSBsZWFrcywgbG9ja2luZyBpc3N1ZXMsIGluaXRpYWxpemF0aW9uIHJhY2VzLCBhbmQgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cy4gSXQncyBtb2RpZnlpbmcgY29yZSBLVk0gaW9jdGxzLCBob3cgbWVtb3J5IHJlZ2lvbnMgYXJlIG1hbmFnZWQsIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBQViBDUFUgbGlmZWN5Y2xlLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGFyZSBhbGwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBlaXRoZXIgdGhyb3VnaCBLVk0gaW9jdGxzIG9yIG1lbW9yeSBhY2Nlc3Nlcywgd2hpY2ggbWVhbnMgdGhleSdyZSBleGNlbGxlbnQgdGFyZ2V0cyBmb3IgZnV6emluZy5cblxuTGV0J3MgcXVpY2tseSBjaGVjayBhIGNvdXBsZSBvZiB0aGVzZSBzeW1ib2xzLiBga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlYCBzZWVtcyBmaW5lIGFzIGEgc3ltYm9sLCBhcyBpdCdzIGNhbGxlZCBvbmNlIHBlciB2Q1BVIGNyZWF0aW9uLiBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gIGlzIHRyaWdnZXJlZCBkdXJpbmcgcGFnZSBmYXVsdHMsIHdoaWNoIGlzIGFsc28gYSBnb29kIHRhcmdldC4gYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCBpcyBjYWxsZWQgZHVyaW5nIGBLVk1fUzM5MF9LRVlPUF9SUkJFYCBhbmQgYGhhbmRsZV9ycmJlYC4gVGhhdCdzIGFsc28gZ29vZC5cblxuV2l0aCB0aGlzIHNvbGlkIHVuZGVyc3RhbmRpbmcsIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA0MDksIk91dHB1dFRva2VucyI6MjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjQ1OjAyLjM0NDExNzY2MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNjQzMDY5LCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fUzM5MF9VQ09OVFJPTCIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9TMzkwX1VDT05UUk9MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdm1faW9jdGxcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfY3JlYXRlXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVcIixcbiAgICBcImt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdFwiLFxuICAgIFwia3ZtX3MzOTBfZmF1bHRpbl9nZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGZpeGVzIGZvciBtZW1vcnkgbGVha3MsIGxvY2tpbmcsIGluaXRpYWxpemF0aW9uIHJhY2VzLCBhbmQgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cy4gSXQgbW9kaWZpZXMgY29yZSBLVk0gaW9jdGxzLCBtZW1vcnkgcmVnaW9uIG1hbmFnZW1lbnQsIGFuZCBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBDUFUgbGlmZWN5Y2xlIGZ1bmN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgYWNjZXNzZXMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fUzM5MF9VQ09OVFJPTFwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjo0NTowMi40MTc3Njg1MjlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyNjUxNjQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCBhc3N1bWluZyBJJ20gYSBMaW51eCBrZXJuZWwgZGV2ZWxvcGVyL0tWTSBzcGVjaWFsaXN0OlxuXG4qKkNoZWNraW5nIGZvciBLVk1fUzM5MF9VQ09OVFJPTCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsICpLVk1fUzM5MF9VQ09OVFJPTCouLi4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGJlaW5nIGEgdGhpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gTGV0IG1lIGNvbmZpcm0sIGl0IHNob3VsZCBiZSBpbiB0aGUgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgZXhhY3QgbmFtZSBjb3JyZWN0LCBhcyBhIG1pc3NwZWxsaW5nIGhlcmUgd291bGQgYmUgYSByZWFsIHdhc3RlIG9mIHRpbWUuIEkgY2FuJ3QgYmUgb2ZmIGJ5IGV2ZW4gYSBjaGFyYWN0ZXIuIE9rYXksIGxldCBtZSBxdWlja2x5IHZlcmlmeSB0aGUgZXhhY3QgZGVzaWduYXRpb24uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE1NDgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInNldC1yZXN1bHRzIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDU6MDYuNzQ0Mjg4MTgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYzMTcxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWc9MTk9Y29uZmlnIEtWTVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDU6MDYuODgwNjExMTc5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTk4NDI2MTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIEVycm9yKipcblxuT2theSwgc28gdGhlIGVycm9yIG1lc3NhZ2UgaXMgc2NyZWFtaW5nIGFib3V0IGBLVk1fUzM5MF9VQ09OVFJPTGAgbm90IGJlaW5nIGZvdW5kLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8sIG9mIGNvdXJzZSwgY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLiBCdXQgaG9sZCBvbiwgdGhlIHRvb2wgbWlnaHQgYmUgbG9va2luZyBmb3IgdGhpcyBjb25maWd1cmF0aW9uIHVuZGVyIGB4ODZgLCB3aGljaCwgYXMgd2Uga25vdywgaXNuJ3QgdGhlIG9ubHkgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzZWFyY2ggaXNuJ3QgZXJyb25lb3VzbHkgZmlsdGVyaW5nIGJ5IGFyY2hpdGVjdHVyZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYEtWTV9TMzkwX1VDT05UUk9MYCBpcyAqYWN0dWFsbHkqIHRoZSBjb3JyZWN0IG5hbWUgZm9yIHRoZSBjb25maWcsIGp1c3QgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBmYXQtZmluZ2VyZWQgc29tZXRoaW5nLiBZZXAsIGxvb2tzIGdvb2QgdGhlcmUuIElmIHRoZSB0b29sIGlzIHN0aWxsIGJlaW5nIGRpZmZpY3VsdCBhbmQgcmVqZWN0aW5nIGl0LCBJJ2xsIGp1c3Qgc2tpcCBgS1ZNX1MzOTBfVUNPTlRST0xgIGFuZCB1c2UgdGhlIG1vcmUgZ2VuZXJhbCBgS1ZNYCBjb25maWcuIEl0IG1pZ2h0IGJlIGEgd29ya2Fyb3VuZCwgYnV0IEkgaGF2ZSBhIGhpZ2ggZGVncmVlIG9mIGNvbmZpZGVuY2UgdGhhdCB0aGUgbW9yZSBnZW5lcmFsIGNvbmZpZyB3aWxsIGJlIGZ1bmN0aW9uYWxseSBzdWZmaWNpZW50LCBhdCBsZWFzdCBhcyBhIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTg4MCwiT3V0cHV0VG9rZW5zIjoyMzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NDU6MTcuNDc5MDQwNjMzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4Mjg1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZtX2lvY3RsXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2NyZWF0ZVwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiLFxuICAgIFwia3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJrdm1fczM5MF9wdl9jcmVhdGVfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9wdl9kZXN0cm95X2NwdVwiLFxuICAgIFwiZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRcIixcbiAgICBcImt2bV9zMzkwX2ZhdWx0aW5fZ2ZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBzdWJzeXN0ZW0sIGluY2x1ZGluZyBmaXhlcyBmb3IgbWVtb3J5IGxlYWtzLCBsb2NraW5nLCBpbml0aWFsaXphdGlvbiByYWNlcywgYW5kIHNpZ25hbCBoYW5kbGluZyBkdXJpbmcgcGFnZSBmYXVsdHMuIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIGlvY3RscywgbWVtb3J5IHJlZ2lvbiBtYW5hZ2VtZW50LCBhbmQgUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgQ1BVIGxpZmVjeWNsZSBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgbWVtb3J5IGFjY2Vzc2VzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9jcmVhdGVcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZVwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvblwiLFxuICAgIFwia3ZtX3MzOTBfcHZfY3JlYXRlX2NwdVwiLFxuICAgIFwia3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVcIixcbiAgICBcImRhdF9yZXNldF9yZWZlcmVuY2VfYml0XCIsXG4gICAgXCJrdm1fczM5MF9mYXVsdGluX2dmblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gc3Vic3lzdGVtLCBpbmNsdWRpbmcgZml4ZXMgZm9yIG1lbW9yeSBsZWFrcywgbG9ja2luZywgaW5pdGlhbGl6YXRpb24gcmFjZXMsIGFuZCBzaWduYWwgaGFuZGxpbmcgZHVyaW5nIHBhZ2UgZmF1bHRzLiBJdCBtb2RpZmllcyBjb3JlIEtWTSBpb2N0bHMsIG1lbW9yeSByZWdpb24gbWFuYWdlbWVudCwgYW5kIFByb3RlY3RlZCBWaXJ0dWFsaXphdGlvbiAoUFYpIENQVSBsaWZlY3ljbGUgZnVuY3Rpb25zLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBhY2Nlc3NlcywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxgjxg[1] Phase: Succeeded StartedAt: 2026-08-01 06:45:38 +0000 UTC FinishedAt: 2026-08-01 06:45:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 06:45:39 +0000 UTC FinishedAt: 2026-08-01 06:45:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2] Phase: Succeeded StartedAt: 2026-08-01 06:45:39 +0000 UTC FinishedAt: 2026-08-01 07:40:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 06:45:39 +0000 UTC FinishedAt: 2026-08-01 07:40:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 06:45:39 +0000 UTC FinishedAt: 2026-08-01 06:45:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 06:45:39 +0000 UTC FinishedAt: 2026-08-01 06:45:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowxgjxg/series-workflowxgjxg-convert-artifact-3921510536/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 06:45:49 +0000 UTC FinishedAt: 2026-08-01 07:07:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 06:45:49 +0000 UTC FinishedAt: 2026-08-01 07:07:43 +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:*b545bf41-3cbf-41b9-863e-92379117ceaf,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-workflowxgjxg/series-workflowxgjxg-convert-artifact-3921510536/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": "576f1777-7e7a-4273-9d12-ce0bd3d96029", "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-workflowxgjxg/series-workflowxgjxg-build-action-2384943870/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 06:45:49 +0000 UTC FinishedAt: 2026-08-01 07:07:33 +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:*b545bf41-3cbf-41b9-863e-92379117ceaf,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-workflowxgjxg/series-workflowxgjxg-convert-artifact-3921510536/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": "576f1777-7e7a-4273-9d12-ce0bd3d96029", "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-workflowxgjxg/series-workflowxgjxg-build-action-2384943870/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 07:07:43 +0000 UTC FinishedAt: 2026-08-01 07:07:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 07:07:44 +0000 UTC FinishedAt: 2026-08-01 07:07:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 07:07:44 +0000 UTC FinishedAt: 2026-08-01 07:07:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 07:07:44 +0000 UTC FinishedAt: 2026-08-01 07:07:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowxgjxg/series-workflowxgjxg-convert-artifact-1238456943/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 07:07:55 +0000 UTC FinishedAt: 2026-08-01 07:10:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 07:07:55 +0000 UTC FinishedAt: 2026-08-01 07:09:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*576f1777-7e7a-4273-9d12-ce0bd3d96029,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-workflowxgjxg/series-workflowxgjxg-build-action-2384943870/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-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 07:10:01 +0000 UTC FinishedAt: 2026-08-01 07:10:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 07:10:02 +0000 UTC FinishedAt: 2026-08-01 07:10:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 07:10:02 +0000 UTC FinishedAt: 2026-08-01 07:34:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 07:10:02 +0000 UTC FinishedAt: 2026-08-01 07:34:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b545bf41-3cbf-41b9-863e-92379117ceaf,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-workflowxgjxg/series-workflowxgjxg-convert-artifact-1238456943/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": "1a7fb57d-1fdd-4b8f-b68b-6e1ba26f2d00", "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-workflowxgjxg/series-workflowxgjxg-build-action-2532363779/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 07:10:02 +0000 UTC FinishedAt: 2026-08-01 07:34:32 +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:*b545bf41-3cbf-41b9-863e-92379117ceaf,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-workflowxgjxg/series-workflowxgjxg-convert-artifact-1238456943/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": "1a7fb57d-1fdd-4b8f-b68b-6e1ba26f2d00", "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-workflowxgjxg/series-workflowxgjxg-build-action-2532363779/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 07:34:42 +0000 UTC FinishedAt: 2026-08-01 07:34:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 07:34:42 +0000 UTC FinishedAt: 2026-08-01 07:34:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 07:34:42 +0000 UTC FinishedAt: 2026-08-01 07:36:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 07:34:42 +0000 UTC FinishedAt: 2026-08-01 07:36:33 +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:*1a7fb57d-1fdd-4b8f-b68b-6e1ba26f2d00,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-workflowxgjxg/series-workflowxgjxg-build-action-2532363779/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-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 07:36:46 +0000 UTC FinishedAt: 2026-08-01 07:40:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 07:36:46 +0000 UTC FinishedAt: 2026-08-01 07:40:46 +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":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*576f1777-7e7a-4273-9d12-ce0bd3d96029,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1a7fb57d-1fdd-4b8f-b68b-6e1ba26f2d00,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-workflowxgjxg/series-workflowxgjxg-build-action-2384943870/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-workflowxgjxg/series-workflowxgjxg-build-action-2532363779/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 07:36:46 +0000 UTC FinishedAt: 2026-08-01 07:37:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 07:36:46 +0000 UTC FinishedAt: 2026-08-01 07:36:58 +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":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxgjxg/series-workflowxgjxg-convert-artifact-1776429864/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 07:36:46 +0000 UTC FinishedAt: 2026-08-01 07:36:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 07:36:46 +0000 UTC FinishedAt: 2026-08-01 07:36:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 07:36:46 +0000 UTC FinishedAt: 2026-08-01 07:36:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 07:37:20 +0000 UTC FinishedAt: 2026-08-01 07:40:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_create","kvm_arch_vcpu_postcreate","kvm_arch_commit_memory_region","kvm_arch_prepare_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","dat_reset_reference_bit","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1bf9e983-10ac-4f0f-8936-71acd7ec53b4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 07:37:20 +0000 UTC FinishedAt: 2026-08-01 07:40:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*576f1777-7e7a-4273-9d12-ce0bd3d96029,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1a7fb57d-1fdd-4b8f-b68b-6e1ba26f2d00,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-workflowxgjxg/series-workflowxgjxg-build-action-2384943870/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-workflowxgjxg/series-workflowxgjxg-build-action-2532363779/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-workflowxgjxg/series-workflowxgjxg-convert-artifact-1776429864/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,}