Name: series-workflow5l5wn Phase: Succeeded StartedAt: 2026-08-12 12:26:57 +0000 UTC FinishedAt: 2026-08-12 16:30:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[0] Phase: Succeeded StartedAt: 2026-08-12 12:26:57 +0000 UTC FinishedAt: 2026-08-12 12:44:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 12:26:57 +0000 UTC FinishedAt: 2026-08-12 12:44:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "480a31230b426efb005b6e71a14ef80f405f18b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "480a31230b426efb005b6e71a14ef80f405f18b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "ec2b3718-8f80-46d7-ad16-c44e1c276441" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "lru_gen_soft_reclaim", "max_lru_gen_memcg", "try_to_free_mem_cgroup_pages" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X2dlbl9zb2Z0X3JlY2xhaW0mIzM0OywKICAgICYjMzQ7bWF4X2xydV9nZW5fbWVtY2cmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEl0IGludHJvZHVjZXMgYmF0Y2hpbmcgZm9yIExSVSBsaXN0IG9wZXJhdGlvbnMsIG1vZGlmaWVzIHRoZSBzd2FwcGluZXNzLWJhc2VkIHR5cGUgc2VsZWN0aW9uIHdpdGggYSBxdWFkcmF0aWMgYm9vc3QsIGFuZCBhZGp1c3RzIHRoZSBhZ2luZyBhbmQgaXNvbGF0aW9uIGhldXJpc3RpY3MuIFRoZXNlIGNoYW5nZXMgbWFuaXB1bGF0ZSBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcyAoYHN0cnVjdCBmb2xpb2AsIExSVSBsaXN0cykgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBsaXN0IGNvcnJ1cHRpb25zLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBtZW1vcnkgcmVjbGFpbSBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBldmljdGlvbiBwYXRoLCBmb2xpbyBzY2FubmluZywgYW5kIGFnaW5nIGhldXJpc3RpY3MuIEl0IGludHJvZHVjZXMgYmF0Y2hpbmcgaW4gYGluY19taW5fc2VxYCBhbmQgY2hhbmdlcyBob3cgYGdldF90eXBlX3RvX3NjYW5gIGNhbGN1bGF0ZXMgdGhlIHByZWZlcnJlZCByZWNsYWltIHR5cGUgYmFzZWQgb24gc3dhcHBpbmVzcy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHN0YWJpbGl0eSB1bmRlciBtZW1vcnkgcHJlc3N1cmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5NDNiMTg2NzRlYTE1OWMxNGI4OTc3M2U0ODhjOGQ3M2UzODNmYWQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTI6NDE6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYmU2YmQyNmU4YzU3OC4uMDk1MzVkOWJkZWQ1YyAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTE5MSw4ICYjNDM7MTkxLDIwIEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xuIFx0XHRcdHByZWZldGNodyhcdTAwMjZwcmV2LVx1MDAzZV9maWVsZCk7XHRcdFx0XFxcbiBcdFx0fVx0XHRcdFx0XHRcdFx0XFxcbiBcdH0gd2hpbGUgKDApXG4mIzQzOyNkZWZpbmUgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZClcdFx0XHRcXFxuJiM0MztcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdGlmICgoX2ZvbGlvKS1cdTAwM2VscnUubmV4dCAhPSBfYmFzZSkge1x0XHRcdFxcXG4mIzQzO1x0XHRcdHN0cnVjdCBmb2xpbyAqbmV4dDtcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdG5leHQgPSBsaXN0X2VudHJ5KChfZm9saW8pLVx1MDAzZWxydS5uZXh0LFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGZvbGlvLCBscnUpO1x0XHRcXFxuJiM0MztcdFx0XHRwcmVmZXRjaHcoXHUwMDI2bmV4dC1cdTAwM2VfZmllbGQpO1x0XHRcdFxcXG4mIzQzO1x0XHR9XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdH0gd2hpbGUgKDApXG4mIzQzO1xuICNlbHNlXG4gI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKSBkbyB7IH0gd2hpbGUgKDApXG4mIzQzOyNkZWZpbmUgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZCkgZG8geyB9IHdoaWxlICgwKVxuICNlbmRpZlxuIFxuIC8qXG5AQCAtMjcwLDYgJiM0MzsyODIsMTMgQEAgc3RhdGljIGlubGluZSBib29sIGlzX2V4ZWNfZmlsZV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIHZtYV9mbGFnc190ZXN0KHZtYV9mbGFncywgVk1BX0VYRUNfQklUKSBcdTAwMjZcdTAwMjYgZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIH1cbiBcbiYjNDM7LyogU2VlIGdldF90eXBlX3RvX3NjYW4oKTogdGhlc2UgdmFsdWVzIGFsd2F5cyBzZWxlY3QgRklMRSBvciBBTk9OICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpc19leHRyZW1lX3N3YXBwaW5lc3MoaW50IHN3YXBwaW5lc3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3dhcHBpbmVzcyBcdTAwM2M9IE1JTl9TV0FQUElORVNTICYjNDM7IDEgfHxcbiYjNDM7XHQgICAgICAgc3dhcHBpbmVzcyBcdTAwM2U9IE1BWF9TV0FQUElORVNTO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHNldF90YXNrX3JlY2xhaW1fc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuIFx0XHRcdFx0ICAgc3RydWN0IHJlY2xhaW1fc3RhdGUgKnJzKVxuIHtcbkBAIC0zMjk2LDIwICYjNDM7MzMxNSwyMSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYVxuIH1cbiBcbiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqL1xuLXN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpXG4ge1xuLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4tXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbi1cdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4gXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuJiM0MztcdGludCBuZXdfZ2VuO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4gXG4gXHRkbyB7XG4gXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuIFx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbi1cdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pXG4mIzQzO1x0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbikge1xuJiM0MztcdFx0XHRpZiAoaW5jcmVhc2VkKVxuJiM0MztcdFx0XHRcdCppbmNyZWFzZWQgPSBmYWxzZTtcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0bmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7XG4gXG5AQCAtMzMxNyw4ICYjNDM7MzMzNywyMSBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbiBcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuLVx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiYjNDM7XHRpZiAoaW5jcmVhc2VkKVxuJiM0MztcdFx0KmluY3JlYXNlZCA9IHRydWU7XG4mIzQzO1x0cmV0dXJuIG5ld19nZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiYjNDM7XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiYjNDM7XHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuJiM0MztcdGJvb2wgZ2VuX2luY3JlYXNlZDtcbiBcbiYjNDM7XHRuZXdfZ2VuID0gX19mb2xpb19pbmNfZ2VuKGZvbGlvLCBvbGRfZ2VuLCBcdTAwMjZnZW5faW5jcmVhc2VkKTtcbiYjNDM7XHRpZiAoZ2VuX2luY3JlYXNlZClcbiYjNDM7XHRcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4gXHRyZXR1cm4gbmV3X2dlbjtcbiB9XG4gXG5AQCAtMzg5NywxMyAmIzQzOzM5MzAsMjcgQEAgc3RhdGljIHZvaWQgY2xlYXJfbW1fd2Fsayh2b2lkKVxuIFx0XHRrZnJlZSh3YWxrKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9scnVfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqKmJhdGNoX2VuZCxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QpXG4mIzQzO3tcbiYjNDM7XHRMSVNUX0hFQUQobW92YWJsZSk7XG4mIzQzO1xuJiM0MztcdGlmICghKmJhdGNoX2VuZClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bGlzdF9jdXRfcG9zaXRpb24oXHUwMDI2bW92YWJsZSwgaGVhZCwgKmJhdGNoX2VuZCk7XG4mIzQzO1x0bGlzdF9zcGxpY2VfdGFpbF9pbml0KFx1MDAyNm1vdmFibGUsIGRzdCk7XG4mIzQzO1x0KmJhdGNoX2VuZCA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG4ge1xuIFx0aW50IHpvbmU7XG4tXHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSDtcbiYjNDM7XHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSCAvIChpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykgPyAyIDogOCk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuIFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbiYjNDM7XHRpbnQgdGFyZ2V0X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7XG4gXG4gXHQvKiBGb3IgZmlsZSB0eXBlLCBza2lwIHRoZSBjaGVjayBpZiBzd2FwcGluZXNzIGlzIGFub24gb25seSAqL1xuIFx0aWYgKHR5cGUgXHUwMDI2XHUwMDI2IChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSlcbkBAIC0zOTE1LDMzICYjNDM7Mzk2Miw1NSBAQCBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbiBcbiBcdC8qIHByZXZlbnQgY29sZC9ob3QgaW52ZXJzaW9uIGlmIHRoZSB0eXBlIGlzIGV2aWN0YWJsZSAqL1xuIFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGxpc3RfaGVhZCAqdGFyZ2V0X2xpc3QgPSBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdO1xuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tvbGRfZ2VuXVt0eXBlXVt6b25lXTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcHJvdGVjdGVkW01BWF9OUl9USUVSU10gPSB7fSwgZGVsdGEgPSAwO1xuJiM0MztcdFx0c3RydWN0IGxpc3RfaGVhZCAqcG9zID0gaGVhZC1cdTAwM2VuZXh0O1xuJiM0MztcdFx0c3RydWN0IGxpc3RfaGVhZCAqYmF0Y2hfZW5kID0gTlVMTDtcbiBcbi1cdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4tXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcbiYjNDM7XHRcdHdoaWxlIChwb3MgIT0gaGVhZCkge1xuJiM0MztcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBmb2xpbywgbHJ1KTtcbiYjNDM7XHRcdFx0bG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcdFx0XHRpbnQgcmVmcyA9IGZvbGlvX2xydV9yZWZzKGZvbGlvKTtcbiBcdFx0XHRib29sIHdvcmtpbmdzZXQgPSBmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pO1xuJiM0MztcdFx0XHRib29sIGdlbl9pbmNyZWFzZWQ7XG4gXG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSwgZm9saW8pO1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19pc19maWxlX2xydShmb2xpbykgIT0gdHlwZSwgZm9saW8pO1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb196b25lbnVtKGZvbGlvKSAhPSB6b25lLCBmb2xpbyk7XG4gXG4tXHRcdFx0bmV3X2dlbiA9IGZvbGlvX2luY19nZW4obHJ1dmVjLCBmb2xpbyk7XG4tXHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW25ld19nZW5dW3R5cGVdW3pvbmVdKTtcbiYjNDM7XHRcdFx0cHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKGZvbGlvLCBoZWFkLCBmbGFncyk7XG4mIzQzO1x0XHRcdHBvcyA9IHBvcy1cdTAwM2VuZXh0O1xuJiM0MztcdFx0XHRuZXdfZ2VuID0gX19mb2xpb19pbmNfZ2VuKGZvbGlvLCBvbGRfZ2VuLCBcdTAwMjZnZW5faW5jcmVhc2VkKTtcbiYjNDM7XHRcdFx0aWYgKGdlbl9pbmNyZWFzZWQpIHtcbiYjNDM7XHRcdFx0XHRkZWx0YSAmIzQzOz0gbnJfcGFnZXM7XG4mIzQzO1x0XHRcdFx0YmF0Y2hfZW5kID0gXHUwMDI2Zm9saW8tXHUwMDNlbHJ1O1xuIFxuLVx0XHRcdC8qIGRvbiYjMzk7dCBjb3VudCB0aGUgd29ya2luZ3NldCBiZWluZyBsYXppbHkgcHJvbW90ZWQgKi9cbi1cdFx0XHRpZiAocmVmcyAmIzQzOyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgJiM0MzsgMSkge1xuLVx0XHRcdFx0aW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7XG4tXHRcdFx0XHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4mIzQzO1x0XHRcdFx0LyogZG9uJiMzOTt0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqL1xuJiM0MztcdFx0XHRcdGlmIChyZWZzICYjNDM7IHdvcmtpbmdzZXQgIT0gQklUKExSVV9SRUZTX1dJRFRIKSAmIzQzOyAxKSB7XG4mIzQzO1x0XHRcdFx0XHRpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTtcbiBcbi1cdFx0XHRcdFdSSVRFX09OQ0UobHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSxcbi1cdFx0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSAmIzQzOyBkZWx0YSk7XG4mIzQzO1x0XHRcdFx0XHRwcm90ZWN0ZWRbdGllcl0gJiM0Mzs9IG5yX3BhZ2VzO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRmbHVzaF9scnVfYmF0Y2goaGVhZCwgXHUwMDI2YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7XG4mIzQzO1x0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSk7XG4gXHRcdFx0fVxuLVxuIFx0XHRcdGlmICghLS1yZW1haW5pbmcpXG4tXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4gXHRcdH1cbiYjNDM7XHRcdGZsdXNoX2xydV9iYXRjaChoZWFkLCBcdTAwMjZiYXRjaF9lbmQsIHRhcmdldF9saXN0KTtcbiYjNDM7XG4mIzQzO1x0XHRXUklURV9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1tvbGRfZ2VuXVt0eXBlXVt6b25lXSxcbiYjNDM7XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdIC0gZGVsdGEpO1xuJiM0MztcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV0sXG4mIzQzO1x0XHRcdCAgIGxydWdlbi1cdTAwM2Vucl9wYWdlc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXSAmIzQzOyBkZWx0YSk7XG4mIzQzO1x0XHRmb3IgKGludCB0aWVyID0gMDsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLFxuJiM0MztcdFx0XHRcdCAgIGxydWdlbi1cdTAwM2Vwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0gJiM0MzsgcHJvdGVjdGVkW3RpZXJdKTtcbiYjNDM7XHRcdGlmICghcmVtYWluaW5nKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gZG9uZTpcbiBcdHJlc2V0X2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdHJ1ZSk7XG5AQCAtNDE1MSwyMCAmIzQzOzQyMjAsMjggQEAgc3RhdGljIHZvaWQgc2V0X2luaXRpYWxfcHJpb3JpdHkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbFxuIFx0c2MtXHUwMDNlcHJpb3JpdHkgPSBjbGFtcChwcmlvcml0eSwgREVGX1BSSU9SSVRZIC8gMiwgREVGX1BSSU9SSVRZKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfZ2VuX3NpemUoc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbixcbiYjNDM7XHRcdGludCB0eXBlLCB1bnNpZ25lZCBsb25nIHNlcSlcbiYjNDM7e1xuJiM0MztcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzaXplID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgem9uZSA9IDA7IHpvbmUgXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSYjNDM7JiM0MzspXG4mIzQzO1x0XHRzaXplICYjNDM7PSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xuJiM0MztcdHJldHVybiBzaXplO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIHtcbi1cdGludCBnZW4sIHR5cGUsIHpvbmU7XG4mIzQzO1x0aW50IHR5cGU7XG4gXHR1bnNpZ25lZCBsb25nIHNlcSwgdG90YWwgPSAwO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4gXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuIFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbiBcbiBcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3MpIHtcbi1cdFx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KSB7XG4tXHRcdFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xuLVx0XHRcdGZvciAoem9uZSA9IDA7IHpvbmUgXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSYjNDM7JiM0MzspXG4tXHRcdFx0XHR0b3RhbCAmIzQzOz0gbWF4KFJFQURfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTtcbi1cdFx0fVxuJiM0MztcdFx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHR0b3RhbCAmIzQzOz0gbHJ1dmVjX2dlbl9zaXplKGxydWdlbiwgdHlwZSwgc2VxKTtcbiBcdH1cbiBcbiBcdHJldHVybiB0b3RhbDtcbkBAIC00NzI4LDcgJiM0Mzs0ODA1LDggQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FcbiBcbiBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHQgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCB0eXBlLCBpbnQgdGllcixcbi1cdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwKVxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwLFxuJiM0MztcdFx0ICAgICAgIGJvb2wgKmV4aGF1c3RlZClcbiB7XG4gXHRpbnQgaTtcbiBcdGludCBnZW47XG5AQCAtNDczOSwxMiAmIzQzOzQ4MTcsMTUgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdGludCBza2lwcGVkID0gMDtcbiBcdHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nID0gbnJfdG9fc2NhbjtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuJiM0MztcdGJvb2wgZWFybHlfc3RvcCA9IGZhbHNlO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKG5yX3RvX3NjYW4gXHUwMDNlIE1BWF9MUlVfQkFUQ0gpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KGxpc3QpKTtcbiBcbi1cdGlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpID09IE1JTl9OUl9HRU5TKVxuJiM0MztcdGlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpID09IE1JTl9OUl9HRU5TKSB7XG4mIzQzO1x0XHQqZXhoYXVzdGVkID0gdHJ1ZTtcbiBcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuIFxuIFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4gXG5AQCAtNDc3NSw4ICYjNDM7NDg1NiwxMCBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0c2tpcHBlZF96b25lICYjNDM7PSBkZWx0YTtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0aWYgKCEtLXJlbWFpbmluZyB8fCBtYXgoaXNvbGF0ZWQsIHNraXBwZWRfem9uZSkgXHUwMDNlPSBNSU5fTFJVX0JBVENIKVxuJiM0MztcdFx0XHRpZiAoIS0tcmVtYWluaW5nIHx8IG1heChpc29sYXRlZCwgc2tpcHBlZF96b25lKSBcdTAwM2U9IE1JTl9MUlVfQkFUQ0gpIHtcbiYjNDM7XHRcdFx0XHRlYXJseV9zdG9wID0gdHJ1ZTtcbiBcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcbiBcdFx0aWYgKHNraXBwZWRfem9uZSkge1xuQEAgLTQ3ODUsOCAmIzQzOzQ4NjgsMTAgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRza2lwcGVkICYjNDM7PSBza2lwcGVkX3pvbmU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKCFyZW1haW5pbmcgfHwgaXNvbGF0ZWQgXHUwMDNlPSBNSU5fTFJVX0JBVENIKVxuJiM0MztcdFx0aWYgKCFyZW1haW5pbmcgfHwgaXNvbGF0ZWQgXHUwMDNlPSBNSU5fTFJVX0JBVENIKSB7XG4mIzQzO1x0XHRcdGVhcmx5X3N0b3AgPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0aXRlbSA9IFBHU0NBTl9LU1dBUEQgJiM0MzsgcmVjbGFpbWVyX29mZnNldChzYyk7XG5AQCAtNDc5Nyw2ICYjNDM7NDg4MiwxMyBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0c2Nhbm5lZCwgc2tpcHBlZCwgaXNvbGF0ZWQsXG4gXHRcdFx0XHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB3ZSBkaWRuJiMzOTt0IHN0b3AgZWFybHksIGFsbCByZWNsYWltYWJsZSBmb2xpb3MgaW4gdGhlIGN1cnJlbnRcbiYjNDM7XHQgKiBnZW5lcmF0aW9uIGhhdmUgYmVlbiBzY2FubmVkLiBXZSBhcmUgZXhoYXVzdGVkIGlmIHRoaXMgaXMgdGhlIGxhc3RcbiYjNDM7XHQgKiByZWNsYWltYWJsZSBnZW5lcmF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdCpleGhhdXN0ZWQgPSAhZWFybHlfc3RvcCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgbHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0gJiM0MzsgTUlOX05SX0dFTlMgPT0gbHJ1Z2VuLVx1MDAzZW1heF9zZXE7XG4gXHQqaXNvbGF0ZWRwID0gaXNvbGF0ZWQ7XG4gXHRyZXR1cm4gc2Nhbm5lZDtcbiB9XG5AQCAtNDgyNCw1MSAmIzQzOzQ5MTYsOTAgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbiBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4gXHRzdHJ1Y3QgY3RybF9wb3Mgc3AsIHB2ID0ge307XG4mIzQzO1x0aW50IGFub25fZ2FpbiwgZmlsZV9nYWluO1xuIFxuIFx0aWYgKHN3YXBwaW5lc3MgXHUwMDNjPSBNSU5fU1dBUFBJTkVTUyAmIzQzOyAxKVxuIFx0XHRyZXR1cm4gTFJVX0dFTl9GSUxFO1xuIFxuIFx0aWYgKHN3YXBwaW5lc3MgXHUwMDNlPSBNQVhfU1dBUFBJTkVTUylcbiBcdFx0cmV0dXJuIExSVV9HRU5fQU5PTjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBcHBseSBhIHF1YWRyYXRpYyBib29zdCBiYXNlZCBvbiB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgbmV1dHJhbFxuJiM0MztcdCAqIGJhbGFuY2UgcG9pbnQgKHN3YXBwaW5lc3MgPSBNQVhfU1dBUFBJTkVTUyAvIDIpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQSBsaW5lYXIgd2VpZ2h0IGlzIGVhc2lseSBvdmVyd2hlbG1lZCBieSBoaXN0b3JpY2FsIHJlZmF1bHQgY29zdFxuJiM0MztcdCAqIHdoZW4gc3dhcHBpbmVzcyBkZXZpYXRlcyBmcm9tIG5ldXRyYWwuIFRoZSBxdWFkcmF0aWMgc2NhbGluZ1xuJiM0MztcdCAqIGFtcGxpZmllcyB0aGUgd2VpZ2h0IG9mIHRoZSBwcmVmZXJyZWQgdHlwZSBzbW9vdGhseS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3dhcHBpbmVzcyBcdTAwM2MgTUFYX1NXQVBQSU5FU1MgLyAyKSB7XG4mIzQzO1x0XHRpbnQgZGVsdGEgPSAoTUFYX1NXQVBQSU5FU1MgLyAyKSAtIHN3YXBwaW5lc3M7XG4mIzQzO1x0XHRpbnQgYm9vc3QgPSAoZGVsdGEgKiBkZWx0YSkgXHUwMDNlXHUwMDNlIDQ7XG4mIzQzO1xuJiM0MztcdFx0YW5vbl9nYWluID0gc3dhcHBpbmVzcztcbiYjNDM7XHRcdGZpbGVfZ2FpbiA9IChNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MpICYjNDM7IGJvb3N0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpbnQgZGVsdGEgPSBzd2FwcGluZXNzIC0gKE1BWF9TV0FQUElORVNTIC8gMik7XG4mIzQzO1x0XHRpbnQgYm9vc3QgPSAoZGVsdGEgKiBkZWx0YSkgXHUwMDNlXHUwMDNlIDQ7XG4mIzQzO1xuJiM0MztcdFx0YW5vbl9nYWluID0gc3dhcHBpbmVzcyAmIzQzOyBib29zdDtcbiYjNDM7XHRcdGZpbGVfZ2FpbiA9IE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmVcbiBcdCAqIHdoaWNoIHR5cGUgdG8gc2Nhbi5cbiBcdCAqL1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuJiM0MztcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgYW5vbl9nYWluLCBcdTAwMjZzcCk7XG4mIzQzO1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBmaWxlX2dhaW4sIFx1MDAyNnB2KTtcbiBcbiBcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX3NpbmdsZV90eXBlX3JlY2xhaW0oaW50IHN3YXBwaW5lc3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3dhcHBpbmVzcyA9PSBNSU5fU1dBUFBJTkVTUyB8fFxuJiM0MztcdCAgICAgICBzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MsXG4gXHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkLFxuIFx0XHRcdCAgaW50ICppc29sYXRlX3R5cGUsIGludCAqaXNvbGF0ZV9zY2FubmVkKVxuIHtcbi1cdGludCBpO1xuLVx0aW50IHRvdGFsX3NjYW5uZWQgPSAwO1xuJiM0MztcdGJvb2wgdHlwZV9mYWxsYmFja19hbGxvd2VkID0gIWlzX3NpbmdsZV90eXBlX3JlY2xhaW0oc3dhcHBpbmVzcyk7XG4gXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbiYjNDM7XHRpbnQgdG90YWxfc2Nhbm5lZCA9IDAsIHNjYW5uZWQsIHRpZXI7XG4mIzQzO1x0Ym9vbCBleGhhdXN0ZWQsIHRyaWVkID0gZmFsc2U7XG4gXG4tXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7XG4tXHRcdGludCBzY2FubmVkO1xuLVx0XHRpbnQgdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xuJiM0MztyZXRyeTpcbiYjNDM7XHR0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7XG4mIzQzO1x0c2Nhbm5lZCA9IHNjYW5fZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsXG4mIzQzO1x0XHRcdCAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkLCBcdTAwMjZleGhhdXN0ZWQpO1xuIFxuLVx0XHRzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYyxcbi1cdFx0XHRcdCAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkKTtcbiYjNDM7XHR0b3RhbF9zY2FubmVkICYjNDM7PSBzY2FubmVkO1xuJiM0MztcdGlmICgqaXNvbGF0ZWQpIHtcbiYjNDM7XHRcdCppc29sYXRlX3R5cGUgPSB0eXBlO1xuJiM0MztcdFx0Kmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7XG4mIzQzO1x0XHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcbiYjNDM7XHR9XG4gXG4tXHRcdHRvdGFsX3NjYW5uZWQgJiM0Mzs9IHNjYW5uZWQ7XG4tXHRcdGlmICgqaXNvbGF0ZWQpIHtcbi1cdFx0XHQqaXNvbGF0ZV90eXBlID0gdHlwZTtcbi1cdFx0XHQqaXNvbGF0ZV9zY2FubmVkID0gc2Nhbm5lZDtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHQvKlxuLVx0XHQgKiBJZiBzY2FubmVkIFx1MDAzZSAwIGFuZCBpc29sYXRlZCA9PSAwLCBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlXG4tXHRcdCAqIG90aGVyIHR5cGUsIGFzIHRoaXMgdHlwZSByZW1haW5zIHN1ZmZpY2llbnQuIEZhbGxpbmcgYmFja1xuLVx0XHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFzY2FubmVkKVxuLVx0XHRcdHR5cGUgPSAhdHlwZTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGFyZSBydW5uaW5nIG91dCBvZiB0aGUgY3VycmVudCByZWNsYWltIHR5cGUuIEZhbGwgYmFjayB0b1xuJiM0MztcdCAqIHRoZSBvdGhlciB0eXBlIGlmIGFsbG93ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGV4aGF1c3RlZCBcdTAwMjZcdTAwMjYgdHlwZV9mYWxsYmFja19hbGxvd2VkKSB7XG4mIzQzO1x0XHR0eXBlID0gIXR5cGU7XG4mIzQzO1x0XHR0eXBlX2ZhbGxiYWNrX2FsbG93ZWQgPSBmYWxzZTtcbiYjNDM7XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fVxuJiM0MztcdC8qXG4mIzQzO1x0ICogV2UgYXJlIG5vdCBleGhhdXN0ZWQsIGJ1dCBmYWlsZWQgdG8gaXNvbGF0ZSBhbnkgZm9saW9zIGR1ZSB0b1xuJiM0MztcdCAqIHJhY2VzLiBHaXZlIHRoaXMgdHlwZSBvbmUgbW9yZSBjaGFuY2UgdG8gYXZvaWQgYSBsYXJnZXIgbG9vcC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWV4aGF1c3RlZCBcdTAwMjZcdTAwMjYgIXRyaWVkKSB7XG4mIzQzO1x0XHR0cmllZCA9IHRydWU7XG4mIzQzO1x0XHRnb3RvIHJldHJ5O1xuIFx0fVxuIFxuIFx0cmV0dXJuIHRvdGFsX3NjYW5uZWQ7XG5AQCAtNDk3MCwyMSAmIzQzOzUxMDEsNjcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRyZXR1cm4gc2Nhbm5lZDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGxydV9nZW5faW1iYWxhbmNlZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcbiYjNDM7XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHlvdW5nID0gMCwgb2xkID0gMCwgbGFnID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGluYWN0aXZlX3JhdGlvLCBnYjtcbiYjNDM7XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuJiM0MztcbiYjNDM7XHQvKiB3ZSBzdGlsbCBoYXZlIGVub3VnaCBnZW5lcmF0aW9ucyB0byByZWNsYWltICovXG4mIzQzO1x0aWYgKG1pbl9zZXFbdHlwZV0gJiM0MzsgTUlOX05SX0dFTlMgXHUwMDNjIG1heF9zZXEpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVHJpZ2dlciBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgcnVubmluZyBsb3cgb24gcmVjbGFpbWFibGVcbiYjNDM7XHQgKiBmb2xpb3MsIHByb3ZpZGVkIHRoZSBnZW5lcmF0aW9uIGxhZyBvZiB0aGUgb3RoZXIgdHlwZSByZW1haW5zIHNtYWxsXG4mIzQzO1x0ICogZW5vdWdoIHRoYXQgaW5jX21pbl9zZXEoKSBpbnRyb2R1Y2VzIG5lZ2xpZ2libGUgb3ZlcmhlYWRcbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGxvbmcgc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFx1MDAzYz0gbWF4X3NlcTsgc2VxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gbHJ1dmVjX2dlbl9zaXplKGxydWdlbiwgdHlwZSwgc2VxKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2VxICYjNDM7IE1JTl9OUl9HRU5TIFx1MDAzZSBtYXhfc2VxKVxuJiM0MztcdFx0XHR5b3VuZyAmIzQzOz0gc2l6ZTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0b2xkICYjNDM7PSBzaXplO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAobWluX3NlcVshdHlwZV0gJiM0MzsgTUFYX05SX0dFTlMgPT0gbWF4X3NlcSAmIzQzOyAxKVxuJiM0MztcdFx0bGFnICYjNDM7PSBscnV2ZWNfZ2VuX3NpemUobHJ1Z2VuLCAhdHlwZSwgbWluX3NlcVshdHlwZV0pO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJvcnJvdyB0aGUgYWRhcHRpdmUgcmF0aW8gZnJvbSBpbmFjdGl2ZV9pc19sb3coKSwgYW5kIHNjYWxlXG4mIzQzO1x0ICogaXQgYnkgc3FydChNQVhfTlJfR0VOUykgdG8gbWFrZSBhZ2luZyBsZXNzIGFnZ3Jlc3NpdmVcbiYjNDM7XHQgKi9cbiYjNDM7XHRnYiA9ICh5b3VuZyAmIzQzOyBvbGQpIFx1MDAzZVx1MDAzZSAoMzAgLSBQQUdFX1NISUZUKTtcbiYjNDM7XHRpbmFjdGl2ZV9yYXRpbyA9IGdiID8gaW50X3NxcnQoMTAgKiBnYiAqIE1BWF9OUl9HRU5TKSA6IE1BWF9OUl9HRU5TO1xuJiM0MztcdHJldHVybiB5b3VuZyBcdTAwM2Ugb2xkICogaW5hY3RpdmVfcmF0aW8gXHUwMDI2XHUwMDI2IChsYWcgXHUwMDNjIE1BWF9MUlVfQkFUQ0ggfHxcbiYjNDM7XHQgICAgICAgKGlzX2V4dHJlbWVfc3dhcHBpbmVzcyhzd2FwcGluZXNzKSBcdTAwMjZcdTAwMjYgc2MtXHUwMDNlcHJpb3JpdHkgXHUwMDNlIDIpKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCBzaG91bGRfcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxLFxuIFx0XHRcdCAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuIHtcbiYjNDM7XHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbiBcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4gXG4tXHQvKiBoYXZlIHRvIHJ1biBhZ2luZywgc2luY2UgZXZpY3Rpb24gaXMgbm90IHBvc3NpYmxlIGFueW1vcmUgKi9cbi1cdGlmIChldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSAmIzQzOyBNSU5fTlJfR0VOUyBcdTAwM2UgbWF4X3NlcSlcbiYjNDM7XHQvKiBydW4gYWdpbmcgaWYgdGhlIHByZWZlcnJlZCB0eXBlIGlzIGV4aGF1c3RlZCAqL1xuJiM0MztcdGlmIChtaW5fc2VxW3R5cGVdICYjNDM7IE1JTl9OUl9HRU5TIFx1MDAzZSBtYXhfc2VxKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdC8qIHRyeSB0byBhdm9pZCBhZ2luZywgZG8gZ2VudGxlIHJlY2xhaW0gYXQgdGhlIGRlZmF1bHQgcHJpb3JpdHkgKi9cbi1cdGlmIChzYy1cdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUcnkgdG8gYXZvaWQgYWdpbmcgYnkgZG9pbmcgZ2VudGxlIHJlY2xhaW0gYXQgdGhlIGRlZmF1bHRcbiYjNDM7XHQgKiBwcmlvcml0eS4gU2tpcCBnZW50bGUgcmVjbGFpbSBmb3IgZXh0cmVtZSBzd2FwcGluZXNzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzYy1cdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkgXHUwMDI2XHUwMDI2ICFpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIGJldHRlciB0byBydW4gYWdpbmcgZXZlbiB0aG91Z2ggZXZpY3Rpb24gaXMgc3RpbGwgcG9zc2libGUgKi9cbi1cdHJldHVybiBldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSAmIzQzOyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxO1xuJiM0MztcdGlmIChldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSAmIzQzOyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIFJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgc2V2ZXJlbHkgaW1iYWxhbmNlZCBhY3Jvc3MgZ2VucyAqL1xuJiM0MztcdHJldHVybiBscnVfZ2VuX2ltYmFsYW5jZWQobHJ1dmVjLCBtYXhfc2VxLCBzYywgdHlwZSwgc3dhcHBpbmVzcyk7XG4gfVxuIFxuIHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X2dlbl9zb2Z0X3JlY2xhaW0mIzM0OywKICAgICYjMzQ7bWF4X2xydV9nZW5fbWVtY2cmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgbWVtb3J5IHJlY2xhaW0gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgZXZpY3Rpb24gcGF0aCwgZm9saW8gc2Nhbm5pbmcsIGFuZCBhZ2luZyBoZXVyaXN0aWNzLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGluIGBpbmNfbWluX3NlcWAgYW5kIGNoYW5nZXMgaG93IGBnZXRfdHlwZV90b19zY2FuYCBjYWxjdWxhdGVzIHRoZSBwcmVmZXJyZWQgcmVjbGFpbSB0eXBlIGJhc2VkIG9uIHN3YXBwaW5lc3MuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBzdGFiaWxpdHkgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTQzYjE4Njc0ZWExNTljMTRiODk3NzNlNDg4YzhkNzNlMzgzZmFkOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDEyOjQxOjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiZTZiZDI2ZThjNTc4Li4wOTUzNWQ5YmRlZDVjIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMTkxLDggJiM0MzsxOTEsMjAgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiAJCQlwcmVmZXRjaHcoJmFtcDtwcmV2LSZndDtfZmllbGQpOwkJCVwKIAkJfQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKJiM0MzsjZGVmaW5lIHByZWZldGNod19uZXh0X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpCQkJXAomIzQzOwlkbyB7CQkJCQkJCQlcCiYjNDM7CQlpZiAoKF9mb2xpbyktJmd0O2xydS5uZXh0ICE9IF9iYXNlKSB7CQkJXAomIzQzOwkJCXN0cnVjdCBmb2xpbyAqbmV4dDsJCQkJXAomIzQzOwkJCQkJCQkJCVwKJiM0MzsJCQluZXh0ID0gbGlzdF9lbnRyeSgoX2ZvbGlvKS0mZ3Q7bHJ1Lm5leHQsCQlcCiYjNDM7CQkJCQlzdHJ1Y3QgZm9saW8sIGxydSk7CQlcCiYjNDM7CQkJcHJlZmV0Y2h3KCZhbXA7bmV4dC0mZ3Q7X2ZpZWxkKTsJCQlcCiYjNDM7CQl9CQkJCQkJCVwKJiM0MzsJfSB3aGlsZSAoMCkKJiM0MzsKICNlbHNlCiAjZGVmaW5lIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpIGRvIHsgfSB3aGlsZSAoMCkKJiM0MzsjZGVmaW5lIHByZWZldGNod19uZXh0X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAvKgpAQCAtMjcwLDYgJiM0MzsyODIsMTMgQEAgc3RhdGljIGlubGluZSBib29sIGlzX2V4ZWNfZmlsZV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiB2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3MsIFZNQV9FWEVDX0JJVCkgJmFtcDsmYW1wOyBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiB9CiAKJiM0MzsvKiBTZWUgZ2V0X3R5cGVfdG9fc2NhbigpOiB0aGVzZSB2YWx1ZXMgYWx3YXlzIHNlbGVjdCBGSUxFIG9yIEFOT04gKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfZXh0cmVtZV9zd2FwcGluZXNzKGludCBzd2FwcGluZXNzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN3YXBwaW5lc3MgJmx0Oz0gTUlOX1NXQVBQSU5FU1MgJiM0MzsgMSB8fAomIzQzOwkgICAgICAgc3dhcHBpbmVzcyAmZ3Q7PSBNQVhfU1dBUFBJTkVTUzsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBzZXRfdGFza19yZWNsYWltX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKIAkJCQkgICBzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSAqcnMpCiB7CkBAIC0zMjk2LDIwICYjNDM7MzMxNSwyMSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYQogfQogCiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqLwotc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKQogewotCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwotCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwotCWludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwogCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlpbnQgbmV3X2dlbjsKIAogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spLCBmb2xpbyk7CiAKIAlkbyB7CiAJCW5ld19nZW4gPSAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKIAkJLyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovCi0JCWlmIChuZXdfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBuZXdfZ2VuICE9IG9sZF9nZW4pCiYjNDM7CQlpZiAobmV3X2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7CiYjNDM7CQkJaWYgKGluY3JlYXNlZCkKJiM0MzsJCQkJKmluY3JlYXNlZCA9IGZhbHNlOwogCQkJcmV0dXJuIG5ld19nZW47CiYjNDM7CQl9CiAKIAkJbmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7CiAKQEAgLTMzMTcsOCAmIzQzOzMzMzcsMjEgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIAkJbmV3X2ZsYWdzIHw9IChuZXdfZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKIAl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwogCi0JbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKJiM0MzsJaWYgKGluY3JlYXNlZCkKJiM0MzsJCSppbmNyZWFzZWQgPSB0cnVlOwomIzQzOwlyZXR1cm4gbmV3X2dlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwomIzQzOwlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKJiM0MzsJaW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSk7CiYjNDM7CWJvb2wgZ2VuX2luY3JlYXNlZDsKIAomIzQzOwluZXdfZ2VuID0gX19mb2xpb19pbmNfZ2VuKGZvbGlvLCBvbGRfZ2VuLCAmYW1wO2dlbl9pbmNyZWFzZWQpOwomIzQzOwlpZiAoZ2VuX2luY3JlYXNlZCkKJiM0MzsJCWxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7CiAJcmV0dXJuIG5ld19nZW47CiB9CiAKQEAgLTM4OTcsMTMgJiM0MzszOTMwLDI3IEBAIHN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZCkKIAkJa2ZyZWUod2Fsayk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfbHJ1X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBsaXN0X2hlYWQgKipiYXRjaF9lbmQsCiYjNDM7CQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCkKJiM0Mzt7CiYjNDM7CUxJU1RfSEVBRChtb3ZhYmxlKTsKJiM0MzsKJiM0MzsJaWYgKCEqYmF0Y2hfZW5kKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlsaXN0X2N1dF9wb3NpdGlvbigmYW1wO21vdmFibGUsIGhlYWQsICpiYXRjaF9lbmQpOwomIzQzOwlsaXN0X3NwbGljZV90YWlsX2luaXQoJmFtcDttb3ZhYmxlLCBkc3QpOwomIzQzOwkqYmF0Y2hfZW5kID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcykKIHsKIAlpbnQgem9uZTsKLQlpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSDsKJiM0MzsJaW50IHJlbWFpbmluZyA9IE1BWF9MUlVfQkFUQ0ggLyAoaXNfZXh0cmVtZV9zd2FwcGluZXNzKHN3YXBwaW5lc3MpID8gMiA6IDgpOwogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwogCWludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKIAlpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKJiM0MzsJaW50IHRhcmdldF9nZW4gPSAob2xkX2dlbiAmIzQzOyAxKSAlIE1BWF9OUl9HRU5TOwogCiAJLyogRm9yIGZpbGUgdHlwZSwgc2tpcCB0aGUgY2hlY2sgaWYgc3dhcHBpbmVzcyBpcyBhbm9uIG9ubHkgKi8KIAlpZiAodHlwZSAmYW1wOyZhbXA7IChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSkKQEAgLTM5MTUsMzMgJiM0MzszOTYyLDU1IEBAIHN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKQogCiAJLyogcHJldmVudCBjb2xkL2hvdCBpbnZlcnNpb24gaWYgdGhlIHR5cGUgaXMgZXZpY3RhYmxlICovCiAJZm9yICh6b25lID0gMDsgem9uZSAmbHQ7IE1BWF9OUl9aT05FUzsgem9uZSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBsaXN0X2hlYWQgKnRhcmdldF9saXN0ID0gJmFtcDtscnVnZW4tJmd0O2ZvbGlvc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXTsKIAkJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZhbXA7bHJ1Z2VuLSZndDtmb2xpb3Nbb2xkX2dlbl1bdHlwZV1bem9uZV07CiYjNDM7CQl1bnNpZ25lZCBsb25nIHByb3RlY3RlZFtNQVhfTlJfVElFUlNdID0ge30sIGRlbHRhID0gMDsKJiM0MzsJCXN0cnVjdCBsaXN0X2hlYWQgKnBvcyA9IGhlYWQtJmd0O25leHQ7CiYjNDM7CQlzdHJ1Y3QgbGlzdF9oZWFkICpiYXRjaF9lbmQgPSBOVUxMOwogCi0JCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgewotCQkJc3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTsKJiM0MzsJCXdoaWxlIChwb3MgIT0gaGVhZCkgewomIzQzOwkJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGZvbGlvLCBscnUpOwomIzQzOwkJCWxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAJCQlpbnQgcmVmcyA9IGZvbGlvX2xydV9yZWZzKGZvbGlvKTsKIAkJCWJvb2wgd29ya2luZ3NldCA9IGZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CQkJYm9vbCBnZW5faW5jcmVhc2VkOwogCiAJCQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTsKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbyksIGZvbGlvKTsKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19pc19maWxlX2xydShmb2xpbykgIT0gdHlwZSwgZm9saW8pOwogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3pvbmVudW0oZm9saW8pICE9IHpvbmUsIGZvbGlvKTsKIAotCQkJbmV3X2dlbiA9IGZvbGlvX2luY19nZW4obHJ1dmVjLCBmb2xpbyk7Ci0JCQlsaXN0X21vdmVfdGFpbCgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7bHJ1Z2VuLSZndDtmb2xpb3NbbmV3X2dlbl1bdHlwZV1bem9uZV0pOwomIzQzOwkJCXByZWZldGNod19uZXh0X2xydV9mb2xpbyhmb2xpbywgaGVhZCwgZmxhZ3MpOwomIzQzOwkJCXBvcyA9IHBvcy0mZ3Q7bmV4dDsKJiM0MzsJCQluZXdfZ2VuID0gX19mb2xpb19pbmNfZ2VuKGZvbGlvLCBvbGRfZ2VuLCAmYW1wO2dlbl9pbmNyZWFzZWQpOwomIzQzOwkJCWlmIChnZW5faW5jcmVhc2VkKSB7CiYjNDM7CQkJCWRlbHRhICYjNDM7PSBucl9wYWdlczsKJiM0MzsJCQkJYmF0Y2hfZW5kID0gJmFtcDtmb2xpby0mZ3Q7bHJ1OwogCi0JCQkvKiBkb24mIzM5O3QgY291bnQgdGhlIHdvcmtpbmdzZXQgYmVpbmcgbGF6aWx5IHByb21vdGVkICovCi0JCQlpZiAocmVmcyAmIzQzOyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgJiM0MzsgMSkgewotCQkJCWludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpOwotCQkJCWludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJCQkJLyogZG9uJiMzOTt0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqLwomIzQzOwkJCQlpZiAocmVmcyAmIzQzOyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgJiM0MzsgMSkgewomIzQzOwkJCQkJaW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7CiAKLQkJCQlXUklURV9PTkNFKGxydWdlbi0mZ3Q7cHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLAotCQkJCQkgICBscnVnZW4tJmd0O3Byb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSAmIzQzOyBkZWx0YSk7CiYjNDM7CQkJCQlwcm90ZWN0ZWRbdGllcl0gJiM0Mzs9IG5yX3BhZ2VzOwomIzQzOwkJCQl9CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJZmx1c2hfbHJ1X2JhdGNoKGhlYWQsICZhbXA7YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7CiYjNDM7CQkJCWxpc3RfbW92ZSgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7bHJ1Z2VuLSZndDtmb2xpb3NbbmV3X2dlbl1bdHlwZV1bem9uZV0pOwogCQkJfQotCiAJCQlpZiAoIS0tcmVtYWluaW5nKQotCQkJCXJldHVybiBmYWxzZTsKJiM0MzsJCQkJYnJlYWs7CiAJCX0KJiM0MzsJCWZsdXNoX2xydV9iYXRjaChoZWFkLCAmYW1wO2JhdGNoX2VuZCwgdGFyZ2V0X2xpc3QpOwomIzQzOwomIzQzOwkJV1JJVEVfT05DRShscnVnZW4tJmd0O25yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdLAomIzQzOwkJCSAgIGxydWdlbi0mZ3Q7bnJfcGFnZXNbb2xkX2dlbl1bdHlwZV1bem9uZV0gLSBkZWx0YSk7CiYjNDM7CQlXUklURV9PTkNFKGxydWdlbi0mZ3Q7bnJfcGFnZXNbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV0sCiYjNDM7CQkJICAgbHJ1Z2VuLSZndDtucl9wYWdlc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXSAmIzQzOyBkZWx0YSk7CiYjNDM7CQlmb3IgKGludCB0aWVyID0gMDsgdGllciAmbHQ7IE1BWF9OUl9USUVSUzsgdGllciYjNDM7JiM0MzspCiYjNDM7CQkJV1JJVEVfT05DRShscnVnZW4tJmd0O3Byb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSwKJiM0MzsJCQkJICAgbHJ1Z2VuLSZndDtwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0gJiM0MzsgcHJvdGVjdGVkW3RpZXJdKTsKJiM0MzsJCWlmICghcmVtYWluaW5nKQomIzQzOwkJCXJldHVybiBmYWxzZTsKIAl9CiBkb25lOgogCXJlc2V0X2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdHJ1ZSk7CkBAIC00MTUxLDIwICYjNDM7NDIyMCwyOCBAQCBzdGF0aWMgdm9pZCBzZXRfaW5pdGlhbF9wcmlvcml0eShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sCiAJc2MtJmd0O3ByaW9yaXR5ID0gY2xhbXAocHJpb3JpdHksIERFRl9QUklPUklUWSAvIDIsIERFRl9QUklPUklUWSk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2dlbl9zaXplKHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4sCiYjNDM7CQlpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBzZXEpCiYjNDM7ewomIzQzOwlpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOwomIzQzOwl1bnNpZ25lZCBsb25nIHNpemUgPSAwOwomIzQzOwomIzQzOwlmb3IgKGludCB6b25lID0gMDsgem9uZSAmbHQ7IE1BWF9OUl9aT05FUzsgem9uZSYjNDM7JiM0MzspCiYjNDM7CQlzaXplICYjNDM7PSBtYXgoUkVBRF9PTkNFKGxydWdlbi0mZ3Q7bnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTsKJiM0MzsJcmV0dXJuIHNpemU7CiYjNDM7fQomIzQzOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpCiB7Ci0JaW50IGdlbiwgdHlwZSwgem9uZTsKJiM0MzsJaW50IHR5cGU7CiAJdW5zaWduZWQgbG9uZyBzZXEsIHRvdGFsID0gMDsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKIAlERUZJTkVfTUFYX1NFUShscnV2ZWMpOwogCURFRklORV9NSU5fU0VRKGxydXZlYyk7CiAKIAlmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7Ci0JCWZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxICZsdDs9IG1heF9zZXE7IHNlcSYjNDM7JiM0MzspIHsKLQkJCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTsKLQkJCWZvciAoem9uZSA9IDA7IHpvbmUgJmx0OyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KQotCQkJCXRvdGFsICYjNDM7PSBtYXgoUkVBRF9PTkNFKGxydWdlbi0mZ3Q7bnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTsKLQkJfQomIzQzOwkJZm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgJmx0Oz0gbWF4X3NlcTsgc2VxJiM0MzsmIzQzOykKJiM0MzsJCQl0b3RhbCAmIzQzOz0gbHJ1dmVjX2dlbl9zaXplKGxydWdlbiwgdHlwZSwgc2VxKTsKIAl9CiAKIAlyZXR1cm4gdG90YWw7CkBAIC00NzI4LDcgJiM0Mzs0ODA1LDggQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2EKIAogc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHRpZXIsCi0JCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkcCkKJiM0MzsJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkcCwKJiM0MzsJCSAgICAgICBib29sICpleGhhdXN0ZWQpCiB7CiAJaW50IGk7CiAJaW50IGdlbjsKQEAgLTQ3MzksMTIgJiM0Mzs0ODE3LDE1IEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJaW50IHNraXBwZWQgPSAwOwogCXVuc2lnbmVkIGxvbmcgcmVtYWluaW5nID0gbnJfdG9fc2NhbjsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKJiM0MzsJYm9vbCBlYXJseV9zdG9wID0gZmFsc2U7CiAKIAlWTV9XQVJOX09OX09OQ0UobnJfdG9fc2NhbiAmZ3Q7IE1BWF9MUlVfQkFUQ0gpOwogCVZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShsaXN0KSk7CiAKLQlpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUykKJiM0MzsJaWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgPT0gTUlOX05SX0dFTlMpIHsKJiM0MzsJCSpleGhhdXN0ZWQgPSB0cnVlOwogCQlyZXR1cm4gMDsKJiM0MzsJfQogCiAJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwogCkBAIC00Nzc1LDggJiM0Mzs0ODU2LDEwIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkJc2tpcHBlZF96b25lICYjNDM7PSBkZWx0YTsKIAkJCX0KIAotCQkJaWYgKCEtLXJlbWFpbmluZyB8fCBtYXgoaXNvbGF0ZWQsIHNraXBwZWRfem9uZSkgJmd0Oz0gTUlOX0xSVV9CQVRDSCkKJiM0MzsJCQlpZiAoIS0tcmVtYWluaW5nIHx8IG1heChpc29sYXRlZCwgc2tpcHBlZF96b25lKSAmZ3Q7PSBNSU5fTFJVX0JBVENIKSB7CiYjNDM7CQkJCWVhcmx5X3N0b3AgPSB0cnVlOwogCQkJCWJyZWFrOwomIzQzOwkJCX0KIAkJfQogCiAJCWlmIChza2lwcGVkX3pvbmUpIHsKQEAgLTQ3ODUsOCAmIzQzOzQ4NjgsMTAgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCXNraXBwZWQgJiM0Mzs9IHNraXBwZWRfem9uZTsKIAkJfQogCi0JCWlmICghcmVtYWluaW5nIHx8IGlzb2xhdGVkICZndDs9IE1JTl9MUlVfQkFUQ0gpCiYjNDM7CQlpZiAoIXJlbWFpbmluZyB8fCBpc29sYXRlZCAmZ3Q7PSBNSU5fTFJVX0JBVENIKSB7CiYjNDM7CQkJZWFybHlfc3RvcCA9IHRydWU7CiAJCQlicmVhazsKJiM0MzsJCX0KIAl9CiAKIAlpdGVtID0gUEdTQ0FOX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTsKQEAgLTQ3OTcsNiAmIzQzOzQ4ODIsMTMgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQlzY2FubmVkLCBza2lwcGVkLCBpc29sYXRlZCwKIAkJCQl0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7CiAKJiM0MzsJLyoKJiM0MzsJICogSWYgd2UgZGlkbiYjMzk7dCBzdG9wIGVhcmx5LCBhbGwgcmVjbGFpbWFibGUgZm9saW9zIGluIHRoZSBjdXJyZW50CiYjNDM7CSAqIGdlbmVyYXRpb24gaGF2ZSBiZWVuIHNjYW5uZWQuIFdlIGFyZSBleGhhdXN0ZWQgaWYgdGhpcyBpcyB0aGUgbGFzdAomIzQzOwkgKiByZWNsYWltYWJsZSBnZW5lcmF0aW9uLgomIzQzOwkgKi8KJiM0MzsJKmV4aGF1c3RlZCA9ICFlYXJseV9zdG9wICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgbHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdICYjNDM7IE1JTl9OUl9HRU5TID09IGxydWdlbi0mZ3Q7bWF4X3NlcTsKIAkqaXNvbGF0ZWRwID0gaXNvbGF0ZWQ7CiAJcmV0dXJuIHNjYW5uZWQ7CiB9CkBAIC00ODI0LDUxICYjNDM7NDkxNiw5MCBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKQogc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpCiB7CiAJc3RydWN0IGN0cmxfcG9zIHNwLCBwdiA9IHt9OwomIzQzOwlpbnQgYW5vbl9nYWluLCBmaWxlX2dhaW47CiAKIAlpZiAoc3dhcHBpbmVzcyAmbHQ7PSBNSU5fU1dBUFBJTkVTUyAmIzQzOyAxKQogCQlyZXR1cm4gTFJVX0dFTl9GSUxFOwogCiAJaWYgKHN3YXBwaW5lc3MgJmd0Oz0gTUFYX1NXQVBQSU5FU1MpCiAJCXJldHVybiBMUlVfR0VOX0FOT047CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFwcGx5IGEgcXVhZHJhdGljIGJvb3N0IGJhc2VkIG9uIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBuZXV0cmFsCiYjNDM7CSAqIGJhbGFuY2UgcG9pbnQgKHN3YXBwaW5lc3MgPSBNQVhfU1dBUFBJTkVTUyAvIDIpLgomIzQzOwkgKgomIzQzOwkgKiBBIGxpbmVhciB3ZWlnaHQgaXMgZWFzaWx5IG92ZXJ3aGVsbWVkIGJ5IGhpc3RvcmljYWwgcmVmYXVsdCBjb3N0CiYjNDM7CSAqIHdoZW4gc3dhcHBpbmVzcyBkZXZpYXRlcyBmcm9tIG5ldXRyYWwuIFRoZSBxdWFkcmF0aWMgc2NhbGluZwomIzQzOwkgKiBhbXBsaWZpZXMgdGhlIHdlaWdodCBvZiB0aGUgcHJlZmVycmVkIHR5cGUgc21vb3RobHkuCiYjNDM7CSAqLwomIzQzOwlpZiAoc3dhcHBpbmVzcyAmbHQ7IE1BWF9TV0FQUElORVNTIC8gMikgewomIzQzOwkJaW50IGRlbHRhID0gKE1BWF9TV0FQUElORVNTIC8gMikgLSBzd2FwcGluZXNzOwomIzQzOwkJaW50IGJvb3N0ID0gKGRlbHRhICogZGVsdGEpICZndDsmZ3Q7IDQ7CiYjNDM7CiYjNDM7CQlhbm9uX2dhaW4gPSBzd2FwcGluZXNzOwomIzQzOwkJZmlsZV9nYWluID0gKE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcykgJiM0MzsgYm9vc3Q7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpbnQgZGVsdGEgPSBzd2FwcGluZXNzIC0gKE1BWF9TV0FQUElORVNTIC8gMik7CiYjNDM7CQlpbnQgYm9vc3QgPSAoZGVsdGEgKiBkZWx0YSkgJmd0OyZndDsgNDsKJiM0MzsKJiM0MzsJCWFub25fZ2FpbiA9IHN3YXBwaW5lc3MgJiM0MzsgYm9vc3Q7CiYjNDM7CQlmaWxlX2dhaW4gPSBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3M7CiYjNDM7CX0KJiM0MzsKIAkvKgogCSAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmUKIAkgKiB3aGljaCB0eXBlIHRvIHNjYW4uCiAJICovCi0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCAmYW1wO3NwKTsKLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgJmFtcDtwdik7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgYW5vbl9nYWluLCAmYW1wO3NwKTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBmaWxlX2dhaW4sICZhbXA7cHYpOwogCiAJcmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKCZhbXA7c3AsICZhbXA7cHYpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX3NpbmdsZV90eXBlX3JlY2xhaW0oaW50IHN3YXBwaW5lc3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3dhcHBpbmVzcyA9PSBNSU5fU1dBUFBJTkVTUyB8fAomIzQzOwkgICAgICAgc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQkJICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MsCiAJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWQsCiAJCQkgIGludCAqaXNvbGF0ZV90eXBlLCBpbnQgKmlzb2xhdGVfc2Nhbm5lZCkKIHsKLQlpbnQgaTsKLQlpbnQgdG90YWxfc2Nhbm5lZCA9IDA7CiYjNDM7CWJvb2wgdHlwZV9mYWxsYmFja19hbGxvd2VkID0gIWlzX3NpbmdsZV90eXBlX3JlY2xhaW0oc3dhcHBpbmVzcyk7CiAJaW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7CiYjNDM7CWludCB0b3RhbF9zY2FubmVkID0gMCwgc2Nhbm5lZCwgdGllcjsKJiM0MzsJYm9vbCBleGhhdXN0ZWQsIHRyaWVkID0gZmFsc2U7CiAKLQlmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7Ci0JCWludCBzY2FubmVkOwotCQlpbnQgdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpOwomIzQzO3JldHJ5OgomIzQzOwl0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7CiYjNDM7CXNjYW5uZWQgPSBzY2FuX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLAomIzQzOwkJCSAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkLCAmYW1wO2V4aGF1c3RlZCk7CiAKLQkJc2Nhbm5lZCA9IHNjYW5fZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsCi0JCQkJICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQpOwomIzQzOwl0b3RhbF9zY2FubmVkICYjNDM7PSBzY2FubmVkOwomIzQzOwlpZiAoKmlzb2xhdGVkKSB7CiYjNDM7CQkqaXNvbGF0ZV90eXBlID0gdHlwZTsKJiM0MzsJCSppc29sYXRlX3NjYW5uZWQgPSBzY2FubmVkOwomIzQzOwkJcmV0dXJuIHRvdGFsX3NjYW5uZWQ7CiYjNDM7CX0KIAotCQl0b3RhbF9zY2FubmVkICYjNDM7PSBzY2FubmVkOwotCQlpZiAoKmlzb2xhdGVkKSB7Ci0JCQkqaXNvbGF0ZV90eXBlID0gdHlwZTsKLQkJCSppc29sYXRlX3NjYW5uZWQgPSBzY2FubmVkOwotCQkJYnJlYWs7Ci0JCX0KLQkJLyoKLQkJICogSWYgc2Nhbm5lZCAmZ3Q7IDAgYW5kIGlzb2xhdGVkID09IDAsIGF2b2lkIGZhbGxpbmcgYmFjayB0byB0aGUKLQkJICogb3RoZXIgdHlwZSwgYXMgdGhpcyB0eXBlIHJlbWFpbnMgc3VmZmljaWVudC4gRmFsbGluZyBiYWNrCi0JCSAqIHRvbyByZWFkaWx5IGNhbiBkaXNydXB0IHRoZSBwb3NpdGl2ZV9jdHJsX2VycigpIGJpYXMuCi0JCSAqLwotCQlpZiAoIXNjYW5uZWQpCi0JCQl0eXBlID0gIXR5cGU7CiYjNDM7CS8qCiYjNDM7CSAqIFdlIGFyZSBydW5uaW5nIG91dCBvZiB0aGUgY3VycmVudCByZWNsYWltIHR5cGUuIEZhbGwgYmFjayB0bwomIzQzOwkgKiB0aGUgb3RoZXIgdHlwZSBpZiBhbGxvd2VkLgomIzQzOwkgKi8KJiM0MzsJaWYgKGV4aGF1c3RlZCAmYW1wOyZhbXA7IHR5cGVfZmFsbGJhY2tfYWxsb3dlZCkgewomIzQzOwkJdHlwZSA9ICF0eXBlOwomIzQzOwkJdHlwZV9mYWxsYmFja19hbGxvd2VkID0gZmFsc2U7CiYjNDM7CQlnb3RvIHJldHJ5OwomIzQzOwl9CiYjNDM7CS8qCiYjNDM7CSAqIFdlIGFyZSBub3QgZXhoYXVzdGVkLCBidXQgZmFpbGVkIHRvIGlzb2xhdGUgYW55IGZvbGlvcyBkdWUgdG8KJiM0MzsJICogcmFjZXMuIEdpdmUgdGhpcyB0eXBlIG9uZSBtb3JlIGNoYW5jZSB0byBhdm9pZCBhIGxhcmdlciBsb29wLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFleGhhdXN0ZWQgJmFtcDsmYW1wOyAhdHJpZWQpIHsKJiM0MzsJCXRyaWVkID0gdHJ1ZTsKJiM0MzsJCWdvdG8gcmV0cnk7CiAJfQogCiAJcmV0dXJuIHRvdGFsX3NjYW5uZWQ7CkBAIC00OTcwLDIxICYjNDM7NTEwMSw2NyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlyZXR1cm4gc2Nhbm5lZDsKIH0KIAomIzQzO3N0YXRpYyBib29sIGxydV9nZW5faW1iYWxhbmNlZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSwKJiM0MzsJCXN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKJiM0MzsJdW5zaWduZWQgbG9uZyB5b3VuZyA9IDAsIG9sZCA9IDAsIGxhZyA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaW5hY3RpdmVfcmF0aW8sIGdiOwomIzQzOwlERUZJTkVfTUlOX1NFUShscnV2ZWMpOwomIzQzOwomIzQzOwkvKiB3ZSBzdGlsbCBoYXZlIGVub3VnaCBnZW5lcmF0aW9ucyB0byByZWNsYWltICovCiYjNDM7CWlmIChtaW5fc2VxW3R5cGVdICYjNDM7IE1JTl9OUl9HRU5TICZsdDsgbWF4X3NlcSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVHJpZ2dlciBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgcnVubmluZyBsb3cgb24gcmVjbGFpbWFibGUKJiM0MzsJICogZm9saW9zLCBwcm92aWRlZCB0aGUgZ2VuZXJhdGlvbiBsYWcgb2YgdGhlIG90aGVyIHR5cGUgcmVtYWlucyBzbWFsbAomIzQzOwkgKiBlbm91Z2ggdGhhdCBpbmNfbWluX3NlcSgpIGludHJvZHVjZXMgbmVnbGlnaWJsZSBvdmVyaGVhZAomIzQzOwkgKi8KJiM0MzsJZm9yICh1bnNpZ25lZCBsb25nIHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSAmbHQ7PSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIHNpemUgPSBscnV2ZWNfZ2VuX3NpemUobHJ1Z2VuLCB0eXBlLCBzZXEpOwomIzQzOwomIzQzOwkJaWYgKHNlcSAmIzQzOyBNSU5fTlJfR0VOUyAmZ3Q7IG1heF9zZXEpCiYjNDM7CQkJeW91bmcgJiM0Mzs9IHNpemU7CiYjNDM7CQllbHNlCiYjNDM7CQkJb2xkICYjNDM7PSBzaXplOwomIzQzOwl9CiYjNDM7CWlmIChtaW5fc2VxWyF0eXBlXSAmIzQzOyBNQVhfTlJfR0VOUyA9PSBtYXhfc2VxICYjNDM7IDEpCiYjNDM7CQlsYWcgJiM0Mzs9IGxydXZlY19nZW5fc2l6ZShscnVnZW4sICF0eXBlLCBtaW5fc2VxWyF0eXBlXSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEJvcnJvdyB0aGUgYWRhcHRpdmUgcmF0aW8gZnJvbSBpbmFjdGl2ZV9pc19sb3coKSwgYW5kIHNjYWxlCiYjNDM7CSAqIGl0IGJ5IHNxcnQoTUFYX05SX0dFTlMpIHRvIG1ha2UgYWdpbmcgbGVzcyBhZ2dyZXNzaXZlCiYjNDM7CSAqLwomIzQzOwlnYiA9ICh5b3VuZyAmIzQzOyBvbGQpICZndDsmZ3Q7ICgzMCAtIFBBR0VfU0hJRlQpOwomIzQzOwlpbmFjdGl2ZV9yYXRpbyA9IGdiID8gaW50X3NxcnQoMTAgKiBnYiAqIE1BWF9OUl9HRU5TKSA6IE1BWF9OUl9HRU5TOwomIzQzOwlyZXR1cm4geW91bmcgJmd0OyBvbGQgKiBpbmFjdGl2ZV9yYXRpbyAmYW1wOyZhbXA7IChsYWcgJmx0OyBNQVhfTFJVX0JBVENIIHx8CiYjNDM7CSAgICAgICAoaXNfZXh0cmVtZV9zd2FwcGluZXNzKHN3YXBwaW5lc3MpICZhbXA7JmFtcDsgc2MtJmd0O3ByaW9yaXR5ICZndDsgMikpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIHNob3VsZF9ydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsCiAJCQkgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcykKIHsKJiM0MzsJaW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7CiAJREVGSU5FX01JTl9TRVEobHJ1dmVjKTsKIAotCS8qIGhhdmUgdG8gcnVuIGFnaW5nLCBzaW5jZSBldmljdGlvbiBpcyBub3QgcG9zc2libGUgYW55bW9yZSAqLwotCWlmIChldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSAmIzQzOyBNSU5fTlJfR0VOUyAmZ3Q7IG1heF9zZXEpCiYjNDM7CS8qIHJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgZXhoYXVzdGVkICovCiYjNDM7CWlmIChtaW5fc2VxW3R5cGVdICYjNDM7IE1JTl9OUl9HRU5TICZndDsgbWF4X3NlcSkKIAkJcmV0dXJuIHRydWU7CiAKLQkvKiB0cnkgdG8gYXZvaWQgYWdpbmcsIGRvIGdlbnRsZSByZWNsYWltIGF0IHRoZSBkZWZhdWx0IHByaW9yaXR5ICovCi0JaWYgKHNjLSZndDtwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpCiYjNDM7CS8qCiYjNDM7CSAqIFRyeSB0byBhdm9pZCBhZ2luZyBieSBkb2luZyBnZW50bGUgcmVjbGFpbSBhdCB0aGUgZGVmYXVsdAomIzQzOwkgKiBwcmlvcml0eS4gU2tpcCBnZW50bGUgcmVjbGFpbSBmb3IgZXh0cmVtZSBzd2FwcGluZXNzLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNjLSZndDtwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkgJmFtcDsmYW1wOyAhaXNfZXh0cmVtZV9zd2FwcGluZXNzKHN3YXBwaW5lc3MpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBiZXR0ZXIgdG8gcnVuIGFnaW5nIGV2ZW4gdGhvdWdoIGV2aWN0aW9uIGlzIHN0aWxsIHBvc3NpYmxlICovCi0JcmV0dXJuIGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpICYjNDM7IE1JTl9OUl9HRU5TID09IG1heF9zZXE7CiYjNDM7CWlmIChldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSAmIzQzOyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CS8qIFJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgc2V2ZXJlbHkgaW1iYWxhbmNlZCBhY3Jvc3MgZ2VucyAqLwomIzQzOwlyZXR1cm4gbHJ1X2dlbl9pbWJhbGFuY2VkKGxydXZlYywgbWF4X3NlcSwgc2MsIHR5cGUsIHN3YXBwaW5lc3MpOwogfQogCiBzdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDUyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUdMUlUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0JiMzOTtzIG1lc3Npbmcgd2l0aCBgbW0vdm1zY2FuLmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQmIzM5O3MgYWJvdXQgTUdMUlUg4oCTIE11bHRpLUdlbiBMUlUuIExldCYjMzk7cyBnZXQgcmlnaHQgaW50byB0aGUgc3BlY2lmaWNzLiBJdCYjMzk7cyB0b3VjaGluZyBhIGxvdCBvZiBrZXkgZnVuY3Rpb25zOiBgZm9saW9faW5jX2dlbmAsIGBpbmNfbWluX3NlcWAsIHdoaWNoIEkgdW5kZXJzdGFuZCBhcmUgZnVuZGFtZW50YWwgdG8gdGhlIGdlbi1iYXNlZCBMUlUgbG9naWM7IGBzY2FuX2ZvbGlvc2AsIGBnZXRfdHlwZV90b19zY2FuYCwgYW5kIGBpc29sYXRlX2ZvbGlvc2AgLS0gYWxsIGNydWNpYWwgZm9yIHRoZSBzY2FubmluZyBwcm9jZXNzOyBhbmQgYHNob3VsZF9ydW5fYWdpbmdgLCByZWxhdGVkIHRvIHRoZSBhZ2luZyBtZWNoYW5pc21zLiBQbHVzLCBpdCYjMzk7cyBhZGRpbmcgdGhlc2UgbmV3IGZ1bmN0aW9ucywgYGxydV9nZW5faW1iYWxhbmNlZGAsIGBscnV2ZWNfZ2VuX3NpemVgLCBgZmx1c2hfbHJ1X2JhdGNoYCwgYW5kIGBpc19leHRyZW1lX3N3YXBwaW5lc3NgLCB3aGljaCBzdWdnZXN0cyBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBiYWxhbmNpbmcgYW5kIGZsdXNoIGJlaGF2aW9yLCBhbmQgaG93IHdlIGhhbmRsZSBleHRyZW1lIHN3YXBwaW5nLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSXMgTUdMUlUgZW5hYmxlZCBieSBkZWZhdWx0PyBPciBpcyB0aGVyZSBzb21lIHNwZWNpZmljIGNvbmZpZyBvcHRpb24gSSBuZWVkIHRvIGxvb2sgZm9yPyBJIGNhbiYjMzk7dCBqdXN0IGRpdmUgaW50byB0aGUgY29kZSBibGluZC4gSSYjMzk7bGwgaGl0IGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBgTFJVX0dFTmAgaW4gYG1tL0tjb25maWdgLiBUaGF0JiMzOTtsbCBnaXZlIG1lIHRoZSBlbmFibGluZyBjb25kaXRpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgZmVlbCBmb3IgdGhlIHBhdGNoJiMzOTtzIHNpZ25pZmljYW5jZSBhbmQgaW50ZW5kZWQgdXNlIGNhc2UuIFRoaXMgZ2l2ZXMgYSBncmVhdCBvdmVydmlldyBhbmQgd2lsbCBoZWxwIHRvIGd1aWRlIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzkyPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbi0tXG5tbS9LY29uZmlnLTE0MDItIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTQwMzpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDA0LVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDExLVxubW0vS2NvbmZpZzoxNDEyOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxMy1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTctXG5tbS9LY29uZmlnOjE0MTg6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQxOS1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDI2LVxubW0vS2NvbmZpZzoxNDI3OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDI4LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3ODkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyBgTFJVX0dFTmAgaXMgdGhlIHBpZWNlIG9mIHRoZSBjb25maWcgd2UmIzM5O3JlIGZvY3VzaW5nIG9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBzZXR0aW5ncyBgTFJVX0dFTmAgcmVsaWVzIG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpcyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgYW55IHBvdGVudGlhbCBjYXNjYWRpbmcgZWZmZWN0cyBvZiBjaGFuZ2VzIHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzOTI9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuLS1cbm1tL0tjb25maWctMTQwMi0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxNDAzOmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MDQtXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTEtXG5tbS9LY29uZmlnOjE0MTI6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDEzLVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxNy1cbm1tL0tjb25maWc6MTQxODpjb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDE5LVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjYtXG5tbS9LY29uZmlnOjE0Mjc6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0MjgtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE2NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipVbnBhY2tpbmcgdGhlIGBMUlVfR0VOYCBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIGJlZm9yZSBJIGRpdmUgaW4sIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBgTFJVX0dFTmAgYWN0dWFsbHkgcmVsaWVzIG9uLiBJIGNhbiYjMzk7dCBqdXN0IHN0YXJ0IHR3ZWFraW5nIG9yIGFuYWx5emluZyBpdCB3aXRob3V0IHVuZGVyc3RhbmRpbmcgaXRzIHBsYWNlIGluIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZS4gV2hhdCBvdGhlciBjb21wb25lbnRzLCBsaWJyYXJpZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBkb2VzIHRoaXMgdGhpbmcgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIGVmZmVjdHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgc3BlY2lmaWMgdmVyc2lvbnMgb3IgY29uZmlndXJhdGlvbnM/IFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY3kgdHJlZSBpcyBmdW5kYW1lbnRhbCBiZWZvcmUgYW55IHNlcmlvdXMgYW5hbHlzaXMgb3IgbW9kaWZpY2F0aW9uIGNhbiBoYXBwZW4uIEkgbmVlZCB0byBlbnN1cmUgSSBkb24mIzM5O3QgaW50cm9kdWNlIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzIGJ5LCBmb3IgZXhhbXBsZSwgbWlzc2luZyBhIGNyaXRpY2FsIGxpYnJhcnkgdGhhdCYjMzk7cyB1c2VkIHNvbWV3aGVyZS4gSXQgYWxsIGhhbmdzIHRvZ2V0aGVyLCBzbyBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHNvbGlkIGZvdW5kYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDAwOlx0XHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXG4xNDAxOlx0XG4xNDAyOlx0IyBtdWx0aS1nZW4gTFJVIHtcbjE0MDM6XHRjb25maWcgTFJVX0dFTlxuMTQwNDpcdFx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4xNDA1Olx0XHRkZXBlbmRzIG9uIE1NVVxuMTQwNjpcdFx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG4xNDA3Olx0XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbjE0MDg6XHRcdGhlbHBcbjE0MDk6XHRcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXG4xNDEwOlx0XHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cbjE0MTE6XHRcbjE0MTI6XHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXG4xNDEzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4xNDE0Olx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MTU6XHRcdGhlbHBcbjE0MTY6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxuMTQxNzpcdFxuMTQxODpcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXG4xNDE5Olx0XHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuMTQyMDpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDIxOlx0XHRoZWxwXG4xNDIyOlx0XHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xuMTQyMzpcdFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxuMTQyNDpcdFxuMTQyNTpcdFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cbjE0MjY6XHRcbjE0Mjc6XHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbjE0Mjg6XHRcdGRlZl9ib29sIHlcbjE0Mjk6XHRcdGRlcGVuZHMgb24gTFJVX0dFTiBcdTAwMjZcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgzMQoJCQkJCQkJb3V0cHV0OiA2MAoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIE1HTFJVJiMzOTtzIENvcmUgTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgc28gYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCDigJMgdGhvc2UgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zLCBnb3QgaXQuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1hcCBvdXQgd2hpY2ggZnVuY3Rpb25zIGhhdmUgYmVlbiB0b3VjaGVkIGluIHRoaXMgY2hhbmdlLCBzcGVjaWZpY2FsbHkuCgpMb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYGZvbGlvX2luY19nZW5gLCBgX19mb2xpb19pbmNfZ2VuYCwgYGluY19taW5fc2VxYCwgYHNjYW5fZm9saW9zYCwgYGdldF90eXBlX3RvX3NjYW5gLCBgaXNvbGF0ZV9mb2xpb3NgLCBgZXZpY3RfZm9saW9zYCwgYGxydV9nZW5faW1iYWxhbmNlZGAsIGFuZCBgc2hvdWxkX3J1bl9hZ2luZ2AuIFRoZXNlIGFyZSBhbGwgcHJldHR5IGNyaXRpY2FsIOKAkyB0aGUgaGVhcnQgb2YgTUdMUlUmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQsIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSB0byBiZSByZWFjaGVkIGR1cmluZyBzdGFuZGFyZCBvcGVyYXRpb24uIERlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBzZWUgd2hhdCB3ZSBjYW4gc2hha2UgbG9vc2UuCgpOb3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byBwaW5wb2ludCBlbnRyeSBwb2ludHMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgKmRpcmVjdGx5KiBhY2Nlc3NpYmxlIGZyb20gZWxzZXdoZXJlLCBpZGVhbGx5IG5vbi1zdGF0aWMgb25lcy4gQWhhLCBpdCBzZWVtcyB0aGV5IGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggaXMgdHlwaWNhbGx5IGdvaW5nIHRvIGxpbWl0IGRpcmVjdCBmdXp6aW5nIG9wcG9ydHVuaXRpZXMuIE5vdCBhIGRlYWwgYnJlYWtlciwgYnV0IGl0IG1lYW5zIEkgbmVlZCB0byBhZGp1c3QgbXkgYXBwcm9hY2guIFRoZSBuZXh0IHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUgdGhhdCBjYWxsIHRoZXNlIGNvcmUgZnVuY3Rpb25zPyBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBlbmVyZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhpbmNfbWluX3NlcXxzY2FuX2ZvbGlvc3xnZXRfdHlwZV90b19zY2FufGlzb2xhdGVfZm9saW9zfGV2aWN0X2ZvbGlvc3xzaG91bGRfcnVuX2FnaW5nKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTI3OT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfZXhlY19maWxlX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtMjg0LVxubW0vdm1zY2FuLmM6Mjg1Oi8qIFNlZSBnZXRfdHlwZV90b19zY2FuKCk6IHRoZXNlIHZhbHVlcyBhbHdheXMgc2VsZWN0IEZJTEUgb3IgQU5PTiAqL1xubW0vdm1zY2FuLmMtMjg2LXN0YXRpYyBpbmxpbmUgYm9vbCBpc19leHRyZW1lX3N3YXBwaW5lc3MoaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmM9MzkzMz1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfbHJ1X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBsaXN0X2hlYWQgKipiYXRjaF9lbmQsXG4tLVxubW0vdm1zY2FuLmMtMzk0NS1cbm1tL3Ztc2Nhbi5jOjM5NDY6c3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG5tbS92bXNjYW4uYy0zOTQ3LXtcbi0tXG5tbS92bXNjYW4uYy00MDIxLVxubW0vdm1zY2FuLmM6NDAyMjpzdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbm1tL3Ztc2Nhbi5jLTQwMjMte1xuLS1cbm1tL3Ztc2Nhbi5jPTQwNzQ9c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmMtNDA5NS1cbm1tL3Ztc2Nhbi5jOjQwOTY6XHRcdGlmIChpbmNfbWluX3NlcShscnV2ZWMsIHR5cGUsIHN3YXBwaW5lc3MpKVxubW0vdm1zY2FuLmMtNDA5Ny1cdFx0XHRjb250aW51ZTtcbi0tXG5tbS92bXNjYW4uYz00NzgyPXN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00ODA1LVxubW0vdm1zY2FuLmM6NDgwNjpzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vdm1zY2FuLmMtNDgwNy1cdFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHRpZXIsXG4tLVxubW0vdm1zY2FuLmM9NDg5Nj1zdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5MTUtXG5tbS92bXNjYW4uYzo0OTE2OnN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxubW0vdm1zY2FuLmMtNDkxNy17XG4tLVxubW0vdm1zY2FuLmM9NDk1OT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy00OTY0LVxubW0vdm1zY2FuLmM6NDk2NTpzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vdm1zY2FuLmMtNDk2Ni1cdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcbi0tXG5tbS92bXNjYW4uYy00OTcwLVx0Ym9vbCB0eXBlX2ZhbGxiYWNrX2FsbG93ZWQgPSAhaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jOjQ5NzE6XHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTQ5NzItXHRpbnQgdG90YWxfc2Nhbm5lZCA9IDAsIHNjYW5uZWQsIHRpZXI7XG4tLVxubW0vdm1zY2FuLmMtNDk3Ni1cdHRpZXIgPSBnZXRfdGllcl9pZHgobHJ1dmVjLCB0eXBlKTtcbm1tL3Ztc2Nhbi5jOjQ5Nzc6XHRzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYyxcbm1tL3Ztc2Nhbi5jLTQ5NzgtXHRcdFx0ICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQsIFx1MDAyNmV4aGF1c3RlZCk7XG4tLVxubW0vdm1zY2FuLmMtNTAwNy1cbm1tL3Ztc2Nhbi5jOjUwMDg6c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS92bXNjYW4uYy01MDA5LVx0XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy01MDI3LVx0LyogSW4gY2FzZSBmb2xpbyBkZWxldGlvbiBsZWZ0IGVtcHR5IG9sZCBnZW5zLCBmbHVzaCB0aGVtICovXG5tbS92bXNjYW4uYzo1MDI4Olx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYy01MDI5LVxubW0vdm1zY2FuLmM6NTAzMDpcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLFxubW0vdm1zY2FuLmMtNTAzMS1cdFx0XHRcdCBcdTAwMjZsaXN0LCBcdTAwMjZpc29sYXRlZCwgXHUwMDI2dHlwZSwgXHUwMDI2dHlwZV9zY2FubmVkKTtcbi0tXG5tbS92bXNjYW4uYy01MDM1LVx0aWYgKHNjYW5uZWQpXG5tbS92bXNjYW4uYzo1MDM2Olx0XHR0cnlfdG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTUwMzctXG4tLVxubW0vdm1zY2FuLmM9NTEwND1zdGF0aWMgYm9vbCBscnVfZ2VuX2ltYmFsYW5jZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsXG4tLVxubW0vdm1zY2FuLmMtNTExOC1cdCAqIGZvbGlvcywgcHJvdmlkZWQgdGhlIGdlbmVyYXRpb24gbGFnIG9mIHRoZSBvdGhlciB0eXBlIHJlbWFpbnMgc21hbGxcbm1tL3Ztc2Nhbi5jOjUxMTk6XHQgKiBlbm91Z2ggdGhhdCBpbmNfbWluX3NlcSgpIGludHJvZHVjZXMgbmVnbGlnaWJsZSBvdmVyaGVhZFxubW0vdm1zY2FuLmMtNTEyMC1cdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jLTUxNDEtXG5tbS92bXNjYW4uYzo1MTQyOnN0YXRpYyBib29sIHNob3VsZF9ydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsXG5tbS92bXNjYW4uYy01MTQzLVx0XHRcdCAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxubW0vdm1zY2FuLmMtNTE0NC17XG5tbS92bXNjYW4uYzo1MTQ1Olx0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYy01MTQ2LVx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbi0tXG5tbS92bXNjYW4uYz01MjMzPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTI0OS1cbm1tL3Ztc2Nhbi5jOjUyNTA6XHRcdGlmIChzaG91bGRfcnVuX2FnaW5nKGxydXZlYywgbWF4X3NlcSwgc2MsIHN3YXBwaW5lc3MpKSB7XG5tbS92bXNjYW4uYy01MjUxLVx0XHRcdGlmICh0cnlfdG9faW5jX21heF9zZXEobHJ1dmVjLCBtYXhfc2VxLCBzd2FwcGluZXNzLCBmYWxzZSkpXG4tLVxubW0vdm1zY2FuLmMtNTI1Ni1cdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XG5tbS92bXNjYW4uYzo1MjU3Olx0XHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYy01MjU4LVx0XHRpZiAoIWRlbHRhKVxuLS1cbm1tL3Ztc2Nhbi5jPTU4NjA9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNTg4MC1cdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XG5tbS92bXNjYW4uYzo1ODgxOlx0XHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXG5tbS92bXNjYW4uYy01ODgyLVx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE2OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBMUlUgVmVjdG9yIFNocmlua2FnZSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBydW5fZXZpY3Rpb25gLCBhbmQgSSBzZWUgdGhleSBjYWxsIHNvbWUgb3RoZXIgZnVuY3Rpb25zLiBOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBvZiBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLiBXaGVyZSBkb2VzICppdCogZ2V0IGNhbGxlZD8gVW5kZXJzdGFuZGluZyBpdHMgdXBzdHJlYW0gZGVwZW5kZW5jaWVzIGlzIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGhvdyB0aGlzIExSVSB2ZWN0b3Igc2hyaW5rYWdlIGlzIGluaXRpYXRlZCB3aXRoaW4gdGhpcyBzeXN0ZW0uIEl0JiMzOTtzIGEgY2xhc3NpYyBkZWJ1Z2dpbmcgYW5kIHBlcmZvcm1hbmNlIGFuYWx5c2lzIHRlY2huaXF1ZTogZm9sbG93IHRoZSBjYWxsIGNoYWluIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGNhbGxpbmcgdGhhdCBmdW5jdGlvbiwgc2hhbGwgd2U/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IG9wZXJhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fc2hyaW5rX2xydXZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTUxOTg9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MjMyLSAqL1xubW0vdm1zY2FuLmM6NTIzMzpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTIzNC17XG4tLVxubW0vdm1zY2FuLmM9NTI3OD1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01Mjk3LVxubW0vdm1zY2FuLmM6NTI5ODpcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01Mjk5LVxuLS1cbm1tL3Ztc2Nhbi5jPTUzODk9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTQwMS1cbm1tL3Ztc2Nhbi5jOjU0MDI6XHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01NDAzLVx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzU3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBMUlUgU2hyaW5rYWdlIFByb2Nlc3MqKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgd2l0aGluIHRoaXMgTFJVIChMZWFzdCBSZWNlbnRseSBVc2VkKSBjYWNoZSBzaHJpbmtpbmcgbWVjaGFuaXNtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBhbmQgYHNocmlua19vbmVgIGJvdGggc2VlbSB0byBldmVudHVhbGx5IHRyaWdnZXIgYHRyeV90b19zaHJpbmtfbHJ1dmVjYC4gVGhhdCBzdWdnZXN0cyBhIHNoYXJlZCByZXNwb25zaWJpbGl0eSwgcG90ZW50aWFsbHkgYSBjZW50cmFsaXplZCBjb250cm9sIHBvaW50IGZvciB0aGUgYWN0dWFsIHNocmlua2luZyBvcGVyYXRpb24uCgpOb3csIHdoZXJlIGRvZXMgYGxydV9nZW5fc2hyaW5rX2xydXZlY2Agb3JpZ2luYXRlPyBJdCYjMzk7cyBrZXkgdG8gdHJhY2UgaXRzIGNhbGwgc3RhY2suIE15IGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgcHJvYmFibHkgY2FsbGVkIGZyb20gYHNocmlua19scnV2ZWNgIG9yIHNvbWV0aGluZyBhbmFsb2dvdXMuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBjb25uZWN0aW9uLiBLbm93aW5nIHdoZXJlIHRoZSBzaHJpbmtpbmcgcHJvY2VzcyBiZWdpbnMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCBiZWhhdmlvdXIgYW5kIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pc2F0aW9uLiBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiBteSBhc3N1bXB0aW9uIGhvbGRzIHRydWUuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgY2FsbGluZyBjb250ZXh0IG9mIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIHRvIGNvbmZpcm0gdGhlIGluaXRpYWwgdHJpZ2dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTMxOT1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01Mzg4LVxubW0vdm1zY2FuLmM6NTM4OTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUzOTAte1xuLS1cbm1tL3Ztc2Nhbi5jPTYxMzM9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MTM3LVxubW0vdm1zY2FuLmM6NjEzODpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYxMzkte1xuLS1cbm1tL3Ztc2Nhbi5jPTYxNTA9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYxNjEtXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFx1MDAyNlx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xubW0vdm1zY2FuLmM6NjE2MjpcdFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNjE2My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MzIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBtbS92bXNjYW4uY2AgZm9yIE1HTFJVIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1tL3Ztc2Nhbi5jYCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBtb3N0IHJlbGV2YW50LCBwYXJ0aWN1bGFybHkgZm9yIE1HTFJVLiBUaGUgZmlyc3QgdGhpbmcgSSBzcG90IGlzIGBzaHJpbmtfbHJ1dmVjYCwgYnV0IHdhaXQsIHRoYXQmIzM5O3Mgc3RhdGljISBUaGF0IHByb2JhYmx5IG1lYW5zIGl0JiMzOTtzIG5vdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBgRm9jdXNTeW1ib2xzYCwgYXMgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljIGVudHJ5IHBvaW50cy4KCkxldCYjMzk7cyBzZWXigKYgT2theSwgSSBzZWUgYHNocmlua19ub2RlYCwgYHNocmlua196b25lc2AsIGBkb190cnlfdG9fZnJlZV9wYWdlc2AsIGFuZCBga3N3YXBkYCDigJMgYWxsIGNsYXNzaWMgaG90LXBhdGggZnVuY3Rpb25zLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBjYXV0aW9uIGFnYWluc3QgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBhdm9pZCBiaWFzaW5nIHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbiwgc28gSSBuZWVkIHRvIGJlIGNhcmVmdWwgaGVyZS4gSWYgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgaGFwcGVuaW5nICppbnNpZGUqIG9uZSBvZiB0aGVzZSBhbHJlYWR5IGhlYXZpbHkgc2NydXRpbml6ZWQgZnVuY3Rpb25zLCBsaWtlIGBzaHJpbmtfbHJ1dmVjYCBmb3IgZXhhbXBsZSwgdGhlbiBpbmNsdWRpbmcgdGhlbSBpbiBgRm9jdXNTeW1ib2xzYCBtaWdodCBub3QgYmUgdGhlIGJlc3QgYXBwcm9hY2guIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIGlkZW50aWZ5aW5nIHNwZWNpZmljIGVudHJ5IHBvaW50cyByZWxhdGVkIHRvIE1HTFJVJiMzOTtzIHVuaXF1ZSBmdW5jdGlvbmFsaXRpZXMuIEkgbmVlZCB0byBjaGVjayBhbmQgZW5zdXJlIHRoYXQgdGhlcmUgYXJlIHNwZWNpZmljIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggTUdMUlUmIzM5O3MgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc0NCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vdm1zY2FuLmM9ODQ2PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODU4LSAqL1xubW0vdm1zY2FuLmM6ODU5OnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbm1tL3Ztc2Nhbi5jLTg2MC17XG4tLVxubW0vdm1zY2FuLmMtODgwLSNlbHNlXG5tbS92bXNjYW4uYzo4ODE6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxubW0vdm1zY2FuLmMtODgyLXtcbi0tXG5tbS92bXNjYW4uYz04ODc9c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtOTExLVxubW0vdm1zY2FuLmM6OTEyOlx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xubW0vdm1zY2FuLmMtOTEzLVx0XHRpZiAoIXJlZmVyZW5jZWRfcHRlcylcbi0tXG5tbS92bXNjYW4uYy05MTUtXG5tbS92bXNjYW4uYzo5MTY6XHRcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWFfZmxhZ3MpID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQO1xubW0vdm1zY2FuLmMtOTE3LVx0fVxuLS1cbm1tL3Ztc2Nhbi5jPTIyOTk9c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjMwNS1cbm1tL3Ztc2Nhbi5jOjIzMDY6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxubW0vdm1zY2FuLmMtMjMwNy1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTI3MTM9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XG5tbS92bXNjYW4uYy0yNzE0LSNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXG5tbS92bXNjYW4uYzoyNzE1OkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xubW0vdm1zY2FuLmM6MjcxNjojZGVmaW5lIGdldF9jYXAoY2FwKVx0c3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXG5tbS92bXNjYW4uYy0yNzE3LSNlbHNlXG5tbS92bXNjYW4uYzoyNzE4OkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX0ZBTFNFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbm1tL3Ztc2Nhbi5jOjI3MTk6I2RlZmluZSBnZXRfY2FwKGNhcClcdHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXG5tbS92bXNjYW4uYy0yNzIwLSNlbmRpZlxuLS1cbm1tL3Ztc2Nhbi5jPTI4MDc9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy0yODM2LSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxubW0vdm1zY2FuLmM6MjgzNzogKiBpbiBscnVfZ2VuX2xvb2tfYXJvdW5kKCkuXG5tbS92bXNjYW4uYy0yODM4LSAqXG4tLVxubW0vdm1zY2FuLmM9Mjg1ND1zdGF0aWMgdm9pZCBnZXRfaXRlbV9rZXkodm9pZCAqaXRlbSwgaW50ICprZXkpXG4tLVxubW0vdm1zY2FuLmMtMjg2My1cbm1tL3Ztc2Nhbi5jOjI4NjQ6c3RhdGljIGJvb2wgdGVzdF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSxcbm1tL3Ztc2Nhbi5jLTI4NjUtXHRcdFx0ICAgICAgdm9pZCAqaXRlbSlcbi0tXG5tbS92bXNjYW4uYy0yODc5LVxubW0vdm1zY2FuLmM6Mjg4MDpzdGF0aWMgdm9pZCB1cGRhdGVfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEsXG5tbS92bXNjYW4uYy0yODgxLVx0XHRcdFx0dm9pZCAqaXRlbSlcbi0tXG5tbS92bXNjYW4uYy0yODk4LVxubW0vdm1zY2FuLmM6Mjg5OTpzdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbm1tL3Ztc2Nhbi5jLTI5MDAte1xuLS1cbm1tL3Ztc2Nhbi5jLTI5MjAtXG5tbS92bXNjYW4uYzoyOTIxOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy0yOTIyLXtcbm1tL3Ztc2Nhbi5jOjI5MjM6XHRzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCBtbV9saXN0ID0ge1xubW0vdm1zY2FuLmMtMjkyNC1cdFx0LmZpZm8gPSBMSVNUX0hFQURfSU5JVChtbV9saXN0LmZpZm8pLFxuLS1cbm1tL3Ztc2Nhbi5jLTI5MzYtXG5tbS92bXNjYW4uYzoyOTM3OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbm1tL3Ztc2Nhbi5jLTI5Mzgte1xuLS1cbm1tL3Ztc2Nhbi5jLTI5NDEtXG5tbS92bXNjYW4uYzoyOTQyOnN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfbmV4dF9tbShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxubW0vdm1zY2FuLmMtMjk0My17XG4tLVxubW0vdm1zY2FuLmMtMjk0Ni1cdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xubW0vdm1zY2FuLmM6Mjk0NzpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZSh3YWxrLVx1MDAzZWxydXZlYyk7XG5tbS92bXNjYW4uYy0yOTQ4LVxuLS1cbm1tL3Ztc2Nhbi5jLTI5NjAtXG5tbS92bXNjYW4uYzoyOTYxOnZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS92bXNjYW4uYy0yOTYyLXtcbi0tXG5tbS92bXNjYW4uYy0yOTY0LVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG5tbS92bXNjYW4uYzoyOTY1Olx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcbm1tL3Ztc2Nhbi5jLTI5NjYtXG4tLVxubW0vdm1zY2FuLmMtMjk3NS1cdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jOjI5NzY6XHRcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtMjk3Ny1cbi0tXG5tbS92bXNjYW4uYy0yOTg3LVxubW0vdm1zY2FuLmM6Mjk4ODp2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMjk4OS17XG5tbS92bXNjYW4uYy0yOTkwLVx0aW50IG5pZDtcbm1tL3Ztc2Nhbi5jOjI5OTE6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0O1xubW0vdm1zY2FuLmMtMjk5Mi1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7XG4tLVxubW0vdm1zY2FuLmMtMzAwNS1cdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jOjMwMDY6XHRcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtMzAwNy1cbi0tXG5tbS92bXNjYW4uYy0zMDI3LSNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jOjMwMjg6dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS92bXNjYW4uYy0zMDI5LXtcbi0tXG5tbS92bXNjYW4uYy0zMDUxLVxubW0vdm1zY2FuLmM6MzA1MjpcdGxydV9nZW5fZGVsX21tKG1tKTtcbm1tL3Ztc2Nhbi5jOjMwNTM6XHRscnVfZ2VuX2FkZF9tbShtbSk7XG5tbS92bXNjYW4uYy0zMDU0LX1cbi0tXG5tbS92bXNjYW4uYy0zMDU4LVxubW0vdm1zY2FuLmM6MzA1OTpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtMzA2MC17XG4tLVxubW0vdm1zY2FuLmMtMzA2My1cbm1tL3Ztc2Nhbi5jOjMwNjQ6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICpnZXRfbW1fc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxubW0vdm1zY2FuLmMtMzA2NS17XG4tLVxubW0vdm1zY2FuLmMtMzA2OC1cbm1tL3Ztc2Nhbi5jOjMwNjk6c3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF9uZXh0X21tKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG5tbS92bXNjYW4uYy0zMDcwLXtcbi0tXG5tbS92bXNjYW4uYy0zMDc1LVxubW0vdm1zY2FuLmM6MzA3NjpzdGF0aWMgdm9pZCByZXNldF9tbV9zdGF0cyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBib29sIGxhc3QpXG5tbS92bXNjYW4uYy0zMDc3LXtcbi0tXG5tbS92bXNjYW4uYy0zMDgwLVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gd2Fsay1cdTAwM2VscnV2ZWM7XG5tbS92bXNjYW4uYzozMDgxOlx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG5tbS92bXNjYW4uYy0zMDgyLVxuLS1cbm1tL3Ztc2Nhbi5jLTMxMDAtXG5tbS92bXNjYW4uYzozMTAxOnN0YXRpYyBib29sIGl0ZXJhdGVfbW1fbGlzdChzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgbW1fc3RydWN0ICoqaXRlcilcbm1tL3Ztc2Nhbi5jLTMxMDIte1xuLS1cbm1tL3Ztc2Nhbi5jLTMxMDctXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjMxMDg6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xubW0vdm1zY2FuLmM6MzEwOTpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtMzExMC1cbi0tXG5tbS92bXNjYW4uYz0zMTY1PXN0YXRpYyBib29sIGl0ZXJhdGVfbW1fbGlzdF9ub3dhbGsoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSlcbi0tXG5tbS92bXNjYW4uYy0zMTY4LVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG5tbS92bXNjYW4uYzozMTY5Olx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcbm1tL3Ztc2Nhbi5jOjMxNzA6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTMxNzEtXG4tLVxubW0vdm1zY2FuLmM9MzIxNz1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi0tXG5tbS92bXNjYW4uYy0zMjIwLVx0aW50IGk7XG5tbS92bXNjYW4uYzozMjIxOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zMjIyLVx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4tLVxubW0vdm1zY2FuLmM9MzIzNj1zdGF0aWMgdm9pZCByZXNldF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBib29sIGNhcnJ5b3Zlcilcbi0tXG5tbS92bXNjYW4uYy0zMjM4LVx0aW50IGhpc3QsIHRpZXI7XG5tbS92bXNjYW4uYzozMjM5Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zMjQwLVx0Ym9vbCBjbGVhciA9IGNhcnJ5b3ZlciA/IE5SX0hJU1RfR0VOUyA9PSAxIDogTlJfSElTVF9HRU5TIFx1MDAzZSAxO1xuLS1cbm1tL3Ztc2Nhbi5jPTMyODg9c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4tLVxubW0vdm1zY2FuLmMtMzMwNS1cdGRvIHtcbm1tL3Ztc2Nhbi5jOjMzMDY6XHRcdC8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi9cbm1tL3Ztc2Nhbi5jLTMzMDctXHRcdGlmICghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSlcbi0tXG5tbS92bXNjYW4uYz0zMzQ1PXN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vdm1zY2FuLmMtMzM0Ny1cdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xubW0vdm1zY2FuLmM6MzM0ODpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmM6MzM0OTpcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG5tbS92bXNjYW4uYy0zMzUwLVx0Ym9vbCBnZW5faW5jcmVhc2VkO1xuLS1cbm1tL3Ztc2Nhbi5jLTMzNTMtXHRpZiAoZ2VuX2luY3JlYXNlZClcbm1tL3Ztc2Nhbi5jOjMzNTQ6XHRcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG5tbS92bXNjYW4uYy0zMzU1LVx0cmV0dXJuIG5ld19nZW47XG4tLVxubW0vdm1zY2FuLmMtMzM1Ny1cbm1tL3Ztc2Nhbi5jOjMzNTg6c3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3Ztc2Nhbi5jLTMzNTktXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxuLS1cbm1tL3Ztc2Nhbi5jLTMzNzMtXG5tbS92bXNjYW4uYzozMzc0OnN0YXRpYyB2b2lkIHJlc2V0X2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbm1tL3Ztc2Nhbi5jLTMzNzUte1xuLS1cbm1tL3Ztc2Nhbi5jLTMzNzctXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBscnV2ZWNfbGl2ZV9sb2NrX2lycSh3YWxrLVx1MDAzZWxydXZlYyk7XG5tbS92bXNjYW4uYzozMzc4Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zMzc5LVxuLS1cbm1tL3Ztc2Nhbi5jLTMzOTItXG5tbS92bXNjYW4uYzozMzkzOlx0XHRpZiAobHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pKVxubW0vdm1zY2FuLmMtMzM5NC1cdFx0XHRscnUgJiM0Mzs9IExSVV9BQ1RJVkU7XG4tLVxubW0vdm1zY2FuLmM9MzQwMT1zdGF0aWMgaW50IHNob3VsZF9za2lwX3ZtYSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKmFyZ3MpXG4tLVxubW0vdm1zY2FuLmMtMzQwNC1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gYXJncy1cdTAwM2V2bWE7XG5tbS92bXNjYW4uYzozNDA1Olx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbm1tL3Ztc2Nhbi5jLTM0MDYtXG4tLVxubW0vdm1zY2FuLmM9MzUzOT1zdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuLS1cbm1tL3Ztc2Nhbi5jLTM1NDYtXG5tbS92bXNjYW4uYzozNTQ3OnN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vdm1zY2FuLmMtMzU0OC1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4tLVxubW0vdm1zY2FuLmMtMzU2My1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG5tbS92bXNjYW4uYzozNTY0Olx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG5tbS92bXNjYW4uYy0zNTY1LVx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4tLVxubW0vdm1zY2FuLmM9MzU3MT1zdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bXNjYW4uYy0zNTgxLVx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcbm1tL3Ztc2Nhbi5jOjM1ODI6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xubW0vdm1zY2FuLmMtMzU4My1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmMtMzU4NS1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjM1ODY6XHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbm1tL3Ztc2Nhbi5jLTM1ODctXHR1bnNpZ25lZCBpbnQgbnI7XG4tLVxubW0vdm1zY2FuLmM9MzY2Mj1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS92bXNjYW4uYy0zNjY5LVx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcbm1tL3Ztc2Nhbi5jOjM2NzA6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xubW0vdm1zY2FuLmMtMzY3MS1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmMtMzY3My1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjM2NzQ6XHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbm1tL3Ztc2Nhbi5jLTM2NzUtXG4tLVxubW0vdm1zY2FuLmM9Mzc1MD1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bXNjYW4uYy0zNzU5LVx0dW5zaWduZWQgbG9uZyBmaXJzdCA9IC0xO1xubW0vdm1zY2FuLmM6Mzc2MDpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG5tbS92bXNjYW4uYzozNzYxOlx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKHdhbGstXHUwMDNlbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTM3NjItXG4tLVxubW0vdm1zY2FuLmM9MzgyMz1zdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3Ztc2Nhbi5jLTM4MjktXHR1bnNpZ25lZCBsb25nIG5leHQ7XG5tbS92bXNjYW4uYzozODMwOlx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbm1tL3Ztc2Nhbi5jLTM4MzEtXG4tLVxubW0vdm1zY2FuLmMtMzg2NC1cbm1tL3Ztc2Nhbi5jOjM4NjU6c3RhdGljIHZvaWQgd2Fsa19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbm1tL3Ztc2Nhbi5jLTM4NjYte1xuLS1cbm1tL3Ztc2Nhbi5jLTM4OTktXG5tbS92bXNjYW4uYzozOTAwOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICpzZXRfbW1fd2FsayhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZvcmNlX2FsbG9jKVxubW0vdm1zY2FuLmMtMzkwMS17XG5tbS92bXNjYW4uYzozOTAyOlx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGN1cnJlbnQtXHUwMDNlcmVjbGFpbV9zdGF0ZS1cdTAwM2VtbV93YWxrO1xubW0vdm1zY2FuLmMtMzkwMy1cbi0tXG5tbS92bXNjYW4uYz0zOTIwPXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcbm1tL3Ztc2Nhbi5jLTM5MjEte1xubW0vdm1zY2FuLmM6MzkyMjpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBjdXJyZW50LVx1MDAzZXJlY2xhaW1fc3RhdGUtXHUwMDNlbW1fd2Fsaztcbm1tL3Ztc2Nhbi5jLTM5MjMtXG4tLVxubW0vdm1zY2FuLmM9Mzk0Nj1zdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy0zOTQ5LVx0aW50IHJlbWFpbmluZyA9IE1BWF9MUlVfQkFUQ0ggLyAoaXNfZXh0cmVtZV9zd2FwcGluZXNzKHN3YXBwaW5lc3MpID8gMiA6IDgpO1xubW0vdm1zY2FuLmM6Mzk1MDpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtMzk1MS1cdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xubW0vdm1zY2FuLmM6Mzk1MjpcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG5tbS92bXNjYW4uYy0zOTUzLVx0aW50IHRhcmdldF9nZW4gPSAob2xkX2dlbiAmIzQzOyAxKSAlIE1BWF9OUl9HRU5TO1xuLS1cbm1tL3Ztc2Nhbi5jPTQwMjI9c3RhdGljIHZvaWQgdHJ5X3RvX2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmMtNDAyNS1cdGJvb2wgc2VxX2luY19mbGFnID0gZmFsc2U7XG5tbS92bXNjYW4uYzo0MDI2Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy00MDI3LVx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbi0tXG5tbS92bXNjYW4uYy00MDMzLVx0XHR3aGlsZSAobWluX3NlcVt0eXBlXSAmIzQzOyBNSU5fTlJfR0VOUyBcdTAwM2M9IGxydWdlbi1cdTAwM2VtYXhfc2VxKSB7XG5tbS92bXNjYW4uYzo0MDM0Olx0XHRcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWluX3NlcVt0eXBlXSk7XG5tbS92bXNjYW4uYy00MDM1LVxuLS1cbm1tL3Ztc2Nhbi5jLTQwNTQtXG5tbS92bXNjYW4uYzo0MDU1Olx0Lyogc2VlIHRoZSBjb21tZW50IG9uIGxydV9nZW5fZm9saW8gKi9cbm1tL3Ztc2Nhbi5jLTQwNTYtXHRpZiAoc3dhcHBpbmVzcyBcdTAwMjZcdTAwMjYgc3dhcHBpbmVzcyBcdTAwM2M9IE1BWF9TV0FQUElORVNTKSB7XG4tLVxubW0vdm1zY2FuLmM9NDA3ND1zdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy00MDc4LVx0aW50IHR5cGUsIHpvbmU7XG5tbS92bXNjYW4uYzo0MDc5Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy00MDgwLXJlc3RhcnQ6XG4tLVxubW0vdm1zY2FuLmMtNDEwOS1cdCAqL1xubW0vdm1zY2FuLmM6NDExMDpcdHByZXYgPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtYXhfc2VxIC0gMSk7XG5tbS92bXNjYW4uYzo0MTExOlx0bmV4dCA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1heF9zZXEgJiM0MzsgMSk7XG5tbS92bXNjYW4uYy00MTEyLVxuLS1cbm1tL3Ztc2Nhbi5jPTQxMzk9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNDE0Mi1cdGJvb2wgc3VjY2Vzcztcbm1tL3Ztc2Nhbi5jOjQxNDM6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xubW0vdm1zY2FuLmMtNDE0NC1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDtcbm1tL3Ztc2Nhbi5jOjQxNDU6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jOjQxNDY6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTQxNDctXG4tLVxubW0vdm1zY2FuLmMtNDE1OC1cdCAqIElmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xubW0vdm1zY2FuLmM6NDE1OTpcdCAqIHRvIGxydV9nZW5fbG9va19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJpdCBpbiBhXG5tbS92bXNjYW4uYy00MTYwLVx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XG4tLVxubW0vdm1zY2FuLmM9NDE5Nz1zdGF0aWMgdm9pZCBzZXRfaW5pdGlhbF9wcmlvcml0eShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00MjIyLVxubW0vdm1zY2FuLmM6NDIyMzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2dlbl9zaXplKHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4sXG5tbS92bXNjYW4uYy00MjI0LVx0XHRpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBzZXEpXG5tbS92bXNjYW4uYy00MjI1LXtcbm1tL3Ztc2Nhbi5jOjQyMjY6XHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xubW0vdm1zY2FuLmMtNDIyNy1cdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7XG4tLVxubW0vdm1zY2FuLmM9NDIzND1zdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy00MjM3LVx0dW5zaWduZWQgbG9uZyBzZXEsIHRvdGFsID0gMDtcbm1tL3Ztc2Nhbi5jOjQyMzg6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTQyMzktXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTQyNjI9c3RhdGljIGJvb2wgbHJ1dmVjX2lzX3JlY2xhaW1hYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNDI3Ni1cbm1tL3Ztc2Nhbi5jOjQyNzc6XHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpKTtcbm1tL3Ztc2Nhbi5jLTQyNzgtXHRiaXJ0aCA9IFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLnRpbWVzdGFtcHNbZ2VuXSk7XG4tLVxubW0vdm1zY2FuLmMtNDI4My0vKiB0byBwcm90ZWN0IHRoZSB3b3JraW5nIHNldCBvZiB0aGUgbGFzdCBOIGppZmZpZXMgKi9cbm1tL3Ztc2Nhbi5jOjQyODQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1X2dlbl9taW5fdHRsIF9fcmVhZF9tb3N0bHk7XG5tbS92bXNjYW4uYy00Mjg1LVxubW0vdm1zY2FuLmM6NDI4NjpzdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNDI4Ny17XG5tbS92bXNjYW4uYy00Mjg4LVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xubW0vdm1zY2FuLmM6NDI4OTpcdHVuc2lnbmVkIGxvbmcgbWluX3R0bCA9IFJFQURfT05DRShscnVfZ2VuX21pbl90dGwpO1xubW0vdm1zY2FuLmMtNDI5MC1cdGJvb2wgcmVjbGFpbWFibGUgPSAhbWluX3R0bDtcbi0tXG5tbS92bXNjYW4uYy00MzMyLSAqL1xubW0vdm1zY2FuLmM6NDMzMzpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG5tbS92bXNjYW4uYy00MzM0LXtcbi0tXG5tbS92bXNjYW4uYy00MzM4LVx0dW5zaWduZWQgbG9uZyBlbmQ7XG5tbS92bXNjYW4uYzo0MzM5Olx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaztcbm1tL3Ztc2Nhbi5jLTQzNDAtXHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xuLS1cbm1tL3Ztc2Nhbi5jLTQzNDgtXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG5tbS92bXNjYW4uYzo0MzQ5Olx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xubW0vdm1zY2FuLmMtNDM1MC1cdHVuc2lnbmVkIGxvbmcgbWF4X3NlcTtcbi0tXG5tbS92bXNjYW4uYy00Mzg4LVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG5tbS92bXNjYW4uYzo0Mzg5Olx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbm1tL3Ztc2Nhbi5jLTQzOTAtXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ0NTE9ZW51bSB7XG4tLVxubW0vdm1zY2FuLmMtNDQ1OC1cbm1tL3Ztc2Nhbi5jOjQ0NTk6c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG5tbS92bXNjYW4uYy00NDYwLXtcbi0tXG5tbS92bXNjYW4uYy00NTA2LVxubW0vdm1zY2FuLmM6NDUwNzp2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTQ1MDgte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ1MzEtXG5tbS92bXNjYW4uYzo0NTMyOnZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTQ1MzMte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ1MzgtXG5tbS92bXNjYW4uYzo0NTM5Olx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9PTEQpO1xubW0vdm1zY2FuLmMtNDU0MC1cdH1cbi0tXG5tbS92bXNjYW4uYy00NTQyLVxubW0vdm1zY2FuLmM6NDU0Mzp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTQ0LXtcbi0tXG5tbS92bXNjYW4uYy00NTY4LVxubW0vdm1zY2FuLmM6NDU2OTp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ1NzAte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ1NzQtXHRpZiAoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4uc2VnKSAhPSBNRU1DR19MUlVfSEVBRClcbm1tL3Ztc2Nhbi5jOjQ1NzU6XHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX0hFQUQpO1xubW0vdm1zY2FuLmMtNDU3Ni19XG5tbS92bXNjYW4uYy00NTc3LVxubW0vdm1zY2FuLmM6NDU3ODpib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDU3OS17XG4tLVxubW0vdm1zY2FuLmM9NDU5MT1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21heF9zZXFfbm93YWxrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy00NTkzLXtcbm1tL3Ztc2Nhbi5jOjQ1OTQ6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xubW0vdm1zY2FuLmM6NDU5NTpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtNDU5Ni1cdGludCBzd2FwcGluZXNzID0gbWVtX2Nncm91cF9zd2FwcGluZXNzKG1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYy00NjI0LSAqL1xubW0vdm1zY2FuLmM6NDYyNTp2b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ2MjYte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ2NTEtICogICAgZ2VuZXJhdGlvbnMgb24gYW4gTFJVIGxpc3QuXG5tbS92bXNjYW4uYzo0NjUyOiAqIDQuIEluIGxydV9nZW5fZGVsX2ZvbGlvKCksIHRoZSBnZW5lcmF0aW9uIHRvIHdoaWNoIHRoZSBmb2xpbyBiZWxvbmdzIGlzXG5tbS92bXNjYW4uYy00NjUzLSAqICAgIGZvdW5kIGJhc2VkIG9uIHRoZSBnZW5lcmF0aW9uIGluZm9ybWF0aW9uIGluIGZvbGlvLVx1MDAzZWZsYWdzLCBhbmQgdGhlXG4tLVxubW0vdm1zY2FuLmMtNDY1NS0gKiAgICB0aGUgbHJ1IHNpemUgY29ycmVjdGx5IGR1cmluZyByZXBhcmVudGluZywgb3RoZXJ3aXNlIHRoZSBscnUgc2l6ZSBtYXlcbm1tL3Ztc2Nhbi5jOjQ2NTY6ICogICAgYmUgdXBkYXRlZCBpbmNvcnJlY3RseSBpbiBscnVfZ2VuX2RlbF9mb2xpbygpLlxubW0vdm1zY2FuLmMtNDY1Ny0gKlxuLS1cbm1tL3Ztc2Nhbi5jLTQ2NjUtICovXG5tbS92bXNjYW4uYzo0NjY2OnN0YXRpYyB2b2lkIF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsIHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMsXG5tbS92bXNjYW4uYy00NjY3LVx0XHRcdFx0ICAgICBpbnQgem9uZSwgaW50IHR5cGUpXG5tbS92bXNjYW4uYy00NjY4LXtcbm1tL3Ztc2Nhbi5jOjQ2Njk6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqY2hpbGRfbHJ1Z2VuLCAqcGFyZW50X2xydWdlbjtcbm1tL3Ztc2Nhbi5jLTQ2NzAtXHRlbnVtIGxydV9saXN0IGxydSA9IHR5cGUgKiBMUlVfSU5BQ1RJVkVfRklMRTtcbi0tXG5tbS92bXNjYW4uYy00Njc2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZ2V0X25yX2dlbnMoY2hpbGRfbHJ1dmVjLCB0eXBlKTsgaSYjNDM7JiM0MzspIHtcbm1tL3Ztc2Nhbi5jOjQ2Nzc6XHRcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGNoaWxkX2xydWdlbi1cdTAwM2VtYXhfc2VxIC0gaSk7XG5tbS92bXNjYW4uYy00Njc4LVx0XHRsb25nIG5yX3BhZ2VzID0gY2hpbGRfbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV07XG5tbS92bXNjYW4uYzo0Njc5Olx0XHRpbnQgY2hpbGRfbHJ1X2FjdGl2ZSA9IGxydV9nZW5faXNfYWN0aXZlKGNoaWxkX2xydXZlYywgZ2VuKSA/IExSVV9BQ1RJVkUgOiAwO1xubW0vdm1zY2FuLmM6NDY4MDpcdFx0aW50IHBhcmVudF9scnVfYWN0aXZlID0gbHJ1X2dlbl9pc19hY3RpdmUocGFyZW50X2xydXZlYywgZ2VuKSA/IExSVV9BQ1RJVkUgOiAwO1xubW0vdm1zY2FuLmMtNDY4MS1cbi0tXG5tbS92bXNjYW4uYy00Njg5LVxubW0vdm1zY2FuLmM6NDY5MDpcdFx0aWYgKGxydV9nZW5faXNfYWN0aXZlKGNoaWxkX2xydXZlYywgZ2VuKSAhPSBscnVfZ2VuX2lzX2FjdGl2ZShwYXJlbnRfbHJ1dmVjLCBnZW4pKSB7XG5tbS92bXNjYW4uYy00NjkxLVx0XHRcdF9fdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1ICYjNDM7IGNoaWxkX2xydV9hY3RpdmUsIHpvbmUsIC1ucl9wYWdlcyk7XG4tLVxubW0vdm1zY2FuLmMtNDY5Ni1cbm1tL3Ztc2Nhbi5jOjQ2OTc6dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ2OTgte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ3MDgtXHRcdGZvciAodHlwZSA9IDA7IHR5cGUgXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUmIzQzOyYjNDM7KVxubW0vdm1zY2FuLmM6NDcwOTpcdFx0XHRfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCB6aWQsIHR5cGUpO1xubW0vdm1zY2FuLmMtNDcxMC1cbi0tXG5tbS92bXNjYW4uYz00NzI2PXN0YXRpYyBib29sIHNvcnRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy00NzM2LVx0aW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7XG5tbS92bXNjYW4uYzo0NzM3Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy00NzM4LVxuLS1cbm1tL3Ztc2Nhbi5jLTQ3NDItXHRpZiAoIWZvbGlvX2V2aWN0YWJsZShmb2xpbykpIHtcbm1tL3Ztc2Nhbi5jOjQ3NDM6XHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTtcbm1tL3Ztc2Nhbi5jLTQ3NDQtXHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xuLS1cbm1tL3Ztc2Nhbi5jLTQ3NTEtXHQvKiBwcm9tb3RlZCAqL1xubW0vdm1zY2FuLmM6NDc1MjpcdGlmIChnZW4gIT0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSkpIHtcbm1tL3Ztc2Nhbi5jLTQ3NTMtXHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbZ2VuXVt0eXBlXVt6b25lXSk7XG4tLVxubW0vdm1zY2FuLmM9NDc4Mj1zdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDc5OS1cbm1tL3Ztc2Nhbi5jOjQ4MDA6XHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG5tbS92bXNjYW4uYy00ODAxLVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XG4tLVxubW0vdm1zY2FuLmM9NDgwNj1zdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ4MTgtXHR1bnNpZ25lZCBsb25nIHJlbWFpbmluZyA9IG5yX3RvX3NjYW47XG5tbS92bXNjYW4uYzo0ODE5Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy00ODIwLVx0Ym9vbCBlYXJseV9zdG9wID0gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmMtNDgyOS1cbm1tL3Ztc2Nhbi5jOjQ4MzA6XHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbm1tL3Ztc2Nhbi5jLTQ4MzEtXG4tLVxubW0vdm1zY2FuLmM9NTAwOD1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy01MDE2LVx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xubW0vdm1zY2FuLmM6NTAxNzpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG5tbS92bXNjYW4uYy01MDE4LVx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcbi0tXG5tbS92bXNjYW4uYy01MDY5LVx0XHQvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbm1tL3Ztc2Nhbi5jOjUwNzA6XHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbm1tL3Ztc2Nhbi5jLTUwNzEtXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xuLS1cbm1tL3Ztc2Nhbi5jLTUxMDMtXG5tbS92bXNjYW4uYzo1MTA0OnN0YXRpYyBib29sIGxydV9nZW5faW1iYWxhbmNlZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcbm1tL3Ztc2Nhbi5jLTUxMDUtXHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG5tbS92bXNjYW4uYy01MTA2LXtcbm1tL3Ztc2Nhbi5jOjUxMDc6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTUxMDgtXHR1bnNpZ25lZCBsb25nIHlvdW5nID0gMCwgb2xkID0gMCwgbGFnID0gMDtcbi0tXG5tbS92bXNjYW4uYz01MTQyPXN0YXRpYyBib29sIHNob3VsZF9ydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsXG4tLVxubW0vdm1zY2FuLmMtNTE2My1cdC8qIFJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgc2V2ZXJlbHkgaW1iYWxhbmNlZCBhY3Jvc3MgZ2VucyAqL1xubW0vdm1zY2FuLmM6NTE2NDpcdHJldHVybiBscnVfZ2VuX2ltYmFsYW5jZWQobHJ1dmVjLCBtYXhfc2VxLCBzYywgdHlwZSwgc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYy01MTY1LX1cbi0tXG5tbS92bXNjYW4uYz01Mjc4PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyODUtXG5tbS92bXNjYW4uYzo1Mjg2Olx0LyogbHJ1X2dlbl9hZ2Vfbm9kZSgpIGNhbGxlZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKCkgKi9cbm1tL3Ztc2Nhbi5jLTUyODctXHRpZiAobWVtX2Nncm91cF9iZWxvd19taW4oTlVMTCwgbWVtY2cpKVxuLS1cbm1tL3Ztc2Nhbi5jPTUzMTk9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTMyNS1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbm1tL3Ztc2Nhbi5jOjUzMjY6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuO1xubW0vdm1zY2FuLmMtNTMyNy1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbi0tXG5tbS92bXNjYW4uYy01MzM5LVx0XHRpZiAob3ApIHtcbm1tL3Ztc2Nhbi5jOjUzNDA6XHRcdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBvcCk7XG5tbS92bXNjYW4uYy01MzQxLVx0XHRcdG9wID0gMDtcbi0tXG5tbS92bXNjYW4uYy01MzUzLVx0XHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkge1xubW0vdm1zY2FuLmM6NTM1NDpcdFx0XHRscnVfZ2VuX3JlbGVhc2VfbWVtY2cobWVtY2cpO1xubW0vdm1zY2FuLmMtNTM1NS1cdFx0XHRtZW1jZyA9IE5VTEw7XG4tLVxubW0vdm1zY2FuLmMtNTM3MS1cdGlmIChvcClcbm1tL3Ztc2Nhbi5jOjUzNzI6XHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgb3ApO1xubW0vdm1zY2FuLmMtNTM3My1cbi0tXG5tbS92bXNjYW4uYy01Mzc4LVxubW0vdm1zY2FuLmM6NTM3OTpcdC8qIHJlc3RhcnQgaWYgcmFjZWQgd2l0aCBscnVfZ2VuX3JvdGF0ZV9tZW1jZygpICovXG5tbS92bXNjYW4uYy01MzgwLVx0aWYgKGdlbiAhPSBnZXRfbnVsbHNfdmFsdWUocG9zKSlcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk1MAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDkyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBGdXp6aW5nIEVmZm9ydHMgb24gTUdMUlUgUmVjbGFpbSBQYXRocyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoZSBNR0xSVSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIHJlY2xhaW0gcGF0aHMuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyB0aGF0IHRyaWdnZXIgdGhlIHJlY2xhaW0gYW5kIGFnaW5nIGxvZ2ljIGFuZCB0YXJnZXQgdGhvc2UuCgpUaGUgaW5pdGlhbCBhcHByb2FjaCBpbnZvbHZlcyB1bmRlcnN0YW5kaW5nIHdoaWNoIGZ1bmN0aW9ucyBhcmUgKmFjdHVhbGx5KiByZXNwb25zaWJsZSBmb3IgdGhlIHJlY2xhaW0gcHJvY2Vzcy4gV2UgaGF2ZSBhIHNldCBvZiBub24tc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBscnVfZ2VuX2FkZF9tbWAsIGBscnVfZ2VuX2RlbF9tbWAsIGV0Yy4sIGJ1dCB0aGVzZSBhcmVuJiMzOTt0IHRoZSBwcmltYXJ5IGRyaXZlcnMuIFRoZSByZWFsIHJlY2xhaW0gd29yayBpcyBpbml0aWF0ZWQgYnkgbWVtb3J5IHByZXNzdXJlLCB3aGljaCBjYWxscyBhIHNlcXVlbmNlOiBgc2hyaW5rX2xydXZlY2AgLSZndDsgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgLSZndDsgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBhbmQgc28gb24sIGV2ZW50dWFsbHkgbGVhZGluZyB0byBgX19mb2xpb19pbmNfZ2VuYC4gQWdpbmcgaXMgdHJpZ2dlcmVkIGluIGEgc2ltaWxhciBtYW5uZXIsIGZyb20gYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBkb3duIHRvIGBscnVfZ2VuX2ltYmFsYW5jZWRgLgoKR2l2ZW4gdGhhdCB0aGVzZSBwYXRocyBhcmUgYWN0aXZhdGVkIGJ5IG1lbW9yeSBhbGxvY2F0aW9uLCBwYXJ0aWN1bGFybHkgdGhyb3VnaCBzeXNjYWxscyBsaWtlIGBhbGxvY19wYWdlc2Agb3IgYG1tYXBgLCBTeXprYWxsZXIgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyB0b29sIGZvciB0aGUgam9iLiBUbyBtYWtlIGl0IGVmZmVjdGl2ZSwgSSBuZWVkIHRvIHByb3ZpZGUgYEZvY3VzU3ltYm9sc2AgdGhhdCBhcmUgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBhbmQgbm90IGp1c3QgZ2VuZXJpYyBzeXNjYWxscy4KCk15IGZpcnN0IGltcHVsc2Ugd2FzIHRvIGxpc3Qgb3V0IHRoZSBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zOiBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCwgYGxydV9nZW5fYWdlX25vZGVgLCBldGMuIEhvd2V2ZXIsIHRoZSBpbnN0cnVjdGlvbnMgaGlnaGxpZ2h0ZWQgc29tZXRoaW5nIGltcG9ydGFudDogcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgYmVjYXVzZSBzdGF0aWMgaGVscGVycyBhcmUgb2Z0ZW4gaW5saW5lZCBhbmQgZG9uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIGNydWNpYWwgZGlzdGluY3Rpb24uCgpTbywgSSBzdGFydGVkIGNoZWNraW5nIHRoZSBsaXN0ZWQgZnVuY3Rpb25zLiBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBpcyBzdGF0aWMsIGFzIGlzIGBzaHJpbmtfbHJ1dmVjYCwgYHNocmlua19ub2RlYCwgYW5kIGBkb190cnlfdG9fZnJlZV9wYWdlc2AuIEhvd2V2ZXIsIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgbm9uLXN0YXRpYy4gVGhlIHNhbWUgZ29lcyBmb3IgYGtzd2FwZGAsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYGxydV9nZW5fYWRkX21tYCwgYW5kIGBscnVfZ2VuX2RlbF9tbWAuIGB0cnlfdG9fZnJlZV9wYWdlc2Agc291bmRzIGdlbmVyaWMgYW5kIG1pZ2h0IG5vdCBiZSB0aGUgbW9zdCB0YXJnZXRlZC4KCk5vdywgY29uc2lkZXJpbmcgdGhlIGNoYW5nZXMsIHRoZSBtb3JlIHJlbGV2YW50IGZ1bmN0aW9ucyBzZWVtIHRvIGJlIHRob3NlIGludm9sdmVkIGluIGluY3JlYXNpbmcgdGhlIHNlcXVlbmNlIG51bWJlciwgc2Nhbm5pbmcgZm9saW9zLCBpc29sYXRpbmcgYW5kIGV2aWN0aW5nIHRoZW0sIGFuZCB0aGUgYWdpbmcgbG9naWMsIHN1Y2ggYXMgYGxydV9nZW5faW1iYWxhbmNlZGAsIGFuZCBzbyBvbi4gVGhlc2UgYWxsIGZlZWQgaW50byBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIG9yIGBydW5fZXZpY3Rpb25gLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBieSBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIGFuZCBgbWF4X2xydV9nZW5fbWVtY2dgLiBUaGUgcXVlc3Rpb24gaXMsIHdoaWNoIG9mIHRoZXNlIGlzIHRoZSBtb3N0IGVmZmVjdGl2ZSBlbnRyeSBwb2ludD8gYGxydV9nZW5fc29mdF9yZWNsYWltYCBhbmQgYG1heF9scnVfZ2VuX21lbWNnYCBhcmUgbm9uLXN0YXRpYy4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZW0gZnVydGhlciB0byBzZWUgaWYgdGhleSBhcmUgYSBnb29kIGZpdCBmb3IgbXkgYEZvY3VzU3ltYm9sc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhscnVfZ2VuX3NvZnRfcmVjbGFpbXxtYXhfbHJ1X2dlbl9tZW1jZykmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jPTE4MD1zdGF0aWMgdm9pZCBtZW1jZzFfdXBkYXRlX3RyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xODctXHRcdGlmIChzb2Z0X2xpbWl0X2V4Y2VzcyhtZW1jZykpXG5tbS9tZW1jb250cm9sLXYxLmM6MTg4Olx0XHRcdGxydV9nZW5fc29mdF9yZWNsYWltKG1lbWNnLCBuaWQpO1xubW0vbWVtY29udHJvbC12MS5jLTE4OS1cdFx0cmV0dXJuO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0yNzc9c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjg1LVx0XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpXG5tbS9tZW1jb250cm9sLmM6Mjg2Olx0XHRcdG1heF9scnVfZ2VuX21lbWNnKHBhcmVudCwgbmlkKTtcbm1tL21lbWNvbnRyb2wuYy0yODctXG4tLVxubW0vdm1zY2FuLmM9NDU0Mz12b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtNDU2OC1cbm1tL3Ztc2Nhbi5jOjQ1Njk6dm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG5tbS92bXNjYW4uYy00NTcwLXtcbi0tXG5tbS92bXNjYW4uYz00NTkxPXN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWF4X3NlcV9ub3dhbGsoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ2MjQtICovXG5tbS92bXNjYW4uYzo0NjI1OnZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDYyNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTk5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IEludGVyZGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyBzb21lIG1lbW9yeSByZWNsYWltIGxvZ2ljIGhlcmUuIEkgc2VlIHRoYXQgYGxydV9nZW5fc29mdF9yZWNsYWltYCBpcyB0cmlnZ2VyZWQgYnkgYG1lbWNnMV91cGRhdGVfdHJlZWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50IOKAkyBpdCB0ZWxscyBtZSBob3cgc29mdCByZWNsYWltLCBwcmVzdW1hYmx5IHJlbGF0ZWQgdG8gZ2VuZXJhdGlvbmFsIExSVSwgZ2V0cyBpbml0aWF0ZWQgZHVyaW5nIG1lbW9yeSBjb250cm9sIGdyb3VwIHVwZGF0ZXMuIE5vdywgSSBoYXZlIHRvIHJlbWVtYmVyIHRoZSBzcGVjaWZpY3Mgb2YgdGhhdCBjYWxsIGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBob3cgbWVtY2cgcHJlc3N1cmUgaXMgYWRkcmVzc2VkLgoKVGhlbiBJIG5vdGUgYG1heF9scnVfZ2VuX21lbWNnYCBpcyBpbnZva2VkIGZyb20gYG1lbWNnX3JlcGFyZW50X29iamNnc2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBSZXBhcmVudGluZyBvYmplY3QgY2dyb3VwcyBwcm9iYWJseSBpbnZvbHZlcyByZWFkanVzdGluZyBsaW1pdHMgYW5kLCBieSBleHRlbnNpb24sIG1heGltdW0gZ2VuZXJhdGlvbmFsIExSVSB2YWx1ZXMgZm9yIGEgbWVtY2cuIFNvIEkgbmVlZCB0byBnbyBvdmVyIHRoZSBudWFuY2VzIG9mIHRoYXQgaW50ZXJhY3Rpb24gdG9vLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSYjMzk7cyBhbnkgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCBwYWdlIG93bmVyc2hpcCBoYXBwZW5pbmcgaGVyZS4KCk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbiBhcmlzZXM6IFdoYXQgYWJvdXQgYHRyeV90b19mcmVlX3BhZ2VzYD8gV2hlcmUgZG9lcyB0aGF0IGZpdCBpbiB0aGlzIHdob2xlIHBpY3R1cmU/IElzIHRoaXMgYmVpbmcgY2FsbGVkIGRpcmVjdGx5LCBvciBpcyB0aGVyZSBhIGxheWVyIG9mIGFic3RyYWN0aW9uPyBJdCBtaWdodCBiZSB0aGUgY29yZSBwYWdlIGZyZWVpbmcgbWVjaGFuaXNtLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY2FsbHMgSSYjMzk7dmUganVzdCBpZGVudGlmaWVkLiBJIHNob3VsZCBwcm9iYWJseSByZXZpZXcgdGhlIGNhbGwgY2hhaW4gYW5kIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBjb21lcyBpbi4gV2hhdCBhcmUgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGl0PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBzdWNjZXNzIG9yIGZhaWx1cmU/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19mcmVlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9Njk9dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTtcbm1tL2ludGVybmFsLmg6NzA6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG5tbS9pbnRlcm5hbC5oLTcxLVx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm1hc2spO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NDM4PV9fcGVyZm9ybV9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ0NTAtXG5tbS9wYWdlX2FsbG9jLmM6NDQ1MTpcdHByb2dyZXNzID0gdHJ5X3RvX2ZyZWVfcGFnZXMoYWMtXHUwMDNlem9uZWxpc3QsIG9yZGVyLCBnZnBfbWFzayxcbm1tL3BhZ2VfYWxsb2MuYy00NDUyLVx0XHRcdFx0XHRcdFx0XHRhYy1cdTAwM2Vub2RlbWFzayk7XG4tLVxubW0vdm1zY2FuLmM9NjY5Nz1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTY3MjctICovXG5tbS92bXNjYW4uYzo2NzI4OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3RyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG5tbS92bXNjYW4uYy02NzI5LVx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jPTY4NzA9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG4tLVxubW0vdm1zY2FuLmMtNjk0OS1cbm1tL3Ztc2Nhbi5jOjY5NTA6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG5tbS92bXNjYW4uYy02OTUxLVx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL3Ztc2Nhbi5jLTY5ODQtXG5tbS92bXNjYW4uYzo2OTg1Olx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY5ODYtXG4tLVxubW0vdm1zY2FuLmM9NzAzNj11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTcwNjctXG5tbS92bXNjYW4uYzo3MDY4Olx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTcwNjktXG4tLVxubW0vdm1zY2FuLmM9NzgzND11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcbi0tXG5tbS92bXNjYW4uYy03ODUzLVxubW0vdm1zY2FuLmM6Nzg1NDpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy03ODU1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzA5OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0IHdlcmUgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGlyZWN0ICZhbXA7IEJhY2tncm91bmQgUmVjbGFpbSBFbnRyeSBQb2ludHMgJmFtcDsgRXhwbG9yaW5nIEZ1cnRoZXIgTUdMUlUgQ29ubmVjdGlvbnMqKgoKQWxyaWdodCwgc28gYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7ZCByZWFjaCBmb3Igd2hlbiB0aGlua2luZyBhYm91dCAqZGlyZWN0KiBtZW1vcnkgcmVjbGFpbS4gVGhleSByZXByZXNlbnQgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmlnZ2VyaW5nIGltbWVkaWF0ZSBmcmVlaW5nIG9mIHBhZ2VzLiBUaGVuLCBhcyBleHBlY3RlZCwgd2UgaGF2ZSBga3N3YXBkYCBmb3IgYmFja2dyb3VuZCByZWNsYWltLCB0aGUgb25lIHRoYXQgcnVucyBpbiB0aGUgYmFja2dyb3VuZC4KCk5vdywgSSBuZWVkIHRvIHpvb20gaW4gb24gYG1tL3Ztc2Nhbi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb3RoZXIgZnVuY3Rpb25zICp3aXRoaW4qIHRoYXQgbW9kdWxlIG1pZ2h0IGJlIHJlbGV2YW50IHRvIE1HTFJVLiBUaGUgaW50ZW50IGlzIHRvIHNlZSBpZiBhbnkgb3RoZXIgZnVuY3Rpb24gaXMgbm90IHN0YXRpYyBhbmQgbWF5IGJlIHJlbGF0ZWQgdG8gdGhlIE1HTFJVIGNvZGUuIEl0IG1ha2VzIHNlbnNlIHRvIHNlZSBob3cgdGhlc2UgZGlmZmVyZW50IHBpZWNlcyBpbnRlcmNvbm5lY3QuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyB0aGF0IGhhcyBhIHBvdGVudGlhbCBpbXBhY3Qgb24sIG9yIGltcGxpY2F0aW9uIGZvciwgTUdMUlUmIzM5O3MgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIGxydV9nZW5fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Mjk0Mj1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbi0tXG5tbS92bXNjYW4uYy0yOTYwLVxubW0vdm1zY2FuLmM6Mjk2MTp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMjk2Mi17XG4tLVxubW0vdm1zY2FuLmMtMjk4Ny1cbm1tL3Ztc2Nhbi5jOjI5ODg6dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTI5ODkte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwMjctI2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmM6MzAyODp2b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTMwMjkte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ0NTk9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4tLVxubW0vdm1zY2FuLmMtNDUwNi1cbm1tL3Ztc2Nhbi5jOjQ1MDc6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTA4LXtcbi0tXG5tbS92bXNjYW4uYy00NTMxLVxubW0vdm1zY2FuLmM6NDUzMjp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTMzLXtcbi0tXG5tbS92bXNjYW4uYy00NTQyLVxubW0vdm1zY2FuLmM6NDU0Mzp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTQ0LXtcbi0tXG5tbS92bXNjYW4uYy00NTY4LVxubW0vdm1zY2FuLmM6NDU2OTp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ1NzAte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ2NjY9c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00Njk2LVxubW0vdm1zY2FuLmM6NDY5Nzp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDY5OC17XG4tLVxubW0vdm1zY2FuLmM9NjAyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscnVfZ2VuX3JvX2ZvcHMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNjAzOS1cbm1tL3Ztc2Nhbi5jOjYwNDA6dm9pZCBscnVfZ2VuX2luaXRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbm1tL3Ztc2Nhbi5jLTYwNDEte1xuLS1cbm1tL3Ztc2Nhbi5jLTYwNTEtXG5tbS92bXNjYW4uYzo2MDUyOnZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy02MDUzLXtcbi0tXG5tbS92bXNjYW4uYy02MDczLVxubW0vdm1zY2FuLmM6NjA3NDp2b2lkIGxydV9nZW5faW5pdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy02MDc1LXtcbi0tXG5tbS92bXNjYW4uYy02MDg0LVxubW0vdm1zY2FuLmM6NjA4NTp2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy02MDg2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzNTAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQsIGV4cHJlc3NlZCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAqKgoKSG1tLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuLi4gcmlnaHQsIGl0JiMzOTtzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhbiBpbXBvcnRhbnQgcG9pbnQuIEtub3dpbmcgaXQmIzM5O3Mgbm9uLXN0YXRpYyBpbW1lZGlhdGVseSBleHBhbmRzIHRoZSBwb3NzaWJpbGl0aWVzIGZvciBpdHMgdXNhZ2UuIEl0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBwYXJ0IG9mIGEgbGFyZ2VyIGNsYXNzIG9yIG1vZHVsZSwgYW5kIHRoZXJlZm9yZSBpdHMgc2NvcGUgaXNuJiMzOTt0IGxpbWl0ZWQgdG8gYSBzaW5nbGUgZmlsZS4gSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXJlIGl0JiMzOTtzICp2aXNpYmxlKiBhbmQgaG93IHRoYXQgbWlnaHQgYWZmZWN0IGl0cyBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbXBvbmVudHMgd2l0aGluIHRoZSBzeXN0ZW0uIElzIGl0IGBwdWJsaWNgLCBgcHJvdGVjdGVkYCwgb3IgYHByaXZhdGVgPyBUaGF0JiMzOTtzIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIGl0JiMzOTtzIGFib3V0IHRoZSBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucyBhbmQgaG93IHRoaXMgZnVuY3Rpb24gY2FuIGJlIGxldmVyYWdlZCBvciBwb3RlbnRpYWxseSBtb2RpZmllZCBsYXRlci4gSSBzaG91bGQgYmUga2VlcGluZyB0cmFjayBvZiBhbGwgdGhlIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgaXRzIG5vbi1zdGF0aWMgbmF0dXJlIHdpbGwgYmUgaW1wb3J0YW50IHRvIGdyYXNwIHRoZSB3aWRlciBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24mIzM5O3MgcHVycG9zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmJvb2wgbHJ1X2dlbl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00Mjg2PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDMzMi0gKi9cbm1tL3Ztc2Nhbi5jOjQzMzM6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxubW0vdm1zY2FuLmMtNDMzNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NzQxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqVHJhY2luZyB0aGUgRm9vdHN0ZXBzIG9mIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGV2ZXJ5d2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFdoZXJlIGRvZXMgdGhlIGV4ZWN1dGlvbiBwYXRoICpiZWdpbio/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuIFVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcyB3aWxsIHRlbGwgbWUgYSBsb3QuIEVzc2VudGlhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIHNvdXJjZSBjb2RlLCB0cmFjZSB0aGUgdXNhZ2UsIGFuZCBzZWUgaG93IGl0IGlzIHdvcmtpbmcsIGhvcGluZyB0byBwYWludCBhIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcm1hcC5jPTkxOD1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy05ODItXHRcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXHUwMDI2XHUwMDI2IHB2bXcucHRlKSB7XG5tbS9ybWFwLmM6OTgzOlx0XHRcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFx1MDAyNnB2bXcsIG5yKSlcbm1tL3JtYXAuYy05ODQtXHRcdFx0XHRyZWZlcmVuY2VkJiM0MzsmIzQzOztcbi0tXG5tbS92bXNjYW4uYz0yODA3PXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtMjgzNi0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcbm1tL3Ztc2Nhbi5jOjI4Mzc6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxubW0vdm1zY2FuLmMtMjgzOC0gKlxuLS1cbm1tL3Ztc2Nhbi5jPTQxMzk9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNDE1OC1cdCAqIElmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xubW0vdm1zY2FuLmM6NDE1OTpcdCAqIHRvIGxydV9nZW5fbG9va19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJpdCBpbiBhXG5tbS92bXNjYW4uYy00MTYwLVx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XG4tLVxubW0vdm1zY2FuLmM9NDI4Nj1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQzMzItICovXG5tbS92bXNjYW4uYzo0MzMzOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbm1tL3Ztc2Nhbi5jLTQzMzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM5MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1HTFJVIEV2aWN0aW9uIFBhdGggRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgTUdMUlUgcGF0Y2gsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBldmljdGlvbiBhbmQgYWdpbmcgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoZSBpbml0aWFsIGNhbGwgc3RhY2sgcG9pbnRzIHRvIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBmcm9tIGBmb2xpb19yZWZlcmVuY2VkX29uZWAgaW4gYG1tL3JtYXAuY2AsIGJ1dCB0aGUgbWVhdCBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25z4oCUYGZvbGlvX2luY19nZW5gLCBgX19mb2xpb19pbmNfZ2VuYCwgYGluY19taW5fc2VxYCwgYHNjYW5fZm9saW9zYCwgYGdldF90eXBlX3RvX3NjYW5gLCBgaXNvbGF0ZV9mb2xpb3NgLCBgZXZpY3RfZm9saW9zYCwgYGxydV9nZW5faW1iYWxhbmNlZGAsIGFuZCBgc2hvdWxkX3J1bl9hZ2luZ2DigJRhcmUgYWxsIGRlZXBseSBpbnZvbHZlZCBpbiB0aGUgZXZpY3Rpb24gcHJvY2Vzcy4KClRoZSBldmljdGlvbiBwYXRoIGl0c2VsZiBpcyB0cmlnZ2VyZWQgYnkgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBhbmQgYHJ1bl9ldmljdGlvbmAsIGFuZCBpdCBsb29rcyBsaWtlIGBydW5fZXZpY3Rpb25gIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlLCBiZWluZyBjYWxsZWQgYnkgYGxydV9nZW5fc29mdF9yZWNsYWltYCAoZm9yIGNncm91cCB2MSBzb2Z0IGxpbWl0IHJlY2xhaW0pIGFuZCBgbWF4X2xydV9nZW5fbWVtY2dgICh3aGVuIGEgbWVtY2cgaXMgb2ZmbGluZWQpLiBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGlzIGNhbGxlZCBmcm9tIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGZyb20gYHNocmlua19scnV2ZWNgLCBgc2hyaW5rX25vZGVgLCB3aGljaCBmaW5hbGx5IGFyZSBjYWxsZWQgZnJvbSBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBga3N3YXBkYC4KClRoZXJlZm9yZSwgdGhlIG1haW4gZW50cnkgcG9pbnRzIEkmIzM5O20gZm9jdXNpbmcgb24gYXJlIGluaXRpYWxseTogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gLCBhbmQgYG1heF9scnVfZ2VuX21lbWNnYC4gYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGFyZSB0aGUgb2J2aW91cyBkaXJlY3QgcmVjbGFpbSBlbnRyeSBwb2ludHMsIGJ1dCB0aGUgb3RoZXJzIGFyZSBNR0xSVS1zcGVjaWZpYy4gSSYjMzk7dmUgYWxzbyBjb25zaWRlcmVkIG90aGVyIGVudHJ5IHBvaW50cywgc3VjaCBhcyBga3N3YXBkYCwgYnV0IGl0IHNlZW1zIGxpa2UgYSBrZXJuZWwgdGhyZWFkIHRoYXQmIzM5O3Mgbm90IGVhc2lseSB0cmlnZ2VyZWQgdmlhIGFuIGludGVyZmFjZS4gYHNocmlua19hbGxfbWVtb3J5YCBpcyBhbHNvIGEgcG9zc2liaWxpdHksIGJ1dCBpdCBsb29rcyBsaWtlIHRoYXQgaXMgcmVsYXRlZCB0byBoaWJlcm5hdGlvbi4KCkhvd2V2ZXIsIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgYSBob3QtcGF0aCBmdW5jdGlvbi4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgbGlzdGluZyB0aG9zZSB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0cywgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhhdCwgZ2l2ZW4gdGhlIGRlcHRoIG9mIHRoZXNlIGNoYW5nZXMgaW4gdGhlIHJlY2xhaW0gbG9naWMsIGl0JiMzOTtzIG5vdCB0aGUgaWRlYWwgZm9jdXMuCgpUaGVuLCBJIHRob3VnaHQgYWJvdXQgd2hldGhlciB0aGVyZSBhcmUgb3RoZXIgTUdMUlUtc3BlY2lmaWMgZW50cnkgcG9pbnRzLCBzdWNoIGFzIGBscnVfZ2VuX2FkZF9tbWAsIGBscnVfZ2VuX2RlbF9tbWAsIGV0Yy4sIGJ1dCBpdCBzZWVtcyB0aGF0IHRoZXNlIGFyZSBtYWlubHkgc2V0dXAtcmVsYXRlZCBhbmQgZG9uJiMzOTt0IGRpcmVjdGx5IGtpY2sgb2ZmIGV2aWN0aW9uLiBTbywgdGhlIGNsZWFuZXN0IG9wdGlvbnMgYXJlIGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAgYW5kIGBtYXhfbHJ1X2dlbl9tZW1jZ2AuCgpMb29raW5nIHRocm91Z2ggdGhlIHBhdGNoIG1vcmUgY2xvc2VseSwgaXQmIzM5O3MgYWxsIHN0YXRpYyBmdW5jdGlvbnMuIElmIHRoZXJlIGFyZSBubyBvdGhlciwgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIHNwZWNpZmljIHRvIHRoaXMgY2hhbmdlLCB0aGUgYmVzdCBjaG9pY2UgaXMgdG8gZWl0aGVyIGxpc3QgdGhvc2UgdHJpZ2dlcmluZyB0aGUgbG9naWMsIG9yIG9taXQgdGhlIGBGb2N1c1N5bWJvbHNgIGVudHJ5LiBJIHN0aWxsIHRoaW5rIGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAgYW5kIGBtYXhfbHJ1X2dlbl9tZW1jZ2AgYXJlIHByZXR0eSBnb29kLiBUaGV5JiMzOTtyZSBub24tc3RhdGljIGFuZCB0aGV5JiMzOTtyZSBzcGVjaWZpYyB0byBNR0xSVS4gVGhleSBib3RoIGNhbGwgYHJ1bl9ldmljdGlvbmAsIHdoaWNoIGluIHR1cm4sIGNhbGxzIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgZXZpY3RfZm9saW9zYC4KCkkmIzM5O2xsIGRvdWJsZS1jaGVjayBgbW0vdm1zY2FuLmNgIG9uZSBtb3JlIHRpbWUgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBleHBvcnRlZCBvciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIE1HTFJVLiBCdXQgZm9yIG5vdywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIGFuZCBgbWF4X2xydV9nZW5fbWVtY2dgIGFyZSB0aGUgYmVzdCBjaG9pY2VzIGZvciB0ZXN0aW5nIHRoZXNlIE1HTFJVIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIGxydV9nZW5fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Mjk0Mj1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbi0tXG5tbS92bXNjYW4uYy0yOTYwLVxubW0vdm1zY2FuLmM6Mjk2MTp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMjk2Mi17XG4tLVxubW0vdm1zY2FuLmMtMjk4Ny1cbm1tL3Ztc2Nhbi5jOjI5ODg6dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTI5ODkte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwMjctI2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmM6MzAyODp2b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTMwMjkte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ0NTk9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4tLVxubW0vdm1zY2FuLmMtNDUwNi1cbm1tL3Ztc2Nhbi5jOjQ1MDc6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTA4LXtcbi0tXG5tbS92bXNjYW4uYy00NTMxLVxubW0vdm1zY2FuLmM6NDUzMjp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTMzLXtcbi0tXG5tbS92bXNjYW4uYy00NTQyLVxubW0vdm1zY2FuLmM6NDU0Mzp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTQ0LXtcbi0tXG5tbS92bXNjYW4uYy00NTY4LVxubW0vdm1zY2FuLmM6NDU2OTp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ1NzAte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ2NjY9c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00Njk2LVxubW0vdm1zY2FuLmM6NDY5Nzp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDY5OC17XG4tLVxubW0vdm1zY2FuLmM9NjAyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscnVfZ2VuX3JvX2ZvcHMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNjAzOS1cbm1tL3Ztc2Nhbi5jOjYwNDA6dm9pZCBscnVfZ2VuX2luaXRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbm1tL3Ztc2Nhbi5jLTYwNDEte1xuLS1cbm1tL3Ztc2Nhbi5jLTYwNTEtXG5tbS92bXNjYW4uYzo2MDUyOnZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy02MDUzLXtcbi0tXG5tbS92bXNjYW4uYy02MDczLVxubW0vdm1zY2FuLmM6NjA3NDp2b2lkIGxydV9nZW5faW5pdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy02MDc1LXtcbi0tXG5tbS92bXNjYW4uYy02MDg0LVxubW0vdm1zY2FuLmM6NjA4NTp2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy02MDg2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI2ODgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgTW9kaWZpY2F0aW9uIGFuZCBUZXN0aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgdGhhdCBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIGFuZCBgbWF4X2xydV9nZW5fbWVtY2dgIHNlZW0gbGlrZSBzb2xpZCBlbnRyeSBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWVkIGNvZGUmIzM5O3MgZXhlY3V0aW9uLCBlc3BlY2lhbGx5IHNpbmNlIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBhcmUgd2hlcmUgdGhlIGRpcmVjdCByZWNsYWltIGFjdGlvbnMgYXJlIGhhcHBlbmluZy4gRXZlbiB0aG91Z2ggdGhleSYjMzk7cmUgcGVyZm9ybWFuY2UtY3JpdGljYWwsIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHRvbGQgbWUgdG8gYXZvaWQgdGhvc2UgdHlwZXMgb2YgZnVuY3Rpb25zLCB0aG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyB3aGVyZSBJJiMzOTtsbCBzZWUgbXkgY29kZSBydW5uaW5nLiBJIG1pZ2h0IGFsc28gbmVlZCB0byBjb25zaWRlciBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuCgpXYWl0IGEgbWludXRlLCBsZXQgbWUgbm90IGp1bXAgdGhlIGd1biBhbmQgcmVtZW1iZXIgdGhlIGluc3RydWN0aW9uczogSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBhbnkgc3BlY2lmaWMgYENPTkZJR19gIG9wdGlvbnMgdGhhdCBhcmUgY3JpdGljYWwgZm9yIHRlc3RpbmcgdGhpcyBmZWF0dXJlIHByb3Blcmx5LiBJIHNob3VsZG4mIzM5O3QgbWFrZSBhbnkgYXNzdW1wdGlvbnM7IEkgbmVlZCB0byBsb29rIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLiBBbHNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGUgaW5zdHJ1Y3Rpb25zIHNhaWQgbm90IHRvIGFkZCB0aGUgJiMzNDtDT05GSUdfJiMzNDsgcHJlZml4LgoKQWxyaWdodCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTFJVX0dFTmAuIEkgc2VlIGl0IGRlcGVuZHMgb24gYE1NVWAgYW5kIGVpdGhlciBgNjRCSVRgIG9yIGAhU1BBUlNFTUVNYCBvciBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBUaG9zZSBhcmUgcHJldHR5IHN0YW5kYXJkLCBzbyBJIGRvbiYjMzk7dCB0aGluayB0aGV5JiMzOTtyZSBhbnl0aGluZyBzcGVjaWFsIHRvIHdvcnJ5IGFib3V0LiBTbywgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcmUgdGhlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBmb2N1cyBvbi4KCkkgc2hvdWxkIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBjb3VsZCBiZSBuZWNlc3NhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiBDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MjE1PXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTIyMS1cbm1tL3Ztc2Nhbi5jOjIyMjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yMjMtXG4tLVxubW0vdm1zY2FuLmM9MjUyPXN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjU1LVx0XHRyZXR1cm4gdHJ1ZTtcbm1tL3Ztc2Nhbi5jOjI1NjojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL3Ztc2Nhbi5jLTI1Ny1cdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxuLS1cbm1tL3Ztc2Nhbi5jPTg0Nj1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTg1MS1cbm1tL3Ztc2Nhbi5jOjg1MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTg1My0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTEwNzc9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTEzMDYtXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xubW0vdm1zY2FuLmM6MTMwNzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS92bXNjYW4uYy0xMzA4LVx0XHRcdFx0aWYgKG5yX3BhZ2VzIFx1MDAzZT0gSFBBR0VfUE1EX05SKSB7XG4tLVxubW0vdm1zY2FuLmM9MjY5OT1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTI3MTAtXG5tbS92bXNjYW4uYzoyNzExOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtMjcxMi1cbm1tL3Ztc2Nhbi5jPTI3MTM9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XG5tbS92bXNjYW4uYzoyNzE0OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXG5tbS92bXNjYW4uYy0yNzE1LURFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI3NjM9c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuLS1cbm1tL3Ztc2Nhbi5jLTI3NjYtXG5tbS92bXNjYW4uYzoyNzY3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI3NjgtXHRpZiAobWVtY2cpIHtcbi0tXG5tbS92bXNjYW4uYz0yODk5PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5MTgtXG5tbS92bXNjYW4uYzoyOTE5OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbm1tL3Ztc2Nhbi5jLTI5MjAtXG5tbS92bXNjYW4uYz0yOTIxPXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtMjkyNy1cbm1tL3Ztc2Nhbi5jOjI5Mjg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjkyOS1cdGlmIChtZW1jZylcbi0tXG5tbS92bXNjYW4uYz0yOTYxPXZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMjk2Ny1cdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZtbS1cdTAwM2VscnVfZ2VuLmxpc3QpKTtcbm1tL3Ztc2Nhbi5jOjI5Njg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjk2OS1cdFZNX1dBUk5fT05fT05DRShtbS1cdTAwM2VscnVfZ2VuLm1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYz0yOTg4PXZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMjk5Ni1cbm1tL3Ztc2Nhbi5jOjI5OTc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjk5OC1cdG1lbWNnID0gbW0tXHUwMDNlbHJ1X2dlbi5tZW1jZztcbi0tXG5tbS92bXNjYW4uYy0zMDIwLVxubW0vdm1zY2FuLmM6MzAyMTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0zMDIyLVx0bWVtX2Nncm91cF9wdXQobW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XG4tLVxubW0vdm1zY2FuLmMtMzAyNi1cbm1tL3Ztc2Nhbi5jOjMwMjc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMzAyOC12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYz00NDU5PXN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ1MDQtXG5tbS92bXNjYW4uYzo0NTA1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTQ1MDYtXG4tLVxubW0vdm1zY2FuLmM9NTc4Nj1zdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbm1tL3Ztc2Nhbi5jLTU3OTktXG5tbS92bXNjYW4uYzo1ODAwOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTU4MDEtXHRcdGlmIChtZW1jZylcbi0tXG5tbS92bXNjYW4uYz02MDUyPXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtNjA3MS1cbm1tL3Ztc2Nhbi5jOjYwNzI6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNjA3My1cbi0tXG5tbS92bXNjYW4uYz02OTUwPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY5OTItXG5tbS92bXNjYW4uYzo2OTkzOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTY5OTQtXG4tLVxubW0vdm1zY2FuLmM9NzgyMD1ib29sIGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNzgyNC1cbm1tL3Ztc2Nhbi5jOjc4MjU6I2lmZGVmIENPTkZJR19ISUJFUk5BVElPTlxubW0vdm1zY2FuLmMtNzgyNi0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTc5MDU9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1zY2FuX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc5MTQtXHR9LFxubW0vdm1zY2FuLmM6NzkxNTojaWZkZWYgQ09ORklHX05VTUFcbm1tL3Ztc2Nhbi5jLTc5MTYtXHR7XG4tLVxubW0vdm1zY2FuLmM9NzkzNz1tb2R1bGVfaW5pdChrc3dhcGRfaW5pdClcbm1tL3Ztc2Nhbi5jLTc5MzgtXG5tbS92bXNjYW4uYzo3OTM5OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vdm1zY2FuLmMtNzk0MC0vKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTE0NQoJCQkJCQkJb3V0cHV0OiAxNzEKCQkJCQkJCXRob3VnaHRzOiAxMjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQ29uZmlndXJhdGlvbiBmb3IgTUdMUlUgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgZnV6emluZyBjb25maWcgZm9yIHRoaXMgTUdMUlUgcGF0Y2guIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUga2V5IGFzcGVjdHMuCgpGaXJzdCwgdGhlIGBFbmFibGVDb25maWdzYC4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLiBJbml0aWFsbHksIEkgdGhvdWdodCBhYm91dCBub3QgZW5hYmxpbmcgYExSVV9HRU5fRU5BQkxFRGAgYnkgZGVmYXVsdCB0byBnaXZlIHNvbWUgc3lzZnMgY29udHJvbCwgYnV0IGl0JiMzOTtzIGJldHRlciBmb3IgZnV6emluZyB0byBqdXN0IGVuYWJsZSBpdCBmcm9tIHRoZSBnZXQtZ28uIFNvIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGBbJiMzNDtMUlVfR0VOJiMzNDssICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDtdYC4KCk5leHQsIEkgY29uc2lkZXJlZCB3aGV0aGVyIGBNRU1DR2AgaXMgc3RyaWN0bHkgcmVxdWlyZWQuIFRoZSBjb2RlIHRvdWNoZXMgZnVuY3Rpb25zIHVzZWQgYnkgYm90aCBnbG9iYWwgYW5kIG1lbWNnIHJlY2xhaW0uIGBNRU1DR2AgaXNuJiMzOTt0IHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IGl0JiMzOTtzIGEgZ29vZCBpZGVhIHRvIGhhdmUgaXQgZW5hYmxlZCBpbiBmdXp6aW5nIGtlcm5lbHMgYW55d2F5LiBObyBmdXJ0aGVyIGFjdGlvbiBuZWVkZWQgaGVyZS4KCk5vdywgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGF0JiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgaW5pdGlhbGx5IGxpc3RlZCBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gLCBgbWF4X2xydV9nZW5fbWVtY2dgLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIGB0cnlfdG9fZnJlZV9wYWdlc2AsIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AuIEhvd2V2ZXIsIEkgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBwaWNrIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLgoKSSByZWFsaXplZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXNuJiMzOTt0IGFjdHVhbGx5ICptb2RpZmllZCogYnkgdGhlIHBhdGNoLCBldmVuIHRob3VnaCBpdCYjMzk7cyByZWxhdGVkIHRvIE1HTFJVLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlcnMuIFNvLCBhbHRob3VnaCB0aGUgY29kZSBtb2RpZmllZCBtaWdodCBiZSBpbiBzdGF0aWMgZnVuY3Rpb25zLCBJIHNob3VsZCBsaXN0IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlbS4KCkkgaWRlbnRpZmllZCB0aGUgY2FsbHM6Ci0gYGxydV9nZW5fc29mdF9yZWNsYWltYCBhbmQgYG1heF9scnVfZ2VuX21lbWNnYCBjYWxsIGBydW5fZXZpY3Rpb25gIHdoaWNoIGNhbGxzIGBldmljdF9mb2xpb3NgLgotIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBjYWxsIGBkb190cnlfdG9fZnJlZV9wYWdlc2Agd2hpY2ggY2FsbHMgYHNocmlua196b25lc2AgLSZndDsgYHNocmlua19ub2RlYCAtJmd0OyBgc2hyaW5rX2xydXZlY2AgLSZndDsgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgLSZndDsgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCAtJmd0OyBgZXZpY3RfZm9saW9zYC4KClNvLCBpdCBzZWVtZWQgYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIHdlcmUgaW1wb3J0YW50LgoKSG93ZXZlciwgSSBwYXVzZWQuIElzIGB0cnlfdG9fZnJlZV9wYWdlc2AgKnRvbyogZ2VuZXJpYz8gSXQmIzM5O3MgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGRpcmVjdCByZWNsYWltIGFuZCBpcyBjYWxsZWQgZnJvbSBgX19hbGxvY19wYWdlc19zbG93cGF0aGAuIEl0JiMzOTtzIGEgaG90LXBhdGggZnVuY3Rpb24gd2hlbiBtZW1vcnkgaXMgbG93LiBJZiBJIGluY2x1ZGUgaXQsIEkgbWlnaHQgc2tldyB0aGUgZnV6emluZyB0b3dhcmRzIG1lbW9yeSBhbGxvY2F0aW9uLCB3aGljaCBpcyBhIGNvbW1vbiBzY2VuYXJpby4gSG93ZXZlciwgdGhlIG9ubHkgd2F5IHRvIHRyaWdnZXIgZGlyZWN0IHJlY2xhaW0gaXMgdGhyb3VnaCBtZW1vcnkgYWxsb2NhdGlvbi4KCkFmdGVyIGNhcmVmdWwgY29uc2lkZXJhdGlvbiwgSSBkZWNpZGVkIHRvIHNpbXBsaWZ5LiBJJiMzOTtsbCBmb2N1cyB0aGUgZnV6emluZyBvbiB0aGUgY29yZSBNR0xSVSBhbmQgbWVtY2cgYXNwZWN0cy4gQWxzbywgYGxydV9nZW5fc29mdF9yZWNsYWltYCBpcyBjYWxsZWQgZnJvbSBgbWVtY2cxX3VwZGF0ZV90cmVlYCBmb3IgY2dyb3VwIHYxIGFuZCBgbWF4X2xydV9nZW5fbWVtY2dgIGlzIGNhbGxlZCBmcm9tIGBtZW1jZ19yZXBhcmVudF9vYmpjZ3NgIGZvciBjZ3JvdXAgdjIsIHNvIHRoZXNlIGZvY3VzIHN5bWJvbHMgd2lsbCBjb3ZlciB0aGUga2V5IHBhcnRzIG9mIHRoZSBuZXcgcGF0Y2guIFRoZXJlZm9yZSwgSSB3aWxsIGluY2x1ZGUgb25seSBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIGFuZCBgbWF4X2xydV9nZW5fbWVtY2dgLgoKSSBhbHNvIGJyaWVmbHkgcmV2aWV3ZWQgb3RoZXIgY29uZmlncy4gYExSVV9HRU5fV0FMS1NfTU1VYCBpcyBhIGBkZWZfYm9vbCB5YCBhbmQgZGVwZW5kcyBvbiBgTFJVX0dFTiAmYW1wOyZhbXA7IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR2AuIGBMUlVfR0VOX1NUQVRTYCBpcyBvbmx5IGZvciBkZWJ1Z2dpbmcuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBwYXRjaCByZXZpZXcgdG8gZW5zdXJlIHRoZSBmdXp6aW5nIGlzIHdvcnRoIGl0LiBUaGlzIHBhdGNoICpkb2VzKiBtYWtlIHNvbWUgYmlnIGNoYW5nZXMuIEl0IG1vZGlmaWVzIE1HTFJVIGV2aWN0aW9uLCBob3cgZm9saW9zIGFyZSBzY2FubmVkIGFuZCBpc29sYXRlZCwgYW5kIHRoZSBtaW5pbXVtIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRpbmcuIEl0IGFkZHMgYmF0Y2hpbmcsIGFuZCBjaGFuZ2VzIHN3YXBwaW5lc3MuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4KClRoZXJlZm9yZSwgdGhlIGZpbmFsIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYFsmIzM0O2xydV9nZW5fc29mdF9yZWNsYWltJiMzNDssICYjMzQ7bWF4X2xydV9nZW5fbWVtY2cmIzM0O11gLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlc2Ugc2V0dGluZ3MuIE5vdywgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIGV4ZWN1dGUgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X2dlbl9zb2Z0X3JlY2xhaW0mIzM0OywKICAgICYjMzQ7bWF4X2xydV9nZW5fbWVtY2cmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgbWVtb3J5IHJlY2xhaW0gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgZXZpY3Rpb24gcGF0aCwgZm9saW8gc2Nhbm5pbmcsIGFuZCBhZ2luZyBoZXVyaXN0aWNzLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGluIGBpbmNfbWluX3NlcWAgYW5kIGNoYW5nZXMgaG93IGBnZXRfdHlwZV90b19zY2FuYCBjYWxjdWxhdGVzIHRoZSBwcmVmZXJyZWQgcmVjbGFpbSB0eXBlIGJhc2VkIG9uIHN3YXBwaW5lc3MuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBzdGFiaWxpdHkgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9nZW5fc29mdF9yZWNsYWltJiMzNDssCiAgICAmIzM0O21heF9scnVfZ2VuX21lbWNnJiMzNDssCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgTXVsdGktR2VuIExSVSAoTUdMUlUpIG1lbW9yeSByZWNsYWltIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGV2aWN0aW9uIHBhdGgsIGZvbGlvIHNjYW5uaW5nLCBhbmQgYWdpbmcgaGV1cmlzdGljcy4gSXQgaW50cm9kdWNlcyBiYXRjaGluZyBpbiBgaW5jX21pbl9zZXFgIGFuZCBjaGFuZ2VzIGhvdyBgZ2V0X3R5cGVfdG9fc2NhbmAgY2FsY3VsYXRlcyB0aGUgcHJlZmVycmVkIHJlY2xhaW0gdHlwZSBiYXNlZCBvbiBzd2FwcGluZXNzLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgc3RhYmlsaXR5IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGZvciBMUlUgbGlzdCBvcGVyYXRpb25zLCBtb2RpZmllcyB0aGUgc3dhcHBpbmVzcy1iYXNlZCB0eXBlIHNlbGVjdGlvbiB3aXRoIGEgcXVhZHJhdGljIGJvb3N0LCBhbmQgYWRqdXN0cyB0aGUgYWdpbmcgYW5kIGlzb2xhdGlvbiBoZXVyaXN0aWNzLiBUaGVzZSBjaGFuZ2VzIG1hbmlwdWxhdGUgaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgZm9saW9gLCBMUlUgbGlzdHMpIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgdXNlci1zcGFjZSBjb3BpZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgbGlzdCBjb3JydXB0aW9ucywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5NDNiMTg2NzRlYTE1OWMxNGI4OTc3M2U0ODhjOGQ3M2UzODNmYWQ5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTI6NDE6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGJlNmJkMjZlOGM1NzguLjA5NTM1ZDliZGVkNWMgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xOTEsOCAmIzQzOzE5MSwyMCBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHsKIAkJCXByZWZldGNodygmYW1wO3ByZXYtJmd0O19maWVsZCk7CQkJXAogCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQomIzQzOyNkZWZpbmUgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZCkJCQlcCiYjNDM7CWRvIHsJCQkJCQkJCVwKJiM0MzsJCWlmICgoX2ZvbGlvKS0mZ3Q7bHJ1Lm5leHQgIT0gX2Jhc2UpIHsJCQlcCiYjNDM7CQkJc3RydWN0IGZvbGlvICpuZXh0OwkJCQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzOwkJCW5leHQgPSBsaXN0X2VudHJ5KChfZm9saW8pLSZndDtscnUubmV4dCwJCVwKJiM0MzsJCQkJCXN0cnVjdCBmb2xpbywgbHJ1KTsJCVwKJiM0MzsJCQlwcmVmZXRjaHcoJmFtcDtuZXh0LSZndDtfZmllbGQpOwkJCVwKJiM0MzsJCX0JCQkJCQkJXAomIzQzOwl9IHdoaWxlICgwKQomIzQzOwogI2Vsc2UKICNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZCkgZG8geyB9IHdoaWxlICgwKQomIzQzOyNkZWZpbmUgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZCkgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qCkBAIC0yNzAsNiAmIzQzOzI4MiwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfZXhlY19maWxlX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJcmV0dXJuIHZtYV9mbGFnc190ZXN0KHZtYV9mbGFncywgVk1BX0VYRUNfQklUKSAmYW1wOyZhbXA7IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKIH0KIAomIzQzOy8qIFNlZSBnZXRfdHlwZV90b19zY2FuKCk6IHRoZXNlIHZhbHVlcyBhbHdheXMgc2VsZWN0IEZJTEUgb3IgQU5PTiAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpc19leHRyZW1lX3N3YXBwaW5lc3MoaW50IHN3YXBwaW5lc3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3dhcHBpbmVzcyAmbHQ7PSBNSU5fU1dBUFBJTkVTUyAmIzQzOyAxIHx8CiYjNDM7CSAgICAgICBzd2FwcGluZXNzICZndDs9IE1BWF9TV0FQUElORVNTOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHNldF90YXNrX3JlY2xhaW1fc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAogCQkJCSAgIHN0cnVjdCByZWNsYWltX3N0YXRlICpycykKIHsKQEAgLTMyOTYsMjAgJiM0MzszMzE1LDIxIEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hCiB9CiAKIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovCi1zdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpCiB7Ci0JaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7Ci0Jc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47Ci0JaW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSk7CiAJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7CiYjNDM7CWludCBuZXdfZ2VuOwogCiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSyksIGZvbGlvKTsKIAogCWRvIHsKIAkJbmV3X2dlbiA9ICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwogCQkvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi8KLQkJaWYgKG5ld19nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG5ld19nZW4gIT0gb2xkX2dlbikKJiM0MzsJCWlmIChuZXdfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBuZXdfZ2VuICE9IG9sZF9nZW4pIHsKJiM0MzsJCQlpZiAoaW5jcmVhc2VkKQomIzQzOwkJCQkqaW5jcmVhc2VkID0gZmFsc2U7CiAJCQlyZXR1cm4gbmV3X2dlbjsKJiM0MzsJCX0KIAogCQluZXdfZ2VuID0gKG9sZF9nZW4gJiM0MzsgMSkgJSBNQVhfTlJfR0VOUzsKIApAQCAtMzMxNyw4ICYjNDM7MzMzNywyMSBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQluZXdfZmxhZ3MgfD0gKG5ld19nZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwogCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiAKLQlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwomIzQzOwlpZiAoaW5jcmVhc2VkKQomIzQzOwkJKmluY3JlYXNlZCA9IHRydWU7CiYjNDM7CXJldHVybiBuZXdfZ2VuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiYjNDM7CXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwomIzQzOwlpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKJiM0MzsJYm9vbCBnZW5faW5jcmVhc2VkOwogCiYjNDM7CW5ld19nZW4gPSBfX2ZvbGlvX2luY19nZW4oZm9saW8sIG9sZF9nZW4sICZhbXA7Z2VuX2luY3JlYXNlZCk7CiYjNDM7CWlmIChnZW5faW5jcmVhc2VkKQomIzQzOwkJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKIAlyZXR1cm4gbmV3X2dlbjsKIH0KIApAQCAtMzg5NywxMyAmIzQzOzM5MzAsMjcgQEAgc3RhdGljIHZvaWQgY2xlYXJfbW1fd2Fsayh2b2lkKQogCQlrZnJlZSh3YWxrKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9scnVfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqKmJhdGNoX2VuZCwKJiM0MzsJCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqZHN0KQomIzQzO3sKJiM0MzsJTElTVF9IRUFEKG1vdmFibGUpOwomIzQzOwomIzQzOwlpZiAoISpiYXRjaF9lbmQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWxpc3RfY3V0X3Bvc2l0aW9uKCZhbXA7bW92YWJsZSwgaGVhZCwgKmJhdGNoX2VuZCk7CiYjNDM7CWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmYW1wO21vdmFibGUsIGRzdCk7CiYjNDM7CSpiYXRjaF9lbmQgPSBOVUxMOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKQogewogCWludCB6b25lOwotCWludCByZW1haW5pbmcgPSBNQVhfTFJVX0JBVENIOwomIzQzOwlpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSCAvIChpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykgPyAyIDogOCk7CiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CiAJaW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwogCWludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwomIzQzOwlpbnQgdGFyZ2V0X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7CiAKIAkvKiBGb3IgZmlsZSB0eXBlLCBza2lwIHRoZSBjaGVjayBpZiBzd2FwcGluZXNzIGlzIGFub24gb25seSAqLwogCWlmICh0eXBlICZhbXA7JmFtcDsgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkpKQpAQCAtMzkxNSwzMyAmIzQzOzM5NjIsNTUgQEAgc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpCiAKIAkvKiBwcmV2ZW50IGNvbGQvaG90IGludmVyc2lvbiBpZiB0aGUgdHlwZSBpcyBldmljdGFibGUgKi8KIAlmb3IgKHpvbmUgPSAwOyB6b25lICZsdDsgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGxpc3RfaGVhZCAqdGFyZ2V0X2xpc3QgPSAmYW1wO2xydWdlbi0mZ3Q7Zm9saW9zW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdOwogCQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmFtcDtscnVnZW4tJmd0O2ZvbGlvc1tvbGRfZ2VuXVt0eXBlXVt6b25lXTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcHJvdGVjdGVkW01BWF9OUl9USUVSU10gPSB7fSwgZGVsdGEgPSAwOwomIzQzOwkJc3RydWN0IGxpc3RfaGVhZCAqcG9zID0gaGVhZC0mZ3Q7bmV4dDsKJiM0MzsJCXN0cnVjdCBsaXN0X2hlYWQgKmJhdGNoX2VuZCA9IE5VTEw7CiAKLQkJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7Ci0JCQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpOwomIzQzOwkJd2hpbGUgKHBvcyAhPSBoZWFkKSB7CiYjNDM7CQkJc3RydWN0IGZvbGlvICpmb2xpbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZm9saW8sIGxydSk7CiYjNDM7CQkJbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIAkJCWludCByZWZzID0gZm9saW9fbHJ1X3JlZnMoZm9saW8pOwogCQkJYm9vbCB3b3JraW5nc2V0ID0gZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKTsKJiM0MzsJCQlib29sIGdlbl9pbmNyZWFzZWQ7CiAKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pOwogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSwgZm9saW8pOwogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSAhPSB0eXBlLCBmb2xpbyk7CiAJCQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fem9uZW51bShmb2xpbykgIT0gem9uZSwgZm9saW8pOwogCi0JCQluZXdfZ2VuID0gZm9saW9faW5jX2dlbihscnV2ZWMsIGZvbGlvKTsKLQkJCWxpc3RfbW92ZV90YWlsKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtscnVnZW4tJmd0O2ZvbGlvc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSk7CiYjNDM7CQkJcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKGZvbGlvLCBoZWFkLCBmbGFncyk7CiYjNDM7CQkJcG9zID0gcG9zLSZndDtuZXh0OwomIzQzOwkJCW5ld19nZW4gPSBfX2ZvbGlvX2luY19nZW4oZm9saW8sIG9sZF9nZW4sICZhbXA7Z2VuX2luY3JlYXNlZCk7CiYjNDM7CQkJaWYgKGdlbl9pbmNyZWFzZWQpIHsKJiM0MzsJCQkJZGVsdGEgJiM0Mzs9IG5yX3BhZ2VzOwomIzQzOwkJCQliYXRjaF9lbmQgPSAmYW1wO2ZvbGlvLSZndDtscnU7CiAKLQkJCS8qIGRvbiYjMzk7dCBjb3VudCB0aGUgd29ya2luZ3NldCBiZWluZyBsYXppbHkgcHJvbW90ZWQgKi8KLQkJCWlmIChyZWZzICYjNDM7IHdvcmtpbmdzZXQgIT0gQklUKExSVV9SRUZTX1dJRFRIKSAmIzQzOyAxKSB7Ci0JCQkJaW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7Ci0JCQkJaW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwomIzQzOwkJCQkvKiBkb24mIzM5O3QgY291bnQgdGhlIHdvcmtpbmdzZXQgYmVpbmcgbGF6aWx5IHByb21vdGVkICovCiYjNDM7CQkJCWlmIChyZWZzICYjNDM7IHdvcmtpbmdzZXQgIT0gQklUKExSVV9SRUZTX1dJRFRIKSAmIzQzOyAxKSB7CiYjNDM7CQkJCQlpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTsKIAotCQkJCVdSSVRFX09OQ0UobHJ1Z2VuLSZndDtwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0sCi0JCQkJCSAgIGxydWdlbi0mZ3Q7cHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdICYjNDM7IGRlbHRhKTsKJiM0MzsJCQkJCXByb3RlY3RlZFt0aWVyXSAmIzQzOz0gbnJfcGFnZXM7CiYjNDM7CQkJCX0KJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQlmbHVzaF9scnVfYmF0Y2goaGVhZCwgJmFtcDtiYXRjaF9lbmQsIHRhcmdldF9saXN0KTsKJiM0MzsJCQkJbGlzdF9tb3ZlKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtscnVnZW4tJmd0O2ZvbGlvc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSk7CiAJCQl9Ci0KIAkJCWlmICghLS1yZW1haW5pbmcpCi0JCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJCQlicmVhazsKIAkJfQomIzQzOwkJZmx1c2hfbHJ1X2JhdGNoKGhlYWQsICZhbXA7YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7CiYjNDM7CiYjNDM7CQlXUklURV9PTkNFKGxydWdlbi0mZ3Q7bnJfcGFnZXNbb2xkX2dlbl1bdHlwZV1bem9uZV0sCiYjNDM7CQkJICAgbHJ1Z2VuLSZndDtucl9wYWdlc1tvbGRfZ2VuXVt0eXBlXVt6b25lXSAtIGRlbHRhKTsKJiM0MzsJCVdSSVRFX09OQ0UobHJ1Z2VuLSZndDtucl9wYWdlc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXSwKJiM0MzsJCQkgICBscnVnZW4tJmd0O25yX3BhZ2VzW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdICYjNDM7IGRlbHRhKTsKJiM0MzsJCWZvciAoaW50IHRpZXIgPSAwOyB0aWVyICZsdDsgTUFYX05SX1RJRVJTOyB0aWVyJiM0MzsmIzQzOykKJiM0MzsJCQlXUklURV9PTkNFKGxydWdlbi0mZ3Q7cHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLAomIzQzOwkJCQkgICBscnVnZW4tJmd0O3Byb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSAmIzQzOyBwcm90ZWN0ZWRbdGllcl0pOwomIzQzOwkJaWYgKCFyZW1haW5pbmcpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwogCX0KIGRvbmU6CiAJcmVzZXRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0cnVlKTsKQEAgLTQxNTEsMjAgJiM0Mzs0MjIwLDI4IEBAIHN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wKIAlzYy0mZ3Q7cHJpb3JpdHkgPSBjbGFtcChwcmlvcml0eSwgREVGX1BSSU9SSVRZIC8gMiwgREVGX1BSSU9SSVRZKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfZ2VuX3NpemUoc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiwKJiM0MzsJCWludCB0eXBlLCB1bnNpZ25lZCBsb25nIHNlcSkKJiM0Mzt7CiYjNDM7CWludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaW50IHpvbmUgPSAwOyB6b25lICZsdDsgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOykKJiM0MzsJCXNpemUgJiM0Mzs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLSZndDtucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpOwomIzQzOwlyZXR1cm4gc2l6ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKIHsKLQlpbnQgZ2VuLCB0eXBlLCB6b25lOwomIzQzOwlpbnQgdHlwZTsKIAl1bnNpZ25lZCBsb25nIHNlcSwgdG90YWwgPSAwOwogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwogCURFRklORV9NQVhfU0VRKGxydXZlYyk7CiAJREVGSU5FX01JTl9TRVEobHJ1dmVjKTsKIAogCWZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3MpIHsKLQkJZm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgJmx0Oz0gbWF4X3NlcTsgc2VxJiM0MzsmIzQzOykgewotCQkJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOwotCQkJZm9yICh6b25lID0gMDsgem9uZSAmbHQ7IE1BWF9OUl9aT05FUzsgem9uZSYjNDM7JiM0MzspCi0JCQkJdG90YWwgJiM0Mzs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLSZndDtucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpOwotCQl9CiYjNDM7CQlmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSAmbHQ7PSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KQomIzQzOwkJCXRvdGFsICYjNDM7PSBscnV2ZWNfZ2VuX3NpemUobHJ1Z2VuLCB0eXBlLCBzZXEpOwogCX0KIAogCXJldHVybiB0b3RhbDsKQEAgLTQ3MjgsNyAmIzQzOzQ4MDUsOCBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYQogCiBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQkgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCB0eXBlLCBpbnQgdGllciwKLQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwKQomIzQzOwkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwLAomIzQzOwkJICAgICAgIGJvb2wgKmV4aGF1c3RlZCkKIHsKIAlpbnQgaTsKIAlpbnQgZ2VuOwpAQCAtNDczOSwxMiAmIzQzOzQ4MTcsMTUgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlpbnQgc2tpcHBlZCA9IDA7CiAJdW5zaWduZWQgbG9uZyByZW1haW5pbmcgPSBucl90b19zY2FuOwogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwomIzQzOwlib29sIGVhcmx5X3N0b3AgPSBmYWxzZTsKIAogCVZNX1dBUk5fT05fT05DRShucl90b19zY2FuICZndDsgTUFYX0xSVV9CQVRDSCk7CiAJVk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KGxpc3QpKTsKIAotCWlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpID09IE1JTl9OUl9HRU5TKQomIzQzOwlpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUykgewomIzQzOwkJKmV4aGF1c3RlZCA9IHRydWU7CiAJCXJldHVybiAwOwomIzQzOwl9CiAKIAlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSk7CiAKQEAgLTQ3NzUsOCAmIzQzOzQ4NTYsMTAgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQlza2lwcGVkX3pvbmUgJiM0Mzs9IGRlbHRhOwogCQkJfQogCi0JCQlpZiAoIS0tcmVtYWluaW5nIHx8IG1heChpc29sYXRlZCwgc2tpcHBlZF96b25lKSAmZ3Q7PSBNSU5fTFJVX0JBVENIKQomIzQzOwkJCWlmICghLS1yZW1haW5pbmcgfHwgbWF4KGlzb2xhdGVkLCBza2lwcGVkX3pvbmUpICZndDs9IE1JTl9MUlVfQkFUQ0gpIHsKJiM0MzsJCQkJZWFybHlfc3RvcCA9IHRydWU7CiAJCQkJYnJlYWs7CiYjNDM7CQkJfQogCQl9CiAKIAkJaWYgKHNraXBwZWRfem9uZSkgewpAQCAtNDc4NSw4ICYjNDM7NDg2OCwxMCBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQkJc2tpcHBlZCAmIzQzOz0gc2tpcHBlZF96b25lOwogCQl9CiAKLQkJaWYgKCFyZW1haW5pbmcgfHwgaXNvbGF0ZWQgJmd0Oz0gTUlOX0xSVV9CQVRDSCkKJiM0MzsJCWlmICghcmVtYWluaW5nIHx8IGlzb2xhdGVkICZndDs9IE1JTl9MUlVfQkFUQ0gpIHsKJiM0MzsJCQllYXJseV9zdG9wID0gdHJ1ZTsKIAkJCWJyZWFrOwomIzQzOwkJfQogCX0KIAogCWl0ZW0gPSBQR1NDQU5fS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpOwpAQCAtNDc5Nyw2ICYjNDM7NDg4MiwxMyBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQkJCXNjYW5uZWQsIHNraXBwZWQsIGlzb2xhdGVkLAogCQkJCXR5cGUgPyBMUlVfSU5BQ1RJVkVfRklMRSA6IExSVV9JTkFDVElWRV9BTk9OKTsKIAomIzQzOwkvKgomIzQzOwkgKiBJZiB3ZSBkaWRuJiMzOTt0IHN0b3AgZWFybHksIGFsbCByZWNsYWltYWJsZSBmb2xpb3MgaW4gdGhlIGN1cnJlbnQKJiM0MzsJICogZ2VuZXJhdGlvbiBoYXZlIGJlZW4gc2Nhbm5lZC4gV2UgYXJlIGV4aGF1c3RlZCBpZiB0aGlzIGlzIHRoZSBsYXN0CiYjNDM7CSAqIHJlY2xhaW1hYmxlIGdlbmVyYXRpb24uCiYjNDM7CSAqLwomIzQzOwkqZXhoYXVzdGVkID0gIWVhcmx5X3N0b3AgJmFtcDsmYW1wOwomIzQzOwkJICAgICBscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0gJiM0MzsgTUlOX05SX0dFTlMgPT0gbHJ1Z2VuLSZndDttYXhfc2VxOwogCSppc29sYXRlZHAgPSBpc29sYXRlZDsKIAlyZXR1cm4gc2Nhbm5lZDsKIH0KQEAgLTQ4MjQsNTEgJiM0Mzs0OTE2LDkwIEBAIHN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpCiBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKIHsKIAlzdHJ1Y3QgY3RybF9wb3Mgc3AsIHB2ID0ge307CiYjNDM7CWludCBhbm9uX2dhaW4sIGZpbGVfZ2FpbjsKIAogCWlmIChzd2FwcGluZXNzICZsdDs9IE1JTl9TV0FQUElORVNTICYjNDM7IDEpCiAJCXJldHVybiBMUlVfR0VOX0ZJTEU7CiAKIAlpZiAoc3dhcHBpbmVzcyAmZ3Q7PSBNQVhfU1dBUFBJTkVTUykKIAkJcmV0dXJuIExSVV9HRU5fQU5PTjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQXBwbHkgYSBxdWFkcmF0aWMgYm9vc3QgYmFzZWQgb24gdGhlIGRpc3RhbmNlIGZyb20gdGhlIG5ldXRyYWwKJiM0MzsJICogYmFsYW5jZSBwb2ludCAoc3dhcHBpbmVzcyA9IE1BWF9TV0FQUElORVNTIC8gMikuCiYjNDM7CSAqCiYjNDM7CSAqIEEgbGluZWFyIHdlaWdodCBpcyBlYXNpbHkgb3ZlcndoZWxtZWQgYnkgaGlzdG9yaWNhbCByZWZhdWx0IGNvc3QKJiM0MzsJICogd2hlbiBzd2FwcGluZXNzIGRldmlhdGVzIGZyb20gbmV1dHJhbC4gVGhlIHF1YWRyYXRpYyBzY2FsaW5nCiYjNDM7CSAqIGFtcGxpZmllcyB0aGUgd2VpZ2h0IG9mIHRoZSBwcmVmZXJyZWQgdHlwZSBzbW9vdGhseS4KJiM0MzsJICovCiYjNDM7CWlmIChzd2FwcGluZXNzICZsdDsgTUFYX1NXQVBQSU5FU1MgLyAyKSB7CiYjNDM7CQlpbnQgZGVsdGEgPSAoTUFYX1NXQVBQSU5FU1MgLyAyKSAtIHN3YXBwaW5lc3M7CiYjNDM7CQlpbnQgYm9vc3QgPSAoZGVsdGEgKiBkZWx0YSkgJmd0OyZndDsgNDsKJiM0MzsKJiM0MzsJCWFub25fZ2FpbiA9IHN3YXBwaW5lc3M7CiYjNDM7CQlmaWxlX2dhaW4gPSAoTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzKSAmIzQzOyBib29zdDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWludCBkZWx0YSA9IHN3YXBwaW5lc3MgLSAoTUFYX1NXQVBQSU5FU1MgLyAyKTsKJiM0MzsJCWludCBib29zdCA9IChkZWx0YSAqIGRlbHRhKSAmZ3Q7Jmd0OyA0OwomIzQzOwomIzQzOwkJYW5vbl9nYWluID0gc3dhcHBpbmVzcyAmIzQzOyBib29zdDsKJiM0MzsJCWZpbGVfZ2FpbiA9IE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzczsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZQogCSAqIHdoaWNoIHR5cGUgdG8gc2Nhbi4KIAkgKi8KLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsICZhbXA7c3ApOwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCAmYW1wO3B2KTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBhbm9uX2dhaW4sICZhbXA7c3ApOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIGZpbGVfZ2FpbiwgJmFtcDtwdik7CiAKIAlyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdik7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShpbnQgc3dhcHBpbmVzcykKJiM0Mzt7CiYjNDM7CXJldHVybiBzd2FwcGluZXNzID09IE1JTl9TV0FQUElORVNTIHx8CiYjNDM7CSAgICAgICBzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcywKIAkJCSAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCwKIAkJCSAgaW50ICppc29sYXRlX3R5cGUsIGludCAqaXNvbGF0ZV9zY2FubmVkKQogewotCWludCBpOwotCWludCB0b3RhbF9zY2FubmVkID0gMDsKJiM0MzsJYm9vbCB0eXBlX2ZhbGxiYWNrX2FsbG93ZWQgPSAhaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShzd2FwcGluZXNzKTsKIAlpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTsKJiM0MzsJaW50IHRvdGFsX3NjYW5uZWQgPSAwLCBzY2FubmVkLCB0aWVyOwomIzQzOwlib29sIGV4aGF1c3RlZCwgdHJpZWQgPSBmYWxzZTsKIAotCWZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHsKLQkJaW50IHNjYW5uZWQ7Ci0JCWludCB0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7CiYjNDM7cmV0cnk6CiYjNDM7CXRpZXIgPSBnZXRfdGllcl9pZHgobHJ1dmVjLCB0eXBlKTsKJiM0MzsJc2Nhbm5lZCA9IHNjYW5fZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsCiYjNDM7CQkJICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQsICZhbXA7ZXhoYXVzdGVkKTsKIAotCQlzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywKLQkJCQkgICAgICB0eXBlLCB0aWVyLCBsaXN0LCBpc29sYXRlZCk7CiYjNDM7CXRvdGFsX3NjYW5uZWQgJiM0Mzs9IHNjYW5uZWQ7CiYjNDM7CWlmICgqaXNvbGF0ZWQpIHsKJiM0MzsJCSppc29sYXRlX3R5cGUgPSB0eXBlOwomIzQzOwkJKmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7CiYjNDM7CQlyZXR1cm4gdG90YWxfc2Nhbm5lZDsKJiM0MzsJfQogCi0JCXRvdGFsX3NjYW5uZWQgJiM0Mzs9IHNjYW5uZWQ7Ci0JCWlmICgqaXNvbGF0ZWQpIHsKLQkJCSppc29sYXRlX3R5cGUgPSB0eXBlOwotCQkJKmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7Ci0JCQlicmVhazsKLQkJfQotCQkvKgotCQkgKiBJZiBzY2FubmVkICZndDsgMCBhbmQgaXNvbGF0ZWQgPT0gMCwgYXZvaWQgZmFsbGluZyBiYWNrIHRvIHRoZQotCQkgKiBvdGhlciB0eXBlLCBhcyB0aGlzIHR5cGUgcmVtYWlucyBzdWZmaWNpZW50LiBGYWxsaW5nIGJhY2sKLQkJICogdG9vIHJlYWRpbHkgY2FuIGRpc3J1cHQgdGhlIHBvc2l0aXZlX2N0cmxfZXJyKCkgYmlhcy4KLQkJICovCi0JCWlmICghc2Nhbm5lZCkKLQkJCXR5cGUgPSAhdHlwZTsKJiM0MzsJLyoKJiM0MzsJICogV2UgYXJlIHJ1bm5pbmcgb3V0IG9mIHRoZSBjdXJyZW50IHJlY2xhaW0gdHlwZS4gRmFsbCBiYWNrIHRvCiYjNDM7CSAqIHRoZSBvdGhlciB0eXBlIGlmIGFsbG93ZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoZXhoYXVzdGVkICZhbXA7JmFtcDsgdHlwZV9mYWxsYmFja19hbGxvd2VkKSB7CiYjNDM7CQl0eXBlID0gIXR5cGU7CiYjNDM7CQl0eXBlX2ZhbGxiYWNrX2FsbG93ZWQgPSBmYWxzZTsKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsJLyoKJiM0MzsJICogV2UgYXJlIG5vdCBleGhhdXN0ZWQsIGJ1dCBmYWlsZWQgdG8gaXNvbGF0ZSBhbnkgZm9saW9zIGR1ZSB0bwomIzQzOwkgKiByYWNlcy4gR2l2ZSB0aGlzIHR5cGUgb25lIG1vcmUgY2hhbmNlIHRvIGF2b2lkIGEgbGFyZ2VyIGxvb3AuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWV4aGF1c3RlZCAmYW1wOyZhbXA7ICF0cmllZCkgewomIzQzOwkJdHJpZWQgPSB0cnVlOwomIzQzOwkJZ290byByZXRyeTsKIAl9CiAKIAlyZXR1cm4gdG90YWxfc2Nhbm5lZDsKQEAgLTQ5NzAsMjEgJiM0Mzs1MTAxLDY3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCXJldHVybiBzY2FubmVkOwogfQogCiYjNDM7c3RhdGljIGJvb2wgbHJ1X2dlbl9pbWJhbGFuY2VkKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxLAomIzQzOwkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwomIzQzOwl1bnNpZ25lZCBsb25nIHlvdW5nID0gMCwgb2xkID0gMCwgbGFnID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBpbmFjdGl2ZV9yYXRpbywgZ2I7CiYjNDM7CURFRklORV9NSU5fU0VRKGxydXZlYyk7CiYjNDM7CiYjNDM7CS8qIHdlIHN0aWxsIGhhdmUgZW5vdWdoIGdlbmVyYXRpb25zIHRvIHJlY2xhaW0gKi8KJiM0MzsJaWYgKG1pbl9zZXFbdHlwZV0gJiM0MzsgTUlOX05SX0dFTlMgJmx0OyBtYXhfc2VxKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUcmlnZ2VyIGFnaW5nIGlmIHRoZSBwcmVmZXJyZWQgdHlwZSBpcyBydW5uaW5nIGxvdyBvbiByZWNsYWltYWJsZQomIzQzOwkgKiBmb2xpb3MsIHByb3ZpZGVkIHRoZSBnZW5lcmF0aW9uIGxhZyBvZiB0aGUgb3RoZXIgdHlwZSByZW1haW5zIHNtYWxsCiYjNDM7CSAqIGVub3VnaCB0aGF0IGluY19taW5fc2VxKCkgaW50cm9kdWNlcyBuZWdsaWdpYmxlIG92ZXJoZWFkCiYjNDM7CSAqLwomIzQzOwlmb3IgKHVuc2lnbmVkIGxvbmcgc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxICZsdDs9IG1heF9zZXE7IHNlcSYjNDM7JiM0MzspIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGxydXZlY19nZW5fc2l6ZShscnVnZW4sIHR5cGUsIHNlcSk7CiYjNDM7CiYjNDM7CQlpZiAoc2VxICYjNDM7IE1JTl9OUl9HRU5TICZndDsgbWF4X3NlcSkKJiM0MzsJCQl5b3VuZyAmIzQzOz0gc2l6ZTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlvbGQgJiM0Mzs9IHNpemU7CiYjNDM7CX0KJiM0MzsJaWYgKG1pbl9zZXFbIXR5cGVdICYjNDM7IE1BWF9OUl9HRU5TID09IG1heF9zZXEgJiM0MzsgMSkKJiM0MzsJCWxhZyAmIzQzOz0gbHJ1dmVjX2dlbl9zaXplKGxydWdlbiwgIXR5cGUsIG1pbl9zZXFbIXR5cGVdKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQm9ycm93IHRoZSBhZGFwdGl2ZSByYXRpbyBmcm9tIGluYWN0aXZlX2lzX2xvdygpLCBhbmQgc2NhbGUKJiM0MzsJICogaXQgYnkgc3FydChNQVhfTlJfR0VOUykgdG8gbWFrZSBhZ2luZyBsZXNzIGFnZ3Jlc3NpdmUKJiM0MzsJICovCiYjNDM7CWdiID0gKHlvdW5nICYjNDM7IG9sZCkgJmd0OyZndDsgKDMwIC0gUEFHRV9TSElGVCk7CiYjNDM7CWluYWN0aXZlX3JhdGlvID0gZ2IgPyBpbnRfc3FydCgxMCAqIGdiICogTUFYX05SX0dFTlMpIDogTUFYX05SX0dFTlM7CiYjNDM7CXJldHVybiB5b3VuZyAmZ3Q7IG9sZCAqIGluYWN0aXZlX3JhdGlvICZhbXA7JmFtcDsgKGxhZyAmbHQ7IE1BWF9MUlVfQkFUQ0ggfHwKJiM0MzsJICAgICAgIChpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykgJmFtcDsmYW1wOyBzYy0mZ3Q7cHJpb3JpdHkgJmd0OyAyKSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgc2hvdWxkX3J1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSwKIAkJCSAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKQogewomIzQzOwlpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTsKIAlERUZJTkVfTUlOX1NFUShscnV2ZWMpOwogCi0JLyogaGF2ZSB0byBydW4gYWdpbmcsIHNpbmNlIGV2aWN0aW9uIGlzIG5vdCBwb3NzaWJsZSBhbnltb3JlICovCi0JaWYgKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpICYjNDM7IE1JTl9OUl9HRU5TICZndDsgbWF4X3NlcSkKJiM0MzsJLyogcnVuIGFnaW5nIGlmIHRoZSBwcmVmZXJyZWQgdHlwZSBpcyBleGhhdXN0ZWQgKi8KJiM0MzsJaWYgKG1pbl9zZXFbdHlwZV0gJiM0MzsgTUlOX05SX0dFTlMgJmd0OyBtYXhfc2VxKQogCQlyZXR1cm4gdHJ1ZTsKIAotCS8qIHRyeSB0byBhdm9pZCBhZ2luZywgZG8gZ2VudGxlIHJlY2xhaW0gYXQgdGhlIGRlZmF1bHQgcHJpb3JpdHkgKi8KLQlpZiAoc2MtJmd0O3ByaW9yaXR5ID09IERFRl9QUklPUklUWSkKJiM0MzsJLyoKJiM0MzsJICogVHJ5IHRvIGF2b2lkIGFnaW5nIGJ5IGRvaW5nIGdlbnRsZSByZWNsYWltIGF0IHRoZSBkZWZhdWx0CiYjNDM7CSAqIHByaW9yaXR5LiBTa2lwIGdlbnRsZSByZWNsYWltIGZvciBleHRyZW1lIHN3YXBwaW5lc3MuCiYjNDM7CSAqLwomIzQzOwlpZiAoc2MtJmd0O3ByaW9yaXR5ID09IERFRl9QUklPUklUWSAmYW1wOyZhbXA7ICFpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qIGJldHRlciB0byBydW4gYWdpbmcgZXZlbiB0aG91Z2ggZXZpY3Rpb24gaXMgc3RpbGwgcG9zc2libGUgKi8KLQlyZXR1cm4gZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgJiM0MzsgTUlOX05SX0dFTlMgPT0gbWF4X3NlcTsKJiM0MzsJaWYgKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpICYjNDM7IE1JTl9OUl9HRU5TID09IG1heF9zZXEpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogUnVuIGFnaW5nIGlmIHRoZSBwcmVmZXJyZWQgdHlwZSBpcyBzZXZlcmVseSBpbWJhbGFuY2VkIGFjcm9zcyBnZW5zICovCiYjNDM7CXJldHVybiBscnVfZ2VuX2ltYmFsYW5jZWQobHJ1dmVjLCBtYXhfc2VxLCBzYywgdHlwZSwgc3dhcHBpbmVzcyk7CiB9CiAKIHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQ5CgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDQ4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MgaW4gdGhlIE1HTFJVIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgTUdMUlUgcGF0Y2gsIGZvY3VzaW5nIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIE15IGluaXRpYWwgc2NhbiBvZiB0aGUgY29kZSBtb2RpZmljYXRpb25zIHRvIGBtbS92bXNjYW4uY2AgaW1tZWRpYXRlbHkgaGlnaGxpZ2h0cyB0aGUgY29yZSBhcmVhczogY2hhbmdlcyB0byBMUlUgZ2VuZXJhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgZm9saW9faW5jX2dlbmAsIGBpbmNfbWluX3NlcWAsIGBzY2FuX2ZvbGlvc2AsIGBnZXRfdHlwZV90b19zY2FuYCwgYGlzb2xhdGVfZm9saW9zYCwgYW5kIGBzaG91bGRfcnVuX2FnaW5nYC4gVGhlcmUmIzM5O3MgYWxzbyB0aGlzIG5ldyBgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvYCBmdW5jdGlvbi4KCk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmlnaHQ/IExldCYjMzk7cyBzZWUuLi4gdGhlIHBhdGNoIGlzIGFsbCBhYm91dCBvcHRpbWl6aW5nIHBhZ2UgcmVjbGFpbS4gSXQmIzM5O3Mgd29ya2luZyB3aXRoIHRoZSBgc3RydWN0IGZvbGlvYCBhbmQgTFJVIGxpc3RzLCBjb3JlIGRhdGEgc3RydWN0dXJlcyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuIEkmIzM5O20gbm90IHNlZWluZyBhbnkgbmV3IHN0cnVjdHVyZXMgYmVpbmcgaW50cm9kdWNlZCB0aGF0IGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgYSBtYWpvciByZWQgZmxhZyBJIGNhbiBpbW1lZGlhdGVseSBkaXNtaXNzLiBJdCYjMzk7cyBub3QgYWxsb2NhdGluZyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBub3IgZG9lcyBpdCBhcHBlYXIgdG8gYmUgaGFuZGxpbmcgYW55IHVzZXItc3BhY2UgY29waWVzIG9yIGRlYWxpbmcgd2l0aCB0aGUgcmlzayBvZiBpbmZvcm1hdGlvbiBsZWFrcy4gVGhpcyBtZWFucyB0aGVyZSBpc24mIzM5O3QgYW55dGhpbmcgZGlyZWN0bHkgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgZGFuZ2Vycy4KCkFueSBidWdzIGludHJvZHVjZWQgaGVyZSB3b3VsZCBtb3JlIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMgd2l0aGluIHRoZSBwYWdlIHJlY2xhaW0gYWxnb3JpdGhtcyB0aGVtc2VsdmVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdoZW4gbWFuaXB1bGF0aW5nIGZvbGlvcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IsIHBvdGVudGlhbGx5LCBkZWFkbG9ja3MgaWYgY29uY3VycmVuY3kgaXNuJiMzOTt0IGhhbmRsZWQgY29ycmVjdGx5LiBUaGFua2Z1bGx5LCBLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSB1c3VhbCBzdXNwZWN0cyBhcmUgaW4gcGxhY2UgdG8gY2F0Y2ggdGhvc2UgdHlwZXMgb2YgaXNzdWVzLiBTaW5jZSB0aGUgY2hhbmdlcyBhcmUgd2VsbC1jb250YWluZWQgYW5kIGZvY3VzZWQgb24gbWVtb3J5IG1hbmFnZW1lbnQsIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIHNlY29uZCBsb29rLiBgZmx1c2hfbHJ1X2JhdGNoYCBpcyB1c2luZyBgbGlzdF9jdXRfcG9zaXRpb25gIGFuZCBgbGlzdF9zcGxpY2VfdGFpbF9pbml0YCwgd2hpY2ggYXJlIHN0YW5kYXJkIGxpc3QgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucy4gYGluY19taW5fc2VxYCBpcyB1c2luZyBgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvYCDigJMganVzdCBhIHByZWZldGNoaW5nIG9wdGltaXphdGlvbi4gYF9fZm9saW9faW5jX2dlbmAgdXBkYXRlcyBgZm9saW8tJmd0O2ZsYWdzYC4gYGxydXZlY19nZW5fc2l6ZWAgcmVhZHMgdGhlIGV4aXN0aW5nIGBscnVnZW4tJmd0O25yX3BhZ2VzYC4gYGdldF90eXBlX3RvX3NjYW5gIGlzIGNhbGN1bGF0aW5nIHNvbWUgZ2FpbiBmYWN0b3JzIGJhc2VkIG9uIHN3YXBwaW5lc3MuIGBpc29sYXRlX2ZvbGlvc2AgaGFzIGEgcmV0cnkgbG9vcC4gQW5kIGBscnVfZ2VuX2ltYmFsYW5jZWRgIGNhbGN1bGF0ZXMgc29tZSByYXRpb3MuIFllcCwgYWxsIGdvb2QuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGhlcmUuIE1vdmluZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgaW50cm9kdWNlcyBiYXRjaGluZyBmb3IgTFJVIGxpc3Qgb3BlcmF0aW9ucywgbW9kaWZpZXMgdGhlIHN3YXBwaW5lc3MtYmFzZWQgdHlwZSBzZWxlY3Rpb24gd2l0aCBhIHF1YWRyYXRpYyBib29zdCwgYW5kIGFkanVzdHMgdGhlIGFnaW5nIGFuZCBpc29sYXRpb24gaGV1cmlzdGljcy4gVGhlc2UgY2hhbmdlcyBtYW5pcHVsYXRlIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmVzIChgc3RydWN0IGZvbGlvYCwgTFJVIGxpc3RzKSBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGxpc3QgY29ycnVwdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEl0IGludHJvZHVjZXMgYmF0Y2hpbmcgZm9yIExSVSBsaXN0IG9wZXJhdGlvbnMsIG1vZGlmaWVzIHRoZSBzd2FwcGluZXNzLWJhc2VkIHR5cGUgc2VsZWN0aW9uIHdpdGggYSBxdWFkcmF0aWMgYm9vc3QsIGFuZCBhZGp1c3RzIHRoZSBhZ2luZyBhbmQgaXNvbGF0aW9uIGhldXJpc3RpY3MuIFRoZXNlIGNoYW5nZXMgbWFuaXB1bGF0ZSBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcyAoYHN0cnVjdCBmb2xpb2AsIExSVSBsaXN0cykgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBsaXN0IGNvcnJ1cHRpb25zLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQxOjQ5LjM1MTM1ODczWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMTk0MDU3MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxydV9nZW5fc29mdF9yZWNsYWltXCIsXG4gICAgXCJtYXhfbHJ1X2dlbl9tZW1jZ1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgaW50cm9kdWNlcyBiYXRjaGluZyBmb3IgTFJVIGxpc3Qgb3BlcmF0aW9ucywgbW9kaWZpZXMgdGhlIHN3YXBwaW5lc3MtYmFzZWQgdHlwZSBzZWxlY3Rpb24gd2l0aCBhIHF1YWRyYXRpYyBib29zdCwgYW5kIGFkanVzdHMgdGhlIGFnaW5nIGFuZCBpc29sYXRpb24gaGV1cmlzdGljcy4gVGhlc2UgY2hhbmdlcyBtYW5pcHVsYXRlIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmVzIChgc3RydWN0IGZvbGlvYCwgTFJVIGxpc3RzKSBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGxpc3QgY29ycnVwdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgbWVtb3J5IHJlY2xhaW0gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgZXZpY3Rpb24gcGF0aCwgZm9saW8gc2Nhbm5pbmcsIGFuZCBhZ2luZyBoZXVyaXN0aWNzLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGluIGBpbmNfbWluX3NlcWAgYW5kIGNoYW5nZXMgaG93IGBnZXRfdHlwZV90b19zY2FuYCBjYWxjdWxhdGVzIHRoZSBwcmVmZXJyZWQgcmVjbGFpbSB0eXBlIGJhc2VkIG9uIHN3YXBwaW5lc3MuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBzdGFiaWxpdHkgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0MTo0OS4zNTEzNjQyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyODgzMDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTQzYjE4Njc0ZWExNTljMTRiODk3NzNlNDg4YzhkNzNlMzgzZmFkOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxMjo0MTo0OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggYmU2YmQyNmU4YzU3OC4uMDk1MzVkOWJkZWQ1YyAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTE5MSw4ICsxOTEsMjAgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7XFxuIFxcdFxcdFxcdHByZWZldGNodyhcXHUwMDI2cHJldi1cXHUwMDNlX2ZpZWxkKTtcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdH0gd2hpbGUgKDApXFxuKyNkZWZpbmUgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZClcXHRcXHRcXHRcXFxcXFxuK1xcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdGlmICgoX2ZvbGlvKS1cXHUwMDNlbHJ1Lm5leHQgIT0gX2Jhc2UpIHtcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdHN0cnVjdCBmb2xpbyAqbmV4dDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0bmV4dCA9IGxpc3RfZW50cnkoKF9mb2xpbyktXFx1MDAzZWxydS5uZXh0LFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvLCBscnUpO1xcdFxcdFxcXFxcXG4rXFx0XFx0XFx0cHJlZmV0Y2h3KFxcdTAwMjZuZXh0LVxcdTAwM2VfZmllbGQpO1xcdFxcdFxcdFxcXFxcXG4rXFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0fSB3aGlsZSAoMClcXG4rXFxuICNlbHNlXFxuICNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZCkgZG8geyB9IHdoaWxlICgwKVxcbisjZGVmaW5lIHByZWZldGNod19uZXh0X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpIGRvIHsgfSB3aGlsZSAoMClcXG4gI2VuZGlmXFxuIFxcbiAvKlxcbkBAIC0yNzAsNiArMjgyLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19leGVjX2ZpbGVfZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0cmV0dXJuIHZtYV9mbGFnc190ZXN0KHZtYV9mbGFncywgVk1BX0VYRUNfQklUKSBcXHUwMDI2XFx1MDAyNiBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XFxuIH1cXG4gXFxuKy8qIFNlZSBnZXRfdHlwZV90b19zY2FuKCk6IHRoZXNlIHZhbHVlcyBhbHdheXMgc2VsZWN0IEZJTEUgb3IgQU5PTiAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfZXh0cmVtZV9zd2FwcGluZXNzKGludCBzd2FwcGluZXNzKVxcbit7XFxuK1xcdHJldHVybiBzd2FwcGluZXNzIFxcdTAwM2M9IE1JTl9TV0FQUElORVNTICsgMSB8fFxcbitcXHQgICAgICAgc3dhcHBpbmVzcyBcXHUwMDNlPSBNQVhfU1dBUFBJTkVTUztcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgc2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCByZWNsYWltX3N0YXRlICpycylcXG4ge1xcbkBAIC0zMjk2LDIwICszMzE1LDIxIEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hXFxuIH1cXG4gXFxuIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXFxuLXN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpXFxuIHtcXG4tXFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XFxuLVxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuLVxcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4rXFx0aW50IG5ld19nZW47XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XFxuIFxcbiBcXHRkbyB7XFxuIFxcdFxcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbiBcXHRcXHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cXG4tXFx0XFx0aWYgKG5ld19nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pXFxuK1xcdFxcdGlmIChuZXdfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7XFxuK1xcdFxcdFxcdGlmIChpbmNyZWFzZWQpXFxuK1xcdFxcdFxcdFxcdCppbmNyZWFzZWQgPSBmYWxzZTtcXG4gXFx0XFx0XFx0cmV0dXJuIG5ld19nZW47XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdG5ld19nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XFxuIFxcbkBAIC0zMzE3LDggKzMzMzcsMjEgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0bmV3X2ZsYWdzIHw9IChuZXdfZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbiBcXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4gXFxuLVxcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XFxuK1xcdGlmIChpbmNyZWFzZWQpXFxuK1xcdFxcdCppbmNyZWFzZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gbmV3X2dlbjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4rXFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG4rXFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuK1xcdGJvb2wgZ2VuX2luY3JlYXNlZDtcXG4gXFxuK1xcdG5ld19nZW4gPSBfX2ZvbGlvX2luY19nZW4oZm9saW8sIG9sZF9nZW4sIFxcdTAwMjZnZW5faW5jcmVhc2VkKTtcXG4rXFx0aWYgKGdlbl9pbmNyZWFzZWQpXFxuK1xcdFxcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XFxuIFxcdHJldHVybiBuZXdfZ2VuO1xcbiB9XFxuIFxcbkBAIC0zODk3LDEzICszOTMwLDI3IEBAIHN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcXG4gXFx0XFx0a2ZyZWUod2Fsayk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9scnVfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqKmJhdGNoX2VuZCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqZHN0KVxcbit7XFxuK1xcdExJU1RfSEVBRChtb3ZhYmxlKTtcXG4rXFxuK1xcdGlmICghKmJhdGNoX2VuZClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bGlzdF9jdXRfcG9zaXRpb24oXFx1MDAyNm1vdmFibGUsIGhlYWQsICpiYXRjaF9lbmQpO1xcbitcXHRsaXN0X3NwbGljZV90YWlsX2luaXQoXFx1MDAyNm1vdmFibGUsIGRzdCk7XFxuK1xcdCpiYXRjaF9lbmQgPSBOVUxMO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcXG4ge1xcbiBcXHRpbnQgem9uZTtcXG4tXFx0aW50IHJlbWFpbmluZyA9IE1BWF9MUlVfQkFUQ0g7XFxuK1xcdGludCByZW1haW5pbmcgPSBNQVhfTFJVX0JBVENIIC8gKGlzX2V4dHJlbWVfc3dhcHBpbmVzcyhzd2FwcGluZXNzKSA/IDIgOiA4KTtcXG4gXFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG4gXFx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbiBcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG4rXFx0aW50IHRhcmdldF9nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XFxuIFxcbiBcXHQvKiBGb3IgZmlsZSB0eXBlLCBza2lwIHRoZSBjaGVjayBpZiBzd2FwcGluZXNzIGlzIGFub24gb25seSAqL1xcbiBcXHRpZiAodHlwZSBcXHUwMDI2XFx1MDAyNiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkpXFxuQEAgLTM5MTUsMzMgKzM5NjIsNTUgQEAgc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXFxuIFxcbiBcXHQvKiBwcmV2ZW50IGNvbGQvaG90IGludmVyc2lvbiBpZiB0aGUgdHlwZSBpcyBldmljdGFibGUgKi9cXG4gXFx0Zm9yICh6b25lID0gMDsgem9uZSBcXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnRhcmdldF9saXN0ID0gXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdO1xcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW29sZF9nZW5dW3R5cGVdW3pvbmVdO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIHByb3RlY3RlZFtNQVhfTlJfVElFUlNdID0ge30sIGRlbHRhID0gMDtcXG4rXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqcG9zID0gaGVhZC1cXHUwMDNlbmV4dDtcXG4rXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqYmF0Y2hfZW5kID0gTlVMTDtcXG4gXFxuLVxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xcbitcXHRcXHR3aGlsZSAocG9zICE9IGhlYWQpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZm9saW8sIGxydSk7XFxuK1xcdFxcdFxcdGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIFxcdFxcdFxcdGludCByZWZzID0gZm9saW9fbHJ1X3JlZnMoZm9saW8pO1xcbiBcXHRcXHRcXHRib29sIHdvcmtpbmdzZXQgPSBmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pO1xcbitcXHRcXHRcXHRib29sIGdlbl9pbmNyZWFzZWQ7XFxuIFxcbiBcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTtcXG4gXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSwgZm9saW8pO1xcbiBcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfZmlsZV9scnUoZm9saW8pICE9IHR5cGUsIGZvbGlvKTtcXG4gXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3pvbmVudW0oZm9saW8pICE9IHpvbmUsIGZvbGlvKTtcXG4gXFxuLVxcdFxcdFxcdG5ld19nZW4gPSBmb2xpb19pbmNfZ2VuKGxydXZlYywgZm9saW8pO1xcbi1cXHRcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW25ld19nZW5dW3R5cGVdW3pvbmVdKTtcXG4rXFx0XFx0XFx0cHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKGZvbGlvLCBoZWFkLCBmbGFncyk7XFxuK1xcdFxcdFxcdHBvcyA9IHBvcy1cXHUwMDNlbmV4dDtcXG4rXFx0XFx0XFx0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXFx1MDAyNmdlbl9pbmNyZWFzZWQpO1xcbitcXHRcXHRcXHRpZiAoZ2VuX2luY3JlYXNlZCkge1xcbitcXHRcXHRcXHRcXHRkZWx0YSArPSBucl9wYWdlcztcXG4rXFx0XFx0XFx0XFx0YmF0Y2hfZW5kID0gXFx1MDAyNmZvbGlvLVxcdTAwM2VscnU7XFxuIFxcbi1cXHRcXHRcXHQvKiBkb24ndCBjb3VudCB0aGUgd29ya2luZ3NldCBiZWluZyBsYXppbHkgcHJvbW90ZWQgKi9cXG4tXFx0XFx0XFx0aWYgKHJlZnMgKyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgKyAxKSB7XFxuLVxcdFxcdFxcdFxcdGludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpO1xcbi1cXHRcXHRcXHRcXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdFxcdFxcdFxcdC8qIGRvbid0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqL1xcbitcXHRcXHRcXHRcXHRpZiAocmVmcyArIHdvcmtpbmdzZXQgIT0gQklUKExSVV9SRUZTX1dJRFRIKSArIDEpIHtcXG4rXFx0XFx0XFx0XFx0XFx0aW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7XFxuIFxcbi1cXHRcXHRcXHRcXHRXUklURV9PTkNFKGxydWdlbi1cXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBscnVnZW4tXFx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSArIGRlbHRhKTtcXG4rXFx0XFx0XFx0XFx0XFx0cHJvdGVjdGVkW3RpZXJdICs9IG5yX3BhZ2VzO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdGZsdXNoX2xydV9iYXRjaChoZWFkLCBcXHUwMDI2YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7XFxuK1xcdFxcdFxcdFxcdGxpc3RfbW92ZShcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW25ld19nZW5dW3R5cGVdW3pvbmVdKTtcXG4gXFx0XFx0XFx0fVxcbi1cXG4gXFx0XFx0XFx0aWYgKCEtLXJlbWFpbmluZylcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbitcXHRcXHRmbHVzaF9scnVfYmF0Y2goaGVhZCwgXFx1MDAyNmJhdGNoX2VuZCwgdGFyZ2V0X2xpc3QpO1xcbitcXG4rXFx0XFx0V1JJVEVfT05DRShscnVnZW4tXFx1MDAzZW5yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdLFxcbitcXHRcXHRcXHQgICBscnVnZW4tXFx1MDAzZW5yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdIC0gZGVsdGEpO1xcbitcXHRcXHRXUklURV9PTkNFKGxydWdlbi1cXHUwMDNlbnJfcGFnZXNbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV0sXFxuK1xcdFxcdFxcdCAgIGxydWdlbi1cXHUwMDNlbnJfcGFnZXNbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV0gKyBkZWx0YSk7XFxuK1xcdFxcdGZvciAoaW50IHRpZXIgPSAwOyB0aWVyIFxcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspXFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UobHJ1Z2VuLVxcdTAwM2Vwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0sXFxuK1xcdFxcdFxcdFxcdCAgIGxydWdlbi1cXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdICsgcHJvdGVjdGVkW3RpZXJdKTtcXG4rXFx0XFx0aWYgKCFyZW1haW5pbmcpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBkb25lOlxcbiBcXHRyZXNldF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRydWUpO1xcbkBAIC00MTUxLDIwICs0MjIwLDI4IEBAIHN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2xcXG4gXFx0c2MtXFx1MDAzZXByaW9yaXR5ID0gY2xhbXAocHJpb3JpdHksIERFRl9QUklPUklUWSAvIDIsIERFRl9QUklPUklUWSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfZ2VuX3NpemUoc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbixcXG4rXFx0XFx0aW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbit7XFxuK1xcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7XFxuK1xcbitcXHRmb3IgKGludCB6b25lID0gMDsgem9uZSBcXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxcbitcXHRcXHRzaXplICs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVxcdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xcbitcXHRyZXR1cm4gc2l6ZTtcXG4rfVxcbitcXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuIHtcXG4tXFx0aW50IGdlbiwgdHlwZSwgem9uZTtcXG4rXFx0aW50IHR5cGU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2VxLCB0b3RhbCA9IDA7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuIFxcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XFxuIFxcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XFxuIFxcbiBcXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7XFxuLVxcdFxcdGZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFxcdTAwM2M9IG1heF9zZXE7IHNlcSsrKSB7XFxuLVxcdFxcdFxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcXG4tXFx0XFx0XFx0Zm9yICh6b25lID0gMDsgem9uZSBcXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxcbi1cXHRcXHRcXHRcXHR0b3RhbCArPSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSBcXHUwMDNjPSBtYXhfc2VxOyBzZXErKylcXG4rXFx0XFx0XFx0dG90YWwgKz0gbHJ1dmVjX2dlbl9zaXplKGxydWdlbiwgdHlwZSwgc2VxKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHRvdGFsO1xcbkBAIC00NzI4LDcgKzQ4MDUsOCBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxcbiBcXG4gc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHRpZXIsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkcClcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwLFxcbitcXHRcXHQgICAgICAgYm9vbCAqZXhoYXVzdGVkKVxcbiB7XFxuIFxcdGludCBpO1xcbiBcXHRpbnQgZ2VuO1xcbkBAIC00NzM5LDEyICs0ODE3LDE1IEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdGludCBza2lwcGVkID0gMDtcXG4gXFx0dW5zaWduZWQgbG9uZyByZW1haW5pbmcgPSBucl90b19zY2FuO1xcbiBcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbitcXHRib29sIGVhcmx5X3N0b3AgPSBmYWxzZTtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRShucl90b19zY2FuIFxcdTAwM2UgTUFYX0xSVV9CQVRDSCk7XFxuIFxcdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShsaXN0KSk7XFxuIFxcbi1cXHRpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUylcXG4rXFx0aWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgPT0gTUlOX05SX0dFTlMpIHtcXG4rXFx0XFx0KmV4aGF1c3RlZCA9IHRydWU7XFxuIFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuIFxcbiBcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuIFxcbkBAIC00Nzc1LDggKzQ4NTYsMTAgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0XFx0c2tpcHBlZF96b25lICs9IGRlbHRhO1xcbiBcXHRcXHRcXHR9XFxuIFxcbi1cXHRcXHRcXHRpZiAoIS0tcmVtYWluaW5nIHx8IG1heChpc29sYXRlZCwgc2tpcHBlZF96b25lKSBcXHUwMDNlPSBNSU5fTFJVX0JBVENIKVxcbitcXHRcXHRcXHRpZiAoIS0tcmVtYWluaW5nIHx8IG1heChpc29sYXRlZCwgc2tpcHBlZF96b25lKSBcXHUwMDNlPSBNSU5fTFJVX0JBVENIKSB7XFxuK1xcdFxcdFxcdFxcdGVhcmx5X3N0b3AgPSB0cnVlO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoc2tpcHBlZF96b25lKSB7XFxuQEAgLTQ3ODUsOCArNDg2OCwxMCBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRcXHRza2lwcGVkICs9IHNraXBwZWRfem9uZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKCFyZW1haW5pbmcgfHwgaXNvbGF0ZWQgXFx1MDAzZT0gTUlOX0xSVV9CQVRDSClcXG4rXFx0XFx0aWYgKCFyZW1haW5pbmcgfHwgaXNvbGF0ZWQgXFx1MDAzZT0gTUlOX0xSVV9CQVRDSCkge1xcbitcXHRcXHRcXHRlYXJseV9zdG9wID0gdHJ1ZTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0aXRlbSA9IFBHU0NBTl9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcXG5AQCAtNDc5Nyw2ICs0ODgyLDEzIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdFxcdHNjYW5uZWQsIHNraXBwZWQsIGlzb2xhdGVkLFxcbiBcXHRcXHRcXHRcXHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBJZiB3ZSBkaWRuJ3Qgc3RvcCBlYXJseSwgYWxsIHJlY2xhaW1hYmxlIGZvbGlvcyBpbiB0aGUgY3VycmVudFxcbitcXHQgKiBnZW5lcmF0aW9uIGhhdmUgYmVlbiBzY2FubmVkLiBXZSBhcmUgZXhoYXVzdGVkIGlmIHRoaXMgaXMgdGhlIGxhc3RcXG4rXFx0ICogcmVjbGFpbWFibGUgZ2VuZXJhdGlvbi5cXG4rXFx0ICovXFxuK1xcdCpleGhhdXN0ZWQgPSAhZWFybHlfc3RvcCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSArIE1JTl9OUl9HRU5TID09IGxydWdlbi1cXHUwMDNlbWF4X3NlcTtcXG4gXFx0Kmlzb2xhdGVkcCA9IGlzb2xhdGVkO1xcbiBcXHRyZXR1cm4gc2Nhbm5lZDtcXG4gfVxcbkBAIC00ODI0LDUxICs0OTE2LDkwIEBAIHN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXFxuIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbiB7XFxuIFxcdHN0cnVjdCBjdHJsX3BvcyBzcCwgcHYgPSB7fTtcXG4rXFx0aW50IGFub25fZ2FpbiwgZmlsZV9nYWluO1xcbiBcXG4gXFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzYz0gTUlOX1NXQVBQSU5FU1MgKyAxKVxcbiBcXHRcXHRyZXR1cm4gTFJVX0dFTl9GSUxFO1xcbiBcXG4gXFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzZT0gTUFYX1NXQVBQSU5FU1MpXFxuIFxcdFxcdHJldHVybiBMUlVfR0VOX0FOT047XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBcHBseSBhIHF1YWRyYXRpYyBib29zdCBiYXNlZCBvbiB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgbmV1dHJhbFxcbitcXHQgKiBiYWxhbmNlIHBvaW50IChzd2FwcGluZXNzID0gTUFYX1NXQVBQSU5FU1MgLyAyKS5cXG4rXFx0ICpcXG4rXFx0ICogQSBsaW5lYXIgd2VpZ2h0IGlzIGVhc2lseSBvdmVyd2hlbG1lZCBieSBoaXN0b3JpY2FsIHJlZmF1bHQgY29zdFxcbitcXHQgKiB3aGVuIHN3YXBwaW5lc3MgZGV2aWF0ZXMgZnJvbSBuZXV0cmFsLiBUaGUgcXVhZHJhdGljIHNjYWxpbmdcXG4rXFx0ICogYW1wbGlmaWVzIHRoZSB3ZWlnaHQgb2YgdGhlIHByZWZlcnJlZCB0eXBlIHNtb290aGx5LlxcbitcXHQgKi9cXG4rXFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzYyBNQVhfU1dBUFBJTkVTUyAvIDIpIHtcXG4rXFx0XFx0aW50IGRlbHRhID0gKE1BWF9TV0FQUElORVNTIC8gMikgLSBzd2FwcGluZXNzO1xcbitcXHRcXHRpbnQgYm9vc3QgPSAoZGVsdGEgKiBkZWx0YSkgXFx1MDAzZVxcdTAwM2UgNDtcXG4rXFxuK1xcdFxcdGFub25fZ2FpbiA9IHN3YXBwaW5lc3M7XFxuK1xcdFxcdGZpbGVfZ2FpbiA9IChNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MpICsgYm9vc3Q7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGludCBkZWx0YSA9IHN3YXBwaW5lc3MgLSAoTUFYX1NXQVBQSU5FU1MgLyAyKTtcXG4rXFx0XFx0aW50IGJvb3N0ID0gKGRlbHRhICogZGVsdGEpIFxcdTAwM2VcXHUwMDNlIDQ7XFxuK1xcbitcXHRcXHRhbm9uX2dhaW4gPSBzd2FwcGluZXNzICsgYm9vc3Q7XFxuK1xcdFxcdGZpbGVfZ2FpbiA9IE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcztcXG4rXFx0fVxcbitcXG4gXFx0LypcXG4gXFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxcbiBcXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXFxuIFxcdCAqL1xcbi1cXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFxcdTAwMjZzcCk7XFxuLVxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcXHUwMDI2cHYpO1xcbitcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIGFub25fZ2FpbiwgXFx1MDAyNnNwKTtcXG4rXFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBmaWxlX2dhaW4sIFxcdTAwMjZwdik7XFxuIFxcbiBcXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXFx1MDAyNnNwLCBcXHUwMDI2cHYpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShpbnQgc3dhcHBpbmVzcylcXG4re1xcbitcXHRyZXR1cm4gc3dhcHBpbmVzcyA9PSBNSU5fU1dBUFBJTkVTUyB8fFxcbitcXHQgICAgICAgc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MsXFxuIFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCxcXG4gXFx0XFx0XFx0ICBpbnQgKmlzb2xhdGVfdHlwZSwgaW50ICppc29sYXRlX3NjYW5uZWQpXFxuIHtcXG4tXFx0aW50IGk7XFxuLVxcdGludCB0b3RhbF9zY2FubmVkID0gMDtcXG4rXFx0Ym9vbCB0eXBlX2ZhbGxiYWNrX2FsbG93ZWQgPSAhaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShzd2FwcGluZXNzKTtcXG4gXFx0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XFxuK1xcdGludCB0b3RhbF9zY2FubmVkID0gMCwgc2Nhbm5lZCwgdGllcjtcXG4rXFx0Ym9vbCBleGhhdXN0ZWQsIHRyaWVkID0gZmFsc2U7XFxuIFxcbi1cXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7XFxuLVxcdFxcdGludCBzY2FubmVkO1xcbi1cXHRcXHRpbnQgdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xcbityZXRyeTpcXG4rXFx0dGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xcbitcXHRzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYyxcXG4rXFx0XFx0XFx0ICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQsIFxcdTAwMjZleGhhdXN0ZWQpO1xcbiBcXG4tXFx0XFx0c2Nhbm5lZCA9IHNjYW5fZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsXFxuLVxcdFxcdFxcdFxcdCAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkKTtcXG4rXFx0dG90YWxfc2Nhbm5lZCArPSBzY2FubmVkO1xcbitcXHRpZiAoKmlzb2xhdGVkKSB7XFxuK1xcdFxcdCppc29sYXRlX3R5cGUgPSB0eXBlO1xcbitcXHRcXHQqaXNvbGF0ZV9zY2FubmVkID0gc2Nhbm5lZDtcXG4rXFx0XFx0cmV0dXJuIHRvdGFsX3NjYW5uZWQ7XFxuK1xcdH1cXG4gXFxuLVxcdFxcdHRvdGFsX3NjYW5uZWQgKz0gc2Nhbm5lZDtcXG4tXFx0XFx0aWYgKCppc29sYXRlZCkge1xcbi1cXHRcXHRcXHQqaXNvbGF0ZV90eXBlID0gdHlwZTtcXG4tXFx0XFx0XFx0Kmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIElmIHNjYW5uZWQgXFx1MDAzZSAwIGFuZCBpc29sYXRlZCA9PSAwLCBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlXFxuLVxcdFxcdCAqIG90aGVyIHR5cGUsIGFzIHRoaXMgdHlwZSByZW1haW5zIHN1ZmZpY2llbnQuIEZhbGxpbmcgYmFja1xcbi1cXHRcXHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFzY2FubmVkKVxcbi1cXHRcXHRcXHR0eXBlID0gIXR5cGU7XFxuK1xcdC8qXFxuK1xcdCAqIFdlIGFyZSBydW5uaW5nIG91dCBvZiB0aGUgY3VycmVudCByZWNsYWltIHR5cGUuIEZhbGwgYmFjayB0b1xcbitcXHQgKiB0aGUgb3RoZXIgdHlwZSBpZiBhbGxvd2VkLlxcbitcXHQgKi9cXG4rXFx0aWYgKGV4aGF1c3RlZCBcXHUwMDI2XFx1MDAyNiB0eXBlX2ZhbGxiYWNrX2FsbG93ZWQpIHtcXG4rXFx0XFx0dHlwZSA9ICF0eXBlO1xcbitcXHRcXHR0eXBlX2ZhbGxiYWNrX2FsbG93ZWQgPSBmYWxzZTtcXG4rXFx0XFx0Z290byByZXRyeTtcXG4rXFx0fVxcbitcXHQvKlxcbitcXHQgKiBXZSBhcmUgbm90IGV4aGF1c3RlZCwgYnV0IGZhaWxlZCB0byBpc29sYXRlIGFueSBmb2xpb3MgZHVlIHRvXFxuK1xcdCAqIHJhY2VzLiBHaXZlIHRoaXMgdHlwZSBvbmUgbW9yZSBjaGFuY2UgdG8gYXZvaWQgYSBsYXJnZXIgbG9vcC5cXG4rXFx0ICovXFxuK1xcdGlmICghZXhoYXVzdGVkIFxcdTAwMjZcXHUwMDI2ICF0cmllZCkge1xcbitcXHRcXHR0cmllZCA9IHRydWU7XFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiB0b3RhbF9zY2FubmVkO1xcbkBAIC00OTcwLDIxICs1MTAxLDY3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRyZXR1cm4gc2Nhbm5lZDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgbHJ1X2dlbl9pbWJhbGFuY2VkKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxLFxcbitcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxcbit7XFxuK1xcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuK1xcdHVuc2lnbmVkIGxvbmcgeW91bmcgPSAwLCBvbGQgPSAwLCBsYWcgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIGluYWN0aXZlX3JhdGlvLCBnYjtcXG4rXFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG4rXFxuK1xcdC8qIHdlIHN0aWxsIGhhdmUgZW5vdWdoIGdlbmVyYXRpb25zIHRvIHJlY2xhaW0gKi9cXG4rXFx0aWYgKG1pbl9zZXFbdHlwZV0gKyBNSU5fTlJfR0VOUyBcXHUwMDNjIG1heF9zZXEpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRyaWdnZXIgYWdpbmcgaWYgdGhlIHByZWZlcnJlZCB0eXBlIGlzIHJ1bm5pbmcgbG93IG9uIHJlY2xhaW1hYmxlXFxuK1xcdCAqIGZvbGlvcywgcHJvdmlkZWQgdGhlIGdlbmVyYXRpb24gbGFnIG9mIHRoZSBvdGhlciB0eXBlIHJlbWFpbnMgc21hbGxcXG4rXFx0ICogZW5vdWdoIHRoYXQgaW5jX21pbl9zZXEoKSBpbnRyb2R1Y2VzIG5lZ2xpZ2libGUgb3ZlcmhlYWRcXG4rXFx0ICovXFxuK1xcdGZvciAodW5zaWduZWQgbG9uZyBzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXFx1MDAzYz0gbWF4X3NlcTsgc2VxKyspIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBzaXplID0gbHJ1dmVjX2dlbl9zaXplKGxydWdlbiwgdHlwZSwgc2VxKTtcXG4rXFxuK1xcdFxcdGlmIChzZXEgKyBNSU5fTlJfR0VOUyBcXHUwMDNlIG1heF9zZXEpXFxuK1xcdFxcdFxcdHlvdW5nICs9IHNpemU7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0b2xkICs9IHNpemU7XFxuK1xcdH1cXG4rXFx0aWYgKG1pbl9zZXFbIXR5cGVdICsgTUFYX05SX0dFTlMgPT0gbWF4X3NlcSArIDEpXFxuK1xcdFxcdGxhZyArPSBscnV2ZWNfZ2VuX3NpemUobHJ1Z2VuLCAhdHlwZSwgbWluX3NlcVshdHlwZV0pO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQm9ycm93IHRoZSBhZGFwdGl2ZSByYXRpbyBmcm9tIGluYWN0aXZlX2lzX2xvdygpLCBhbmQgc2NhbGVcXG4rXFx0ICogaXQgYnkgc3FydChNQVhfTlJfR0VOUykgdG8gbWFrZSBhZ2luZyBsZXNzIGFnZ3Jlc3NpdmVcXG4rXFx0ICovXFxuK1xcdGdiID0gKHlvdW5nICsgb2xkKSBcXHUwMDNlXFx1MDAzZSAoMzAgLSBQQUdFX1NISUZUKTtcXG4rXFx0aW5hY3RpdmVfcmF0aW8gPSBnYiA/IGludF9zcXJ0KDEwICogZ2IgKiBNQVhfTlJfR0VOUykgOiBNQVhfTlJfR0VOUztcXG4rXFx0cmV0dXJuIHlvdW5nIFxcdTAwM2Ugb2xkICogaW5hY3RpdmVfcmF0aW8gXFx1MDAyNlxcdTAwMjYgKGxhZyBcXHUwMDNjIE1BWF9MUlVfQkFUQ0ggfHxcXG4rXFx0ICAgICAgIChpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykgXFx1MDAyNlxcdTAwMjYgc2MtXFx1MDAzZXByaW9yaXR5IFxcdTAwM2UgMikpO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBzaG91bGRfcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4ge1xcbitcXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcXG4gXFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG4gXFxuLVxcdC8qIGhhdmUgdG8gcnVuIGFnaW5nLCBzaW5jZSBldmljdGlvbiBpcyBub3QgcG9zc2libGUgYW55bW9yZSAqL1xcbi1cXHRpZiAoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyBcXHUwMDNlIG1heF9zZXEpXFxuK1xcdC8qIHJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgZXhoYXVzdGVkICovXFxuK1xcdGlmIChtaW5fc2VxW3R5cGVdICsgTUlOX05SX0dFTlMgXFx1MDAzZSBtYXhfc2VxKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdC8qIHRyeSB0byBhdm9pZCBhZ2luZywgZG8gZ2VudGxlIHJlY2xhaW0gYXQgdGhlIGRlZmF1bHQgcHJpb3JpdHkgKi9cXG4tXFx0aWYgKHNjLVxcdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpXFxuK1xcdC8qXFxuK1xcdCAqIFRyeSB0byBhdm9pZCBhZ2luZyBieSBkb2luZyBnZW50bGUgcmVjbGFpbSBhdCB0aGUgZGVmYXVsdFxcbitcXHQgKiBwcmlvcml0eS4gU2tpcCBnZW50bGUgcmVjbGFpbSBmb3IgZXh0cmVtZSBzd2FwcGluZXNzLlxcbitcXHQgKi9cXG4rXFx0aWYgKHNjLVxcdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkgXFx1MDAyNlxcdTAwMjYgIWlzX2V4dHJlbWVfc3dhcHBpbmVzcyhzd2FwcGluZXNzKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0LyogYmV0dGVyIHRvIHJ1biBhZ2luZyBldmVuIHRob3VnaCBldmljdGlvbiBpcyBzdGlsbCBwb3NzaWJsZSAqL1xcbi1cXHRyZXR1cm4gZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxO1xcbitcXHRpZiAoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdC8qIFJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgc2V2ZXJlbHkgaW1iYWxhbmNlZCBhY3Jvc3MgZ2VucyAqL1xcbitcXHRyZXR1cm4gbHJ1X2dlbl9pbWJhbGFuY2VkKGxydXZlYywgbWF4X3NlcSwgc2MsIHR5cGUsIHN3YXBwaW5lc3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0MTo0OS44MTUwMDQ1MjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDk4NDk3NjgyODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X2dlbl9zb2Z0X3JlY2xhaW1cIixcbiAgICBcIm1heF9scnVfZ2VuX21lbWNnXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgTXVsdGktR2VuIExSVSAoTUdMUlUpIG1lbW9yeSByZWNsYWltIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGV2aWN0aW9uIHBhdGgsIGZvbGlvIHNjYW5uaW5nLCBhbmQgYWdpbmcgaGV1cmlzdGljcy4gSXQgaW50cm9kdWNlcyBiYXRjaGluZyBpbiBgaW5jX21pbl9zZXFgIGFuZCBjaGFuZ2VzIGhvdyBgZ2V0X3R5cGVfdG9fc2NhbmAgY2FsY3VsYXRlcyB0aGUgcHJlZmVycmVkIHJlY2xhaW0gdHlwZSBiYXNlZCBvbiBzd2FwcGluZXNzLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgc3RhYmlsaXR5IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTQzYjE4Njc0ZWExNTljMTRiODk3NzNlNDg4YzhkNzNlMzgzZmFkOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDEyOjQxOjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYmU2YmQyNmU4YzU3OC4uMDk1MzVkOWJkZWQ1YyAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTE5MSw4ICsxOTEsMjAgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7XG4gXHRcdFx0cHJlZmV0Y2h3KFx1MDAyNnByZXYtXHUwMDNlX2ZpZWxkKTtcdFx0XHRcXFxuIFx0XHR9XHRcdFx0XHRcdFx0XHRcXFxuIFx0fSB3aGlsZSAoMClcbisjZGVmaW5lIHByZWZldGNod19uZXh0X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpXHRcdFx0XFxcbitcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0aWYgKChfZm9saW8pLVx1MDAzZWxydS5uZXh0ICE9IF9iYXNlKSB7XHRcdFx0XFxcbitcdFx0XHRzdHJ1Y3QgZm9saW8gKm5leHQ7XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0bmV4dCA9IGxpc3RfZW50cnkoKF9mb2xpbyktXHUwMDNlbHJ1Lm5leHQsXHRcdFxcXG4rXHRcdFx0XHRcdHN0cnVjdCBmb2xpbywgbHJ1KTtcdFx0XFxcbitcdFx0XHRwcmVmZXRjaHcoXHUwMDI2bmV4dC1cdTAwM2VfZmllbGQpO1x0XHRcdFxcXG4rXHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4rXHR9IHdoaWxlICgwKVxuK1xuICNlbHNlXG4gI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKSBkbyB7IH0gd2hpbGUgKDApXG4rI2RlZmluZSBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKSBkbyB7IH0gd2hpbGUgKDApXG4gI2VuZGlmXG4gXG4gLypcbkBAIC0yNzAsNiArMjgyLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19leGVjX2ZpbGVfZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiB2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3MsIFZNQV9FWEVDX0JJVCkgXHUwMDI2XHUwMDI2IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiB9XG4gXG4rLyogU2VlIGdldF90eXBlX3RvX3NjYW4oKTogdGhlc2UgdmFsdWVzIGFsd2F5cyBzZWxlY3QgRklMRSBvciBBTk9OICovXG4rc3RhdGljIGlubGluZSBib29sIGlzX2V4dHJlbWVfc3dhcHBpbmVzcyhpbnQgc3dhcHBpbmVzcylcbit7XG4rXHRyZXR1cm4gc3dhcHBpbmVzcyBcdTAwM2M9IE1JTl9TV0FQUElORVNTICsgMSB8fFxuK1x0ICAgICAgIHN3YXBwaW5lc3MgXHUwMDNlPSBNQVhfU1dBUFBJTkVTUztcbit9XG4rXG4gc3RhdGljIHZvaWQgc2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4gXHRcdFx0XHQgICBzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSAqcnMpXG4ge1xuQEAgLTMyOTYsMjAgKzMzMTUsMjEgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcbiB9XG4gXG4gLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpXG4ge1xuLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4tXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbi1cdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4gXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0aW50IG5ld19nZW47XG4gXG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcbiBcbiBcdGRvIHtcbiBcdFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4gXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcbitcdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pIHtcbitcdFx0XHRpZiAoaW5jcmVhc2VkKVxuK1x0XHRcdFx0KmluY3JlYXNlZCA9IGZhbHNlO1xuIFx0XHRcdHJldHVybiBuZXdfZ2VuO1xuK1x0XHR9XG4gXG4gXHRcdG5ld19nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XG4gXG5AQCAtMzMxNyw4ICszMzM3LDIxIEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdG5ld19mbGFncyB8PSAobmV3X2dlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4gXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbi1cdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4rXHRpZiAoaW5jcmVhc2VkKVxuK1x0XHQqaW5jcmVhc2VkID0gdHJ1ZTtcbitcdHJldHVybiBuZXdfZ2VuO1xuK31cbitcbitzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuK1x0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4rXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuK1x0Ym9vbCBnZW5faW5jcmVhc2VkO1xuIFxuK1x0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXHUwMDI2Z2VuX2luY3JlYXNlZCk7XG4rXHRpZiAoZ2VuX2luY3JlYXNlZClcbitcdFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiBcdHJldHVybiBuZXdfZ2VuO1xuIH1cbiBcbkBAIC0zODk3LDEzICszOTMwLDI3IEBAIHN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcbiBcdFx0a2ZyZWUod2Fsayk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9scnVfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqKmJhdGNoX2VuZCxcbitcdFx0XHRcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKmRzdClcbit7XG4rXHRMSVNUX0hFQUQobW92YWJsZSk7XG4rXG4rXHRpZiAoISpiYXRjaF9lbmQpXG4rXHRcdHJldHVybjtcbitcbitcdGxpc3RfY3V0X3Bvc2l0aW9uKFx1MDAyNm1vdmFibGUsIGhlYWQsICpiYXRjaF9lbmQpO1xuK1x0bGlzdF9zcGxpY2VfdGFpbF9pbml0KFx1MDAyNm1vdmFibGUsIGRzdCk7XG4rXHQqYmF0Y2hfZW5kID0gTlVMTDtcbit9XG4rXG4gc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG4ge1xuIFx0aW50IHpvbmU7XG4tXHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSDtcbitcdGludCByZW1haW5pbmcgPSBNQVhfTFJVX0JBVENIIC8gKGlzX2V4dHJlbWVfc3dhcHBpbmVzcyhzd2FwcGluZXNzKSA/IDIgOiA4KTtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4gXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuK1x0aW50IHRhcmdldF9nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XG4gXG4gXHQvKiBGb3IgZmlsZSB0eXBlLCBza2lwIHRoZSBjaGVjayBpZiBzd2FwcGluZXNzIGlzIGFub24gb25seSAqL1xuIFx0aWYgKHR5cGUgXHUwMDI2XHUwMDI2IChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSlcbkBAIC0zOTE1LDMzICszOTYyLDU1IEBAIHN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxuIFxuIFx0LyogcHJldmVudCBjb2xkL2hvdCBpbnZlcnNpb24gaWYgdGhlIHR5cGUgaXMgZXZpY3RhYmxlICovXG4gXHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKykge1xuK1x0XHRzdHJ1Y3QgbGlzdF9oZWFkICp0YXJnZXRfbGlzdCA9IFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV07XG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW29sZF9nZW5dW3R5cGVdW3pvbmVdO1xuK1x0XHR1bnNpZ25lZCBsb25nIHByb3RlY3RlZFtNQVhfTlJfVElFUlNdID0ge30sIGRlbHRhID0gMDtcbitcdFx0c3RydWN0IGxpc3RfaGVhZCAqcG9zID0gaGVhZC1cdTAwM2VuZXh0O1xuK1x0XHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXRjaF9lbmQgPSBOVUxMO1xuIFxuLVx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHtcbi1cdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuK1x0XHR3aGlsZSAocG9zICE9IGhlYWQpIHtcbitcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBmb2xpbywgbHJ1KTtcbitcdFx0XHRsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFx0XHRcdGludCByZWZzID0gZm9saW9fbHJ1X3JlZnMoZm9saW8pO1xuIFx0XHRcdGJvb2wgd29ya2luZ3NldCA9IGZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbyk7XG4rXHRcdFx0Ym9vbCBnZW5faW5jcmVhc2VkO1xuIFxuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pO1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbyksIGZvbGlvKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfZmlsZV9scnUoZm9saW8pICE9IHR5cGUsIGZvbGlvKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fem9uZW51bShmb2xpbykgIT0gem9uZSwgZm9saW8pO1xuIFxuLVx0XHRcdG5ld19nZW4gPSBmb2xpb19pbmNfZ2VuKGxydXZlYywgZm9saW8pO1xuLVx0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSk7XG4rXHRcdFx0cHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKGZvbGlvLCBoZWFkLCBmbGFncyk7XG4rXHRcdFx0cG9zID0gcG9zLVx1MDAzZW5leHQ7XG4rXHRcdFx0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXHUwMDI2Z2VuX2luY3JlYXNlZCk7XG4rXHRcdFx0aWYgKGdlbl9pbmNyZWFzZWQpIHtcbitcdFx0XHRcdGRlbHRhICs9IG5yX3BhZ2VzO1xuK1x0XHRcdFx0YmF0Y2hfZW5kID0gXHUwMDI2Zm9saW8tXHUwMDNlbHJ1O1xuIFxuLVx0XHRcdC8qIGRvbid0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqL1xuLVx0XHRcdGlmIChyZWZzICsgd29ya2luZ3NldCAhPSBCSVQoTFJVX1JFRlNfV0lEVEgpICsgMSkge1xuLVx0XHRcdFx0aW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7XG4tXHRcdFx0XHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHRcdFx0XHQvKiBkb24ndCBjb3VudCB0aGUgd29ya2luZ3NldCBiZWluZyBsYXppbHkgcHJvbW90ZWQgKi9cbitcdFx0XHRcdGlmIChyZWZzICsgd29ya2luZ3NldCAhPSBCSVQoTFJVX1JFRlNfV0lEVEgpICsgMSkge1xuK1x0XHRcdFx0XHRpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTtcbiBcbi1cdFx0XHRcdFdSSVRFX09OQ0UobHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSxcbi1cdFx0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSArIGRlbHRhKTtcbitcdFx0XHRcdFx0cHJvdGVjdGVkW3RpZXJdICs9IG5yX3BhZ2VzO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRmbHVzaF9scnVfYmF0Y2goaGVhZCwgXHUwMDI2YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7XG4rXHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW25ld19nZW5dW3R5cGVdW3pvbmVdKTtcbiBcdFx0XHR9XG4tXG4gXHRcdFx0aWYgKCEtLXJlbWFpbmluZylcbi1cdFx0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4rXHRcdGZsdXNoX2xydV9iYXRjaChoZWFkLCBcdTAwMjZiYXRjaF9lbmQsIHRhcmdldF9saXN0KTtcbitcbitcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbb2xkX2dlbl1bdHlwZV1bem9uZV0sXG4rXHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdIC0gZGVsdGEpO1xuK1x0XHRXUklURV9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXSxcbitcdFx0XHQgICBscnVnZW4tXHUwMDNlbnJfcGFnZXNbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV0gKyBkZWx0YSk7XG4rXHRcdGZvciAoaW50IHRpZXIgPSAwOyB0aWVyIFx1MDAzYyBNQVhfTlJfVElFUlM7IHRpZXIrKylcbitcdFx0XHRXUklURV9PTkNFKGxydWdlbi1cdTAwM2Vwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0sXG4rXHRcdFx0XHQgICBscnVnZW4tXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdICsgcHJvdGVjdGVkW3RpZXJdKTtcbitcdFx0aWYgKCFyZW1haW5pbmcpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIGRvbmU6XG4gXHRyZXNldF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRydWUpO1xuQEAgLTQxNTEsMjAgKzQyMjAsMjggQEAgc3RhdGljIHZvaWQgc2V0X2luaXRpYWxfcHJpb3JpdHkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbFxuIFx0c2MtXHUwMDNlcHJpb3JpdHkgPSBjbGFtcChwcmlvcml0eSwgREVGX1BSSU9SSVRZIC8gMiwgREVGX1BSSU9SSVRZKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19nZW5fc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuLFxuK1x0XHRpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBzZXEpXG4re1xuK1x0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7XG4rXG4rXHRmb3IgKGludCB6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspXG4rXHRcdHNpemUgKz0gbWF4KFJFQURfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTtcbitcdHJldHVybiBzaXplO1xuK31cbitcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4tXHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xuK1x0aW50IHR5cGU7XG4gXHR1bnNpZ25lZCBsb25nIHNlcSwgdG90YWwgPSAwO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4gXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuIFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbiBcbiBcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3MpIHtcbi1cdFx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXErKykge1xuLVx0XHRcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbi1cdFx0XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKylcbi1cdFx0XHRcdHRvdGFsICs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7XG4tXHRcdH1cbitcdFx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXErKylcbitcdFx0XHR0b3RhbCArPSBscnV2ZWNfZ2VuX3NpemUobHJ1Z2VuLCB0eXBlLCBzZXEpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHRvdGFsO1xuQEAgLTQ3MjgsNyArNDgwNSw4IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhXG4gXG4gc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHRpZXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkcClcbitcdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwLFxuK1x0XHQgICAgICAgYm9vbCAqZXhoYXVzdGVkKVxuIHtcbiBcdGludCBpO1xuIFx0aW50IGdlbjtcbkBAIC00NzM5LDEyICs0ODE3LDE1IEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRpbnQgc2tpcHBlZCA9IDA7XG4gXHR1bnNpZ25lZCBsb25nIHJlbWFpbmluZyA9IG5yX3RvX3NjYW47XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbitcdGJvb2wgZWFybHlfc3RvcCA9IGZhbHNlO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKG5yX3RvX3NjYW4gXHUwMDNlIE1BWF9MUlVfQkFUQ0gpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KGxpc3QpKTtcbiBcbi1cdGlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpID09IE1JTl9OUl9HRU5TKVxuK1x0aWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgPT0gTUlOX05SX0dFTlMpIHtcbitcdFx0KmV4aGF1c3RlZCA9IHRydWU7XG4gXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4gXG5AQCAtNDc3NSw4ICs0ODU2LDEwIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRza2lwcGVkX3pvbmUgKz0gZGVsdGE7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGlmICghLS1yZW1haW5pbmcgfHwgbWF4KGlzb2xhdGVkLCBza2lwcGVkX3pvbmUpIFx1MDAzZT0gTUlOX0xSVV9CQVRDSClcbitcdFx0XHRpZiAoIS0tcmVtYWluaW5nIHx8IG1heChpc29sYXRlZCwgc2tpcHBlZF96b25lKSBcdTAwM2U9IE1JTl9MUlVfQkFUQ0gpIHtcbitcdFx0XHRcdGVhcmx5X3N0b3AgPSB0cnVlO1xuIFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdGlmIChza2lwcGVkX3pvbmUpIHtcbkBAIC00Nzg1LDggKzQ4NjgsMTAgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRza2lwcGVkICs9IHNraXBwZWRfem9uZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoIXJlbWFpbmluZyB8fCBpc29sYXRlZCBcdTAwM2U9IE1JTl9MUlVfQkFUQ0gpXG4rXHRcdGlmICghcmVtYWluaW5nIHx8IGlzb2xhdGVkIFx1MDAzZT0gTUlOX0xSVV9CQVRDSCkge1xuK1x0XHRcdGVhcmx5X3N0b3AgPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRpdGVtID0gUEdTQ0FOX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xuQEAgLTQ3OTcsNiArNDg4MiwxMyBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0c2Nhbm5lZCwgc2tpcHBlZCwgaXNvbGF0ZWQsXG4gXHRcdFx0XHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XG4gXG4rXHQvKlxuK1x0ICogSWYgd2UgZGlkbid0IHN0b3AgZWFybHksIGFsbCByZWNsYWltYWJsZSBmb2xpb3MgaW4gdGhlIGN1cnJlbnRcbitcdCAqIGdlbmVyYXRpb24gaGF2ZSBiZWVuIHNjYW5uZWQuIFdlIGFyZSBleGhhdXN0ZWQgaWYgdGhpcyBpcyB0aGUgbGFzdFxuK1x0ICogcmVjbGFpbWFibGUgZ2VuZXJhdGlvbi5cbitcdCAqL1xuK1x0KmV4aGF1c3RlZCA9ICFlYXJseV9zdG9wIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdICsgTUlOX05SX0dFTlMgPT0gbHJ1Z2VuLVx1MDAzZW1heF9zZXE7XG4gXHQqaXNvbGF0ZWRwID0gaXNvbGF0ZWQ7XG4gXHRyZXR1cm4gc2Nhbm5lZDtcbiB9XG5AQCAtNDgyNCw1MSArNDkxNiw5MCBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIHtcbiBcdHN0cnVjdCBjdHJsX3BvcyBzcCwgcHYgPSB7fTtcbitcdGludCBhbm9uX2dhaW4sIGZpbGVfZ2FpbjtcbiBcbiBcdGlmIChzd2FwcGluZXNzIFx1MDAzYz0gTUlOX1NXQVBQSU5FU1MgKyAxKVxuIFx0XHRyZXR1cm4gTFJVX0dFTl9GSUxFO1xuIFxuIFx0aWYgKHN3YXBwaW5lc3MgXHUwMDNlPSBNQVhfU1dBUFBJTkVTUylcbiBcdFx0cmV0dXJuIExSVV9HRU5fQU5PTjtcbitcbitcdC8qXG4rXHQgKiBBcHBseSBhIHF1YWRyYXRpYyBib29zdCBiYXNlZCBvbiB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgbmV1dHJhbFxuK1x0ICogYmFsYW5jZSBwb2ludCAoc3dhcHBpbmVzcyA9IE1BWF9TV0FQUElORVNTIC8gMikuXG4rXHQgKlxuK1x0ICogQSBsaW5lYXIgd2VpZ2h0IGlzIGVhc2lseSBvdmVyd2hlbG1lZCBieSBoaXN0b3JpY2FsIHJlZmF1bHQgY29zdFxuK1x0ICogd2hlbiBzd2FwcGluZXNzIGRldmlhdGVzIGZyb20gbmV1dHJhbC4gVGhlIHF1YWRyYXRpYyBzY2FsaW5nXG4rXHQgKiBhbXBsaWZpZXMgdGhlIHdlaWdodCBvZiB0aGUgcHJlZmVycmVkIHR5cGUgc21vb3RobHkuXG4rXHQgKi9cbitcdGlmIChzd2FwcGluZXNzIFx1MDAzYyBNQVhfU1dBUFBJTkVTUyAvIDIpIHtcbitcdFx0aW50IGRlbHRhID0gKE1BWF9TV0FQUElORVNTIC8gMikgLSBzd2FwcGluZXNzO1xuK1x0XHRpbnQgYm9vc3QgPSAoZGVsdGEgKiBkZWx0YSkgXHUwMDNlXHUwMDNlIDQ7XG4rXG4rXHRcdGFub25fZ2FpbiA9IHN3YXBwaW5lc3M7XG4rXHRcdGZpbGVfZ2FpbiA9IChNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MpICsgYm9vc3Q7XG4rXHR9IGVsc2Uge1xuK1x0XHRpbnQgZGVsdGEgPSBzd2FwcGluZXNzIC0gKE1BWF9TV0FQUElORVNTIC8gMik7XG4rXHRcdGludCBib29zdCA9IChkZWx0YSAqIGRlbHRhKSBcdTAwM2VcdTAwM2UgNDtcbitcbitcdFx0YW5vbl9nYWluID0gc3dhcHBpbmVzcyArIGJvb3N0O1xuK1x0XHRmaWxlX2dhaW4gPSBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3M7XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxuIFx0ICogd2hpY2ggdHlwZSB0byBzY2FuLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIGFub25fZ2FpbiwgXHUwMDI2c3ApO1xuK1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBmaWxlX2dhaW4sIFx1MDAyNnB2KTtcbiBcbiBcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShpbnQgc3dhcHBpbmVzcylcbit7XG4rXHRyZXR1cm4gc3dhcHBpbmVzcyA9PSBNSU5fU1dBUFBJTkVTUyB8fFxuK1x0ICAgICAgIHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MsXG4gXHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkLFxuIFx0XHRcdCAgaW50ICppc29sYXRlX3R5cGUsIGludCAqaXNvbGF0ZV9zY2FubmVkKVxuIHtcbi1cdGludCBpO1xuLVx0aW50IHRvdGFsX3NjYW5uZWQgPSAwO1xuK1x0Ym9vbCB0eXBlX2ZhbGxiYWNrX2FsbG93ZWQgPSAhaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShzd2FwcGluZXNzKTtcbiBcdGludCB0eXBlID0gZ2V0X3R5cGVfdG9fc2NhbihscnV2ZWMsIHN3YXBwaW5lc3MpO1xuK1x0aW50IHRvdGFsX3NjYW5uZWQgPSAwLCBzY2FubmVkLCB0aWVyO1xuK1x0Ym9vbCBleGhhdXN0ZWQsIHRyaWVkID0gZmFsc2U7XG4gXG4tXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7XG4tXHRcdGludCBzY2FubmVkO1xuLVx0XHRpbnQgdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xuK3JldHJ5OlxuK1x0dGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xuK1x0c2Nhbm5lZCA9IHNjYW5fZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsXG4rXHRcdFx0ICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQsIFx1MDAyNmV4aGF1c3RlZCk7XG4gXG4tXHRcdHNjYW5uZWQgPSBzY2FuX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLFxuLVx0XHRcdFx0ICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQpO1xuK1x0dG90YWxfc2Nhbm5lZCArPSBzY2FubmVkO1xuK1x0aWYgKCppc29sYXRlZCkge1xuK1x0XHQqaXNvbGF0ZV90eXBlID0gdHlwZTtcbitcdFx0Kmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7XG4rXHRcdHJldHVybiB0b3RhbF9zY2FubmVkO1xuK1x0fVxuIFxuLVx0XHR0b3RhbF9zY2FubmVkICs9IHNjYW5uZWQ7XG4tXHRcdGlmICgqaXNvbGF0ZWQpIHtcbi1cdFx0XHQqaXNvbGF0ZV90eXBlID0gdHlwZTtcbi1cdFx0XHQqaXNvbGF0ZV9zY2FubmVkID0gc2Nhbm5lZDtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHQvKlxuLVx0XHQgKiBJZiBzY2FubmVkIFx1MDAzZSAwIGFuZCBpc29sYXRlZCA9PSAwLCBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlXG4tXHRcdCAqIG90aGVyIHR5cGUsIGFzIHRoaXMgdHlwZSByZW1haW5zIHN1ZmZpY2llbnQuIEZhbGxpbmcgYmFja1xuLVx0XHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFzY2FubmVkKVxuLVx0XHRcdHR5cGUgPSAhdHlwZTtcbitcdC8qXG4rXHQgKiBXZSBhcmUgcnVubmluZyBvdXQgb2YgdGhlIGN1cnJlbnQgcmVjbGFpbSB0eXBlLiBGYWxsIGJhY2sgdG9cbitcdCAqIHRoZSBvdGhlciB0eXBlIGlmIGFsbG93ZWQuXG4rXHQgKi9cbitcdGlmIChleGhhdXN0ZWQgXHUwMDI2XHUwMDI2IHR5cGVfZmFsbGJhY2tfYWxsb3dlZCkge1xuK1x0XHR0eXBlID0gIXR5cGU7XG4rXHRcdHR5cGVfZmFsbGJhY2tfYWxsb3dlZCA9IGZhbHNlO1xuK1x0XHRnb3RvIHJldHJ5O1xuK1x0fVxuK1x0LypcbitcdCAqIFdlIGFyZSBub3QgZXhoYXVzdGVkLCBidXQgZmFpbGVkIHRvIGlzb2xhdGUgYW55IGZvbGlvcyBkdWUgdG9cbitcdCAqIHJhY2VzLiBHaXZlIHRoaXMgdHlwZSBvbmUgbW9yZSBjaGFuY2UgdG8gYXZvaWQgYSBsYXJnZXIgbG9vcC5cbitcdCAqL1xuK1x0aWYgKCFleGhhdXN0ZWQgXHUwMDI2XHUwMDI2ICF0cmllZCkge1xuK1x0XHR0cmllZCA9IHRydWU7XG4rXHRcdGdvdG8gcmV0cnk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcbkBAIC00OTcwLDIxICs1MTAxLDY3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0cmV0dXJuIHNjYW5uZWQ7XG4gfVxuIFxuK3N0YXRpYyBib29sIGxydV9nZW5faW1iYWxhbmNlZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcbitcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbit7XG4rXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbitcdHVuc2lnbmVkIGxvbmcgeW91bmcgPSAwLCBvbGQgPSAwLCBsYWcgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBpbmFjdGl2ZV9yYXRpbywgZ2I7XG4rXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuK1xuK1x0Lyogd2Ugc3RpbGwgaGF2ZSBlbm91Z2ggZ2VuZXJhdGlvbnMgdG8gcmVjbGFpbSAqL1xuK1x0aWYgKG1pbl9zZXFbdHlwZV0gKyBNSU5fTlJfR0VOUyBcdTAwM2MgbWF4X3NlcSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LypcbitcdCAqIFRyaWdnZXIgYWdpbmcgaWYgdGhlIHByZWZlcnJlZCB0eXBlIGlzIHJ1bm5pbmcgbG93IG9uIHJlY2xhaW1hYmxlXG4rXHQgKiBmb2xpb3MsIHByb3ZpZGVkIHRoZSBnZW5lcmF0aW9uIGxhZyBvZiB0aGUgb3RoZXIgdHlwZSByZW1haW5zIHNtYWxsXG4rXHQgKiBlbm91Z2ggdGhhdCBpbmNfbWluX3NlcSgpIGludHJvZHVjZXMgbmVnbGlnaWJsZSBvdmVyaGVhZFxuK1x0ICovXG4rXHRmb3IgKHVuc2lnbmVkIGxvbmcgc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFx1MDAzYz0gbWF4X3NlcTsgc2VxKyspIHtcbitcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gbHJ1dmVjX2dlbl9zaXplKGxydWdlbiwgdHlwZSwgc2VxKTtcbitcbitcdFx0aWYgKHNlcSArIE1JTl9OUl9HRU5TIFx1MDAzZSBtYXhfc2VxKVxuK1x0XHRcdHlvdW5nICs9IHNpemU7XG4rXHRcdGVsc2VcbitcdFx0XHRvbGQgKz0gc2l6ZTtcbitcdH1cbitcdGlmIChtaW5fc2VxWyF0eXBlXSArIE1BWF9OUl9HRU5TID09IG1heF9zZXEgKyAxKVxuK1x0XHRsYWcgKz0gbHJ1dmVjX2dlbl9zaXplKGxydWdlbiwgIXR5cGUsIG1pbl9zZXFbIXR5cGVdKTtcbitcbitcdC8qXG4rXHQgKiBCb3Jyb3cgdGhlIGFkYXB0aXZlIHJhdGlvIGZyb20gaW5hY3RpdmVfaXNfbG93KCksIGFuZCBzY2FsZVxuK1x0ICogaXQgYnkgc3FydChNQVhfTlJfR0VOUykgdG8gbWFrZSBhZ2luZyBsZXNzIGFnZ3Jlc3NpdmVcbitcdCAqL1xuK1x0Z2IgPSAoeW91bmcgKyBvbGQpIFx1MDAzZVx1MDAzZSAoMzAgLSBQQUdFX1NISUZUKTtcbitcdGluYWN0aXZlX3JhdGlvID0gZ2IgPyBpbnRfc3FydCgxMCAqIGdiICogTUFYX05SX0dFTlMpIDogTUFYX05SX0dFTlM7XG4rXHRyZXR1cm4geW91bmcgXHUwMDNlIG9sZCAqIGluYWN0aXZlX3JhdGlvIFx1MDAyNlx1MDAyNiAobGFnIFx1MDAzYyBNQVhfTFJVX0JBVENIIHx8XG4rXHQgICAgICAgKGlzX2V4dHJlbWVfc3dhcHBpbmVzcyhzd2FwcGluZXNzKSBcdTAwMjZcdTAwMjYgc2MtXHUwMDNlcHJpb3JpdHkgXHUwMDNlIDIpKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgc2hvdWxkX3J1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcbiBcdFx0XHQgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4rXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbiBcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4gXG4tXHQvKiBoYXZlIHRvIHJ1biBhZ2luZywgc2luY2UgZXZpY3Rpb24gaXMgbm90IHBvc3NpYmxlIGFueW1vcmUgKi9cbi1cdGlmIChldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSArIE1JTl9OUl9HRU5TIFx1MDAzZSBtYXhfc2VxKVxuK1x0LyogcnVuIGFnaW5nIGlmIHRoZSBwcmVmZXJyZWQgdHlwZSBpcyBleGhhdXN0ZWQgKi9cbitcdGlmIChtaW5fc2VxW3R5cGVdICsgTUlOX05SX0dFTlMgXHUwMDNlIG1heF9zZXEpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0LyogdHJ5IHRvIGF2b2lkIGFnaW5nLCBkbyBnZW50bGUgcmVjbGFpbSBhdCB0aGUgZGVmYXVsdCBwcmlvcml0eSAqL1xuLVx0aWYgKHNjLVx1MDAzZXByaW9yaXR5ID09IERFRl9QUklPUklUWSlcbitcdC8qXG4rXHQgKiBUcnkgdG8gYXZvaWQgYWdpbmcgYnkgZG9pbmcgZ2VudGxlIHJlY2xhaW0gYXQgdGhlIGRlZmF1bHRcbitcdCAqIHByaW9yaXR5LiBTa2lwIGdlbnRsZSByZWNsYWltIGZvciBleHRyZW1lIHN3YXBwaW5lc3MuXG4rXHQgKi9cbitcdGlmIChzYy1cdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkgXHUwMDI2XHUwMDI2ICFpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIGJldHRlciB0byBydW4gYWdpbmcgZXZlbiB0aG91Z2ggZXZpY3Rpb24gaXMgc3RpbGwgcG9zc2libGUgKi9cbi1cdHJldHVybiBldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSArIE1JTl9OUl9HRU5TID09IG1heF9zZXE7XG4rXHRpZiAoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdC8qIFJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgc2V2ZXJlbHkgaW1iYWxhbmNlZCBhY3Jvc3MgZ2VucyAqL1xuK1x0cmV0dXJuIGxydV9nZW5faW1iYWxhbmNlZChscnV2ZWMsIG1heF9zZXEsIHNjLCB0eXBlLCBzd2FwcGluZXNzKTtcbiB9XG4gXG4gc3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQxOjQ5LjgxNTAwNTg4NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MDI4NzQ1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNR0xSVSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0J3MgbWVzc2luZyB3aXRoIGBtbS92bXNjYW4uY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCdzIGFib3V0IE1HTFJVIOKAkyBNdWx0aS1HZW4gTFJVLiBMZXQncyBnZXQgcmlnaHQgaW50byB0aGUgc3BlY2lmaWNzLiBJdCdzIHRvdWNoaW5nIGEgbG90IG9mIGtleSBmdW5jdGlvbnM6IGBmb2xpb19pbmNfZ2VuYCwgYGluY19taW5fc2VxYCwgd2hpY2ggSSB1bmRlcnN0YW5kIGFyZSBmdW5kYW1lbnRhbCB0byB0aGUgZ2VuLWJhc2VkIExSVSBsb2dpYzsgYHNjYW5fZm9saW9zYCwgYGdldF90eXBlX3RvX3NjYW5gLCBhbmQgYGlzb2xhdGVfZm9saW9zYCAtLSBhbGwgY3J1Y2lhbCBmb3IgdGhlIHNjYW5uaW5nIHByb2Nlc3M7IGFuZCBgc2hvdWxkX3J1bl9hZ2luZ2AsIHJlbGF0ZWQgdG8gdGhlIGFnaW5nIG1lY2hhbmlzbXMuIFBsdXMsIGl0J3MgYWRkaW5nIHRoZXNlIG5ldyBmdW5jdGlvbnMsIGBscnVfZ2VuX2ltYmFsYW5jZWRgLCBgbHJ1dmVjX2dlbl9zaXplYCwgYGZsdXNoX2xydV9iYXRjaGAsIGFuZCBgaXNfZXh0cmVtZV9zd2FwcGluZXNzYCwgd2hpY2ggc3VnZ2VzdHMgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgYmFsYW5jaW5nIGFuZCBmbHVzaCBiZWhhdmlvciwgYW5kIGhvdyB3ZSBoYW5kbGUgZXh0cmVtZSBzd2FwcGluZy5cblxuRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSXMgTUdMUlUgZW5hYmxlZCBieSBkZWZhdWx0PyBPciBpcyB0aGVyZSBzb21lIHNwZWNpZmljIGNvbmZpZyBvcHRpb24gSSBuZWVkIHRvIGxvb2sgZm9yPyBJIGNhbid0IGp1c3QgZGl2ZSBpbnRvIHRoZSBjb2RlIGJsaW5kLiBJJ2xsIGhpdCBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3IgYExSVV9HRU5gIGluIGBtbS9LY29uZmlnYC4gVGhhdCdsbCBnaXZlIG1lIHRoZSBlbmFibGluZyBjb25kaXRpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgZmVlbCBmb3IgdGhlIHBhdGNoJ3Mgc2lnbmlmaWNhbmNlIGFuZCBpbnRlbmRlZCB1c2UgY2FzZS4gVGhpcyBnaXZlcyBhIGdyZWF0IG92ZXJ2aWV3IGFuZCB3aWxsIGhlbHAgdG8gZ3VpZGUgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDUyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDE6NTUuNjE3ODgzNzQ2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjM2ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzkyPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG4tLVxcbm1tL0tjb25maWctMTQwMi0jIG11bHRpLWdlbiBMUlUge1xcbm1tL0tjb25maWc6MTQwMzpjb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQwNC1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDExLVxcbm1tL0tjb25maWc6MTQxMjpjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDEzLVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDE3LVxcbm1tL0tjb25maWc6MTQxODpjb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQxOS1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MjYtXFxubW0vS2NvbmZpZzoxNDI3OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbm1tL0tjb25maWctMTQyOC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQxOjU1LjY2MzEyNTYzNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODI2ODkzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuT2theSwgc28gYExSVV9HRU5gIGlzIHRoZSBwaWVjZSBvZiB0aGUgY29uZmlnIHdlJ3JlIGZvY3VzaW5nIG9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBzZXR0aW5ncyBgTFJVX0dFTmAgcmVsaWVzIG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpcyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgYW55IHBvdGVudGlhbCBjYXNjYWRpbmcgZWZmZWN0cyBvZiBjaGFuZ2VzIHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Nzg5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDE6NTguNTQ1ODE3Mzg2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODMxMDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzkyPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG4tLVxcbm1tL0tjb25maWctMTQwMi0jIG11bHRpLWdlbiBMUlUge1xcbm1tL0tjb25maWc6MTQwMzpjb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQwNC1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDExLVxcbm1tL0tjb25maWc6MTQxMjpjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDEzLVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDE3LVxcbm1tL0tjb25maWc6MTQxODpjb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQxOS1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MjYtXFxubW0vS2NvbmZpZzoxNDI3OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbm1tL0tjb25maWctMTQyOC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQxOjU4LjU5MDY1NTE3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTk1Njk5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipVbnBhY2tpbmcgdGhlIGBMUlVfR0VOYCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgYmVmb3JlIEkgZGl2ZSBpbiwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IGBMUlVfR0VOYCBhY3R1YWxseSByZWxpZXMgb24uIEkgY2FuJ3QganVzdCBzdGFydCB0d2Vha2luZyBvciBhbmFseXppbmcgaXQgd2l0aG91dCB1bmRlcnN0YW5kaW5nIGl0cyBwbGFjZSBpbiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuIFdoYXQgb3RoZXIgY29tcG9uZW50cywgbGlicmFyaWVzLCBvciBkYXRhIHN0cnVjdHVyZXMgZG9lcyB0aGlzIHRoaW5nIGRlcGVuZCBvbj8gQXJlIHRoZXJlIGFueSB1cHN0cmVhbSBlZmZlY3RzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIHNwZWNpZmljIHZlcnNpb25zIG9yIGNvbmZpZ3VyYXRpb25zPyBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmN5IHRyZWUgaXMgZnVuZGFtZW50YWwgYmVmb3JlIGFueSBzZXJpb3VzIGFuYWx5c2lzIG9yIG1vZGlmaWNhdGlvbiBjYW4gaGFwcGVuLiBJIG5lZWQgdG8gZW5zdXJlIEkgZG9uJ3QgaW50cm9kdWNlIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzIGJ5LCBmb3IgZXhhbXBsZSwgbWlzc2luZyBhIGNyaXRpY2FsIGxpYnJhcnkgdGhhdCdzIHVzZWQgc29tZXdoZXJlLiBJdCBhbGwgaGFuZ3MgdG9nZXRoZXIsIHNvIGxldCdzIHN0YXJ0IHdpdGggYSBzb2xpZCBmb3VuZGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTY1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDI6MDIuMTEwMjI4MzM2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQwMDpcXHRcXHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXFxuMTQwMTpcXHRcXG4xNDAyOlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTQwMzpcXHRjb25maWcgTFJVX0dFTlxcbjE0MDQ6XFx0XFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4xNDA1OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTQwNjpcXHRcXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxuMTQwNzpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcXG4xNDA4OlxcdFxcdGhlbHBcXG4xNDA5OlxcdFxcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXFxuMTQxMDpcXHRcXHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cXG4xNDExOlxcdFxcbjE0MTI6XFx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbjE0MTM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuMTQxNDpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDE1OlxcdFxcdGhlbHBcXG4xNDE2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxcbjE0MTc6XFx0XFxuMTQxODpcXHRjb25maWcgTFJVX0dFTl9TVEFUU1xcbjE0MTk6XFx0XFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbjE0MjA6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQyMTpcXHRcXHRoZWxwXFxuMTQyMjpcXHRcXHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xcbjE0MjM6XFx0XFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxcbjE0MjQ6XFx0XFxuMTQyNTpcXHRcXHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxcbjE0MjY6XFx0XFxuMTQyNzpcXHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG4xNDI4OlxcdFxcdGRlZl9ib29sIHlcXG4xNDI5OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTiBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDI6MDIuMTEwMzM5NDM2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTczMzMyNTQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIE1HTFJVJ3MgQ29yZSBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIHNvIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAg4oCTIHRob3NlIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZ290IGl0LiBOb3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1hcCBvdXQgd2hpY2ggZnVuY3Rpb25zIGhhdmUgYmVlbiB0b3VjaGVkIGluIHRoaXMgY2hhbmdlLCBzcGVjaWZpY2FsbHkuXG5cbkxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGBmb2xpb19pbmNfZ2VuYCwgYF9fZm9saW9faW5jX2dlbmAsIGBpbmNfbWluX3NlcWAsIGBzY2FuX2ZvbGlvc2AsIGBnZXRfdHlwZV90b19zY2FuYCwgYGlzb2xhdGVfZm9saW9zYCwgYGV2aWN0X2ZvbGlvc2AsIGBscnVfZ2VuX2ltYmFsYW5jZWRgLCBhbmQgYHNob3VsZF9ydW5fYWdpbmdgLiBUaGVzZSBhcmUgYWxsIHByZXR0eSBjcml0aWNhbCDigJMgdGhlIGhlYXJ0IG9mIE1HTFJVJ3MgbWVtb3J5IG1hbmFnZW1lbnQsIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSB0byBiZSByZWFjaGVkIGR1cmluZyBzdGFuZGFyZCBvcGVyYXRpb24uIERlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBzZWUgd2hhdCB3ZSBjYW4gc2hha2UgbG9vc2UuXG5cbk5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50IGVudHJ5IHBvaW50cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSAqZGlyZWN0bHkqIGFjY2Vzc2libGUgZnJvbSBlbHNld2hlcmUsIGlkZWFsbHkgbm9uLXN0YXRpYyBvbmVzLiBBaGEsIGl0IHNlZW1zIHRoZXkgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBpcyB0eXBpY2FsbHkgZ29pbmcgdG8gbGltaXQgZGlyZWN0IGZ1enppbmcgb3Bwb3J0dW5pdGllcy4gTm90IGEgZGVhbCBicmVha2VyLCBidXQgaXQgbWVhbnMgSSBuZWVkIHRvIGFkanVzdCBteSBhcHByb2FjaC4gVGhlIG5leHQgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZSB0aGF0IGNhbGwgdGhlc2UgY29yZSBmdW5jdGlvbnM/IFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZW5lcmd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODMxLCJPdXRwdXRUb2tlbnMiOjYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDI6MDcuODQzNjY3Njk5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgxOTA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIoaW5jX21pbl9zZXF8c2Nhbl9mb2xpb3N8Z2V0X3R5cGVfdG9fc2Nhbnxpc29sYXRlX2ZvbGlvc3xldmljdF9mb2xpb3N8c2hvdWxkX3J1bl9hZ2luZylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9Mjc5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19leGVjX2ZpbGVfZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4NC1cXG5tbS92bXNjYW4uYzoyODU6LyogU2VlIGdldF90eXBlX3RvX3NjYW4oKTogdGhlc2UgdmFsdWVzIGFsd2F5cyBzZWxlY3QgRklMRSBvciBBTk9OICovXFxubW0vdm1zY2FuLmMtMjg2LXN0YXRpYyBpbmxpbmUgYm9vbCBpc19leHRyZW1lX3N3YXBwaW5lc3MoaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYz0zOTMzPXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9scnVfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqKmJhdGNoX2VuZCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5NDUtXFxubW0vdm1zY2FuLmM6Mzk0NjpzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcXG5tbS92bXNjYW4uYy0zOTQ3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwMjEtXFxubW0vdm1zY2FuLmM6NDAyMjpzdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG5tbS92bXNjYW4uYy00MDIzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwNzQ9c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00MDk1LVxcbm1tL3Ztc2Nhbi5jOjQwOTY6XFx0XFx0aWYgKGluY19taW5fc2VxKGxydXZlYywgdHlwZSwgc3dhcHBpbmVzcykpXFxubW0vdm1zY2FuLmMtNDA5Ny1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ3ODI9c3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDgwNS1cXG5tbS92bXNjYW4uYzo0ODA2OnN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxubW0vdm1zY2FuLmMtNDgwNy1cXHRcXHQgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCB0eXBlLCBpbnQgdGllcixcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ4OTY9c3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5MTUtXFxubW0vdm1zY2FuLmM6NDkxNjpzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG5tbS92bXNjYW4uYy00OTE3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ5NTk9c3RhdGljIGlubGluZSBib29sIGlzX3NpbmdsZV90eXBlX3JlY2xhaW0oaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00OTY0LVxcbm1tL3Ztc2Nhbi5jOjQ5NjU6c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00OTY2LVxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLFxcbi0tXFxubW0vdm1zY2FuLmMtNDk3MC1cXHRib29sIHR5cGVfZmFsbGJhY2tfYWxsb3dlZCA9ICFpc19zaW5nbGVfdHlwZV9yZWNsYWltKHN3YXBwaW5lc3MpO1xcbm1tL3Ztc2Nhbi5jOjQ5NzE6XFx0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNDk3Mi1cXHRpbnQgdG90YWxfc2Nhbm5lZCA9IDAsIHNjYW5uZWQsIHRpZXI7XFxuLS1cXG5tbS92bXNjYW4uYy00OTc2LVxcdHRpZXIgPSBnZXRfdGllcl9pZHgobHJ1dmVjLCB0eXBlKTtcXG5tbS92bXNjYW4uYzo0OTc3OlxcdHNjYW5uZWQgPSBzY2FuX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLFxcbm1tL3Ztc2Nhbi5jLTQ5NzgtXFx0XFx0XFx0ICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQsIFxcdTAwMjZleGhhdXN0ZWQpO1xcbi0tXFxubW0vdm1zY2FuLmMtNTAwNy1cXG5tbS92bXNjYW4uYzo1MDA4OnN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL3Ztc2Nhbi5jLTUwMDktXFx0XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtNTAyNy1cXHQvKiBJbiBjYXNlIGZvbGlvIGRlbGV0aW9uIGxlZnQgZW1wdHkgb2xkIGdlbnMsIGZsdXNoIHRoZW0gKi9cXG5tbS92bXNjYW4uYzo1MDI4OlxcdHRyeV90b19pbmNfbWluX3NlcShscnV2ZWMsIHN3YXBwaW5lc3MpO1xcbm1tL3Ztc2Nhbi5jLTUwMjktXFxubW0vdm1zY2FuLmM6NTAzMDpcXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcXG5tbS92bXNjYW4uYy01MDMxLVxcdFxcdFxcdFxcdCBcXHUwMDI2bGlzdCwgXFx1MDAyNmlzb2xhdGVkLCBcXHUwMDI2dHlwZSwgXFx1MDAyNnR5cGVfc2Nhbm5lZCk7XFxuLS1cXG5tbS92bXNjYW4uYy01MDM1LVxcdGlmIChzY2FubmVkKVxcbm1tL3Ztc2Nhbi5jOjUwMzY6XFx0XFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTAzNy1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxMDQ9c3RhdGljIGJvb2wgbHJ1X2dlbl9pbWJhbGFuY2VkKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNTExOC1cXHQgKiBmb2xpb3MsIHByb3ZpZGVkIHRoZSBnZW5lcmF0aW9uIGxhZyBvZiB0aGUgb3RoZXIgdHlwZSByZW1haW5zIHNtYWxsXFxubW0vdm1zY2FuLmM6NTExOTpcXHQgKiBlbm91Z2ggdGhhdCBpbmNfbWluX3NlcSgpIGludHJvZHVjZXMgbmVnbGlnaWJsZSBvdmVyaGVhZFxcbm1tL3Ztc2Nhbi5jLTUxMjAtXFx0ICovXFxuLS1cXG5tbS92bXNjYW4uYy01MTQxLVxcbm1tL3Ztc2Nhbi5jOjUxNDI6c3RhdGljIGJvb2wgc2hvdWxkX3J1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcXG5tbS92bXNjYW4uYy01MTQzLVxcdFxcdFxcdCAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxcbm1tL3Ztc2Nhbi5jLTUxNDQte1xcbm1tL3Ztc2Nhbi5jOjUxNDU6XFx0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTE0Ni1cXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xcbi0tXFxubW0vdm1zY2FuLmM9NTIzMz1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI0OS1cXG5tbS92bXNjYW4uYzo1MjUwOlxcdFxcdGlmIChzaG91bGRfcnVuX2FnaW5nKGxydXZlYywgbWF4X3NlcSwgc2MsIHN3YXBwaW5lc3MpKSB7XFxubW0vdm1zY2FuLmMtNTI1MS1cXHRcXHRcXHRpZiAodHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZmFsc2UpKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI1Ni1cXHRcXHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcXG5tbS92bXNjYW4uYzo1MjU3OlxcdFxcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcXG5tbS92bXNjYW4uYy01MjU4LVxcdFxcdGlmICghZGVsdGEpXFxuLS1cXG5tbS92bXNjYW4uYz01ODYwPXN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNTg4MC1cXHRcXHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTg4MTpcXHRcXHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXFxubW0vdm1zY2FuLmMtNTg4Mi1cXHRcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDI6MDcuODkxNDkyNjk3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NDY1Mjk4ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBMUlUgVmVjdG9yIFNocmlua2FnZSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYCwgYW5kIEkgc2VlIHRoZXkgY2FsbCBzb21lIG90aGVyIGZ1bmN0aW9ucy4gTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggb2YgYHRyeV90b19zaHJpbmtfbHJ1dmVjYC4gV2hlcmUgZG9lcyAqaXQqIGdldCBjYWxsZWQ/IFVuZGVyc3RhbmRpbmcgaXRzIHVwc3RyZWFtIGRlcGVuZGVuY2llcyBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IHRoZSBiaWdnZXIgcGljdHVyZSBvZiBob3cgdGhpcyBMUlUgdmVjdG9yIHNocmlua2FnZSBpcyBpbml0aWF0ZWQgd2l0aGluIHRoaXMgc3lzdGVtLiBJdCdzIGEgY2xhc3NpYyBkZWJ1Z2dpbmcgYW5kIHBlcmZvcm1hbmNlIGFuYWx5c2lzIHRlY2huaXF1ZTogZm9sbG93IHRoZSBjYWxsIGNoYWluIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gTGV0J3Mgc2VlIHdoYXQncyBjYWxsaW5nIHRoYXQgZnVuY3Rpb24sIHNoYWxsIHdlPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBvcGVyYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNjgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0MjoxMy44MzgwMjYwOTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDA4NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTUxOTg9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMzItICovXFxubW0vdm1zY2FuLmM6NTIzMzpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyMzQte1xcbi0tXFxubW0vdm1zY2FuLmM9NTI3OD1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyOTctXFxubW0vdm1zY2FuLmM6NTI5ODpcXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUyOTktXFxuLS1cXG5tbS92bXNjYW4uYz01Mzg5PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTQwMS1cXG5tbS92bXNjYW4uYzo1NDAyOlxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01NDAzLVxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDI6MTMuODgzNDQ0NzAyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTg2OTc1NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgTFJVIFNocmlua2FnZSBQcm9jZXNzKipcblxuUmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyB3aXRoaW4gdGhpcyBMUlUgKExlYXN0IFJlY2VudGx5IFVzZWQpIGNhY2hlIHNocmlua2luZyBtZWNoYW5pc20uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGFuZCBgc2hyaW5rX29uZWAgYm90aCBzZWVtIHRvIGV2ZW50dWFsbHkgdHJpZ2dlciBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLiBUaGF0IHN1Z2dlc3RzIGEgc2hhcmVkIHJlc3BvbnNpYmlsaXR5LCBwb3RlbnRpYWxseSBhIGNlbnRyYWxpemVkIGNvbnRyb2wgcG9pbnQgZm9yIHRoZSBhY3R1YWwgc2hyaW5raW5nIG9wZXJhdGlvbi5cblxuTm93LCB3aGVyZSBkb2VzIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIG9yaWdpbmF0ZT8gSXQncyBrZXkgdG8gdHJhY2UgaXRzIGNhbGwgc3RhY2suIE15IGh1bmNoIGlzIHRoYXQgaXQncyBwcm9iYWJseSBjYWxsZWQgZnJvbSBgc2hyaW5rX2xydXZlY2Agb3Igc29tZXRoaW5nIGFuYWxvZ291cy4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGNvbm5lY3Rpb24uIEtub3dpbmcgd2hlcmUgdGhlIHNocmlua2luZyBwcm9jZXNzIGJlZ2lucyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGJlaGF2aW91ciBhbmQgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWlzYXRpb24uIFRpbWUgdG8gZGlnIGRlZXBlciBhbmQgc2VlIGlmIG15IGFzc3VtcHRpb24gaG9sZHMgdHJ1ZS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNhbGxpbmcgY29udGV4dCBvZiBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCB0byBjb25maXJtIHRoZSBpbml0aWFsIHRyaWdnZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzU3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDI6MTcuOTgyMTQ0NTM2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA4OTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX3Nocmlua19scnV2ZWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTMxOT1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzODgtXFxubW0vdm1zY2FuLmM6NTM4OTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01MzkwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYxMzM9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxMzctXFxubW0vdm1zY2FuLmM6NjEzODpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02MTM5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYxNTA9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjE2MS1cXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFxcdTAwMjZcXHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XFxubW0vdm1zY2FuLmM6NjE2MjpcXHRcXHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNjE2My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDI6MTguMDI3MjM5MDk0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTA5MjYzNjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgbW0vdm1zY2FuLmNgIGZvciBNR0xSVSBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbW0vdm1zY2FuLmNgIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIG1vc3QgcmVsZXZhbnQsIHBhcnRpY3VsYXJseSBmb3IgTUdMUlUuIFRoZSBmaXJzdCB0aGluZyBJIHNwb3QgaXMgYHNocmlua19scnV2ZWNgLCBidXQgd2FpdCwgdGhhdCdzIHN0YXRpYyEgVGhhdCBwcm9iYWJseSBtZWFucyBpdCdzIG5vdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBgRm9jdXNTeW1ib2xzYCwgYXMgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljIGVudHJ5IHBvaW50cy5cblxuTGV0J3Mgc2Vl4oCmIE9rYXksIEkgc2VlIGBzaHJpbmtfbm9kZWAsIGBzaHJpbmtfem9uZXNgLCBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgLCBhbmQgYGtzd2FwZGAg4oCTIGFsbCBjbGFzc2ljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgY2F1dGlvbiBhZ2FpbnN0IGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgYmlhc2luZyB0aGUgdGVzdCBkaXN0cmlidXRpb24sIHNvIEkgbmVlZCB0byBiZSBjYXJlZnVsIGhlcmUuIElmIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgYXJlIGhhcHBlbmluZyAqaW5zaWRlKiBvbmUgb2YgdGhlc2UgYWxyZWFkeSBoZWF2aWx5IHNjcnV0aW5pemVkIGZ1bmN0aW9ucywgbGlrZSBgc2hyaW5rX2xydXZlY2AgZm9yIGV4YW1wbGUsIHRoZW4gaW5jbHVkaW5nIHRoZW0gaW4gYEZvY3VzU3ltYm9sc2AgbWlnaHQgbm90IGJlIHRoZSBiZXN0IGFwcHJvYWNoLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiBpZGVudGlmeWluZyBzcGVjaWZpYyBlbnRyeSBwb2ludHMgcmVsYXRlZCB0byBNR0xSVSdzIHVuaXF1ZSBmdW5jdGlvbmFsaXRpZXMuIEkgbmVlZCB0byBjaGVjayBhbmQgZW5zdXJlIHRoYXQgdGhlcmUgYXJlIHNwZWNpZmljIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggTUdMUlUncyBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MzIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDI6NTUuMTM2NTA4MzQ4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTI4MTQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc0NCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vdm1zY2FuLmM9ODQ2PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04NTgtICovXFxubW0vdm1zY2FuLmM6ODU5OnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG5tbS92bXNjYW4uYy04NjAte1xcbi0tXFxubW0vdm1zY2FuLmMtODgwLSNlbHNlXFxubW0vdm1zY2FuLmM6ODgxOnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG5tbS92bXNjYW4uYy04ODIte1xcbi0tXFxubW0vdm1zY2FuLmM9ODg3PXN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vdm1zY2FuLmMtOTExLVxcbm1tL3Ztc2Nhbi5jOjkxMjpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpIHtcXG5tbS92bXNjYW4uYy05MTMtXFx0XFx0aWYgKCFyZWZlcmVuY2VkX3B0ZXMpXFxuLS1cXG5tbS92bXNjYW4uYy05MTUtXFxubW0vdm1zY2FuLmM6OTE2OlxcdFxcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcXG5tbS92bXNjYW4uYy05MTctXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9MjI5OT1zdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIzMDUtXFxubW0vdm1zY2FuLmM6MjMwNjpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXFxubW0vdm1zY2FuLmMtMjMwNy1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYz0yNzEzPURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xcbm1tL3Ztc2Nhbi5jLTI3MTQtI2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcXG5tbS92bXNjYW4uYzoyNzE1OkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbm1tL3Ztc2Nhbi5jOjI3MTY6I2RlZmluZSBnZXRfY2FwKGNhcClcXHRzdGF0aWNfYnJhbmNoX2xpa2VseShcXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXFxubW0vdm1zY2FuLmMtMjcxNy0jZWxzZVxcbm1tL3Ztc2Nhbi5jOjI3MTg6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfRkFMU0UobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbm1tL3Ztc2Nhbi5jOjI3MTk6I2RlZmluZSBnZXRfY2FwKGNhcClcXHRzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcXG5tbS92bXNjYW4uYy0yNzIwLSNlbmRpZlxcbi0tXFxubW0vdm1zY2FuLmM9MjgwNz1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgzNi0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcXG5tbS92bXNjYW4uYzoyODM3OiAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS5cXG5tbS92bXNjYW4uYy0yODM4LSAqXFxuLS1cXG5tbS92bXNjYW4uYz0yODU0PXN0YXRpYyB2b2lkIGdldF9pdGVtX2tleSh2b2lkICppdGVtLCBpbnQgKmtleSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4NjMtXFxubW0vdm1zY2FuLmM6Mjg2NDpzdGF0aWMgYm9vbCB0ZXN0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbm1tL3Ztc2Nhbi5jLTI4NjUtXFx0XFx0XFx0ICAgICAgdm9pZCAqaXRlbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4NzktXFxubW0vdm1zY2FuLmM6Mjg4MDpzdGF0aWMgdm9pZCB1cGRhdGVfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEsXFxubW0vdm1zY2FuLmMtMjg4MS1cXHRcXHRcXHRcXHR2b2lkICppdGVtKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg5OC1cXG5tbS92bXNjYW4uYzoyODk5OnN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbm1tL3Ztc2Nhbi5jLTI5MDAte1xcbi0tXFxubW0vdm1zY2FuLmMtMjkyMC1cXG5tbS92bXNjYW4uYzoyOTIxOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtMjkyMi17XFxubW0vdm1zY2FuLmM6MjkyMzpcXHRzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCBtbV9saXN0ID0ge1xcbm1tL3Ztc2Nhbi5jLTI5MjQtXFx0XFx0LmZpZm8gPSBMSVNUX0hFQURfSU5JVChtbV9saXN0LmZpZm8pLFxcbi0tXFxubW0vdm1zY2FuLmMtMjkzNi1cXG5tbS92bXNjYW4uYzoyOTM3OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy0yOTM4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NDEtXFxubW0vdm1zY2FuLmM6Mjk0MjpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0yOTQzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NDYtXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjI5NDc6XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKHdhbGstXFx1MDAzZWxydXZlYyk7XFxubW0vdm1zY2FuLmMtMjk0OC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NjAtXFxubW0vdm1zY2FuLmM6Mjk2MTp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5NjIte1xcbi0tXFxubW0vdm1zY2FuLmMtMjk2NC1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcXG5tbS92bXNjYW4uYzoyOTY1OlxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxubW0vdm1zY2FuLmMtMjk2Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NzUtXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYzoyOTc2OlxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTI5NzctXFxuLS1cXG5tbS92bXNjYW4uYy0yOTg3LVxcbm1tL3Ztc2Nhbi5jOjI5ODg6dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS92bXNjYW4uYy0yOTg5LXtcXG5tbS92bXNjYW4uYy0yOTkwLVxcdGludCBuaWQ7XFxubW0vdm1zY2FuLmM6Mjk5MTpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0O1xcbm1tL3Ztc2Nhbi5jLTI5OTItXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMDUtXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYzozMDA2OlxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTMwMDctXFxuLS1cXG5tbS92bXNjYW4uYy0zMDI3LSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYzozMDI4OnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTMwMjkte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA1MS1cXG5tbS92bXNjYW4uYzozMDUyOlxcdGxydV9nZW5fZGVsX21tKG1tKTtcXG5tbS92bXNjYW4uYzozMDUzOlxcdGxydV9nZW5fYWRkX21tKG1tKTtcXG5tbS92bXNjYW4uYy0zMDU0LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNTgtXFxubW0vdm1zY2FuLmM6MzA1OTpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTMwNjAte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA2My1cXG5tbS92bXNjYW4uYzozMDY0OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy0zMDY1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNjgtXFxubW0vdm1zY2FuLmM6MzA2OTpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0zMDcwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNzUtXFxubW0vdm1zY2FuLmM6MzA3NjpzdGF0aWMgdm9pZCByZXNldF9tbV9zdGF0cyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBib29sIGxhc3QpXFxubW0vdm1zY2FuLmMtMzA3Ny17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDgwLVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IHdhbGstXFx1MDAzZWxydXZlYztcXG5tbS92bXNjYW4uYzozMDgxOlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTMwODItXFxuLS1cXG5tbS92bXNjYW4uYy0zMTAwLVxcbm1tL3Ztc2Nhbi5jOjMxMDE6c3RhdGljIGJvb2wgaXRlcmF0ZV9tbV9saXN0KHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBtbV9zdHJ1Y3QgKippdGVyKVxcbm1tL3Ztc2Nhbi5jLTMxMDIte1xcbi0tXFxubW0vdm1zY2FuLmMtMzEwNy1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG5tbS92bXNjYW4uYzozMTA4OlxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxubW0vdm1zY2FuLmM6MzEwOTpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG5tbS92bXNjYW4uYy0zMTEwLVxcbi0tXFxubW0vdm1zY2FuLmM9MzE2NT1zdGF0aWMgYm9vbCBpdGVyYXRlX21tX2xpc3Rfbm93YWxrKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0zMTY4LVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjMxNjk6XFx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcXG5tbS92bXNjYW4uYzozMTcwOlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTMxNzEtXFxuLS1cXG5tbS92bXNjYW4uYz0zMjE3PXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxcbi0tXFxubW0vdm1zY2FuLmMtMzIyMC1cXHRpbnQgaTtcXG5tbS92bXNjYW4uYzozMjIxOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtMzIyMi1cXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuLS1cXG5tbS92bXNjYW4uYz0zMjM2PXN0YXRpYyB2b2lkIHJlc2V0X2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGJvb2wgY2FycnlvdmVyKVxcbi0tXFxubW0vdm1zY2FuLmMtMzIzOC1cXHRpbnQgaGlzdCwgdGllcjtcXG5tbS92bXNjYW4uYzozMjM5OlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtMzI0MC1cXHRib29sIGNsZWFyID0gY2FycnlvdmVyID8gTlJfSElTVF9HRU5TID09IDEgOiBOUl9ISVNUX0dFTlMgXFx1MDAzZSAxO1xcbi0tXFxubW0vdm1zY2FuLmM9MzI4OD1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMDUtXFx0ZG8ge1xcbm1tL3Ztc2Nhbi5jOjMzMDY6XFx0XFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xcbm1tL3Ztc2Nhbi5jLTMzMDctXFx0XFx0aWYgKCEob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTMzNDU9c3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzNDctXFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XFxubW0vdm1zY2FuLmM6MzM0ODpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jOjMzNDk6XFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmMtMzM1MC1cXHRib29sIGdlbl9pbmNyZWFzZWQ7XFxuLS1cXG5tbS92bXNjYW4uYy0zMzUzLVxcdGlmIChnZW5faW5jcmVhc2VkKVxcbm1tL3Ztc2Nhbi5jOjMzNTQ6XFx0XFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG5tbS92bXNjYW4uYy0zMzU1LVxcdHJldHVybiBuZXdfZ2VuO1xcbi0tXFxubW0vdm1zY2FuLmMtMzM1Ny1cXG5tbS92bXNjYW4uYzozMzU4OnN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vdm1zY2FuLmMtMzM1OS1cXHRcXHRcXHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXFxuLS1cXG5tbS92bXNjYW4uYy0zMzczLVxcbm1tL3Ztc2Nhbi5jOjMzNzQ6c3RhdGljIHZvaWQgcmVzZXRfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbm1tL3Ztc2Nhbi5jLTMzNzUte1xcbi0tXFxubW0vdm1zY2FuLmMtMzM3Ny1cXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBscnV2ZWNfbGl2ZV9sb2NrX2lycSh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjMzNzg6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zMzc5LVxcbi0tXFxubW0vdm1zY2FuLmMtMzM5Mi1cXG5tbS92bXNjYW4uYzozMzkzOlxcdFxcdGlmIChscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikpXFxubW0vdm1zY2FuLmMtMzM5NC1cXHRcXHRcXHRscnUgKz0gTFJVX0FDVElWRTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM0MDE9c3RhdGljIGludCBzaG91bGRfc2tpcF92bWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICphcmdzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzQwNC1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGFyZ3MtXFx1MDAzZXZtYTtcXG5tbS92bXNjYW4uYzozNDA1OlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbm1tL3Ztc2Nhbi5jLTM0MDYtXFxuLS1cXG5tbS92bXNjYW4uYz0zNTM5PXN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXFxuLS1cXG5tbS92bXNjYW4uYy0zNTQ2LVxcbm1tL3Ztc2Nhbi5jOjM1NDc6c3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vdm1zY2FuLmMtMzU0OC1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM1NjMtXFx0XFx0XFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xcbm1tL3Ztc2Nhbi5jOjM1NjQ6XFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hLVxcdTAwM2VmbGFncykpIHtcXG5tbS92bXNjYW4uYy0zNTY1LVxcdFxcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM1NzE9c3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bXNjYW4uYy0zNTgxLVxcdHN0cnVjdCBmb2xpbyAqbGFzdCA9IE5VTEw7XFxubW0vdm1zY2FuLmM6MzU4MjpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cXHUwMDNlcHJpdmF0ZTtcXG5tbS92bXNjYW4uYy0zNTgzLVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbi0tXFxubW0vdm1zY2FuLmMtMzU4NS1cXHRERUZJTkVfTUFYX1NFUSh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjM1ODY6XFx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XFxubW0vdm1zY2FuLmMtMzU4Ny1cXHR1bnNpZ25lZCBpbnQgbnI7XFxuLS1cXG5tbS92bXNjYW4uYz0zNjYyPXN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vdm1zY2FuLmMtMzY2OS1cXHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xcbm1tL3Ztc2Nhbi5jOjM2NzA6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxubW0vdm1zY2FuLmMtMzY3MS1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM2NzMtXFx0REVGSU5FX01BWF9TRVEod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG5tbS92bXNjYW4uYzozNjc0OlxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbm1tL3Ztc2Nhbi5jLTM2NzUtXFxuLS1cXG5tbS92bXNjYW4uYz0zNzUwPXN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1zY2FuLmMtMzc1OS1cXHR1bnNpZ25lZCBsb25nIGZpcnN0ID0gLTE7XFxubW0vdm1zY2FuLmM6Mzc2MDpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cXHUwMDNlcHJpdmF0ZTtcXG5tbS92bXNjYW4uYzozNzYxOlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZSh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTM3NjItXFxuLS1cXG5tbS92bXNjYW4uYz0zODIzPXN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bXNjYW4uYy0zODI5LVxcdHVuc2lnbmVkIGxvbmcgbmV4dDtcXG5tbS92bXNjYW4uYzozODMwOlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbm1tL3Ztc2Nhbi5jLTM4MzEtXFxuLS1cXG5tbS92bXNjYW4uYy0zODY0LVxcbm1tL3Ztc2Nhbi5jOjM4NjU6c3RhdGljIHZvaWQgd2Fsa19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0zODY2LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4OTktXFxubW0vdm1zY2FuLmM6MzkwMDpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqc2V0X21tX3dhbGsoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmb3JjZV9hbGxvYylcXG5tbS92bXNjYW4uYy0zOTAxLXtcXG5tbS92bXNjYW4uYzozOTAyOlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBjdXJyZW50LVxcdTAwM2VyZWNsYWltX3N0YXRlLVxcdTAwM2VtbV93YWxrO1xcbm1tL3Ztc2Nhbi5jLTM5MDMtXFxuLS1cXG5tbS92bXNjYW4uYz0zOTIwPXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcXG5tbS92bXNjYW4uYy0zOTIxLXtcXG5tbS92bXNjYW4uYzozOTIyOlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBjdXJyZW50LVxcdTAwM2VyZWNsYWltX3N0YXRlLVxcdTAwM2VtbV93YWxrO1xcbm1tL3Ztc2Nhbi5jLTM5MjMtXFxuLS1cXG5tbS92bXNjYW4uYz0zOTQ2PXN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzk0OS1cXHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSCAvIChpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykgPyAyIDogOCk7XFxubW0vdm1zY2FuLmM6Mzk1MDpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTM5NTEtXFx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbm1tL3Ztc2Nhbi5jOjM5NTI6XFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmMtMzk1My1cXHRpbnQgdGFyZ2V0X2dlbiA9IChvbGRfZ2VuICsgMSkgJSBNQVhfTlJfR0VOUztcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwMjI9c3RhdGljIHZvaWQgdHJ5X3RvX2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00MDI1LVxcdGJvb2wgc2VxX2luY19mbGFnID0gZmFsc2U7XFxubW0vdm1zY2FuLmM6NDAyNjpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQwMjctXFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwMzMtXFx0XFx0d2hpbGUgKG1pbl9zZXFbdHlwZV0gKyBNSU5fTlJfR0VOUyBcXHUwMDNjPSBscnVnZW4tXFx1MDAzZW1heF9zZXEpIHtcXG5tbS92bXNjYW4uYzo0MDM0OlxcdFxcdFxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmMtNDAzNS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwNTQtXFxubW0vdm1zY2FuLmM6NDA1NTpcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9mb2xpbyAqL1xcbm1tL3Ztc2Nhbi5jLTQwNTYtXFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAyNlxcdTAwMjYgc3dhcHBpbmVzcyBcXHUwMDNjPSBNQVhfU1dBUFBJTkVTUykge1xcbi0tXFxubW0vdm1zY2FuLmM9NDA3ND1zdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwNzgtXFx0aW50IHR5cGUsIHpvbmU7XFxubW0vdm1zY2FuLmM6NDA3OTpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQwODAtcmVzdGFydDpcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQxMDktXFx0ICovXFxubW0vdm1zY2FuLmM6NDExMDpcXHRwcmV2ID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1heF9zZXEgLSAxKTtcXG5tbS92bXNjYW4uYzo0MTExOlxcdG5leHQgPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWF4X3NlcSArIDEpO1xcbm1tL3Ztc2Nhbi5jLTQxMTItXFxuLS1cXG5tbS92bXNjYW4uYz00MTM5PXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNDE0Mi1cXHRib29sIHN1Y2Nlc3M7XFxubW0vdm1zY2FuLmM6NDE0MzpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xcbm1tL3Ztc2Nhbi5jLTQxNDQtXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMO1xcbm1tL3Ztc2Nhbi5jOjQxNDU6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYzo0MTQ2OlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTQxNDctXFxuLS1cXG5tbS92bXNjYW4uYy00MTU4LVxcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXFxubW0vdm1zY2FuLmM6NDE1OTpcXHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxcbm1tL3Ztc2Nhbi5jLTQxNjAtXFx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XFxuLS1cXG5tbS92bXNjYW4uYz00MTk3PXN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDIyMi1cXG5tbS92bXNjYW4uYzo0MjIzOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfZ2VuX3NpemUoc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbixcXG5tbS92bXNjYW4uYy00MjI0LVxcdFxcdGludCB0eXBlLCB1bnNpZ25lZCBsb25nIHNlcSlcXG5tbS92bXNjYW4uYy00MjI1LXtcXG5tbS92bXNjYW4uYzo0MjI2OlxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XFxubW0vdm1zY2FuLmMtNDIyNy1cXHR1bnNpZ25lZCBsb25nIHNpemUgPSAwO1xcbi0tXFxubW0vdm1zY2FuLmM9NDIzND1zdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyMzctXFx0dW5zaWduZWQgbG9uZyBzZXEsIHRvdGFsID0gMDtcXG5tbS92bXNjYW4uYzo0MjM4OlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtNDIzOS1cXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xcbi0tXFxubW0vdm1zY2FuLmM9NDI2Mj1zdGF0aWMgYm9vbCBscnV2ZWNfaXNfcmVjbGFpbWFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyNzYtXFxubW0vdm1zY2FuLmM6NDI3NzpcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpKTtcXG5tbS92bXNjYW4uYy00Mjc4LVxcdGJpcnRoID0gUkVBRF9PTkNFKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLnRpbWVzdGFtcHNbZ2VuXSk7XFxuLS1cXG5tbS92bXNjYW4uYy00MjgzLS8qIHRvIHByb3RlY3QgdGhlIHdvcmtpbmcgc2V0IG9mIHRoZSBsYXN0IE4gamlmZmllcyAqL1xcbm1tL3Ztc2Nhbi5jOjQyODQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1X2dlbl9taW5fdHRsIF9fcmVhZF9tb3N0bHk7XFxubW0vdm1zY2FuLmMtNDI4NS1cXG5tbS92bXNjYW4uYzo0Mjg2OnN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNDI4Ny17XFxubW0vdm1zY2FuLmMtNDI4OC1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxubW0vdm1zY2FuLmM6NDI4OTpcXHR1bnNpZ25lZCBsb25nIG1pbl90dGwgPSBSRUFEX09OQ0UobHJ1X2dlbl9taW5fdHRsKTtcXG5tbS92bXNjYW4uYy00MjkwLVxcdGJvb2wgcmVjbGFpbWFibGUgPSAhbWluX3R0bDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQzMzItICovXFxubW0vdm1zY2FuLmM6NDMzMzpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxubW0vdm1zY2FuLmMtNDMzNC17XFxuLS1cXG5tbS92bXNjYW4uYy00MzM4LVxcdHVuc2lnbmVkIGxvbmcgZW5kO1xcbm1tL3Ztc2Nhbi5jOjQzMzk6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcXG5tbS92bXNjYW4uYy00MzQwLVxcdHN0cnVjdCBmb2xpbyAqbGFzdCA9IE5VTEw7XFxuLS1cXG5tbS92bXNjYW4uYy00MzQ4LVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG5tbS92bXNjYW4uYzo0MzQ5OlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcXG5tbS92bXNjYW4uYy00MzUwLVxcdHVuc2lnbmVkIGxvbmcgbWF4X3NlcTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQzODgtXFx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xcbm1tL3Ztc2Nhbi5jOjQzODk6XFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcXG5tbS92bXNjYW4uYy00MzkwLVxcdG1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxuLS1cXG5tbS92bXNjYW4uYz00NDUxPWVudW0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNDQ1OC1cXG5tbS92bXNjYW4uYzo0NDU5OnN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxcbm1tL3Ztc2Nhbi5jLTQ0NjAte1xcbi0tXFxubW0vdm1zY2FuLmMtNDUwNi1cXG5tbS92bXNjYW4uYzo0NTA3OnZvaWQgbHJ1X2dlbl9vbmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTQ1MDgte1xcbi0tXFxubW0vdm1zY2FuLmMtNDUzMS1cXG5tbS92bXNjYW4uYzo0NTMyOnZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NTMzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1MzgtXFxubW0vdm1zY2FuLmM6NDUzOTpcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9PTEQpO1xcbm1tL3Ztc2Nhbi5jLTQ1NDAtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmMtNDU0Mi1cXG5tbS92bXNjYW4uYzo0NTQzOnZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NTQ0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1NjgtXFxubW0vdm1zY2FuLmM6NDU2OTp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG5tbS92bXNjYW4uYy00NTcwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1NzQtXFx0aWYgKFJFQURfT05DRShscnV2ZWMtXFx1MDAzZWxydWdlbi5zZWcpICE9IE1FTUNHX0xSVV9IRUFEKVxcbm1tL3Ztc2Nhbi5jOjQ1NzU6XFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfSEVBRCk7XFxubW0vdm1zY2FuLmMtNDU3Ni19XFxubW0vdm1zY2FuLmMtNDU3Ny1cXG5tbS92bXNjYW4uYzo0NTc4OmJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDU3OS17XFxuLS1cXG5tbS92bXNjYW4uYz00NTkxPXN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWF4X3NlcV9ub3dhbGsoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNDU5My17XFxubW0vdm1zY2FuLmM6NDU5NDpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xcbm1tL3Ztc2Nhbi5jOjQ1OTU6XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxubW0vdm1zY2FuLmMtNDU5Ni1cXHRpbnQgc3dhcHBpbmVzcyA9IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYy00NjI0LSAqL1xcbm1tL3Ztc2Nhbi5jOjQ2MjU6dm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDYyNi17XFxuLS1cXG5tbS92bXNjYW4uYy00NjUxLSAqICAgIGdlbmVyYXRpb25zIG9uIGFuIExSVSBsaXN0Llxcbm1tL3Ztc2Nhbi5jOjQ2NTI6ICogNC4gSW4gbHJ1X2dlbl9kZWxfZm9saW8oKSwgdGhlIGdlbmVyYXRpb24gdG8gd2hpY2ggdGhlIGZvbGlvIGJlbG9uZ3MgaXNcXG5tbS92bXNjYW4uYy00NjUzLSAqICAgIGZvdW5kIGJhc2VkIG9uIHRoZSBnZW5lcmF0aW9uIGluZm9ybWF0aW9uIGluIGZvbGlvLVxcdTAwM2VmbGFncywgYW5kIHRoZVxcbi0tXFxubW0vdm1zY2FuLmMtNDY1NS0gKiAgICB0aGUgbHJ1IHNpemUgY29ycmVjdGx5IGR1cmluZyByZXBhcmVudGluZywgb3RoZXJ3aXNlIHRoZSBscnUgc2l6ZSBtYXlcXG5tbS92bXNjYW4uYzo0NjU2OiAqICAgIGJlIHVwZGF0ZWQgaW5jb3JyZWN0bHkgaW4gbHJ1X2dlbl9kZWxfZm9saW8oKS5cXG5tbS92bXNjYW4uYy00NjU3LSAqXFxuLS1cXG5tbS92bXNjYW4uYy00NjY1LSAqL1xcbm1tL3Ztc2Nhbi5jOjQ2NjY6c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG5tbS92bXNjYW4uYy00NjY3LVxcdFxcdFxcdFxcdCAgICAgaW50IHpvbmUsIGludCB0eXBlKVxcbm1tL3Ztc2Nhbi5jLTQ2Njgte1xcbm1tL3Ztc2Nhbi5jOjQ2Njk6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmNoaWxkX2xydWdlbiwgKnBhcmVudF9scnVnZW47XFxubW0vdm1zY2FuLmMtNDY3MC1cXHRlbnVtIGxydV9saXN0IGxydSA9IHR5cGUgKiBMUlVfSU5BQ1RJVkVfRklMRTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2NzYtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGdldF9ucl9nZW5zKGNoaWxkX2xydXZlYywgdHlwZSk7IGkrKykge1xcbm1tL3Ztc2Nhbi5jOjQ2Nzc6XFx0XFx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoY2hpbGRfbHJ1Z2VuLVxcdTAwM2VtYXhfc2VxIC0gaSk7XFxubW0vdm1zY2FuLmMtNDY3OC1cXHRcXHRsb25nIG5yX3BhZ2VzID0gY2hpbGRfbHJ1Z2VuLVxcdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdO1xcbm1tL3Ztc2Nhbi5jOjQ2Nzk6XFx0XFx0aW50IGNoaWxkX2xydV9hY3RpdmUgPSBscnVfZ2VuX2lzX2FjdGl2ZShjaGlsZF9scnV2ZWMsIGdlbikgPyBMUlVfQUNUSVZFIDogMDtcXG5tbS92bXNjYW4uYzo0NjgwOlxcdFxcdGludCBwYXJlbnRfbHJ1X2FjdGl2ZSA9IGxydV9nZW5faXNfYWN0aXZlKHBhcmVudF9scnV2ZWMsIGdlbikgPyBMUlVfQUNUSVZFIDogMDtcXG5tbS92bXNjYW4uYy00NjgxLVxcbi0tXFxubW0vdm1zY2FuLmMtNDY4OS1cXG5tbS92bXNjYW4uYzo0NjkwOlxcdFxcdGlmIChscnVfZ2VuX2lzX2FjdGl2ZShjaGlsZF9scnV2ZWMsIGdlbikgIT0gbHJ1X2dlbl9pc19hY3RpdmUocGFyZW50X2xydXZlYywgZ2VuKSkge1xcbm1tL3Ztc2Nhbi5jLTQ2OTEtXFx0XFx0XFx0X191cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUgKyBjaGlsZF9scnVfYWN0aXZlLCB6b25lLCAtbnJfcGFnZXMpO1xcbi0tXFxubW0vdm1zY2FuLmMtNDY5Ni1cXG5tbS92bXNjYW4uYzo0Njk3OnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDY5OC17XFxuLS1cXG5tbS92bXNjYW4uYy00NzA4LVxcdFxcdGZvciAodHlwZSA9IDA7IHR5cGUgXFx1MDAzYyBBTk9OX0FORF9GSUxFOyB0eXBlKyspXFxubW0vdm1zY2FuLmM6NDcwOTpcXHRcXHRcXHRfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCB6aWQsIHR5cGUpO1xcbm1tL3Ztc2Nhbi5jLTQ3MTAtXFxuLS1cXG5tbS92bXNjYW4uYz00NzI2PXN0YXRpYyBib29sIHNvcnRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3MzYtXFx0aW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7XFxubW0vdm1zY2FuLmM6NDczNzpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQ3MzgtXFxuLS1cXG5tbS92bXNjYW4uYy00NzQyLVxcdGlmICghZm9saW9fZXZpY3RhYmxlKGZvbGlvKSkge1xcbm1tL3Ztc2Nhbi5jOjQ3NDM6XFx0XFx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xcbm1tL3Ztc2Nhbi5jLTQ3NDQtXFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XFxuLS1cXG5tbS92bXNjYW4uYy00NzUxLVxcdC8qIHByb21vdGVkICovXFxubW0vdm1zY2FuLmM6NDc1MjpcXHRpZiAoZ2VuICE9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKSkge1xcbm1tL3Ztc2Nhbi5jLTQ3NTMtXFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2bHJ1Z2VuLVxcdTAwM2Vmb2xpb3NbZ2VuXVt0eXBlXVt6b25lXSk7XFxuLS1cXG5tbS92bXNjYW4uYz00NzgyPXN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3OTktXFxubW0vdm1zY2FuLmM6NDgwMDpcXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XFxubW0vdm1zY2FuLmMtNDgwMS1cXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ4MDY9c3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4MTgtXFx0dW5zaWduZWQgbG9uZyByZW1haW5pbmcgPSBucl90b19zY2FuO1xcbm1tL3Ztc2Nhbi5jOjQ4MTk6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy00ODIwLVxcdGJvb2wgZWFybHlfc3RvcCA9IGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmMtNDgyOS1cXG5tbS92bXNjYW4uYzo0ODMwOlxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG5tbS92bXNjYW4uYy00ODMxLVxcbi0tXFxubW0vdm1zY2FuLmM9NTAwOD1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMTYtXFx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xcbm1tL3Ztc2Nhbi5jOjUwMTc6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcXG5tbS92bXNjYW4uYy01MDE4LVxcdGludCBzY2FubmVkLCByZWNsYWltZWQ7XFxuLS1cXG5tbS92bXNjYW4uYy01MDY5LVxcdFxcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXFxubW0vdm1zY2FuLmM6NTA3MDpcXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXFxubW0vdm1zY2FuLmMtNTA3MS1cXHRcXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR19hY3RpdmUpKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMDMtXFxubW0vdm1zY2FuLmM6NTEwNDpzdGF0aWMgYm9vbCBscnVfZ2VuX2ltYmFsYW5jZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsXFxubW0vdm1zY2FuLmMtNTEwNS1cXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxcbm1tL3Ztc2Nhbi5jLTUxMDYte1xcbm1tL3Ztc2Nhbi5jOjUxMDc6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy01MTA4LVxcdHVuc2lnbmVkIGxvbmcgeW91bmcgPSAwLCBvbGQgPSAwLCBsYWcgPSAwO1xcbi0tXFxubW0vdm1zY2FuLmM9NTE0Mj1zdGF0aWMgYm9vbCBzaG91bGRfcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNTE2My1cXHQvKiBSdW4gYWdpbmcgaWYgdGhlIHByZWZlcnJlZCB0eXBlIGlzIHNldmVyZWx5IGltYmFsYW5jZWQgYWNyb3NzIGdlbnMgKi9cXG5tbS92bXNjYW4uYzo1MTY0OlxcdHJldHVybiBscnVfZ2VuX2ltYmFsYW5jZWQobHJ1dmVjLCBtYXhfc2VxLCBzYywgdHlwZSwgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTE2NS19XFxuLS1cXG5tbS92bXNjYW4uYz01Mjc4PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI4NS1cXG5tbS92bXNjYW4uYzo1Mjg2OlxcdC8qIGxydV9nZW5fYWdlX25vZGUoKSBjYWxsZWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpICovXFxubW0vdm1zY2FuLmMtNTI4Ny1cXHRpZiAobWVtX2Nncm91cF9iZWxvd19taW4oTlVMTCwgbWVtY2cpKVxcbi0tXFxubW0vdm1zY2FuLmM9NTMxOT1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMjUtXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbm1tL3Ztc2Nhbi5jOjUzMjY6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbjtcXG5tbS92bXNjYW4uYy01MzI3LVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMzktXFx0XFx0aWYgKG9wKSB7XFxubW0vdm1zY2FuLmM6NTM0MDpcXHRcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIG9wKTtcXG5tbS92bXNjYW4uYy01MzQxLVxcdFxcdFxcdG9wID0gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzNTMtXFx0XFx0aWYgKCFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpIHtcXG5tbS92bXNjYW4uYzo1MzU0OlxcdFxcdFxcdGxydV9nZW5fcmVsZWFzZV9tZW1jZyhtZW1jZyk7XFxubW0vdm1zY2FuLmMtNTM1NS1cXHRcXHRcXHRtZW1jZyA9IE5VTEw7XFxuLS1cXG5tbS92bXNjYW4uYy01MzcxLVxcdGlmIChvcClcXG5tbS92bXNjYW4uYzo1MzcyOlxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgb3ApO1xcbm1tL3Ztc2Nhbi5jLTUzNzMtXFxuLS1cXG5tbS92bXNjYW4uYy01Mzc4LVxcbm1tL3Ztc2Nhbi5jOjUzNzk6XFx0LyogcmVzdGFydCBpZiByYWNlZCB3aXRoIGxydV9nZW5fcm90YXRlX21lbWNnKCkgKi9cXG5tbS92bXNjYW4uYy01MzgwLVxcdGlmIChnZW4gIT0gZ2V0X251bGxzX3ZhbHVlKHBvcykpXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQyOjU1LjE4NzgxNzIwNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDM5ODY5NzY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBGdXp6aW5nIEVmZm9ydHMgb24gTUdMUlUgUmVjbGFpbSBQYXRocyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGUgTUdMUlUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSByZWNsYWltIHBhdGhzLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSByZWNsYWltIGFuZCBhZ2luZyBsb2dpYyBhbmQgdGFyZ2V0IHRob3NlLlxuXG5UaGUgaW5pdGlhbCBhcHByb2FjaCBpbnZvbHZlcyB1bmRlcnN0YW5kaW5nIHdoaWNoIGZ1bmN0aW9ucyBhcmUgKmFjdHVhbGx5KiByZXNwb25zaWJsZSBmb3IgdGhlIHJlY2xhaW0gcHJvY2Vzcy4gV2UgaGF2ZSBhIHNldCBvZiBub24tc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBscnVfZ2VuX2FkZF9tbWAsIGBscnVfZ2VuX2RlbF9tbWAsIGV0Yy4sIGJ1dCB0aGVzZSBhcmVuJ3QgdGhlIHByaW1hcnkgZHJpdmVycy4gVGhlIHJlYWwgcmVjbGFpbSB3b3JrIGlzIGluaXRpYXRlZCBieSBtZW1vcnkgcHJlc3N1cmUsIHdoaWNoIGNhbGxzIGEgc2VxdWVuY2U6IGBzaHJpbmtfbHJ1dmVjYCAtXHUwMDNlIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIC1cdTAwM2UgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBhbmQgc28gb24sIGV2ZW50dWFsbHkgbGVhZGluZyB0byBgX19mb2xpb19pbmNfZ2VuYC4gQWdpbmcgaXMgdHJpZ2dlcmVkIGluIGEgc2ltaWxhciBtYW5uZXIsIGZyb20gYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBkb3duIHRvIGBscnVfZ2VuX2ltYmFsYW5jZWRgLlxuXG5HaXZlbiB0aGF0IHRoZXNlIHBhdGhzIGFyZSBhY3RpdmF0ZWQgYnkgbWVtb3J5IGFsbG9jYXRpb24sIHBhcnRpY3VsYXJseSB0aHJvdWdoIHN5c2NhbGxzIGxpa2UgYGFsbG9jX3BhZ2VzYCBvciBgbW1hcGAsIFN5emthbGxlciBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIHRvb2wgZm9yIHRoZSBqb2IuIFRvIG1ha2UgaXQgZWZmZWN0aXZlLCBJIG5lZWQgdG8gcHJvdmlkZSBgRm9jdXNTeW1ib2xzYCB0aGF0IGFyZSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGFuZCBub3QganVzdCBnZW5lcmljIHN5c2NhbGxzLlxuXG5NeSBmaXJzdCBpbXB1bHNlIHdhcyB0byBsaXN0IG91dCB0aGUgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uczogYGxydV9nZW5fc2hyaW5rX2xydXZlY2AsIGBscnVfZ2VuX2FnZV9ub2RlYCwgZXRjLiBIb3dldmVyLCB0aGUgaW5zdHJ1Y3Rpb25zIGhpZ2hsaWdodGVkIHNvbWV0aGluZyBpbXBvcnRhbnQ6IHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIGJlY2F1c2Ugc3RhdGljIGhlbHBlcnMgYXJlIG9mdGVuIGlubGluZWQgYW5kIGRvbid0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIGNydWNpYWwgZGlzdGluY3Rpb24uXG5cblNvLCBJIHN0YXJ0ZWQgY2hlY2tpbmcgdGhlIGxpc3RlZCBmdW5jdGlvbnMuIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGlzIHN0YXRpYywgYXMgaXMgYHNocmlua19scnV2ZWNgLCBgc2hyaW5rX25vZGVgLCBhbmQgYGRvX3RyeV90b19mcmVlX3BhZ2VzYC4gSG93ZXZlciwgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBub24tc3RhdGljLiBUaGUgc2FtZSBnb2VzIGZvciBga3N3YXBkYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBgbHJ1X2dlbl9hZGRfbW1gLCBhbmQgYGxydV9nZW5fZGVsX21tYC4gYHRyeV90b19mcmVlX3BhZ2VzYCBzb3VuZHMgZ2VuZXJpYyBhbmQgbWlnaHQgbm90IGJlIHRoZSBtb3N0IHRhcmdldGVkLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBjaGFuZ2VzLCB0aGUgbW9yZSByZWxldmFudCBmdW5jdGlvbnMgc2VlbSB0byBiZSB0aG9zZSBpbnZvbHZlZCBpbiBpbmNyZWFzaW5nIHRoZSBzZXF1ZW5jZSBudW1iZXIsIHNjYW5uaW5nIGZvbGlvcywgaXNvbGF0aW5nIGFuZCBldmljdGluZyB0aGVtLCBhbmQgdGhlIGFnaW5nIGxvZ2ljLCBzdWNoIGFzIGBscnVfZ2VuX2ltYmFsYW5jZWRgLCBhbmQgc28gb24uIFRoZXNlIGFsbCBmZWVkIGludG8gYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBvciBgcnVuX2V2aWN0aW9uYCwgd2hpY2ggaXMgdGhlbiBjYWxsZWQgYnkgYGxydV9nZW5fc29mdF9yZWNsYWltYCBhbmQgYG1heF9scnVfZ2VuX21lbWNnYC4gVGhlIHF1ZXN0aW9uIGlzLCB3aGljaCBvZiB0aGVzZSBpcyB0aGUgbW9zdCBlZmZlY3RpdmUgZW50cnkgcG9pbnQ/IGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAgYW5kIGBtYXhfbHJ1X2dlbl9tZW1jZ2AgYXJlIG5vbi1zdGF0aWMuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGVtIGZ1cnRoZXIgdG8gc2VlIGlmIHRoZXkgYXJlIGEgZ29vZCBmaXQgZm9yIG15IGBGb2N1c1N5bWJvbHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzk1MCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0MzowOS41ODY1MTkwNjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzOTkwMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihscnVfZ2VuX3NvZnRfcmVjbGFpbXxtYXhfbHJ1X2dlbl9tZW1jZylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0xODA9c3RhdGljIHZvaWQgbWVtY2cxX3VwZGF0ZV90cmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODctXFx0XFx0aWYgKHNvZnRfbGltaXRfZXhjZXNzKG1lbWNnKSlcXG5tbS9tZW1jb250cm9sLXYxLmM6MTg4OlxcdFxcdFxcdGxydV9nZW5fc29mdF9yZWNsYWltKG1lbWNnLCBuaWQpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0xODktXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI3Nz1zdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI4NS1cXHRcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpXFxubW0vbWVtY29udHJvbC5jOjI4NjpcXHRcXHRcXHRtYXhfbHJ1X2dlbl9tZW1jZyhwYXJlbnQsIG5pZCk7XFxubW0vbWVtY29udHJvbC5jLTI4Ny1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ1NDM9dm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmMtNDU2OC1cXG5tbS92bXNjYW4uYzo0NTY5OnZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ1NzAte1xcbi0tXFxubW0vdm1zY2FuLmM9NDU5MT1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21heF9zZXFfbm93YWxrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2MjQtICovXFxubW0vdm1zY2FuLmM6NDYyNTp2b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG5tbS92bXNjYW4uYy00NjI2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MDkuNjQwNTE4NTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUyMDE1OTcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQgSW50ZXJkZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyBzb21lIG1lbW9yeSByZWNsYWltIGxvZ2ljIGhlcmUuIEkgc2VlIHRoYXQgYGxydV9nZW5fc29mdF9yZWNsYWltYCBpcyB0cmlnZ2VyZWQgYnkgYG1lbWNnMV91cGRhdGVfdHJlZWAuIFRoYXQncyBpbXBvcnRhbnQg4oCTIGl0IHRlbGxzIG1lIGhvdyBzb2Z0IHJlY2xhaW0sIHByZXN1bWFibHkgcmVsYXRlZCB0byBnZW5lcmF0aW9uYWwgTFJVLCBnZXRzIGluaXRpYXRlZCBkdXJpbmcgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgdXBkYXRlcy4gTm93LCBJIGhhdmUgdG8gcmVtZW1iZXIgdGhlIHNwZWNpZmljcyBvZiB0aGF0IGNhbGwgYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIGhvdyBtZW1jZyBwcmVzc3VyZSBpcyBhZGRyZXNzZWQuXG5cblRoZW4gSSBub3RlIGBtYXhfbHJ1X2dlbl9tZW1jZ2AgaXMgaW52b2tlZCBmcm9tIGBtZW1jZ19yZXBhcmVudF9vYmpjZ3NgLCB3aGljaCBtYWtlcyBzZW5zZS4gUmVwYXJlbnRpbmcgb2JqZWN0IGNncm91cHMgcHJvYmFibHkgaW52b2x2ZXMgcmVhZGp1c3RpbmcgbGltaXRzIGFuZCwgYnkgZXh0ZW5zaW9uLCBtYXhpbXVtIGdlbmVyYXRpb25hbCBMUlUgdmFsdWVzIGZvciBhIG1lbWNnLiBTbyBJIG5lZWQgdG8gZ28gb3ZlciB0aGUgbnVhbmNlcyBvZiB0aGF0IGludGVyYWN0aW9uIHRvby4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSdzIGFueSBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoIHBhZ2Ugb3duZXJzaGlwIGhhcHBlbmluZyBoZXJlLlxuXG5Ob3csIGEgY3JpdGljYWwgcXVlc3Rpb24gYXJpc2VzOiBXaGF0IGFib3V0IGB0cnlfdG9fZnJlZV9wYWdlc2A/IFdoZXJlIGRvZXMgdGhhdCBmaXQgaW4gdGhpcyB3aG9sZSBwaWN0dXJlPyBJcyB0aGlzIGJlaW5nIGNhbGxlZCBkaXJlY3RseSwgb3IgaXMgdGhlcmUgYSBsYXllciBvZiBhYnN0cmFjdGlvbj8gSXQgbWlnaHQgYmUgdGhlIGNvcmUgcGFnZSBmcmVlaW5nIG1lY2hhbmlzbSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGNhbGxzIEkndmUganVzdCBpZGVudGlmaWVkLiBJIHNob3VsZCBwcm9iYWJseSByZXZpZXcgdGhlIGNhbGwgY2hhaW4gYW5kIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBjb21lcyBpbi4gV2hhdCBhcmUgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGl0PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBzdWNjZXNzIG9yIGZhaWx1cmU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTk5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MTguMTYwNjgwOTA3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg4NzM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD02OT11bnNpZ25lZCBsb25nIHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpO1xcbm1tL2ludGVybmFsLmg6NzA6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxubW0vaW50ZXJuYWwuaC03MS1cXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgY29uc3Qgbm9kZW1hc2tfdCAqbWFzayk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDQzOD1fX3BlcmZvcm1fcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQ0NTAtXFxubW0vcGFnZV9hbGxvYy5jOjQ0NTE6XFx0cHJvZ3Jlc3MgPSB0cnlfdG9fZnJlZV9wYWdlcyhhYy1cXHUwMDNlem9uZWxpc3QsIG9yZGVyLCBnZnBfbWFzayxcXG5tbS9wYWdlX2FsbG9jLmMtNDQ1Mi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRhYy1cXHUwMDNlbm9kZW1hc2spO1xcbi0tXFxubW0vdm1zY2FuLmM9NjY5Nz1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNjcyNy0gKi9cXG5tbS92bXNjYW4uYzo2NzI4OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3RyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXFxubW0vdm1zY2FuLmMtNjcyOS1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmM9Njg3MD1zdGF0aWMgYm9vbCB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5NDktXFxubW0vdm1zY2FuLmM6Njk1MDp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG5tbS92bXNjYW4uYy02OTUxLVxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBjb25zdCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5ODQtXFxubW0vdm1zY2FuLmM6Njk4NTpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02OTg2LVxcbi0tXFxubW0vdm1zY2FuLmM9NzAzNj11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNzA2Ny1cXG5tbS92bXNjYW4uYzo3MDY4OlxcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTcwNjktXFxuLS1cXG5tbS92bXNjYW4uYz03ODM0PXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbi0tXFxubW0vdm1zY2FuLmMtNzg1My1cXG5tbS92bXNjYW4uYzo3ODU0OlxcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTc4NTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjE4LjIxMDU3Mzg5NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTcyODc3MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpcmVjdCBcdTAwMjYgQmFja2dyb3VuZCBSZWNsYWltIEVudHJ5IFBvaW50cyBcdTAwMjYgRXhwbG9yaW5nIEZ1cnRoZXIgTUdMUlUgQ29ubmVjdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2Ag4oCTIHRob3NlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJJ2QgcmVhY2ggZm9yIHdoZW4gdGhpbmtpbmcgYWJvdXQgKmRpcmVjdCogbWVtb3J5IHJlY2xhaW0uIFRoZXkgcmVwcmVzZW50IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJpZ2dlcmluZyBpbW1lZGlhdGUgZnJlZWluZyBvZiBwYWdlcy4gVGhlbiwgYXMgZXhwZWN0ZWQsIHdlIGhhdmUgYGtzd2FwZGAgZm9yIGJhY2tncm91bmQgcmVjbGFpbSwgdGhlIG9uZSB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQuXG5cbk5vdywgSSBuZWVkIHRvIHpvb20gaW4gb24gYG1tL3Ztc2Nhbi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb3RoZXIgZnVuY3Rpb25zICp3aXRoaW4qIHRoYXQgbW9kdWxlIG1pZ2h0IGJlIHJlbGV2YW50IHRvIE1HTFJVLiBUaGUgaW50ZW50IGlzIHRvIHNlZSBpZiBhbnkgb3RoZXIgZnVuY3Rpb24gaXMgbm90IHN0YXRpYyBhbmQgbWF5IGJlIHJlbGF0ZWQgdG8gdGhlIE1HTFJVIGNvZGUuIEl0IG1ha2VzIHNlbnNlIHRvIHNlZSBob3cgdGhlc2UgZGlmZmVyZW50IHBpZWNlcyBpbnRlcmNvbm5lY3QuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nIHRoYXQgaGFzIGEgcG90ZW50aWFsIGltcGFjdCBvbiwgb3IgaW1wbGljYXRpb24gZm9yLCBNR0xSVSdzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzA5OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjIzLjc4MzQ1NTQ4M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0NjgyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgbHJ1X2dlbl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9Mjk0Mj1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NjAtXFxubW0vdm1zY2FuLmM6Mjk2MTp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5NjIte1xcbi0tXFxubW0vdm1zY2FuLmMtMjk4Ny1cXG5tbS92bXNjYW4uYzoyOTg4OnZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0vdm1zY2FuLmMtMjk4OS17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDI3LSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYzozMDI4OnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTMwMjkte1xcbi0tXFxubW0vdm1zY2FuLmM9NDQ1OT1zdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1MDYtXFxubW0vdm1zY2FuLmM6NDUwNzp2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NTA4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1MzEtXFxubW0vdm1zY2FuLmM6NDUzMjp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDUzMy17XFxuLS1cXG5tbS92bXNjYW4uYy00NTQyLVxcbm1tL3Ztc2Nhbi5jOjQ1NDM6dm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTQ1NDQte1xcbi0tXFxubW0vdm1zY2FuLmMtNDU2OC1cXG5tbS92bXNjYW4uYzo0NTY5OnZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ1NzAte1xcbi0tXFxubW0vdm1zY2FuLmM9NDY2Nj1zdGF0aWMgdm9pZCBfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLCBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDY5Ni1cXG5tbS92bXNjYW4uYzo0Njk3OnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDY5OC17XFxuLS1cXG5tbS92bXNjYW4uYz02MDI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxydV9nZW5fcm9fZm9wcyA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwMzktXFxubW0vdm1zY2FuLmM6NjA0MDp2b2lkIGxydV9nZW5faW5pdF9wZ2RhdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbm1tL3Ztc2Nhbi5jLTYwNDEte1xcbi0tXFxubW0vdm1zY2FuLmMtNjA1MS1cXG5tbS92bXNjYW4uYzo2MDUyOnZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxubW0vdm1zY2FuLmMtNjA1My17XFxuLS1cXG5tbS92bXNjYW4uYy02MDczLVxcbm1tL3Ztc2Nhbi5jOjYwNzQ6dm9pZCBscnVfZ2VuX2luaXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTYwNzUte1xcbi0tXFxubW0vdm1zY2FuLmMtNjA4NC1cXG5tbS92bXNjYW4uYzo2MDg1OnZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy02MDg2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MjMuODI5OTI5NzkyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDkyNDgzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQsIGV4cHJlc3NlZCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIFNjb3BlIG9mIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCoqXG5cbkhtbSwgYGxydV9nZW5fbG9va19hcm91bmRgLi4uIHJpZ2h0LCBpdCdzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGFuIGltcG9ydGFudCBwb2ludC4gS25vd2luZyBpdCdzIG5vbi1zdGF0aWMgaW1tZWRpYXRlbHkgZXhwYW5kcyB0aGUgcG9zc2liaWxpdGllcyBmb3IgaXRzIHVzYWdlLiBJdCBtZWFucyBpdCdzIGxpa2VseSBwYXJ0IG9mIGEgbGFyZ2VyIGNsYXNzIG9yIG1vZHVsZSwgYW5kIHRoZXJlZm9yZSBpdHMgc2NvcGUgaXNuJ3QgbGltaXRlZCB0byBhIHNpbmdsZSBmaWxlLiBJIG5lZWQgdG8gY29uc2lkZXIgd2hlcmUgaXQncyAqdmlzaWJsZSogYW5kIGhvdyB0aGF0IG1pZ2h0IGFmZmVjdCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21wb25lbnRzIHdpdGhpbiB0aGUgc3lzdGVtLiBJcyBpdCBgcHVibGljYCwgYHByb3RlY3RlZGAsIG9yIGBwcml2YXRlYD8gVGhhdCdzIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgaXQncyBhYm91dCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBsZXZlcmFnZWQgb3IgcG90ZW50aWFsbHkgbW9kaWZpZWQgbGF0ZXIuIEkgc2hvdWxkIGJlIGtlZXBpbmcgdHJhY2sgb2YgYWxsIHRoZSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIGl0cyBub24tc3RhdGljIG5hdHVyZSB3aWxsIGJlIGltcG9ydGFudCB0byBncmFzcCB0aGUgd2lkZXIgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uJ3MgcHVycG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0MzoyOC4yMzkxODA4MzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTU2NTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5ib29sIGxydV9nZW5fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQyODY9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQzMzItICovXFxubW0vdm1zY2FuLmM6NDMzMzpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxubW0vdm1zY2FuLmMtNDMzNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjI4LjI4NjE0MTMzNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTA1NTY2NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipUcmFjaW5nIHRoZSBGb290c3RlcHMgb2YgYGxydV9nZW5fbG9va19hcm91bmRgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBldmVyeXdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiBXaGVyZSBkb2VzIHRoZSBleGVjdXRpb24gcGF0aCAqYmVnaW4qPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLiBVbmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgd2lsbCB0ZWxsIG1lIGEgbG90LiBFc3NlbnRpYWxseSwgSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIHNvdXJjZSBjb2RlLCB0cmFjZSB0aGUgdXNhZ2UsIGFuZCBzZWUgaG93IGl0IGlzIHdvcmtpbmcsIGhvcGluZyB0byBwYWludCBhIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NzQxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MzMuNzkxNzEwNjc0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDg1NTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ybWFwLmM9OTE4PXN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9ybWFwLmMtOTgyLVxcdFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSBcXHUwMDI2XFx1MDAyNiBwdm13LnB0ZSkge1xcbm1tL3JtYXAuYzo5ODM6XFx0XFx0XFx0aWYgKGxydV9nZW5fbG9va19hcm91bmQoXFx1MDAyNnB2bXcsIG5yKSlcXG5tbS9ybWFwLmMtOTg0LVxcdFxcdFxcdFxcdHJlZmVyZW5jZWQrKztcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4MDc9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4MzYtICogd2Fsa19wbWRfcmFuZ2UoKTsgdGhlIGV2aWN0aW9uIGFsc28gcmVwb3J0IHRoZW0gd2hlbiB3YWxraW5nIHRoZSBybWFwXFxubW0vdm1zY2FuLmM6MjgzNzogKiBpbiBscnVfZ2VuX2xvb2tfYXJvdW5kKCkuXFxubW0vdm1zY2FuLmMtMjgzOC0gKlxcbi0tXFxubW0vdm1zY2FuLmM9NDEzOT1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQxNTgtXFx0ICogSWYgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgYXV0b21hdGljYWxseSBzZXQgdGhlIGFjY2Vzc2VkIGJpdCwgZmFsbGJhY2tcXG5tbS92bXNjYW4uYzo0MTU5OlxcdCAqIHRvIGxydV9nZW5fbG9va19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJpdCBpbiBhXFxubW0vdm1zY2FuLmMtNDE2MC1cXHQgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQyODY9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQzMzItICovXFxubW0vdm1zY2FuLmM6NDMzMzpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxubW0vdm1zY2FuLmMtNDMzNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjMzLjg0MjU3NDcyMloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODE5NzYyMTExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTUdMUlUgRXZpY3Rpb24gUGF0aCBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgTUdMUlUgcGF0Y2gsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBldmljdGlvbiBhbmQgYWdpbmcgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoZSBpbml0aWFsIGNhbGwgc3RhY2sgcG9pbnRzIHRvIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBmcm9tIGBmb2xpb19yZWZlcmVuY2VkX29uZWAgaW4gYG1tL3JtYXAuY2AsIGJ1dCB0aGUgbWVhdCBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25z4oCUYGZvbGlvX2luY19nZW5gLCBgX19mb2xpb19pbmNfZ2VuYCwgYGluY19taW5fc2VxYCwgYHNjYW5fZm9saW9zYCwgYGdldF90eXBlX3RvX3NjYW5gLCBgaXNvbGF0ZV9mb2xpb3NgLCBgZXZpY3RfZm9saW9zYCwgYGxydV9nZW5faW1iYWxhbmNlZGAsIGFuZCBgc2hvdWxkX3J1bl9hZ2luZ2DigJRhcmUgYWxsIGRlZXBseSBpbnZvbHZlZCBpbiB0aGUgZXZpY3Rpb24gcHJvY2Vzcy5cblxuVGhlIGV2aWN0aW9uIHBhdGggaXRzZWxmIGlzIHRyaWdnZXJlZCBieSBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYCwgYW5kIGl0IGxvb2tzIGxpa2UgYHJ1bl9ldmljdGlvbmAgaXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUsIGJlaW5nIGNhbGxlZCBieSBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIChmb3IgY2dyb3VwIHYxIHNvZnQgbGltaXQgcmVjbGFpbSkgYW5kIGBtYXhfbHJ1X2dlbl9tZW1jZ2AgKHdoZW4gYSBtZW1jZyBpcyBvZmZsaW5lZCkuIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgaXMgY2FsbGVkIGZyb20gYGxydV9nZW5fc2hyaW5rX2xydXZlY2Agd2hpY2ggaXMgdGhlbiBjYWxsZWQgZnJvbSBgc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbm9kZWAsIHdoaWNoIGZpbmFsbHkgYXJlIGNhbGxlZCBmcm9tIGBkb190cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGBrc3dhcGRgLlxuXG5UaGVyZWZvcmUsIHRoZSBtYWluIGVudHJ5IHBvaW50cyBJJ20gZm9jdXNpbmcgb24gYXJlIGluaXRpYWxseTogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gLCBhbmQgYG1heF9scnVfZ2VuX21lbWNnYC4gYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGFyZSB0aGUgb2J2aW91cyBkaXJlY3QgcmVjbGFpbSBlbnRyeSBwb2ludHMsIGJ1dCB0aGUgb3RoZXJzIGFyZSBNR0xSVS1zcGVjaWZpYy4gSSd2ZSBhbHNvIGNvbnNpZGVyZWQgb3RoZXIgZW50cnkgcG9pbnRzLCBzdWNoIGFzIGBrc3dhcGRgLCBidXQgaXQgc2VlbXMgbGlrZSBhIGtlcm5lbCB0aHJlYWQgdGhhdCdzIG5vdCBlYXNpbHkgdHJpZ2dlcmVkIHZpYSBhbiBpbnRlcmZhY2UuIGBzaHJpbmtfYWxsX21lbW9yeWAgaXMgYWxzbyBhIHBvc3NpYmlsaXR5LCBidXQgaXQgbG9va3MgbGlrZSB0aGF0IGlzIHJlbGF0ZWQgdG8gaGliZXJuYXRpb24uXG5cbkhvd2V2ZXIsIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgYSBob3QtcGF0aCBmdW5jdGlvbi4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgbGlzdGluZyB0aG9zZSB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0cywgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhhdCwgZ2l2ZW4gdGhlIGRlcHRoIG9mIHRoZXNlIGNoYW5nZXMgaW4gdGhlIHJlY2xhaW0gbG9naWMsIGl0J3Mgbm90IHRoZSBpZGVhbCBmb2N1cy5cblxuVGhlbiwgSSB0aG91Z2h0IGFib3V0IHdoZXRoZXIgdGhlcmUgYXJlIG90aGVyIE1HTFJVLXNwZWNpZmljIGVudHJ5IHBvaW50cywgc3VjaCBhcyBgbHJ1X2dlbl9hZGRfbW1gLCBgbHJ1X2dlbl9kZWxfbW1gLCBldGMuLCBidXQgaXQgc2VlbXMgdGhhdCB0aGVzZSBhcmUgbWFpbmx5IHNldHVwLXJlbGF0ZWQgYW5kIGRvbid0IGRpcmVjdGx5IGtpY2sgb2ZmIGV2aWN0aW9uLiBTbywgdGhlIGNsZWFuZXN0IG9wdGlvbnMgYXJlIGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAgYW5kIGBtYXhfbHJ1X2dlbl9tZW1jZ2AuXG5cbkxvb2tpbmcgdGhyb3VnaCB0aGUgcGF0Y2ggbW9yZSBjbG9zZWx5LCBpdCdzIGFsbCBzdGF0aWMgZnVuY3Rpb25zLiBJZiB0aGVyZSBhcmUgbm8gb3RoZXIsIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBzcGVjaWZpYyB0byB0aGlzIGNoYW5nZSwgdGhlIGJlc3QgY2hvaWNlIGlzIHRvIGVpdGhlciBsaXN0IHRob3NlIHRyaWdnZXJpbmcgdGhlIGxvZ2ljLCBvciBvbWl0IHRoZSBgRm9jdXNTeW1ib2xzYCBlbnRyeS4gSSBzdGlsbCB0aGluayBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIGFuZCBgbWF4X2xydV9nZW5fbWVtY2dgIGFyZSBwcmV0dHkgZ29vZC4gVGhleSdyZSBub24tc3RhdGljIGFuZCB0aGV5J3JlIHNwZWNpZmljIHRvIE1HTFJVLiBUaGV5IGJvdGggY2FsbCBgcnVuX2V2aWN0aW9uYCwgd2hpY2ggaW4gdHVybiwgY2FsbHMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBldmljdF9mb2xpb3NgLlxuXG5JJ2xsIGRvdWJsZS1jaGVjayBgbW0vdm1zY2FuLmNgIG9uZSBtb3JlIHRpbWUgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gTUdMUlUuIEJ1dCBmb3Igbm93LCBJJ20gY29uZmlkZW50IHRoYXQgYGxydV9nZW5fc29mdF9yZWNsYWltYCBhbmQgYG1heF9scnVfZ2VuX21lbWNnYCBhcmUgdGhlIGJlc3QgY2hvaWNlcyBmb3IgdGVzdGluZyB0aGVzZSBNR0xSVSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTM5MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6NTIuMDQwMTk4MTdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDkwOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGxydV9nZW5fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTI5NDI9c3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF9uZXh0X21tKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXFxuLS1cXG5tbS92bXNjYW4uYy0yOTYwLVxcbm1tL3Ztc2Nhbi5jOjI5NjE6dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS92bXNjYW4uYy0yOTYyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5ODctXFxubW0vdm1zY2FuLmM6Mjk4ODp2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5ODkte1xcbi0tXFxubW0vdm1zY2FuLmMtMzAyNy0jaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmM6MzAyODp2b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS92bXNjYW4uYy0zMDI5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ0NTk9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxuLS1cXG5tbS92bXNjYW4uYy00NTA2LVxcbm1tL3Ztc2Nhbi5jOjQ1MDc6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDUwOC17XFxuLS1cXG5tbS92bXNjYW4uYy00NTMxLVxcbm1tL3Ztc2Nhbi5jOjQ1MzI6dm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTQ1MzMte1xcbi0tXFxubW0vdm1zY2FuLmMtNDU0Mi1cXG5tbS92bXNjYW4uYzo0NTQzOnZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NTQ0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1NjgtXFxubW0vdm1zY2FuLmM6NDU2OTp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG5tbS92bXNjYW4uYy00NTcwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ2NjY9c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2OTYtXFxubW0vdm1zY2FuLmM6NDY5Nzp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ2OTgte1xcbi0tXFxubW0vdm1zY2FuLmM9NjAyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscnVfZ2VuX3JvX2ZvcHMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy02MDM5LVxcbm1tL3Ztc2Nhbi5jOjYwNDA6dm9pZCBscnVfZ2VuX2luaXRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG5tbS92bXNjYW4uYy02MDQxLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwNTEtXFxubW0vdm1zY2FuLmM6NjA1Mjp2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbm1tL3Ztc2Nhbi5jLTYwNTMte1xcbi0tXFxubW0vdm1zY2FuLmMtNjA3My1cXG5tbS92bXNjYW4uYzo2MDc0OnZvaWQgbHJ1X2dlbl9pbml0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy02MDc1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwODQtXFxubW0vdm1zY2FuLmM6NjA4NTp2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNjA4Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjUyLjA4NzY5NTA1OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTk2MDA2Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIE1vZGlmaWNhdGlvbiBhbmQgVGVzdGluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aGF0IGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAgYW5kIGBtYXhfbHJ1X2dlbl9tZW1jZ2Agc2VlbSBsaWtlIHNvbGlkIGVudHJ5IHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbW9kaWZpZWQgY29kZSdzIGV4ZWN1dGlvbiwgZXNwZWNpYWxseSBzaW5jZSBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgYXJlIHdoZXJlIHRoZSBkaXJlY3QgcmVjbGFpbSBhY3Rpb25zIGFyZSBoYXBwZW5pbmcuIEV2ZW4gdGhvdWdoIHRoZXkncmUgcGVyZm9ybWFuY2UtY3JpdGljYWwsIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHRvbGQgbWUgdG8gYXZvaWQgdGhvc2UgdHlwZXMgb2YgZnVuY3Rpb25zLCB0aG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyB3aGVyZSBJJ2xsIHNlZSBteSBjb2RlIHJ1bm5pbmcuIEkgbWlnaHQgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC5cblxuV2FpdCBhIG1pbnV0ZSwgbGV0IG1lIG5vdCBqdW1wIHRoZSBndW4gYW5kIHJlbWVtYmVyIHRoZSBpbnN0cnVjdGlvbnM6IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYW55IHNwZWNpZmljIGBDT05GSUdfYCBvcHRpb25zIHRoYXQgYXJlIGNyaXRpY2FsIGZvciB0ZXN0aW5nIHRoaXMgZmVhdHVyZSBwcm9wZXJseS4gSSBzaG91bGRuJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbnM7IEkgbmVlZCB0byBsb29rIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLiBBbHNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGUgaW5zdHJ1Y3Rpb25zIHNhaWQgbm90IHRvIGFkZCB0aGUgXCJDT05GSUdfXCIgcHJlZml4LlxuXG5BbHJpZ2h0LCBsZXQncyBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYExSVV9HRU5gLiBJIHNlZSBpdCBkZXBlbmRzIG9uIGBNTVVgIGFuZCBlaXRoZXIgYDY0QklUYCBvciBgIVNQQVJTRU1FTWAgb3IgYFNQQVJTRU1FTV9WTUVNTUFQYC4gVGhvc2UgYXJlIHByZXR0eSBzdGFuZGFyZCwgc28gSSBkb24ndCB0aGluayB0aGV5J3JlIGFueXRoaW5nIHNwZWNpYWwgdG8gd29ycnkgYWJvdXQuIFNvLCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIGFyZSB0aGUgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBjb3VsZCBiZSBuZWNlc3NhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNjg4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjU4LjY4MzcwNTIyNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2NjIyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmIENPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MjE1PXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmMtMjIxLVxcbm1tL3Ztc2Nhbi5jOjIyMjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjIzLVxcbi0tXFxubW0vdm1zY2FuLmM9MjUyPXN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy0yNTUtXFx0XFx0cmV0dXJuIHRydWU7XFxubW0vdm1zY2FuLmM6MjU2OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xcbm1tL3Ztc2Nhbi5jLTI1Ny1cXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTg0Nj1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xcbi0tXFxubW0vdm1zY2FuLmMtODUxLVxcbm1tL3Ztc2Nhbi5jOjg1MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy04NTMtLypcXG4tLVxcbm1tL3Ztc2Nhbi5jPTEwNzc9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTMwNi1cXHRcXHRcXHRcXHRcXHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcXG5tbS92bXNjYW4uYzoxMzA3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS92bXNjYW4uYy0xMzA4LVxcdFxcdFxcdFxcdGlmIChucl9wYWdlcyBcXHUwMDNlPSBIUEFHRV9QTURfTlIpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2OTk9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI3MTAtXFxubW0vdm1zY2FuLmM6MjcxMTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy0yNzEyLVxcbm1tL3Ztc2Nhbi5jPTI3MTM9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmM6MjcxNDojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jLTI3MTUtREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yNzYzPXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI3NjYtXFxubW0vdm1zY2FuLmM6Mjc2NzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjc2OC1cXHRpZiAobWVtY2cpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4OTk9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0yOTE4LVxcbm1tL3Ztc2Nhbi5jOjI5MTk6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbm1tL3Ztc2Nhbi5jLTI5MjAtXFxubW0vdm1zY2FuLmM9MjkyMT1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmMtMjkyNy1cXG5tbS92bXNjYW4uYzoyOTI4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yOTI5LVxcdGlmIChtZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5NjE9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NjctXFx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZtbS1cXHUwMDNlbHJ1X2dlbi5saXN0KSk7XFxubW0vdm1zY2FuLmM6Mjk2ODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjk2OS1cXHRWTV9XQVJOX09OX09OQ0UobW0tXFx1MDAzZWxydV9nZW4ubWVtY2cpO1xcbi0tXFxubW0vdm1zY2FuLmM9Mjk4OD12b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMjk5Ni1cXG5tbS92bXNjYW4uYzoyOTk3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yOTk4LVxcdG1lbWNnID0gbW0tXFx1MDAzZWxydV9nZW4ubWVtY2c7XFxuLS1cXG5tbS92bXNjYW4uYy0zMDIwLVxcbm1tL3Ztc2Nhbi5jOjMwMjE6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTMwMjItXFx0bWVtX2Nncm91cF9wdXQobW0tXFx1MDAzZWxydV9nZW4ubWVtY2cpO1xcbi0tXFxubW0vdm1zY2FuLmMtMzAyNi1cXG5tbS92bXNjYW4uYzozMDI3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0zMDI4LXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmM9NDQ1OT1zdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1MDQtXFxubW0vdm1zY2FuLmM6NDUwNTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNDUwNi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU3ODY9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3OTktXFxubW0vdm1zY2FuLmM6NTgwMDojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNTgwMS1cXHRcXHRpZiAobWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYz02MDUyPXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy02MDcxLVxcbm1tL3Ztc2Nhbi5jOjYwNzI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTYwNzMtXFxuLS1cXG5tbS92bXNjYW4uYz02OTUwPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNjk5Mi1cXG5tbS92bXNjYW4uYzo2OTkzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy02OTk0LVxcbi0tXFxubW0vdm1zY2FuLmM9NzgyMD1ib29sIGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03ODI0LVxcbm1tL3Ztc2Nhbi5jOjc4MjU6I2lmZGVmIENPTkZJR19ISUJFUk5BVElPTlxcbm1tL3Ztc2Nhbi5jLTc4MjYtLypcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc5MDU9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1zY2FuX3N5c2N0bF90YWJsZVtdID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNzkxNC1cXHR9LFxcbm1tL3Ztc2Nhbi5jOjc5MTU6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vdm1zY2FuLmMtNzkxNi1cXHR7XFxuLS1cXG5tbS92bXNjYW4uYz03OTM3PW1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxcbm1tL3Ztc2Nhbi5jLTc5MzgtXFxubW0vdm1zY2FuLmM6NzkzOTojaWZkZWYgQ09ORklHX05VTUFcXG5tbS92bXNjYW4uYy03OTQwLS8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjU4LjcyNzM3MDk1NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDg1MzE0ODY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIENvbmZpZ3VyYXRpb24gZm9yIE1HTFJVIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgbmFpbCBkb3duIHRoZSBmdXp6aW5nIGNvbmZpZyBmb3IgdGhpcyBNR0xSVSBwYXRjaC4gSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGtleSBhc3BlY3RzLlxuXG5GaXJzdCwgdGhlIGBFbmFibGVDb25maWdzYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBXZSdyZSBkZWFsaW5nIHdpdGggYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgbm90IGVuYWJsaW5nIGBMUlVfR0VOX0VOQUJMRURgIGJ5IGRlZmF1bHQgdG8gZ2l2ZSBzb21lIHN5c2ZzIGNvbnRyb2wsIGJ1dCBpdCdzIGJldHRlciBmb3IgZnV6emluZyB0byBqdXN0IGVuYWJsZSBpdCBmcm9tIHRoZSBnZXQtZ28uIFNvIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGBbXCJMUlVfR0VOXCIsIFwiTFJVX0dFTl9FTkFCTEVEXCJdYC5cblxuTmV4dCwgSSBjb25zaWRlcmVkIHdoZXRoZXIgYE1FTUNHYCBpcyBzdHJpY3RseSByZXF1aXJlZC4gVGhlIGNvZGUgdG91Y2hlcyBmdW5jdGlvbnMgdXNlZCBieSBib3RoIGdsb2JhbCBhbmQgbWVtY2cgcmVjbGFpbS4gYE1FTUNHYCBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBpdCdzIGEgZ29vZCBpZGVhIHRvIGhhdmUgaXQgZW5hYmxlZCBpbiBmdXp6aW5nIGtlcm5lbHMgYW55d2F5LiBObyBmdXJ0aGVyIGFjdGlvbiBuZWVkZWQgaGVyZS5cblxuTm93LCB0aGUgYEZvY3VzU3ltYm9sc2AuIFRoYXQncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIGluaXRpYWxseSBsaXN0ZWQgYGxydV9nZW5fc29mdF9yZWNsYWltYCwgYG1heF9scnVfZ2VuX21lbWNnYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLiBIb3dldmVyLCBJIGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gcGljayBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy5cblxuSSByZWFsaXplZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXNuJ3QgYWN0dWFsbHkgKm1vZGlmaWVkKiBieSB0aGUgcGF0Y2gsIGV2ZW4gdGhvdWdoIGl0J3MgcmVsYXRlZCB0byBNR0xSVS4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXJzLiBTbywgYWx0aG91Z2ggdGhlIGNvZGUgbW9kaWZpZWQgbWlnaHQgYmUgaW4gc3RhdGljIGZ1bmN0aW9ucywgSSBzaG91bGQgbGlzdCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBjYWxsIHRoZW0uXG5cbkkgaWRlbnRpZmllZCB0aGUgY2FsbHM6XG4tIGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAgYW5kIGBtYXhfbHJ1X2dlbl9tZW1jZ2AgY2FsbCBgcnVuX2V2aWN0aW9uYCB3aGljaCBjYWxscyBgZXZpY3RfZm9saW9zYC5cbi0gYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGNhbGwgYGRvX3RyeV90b19mcmVlX3BhZ2VzYCB3aGljaCBjYWxscyBgc2hyaW5rX3pvbmVzYCAtXHUwMDNlIGBzaHJpbmtfbm9kZWAgLVx1MDAzZSBgc2hyaW5rX2xydXZlY2AgLVx1MDAzZSBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCAtXHUwMDNlIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgLVx1MDAzZSBgZXZpY3RfZm9saW9zYC5cblxuU28sIGl0IHNlZW1lZCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2Agd2VyZSBpbXBvcnRhbnQuXG5cbkhvd2V2ZXIsIEkgcGF1c2VkLiBJcyBgdHJ5X3RvX2ZyZWVfcGFnZXNgICp0b28qIGdlbmVyaWM/IEl0J3MgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGRpcmVjdCByZWNsYWltIGFuZCBpcyBjYWxsZWQgZnJvbSBgX19hbGxvY19wYWdlc19zbG93cGF0aGAuIEl0J3MgYSBob3QtcGF0aCBmdW5jdGlvbiB3aGVuIG1lbW9yeSBpcyBsb3cuIElmIEkgaW5jbHVkZSBpdCwgSSBtaWdodCBza2V3IHRoZSBmdXp6aW5nIHRvd2FyZHMgbWVtb3J5IGFsbG9jYXRpb24sIHdoaWNoIGlzIGEgY29tbW9uIHNjZW5hcmlvLiBIb3dldmVyLCB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBkaXJlY3QgcmVjbGFpbSBpcyB0aHJvdWdoIG1lbW9yeSBhbGxvY2F0aW9uLlxuXG5BZnRlciBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIEkgZGVjaWRlZCB0byBzaW1wbGlmeS4gSSdsbCBmb2N1cyB0aGUgZnV6emluZyBvbiB0aGUgY29yZSBNR0xSVSBhbmQgbWVtY2cgYXNwZWN0cy4gQWxzbywgYGxydV9nZW5fc29mdF9yZWNsYWltYCBpcyBjYWxsZWQgZnJvbSBgbWVtY2cxX3VwZGF0ZV90cmVlYCBmb3IgY2dyb3VwIHYxIGFuZCBgbWF4X2xydV9nZW5fbWVtY2dgIGlzIGNhbGxlZCBmcm9tIGBtZW1jZ19yZXBhcmVudF9vYmpjZ3NgIGZvciBjZ3JvdXAgdjIsIHNvIHRoZXNlIGZvY3VzIHN5bWJvbHMgd2lsbCBjb3ZlciB0aGUga2V5IHBhcnRzIG9mIHRoZSBuZXcgcGF0Y2guIFRoZXJlZm9yZSwgSSB3aWxsIGluY2x1ZGUgb25seSBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIGFuZCBgbWF4X2xydV9nZW5fbWVtY2dgLlxuXG5JIGFsc28gYnJpZWZseSByZXZpZXdlZCBvdGhlciBjb25maWdzLiBgTFJVX0dFTl9XQUxLU19NTVVgIGlzIGEgYGRlZl9ib29sIHlgIGFuZCBkZXBlbmRzIG9uIGBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdgLiBgTFJVX0dFTl9TVEFUU2AgaXMgb25seSBmb3IgZGVidWdnaW5nLlxuXG5MZXQncyBkbyBhIHF1aWNrIHBhdGNoIHJldmlldyB0byBlbnN1cmUgdGhlIGZ1enppbmcgaXMgd29ydGggaXQuIFRoaXMgcGF0Y2ggKmRvZXMqIG1ha2Ugc29tZSBiaWcgY2hhbmdlcy4gSXQgbW9kaWZpZXMgTUdMUlUgZXZpY3Rpb24sIGhvdyBmb2xpb3MgYXJlIHNjYW5uZWQgYW5kIGlzb2xhdGVkLCBhbmQgdGhlIG1pbmltdW0gc2VxdWVuY2UgbnVtYmVyIGluY3JlbWVudGluZy4gSXQgYWRkcyBiYXRjaGluZywgYW5kIGNoYW5nZXMgc3dhcHBpbmVzcy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLlxuXG5UaGVyZWZvcmUsIHRoZSBmaW5hbCBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlIGBbXCJscnVfZ2VuX3NvZnRfcmVjbGFpbVwiLCBcIm1heF9scnVfZ2VuX21lbWNnXCJdYC5cblxuSSdtIGNvbmZpZGVudCBpbiB0aGVzZSBzZXR0aW5ncy4gTm93LCBJJ2xsIGdvIGFoZWFkIGFuZCBleGVjdXRlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTQ1LCJPdXRwdXRUb2tlbnMiOjE3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDQ6MTkuNTgwNTIyNTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDI0NjAyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X2dlbl9zb2Z0X3JlY2xhaW1cIixcbiAgICBcIm1heF9scnVfZ2VuX21lbWNnXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgTXVsdGktR2VuIExSVSAoTUdMUlUpIG1lbW9yeSByZWNsYWltIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGV2aWN0aW9uIHBhdGgsIGZvbGlvIHNjYW5uaW5nLCBhbmQgYWdpbmcgaGV1cmlzdGljcy4gSXQgaW50cm9kdWNlcyBiYXRjaGluZyBpbiBgaW5jX21pbl9zZXFgIGFuZCBjaGFuZ2VzIGhvdyBgZ2V0X3R5cGVfdG9fc2NhbmAgY2FsY3VsYXRlcyB0aGUgcHJlZmVycmVkIHJlY2xhaW0gdHlwZSBiYXNlZCBvbiBzd2FwcGluZXNzLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgc3RhYmlsaXR5IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJscnVfZ2VuX3NvZnRfcmVjbGFpbVwiLFxuICAgIFwibWF4X2xydV9nZW5fbWVtY2dcIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgbWVtb3J5IHJlY2xhaW0gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgZXZpY3Rpb24gcGF0aCwgZm9saW8gc2Nhbm5pbmcsIGFuZCBhZ2luZyBoZXVyaXN0aWNzLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGluIGBpbmNfbWluX3NlcWAgYW5kIGNoYW5nZXMgaG93IGBnZXRfdHlwZV90b19zY2FuYCBjYWxjdWxhdGVzIHRoZSBwcmVmZXJyZWQgcmVjbGFpbSB0eXBlIGJhc2VkIG9uIHN3YXBwaW5lc3MuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBzdGFiaWxpdHkgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0NDoxOS42NjQ3NzgxNDdaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODgwNjI3MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDQ6MTkuNjY1NDAyMjE3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExODc5OTk4MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGZvciBMUlUgbGlzdCBvcGVyYXRpb25zLCBtb2RpZmllcyB0aGUgc3dhcHBpbmVzcy1iYXNlZCB0eXBlIHNlbGVjdGlvbiB3aXRoIGEgcXVhZHJhdGljIGJvb3N0LCBhbmQgYWRqdXN0cyB0aGUgYWdpbmcgYW5kIGlzb2xhdGlvbiBoZXVyaXN0aWNzLiBUaGVzZSBjaGFuZ2VzIG1hbmlwdWxhdGUgaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgZm9saW9gLCBMUlUgbGlzdHMpIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgdXNlci1zcGFjZSBjb3BpZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgbGlzdCBjb3JydXB0aW9ucywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk0M2IxODY3NGVhMTU5YzE0Yjg5NzczZTQ4OGM4ZDczZTM4M2ZhZDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxMjo0MTo0OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGJlNmJkMjZlOGM1NzguLjA5NTM1ZDliZGVkNWMgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0xOTEsOCArMTkxLDIwIEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xuIFx0XHRcdHByZWZldGNodyhcdTAwMjZwcmV2LVx1MDAzZV9maWVsZCk7XHRcdFx0XFxcbiBcdFx0fVx0XHRcdFx0XHRcdFx0XFxcbiBcdH0gd2hpbGUgKDApXG4rI2RlZmluZSBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKVx0XHRcdFxcXG4rXHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdGlmICgoX2ZvbGlvKS1cdTAwM2VscnUubmV4dCAhPSBfYmFzZSkge1x0XHRcdFxcXG4rXHRcdFx0c3RydWN0IGZvbGlvICpuZXh0O1x0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdG5leHQgPSBsaXN0X2VudHJ5KChfZm9saW8pLVx1MDAzZWxydS5uZXh0LFx0XHRcXFxuK1x0XHRcdFx0XHRzdHJ1Y3QgZm9saW8sIGxydSk7XHRcdFxcXG4rXHRcdFx0cHJlZmV0Y2h3KFx1MDAyNm5leHQtXHUwMDNlX2ZpZWxkKTtcdFx0XHRcXFxuK1x0XHR9XHRcdFx0XHRcdFx0XHRcXFxuK1x0fSB3aGlsZSAoMClcbitcbiAjZWxzZVxuICNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZCkgZG8geyB9IHdoaWxlICgwKVxuKyNkZWZpbmUgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZCkgZG8geyB9IHdoaWxlICgwKVxuICNlbmRpZlxuIFxuIC8qXG5AQCAtMjcwLDYgKzI4MiwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfZXhlY19maWxlX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3Qodm1hX2ZsYWdzLCBWTUFfRVhFQ19CSVQpIFx1MDAyNlx1MDAyNiBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gfVxuIFxuKy8qIFNlZSBnZXRfdHlwZV90b19zY2FuKCk6IHRoZXNlIHZhbHVlcyBhbHdheXMgc2VsZWN0IEZJTEUgb3IgQU5PTiAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19leHRyZW1lX3N3YXBwaW5lc3MoaW50IHN3YXBwaW5lc3MpXG4re1xuK1x0cmV0dXJuIHN3YXBwaW5lc3MgXHUwMDNjPSBNSU5fU1dBUFBJTkVTUyArIDEgfHxcbitcdCAgICAgICBzd2FwcGluZXNzIFx1MDAzZT0gTUFYX1NXQVBQSU5FU1M7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHNldF90YXNrX3JlY2xhaW1fc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuIFx0XHRcdFx0ICAgc3RydWN0IHJlY2xhaW1fc3RhdGUgKnJzKVxuIHtcbkBAIC0zMjk2LDIwICszMzE1LDIxIEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hXG4gfVxuIFxuIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXG4tc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKVxuIHtcbi1cdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuLVx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4tXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuIFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdGludCBuZXdfZ2VuO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4gXG4gXHRkbyB7XG4gXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuIFx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbi1cdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pXG4rXHRcdGlmIChuZXdfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7XG4rXHRcdFx0aWYgKGluY3JlYXNlZClcbitcdFx0XHRcdCppbmNyZWFzZWQgPSBmYWxzZTtcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbitcdFx0fVxuIFxuIFx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuIFxuQEAgLTMzMTcsOCArMzMzNywyMSBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gXG4tXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuK1x0aWYgKGluY3JlYXNlZClcbitcdFx0KmluY3JlYXNlZCA9IHRydWU7XG4rXHRyZXR1cm4gbmV3X2dlbjtcbit9XG4rXG4rc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbitcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuK1x0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbitcdGJvb2wgZ2VuX2luY3JlYXNlZDtcbiBcbitcdG5ld19nZW4gPSBfX2ZvbGlvX2luY19nZW4oZm9saW8sIG9sZF9nZW4sIFx1MDAyNmdlbl9pbmNyZWFzZWQpO1xuK1x0aWYgKGdlbl9pbmNyZWFzZWQpXG4rXHRcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4gXHRyZXR1cm4gbmV3X2dlbjtcbiB9XG4gXG5AQCAtMzg5NywxMyArMzkzMCwyNyBAQCBzdGF0aWMgdm9pZCBjbGVhcl9tbV93YWxrKHZvaWQpXG4gXHRcdGtmcmVlKHdhbGspO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfbHJ1X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBsaXN0X2hlYWQgKipiYXRjaF9lbmQsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QpXG4re1xuK1x0TElTVF9IRUFEKG1vdmFibGUpO1xuK1xuK1x0aWYgKCEqYmF0Y2hfZW5kKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRsaXN0X2N1dF9wb3NpdGlvbihcdTAwMjZtb3ZhYmxlLCBoZWFkLCAqYmF0Y2hfZW5kKTtcbitcdGxpc3Rfc3BsaWNlX3RhaWxfaW5pdChcdTAwMjZtb3ZhYmxlLCBkc3QpO1xuK1x0KmJhdGNoX2VuZCA9IE5VTEw7XG4rfVxuK1xuIHN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxuIHtcbiBcdGludCB6b25lO1xuLVx0aW50IHJlbWFpbmluZyA9IE1BWF9MUlVfQkFUQ0g7XG4rXHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSCAvIChpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykgPyAyIDogOCk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuIFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbitcdGludCB0YXJnZXRfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuIFxuIFx0LyogRm9yIGZpbGUgdHlwZSwgc2tpcCB0aGUgY2hlY2sgaWYgc3dhcHBpbmVzcyBpcyBhbm9uIG9ubHkgKi9cbiBcdGlmICh0eXBlIFx1MDAyNlx1MDAyNiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkpXG5AQCAtMzkxNSwzMyArMzk2Miw1NSBAQCBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbiBcbiBcdC8qIHByZXZlbnQgY29sZC9ob3QgaW52ZXJzaW9uIGlmIHRoZSB0eXBlIGlzIGV2aWN0YWJsZSAqL1xuIFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspIHtcbitcdFx0c3RydWN0IGxpc3RfaGVhZCAqdGFyZ2V0X2xpc3QgPSBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdO1xuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tvbGRfZ2VuXVt0eXBlXVt6b25lXTtcbitcdFx0dW5zaWduZWQgbG9uZyBwcm90ZWN0ZWRbTUFYX05SX1RJRVJTXSA9IHt9LCBkZWx0YSA9IDA7XG4rXHRcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcyA9IGhlYWQtXHUwMDNlbmV4dDtcbitcdFx0c3RydWN0IGxpc3RfaGVhZCAqYmF0Y2hfZW5kID0gTlVMTDtcbiBcbi1cdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4tXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcbitcdFx0d2hpbGUgKHBvcyAhPSBoZWFkKSB7XG4rXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZm9saW8sIGxydSk7XG4rXHRcdFx0bG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcdFx0XHRpbnQgcmVmcyA9IGZvbGlvX2xydV9yZWZzKGZvbGlvKTtcbiBcdFx0XHRib29sIHdvcmtpbmdzZXQgPSBmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0XHRcdGJvb2wgZ2VuX2luY3JlYXNlZDtcbiBcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSAhPSB0eXBlLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3pvbmVudW0oZm9saW8pICE9IHpvbmUsIGZvbGlvKTtcbiBcbi1cdFx0XHRuZXdfZ2VuID0gZm9saW9faW5jX2dlbihscnV2ZWMsIGZvbGlvKTtcbi1cdFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbbmV3X2dlbl1bdHlwZV1bem9uZV0pO1xuK1x0XHRcdHByZWZldGNod19uZXh0X2xydV9mb2xpbyhmb2xpbywgaGVhZCwgZmxhZ3MpO1xuK1x0XHRcdHBvcyA9IHBvcy1cdTAwM2VuZXh0O1xuK1x0XHRcdG5ld19nZW4gPSBfX2ZvbGlvX2luY19nZW4oZm9saW8sIG9sZF9nZW4sIFx1MDAyNmdlbl9pbmNyZWFzZWQpO1xuK1x0XHRcdGlmIChnZW5faW5jcmVhc2VkKSB7XG4rXHRcdFx0XHRkZWx0YSArPSBucl9wYWdlcztcbitcdFx0XHRcdGJhdGNoX2VuZCA9IFx1MDAyNmZvbGlvLVx1MDAzZWxydTtcbiBcbi1cdFx0XHQvKiBkb24ndCBjb3VudCB0aGUgd29ya2luZ3NldCBiZWluZyBsYXppbHkgcHJvbW90ZWQgKi9cbi1cdFx0XHRpZiAocmVmcyArIHdvcmtpbmdzZXQgIT0gQklUKExSVV9SRUZTX1dJRFRIKSArIDEpIHtcbi1cdFx0XHRcdGludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpO1xuLVx0XHRcdFx0aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1x0XHRcdFx0LyogZG9uJ3QgY291bnQgdGhlIHdvcmtpbmdzZXQgYmVpbmcgbGF6aWx5IHByb21vdGVkICovXG4rXHRcdFx0XHRpZiAocmVmcyArIHdvcmtpbmdzZXQgIT0gQklUKExSVV9SRUZTX1dJRFRIKSArIDEpIHtcbitcdFx0XHRcdFx0aW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7XG4gXG4tXHRcdFx0XHRXUklURV9PTkNFKGxydWdlbi1cdTAwM2Vwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0sXG4tXHRcdFx0XHRcdCAgIGxydWdlbi1cdTAwM2Vwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0gKyBkZWx0YSk7XG4rXHRcdFx0XHRcdHByb3RlY3RlZFt0aWVyXSArPSBucl9wYWdlcztcbitcdFx0XHRcdH1cbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0Zmx1c2hfbHJ1X2JhdGNoKGhlYWQsIFx1MDAyNmJhdGNoX2VuZCwgdGFyZ2V0X2xpc3QpO1xuK1x0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSk7XG4gXHRcdFx0fVxuLVxuIFx0XHRcdGlmICghLS1yZW1haW5pbmcpXG4tXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0XHRicmVhaztcbiBcdFx0fVxuK1x0XHRmbHVzaF9scnVfYmF0Y2goaGVhZCwgXHUwMDI2YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7XG4rXG4rXHRcdFdSSVRFX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdLFxuK1x0XHRcdCAgIGxydWdlbi1cdTAwM2Vucl9wYWdlc1tvbGRfZ2VuXVt0eXBlXVt6b25lXSAtIGRlbHRhKTtcbitcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV0sXG4rXHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdICsgZGVsdGEpO1xuK1x0XHRmb3IgKGludCB0aWVyID0gMDsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspXG4rXHRcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLFxuK1x0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSArIHByb3RlY3RlZFt0aWVyXSk7XG4rXHRcdGlmICghcmVtYWluaW5nKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBkb25lOlxuIFx0cmVzZXRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0cnVlKTtcbkBAIC00MTUxLDIwICs0MjIwLDI4IEBAIHN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2xcbiBcdHNjLVx1MDAzZXByaW9yaXR5ID0gY2xhbXAocHJpb3JpdHksIERFRl9QUklPUklUWSAvIDIsIERFRl9QUklPUklUWSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfZ2VuX3NpemUoc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbixcbitcdFx0aW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuK3tcbitcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4rXHR1bnNpZ25lZCBsb25nIHNpemUgPSAwO1xuK1xuK1x0Zm9yIChpbnQgem9uZSA9IDA7IHpvbmUgXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxuK1x0XHRzaXplICs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7XG4rXHRyZXR1cm4gc2l6ZTtcbit9XG4rXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4ge1xuLVx0aW50IGdlbiwgdHlwZSwgem9uZTtcbitcdGludCB0eXBlO1xuIFx0dW5zaWduZWQgbG9uZyBzZXEsIHRvdGFsID0gMDtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcbiBcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4gXG4gXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7XG4tXHRcdGZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFx1MDAzYz0gbWF4X3NlcTsgc2VxKyspIHtcbi1cdFx0XHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4tXHRcdFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspXG4tXHRcdFx0XHR0b3RhbCArPSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xuLVx0XHR9XG4rXHRcdGZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFx1MDAzYz0gbWF4X3NlcTsgc2VxKyspXG4rXHRcdFx0dG90YWwgKz0gbHJ1dmVjX2dlbl9zaXplKGxydWdlbiwgdHlwZSwgc2VxKTtcbiBcdH1cbiBcbiBcdHJldHVybiB0b3RhbDtcbkBAIC00NzI4LDcgKzQ4MDUsOCBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxuIFxuIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHR5cGUsIGludCB0aWVyLFxuLVx0XHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZHApXG4rXHRcdCAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkcCxcbitcdFx0ICAgICAgIGJvb2wgKmV4aGF1c3RlZClcbiB7XG4gXHRpbnQgaTtcbiBcdGludCBnZW47XG5AQCAtNDczOSwxMiArNDgxNywxNSBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0aW50IHNraXBwZWQgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyByZW1haW5pbmcgPSBucl90b19zY2FuO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4rXHRib29sIGVhcmx5X3N0b3AgPSBmYWxzZTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShucl90b19zY2FuIFx1MDAzZSBNQVhfTFJVX0JBVENIKTtcbiBcdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShsaXN0KSk7XG4gXG4tXHRpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUylcbitcdGlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpID09IE1JTl9OUl9HRU5TKSB7XG4rXHRcdCpleGhhdXN0ZWQgPSB0cnVlO1xuIFx0XHRyZXR1cm4gMDtcbitcdH1cbiBcbiBcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuIFxuQEAgLTQ3NzUsOCArNDg1NiwxMCBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0c2tpcHBlZF96b25lICs9IGRlbHRhO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoIS0tcmVtYWluaW5nIHx8IG1heChpc29sYXRlZCwgc2tpcHBlZF96b25lKSBcdTAwM2U9IE1JTl9MUlVfQkFUQ0gpXG4rXHRcdFx0aWYgKCEtLXJlbWFpbmluZyB8fCBtYXgoaXNvbGF0ZWQsIHNraXBwZWRfem9uZSkgXHUwMDNlPSBNSU5fTFJVX0JBVENIKSB7XG4rXHRcdFx0XHRlYXJseV9zdG9wID0gdHJ1ZTtcbiBcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFxuIFx0XHRpZiAoc2tpcHBlZF96b25lKSB7XG5AQCAtNDc4NSw4ICs0ODY4LDEwIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0c2tpcHBlZCArPSBza2lwcGVkX3pvbmU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKCFyZW1haW5pbmcgfHwgaXNvbGF0ZWQgXHUwMDNlPSBNSU5fTFJVX0JBVENIKVxuK1x0XHRpZiAoIXJlbWFpbmluZyB8fCBpc29sYXRlZCBcdTAwM2U9IE1JTl9MUlVfQkFUQ0gpIHtcbitcdFx0XHRlYXJseV9zdG9wID0gdHJ1ZTtcbiBcdFx0XHRicmVhaztcbitcdFx0fVxuIFx0fVxuIFxuIFx0aXRlbSA9IFBHU0NBTl9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcbkBAIC00Nzk3LDYgKzQ4ODIsMTMgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdHNjYW5uZWQsIHNraXBwZWQsIGlzb2xhdGVkLFxuIFx0XHRcdFx0dHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pO1xuIFxuK1x0LypcbitcdCAqIElmIHdlIGRpZG4ndCBzdG9wIGVhcmx5LCBhbGwgcmVjbGFpbWFibGUgZm9saW9zIGluIHRoZSBjdXJyZW50XG4rXHQgKiBnZW5lcmF0aW9uIGhhdmUgYmVlbiBzY2FubmVkLiBXZSBhcmUgZXhoYXVzdGVkIGlmIHRoaXMgaXMgdGhlIGxhc3RcbitcdCAqIHJlY2xhaW1hYmxlIGdlbmVyYXRpb24uXG4rXHQgKi9cbitcdCpleGhhdXN0ZWQgPSAhZWFybHlfc3RvcCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICBscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSArIE1JTl9OUl9HRU5TID09IGxydWdlbi1cdTAwM2VtYXhfc2VxO1xuIFx0Kmlzb2xhdGVkcCA9IGlzb2xhdGVkO1xuIFx0cmV0dXJuIHNjYW5uZWQ7XG4gfVxuQEAgLTQ4MjQsNTEgKzQ5MTYsOTAgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbiBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4gXHRzdHJ1Y3QgY3RybF9wb3Mgc3AsIHB2ID0ge307XG4rXHRpbnQgYW5vbl9nYWluLCBmaWxlX2dhaW47XG4gXG4gXHRpZiAoc3dhcHBpbmVzcyBcdTAwM2M9IE1JTl9TV0FQUElORVNTICsgMSlcbiBcdFx0cmV0dXJuIExSVV9HRU5fRklMRTtcbiBcbiBcdGlmIChzd2FwcGluZXNzIFx1MDAzZT0gTUFYX1NXQVBQSU5FU1MpXG4gXHRcdHJldHVybiBMUlVfR0VOX0FOT047XG4rXG4rXHQvKlxuK1x0ICogQXBwbHkgYSBxdWFkcmF0aWMgYm9vc3QgYmFzZWQgb24gdGhlIGRpc3RhbmNlIGZyb20gdGhlIG5ldXRyYWxcbitcdCAqIGJhbGFuY2UgcG9pbnQgKHN3YXBwaW5lc3MgPSBNQVhfU1dBUFBJTkVTUyAvIDIpLlxuK1x0ICpcbitcdCAqIEEgbGluZWFyIHdlaWdodCBpcyBlYXNpbHkgb3ZlcndoZWxtZWQgYnkgaGlzdG9yaWNhbCByZWZhdWx0IGNvc3RcbitcdCAqIHdoZW4gc3dhcHBpbmVzcyBkZXZpYXRlcyBmcm9tIG5ldXRyYWwuIFRoZSBxdWFkcmF0aWMgc2NhbGluZ1xuK1x0ICogYW1wbGlmaWVzIHRoZSB3ZWlnaHQgb2YgdGhlIHByZWZlcnJlZCB0eXBlIHNtb290aGx5LlxuK1x0ICovXG4rXHRpZiAoc3dhcHBpbmVzcyBcdTAwM2MgTUFYX1NXQVBQSU5FU1MgLyAyKSB7XG4rXHRcdGludCBkZWx0YSA9IChNQVhfU1dBUFBJTkVTUyAvIDIpIC0gc3dhcHBpbmVzcztcbitcdFx0aW50IGJvb3N0ID0gKGRlbHRhICogZGVsdGEpIFx1MDAzZVx1MDAzZSA0O1xuK1xuK1x0XHRhbm9uX2dhaW4gPSBzd2FwcGluZXNzO1xuK1x0XHRmaWxlX2dhaW4gPSAoTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzKSArIGJvb3N0O1xuK1x0fSBlbHNlIHtcbitcdFx0aW50IGRlbHRhID0gc3dhcHBpbmVzcyAtIChNQVhfU1dBUFBJTkVTUyAvIDIpO1xuK1x0XHRpbnQgYm9vc3QgPSAoZGVsdGEgKiBkZWx0YSkgXHUwMDNlXHUwMDNlIDQ7XG4rXG4rXHRcdGFub25fZ2FpbiA9IHN3YXBwaW5lc3MgKyBib29zdDtcbitcdFx0ZmlsZV9nYWluID0gTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzO1xuK1x0fVxuK1xuIFx0LypcbiBcdCAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmVcbiBcdCAqIHdoaWNoIHR5cGUgdG8gc2Nhbi5cbiBcdCAqL1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuK1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBhbm9uX2dhaW4sIFx1MDAyNnNwKTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgZmlsZV9nYWluLCBcdTAwMjZwdik7XG4gXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIGlzX3NpbmdsZV90eXBlX3JlY2xhaW0oaW50IHN3YXBwaW5lc3MpXG4re1xuK1x0cmV0dXJuIHN3YXBwaW5lc3MgPT0gTUlOX1NXQVBQSU5FU1MgfHxcbitcdCAgICAgICBzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xuK31cbitcbiBzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLFxuIFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCxcbiBcdFx0XHQgIGludCAqaXNvbGF0ZV90eXBlLCBpbnQgKmlzb2xhdGVfc2Nhbm5lZClcbiB7XG4tXHRpbnQgaTtcbi1cdGludCB0b3RhbF9zY2FubmVkID0gMDtcbitcdGJvb2wgdHlwZV9mYWxsYmFja19hbGxvd2VkID0gIWlzX3NpbmdsZV90eXBlX3JlY2xhaW0oc3dhcHBpbmVzcyk7XG4gXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbitcdGludCB0b3RhbF9zY2FubmVkID0gMCwgc2Nhbm5lZCwgdGllcjtcbitcdGJvb2wgZXhoYXVzdGVkLCB0cmllZCA9IGZhbHNlO1xuIFxuLVx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUoaSwgc3dhcHBpbmVzcykge1xuLVx0XHRpbnQgc2Nhbm5lZDtcbi1cdFx0aW50IHRpZXIgPSBnZXRfdGllcl9pZHgobHJ1dmVjLCB0eXBlKTtcbityZXRyeTpcbitcdHRpZXIgPSBnZXRfdGllcl9pZHgobHJ1dmVjLCB0eXBlKTtcbitcdHNjYW5uZWQgPSBzY2FuX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLFxuK1x0XHRcdCAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkLCBcdTAwMjZleGhhdXN0ZWQpO1xuIFxuLVx0XHRzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYyxcbi1cdFx0XHRcdCAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkKTtcbitcdHRvdGFsX3NjYW5uZWQgKz0gc2Nhbm5lZDtcbitcdGlmICgqaXNvbGF0ZWQpIHtcbitcdFx0Kmlzb2xhdGVfdHlwZSA9IHR5cGU7XG4rXHRcdCppc29sYXRlX3NjYW5uZWQgPSBzY2FubmVkO1xuK1x0XHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcbitcdH1cbiBcbi1cdFx0dG90YWxfc2Nhbm5lZCArPSBzY2FubmVkO1xuLVx0XHRpZiAoKmlzb2xhdGVkKSB7XG4tXHRcdFx0Kmlzb2xhdGVfdHlwZSA9IHR5cGU7XG4tXHRcdFx0Kmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0Lypcbi1cdFx0ICogSWYgc2Nhbm5lZCBcdTAwM2UgMCBhbmQgaXNvbGF0ZWQgPT0gMCwgYXZvaWQgZmFsbGluZyBiYWNrIHRvIHRoZVxuLVx0XHQgKiBvdGhlciB0eXBlLCBhcyB0aGlzIHR5cGUgcmVtYWlucyBzdWZmaWNpZW50LiBGYWxsaW5nIGJhY2tcbi1cdFx0ICogdG9vIHJlYWRpbHkgY2FuIGRpc3J1cHQgdGhlIHBvc2l0aXZlX2N0cmxfZXJyKCkgYmlhcy5cbi1cdFx0ICovXG4tXHRcdGlmICghc2Nhbm5lZClcbi1cdFx0XHR0eXBlID0gIXR5cGU7XG4rXHQvKlxuK1x0ICogV2UgYXJlIHJ1bm5pbmcgb3V0IG9mIHRoZSBjdXJyZW50IHJlY2xhaW0gdHlwZS4gRmFsbCBiYWNrIHRvXG4rXHQgKiB0aGUgb3RoZXIgdHlwZSBpZiBhbGxvd2VkLlxuK1x0ICovXG4rXHRpZiAoZXhoYXVzdGVkIFx1MDAyNlx1MDAyNiB0eXBlX2ZhbGxiYWNrX2FsbG93ZWQpIHtcbitcdFx0dHlwZSA9ICF0eXBlO1xuK1x0XHR0eXBlX2ZhbGxiYWNrX2FsbG93ZWQgPSBmYWxzZTtcbitcdFx0Z290byByZXRyeTtcbitcdH1cbitcdC8qXG4rXHQgKiBXZSBhcmUgbm90IGV4aGF1c3RlZCwgYnV0IGZhaWxlZCB0byBpc29sYXRlIGFueSBmb2xpb3MgZHVlIHRvXG4rXHQgKiByYWNlcy4gR2l2ZSB0aGlzIHR5cGUgb25lIG1vcmUgY2hhbmNlIHRvIGF2b2lkIGEgbGFyZ2VyIGxvb3AuXG4rXHQgKi9cbitcdGlmICghZXhoYXVzdGVkIFx1MDAyNlx1MDAyNiAhdHJpZWQpIHtcbitcdFx0dHJpZWQgPSB0cnVlO1xuK1x0XHRnb3RvIHJldHJ5O1xuIFx0fVxuIFxuIFx0cmV0dXJuIHRvdGFsX3NjYW5uZWQ7XG5AQCAtNDk3MCwyMSArNTEwMSw2NyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHJldHVybiBzY2FubmVkO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBscnVfZ2VuX2ltYmFsYW5jZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsXG4rXHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG4re1xuK1x0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4rXHR1bnNpZ25lZCBsb25nIHlvdW5nID0gMCwgb2xkID0gMCwgbGFnID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgaW5hY3RpdmVfcmF0aW8sIGdiO1xuK1x0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbitcbitcdC8qIHdlIHN0aWxsIGhhdmUgZW5vdWdoIGdlbmVyYXRpb25zIHRvIHJlY2xhaW0gKi9cbitcdGlmIChtaW5fc2VxW3R5cGVdICsgTUlOX05SX0dFTlMgXHUwMDNjIG1heF9zZXEpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qXG4rXHQgKiBUcmlnZ2VyIGFnaW5nIGlmIHRoZSBwcmVmZXJyZWQgdHlwZSBpcyBydW5uaW5nIGxvdyBvbiByZWNsYWltYWJsZVxuK1x0ICogZm9saW9zLCBwcm92aWRlZCB0aGUgZ2VuZXJhdGlvbiBsYWcgb2YgdGhlIG90aGVyIHR5cGUgcmVtYWlucyBzbWFsbFxuK1x0ICogZW5vdWdoIHRoYXQgaW5jX21pbl9zZXEoKSBpbnRyb2R1Y2VzIG5lZ2xpZ2libGUgb3ZlcmhlYWRcbitcdCAqL1xuK1x0Zm9yICh1bnNpZ25lZCBsb25nIHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSBcdTAwM2M9IG1heF9zZXE7IHNlcSsrKSB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGxydXZlY19nZW5fc2l6ZShscnVnZW4sIHR5cGUsIHNlcSk7XG4rXG4rXHRcdGlmIChzZXEgKyBNSU5fTlJfR0VOUyBcdTAwM2UgbWF4X3NlcSlcbitcdFx0XHR5b3VuZyArPSBzaXplO1xuK1x0XHRlbHNlXG4rXHRcdFx0b2xkICs9IHNpemU7XG4rXHR9XG4rXHRpZiAobWluX3NlcVshdHlwZV0gKyBNQVhfTlJfR0VOUyA9PSBtYXhfc2VxICsgMSlcbitcdFx0bGFnICs9IGxydXZlY19nZW5fc2l6ZShscnVnZW4sICF0eXBlLCBtaW5fc2VxWyF0eXBlXSk7XG4rXG4rXHQvKlxuK1x0ICogQm9ycm93IHRoZSBhZGFwdGl2ZSByYXRpbyBmcm9tIGluYWN0aXZlX2lzX2xvdygpLCBhbmQgc2NhbGVcbitcdCAqIGl0IGJ5IHNxcnQoTUFYX05SX0dFTlMpIHRvIG1ha2UgYWdpbmcgbGVzcyBhZ2dyZXNzaXZlXG4rXHQgKi9cbitcdGdiID0gKHlvdW5nICsgb2xkKSBcdTAwM2VcdTAwM2UgKDMwIC0gUEFHRV9TSElGVCk7XG4rXHRpbmFjdGl2ZV9yYXRpbyA9IGdiID8gaW50X3NxcnQoMTAgKiBnYiAqIE1BWF9OUl9HRU5TKSA6IE1BWF9OUl9HRU5TO1xuK1x0cmV0dXJuIHlvdW5nIFx1MDAzZSBvbGQgKiBpbmFjdGl2ZV9yYXRpbyBcdTAwMjZcdTAwMjYgKGxhZyBcdTAwM2MgTUFYX0xSVV9CQVRDSCB8fFxuK1x0ICAgICAgIChpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykgXHUwMDI2XHUwMDI2IHNjLVx1MDAzZXByaW9yaXR5IFx1MDAzZSAyKSk7XG4rfVxuK1xuIHN0YXRpYyBib29sIHNob3VsZF9ydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsXG4gXHRcdFx0ICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MpXG4ge1xuK1x0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XG4gXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuIFxuLVx0LyogaGF2ZSB0byBydW4gYWdpbmcsIHNpbmNlIGV2aWN0aW9uIGlzIG5vdCBwb3NzaWJsZSBhbnltb3JlICovXG4tXHRpZiAoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyBcdTAwM2UgbWF4X3NlcSlcbitcdC8qIHJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgZXhoYXVzdGVkICovXG4rXHRpZiAobWluX3NlcVt0eXBlXSArIE1JTl9OUl9HRU5TIFx1MDAzZSBtYXhfc2VxKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdC8qIHRyeSB0byBhdm9pZCBhZ2luZywgZG8gZ2VudGxlIHJlY2xhaW0gYXQgdGhlIGRlZmF1bHQgcHJpb3JpdHkgKi9cbi1cdGlmIChzYy1cdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpXG4rXHQvKlxuK1x0ICogVHJ5IHRvIGF2b2lkIGFnaW5nIGJ5IGRvaW5nIGdlbnRsZSByZWNsYWltIGF0IHRoZSBkZWZhdWx0XG4rXHQgKiBwcmlvcml0eS4gU2tpcCBnZW50bGUgcmVjbGFpbSBmb3IgZXh0cmVtZSBzd2FwcGluZXNzLlxuK1x0ICovXG4rXHRpZiAoc2MtXHUwMDNlcHJpb3JpdHkgPT0gREVGX1BSSU9SSVRZIFx1MDAyNlx1MDAyNiAhaXNfZXh0cmVtZV9zd2FwcGluZXNzKHN3YXBwaW5lc3MpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKiBiZXR0ZXIgdG8gcnVuIGFnaW5nIGV2ZW4gdGhvdWdoIGV2aWN0aW9uIGlzIHN0aWxsIHBvc3NpYmxlICovXG4tXHRyZXR1cm4gZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxO1xuK1x0aWYgKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpICsgTUlOX05SX0dFTlMgPT0gbWF4X3NlcSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHQvKiBSdW4gYWdpbmcgaWYgdGhlIHByZWZlcnJlZCB0eXBlIGlzIHNldmVyZWx5IGltYmFsYW5jZWQgYWNyb3NzIGdlbnMgKi9cbitcdHJldHVybiBscnVfZ2VuX2ltYmFsYW5jZWQobHJ1dmVjLCBtYXhfc2VxLCBzYywgdHlwZSwgc3dhcHBpbmVzcyk7XG4gfVxuIFxuIHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0NDoxOS42NjU0MDMwNTdaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4Nzk5NzIxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIGluIHRoZSBNR0xSVSBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBNR0xSVSBwYXRjaCwgZm9jdXNpbmcgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgdG8gYG1tL3Ztc2Nhbi5jYCBpbW1lZGlhdGVseSBoaWdobGlnaHRzIHRoZSBjb3JlIGFyZWFzOiBjaGFuZ2VzIHRvIExSVSBnZW5lcmF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBmb2xpb19pbmNfZ2VuYCwgYGluY19taW5fc2VxYCwgYHNjYW5fZm9saW9zYCwgYGdldF90eXBlX3RvX3NjYW5gLCBgaXNvbGF0ZV9mb2xpb3NgLCBhbmQgYHNob3VsZF9ydW5fYWdpbmdgLiBUaGVyZSdzIGFsc28gdGhpcyBuZXcgYHByZWZldGNod19uZXh0X2xydV9mb2xpb2AgZnVuY3Rpb24uXG5cbk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmlnaHQ/IExldCdzIHNlZS4uLiB0aGUgcGF0Y2ggaXMgYWxsIGFib3V0IG9wdGltaXppbmcgcGFnZSByZWNsYWltLiBJdCdzIHdvcmtpbmcgd2l0aCB0aGUgYHN0cnVjdCBmb2xpb2AgYW5kIExSVSBsaXN0cywgY29yZSBkYXRhIHN0cnVjdHVyZXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ20gbm90IHNlZWluZyBhbnkgbmV3IHN0cnVjdHVyZXMgYmVpbmcgaW50cm9kdWNlZCB0aGF0IGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgYSBtYWpvciByZWQgZmxhZyBJIGNhbiBpbW1lZGlhdGVseSBkaXNtaXNzLiBJdCdzIG5vdCBhbGxvY2F0aW5nIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vciBkb2VzIGl0IGFwcGVhciB0byBiZSBoYW5kbGluZyBhbnkgdXNlci1zcGFjZSBjb3BpZXMgb3IgZGVhbGluZyB3aXRoIHRoZSByaXNrIG9mIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIG1lYW5zIHRoZXJlIGlzbid0IGFueXRoaW5nIGRpcmVjdGx5IGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRhbmdlcnMuXG5cbkFueSBidWdzIGludHJvZHVjZWQgaGVyZSB3b3VsZCBtb3JlIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMgd2l0aGluIHRoZSBwYWdlIHJlY2xhaW0gYWxnb3JpdGhtcyB0aGVtc2VsdmVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdoZW4gbWFuaXB1bGF0aW5nIGZvbGlvcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IsIHBvdGVudGlhbGx5LCBkZWFkbG9ja3MgaWYgY29uY3VycmVuY3kgaXNuJ3QgaGFuZGxlZCBjb3JyZWN0bHkuIFRoYW5rZnVsbHksIEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHVzdWFsIHN1c3BlY3RzIGFyZSBpbiBwbGFjZSB0byBjYXRjaCB0aG9zZSB0eXBlcyBvZiBpc3N1ZXMuIFNpbmNlIHRoZSBjaGFuZ2VzIGFyZSB3ZWxsLWNvbnRhaW5lZCBhbmQgZm9jdXNlZCBvbiBtZW1vcnkgbWFuYWdlbWVudCwgS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQncyB0YWtlIGEgcXVpY2sgc2Vjb25kIGxvb2suIGBmbHVzaF9scnVfYmF0Y2hgIGlzIHVzaW5nIGBsaXN0X2N1dF9wb3NpdGlvbmAgYW5kIGBsaXN0X3NwbGljZV90YWlsX2luaXRgLCB3aGljaCBhcmUgc3RhbmRhcmQgbGlzdCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLiBgaW5jX21pbl9zZXFgIGlzIHVzaW5nIGBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW9gIOKAkyBqdXN0IGEgcHJlZmV0Y2hpbmcgb3B0aW1pemF0aW9uLiBgX19mb2xpb19pbmNfZ2VuYCB1cGRhdGVzIGBmb2xpby1cdTAwM2VmbGFnc2AuIGBscnV2ZWNfZ2VuX3NpemVgIHJlYWRzIHRoZSBleGlzdGluZyBgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzYC4gYGdldF90eXBlX3RvX3NjYW5gIGlzIGNhbGN1bGF0aW5nIHNvbWUgZ2FpbiBmYWN0b3JzIGJhc2VkIG9uIHN3YXBwaW5lc3MuIGBpc29sYXRlX2ZvbGlvc2AgaGFzIGEgcmV0cnkgbG9vcC4gQW5kIGBscnVfZ2VuX2ltYmFsYW5jZWRgIGNhbGN1bGF0ZXMgc29tZSByYXRpb3MuIFllcCwgYWxsIGdvb2QuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGhlcmUuIE1vdmluZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0OSwiT3V0cHV0VG9rZW5zIjoxODYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0NDozMS41NDUzNzc5N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgaW50cm9kdWNlcyBiYXRjaGluZyBmb3IgTFJVIGxpc3Qgb3BlcmF0aW9ucywgbW9kaWZpZXMgdGhlIHN3YXBwaW5lc3MtYmFzZWQgdHlwZSBzZWxlY3Rpb24gd2l0aCBhIHF1YWRyYXRpYyBib29zdCwgYW5kIGFkanVzdHMgdGhlIGFnaW5nIGFuZCBpc29sYXRpb24gaGV1cmlzdGljcy4gVGhlc2UgY2hhbmdlcyBtYW5pcHVsYXRlIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmVzIChgc3RydWN0IGZvbGlvYCwgTFJVIGxpc3RzKSBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGxpc3QgY29ycnVwdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGZvciBMUlUgbGlzdCBvcGVyYXRpb25zLCBtb2RpZmllcyB0aGUgc3dhcHBpbmVzcy1iYXNlZCB0eXBlIHNlbGVjdGlvbiB3aXRoIGEgcXVhZHJhdGljIGJvb3N0LCBhbmQgYWRqdXN0cyB0aGUgYWdpbmcgYW5kIGlzb2xhdGlvbiBoZXVyaXN0aWNzLiBUaGVzZSBjaGFuZ2VzIG1hbmlwdWxhdGUgaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgZm9saW9gLCBMUlUgbGlzdHMpIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgdXNlci1zcGFjZSBjb3BpZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgbGlzdCBjb3JydXB0aW9ucywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5l5wn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 12:26:57 +0000 UTC FinishedAt: 2026-08-12 12:44:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "480a31230b426efb005b6e71a14ef80f405f18b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "480a31230b426efb005b6e71a14ef80f405f18b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "ec2b3718-8f80-46d7-ad16-c44e1c276441" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "lru_gen_soft_reclaim", "max_lru_gen_memcg", "try_to_free_mem_cgroup_pages" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X2dlbl9zb2Z0X3JlY2xhaW0mIzM0OywKICAgICYjMzQ7bWF4X2xydV9nZW5fbWVtY2cmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEl0IGludHJvZHVjZXMgYmF0Y2hpbmcgZm9yIExSVSBsaXN0IG9wZXJhdGlvbnMsIG1vZGlmaWVzIHRoZSBzd2FwcGluZXNzLWJhc2VkIHR5cGUgc2VsZWN0aW9uIHdpdGggYSBxdWFkcmF0aWMgYm9vc3QsIGFuZCBhZGp1c3RzIHRoZSBhZ2luZyBhbmQgaXNvbGF0aW9uIGhldXJpc3RpY3MuIFRoZXNlIGNoYW5nZXMgbWFuaXB1bGF0ZSBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcyAoYHN0cnVjdCBmb2xpb2AsIExSVSBsaXN0cykgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBsaXN0IGNvcnJ1cHRpb25zLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBtZW1vcnkgcmVjbGFpbSBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBldmljdGlvbiBwYXRoLCBmb2xpbyBzY2FubmluZywgYW5kIGFnaW5nIGhldXJpc3RpY3MuIEl0IGludHJvZHVjZXMgYmF0Y2hpbmcgaW4gYGluY19taW5fc2VxYCBhbmQgY2hhbmdlcyBob3cgYGdldF90eXBlX3RvX3NjYW5gIGNhbGN1bGF0ZXMgdGhlIHByZWZlcnJlZCByZWNsYWltIHR5cGUgYmFzZWQgb24gc3dhcHBpbmVzcy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHN0YWJpbGl0eSB1bmRlciBtZW1vcnkgcHJlc3N1cmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5NDNiMTg2NzRlYTE1OWMxNGI4OTc3M2U0ODhjOGQ3M2UzODNmYWQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTI6NDE6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYmU2YmQyNmU4YzU3OC4uMDk1MzVkOWJkZWQ1YyAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTE5MSw4ICYjNDM7MTkxLDIwIEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xuIFx0XHRcdHByZWZldGNodyhcdTAwMjZwcmV2LVx1MDAzZV9maWVsZCk7XHRcdFx0XFxcbiBcdFx0fVx0XHRcdFx0XHRcdFx0XFxcbiBcdH0gd2hpbGUgKDApXG4mIzQzOyNkZWZpbmUgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZClcdFx0XHRcXFxuJiM0MztcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdGlmICgoX2ZvbGlvKS1cdTAwM2VscnUubmV4dCAhPSBfYmFzZSkge1x0XHRcdFxcXG4mIzQzO1x0XHRcdHN0cnVjdCBmb2xpbyAqbmV4dDtcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdG5leHQgPSBsaXN0X2VudHJ5KChfZm9saW8pLVx1MDAzZWxydS5uZXh0LFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGZvbGlvLCBscnUpO1x0XHRcXFxuJiM0MztcdFx0XHRwcmVmZXRjaHcoXHUwMDI2bmV4dC1cdTAwM2VfZmllbGQpO1x0XHRcdFxcXG4mIzQzO1x0XHR9XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdH0gd2hpbGUgKDApXG4mIzQzO1xuICNlbHNlXG4gI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKSBkbyB7IH0gd2hpbGUgKDApXG4mIzQzOyNkZWZpbmUgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZCkgZG8geyB9IHdoaWxlICgwKVxuICNlbmRpZlxuIFxuIC8qXG5AQCAtMjcwLDYgJiM0MzsyODIsMTMgQEAgc3RhdGljIGlubGluZSBib29sIGlzX2V4ZWNfZmlsZV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIHZtYV9mbGFnc190ZXN0KHZtYV9mbGFncywgVk1BX0VYRUNfQklUKSBcdTAwMjZcdTAwMjYgZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIH1cbiBcbiYjNDM7LyogU2VlIGdldF90eXBlX3RvX3NjYW4oKTogdGhlc2UgdmFsdWVzIGFsd2F5cyBzZWxlY3QgRklMRSBvciBBTk9OICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpc19leHRyZW1lX3N3YXBwaW5lc3MoaW50IHN3YXBwaW5lc3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3dhcHBpbmVzcyBcdTAwM2M9IE1JTl9TV0FQUElORVNTICYjNDM7IDEgfHxcbiYjNDM7XHQgICAgICAgc3dhcHBpbmVzcyBcdTAwM2U9IE1BWF9TV0FQUElORVNTO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHNldF90YXNrX3JlY2xhaW1fc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuIFx0XHRcdFx0ICAgc3RydWN0IHJlY2xhaW1fc3RhdGUgKnJzKVxuIHtcbkBAIC0zMjk2LDIwICYjNDM7MzMxNSwyMSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYVxuIH1cbiBcbiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqL1xuLXN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpXG4ge1xuLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4tXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbi1cdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4gXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuJiM0MztcdGludCBuZXdfZ2VuO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4gXG4gXHRkbyB7XG4gXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuIFx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbi1cdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pXG4mIzQzO1x0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbikge1xuJiM0MztcdFx0XHRpZiAoaW5jcmVhc2VkKVxuJiM0MztcdFx0XHRcdCppbmNyZWFzZWQgPSBmYWxzZTtcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0bmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7XG4gXG5AQCAtMzMxNyw4ICYjNDM7MzMzNywyMSBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbiBcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuLVx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiYjNDM7XHRpZiAoaW5jcmVhc2VkKVxuJiM0MztcdFx0KmluY3JlYXNlZCA9IHRydWU7XG4mIzQzO1x0cmV0dXJuIG5ld19nZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiYjNDM7XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiYjNDM7XHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuJiM0MztcdGJvb2wgZ2VuX2luY3JlYXNlZDtcbiBcbiYjNDM7XHRuZXdfZ2VuID0gX19mb2xpb19pbmNfZ2VuKGZvbGlvLCBvbGRfZ2VuLCBcdTAwMjZnZW5faW5jcmVhc2VkKTtcbiYjNDM7XHRpZiAoZ2VuX2luY3JlYXNlZClcbiYjNDM7XHRcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4gXHRyZXR1cm4gbmV3X2dlbjtcbiB9XG4gXG5AQCAtMzg5NywxMyAmIzQzOzM5MzAsMjcgQEAgc3RhdGljIHZvaWQgY2xlYXJfbW1fd2Fsayh2b2lkKVxuIFx0XHRrZnJlZSh3YWxrKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9scnVfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqKmJhdGNoX2VuZCxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QpXG4mIzQzO3tcbiYjNDM7XHRMSVNUX0hFQUQobW92YWJsZSk7XG4mIzQzO1xuJiM0MztcdGlmICghKmJhdGNoX2VuZClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bGlzdF9jdXRfcG9zaXRpb24oXHUwMDI2bW92YWJsZSwgaGVhZCwgKmJhdGNoX2VuZCk7XG4mIzQzO1x0bGlzdF9zcGxpY2VfdGFpbF9pbml0KFx1MDAyNm1vdmFibGUsIGRzdCk7XG4mIzQzO1x0KmJhdGNoX2VuZCA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG4ge1xuIFx0aW50IHpvbmU7XG4tXHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSDtcbiYjNDM7XHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSCAvIChpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykgPyAyIDogOCk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuIFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbiYjNDM7XHRpbnQgdGFyZ2V0X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7XG4gXG4gXHQvKiBGb3IgZmlsZSB0eXBlLCBza2lwIHRoZSBjaGVjayBpZiBzd2FwcGluZXNzIGlzIGFub24gb25seSAqL1xuIFx0aWYgKHR5cGUgXHUwMDI2XHUwMDI2IChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSlcbkBAIC0zOTE1LDMzICYjNDM7Mzk2Miw1NSBAQCBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbiBcbiBcdC8qIHByZXZlbnQgY29sZC9ob3QgaW52ZXJzaW9uIGlmIHRoZSB0eXBlIGlzIGV2aWN0YWJsZSAqL1xuIFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGxpc3RfaGVhZCAqdGFyZ2V0X2xpc3QgPSBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdO1xuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tvbGRfZ2VuXVt0eXBlXVt6b25lXTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcHJvdGVjdGVkW01BWF9OUl9USUVSU10gPSB7fSwgZGVsdGEgPSAwO1xuJiM0MztcdFx0c3RydWN0IGxpc3RfaGVhZCAqcG9zID0gaGVhZC1cdTAwM2VuZXh0O1xuJiM0MztcdFx0c3RydWN0IGxpc3RfaGVhZCAqYmF0Y2hfZW5kID0gTlVMTDtcbiBcbi1cdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4tXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcbiYjNDM7XHRcdHdoaWxlIChwb3MgIT0gaGVhZCkge1xuJiM0MztcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBmb2xpbywgbHJ1KTtcbiYjNDM7XHRcdFx0bG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcdFx0XHRpbnQgcmVmcyA9IGZvbGlvX2xydV9yZWZzKGZvbGlvKTtcbiBcdFx0XHRib29sIHdvcmtpbmdzZXQgPSBmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pO1xuJiM0MztcdFx0XHRib29sIGdlbl9pbmNyZWFzZWQ7XG4gXG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSwgZm9saW8pO1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19pc19maWxlX2xydShmb2xpbykgIT0gdHlwZSwgZm9saW8pO1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb196b25lbnVtKGZvbGlvKSAhPSB6b25lLCBmb2xpbyk7XG4gXG4tXHRcdFx0bmV3X2dlbiA9IGZvbGlvX2luY19nZW4obHJ1dmVjLCBmb2xpbyk7XG4tXHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW25ld19nZW5dW3R5cGVdW3pvbmVdKTtcbiYjNDM7XHRcdFx0cHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKGZvbGlvLCBoZWFkLCBmbGFncyk7XG4mIzQzO1x0XHRcdHBvcyA9IHBvcy1cdTAwM2VuZXh0O1xuJiM0MztcdFx0XHRuZXdfZ2VuID0gX19mb2xpb19pbmNfZ2VuKGZvbGlvLCBvbGRfZ2VuLCBcdTAwMjZnZW5faW5jcmVhc2VkKTtcbiYjNDM7XHRcdFx0aWYgKGdlbl9pbmNyZWFzZWQpIHtcbiYjNDM7XHRcdFx0XHRkZWx0YSAmIzQzOz0gbnJfcGFnZXM7XG4mIzQzO1x0XHRcdFx0YmF0Y2hfZW5kID0gXHUwMDI2Zm9saW8tXHUwMDNlbHJ1O1xuIFxuLVx0XHRcdC8qIGRvbiYjMzk7dCBjb3VudCB0aGUgd29ya2luZ3NldCBiZWluZyBsYXppbHkgcHJvbW90ZWQgKi9cbi1cdFx0XHRpZiAocmVmcyAmIzQzOyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgJiM0MzsgMSkge1xuLVx0XHRcdFx0aW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7XG4tXHRcdFx0XHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4mIzQzO1x0XHRcdFx0LyogZG9uJiMzOTt0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqL1xuJiM0MztcdFx0XHRcdGlmIChyZWZzICYjNDM7IHdvcmtpbmdzZXQgIT0gQklUKExSVV9SRUZTX1dJRFRIKSAmIzQzOyAxKSB7XG4mIzQzO1x0XHRcdFx0XHRpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTtcbiBcbi1cdFx0XHRcdFdSSVRFX09OQ0UobHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSxcbi1cdFx0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSAmIzQzOyBkZWx0YSk7XG4mIzQzO1x0XHRcdFx0XHRwcm90ZWN0ZWRbdGllcl0gJiM0Mzs9IG5yX3BhZ2VzO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRmbHVzaF9scnVfYmF0Y2goaGVhZCwgXHUwMDI2YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7XG4mIzQzO1x0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSk7XG4gXHRcdFx0fVxuLVxuIFx0XHRcdGlmICghLS1yZW1haW5pbmcpXG4tXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4gXHRcdH1cbiYjNDM7XHRcdGZsdXNoX2xydV9iYXRjaChoZWFkLCBcdTAwMjZiYXRjaF9lbmQsIHRhcmdldF9saXN0KTtcbiYjNDM7XG4mIzQzO1x0XHRXUklURV9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1tvbGRfZ2VuXVt0eXBlXVt6b25lXSxcbiYjNDM7XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdIC0gZGVsdGEpO1xuJiM0MztcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV0sXG4mIzQzO1x0XHRcdCAgIGxydWdlbi1cdTAwM2Vucl9wYWdlc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXSAmIzQzOyBkZWx0YSk7XG4mIzQzO1x0XHRmb3IgKGludCB0aWVyID0gMDsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLFxuJiM0MztcdFx0XHRcdCAgIGxydWdlbi1cdTAwM2Vwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0gJiM0MzsgcHJvdGVjdGVkW3RpZXJdKTtcbiYjNDM7XHRcdGlmICghcmVtYWluaW5nKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gZG9uZTpcbiBcdHJlc2V0X2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdHJ1ZSk7XG5AQCAtNDE1MSwyMCAmIzQzOzQyMjAsMjggQEAgc3RhdGljIHZvaWQgc2V0X2luaXRpYWxfcHJpb3JpdHkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbFxuIFx0c2MtXHUwMDNlcHJpb3JpdHkgPSBjbGFtcChwcmlvcml0eSwgREVGX1BSSU9SSVRZIC8gMiwgREVGX1BSSU9SSVRZKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfZ2VuX3NpemUoc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbixcbiYjNDM7XHRcdGludCB0eXBlLCB1bnNpZ25lZCBsb25nIHNlcSlcbiYjNDM7e1xuJiM0MztcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzaXplID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgem9uZSA9IDA7IHpvbmUgXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSYjNDM7JiM0MzspXG4mIzQzO1x0XHRzaXplICYjNDM7PSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xuJiM0MztcdHJldHVybiBzaXplO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIHtcbi1cdGludCBnZW4sIHR5cGUsIHpvbmU7XG4mIzQzO1x0aW50IHR5cGU7XG4gXHR1bnNpZ25lZCBsb25nIHNlcSwgdG90YWwgPSAwO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4gXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuIFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbiBcbiBcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3MpIHtcbi1cdFx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KSB7XG4tXHRcdFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xuLVx0XHRcdGZvciAoem9uZSA9IDA7IHpvbmUgXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSYjNDM7JiM0MzspXG4tXHRcdFx0XHR0b3RhbCAmIzQzOz0gbWF4KFJFQURfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTtcbi1cdFx0fVxuJiM0MztcdFx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHR0b3RhbCAmIzQzOz0gbHJ1dmVjX2dlbl9zaXplKGxydWdlbiwgdHlwZSwgc2VxKTtcbiBcdH1cbiBcbiBcdHJldHVybiB0b3RhbDtcbkBAIC00NzI4LDcgJiM0Mzs0ODA1LDggQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FcbiBcbiBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHQgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCB0eXBlLCBpbnQgdGllcixcbi1cdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwKVxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwLFxuJiM0MztcdFx0ICAgICAgIGJvb2wgKmV4aGF1c3RlZClcbiB7XG4gXHRpbnQgaTtcbiBcdGludCBnZW47XG5AQCAtNDczOSwxMiAmIzQzOzQ4MTcsMTUgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdGludCBza2lwcGVkID0gMDtcbiBcdHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nID0gbnJfdG9fc2NhbjtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuJiM0MztcdGJvb2wgZWFybHlfc3RvcCA9IGZhbHNlO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKG5yX3RvX3NjYW4gXHUwMDNlIE1BWF9MUlVfQkFUQ0gpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KGxpc3QpKTtcbiBcbi1cdGlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpID09IE1JTl9OUl9HRU5TKVxuJiM0MztcdGlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpID09IE1JTl9OUl9HRU5TKSB7XG4mIzQzO1x0XHQqZXhoYXVzdGVkID0gdHJ1ZTtcbiBcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuIFxuIFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4gXG5AQCAtNDc3NSw4ICYjNDM7NDg1NiwxMCBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0c2tpcHBlZF96b25lICYjNDM7PSBkZWx0YTtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0aWYgKCEtLXJlbWFpbmluZyB8fCBtYXgoaXNvbGF0ZWQsIHNraXBwZWRfem9uZSkgXHUwMDNlPSBNSU5fTFJVX0JBVENIKVxuJiM0MztcdFx0XHRpZiAoIS0tcmVtYWluaW5nIHx8IG1heChpc29sYXRlZCwgc2tpcHBlZF96b25lKSBcdTAwM2U9IE1JTl9MUlVfQkFUQ0gpIHtcbiYjNDM7XHRcdFx0XHRlYXJseV9zdG9wID0gdHJ1ZTtcbiBcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcbiBcdFx0aWYgKHNraXBwZWRfem9uZSkge1xuQEAgLTQ3ODUsOCAmIzQzOzQ4NjgsMTAgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRza2lwcGVkICYjNDM7PSBza2lwcGVkX3pvbmU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKCFyZW1haW5pbmcgfHwgaXNvbGF0ZWQgXHUwMDNlPSBNSU5fTFJVX0JBVENIKVxuJiM0MztcdFx0aWYgKCFyZW1haW5pbmcgfHwgaXNvbGF0ZWQgXHUwMDNlPSBNSU5fTFJVX0JBVENIKSB7XG4mIzQzO1x0XHRcdGVhcmx5X3N0b3AgPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0aXRlbSA9IFBHU0NBTl9LU1dBUEQgJiM0MzsgcmVjbGFpbWVyX29mZnNldChzYyk7XG5AQCAtNDc5Nyw2ICYjNDM7NDg4MiwxMyBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0c2Nhbm5lZCwgc2tpcHBlZCwgaXNvbGF0ZWQsXG4gXHRcdFx0XHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB3ZSBkaWRuJiMzOTt0IHN0b3AgZWFybHksIGFsbCByZWNsYWltYWJsZSBmb2xpb3MgaW4gdGhlIGN1cnJlbnRcbiYjNDM7XHQgKiBnZW5lcmF0aW9uIGhhdmUgYmVlbiBzY2FubmVkLiBXZSBhcmUgZXhoYXVzdGVkIGlmIHRoaXMgaXMgdGhlIGxhc3RcbiYjNDM7XHQgKiByZWNsYWltYWJsZSBnZW5lcmF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdCpleGhhdXN0ZWQgPSAhZWFybHlfc3RvcCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgbHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0gJiM0MzsgTUlOX05SX0dFTlMgPT0gbHJ1Z2VuLVx1MDAzZW1heF9zZXE7XG4gXHQqaXNvbGF0ZWRwID0gaXNvbGF0ZWQ7XG4gXHRyZXR1cm4gc2Nhbm5lZDtcbiB9XG5AQCAtNDgyNCw1MSAmIzQzOzQ5MTYsOTAgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbiBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4gXHRzdHJ1Y3QgY3RybF9wb3Mgc3AsIHB2ID0ge307XG4mIzQzO1x0aW50IGFub25fZ2FpbiwgZmlsZV9nYWluO1xuIFxuIFx0aWYgKHN3YXBwaW5lc3MgXHUwMDNjPSBNSU5fU1dBUFBJTkVTUyAmIzQzOyAxKVxuIFx0XHRyZXR1cm4gTFJVX0dFTl9GSUxFO1xuIFxuIFx0aWYgKHN3YXBwaW5lc3MgXHUwMDNlPSBNQVhfU1dBUFBJTkVTUylcbiBcdFx0cmV0dXJuIExSVV9HRU5fQU5PTjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBcHBseSBhIHF1YWRyYXRpYyBib29zdCBiYXNlZCBvbiB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgbmV1dHJhbFxuJiM0MztcdCAqIGJhbGFuY2UgcG9pbnQgKHN3YXBwaW5lc3MgPSBNQVhfU1dBUFBJTkVTUyAvIDIpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQSBsaW5lYXIgd2VpZ2h0IGlzIGVhc2lseSBvdmVyd2hlbG1lZCBieSBoaXN0b3JpY2FsIHJlZmF1bHQgY29zdFxuJiM0MztcdCAqIHdoZW4gc3dhcHBpbmVzcyBkZXZpYXRlcyBmcm9tIG5ldXRyYWwuIFRoZSBxdWFkcmF0aWMgc2NhbGluZ1xuJiM0MztcdCAqIGFtcGxpZmllcyB0aGUgd2VpZ2h0IG9mIHRoZSBwcmVmZXJyZWQgdHlwZSBzbW9vdGhseS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3dhcHBpbmVzcyBcdTAwM2MgTUFYX1NXQVBQSU5FU1MgLyAyKSB7XG4mIzQzO1x0XHRpbnQgZGVsdGEgPSAoTUFYX1NXQVBQSU5FU1MgLyAyKSAtIHN3YXBwaW5lc3M7XG4mIzQzO1x0XHRpbnQgYm9vc3QgPSAoZGVsdGEgKiBkZWx0YSkgXHUwMDNlXHUwMDNlIDQ7XG4mIzQzO1xuJiM0MztcdFx0YW5vbl9nYWluID0gc3dhcHBpbmVzcztcbiYjNDM7XHRcdGZpbGVfZ2FpbiA9IChNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MpICYjNDM7IGJvb3N0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpbnQgZGVsdGEgPSBzd2FwcGluZXNzIC0gKE1BWF9TV0FQUElORVNTIC8gMik7XG4mIzQzO1x0XHRpbnQgYm9vc3QgPSAoZGVsdGEgKiBkZWx0YSkgXHUwMDNlXHUwMDNlIDQ7XG4mIzQzO1xuJiM0MztcdFx0YW5vbl9nYWluID0gc3dhcHBpbmVzcyAmIzQzOyBib29zdDtcbiYjNDM7XHRcdGZpbGVfZ2FpbiA9IE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmVcbiBcdCAqIHdoaWNoIHR5cGUgdG8gc2Nhbi5cbiBcdCAqL1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuJiM0MztcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgYW5vbl9nYWluLCBcdTAwMjZzcCk7XG4mIzQzO1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBmaWxlX2dhaW4sIFx1MDAyNnB2KTtcbiBcbiBcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX3NpbmdsZV90eXBlX3JlY2xhaW0oaW50IHN3YXBwaW5lc3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3dhcHBpbmVzcyA9PSBNSU5fU1dBUFBJTkVTUyB8fFxuJiM0MztcdCAgICAgICBzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MsXG4gXHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkLFxuIFx0XHRcdCAgaW50ICppc29sYXRlX3R5cGUsIGludCAqaXNvbGF0ZV9zY2FubmVkKVxuIHtcbi1cdGludCBpO1xuLVx0aW50IHRvdGFsX3NjYW5uZWQgPSAwO1xuJiM0MztcdGJvb2wgdHlwZV9mYWxsYmFja19hbGxvd2VkID0gIWlzX3NpbmdsZV90eXBlX3JlY2xhaW0oc3dhcHBpbmVzcyk7XG4gXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbiYjNDM7XHRpbnQgdG90YWxfc2Nhbm5lZCA9IDAsIHNjYW5uZWQsIHRpZXI7XG4mIzQzO1x0Ym9vbCBleGhhdXN0ZWQsIHRyaWVkID0gZmFsc2U7XG4gXG4tXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7XG4tXHRcdGludCBzY2FubmVkO1xuLVx0XHRpbnQgdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xuJiM0MztyZXRyeTpcbiYjNDM7XHR0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7XG4mIzQzO1x0c2Nhbm5lZCA9IHNjYW5fZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsXG4mIzQzO1x0XHRcdCAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkLCBcdTAwMjZleGhhdXN0ZWQpO1xuIFxuLVx0XHRzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYyxcbi1cdFx0XHRcdCAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkKTtcbiYjNDM7XHR0b3RhbF9zY2FubmVkICYjNDM7PSBzY2FubmVkO1xuJiM0MztcdGlmICgqaXNvbGF0ZWQpIHtcbiYjNDM7XHRcdCppc29sYXRlX3R5cGUgPSB0eXBlO1xuJiM0MztcdFx0Kmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7XG4mIzQzO1x0XHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcbiYjNDM7XHR9XG4gXG4tXHRcdHRvdGFsX3NjYW5uZWQgJiM0Mzs9IHNjYW5uZWQ7XG4tXHRcdGlmICgqaXNvbGF0ZWQpIHtcbi1cdFx0XHQqaXNvbGF0ZV90eXBlID0gdHlwZTtcbi1cdFx0XHQqaXNvbGF0ZV9zY2FubmVkID0gc2Nhbm5lZDtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHQvKlxuLVx0XHQgKiBJZiBzY2FubmVkIFx1MDAzZSAwIGFuZCBpc29sYXRlZCA9PSAwLCBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlXG4tXHRcdCAqIG90aGVyIHR5cGUsIGFzIHRoaXMgdHlwZSByZW1haW5zIHN1ZmZpY2llbnQuIEZhbGxpbmcgYmFja1xuLVx0XHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFzY2FubmVkKVxuLVx0XHRcdHR5cGUgPSAhdHlwZTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGFyZSBydW5uaW5nIG91dCBvZiB0aGUgY3VycmVudCByZWNsYWltIHR5cGUuIEZhbGwgYmFjayB0b1xuJiM0MztcdCAqIHRoZSBvdGhlciB0eXBlIGlmIGFsbG93ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGV4aGF1c3RlZCBcdTAwMjZcdTAwMjYgdHlwZV9mYWxsYmFja19hbGxvd2VkKSB7XG4mIzQzO1x0XHR0eXBlID0gIXR5cGU7XG4mIzQzO1x0XHR0eXBlX2ZhbGxiYWNrX2FsbG93ZWQgPSBmYWxzZTtcbiYjNDM7XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fVxuJiM0MztcdC8qXG4mIzQzO1x0ICogV2UgYXJlIG5vdCBleGhhdXN0ZWQsIGJ1dCBmYWlsZWQgdG8gaXNvbGF0ZSBhbnkgZm9saW9zIGR1ZSB0b1xuJiM0MztcdCAqIHJhY2VzLiBHaXZlIHRoaXMgdHlwZSBvbmUgbW9yZSBjaGFuY2UgdG8gYXZvaWQgYSBsYXJnZXIgbG9vcC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWV4aGF1c3RlZCBcdTAwMjZcdTAwMjYgIXRyaWVkKSB7XG4mIzQzO1x0XHR0cmllZCA9IHRydWU7XG4mIzQzO1x0XHRnb3RvIHJldHJ5O1xuIFx0fVxuIFxuIFx0cmV0dXJuIHRvdGFsX3NjYW5uZWQ7XG5AQCAtNDk3MCwyMSAmIzQzOzUxMDEsNjcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRyZXR1cm4gc2Nhbm5lZDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGxydV9nZW5faW1iYWxhbmNlZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcbiYjNDM7XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHlvdW5nID0gMCwgb2xkID0gMCwgbGFnID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGluYWN0aXZlX3JhdGlvLCBnYjtcbiYjNDM7XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuJiM0MztcbiYjNDM7XHQvKiB3ZSBzdGlsbCBoYXZlIGVub3VnaCBnZW5lcmF0aW9ucyB0byByZWNsYWltICovXG4mIzQzO1x0aWYgKG1pbl9zZXFbdHlwZV0gJiM0MzsgTUlOX05SX0dFTlMgXHUwMDNjIG1heF9zZXEpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVHJpZ2dlciBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgcnVubmluZyBsb3cgb24gcmVjbGFpbWFibGVcbiYjNDM7XHQgKiBmb2xpb3MsIHByb3ZpZGVkIHRoZSBnZW5lcmF0aW9uIGxhZyBvZiB0aGUgb3RoZXIgdHlwZSByZW1haW5zIHNtYWxsXG4mIzQzO1x0ICogZW5vdWdoIHRoYXQgaW5jX21pbl9zZXEoKSBpbnRyb2R1Y2VzIG5lZ2xpZ2libGUgb3ZlcmhlYWRcbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGxvbmcgc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFx1MDAzYz0gbWF4X3NlcTsgc2VxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gbHJ1dmVjX2dlbl9zaXplKGxydWdlbiwgdHlwZSwgc2VxKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2VxICYjNDM7IE1JTl9OUl9HRU5TIFx1MDAzZSBtYXhfc2VxKVxuJiM0MztcdFx0XHR5b3VuZyAmIzQzOz0gc2l6ZTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0b2xkICYjNDM7PSBzaXplO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAobWluX3NlcVshdHlwZV0gJiM0MzsgTUFYX05SX0dFTlMgPT0gbWF4X3NlcSAmIzQzOyAxKVxuJiM0MztcdFx0bGFnICYjNDM7PSBscnV2ZWNfZ2VuX3NpemUobHJ1Z2VuLCAhdHlwZSwgbWluX3NlcVshdHlwZV0pO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJvcnJvdyB0aGUgYWRhcHRpdmUgcmF0aW8gZnJvbSBpbmFjdGl2ZV9pc19sb3coKSwgYW5kIHNjYWxlXG4mIzQzO1x0ICogaXQgYnkgc3FydChNQVhfTlJfR0VOUykgdG8gbWFrZSBhZ2luZyBsZXNzIGFnZ3Jlc3NpdmVcbiYjNDM7XHQgKi9cbiYjNDM7XHRnYiA9ICh5b3VuZyAmIzQzOyBvbGQpIFx1MDAzZVx1MDAzZSAoMzAgLSBQQUdFX1NISUZUKTtcbiYjNDM7XHRpbmFjdGl2ZV9yYXRpbyA9IGdiID8gaW50X3NxcnQoMTAgKiBnYiAqIE1BWF9OUl9HRU5TKSA6IE1BWF9OUl9HRU5TO1xuJiM0MztcdHJldHVybiB5b3VuZyBcdTAwM2Ugb2xkICogaW5hY3RpdmVfcmF0aW8gXHUwMDI2XHUwMDI2IChsYWcgXHUwMDNjIE1BWF9MUlVfQkFUQ0ggfHxcbiYjNDM7XHQgICAgICAgKGlzX2V4dHJlbWVfc3dhcHBpbmVzcyhzd2FwcGluZXNzKSBcdTAwMjZcdTAwMjYgc2MtXHUwMDNlcHJpb3JpdHkgXHUwMDNlIDIpKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCBzaG91bGRfcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxLFxuIFx0XHRcdCAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuIHtcbiYjNDM7XHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbiBcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4gXG4tXHQvKiBoYXZlIHRvIHJ1biBhZ2luZywgc2luY2UgZXZpY3Rpb24gaXMgbm90IHBvc3NpYmxlIGFueW1vcmUgKi9cbi1cdGlmIChldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSAmIzQzOyBNSU5fTlJfR0VOUyBcdTAwM2UgbWF4X3NlcSlcbiYjNDM7XHQvKiBydW4gYWdpbmcgaWYgdGhlIHByZWZlcnJlZCB0eXBlIGlzIGV4aGF1c3RlZCAqL1xuJiM0MztcdGlmIChtaW5fc2VxW3R5cGVdICYjNDM7IE1JTl9OUl9HRU5TIFx1MDAzZSBtYXhfc2VxKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdC8qIHRyeSB0byBhdm9pZCBhZ2luZywgZG8gZ2VudGxlIHJlY2xhaW0gYXQgdGhlIGRlZmF1bHQgcHJpb3JpdHkgKi9cbi1cdGlmIChzYy1cdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUcnkgdG8gYXZvaWQgYWdpbmcgYnkgZG9pbmcgZ2VudGxlIHJlY2xhaW0gYXQgdGhlIGRlZmF1bHRcbiYjNDM7XHQgKiBwcmlvcml0eS4gU2tpcCBnZW50bGUgcmVjbGFpbSBmb3IgZXh0cmVtZSBzd2FwcGluZXNzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzYy1cdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkgXHUwMDI2XHUwMDI2ICFpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIGJldHRlciB0byBydW4gYWdpbmcgZXZlbiB0aG91Z2ggZXZpY3Rpb24gaXMgc3RpbGwgcG9zc2libGUgKi9cbi1cdHJldHVybiBldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSAmIzQzOyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxO1xuJiM0MztcdGlmIChldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSAmIzQzOyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIFJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgc2V2ZXJlbHkgaW1iYWxhbmNlZCBhY3Jvc3MgZ2VucyAqL1xuJiM0MztcdHJldHVybiBscnVfZ2VuX2ltYmFsYW5jZWQobHJ1dmVjLCBtYXhfc2VxLCBzYywgdHlwZSwgc3dhcHBpbmVzcyk7XG4gfVxuIFxuIHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X2dlbl9zb2Z0X3JlY2xhaW0mIzM0OywKICAgICYjMzQ7bWF4X2xydV9nZW5fbWVtY2cmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgbWVtb3J5IHJlY2xhaW0gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgZXZpY3Rpb24gcGF0aCwgZm9saW8gc2Nhbm5pbmcsIGFuZCBhZ2luZyBoZXVyaXN0aWNzLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGluIGBpbmNfbWluX3NlcWAgYW5kIGNoYW5nZXMgaG93IGBnZXRfdHlwZV90b19zY2FuYCBjYWxjdWxhdGVzIHRoZSBwcmVmZXJyZWQgcmVjbGFpbSB0eXBlIGJhc2VkIG9uIHN3YXBwaW5lc3MuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBzdGFiaWxpdHkgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTQzYjE4Njc0ZWExNTljMTRiODk3NzNlNDg4YzhkNzNlMzgzZmFkOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDEyOjQxOjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiZTZiZDI2ZThjNTc4Li4wOTUzNWQ5YmRlZDVjIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMTkxLDggJiM0MzsxOTEsMjAgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiAJCQlwcmVmZXRjaHcoJmFtcDtwcmV2LSZndDtfZmllbGQpOwkJCVwKIAkJfQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKJiM0MzsjZGVmaW5lIHByZWZldGNod19uZXh0X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpCQkJXAomIzQzOwlkbyB7CQkJCQkJCQlcCiYjNDM7CQlpZiAoKF9mb2xpbyktJmd0O2xydS5uZXh0ICE9IF9iYXNlKSB7CQkJXAomIzQzOwkJCXN0cnVjdCBmb2xpbyAqbmV4dDsJCQkJXAomIzQzOwkJCQkJCQkJCVwKJiM0MzsJCQluZXh0ID0gbGlzdF9lbnRyeSgoX2ZvbGlvKS0mZ3Q7bHJ1Lm5leHQsCQlcCiYjNDM7CQkJCQlzdHJ1Y3QgZm9saW8sIGxydSk7CQlcCiYjNDM7CQkJcHJlZmV0Y2h3KCZhbXA7bmV4dC0mZ3Q7X2ZpZWxkKTsJCQlcCiYjNDM7CQl9CQkJCQkJCVwKJiM0MzsJfSB3aGlsZSAoMCkKJiM0MzsKICNlbHNlCiAjZGVmaW5lIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpIGRvIHsgfSB3aGlsZSAoMCkKJiM0MzsjZGVmaW5lIHByZWZldGNod19uZXh0X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAvKgpAQCAtMjcwLDYgJiM0MzsyODIsMTMgQEAgc3RhdGljIGlubGluZSBib29sIGlzX2V4ZWNfZmlsZV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiB2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3MsIFZNQV9FWEVDX0JJVCkgJmFtcDsmYW1wOyBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiB9CiAKJiM0MzsvKiBTZWUgZ2V0X3R5cGVfdG9fc2NhbigpOiB0aGVzZSB2YWx1ZXMgYWx3YXlzIHNlbGVjdCBGSUxFIG9yIEFOT04gKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfZXh0cmVtZV9zd2FwcGluZXNzKGludCBzd2FwcGluZXNzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN3YXBwaW5lc3MgJmx0Oz0gTUlOX1NXQVBQSU5FU1MgJiM0MzsgMSB8fAomIzQzOwkgICAgICAgc3dhcHBpbmVzcyAmZ3Q7PSBNQVhfU1dBUFBJTkVTUzsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBzZXRfdGFza19yZWNsYWltX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKIAkJCQkgICBzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSAqcnMpCiB7CkBAIC0zMjk2LDIwICYjNDM7MzMxNSwyMSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYQogfQogCiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqLwotc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKQogewotCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwotCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwotCWludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwogCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlpbnQgbmV3X2dlbjsKIAogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spLCBmb2xpbyk7CiAKIAlkbyB7CiAJCW5ld19nZW4gPSAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKIAkJLyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovCi0JCWlmIChuZXdfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBuZXdfZ2VuICE9IG9sZF9nZW4pCiYjNDM7CQlpZiAobmV3X2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7CiYjNDM7CQkJaWYgKGluY3JlYXNlZCkKJiM0MzsJCQkJKmluY3JlYXNlZCA9IGZhbHNlOwogCQkJcmV0dXJuIG5ld19nZW47CiYjNDM7CQl9CiAKIAkJbmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7CiAKQEAgLTMzMTcsOCAmIzQzOzMzMzcsMjEgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIAkJbmV3X2ZsYWdzIHw9IChuZXdfZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKIAl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwogCi0JbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKJiM0MzsJaWYgKGluY3JlYXNlZCkKJiM0MzsJCSppbmNyZWFzZWQgPSB0cnVlOwomIzQzOwlyZXR1cm4gbmV3X2dlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwomIzQzOwlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKJiM0MzsJaW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSk7CiYjNDM7CWJvb2wgZ2VuX2luY3JlYXNlZDsKIAomIzQzOwluZXdfZ2VuID0gX19mb2xpb19pbmNfZ2VuKGZvbGlvLCBvbGRfZ2VuLCAmYW1wO2dlbl9pbmNyZWFzZWQpOwomIzQzOwlpZiAoZ2VuX2luY3JlYXNlZCkKJiM0MzsJCWxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7CiAJcmV0dXJuIG5ld19nZW47CiB9CiAKQEAgLTM4OTcsMTMgJiM0MzszOTMwLDI3IEBAIHN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZCkKIAkJa2ZyZWUod2Fsayk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfbHJ1X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBsaXN0X2hlYWQgKipiYXRjaF9lbmQsCiYjNDM7CQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCkKJiM0Mzt7CiYjNDM7CUxJU1RfSEVBRChtb3ZhYmxlKTsKJiM0MzsKJiM0MzsJaWYgKCEqYmF0Y2hfZW5kKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlsaXN0X2N1dF9wb3NpdGlvbigmYW1wO21vdmFibGUsIGhlYWQsICpiYXRjaF9lbmQpOwomIzQzOwlsaXN0X3NwbGljZV90YWlsX2luaXQoJmFtcDttb3ZhYmxlLCBkc3QpOwomIzQzOwkqYmF0Y2hfZW5kID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcykKIHsKIAlpbnQgem9uZTsKLQlpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSDsKJiM0MzsJaW50IHJlbWFpbmluZyA9IE1BWF9MUlVfQkFUQ0ggLyAoaXNfZXh0cmVtZV9zd2FwcGluZXNzKHN3YXBwaW5lc3MpID8gMiA6IDgpOwogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwogCWludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKIAlpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKJiM0MzsJaW50IHRhcmdldF9nZW4gPSAob2xkX2dlbiAmIzQzOyAxKSAlIE1BWF9OUl9HRU5TOwogCiAJLyogRm9yIGZpbGUgdHlwZSwgc2tpcCB0aGUgY2hlY2sgaWYgc3dhcHBpbmVzcyBpcyBhbm9uIG9ubHkgKi8KIAlpZiAodHlwZSAmYW1wOyZhbXA7IChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSkKQEAgLTM5MTUsMzMgJiM0MzszOTYyLDU1IEBAIHN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKQogCiAJLyogcHJldmVudCBjb2xkL2hvdCBpbnZlcnNpb24gaWYgdGhlIHR5cGUgaXMgZXZpY3RhYmxlICovCiAJZm9yICh6b25lID0gMDsgem9uZSAmbHQ7IE1BWF9OUl9aT05FUzsgem9uZSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBsaXN0X2hlYWQgKnRhcmdldF9saXN0ID0gJmFtcDtscnVnZW4tJmd0O2ZvbGlvc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXTsKIAkJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZhbXA7bHJ1Z2VuLSZndDtmb2xpb3Nbb2xkX2dlbl1bdHlwZV1bem9uZV07CiYjNDM7CQl1bnNpZ25lZCBsb25nIHByb3RlY3RlZFtNQVhfTlJfVElFUlNdID0ge30sIGRlbHRhID0gMDsKJiM0MzsJCXN0cnVjdCBsaXN0X2hlYWQgKnBvcyA9IGhlYWQtJmd0O25leHQ7CiYjNDM7CQlzdHJ1Y3QgbGlzdF9oZWFkICpiYXRjaF9lbmQgPSBOVUxMOwogCi0JCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgewotCQkJc3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTsKJiM0MzsJCXdoaWxlIChwb3MgIT0gaGVhZCkgewomIzQzOwkJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGZvbGlvLCBscnUpOwomIzQzOwkJCWxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAJCQlpbnQgcmVmcyA9IGZvbGlvX2xydV9yZWZzKGZvbGlvKTsKIAkJCWJvb2wgd29ya2luZ3NldCA9IGZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CQkJYm9vbCBnZW5faW5jcmVhc2VkOwogCiAJCQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTsKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbyksIGZvbGlvKTsKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19pc19maWxlX2xydShmb2xpbykgIT0gdHlwZSwgZm9saW8pOwogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3pvbmVudW0oZm9saW8pICE9IHpvbmUsIGZvbGlvKTsKIAotCQkJbmV3X2dlbiA9IGZvbGlvX2luY19nZW4obHJ1dmVjLCBmb2xpbyk7Ci0JCQlsaXN0X21vdmVfdGFpbCgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7bHJ1Z2VuLSZndDtmb2xpb3NbbmV3X2dlbl1bdHlwZV1bem9uZV0pOwomIzQzOwkJCXByZWZldGNod19uZXh0X2xydV9mb2xpbyhmb2xpbywgaGVhZCwgZmxhZ3MpOwomIzQzOwkJCXBvcyA9IHBvcy0mZ3Q7bmV4dDsKJiM0MzsJCQluZXdfZ2VuID0gX19mb2xpb19pbmNfZ2VuKGZvbGlvLCBvbGRfZ2VuLCAmYW1wO2dlbl9pbmNyZWFzZWQpOwomIzQzOwkJCWlmIChnZW5faW5jcmVhc2VkKSB7CiYjNDM7CQkJCWRlbHRhICYjNDM7PSBucl9wYWdlczsKJiM0MzsJCQkJYmF0Y2hfZW5kID0gJmFtcDtmb2xpby0mZ3Q7bHJ1OwogCi0JCQkvKiBkb24mIzM5O3QgY291bnQgdGhlIHdvcmtpbmdzZXQgYmVpbmcgbGF6aWx5IHByb21vdGVkICovCi0JCQlpZiAocmVmcyAmIzQzOyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgJiM0MzsgMSkgewotCQkJCWludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpOwotCQkJCWludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJCQkJLyogZG9uJiMzOTt0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqLwomIzQzOwkJCQlpZiAocmVmcyAmIzQzOyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgJiM0MzsgMSkgewomIzQzOwkJCQkJaW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7CiAKLQkJCQlXUklURV9PTkNFKGxydWdlbi0mZ3Q7cHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLAotCQkJCQkgICBscnVnZW4tJmd0O3Byb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSAmIzQzOyBkZWx0YSk7CiYjNDM7CQkJCQlwcm90ZWN0ZWRbdGllcl0gJiM0Mzs9IG5yX3BhZ2VzOwomIzQzOwkJCQl9CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJZmx1c2hfbHJ1X2JhdGNoKGhlYWQsICZhbXA7YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7CiYjNDM7CQkJCWxpc3RfbW92ZSgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7bHJ1Z2VuLSZndDtmb2xpb3NbbmV3X2dlbl1bdHlwZV1bem9uZV0pOwogCQkJfQotCiAJCQlpZiAoIS0tcmVtYWluaW5nKQotCQkJCXJldHVybiBmYWxzZTsKJiM0MzsJCQkJYnJlYWs7CiAJCX0KJiM0MzsJCWZsdXNoX2xydV9iYXRjaChoZWFkLCAmYW1wO2JhdGNoX2VuZCwgdGFyZ2V0X2xpc3QpOwomIzQzOwomIzQzOwkJV1JJVEVfT05DRShscnVnZW4tJmd0O25yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdLAomIzQzOwkJCSAgIGxydWdlbi0mZ3Q7bnJfcGFnZXNbb2xkX2dlbl1bdHlwZV1bem9uZV0gLSBkZWx0YSk7CiYjNDM7CQlXUklURV9PTkNFKGxydWdlbi0mZ3Q7bnJfcGFnZXNbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV0sCiYjNDM7CQkJICAgbHJ1Z2VuLSZndDtucl9wYWdlc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXSAmIzQzOyBkZWx0YSk7CiYjNDM7CQlmb3IgKGludCB0aWVyID0gMDsgdGllciAmbHQ7IE1BWF9OUl9USUVSUzsgdGllciYjNDM7JiM0MzspCiYjNDM7CQkJV1JJVEVfT05DRShscnVnZW4tJmd0O3Byb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSwKJiM0MzsJCQkJICAgbHJ1Z2VuLSZndDtwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0gJiM0MzsgcHJvdGVjdGVkW3RpZXJdKTsKJiM0MzsJCWlmICghcmVtYWluaW5nKQomIzQzOwkJCXJldHVybiBmYWxzZTsKIAl9CiBkb25lOgogCXJlc2V0X2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdHJ1ZSk7CkBAIC00MTUxLDIwICYjNDM7NDIyMCwyOCBAQCBzdGF0aWMgdm9pZCBzZXRfaW5pdGlhbF9wcmlvcml0eShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sCiAJc2MtJmd0O3ByaW9yaXR5ID0gY2xhbXAocHJpb3JpdHksIERFRl9QUklPUklUWSAvIDIsIERFRl9QUklPUklUWSk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2dlbl9zaXplKHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4sCiYjNDM7CQlpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBzZXEpCiYjNDM7ewomIzQzOwlpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOwomIzQzOwl1bnNpZ25lZCBsb25nIHNpemUgPSAwOwomIzQzOwomIzQzOwlmb3IgKGludCB6b25lID0gMDsgem9uZSAmbHQ7IE1BWF9OUl9aT05FUzsgem9uZSYjNDM7JiM0MzspCiYjNDM7CQlzaXplICYjNDM7PSBtYXgoUkVBRF9PTkNFKGxydWdlbi0mZ3Q7bnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTsKJiM0MzsJcmV0dXJuIHNpemU7CiYjNDM7fQomIzQzOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpCiB7Ci0JaW50IGdlbiwgdHlwZSwgem9uZTsKJiM0MzsJaW50IHR5cGU7CiAJdW5zaWduZWQgbG9uZyBzZXEsIHRvdGFsID0gMDsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKIAlERUZJTkVfTUFYX1NFUShscnV2ZWMpOwogCURFRklORV9NSU5fU0VRKGxydXZlYyk7CiAKIAlmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7Ci0JCWZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxICZsdDs9IG1heF9zZXE7IHNlcSYjNDM7JiM0MzspIHsKLQkJCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTsKLQkJCWZvciAoem9uZSA9IDA7IHpvbmUgJmx0OyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KQotCQkJCXRvdGFsICYjNDM7PSBtYXgoUkVBRF9PTkNFKGxydWdlbi0mZ3Q7bnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTsKLQkJfQomIzQzOwkJZm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgJmx0Oz0gbWF4X3NlcTsgc2VxJiM0MzsmIzQzOykKJiM0MzsJCQl0b3RhbCAmIzQzOz0gbHJ1dmVjX2dlbl9zaXplKGxydWdlbiwgdHlwZSwgc2VxKTsKIAl9CiAKIAlyZXR1cm4gdG90YWw7CkBAIC00NzI4LDcgJiM0Mzs0ODA1LDggQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2EKIAogc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHRpZXIsCi0JCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkcCkKJiM0MzsJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkcCwKJiM0MzsJCSAgICAgICBib29sICpleGhhdXN0ZWQpCiB7CiAJaW50IGk7CiAJaW50IGdlbjsKQEAgLTQ3MzksMTIgJiM0Mzs0ODE3LDE1IEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJaW50IHNraXBwZWQgPSAwOwogCXVuc2lnbmVkIGxvbmcgcmVtYWluaW5nID0gbnJfdG9fc2NhbjsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKJiM0MzsJYm9vbCBlYXJseV9zdG9wID0gZmFsc2U7CiAKIAlWTV9XQVJOX09OX09OQ0UobnJfdG9fc2NhbiAmZ3Q7IE1BWF9MUlVfQkFUQ0gpOwogCVZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShsaXN0KSk7CiAKLQlpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUykKJiM0MzsJaWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgPT0gTUlOX05SX0dFTlMpIHsKJiM0MzsJCSpleGhhdXN0ZWQgPSB0cnVlOwogCQlyZXR1cm4gMDsKJiM0MzsJfQogCiAJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwogCkBAIC00Nzc1LDggJiM0Mzs0ODU2LDEwIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkJc2tpcHBlZF96b25lICYjNDM7PSBkZWx0YTsKIAkJCX0KIAotCQkJaWYgKCEtLXJlbWFpbmluZyB8fCBtYXgoaXNvbGF0ZWQsIHNraXBwZWRfem9uZSkgJmd0Oz0gTUlOX0xSVV9CQVRDSCkKJiM0MzsJCQlpZiAoIS0tcmVtYWluaW5nIHx8IG1heChpc29sYXRlZCwgc2tpcHBlZF96b25lKSAmZ3Q7PSBNSU5fTFJVX0JBVENIKSB7CiYjNDM7CQkJCWVhcmx5X3N0b3AgPSB0cnVlOwogCQkJCWJyZWFrOwomIzQzOwkJCX0KIAkJfQogCiAJCWlmIChza2lwcGVkX3pvbmUpIHsKQEAgLTQ3ODUsOCAmIzQzOzQ4NjgsMTAgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCXNraXBwZWQgJiM0Mzs9IHNraXBwZWRfem9uZTsKIAkJfQogCi0JCWlmICghcmVtYWluaW5nIHx8IGlzb2xhdGVkICZndDs9IE1JTl9MUlVfQkFUQ0gpCiYjNDM7CQlpZiAoIXJlbWFpbmluZyB8fCBpc29sYXRlZCAmZ3Q7PSBNSU5fTFJVX0JBVENIKSB7CiYjNDM7CQkJZWFybHlfc3RvcCA9IHRydWU7CiAJCQlicmVhazsKJiM0MzsJCX0KIAl9CiAKIAlpdGVtID0gUEdTQ0FOX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTsKQEAgLTQ3OTcsNiAmIzQzOzQ4ODIsMTMgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQlzY2FubmVkLCBza2lwcGVkLCBpc29sYXRlZCwKIAkJCQl0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7CiAKJiM0MzsJLyoKJiM0MzsJICogSWYgd2UgZGlkbiYjMzk7dCBzdG9wIGVhcmx5LCBhbGwgcmVjbGFpbWFibGUgZm9saW9zIGluIHRoZSBjdXJyZW50CiYjNDM7CSAqIGdlbmVyYXRpb24gaGF2ZSBiZWVuIHNjYW5uZWQuIFdlIGFyZSBleGhhdXN0ZWQgaWYgdGhpcyBpcyB0aGUgbGFzdAomIzQzOwkgKiByZWNsYWltYWJsZSBnZW5lcmF0aW9uLgomIzQzOwkgKi8KJiM0MzsJKmV4aGF1c3RlZCA9ICFlYXJseV9zdG9wICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgbHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdICYjNDM7IE1JTl9OUl9HRU5TID09IGxydWdlbi0mZ3Q7bWF4X3NlcTsKIAkqaXNvbGF0ZWRwID0gaXNvbGF0ZWQ7CiAJcmV0dXJuIHNjYW5uZWQ7CiB9CkBAIC00ODI0LDUxICYjNDM7NDkxNiw5MCBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKQogc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpCiB7CiAJc3RydWN0IGN0cmxfcG9zIHNwLCBwdiA9IHt9OwomIzQzOwlpbnQgYW5vbl9nYWluLCBmaWxlX2dhaW47CiAKIAlpZiAoc3dhcHBpbmVzcyAmbHQ7PSBNSU5fU1dBUFBJTkVTUyAmIzQzOyAxKQogCQlyZXR1cm4gTFJVX0dFTl9GSUxFOwogCiAJaWYgKHN3YXBwaW5lc3MgJmd0Oz0gTUFYX1NXQVBQSU5FU1MpCiAJCXJldHVybiBMUlVfR0VOX0FOT047CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFwcGx5IGEgcXVhZHJhdGljIGJvb3N0IGJhc2VkIG9uIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBuZXV0cmFsCiYjNDM7CSAqIGJhbGFuY2UgcG9pbnQgKHN3YXBwaW5lc3MgPSBNQVhfU1dBUFBJTkVTUyAvIDIpLgomIzQzOwkgKgomIzQzOwkgKiBBIGxpbmVhciB3ZWlnaHQgaXMgZWFzaWx5IG92ZXJ3aGVsbWVkIGJ5IGhpc3RvcmljYWwgcmVmYXVsdCBjb3N0CiYjNDM7CSAqIHdoZW4gc3dhcHBpbmVzcyBkZXZpYXRlcyBmcm9tIG5ldXRyYWwuIFRoZSBxdWFkcmF0aWMgc2NhbGluZwomIzQzOwkgKiBhbXBsaWZpZXMgdGhlIHdlaWdodCBvZiB0aGUgcHJlZmVycmVkIHR5cGUgc21vb3RobHkuCiYjNDM7CSAqLwomIzQzOwlpZiAoc3dhcHBpbmVzcyAmbHQ7IE1BWF9TV0FQUElORVNTIC8gMikgewomIzQzOwkJaW50IGRlbHRhID0gKE1BWF9TV0FQUElORVNTIC8gMikgLSBzd2FwcGluZXNzOwomIzQzOwkJaW50IGJvb3N0ID0gKGRlbHRhICogZGVsdGEpICZndDsmZ3Q7IDQ7CiYjNDM7CiYjNDM7CQlhbm9uX2dhaW4gPSBzd2FwcGluZXNzOwomIzQzOwkJZmlsZV9nYWluID0gKE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcykgJiM0MzsgYm9vc3Q7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpbnQgZGVsdGEgPSBzd2FwcGluZXNzIC0gKE1BWF9TV0FQUElORVNTIC8gMik7CiYjNDM7CQlpbnQgYm9vc3QgPSAoZGVsdGEgKiBkZWx0YSkgJmd0OyZndDsgNDsKJiM0MzsKJiM0MzsJCWFub25fZ2FpbiA9IHN3YXBwaW5lc3MgJiM0MzsgYm9vc3Q7CiYjNDM7CQlmaWxlX2dhaW4gPSBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3M7CiYjNDM7CX0KJiM0MzsKIAkvKgogCSAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmUKIAkgKiB3aGljaCB0eXBlIHRvIHNjYW4uCiAJICovCi0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCAmYW1wO3NwKTsKLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgJmFtcDtwdik7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgYW5vbl9nYWluLCAmYW1wO3NwKTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBmaWxlX2dhaW4sICZhbXA7cHYpOwogCiAJcmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKCZhbXA7c3AsICZhbXA7cHYpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX3NpbmdsZV90eXBlX3JlY2xhaW0oaW50IHN3YXBwaW5lc3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3dhcHBpbmVzcyA9PSBNSU5fU1dBUFBJTkVTUyB8fAomIzQzOwkgICAgICAgc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQkJICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MsCiAJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWQsCiAJCQkgIGludCAqaXNvbGF0ZV90eXBlLCBpbnQgKmlzb2xhdGVfc2Nhbm5lZCkKIHsKLQlpbnQgaTsKLQlpbnQgdG90YWxfc2Nhbm5lZCA9IDA7CiYjNDM7CWJvb2wgdHlwZV9mYWxsYmFja19hbGxvd2VkID0gIWlzX3NpbmdsZV90eXBlX3JlY2xhaW0oc3dhcHBpbmVzcyk7CiAJaW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7CiYjNDM7CWludCB0b3RhbF9zY2FubmVkID0gMCwgc2Nhbm5lZCwgdGllcjsKJiM0MzsJYm9vbCBleGhhdXN0ZWQsIHRyaWVkID0gZmFsc2U7CiAKLQlmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7Ci0JCWludCBzY2FubmVkOwotCQlpbnQgdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpOwomIzQzO3JldHJ5OgomIzQzOwl0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7CiYjNDM7CXNjYW5uZWQgPSBzY2FuX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLAomIzQzOwkJCSAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkLCAmYW1wO2V4aGF1c3RlZCk7CiAKLQkJc2Nhbm5lZCA9IHNjYW5fZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsCi0JCQkJICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQpOwomIzQzOwl0b3RhbF9zY2FubmVkICYjNDM7PSBzY2FubmVkOwomIzQzOwlpZiAoKmlzb2xhdGVkKSB7CiYjNDM7CQkqaXNvbGF0ZV90eXBlID0gdHlwZTsKJiM0MzsJCSppc29sYXRlX3NjYW5uZWQgPSBzY2FubmVkOwomIzQzOwkJcmV0dXJuIHRvdGFsX3NjYW5uZWQ7CiYjNDM7CX0KIAotCQl0b3RhbF9zY2FubmVkICYjNDM7PSBzY2FubmVkOwotCQlpZiAoKmlzb2xhdGVkKSB7Ci0JCQkqaXNvbGF0ZV90eXBlID0gdHlwZTsKLQkJCSppc29sYXRlX3NjYW5uZWQgPSBzY2FubmVkOwotCQkJYnJlYWs7Ci0JCX0KLQkJLyoKLQkJICogSWYgc2Nhbm5lZCAmZ3Q7IDAgYW5kIGlzb2xhdGVkID09IDAsIGF2b2lkIGZhbGxpbmcgYmFjayB0byB0aGUKLQkJICogb3RoZXIgdHlwZSwgYXMgdGhpcyB0eXBlIHJlbWFpbnMgc3VmZmljaWVudC4gRmFsbGluZyBiYWNrCi0JCSAqIHRvbyByZWFkaWx5IGNhbiBkaXNydXB0IHRoZSBwb3NpdGl2ZV9jdHJsX2VycigpIGJpYXMuCi0JCSAqLwotCQlpZiAoIXNjYW5uZWQpCi0JCQl0eXBlID0gIXR5cGU7CiYjNDM7CS8qCiYjNDM7CSAqIFdlIGFyZSBydW5uaW5nIG91dCBvZiB0aGUgY3VycmVudCByZWNsYWltIHR5cGUuIEZhbGwgYmFjayB0bwomIzQzOwkgKiB0aGUgb3RoZXIgdHlwZSBpZiBhbGxvd2VkLgomIzQzOwkgKi8KJiM0MzsJaWYgKGV4aGF1c3RlZCAmYW1wOyZhbXA7IHR5cGVfZmFsbGJhY2tfYWxsb3dlZCkgewomIzQzOwkJdHlwZSA9ICF0eXBlOwomIzQzOwkJdHlwZV9mYWxsYmFja19hbGxvd2VkID0gZmFsc2U7CiYjNDM7CQlnb3RvIHJldHJ5OwomIzQzOwl9CiYjNDM7CS8qCiYjNDM7CSAqIFdlIGFyZSBub3QgZXhoYXVzdGVkLCBidXQgZmFpbGVkIHRvIGlzb2xhdGUgYW55IGZvbGlvcyBkdWUgdG8KJiM0MzsJICogcmFjZXMuIEdpdmUgdGhpcyB0eXBlIG9uZSBtb3JlIGNoYW5jZSB0byBhdm9pZCBhIGxhcmdlciBsb29wLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFleGhhdXN0ZWQgJmFtcDsmYW1wOyAhdHJpZWQpIHsKJiM0MzsJCXRyaWVkID0gdHJ1ZTsKJiM0MzsJCWdvdG8gcmV0cnk7CiAJfQogCiAJcmV0dXJuIHRvdGFsX3NjYW5uZWQ7CkBAIC00OTcwLDIxICYjNDM7NTEwMSw2NyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlyZXR1cm4gc2Nhbm5lZDsKIH0KIAomIzQzO3N0YXRpYyBib29sIGxydV9nZW5faW1iYWxhbmNlZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSwKJiM0MzsJCXN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKJiM0MzsJdW5zaWduZWQgbG9uZyB5b3VuZyA9IDAsIG9sZCA9IDAsIGxhZyA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaW5hY3RpdmVfcmF0aW8sIGdiOwomIzQzOwlERUZJTkVfTUlOX1NFUShscnV2ZWMpOwomIzQzOwomIzQzOwkvKiB3ZSBzdGlsbCBoYXZlIGVub3VnaCBnZW5lcmF0aW9ucyB0byByZWNsYWltICovCiYjNDM7CWlmIChtaW5fc2VxW3R5cGVdICYjNDM7IE1JTl9OUl9HRU5TICZsdDsgbWF4X3NlcSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVHJpZ2dlciBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgcnVubmluZyBsb3cgb24gcmVjbGFpbWFibGUKJiM0MzsJICogZm9saW9zLCBwcm92aWRlZCB0aGUgZ2VuZXJhdGlvbiBsYWcgb2YgdGhlIG90aGVyIHR5cGUgcmVtYWlucyBzbWFsbAomIzQzOwkgKiBlbm91Z2ggdGhhdCBpbmNfbWluX3NlcSgpIGludHJvZHVjZXMgbmVnbGlnaWJsZSBvdmVyaGVhZAomIzQzOwkgKi8KJiM0MzsJZm9yICh1bnNpZ25lZCBsb25nIHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSAmbHQ7PSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIHNpemUgPSBscnV2ZWNfZ2VuX3NpemUobHJ1Z2VuLCB0eXBlLCBzZXEpOwomIzQzOwomIzQzOwkJaWYgKHNlcSAmIzQzOyBNSU5fTlJfR0VOUyAmZ3Q7IG1heF9zZXEpCiYjNDM7CQkJeW91bmcgJiM0Mzs9IHNpemU7CiYjNDM7CQllbHNlCiYjNDM7CQkJb2xkICYjNDM7PSBzaXplOwomIzQzOwl9CiYjNDM7CWlmIChtaW5fc2VxWyF0eXBlXSAmIzQzOyBNQVhfTlJfR0VOUyA9PSBtYXhfc2VxICYjNDM7IDEpCiYjNDM7CQlsYWcgJiM0Mzs9IGxydXZlY19nZW5fc2l6ZShscnVnZW4sICF0eXBlLCBtaW5fc2VxWyF0eXBlXSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEJvcnJvdyB0aGUgYWRhcHRpdmUgcmF0aW8gZnJvbSBpbmFjdGl2ZV9pc19sb3coKSwgYW5kIHNjYWxlCiYjNDM7CSAqIGl0IGJ5IHNxcnQoTUFYX05SX0dFTlMpIHRvIG1ha2UgYWdpbmcgbGVzcyBhZ2dyZXNzaXZlCiYjNDM7CSAqLwomIzQzOwlnYiA9ICh5b3VuZyAmIzQzOyBvbGQpICZndDsmZ3Q7ICgzMCAtIFBBR0VfU0hJRlQpOwomIzQzOwlpbmFjdGl2ZV9yYXRpbyA9IGdiID8gaW50X3NxcnQoMTAgKiBnYiAqIE1BWF9OUl9HRU5TKSA6IE1BWF9OUl9HRU5TOwomIzQzOwlyZXR1cm4geW91bmcgJmd0OyBvbGQgKiBpbmFjdGl2ZV9yYXRpbyAmYW1wOyZhbXA7IChsYWcgJmx0OyBNQVhfTFJVX0JBVENIIHx8CiYjNDM7CSAgICAgICAoaXNfZXh0cmVtZV9zd2FwcGluZXNzKHN3YXBwaW5lc3MpICZhbXA7JmFtcDsgc2MtJmd0O3ByaW9yaXR5ICZndDsgMikpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIHNob3VsZF9ydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsCiAJCQkgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcykKIHsKJiM0MzsJaW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7CiAJREVGSU5FX01JTl9TRVEobHJ1dmVjKTsKIAotCS8qIGhhdmUgdG8gcnVuIGFnaW5nLCBzaW5jZSBldmljdGlvbiBpcyBub3QgcG9zc2libGUgYW55bW9yZSAqLwotCWlmIChldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSAmIzQzOyBNSU5fTlJfR0VOUyAmZ3Q7IG1heF9zZXEpCiYjNDM7CS8qIHJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgZXhoYXVzdGVkICovCiYjNDM7CWlmIChtaW5fc2VxW3R5cGVdICYjNDM7IE1JTl9OUl9HRU5TICZndDsgbWF4X3NlcSkKIAkJcmV0dXJuIHRydWU7CiAKLQkvKiB0cnkgdG8gYXZvaWQgYWdpbmcsIGRvIGdlbnRsZSByZWNsYWltIGF0IHRoZSBkZWZhdWx0IHByaW9yaXR5ICovCi0JaWYgKHNjLSZndDtwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpCiYjNDM7CS8qCiYjNDM7CSAqIFRyeSB0byBhdm9pZCBhZ2luZyBieSBkb2luZyBnZW50bGUgcmVjbGFpbSBhdCB0aGUgZGVmYXVsdAomIzQzOwkgKiBwcmlvcml0eS4gU2tpcCBnZW50bGUgcmVjbGFpbSBmb3IgZXh0cmVtZSBzd2FwcGluZXNzLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNjLSZndDtwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkgJmFtcDsmYW1wOyAhaXNfZXh0cmVtZV9zd2FwcGluZXNzKHN3YXBwaW5lc3MpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBiZXR0ZXIgdG8gcnVuIGFnaW5nIGV2ZW4gdGhvdWdoIGV2aWN0aW9uIGlzIHN0aWxsIHBvc3NpYmxlICovCi0JcmV0dXJuIGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpICYjNDM7IE1JTl9OUl9HRU5TID09IG1heF9zZXE7CiYjNDM7CWlmIChldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSAmIzQzOyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CS8qIFJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgc2V2ZXJlbHkgaW1iYWxhbmNlZCBhY3Jvc3MgZ2VucyAqLwomIzQzOwlyZXR1cm4gbHJ1X2dlbl9pbWJhbGFuY2VkKGxydXZlYywgbWF4X3NlcSwgc2MsIHR5cGUsIHN3YXBwaW5lc3MpOwogfQogCiBzdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDUyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUdMUlUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0JiMzOTtzIG1lc3Npbmcgd2l0aCBgbW0vdm1zY2FuLmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQmIzM5O3MgYWJvdXQgTUdMUlUg4oCTIE11bHRpLUdlbiBMUlUuIExldCYjMzk7cyBnZXQgcmlnaHQgaW50byB0aGUgc3BlY2lmaWNzLiBJdCYjMzk7cyB0b3VjaGluZyBhIGxvdCBvZiBrZXkgZnVuY3Rpb25zOiBgZm9saW9faW5jX2dlbmAsIGBpbmNfbWluX3NlcWAsIHdoaWNoIEkgdW5kZXJzdGFuZCBhcmUgZnVuZGFtZW50YWwgdG8gdGhlIGdlbi1iYXNlZCBMUlUgbG9naWM7IGBzY2FuX2ZvbGlvc2AsIGBnZXRfdHlwZV90b19zY2FuYCwgYW5kIGBpc29sYXRlX2ZvbGlvc2AgLS0gYWxsIGNydWNpYWwgZm9yIHRoZSBzY2FubmluZyBwcm9jZXNzOyBhbmQgYHNob3VsZF9ydW5fYWdpbmdgLCByZWxhdGVkIHRvIHRoZSBhZ2luZyBtZWNoYW5pc21zLiBQbHVzLCBpdCYjMzk7cyBhZGRpbmcgdGhlc2UgbmV3IGZ1bmN0aW9ucywgYGxydV9nZW5faW1iYWxhbmNlZGAsIGBscnV2ZWNfZ2VuX3NpemVgLCBgZmx1c2hfbHJ1X2JhdGNoYCwgYW5kIGBpc19leHRyZW1lX3N3YXBwaW5lc3NgLCB3aGljaCBzdWdnZXN0cyBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBiYWxhbmNpbmcgYW5kIGZsdXNoIGJlaGF2aW9yLCBhbmQgaG93IHdlIGhhbmRsZSBleHRyZW1lIHN3YXBwaW5nLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSXMgTUdMUlUgZW5hYmxlZCBieSBkZWZhdWx0PyBPciBpcyB0aGVyZSBzb21lIHNwZWNpZmljIGNvbmZpZyBvcHRpb24gSSBuZWVkIHRvIGxvb2sgZm9yPyBJIGNhbiYjMzk7dCBqdXN0IGRpdmUgaW50byB0aGUgY29kZSBibGluZC4gSSYjMzk7bGwgaGl0IGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBgTFJVX0dFTmAgaW4gYG1tL0tjb25maWdgLiBUaGF0JiMzOTtsbCBnaXZlIG1lIHRoZSBlbmFibGluZyBjb25kaXRpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgZmVlbCBmb3IgdGhlIHBhdGNoJiMzOTtzIHNpZ25pZmljYW5jZSBhbmQgaW50ZW5kZWQgdXNlIGNhc2UuIFRoaXMgZ2l2ZXMgYSBncmVhdCBvdmVydmlldyBhbmQgd2lsbCBoZWxwIHRvIGd1aWRlIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzkyPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbi0tXG5tbS9LY29uZmlnLTE0MDItIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTQwMzpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDA0LVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDExLVxubW0vS2NvbmZpZzoxNDEyOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxMy1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTctXG5tbS9LY29uZmlnOjE0MTg6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQxOS1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDI2LVxubW0vS2NvbmZpZzoxNDI3OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDI4LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3ODkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyBgTFJVX0dFTmAgaXMgdGhlIHBpZWNlIG9mIHRoZSBjb25maWcgd2UmIzM5O3JlIGZvY3VzaW5nIG9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBzZXR0aW5ncyBgTFJVX0dFTmAgcmVsaWVzIG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpcyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgYW55IHBvdGVudGlhbCBjYXNjYWRpbmcgZWZmZWN0cyBvZiBjaGFuZ2VzIHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzOTI9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuLS1cbm1tL0tjb25maWctMTQwMi0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxNDAzOmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MDQtXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTEtXG5tbS9LY29uZmlnOjE0MTI6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDEzLVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxNy1cbm1tL0tjb25maWc6MTQxODpjb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDE5LVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjYtXG5tbS9LY29uZmlnOjE0Mjc6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0MjgtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE2NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipVbnBhY2tpbmcgdGhlIGBMUlVfR0VOYCBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIGJlZm9yZSBJIGRpdmUgaW4sIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBgTFJVX0dFTmAgYWN0dWFsbHkgcmVsaWVzIG9uLiBJIGNhbiYjMzk7dCBqdXN0IHN0YXJ0IHR3ZWFraW5nIG9yIGFuYWx5emluZyBpdCB3aXRob3V0IHVuZGVyc3RhbmRpbmcgaXRzIHBsYWNlIGluIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZS4gV2hhdCBvdGhlciBjb21wb25lbnRzLCBsaWJyYXJpZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBkb2VzIHRoaXMgdGhpbmcgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIGVmZmVjdHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgc3BlY2lmaWMgdmVyc2lvbnMgb3IgY29uZmlndXJhdGlvbnM/IFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY3kgdHJlZSBpcyBmdW5kYW1lbnRhbCBiZWZvcmUgYW55IHNlcmlvdXMgYW5hbHlzaXMgb3IgbW9kaWZpY2F0aW9uIGNhbiBoYXBwZW4uIEkgbmVlZCB0byBlbnN1cmUgSSBkb24mIzM5O3QgaW50cm9kdWNlIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzIGJ5LCBmb3IgZXhhbXBsZSwgbWlzc2luZyBhIGNyaXRpY2FsIGxpYnJhcnkgdGhhdCYjMzk7cyB1c2VkIHNvbWV3aGVyZS4gSXQgYWxsIGhhbmdzIHRvZ2V0aGVyLCBzbyBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHNvbGlkIGZvdW5kYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDAwOlx0XHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXG4xNDAxOlx0XG4xNDAyOlx0IyBtdWx0aS1nZW4gTFJVIHtcbjE0MDM6XHRjb25maWcgTFJVX0dFTlxuMTQwNDpcdFx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4xNDA1Olx0XHRkZXBlbmRzIG9uIE1NVVxuMTQwNjpcdFx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG4xNDA3Olx0XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbjE0MDg6XHRcdGhlbHBcbjE0MDk6XHRcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXG4xNDEwOlx0XHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cbjE0MTE6XHRcbjE0MTI6XHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXG4xNDEzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4xNDE0Olx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MTU6XHRcdGhlbHBcbjE0MTY6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxuMTQxNzpcdFxuMTQxODpcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXG4xNDE5Olx0XHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuMTQyMDpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDIxOlx0XHRoZWxwXG4xNDIyOlx0XHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xuMTQyMzpcdFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxuMTQyNDpcdFxuMTQyNTpcdFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cbjE0MjY6XHRcbjE0Mjc6XHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbjE0Mjg6XHRcdGRlZl9ib29sIHlcbjE0Mjk6XHRcdGRlcGVuZHMgb24gTFJVX0dFTiBcdTAwMjZcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgzMQoJCQkJCQkJb3V0cHV0OiA2MAoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIE1HTFJVJiMzOTtzIENvcmUgTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgc28gYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCDigJMgdGhvc2UgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zLCBnb3QgaXQuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1hcCBvdXQgd2hpY2ggZnVuY3Rpb25zIGhhdmUgYmVlbiB0b3VjaGVkIGluIHRoaXMgY2hhbmdlLCBzcGVjaWZpY2FsbHkuCgpMb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYGZvbGlvX2luY19nZW5gLCBgX19mb2xpb19pbmNfZ2VuYCwgYGluY19taW5fc2VxYCwgYHNjYW5fZm9saW9zYCwgYGdldF90eXBlX3RvX3NjYW5gLCBgaXNvbGF0ZV9mb2xpb3NgLCBgZXZpY3RfZm9saW9zYCwgYGxydV9nZW5faW1iYWxhbmNlZGAsIGFuZCBgc2hvdWxkX3J1bl9hZ2luZ2AuIFRoZXNlIGFyZSBhbGwgcHJldHR5IGNyaXRpY2FsIOKAkyB0aGUgaGVhcnQgb2YgTUdMUlUmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQsIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSB0byBiZSByZWFjaGVkIGR1cmluZyBzdGFuZGFyZCBvcGVyYXRpb24uIERlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBzZWUgd2hhdCB3ZSBjYW4gc2hha2UgbG9vc2UuCgpOb3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byBwaW5wb2ludCBlbnRyeSBwb2ludHMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgKmRpcmVjdGx5KiBhY2Nlc3NpYmxlIGZyb20gZWxzZXdoZXJlLCBpZGVhbGx5IG5vbi1zdGF0aWMgb25lcy4gQWhhLCBpdCBzZWVtcyB0aGV5IGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggaXMgdHlwaWNhbGx5IGdvaW5nIHRvIGxpbWl0IGRpcmVjdCBmdXp6aW5nIG9wcG9ydHVuaXRpZXMuIE5vdCBhIGRlYWwgYnJlYWtlciwgYnV0IGl0IG1lYW5zIEkgbmVlZCB0byBhZGp1c3QgbXkgYXBwcm9hY2guIFRoZSBuZXh0IHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUgdGhhdCBjYWxsIHRoZXNlIGNvcmUgZnVuY3Rpb25zPyBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBlbmVyZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhpbmNfbWluX3NlcXxzY2FuX2ZvbGlvc3xnZXRfdHlwZV90b19zY2FufGlzb2xhdGVfZm9saW9zfGV2aWN0X2ZvbGlvc3xzaG91bGRfcnVuX2FnaW5nKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTI3OT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfZXhlY19maWxlX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtMjg0LVxubW0vdm1zY2FuLmM6Mjg1Oi8qIFNlZSBnZXRfdHlwZV90b19zY2FuKCk6IHRoZXNlIHZhbHVlcyBhbHdheXMgc2VsZWN0IEZJTEUgb3IgQU5PTiAqL1xubW0vdm1zY2FuLmMtMjg2LXN0YXRpYyBpbmxpbmUgYm9vbCBpc19leHRyZW1lX3N3YXBwaW5lc3MoaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmM9MzkzMz1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfbHJ1X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBsaXN0X2hlYWQgKipiYXRjaF9lbmQsXG4tLVxubW0vdm1zY2FuLmMtMzk0NS1cbm1tL3Ztc2Nhbi5jOjM5NDY6c3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG5tbS92bXNjYW4uYy0zOTQ3LXtcbi0tXG5tbS92bXNjYW4uYy00MDIxLVxubW0vdm1zY2FuLmM6NDAyMjpzdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbm1tL3Ztc2Nhbi5jLTQwMjMte1xuLS1cbm1tL3Ztc2Nhbi5jPTQwNzQ9c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmMtNDA5NS1cbm1tL3Ztc2Nhbi5jOjQwOTY6XHRcdGlmIChpbmNfbWluX3NlcShscnV2ZWMsIHR5cGUsIHN3YXBwaW5lc3MpKVxubW0vdm1zY2FuLmMtNDA5Ny1cdFx0XHRjb250aW51ZTtcbi0tXG5tbS92bXNjYW4uYz00NzgyPXN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00ODA1LVxubW0vdm1zY2FuLmM6NDgwNjpzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vdm1zY2FuLmMtNDgwNy1cdFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHRpZXIsXG4tLVxubW0vdm1zY2FuLmM9NDg5Nj1zdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5MTUtXG5tbS92bXNjYW4uYzo0OTE2OnN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxubW0vdm1zY2FuLmMtNDkxNy17XG4tLVxubW0vdm1zY2FuLmM9NDk1OT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy00OTY0LVxubW0vdm1zY2FuLmM6NDk2NTpzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vdm1zY2FuLmMtNDk2Ni1cdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcbi0tXG5tbS92bXNjYW4uYy00OTcwLVx0Ym9vbCB0eXBlX2ZhbGxiYWNrX2FsbG93ZWQgPSAhaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jOjQ5NzE6XHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTQ5NzItXHRpbnQgdG90YWxfc2Nhbm5lZCA9IDAsIHNjYW5uZWQsIHRpZXI7XG4tLVxubW0vdm1zY2FuLmMtNDk3Ni1cdHRpZXIgPSBnZXRfdGllcl9pZHgobHJ1dmVjLCB0eXBlKTtcbm1tL3Ztc2Nhbi5jOjQ5Nzc6XHRzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYyxcbm1tL3Ztc2Nhbi5jLTQ5NzgtXHRcdFx0ICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQsIFx1MDAyNmV4aGF1c3RlZCk7XG4tLVxubW0vdm1zY2FuLmMtNTAwNy1cbm1tL3Ztc2Nhbi5jOjUwMDg6c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS92bXNjYW4uYy01MDA5LVx0XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy01MDI3LVx0LyogSW4gY2FzZSBmb2xpbyBkZWxldGlvbiBsZWZ0IGVtcHR5IG9sZCBnZW5zLCBmbHVzaCB0aGVtICovXG5tbS92bXNjYW4uYzo1MDI4Olx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYy01MDI5LVxubW0vdm1zY2FuLmM6NTAzMDpcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLFxubW0vdm1zY2FuLmMtNTAzMS1cdFx0XHRcdCBcdTAwMjZsaXN0LCBcdTAwMjZpc29sYXRlZCwgXHUwMDI2dHlwZSwgXHUwMDI2dHlwZV9zY2FubmVkKTtcbi0tXG5tbS92bXNjYW4uYy01MDM1LVx0aWYgKHNjYW5uZWQpXG5tbS92bXNjYW4uYzo1MDM2Olx0XHR0cnlfdG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTUwMzctXG4tLVxubW0vdm1zY2FuLmM9NTEwND1zdGF0aWMgYm9vbCBscnVfZ2VuX2ltYmFsYW5jZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsXG4tLVxubW0vdm1zY2FuLmMtNTExOC1cdCAqIGZvbGlvcywgcHJvdmlkZWQgdGhlIGdlbmVyYXRpb24gbGFnIG9mIHRoZSBvdGhlciB0eXBlIHJlbWFpbnMgc21hbGxcbm1tL3Ztc2Nhbi5jOjUxMTk6XHQgKiBlbm91Z2ggdGhhdCBpbmNfbWluX3NlcSgpIGludHJvZHVjZXMgbmVnbGlnaWJsZSBvdmVyaGVhZFxubW0vdm1zY2FuLmMtNTEyMC1cdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jLTUxNDEtXG5tbS92bXNjYW4uYzo1MTQyOnN0YXRpYyBib29sIHNob3VsZF9ydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsXG5tbS92bXNjYW4uYy01MTQzLVx0XHRcdCAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxubW0vdm1zY2FuLmMtNTE0NC17XG5tbS92bXNjYW4uYzo1MTQ1Olx0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYy01MTQ2LVx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbi0tXG5tbS92bXNjYW4uYz01MjMzPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTI0OS1cbm1tL3Ztc2Nhbi5jOjUyNTA6XHRcdGlmIChzaG91bGRfcnVuX2FnaW5nKGxydXZlYywgbWF4X3NlcSwgc2MsIHN3YXBwaW5lc3MpKSB7XG5tbS92bXNjYW4uYy01MjUxLVx0XHRcdGlmICh0cnlfdG9faW5jX21heF9zZXEobHJ1dmVjLCBtYXhfc2VxLCBzd2FwcGluZXNzLCBmYWxzZSkpXG4tLVxubW0vdm1zY2FuLmMtNTI1Ni1cdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XG5tbS92bXNjYW4uYzo1MjU3Olx0XHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYy01MjU4LVx0XHRpZiAoIWRlbHRhKVxuLS1cbm1tL3Ztc2Nhbi5jPTU4NjA9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNTg4MC1cdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XG5tbS92bXNjYW4uYzo1ODgxOlx0XHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXG5tbS92bXNjYW4uYy01ODgyLVx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE2OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBMUlUgVmVjdG9yIFNocmlua2FnZSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBydW5fZXZpY3Rpb25gLCBhbmQgSSBzZWUgdGhleSBjYWxsIHNvbWUgb3RoZXIgZnVuY3Rpb25zLiBOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBvZiBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLiBXaGVyZSBkb2VzICppdCogZ2V0IGNhbGxlZD8gVW5kZXJzdGFuZGluZyBpdHMgdXBzdHJlYW0gZGVwZW5kZW5jaWVzIGlzIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGhvdyB0aGlzIExSVSB2ZWN0b3Igc2hyaW5rYWdlIGlzIGluaXRpYXRlZCB3aXRoaW4gdGhpcyBzeXN0ZW0uIEl0JiMzOTtzIGEgY2xhc3NpYyBkZWJ1Z2dpbmcgYW5kIHBlcmZvcm1hbmNlIGFuYWx5c2lzIHRlY2huaXF1ZTogZm9sbG93IHRoZSBjYWxsIGNoYWluIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGNhbGxpbmcgdGhhdCBmdW5jdGlvbiwgc2hhbGwgd2U/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IG9wZXJhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fc2hyaW5rX2xydXZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTUxOTg9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MjMyLSAqL1xubW0vdm1zY2FuLmM6NTIzMzpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTIzNC17XG4tLVxubW0vdm1zY2FuLmM9NTI3OD1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01Mjk3LVxubW0vdm1zY2FuLmM6NTI5ODpcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01Mjk5LVxuLS1cbm1tL3Ztc2Nhbi5jPTUzODk9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTQwMS1cbm1tL3Ztc2Nhbi5jOjU0MDI6XHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01NDAzLVx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzU3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBMUlUgU2hyaW5rYWdlIFByb2Nlc3MqKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgd2l0aGluIHRoaXMgTFJVIChMZWFzdCBSZWNlbnRseSBVc2VkKSBjYWNoZSBzaHJpbmtpbmcgbWVjaGFuaXNtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBhbmQgYHNocmlua19vbmVgIGJvdGggc2VlbSB0byBldmVudHVhbGx5IHRyaWdnZXIgYHRyeV90b19zaHJpbmtfbHJ1dmVjYC4gVGhhdCBzdWdnZXN0cyBhIHNoYXJlZCByZXNwb25zaWJpbGl0eSwgcG90ZW50aWFsbHkgYSBjZW50cmFsaXplZCBjb250cm9sIHBvaW50IGZvciB0aGUgYWN0dWFsIHNocmlua2luZyBvcGVyYXRpb24uCgpOb3csIHdoZXJlIGRvZXMgYGxydV9nZW5fc2hyaW5rX2xydXZlY2Agb3JpZ2luYXRlPyBJdCYjMzk7cyBrZXkgdG8gdHJhY2UgaXRzIGNhbGwgc3RhY2suIE15IGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgcHJvYmFibHkgY2FsbGVkIGZyb20gYHNocmlua19scnV2ZWNgIG9yIHNvbWV0aGluZyBhbmFsb2dvdXMuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBjb25uZWN0aW9uLiBLbm93aW5nIHdoZXJlIHRoZSBzaHJpbmtpbmcgcHJvY2VzcyBiZWdpbnMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCBiZWhhdmlvdXIgYW5kIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pc2F0aW9uLiBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiBteSBhc3N1bXB0aW9uIGhvbGRzIHRydWUuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgY2FsbGluZyBjb250ZXh0IG9mIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIHRvIGNvbmZpcm0gdGhlIGluaXRpYWwgdHJpZ2dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTMxOT1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01Mzg4LVxubW0vdm1zY2FuLmM6NTM4OTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUzOTAte1xuLS1cbm1tL3Ztc2Nhbi5jPTYxMzM9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MTM3LVxubW0vdm1zY2FuLmM6NjEzODpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYxMzkte1xuLS1cbm1tL3Ztc2Nhbi5jPTYxNTA9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYxNjEtXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFx1MDAyNlx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xubW0vdm1zY2FuLmM6NjE2MjpcdFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNjE2My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MzIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBtbS92bXNjYW4uY2AgZm9yIE1HTFJVIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1tL3Ztc2Nhbi5jYCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBtb3N0IHJlbGV2YW50LCBwYXJ0aWN1bGFybHkgZm9yIE1HTFJVLiBUaGUgZmlyc3QgdGhpbmcgSSBzcG90IGlzIGBzaHJpbmtfbHJ1dmVjYCwgYnV0IHdhaXQsIHRoYXQmIzM5O3Mgc3RhdGljISBUaGF0IHByb2JhYmx5IG1lYW5zIGl0JiMzOTtzIG5vdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBgRm9jdXNTeW1ib2xzYCwgYXMgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljIGVudHJ5IHBvaW50cy4KCkxldCYjMzk7cyBzZWXigKYgT2theSwgSSBzZWUgYHNocmlua19ub2RlYCwgYHNocmlua196b25lc2AsIGBkb190cnlfdG9fZnJlZV9wYWdlc2AsIGFuZCBga3N3YXBkYCDigJMgYWxsIGNsYXNzaWMgaG90LXBhdGggZnVuY3Rpb25zLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBjYXV0aW9uIGFnYWluc3QgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBhdm9pZCBiaWFzaW5nIHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbiwgc28gSSBuZWVkIHRvIGJlIGNhcmVmdWwgaGVyZS4gSWYgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgaGFwcGVuaW5nICppbnNpZGUqIG9uZSBvZiB0aGVzZSBhbHJlYWR5IGhlYXZpbHkgc2NydXRpbml6ZWQgZnVuY3Rpb25zLCBsaWtlIGBzaHJpbmtfbHJ1dmVjYCBmb3IgZXhhbXBsZSwgdGhlbiBpbmNsdWRpbmcgdGhlbSBpbiBgRm9jdXNTeW1ib2xzYCBtaWdodCBub3QgYmUgdGhlIGJlc3QgYXBwcm9hY2guIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIGlkZW50aWZ5aW5nIHNwZWNpZmljIGVudHJ5IHBvaW50cyByZWxhdGVkIHRvIE1HTFJVJiMzOTtzIHVuaXF1ZSBmdW5jdGlvbmFsaXRpZXMuIEkgbmVlZCB0byBjaGVjayBhbmQgZW5zdXJlIHRoYXQgdGhlcmUgYXJlIHNwZWNpZmljIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggTUdMUlUmIzM5O3MgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc0NCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vdm1zY2FuLmM9ODQ2PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODU4LSAqL1xubW0vdm1zY2FuLmM6ODU5OnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbm1tL3Ztc2Nhbi5jLTg2MC17XG4tLVxubW0vdm1zY2FuLmMtODgwLSNlbHNlXG5tbS92bXNjYW4uYzo4ODE6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxubW0vdm1zY2FuLmMtODgyLXtcbi0tXG5tbS92bXNjYW4uYz04ODc9c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtOTExLVxubW0vdm1zY2FuLmM6OTEyOlx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xubW0vdm1zY2FuLmMtOTEzLVx0XHRpZiAoIXJlZmVyZW5jZWRfcHRlcylcbi0tXG5tbS92bXNjYW4uYy05MTUtXG5tbS92bXNjYW4uYzo5MTY6XHRcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWFfZmxhZ3MpID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQO1xubW0vdm1zY2FuLmMtOTE3LVx0fVxuLS1cbm1tL3Ztc2Nhbi5jPTIyOTk9c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjMwNS1cbm1tL3Ztc2Nhbi5jOjIzMDY6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxubW0vdm1zY2FuLmMtMjMwNy1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTI3MTM9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XG5tbS92bXNjYW4uYy0yNzE0LSNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXG5tbS92bXNjYW4uYzoyNzE1OkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xubW0vdm1zY2FuLmM6MjcxNjojZGVmaW5lIGdldF9jYXAoY2FwKVx0c3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXG5tbS92bXNjYW4uYy0yNzE3LSNlbHNlXG5tbS92bXNjYW4uYzoyNzE4OkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX0ZBTFNFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbm1tL3Ztc2Nhbi5jOjI3MTk6I2RlZmluZSBnZXRfY2FwKGNhcClcdHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXG5tbS92bXNjYW4uYy0yNzIwLSNlbmRpZlxuLS1cbm1tL3Ztc2Nhbi5jPTI4MDc9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy0yODM2LSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxubW0vdm1zY2FuLmM6MjgzNzogKiBpbiBscnVfZ2VuX2xvb2tfYXJvdW5kKCkuXG5tbS92bXNjYW4uYy0yODM4LSAqXG4tLVxubW0vdm1zY2FuLmM9Mjg1ND1zdGF0aWMgdm9pZCBnZXRfaXRlbV9rZXkodm9pZCAqaXRlbSwgaW50ICprZXkpXG4tLVxubW0vdm1zY2FuLmMtMjg2My1cbm1tL3Ztc2Nhbi5jOjI4NjQ6c3RhdGljIGJvb2wgdGVzdF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSxcbm1tL3Ztc2Nhbi5jLTI4NjUtXHRcdFx0ICAgICAgdm9pZCAqaXRlbSlcbi0tXG5tbS92bXNjYW4uYy0yODc5LVxubW0vdm1zY2FuLmM6Mjg4MDpzdGF0aWMgdm9pZCB1cGRhdGVfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEsXG5tbS92bXNjYW4uYy0yODgxLVx0XHRcdFx0dm9pZCAqaXRlbSlcbi0tXG5tbS92bXNjYW4uYy0yODk4LVxubW0vdm1zY2FuLmM6Mjg5OTpzdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbm1tL3Ztc2Nhbi5jLTI5MDAte1xuLS1cbm1tL3Ztc2Nhbi5jLTI5MjAtXG5tbS92bXNjYW4uYzoyOTIxOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy0yOTIyLXtcbm1tL3Ztc2Nhbi5jOjI5MjM6XHRzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCBtbV9saXN0ID0ge1xubW0vdm1zY2FuLmMtMjkyNC1cdFx0LmZpZm8gPSBMSVNUX0hFQURfSU5JVChtbV9saXN0LmZpZm8pLFxuLS1cbm1tL3Ztc2Nhbi5jLTI5MzYtXG5tbS92bXNjYW4uYzoyOTM3OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbm1tL3Ztc2Nhbi5jLTI5Mzgte1xuLS1cbm1tL3Ztc2Nhbi5jLTI5NDEtXG5tbS92bXNjYW4uYzoyOTQyOnN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfbmV4dF9tbShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxubW0vdm1zY2FuLmMtMjk0My17XG4tLVxubW0vdm1zY2FuLmMtMjk0Ni1cdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xubW0vdm1zY2FuLmM6Mjk0NzpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZSh3YWxrLVx1MDAzZWxydXZlYyk7XG5tbS92bXNjYW4uYy0yOTQ4LVxuLS1cbm1tL3Ztc2Nhbi5jLTI5NjAtXG5tbS92bXNjYW4uYzoyOTYxOnZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS92bXNjYW4uYy0yOTYyLXtcbi0tXG5tbS92bXNjYW4uYy0yOTY0LVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG5tbS92bXNjYW4uYzoyOTY1Olx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcbm1tL3Ztc2Nhbi5jLTI5NjYtXG4tLVxubW0vdm1zY2FuLmMtMjk3NS1cdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jOjI5NzY6XHRcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtMjk3Ny1cbi0tXG5tbS92bXNjYW4uYy0yOTg3LVxubW0vdm1zY2FuLmM6Mjk4ODp2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMjk4OS17XG5tbS92bXNjYW4uYy0yOTkwLVx0aW50IG5pZDtcbm1tL3Ztc2Nhbi5jOjI5OTE6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0O1xubW0vdm1zY2FuLmMtMjk5Mi1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7XG4tLVxubW0vdm1zY2FuLmMtMzAwNS1cdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jOjMwMDY6XHRcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtMzAwNy1cbi0tXG5tbS92bXNjYW4uYy0zMDI3LSNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jOjMwMjg6dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS92bXNjYW4uYy0zMDI5LXtcbi0tXG5tbS92bXNjYW4uYy0zMDUxLVxubW0vdm1zY2FuLmM6MzA1MjpcdGxydV9nZW5fZGVsX21tKG1tKTtcbm1tL3Ztc2Nhbi5jOjMwNTM6XHRscnVfZ2VuX2FkZF9tbShtbSk7XG5tbS92bXNjYW4uYy0zMDU0LX1cbi0tXG5tbS92bXNjYW4uYy0zMDU4LVxubW0vdm1zY2FuLmM6MzA1OTpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtMzA2MC17XG4tLVxubW0vdm1zY2FuLmMtMzA2My1cbm1tL3Ztc2Nhbi5jOjMwNjQ6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICpnZXRfbW1fc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxubW0vdm1zY2FuLmMtMzA2NS17XG4tLVxubW0vdm1zY2FuLmMtMzA2OC1cbm1tL3Ztc2Nhbi5jOjMwNjk6c3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF9uZXh0X21tKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG5tbS92bXNjYW4uYy0zMDcwLXtcbi0tXG5tbS92bXNjYW4uYy0zMDc1LVxubW0vdm1zY2FuLmM6MzA3NjpzdGF0aWMgdm9pZCByZXNldF9tbV9zdGF0cyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBib29sIGxhc3QpXG5tbS92bXNjYW4uYy0zMDc3LXtcbi0tXG5tbS92bXNjYW4uYy0zMDgwLVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gd2Fsay1cdTAwM2VscnV2ZWM7XG5tbS92bXNjYW4uYzozMDgxOlx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG5tbS92bXNjYW4uYy0zMDgyLVxuLS1cbm1tL3Ztc2Nhbi5jLTMxMDAtXG5tbS92bXNjYW4uYzozMTAxOnN0YXRpYyBib29sIGl0ZXJhdGVfbW1fbGlzdChzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgbW1fc3RydWN0ICoqaXRlcilcbm1tL3Ztc2Nhbi5jLTMxMDIte1xuLS1cbm1tL3Ztc2Nhbi5jLTMxMDctXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjMxMDg6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xubW0vdm1zY2FuLmM6MzEwOTpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtMzExMC1cbi0tXG5tbS92bXNjYW4uYz0zMTY1PXN0YXRpYyBib29sIGl0ZXJhdGVfbW1fbGlzdF9ub3dhbGsoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSlcbi0tXG5tbS92bXNjYW4uYy0zMTY4LVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG5tbS92bXNjYW4uYzozMTY5Olx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcbm1tL3Ztc2Nhbi5jOjMxNzA6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTMxNzEtXG4tLVxubW0vdm1zY2FuLmM9MzIxNz1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi0tXG5tbS92bXNjYW4uYy0zMjIwLVx0aW50IGk7XG5tbS92bXNjYW4uYzozMjIxOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zMjIyLVx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4tLVxubW0vdm1zY2FuLmM9MzIzNj1zdGF0aWMgdm9pZCByZXNldF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBib29sIGNhcnJ5b3Zlcilcbi0tXG5tbS92bXNjYW4uYy0zMjM4LVx0aW50IGhpc3QsIHRpZXI7XG5tbS92bXNjYW4uYzozMjM5Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zMjQwLVx0Ym9vbCBjbGVhciA9IGNhcnJ5b3ZlciA/IE5SX0hJU1RfR0VOUyA9PSAxIDogTlJfSElTVF9HRU5TIFx1MDAzZSAxO1xuLS1cbm1tL3Ztc2Nhbi5jPTMyODg9c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4tLVxubW0vdm1zY2FuLmMtMzMwNS1cdGRvIHtcbm1tL3Ztc2Nhbi5jOjMzMDY6XHRcdC8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi9cbm1tL3Ztc2Nhbi5jLTMzMDctXHRcdGlmICghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSlcbi0tXG5tbS92bXNjYW4uYz0zMzQ1PXN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vdm1zY2FuLmMtMzM0Ny1cdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xubW0vdm1zY2FuLmM6MzM0ODpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmM6MzM0OTpcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG5tbS92bXNjYW4uYy0zMzUwLVx0Ym9vbCBnZW5faW5jcmVhc2VkO1xuLS1cbm1tL3Ztc2Nhbi5jLTMzNTMtXHRpZiAoZ2VuX2luY3JlYXNlZClcbm1tL3Ztc2Nhbi5jOjMzNTQ6XHRcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG5tbS92bXNjYW4uYy0zMzU1LVx0cmV0dXJuIG5ld19nZW47XG4tLVxubW0vdm1zY2FuLmMtMzM1Ny1cbm1tL3Ztc2Nhbi5jOjMzNTg6c3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3Ztc2Nhbi5jLTMzNTktXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxuLS1cbm1tL3Ztc2Nhbi5jLTMzNzMtXG5tbS92bXNjYW4uYzozMzc0OnN0YXRpYyB2b2lkIHJlc2V0X2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbm1tL3Ztc2Nhbi5jLTMzNzUte1xuLS1cbm1tL3Ztc2Nhbi5jLTMzNzctXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBscnV2ZWNfbGl2ZV9sb2NrX2lycSh3YWxrLVx1MDAzZWxydXZlYyk7XG5tbS92bXNjYW4uYzozMzc4Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zMzc5LVxuLS1cbm1tL3Ztc2Nhbi5jLTMzOTItXG5tbS92bXNjYW4uYzozMzkzOlx0XHRpZiAobHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pKVxubW0vdm1zY2FuLmMtMzM5NC1cdFx0XHRscnUgJiM0Mzs9IExSVV9BQ1RJVkU7XG4tLVxubW0vdm1zY2FuLmM9MzQwMT1zdGF0aWMgaW50IHNob3VsZF9za2lwX3ZtYSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKmFyZ3MpXG4tLVxubW0vdm1zY2FuLmMtMzQwNC1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gYXJncy1cdTAwM2V2bWE7XG5tbS92bXNjYW4uYzozNDA1Olx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbm1tL3Ztc2Nhbi5jLTM0MDYtXG4tLVxubW0vdm1zY2FuLmM9MzUzOT1zdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuLS1cbm1tL3Ztc2Nhbi5jLTM1NDYtXG5tbS92bXNjYW4uYzozNTQ3OnN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vdm1zY2FuLmMtMzU0OC1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4tLVxubW0vdm1zY2FuLmMtMzU2My1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG5tbS92bXNjYW4uYzozNTY0Olx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG5tbS92bXNjYW4uYy0zNTY1LVx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4tLVxubW0vdm1zY2FuLmM9MzU3MT1zdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bXNjYW4uYy0zNTgxLVx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcbm1tL3Ztc2Nhbi5jOjM1ODI6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xubW0vdm1zY2FuLmMtMzU4My1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmMtMzU4NS1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjM1ODY6XHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbm1tL3Ztc2Nhbi5jLTM1ODctXHR1bnNpZ25lZCBpbnQgbnI7XG4tLVxubW0vdm1zY2FuLmM9MzY2Mj1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS92bXNjYW4uYy0zNjY5LVx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcbm1tL3Ztc2Nhbi5jOjM2NzA6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xubW0vdm1zY2FuLmMtMzY3MS1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmMtMzY3My1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjM2NzQ6XHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbm1tL3Ztc2Nhbi5jLTM2NzUtXG4tLVxubW0vdm1zY2FuLmM9Mzc1MD1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bXNjYW4uYy0zNzU5LVx0dW5zaWduZWQgbG9uZyBmaXJzdCA9IC0xO1xubW0vdm1zY2FuLmM6Mzc2MDpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG5tbS92bXNjYW4uYzozNzYxOlx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKHdhbGstXHUwMDNlbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTM3NjItXG4tLVxubW0vdm1zY2FuLmM9MzgyMz1zdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3Ztc2Nhbi5jLTM4MjktXHR1bnNpZ25lZCBsb25nIG5leHQ7XG5tbS92bXNjYW4uYzozODMwOlx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbm1tL3Ztc2Nhbi5jLTM4MzEtXG4tLVxubW0vdm1zY2FuLmMtMzg2NC1cbm1tL3Ztc2Nhbi5jOjM4NjU6c3RhdGljIHZvaWQgd2Fsa19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbm1tL3Ztc2Nhbi5jLTM4NjYte1xuLS1cbm1tL3Ztc2Nhbi5jLTM4OTktXG5tbS92bXNjYW4uYzozOTAwOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICpzZXRfbW1fd2FsayhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZvcmNlX2FsbG9jKVxubW0vdm1zY2FuLmMtMzkwMS17XG5tbS92bXNjYW4uYzozOTAyOlx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGN1cnJlbnQtXHUwMDNlcmVjbGFpbV9zdGF0ZS1cdTAwM2VtbV93YWxrO1xubW0vdm1zY2FuLmMtMzkwMy1cbi0tXG5tbS92bXNjYW4uYz0zOTIwPXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcbm1tL3Ztc2Nhbi5jLTM5MjEte1xubW0vdm1zY2FuLmM6MzkyMjpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBjdXJyZW50LVx1MDAzZXJlY2xhaW1fc3RhdGUtXHUwMDNlbW1fd2Fsaztcbm1tL3Ztc2Nhbi5jLTM5MjMtXG4tLVxubW0vdm1zY2FuLmM9Mzk0Nj1zdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy0zOTQ5LVx0aW50IHJlbWFpbmluZyA9IE1BWF9MUlVfQkFUQ0ggLyAoaXNfZXh0cmVtZV9zd2FwcGluZXNzKHN3YXBwaW5lc3MpID8gMiA6IDgpO1xubW0vdm1zY2FuLmM6Mzk1MDpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtMzk1MS1cdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xubW0vdm1zY2FuLmM6Mzk1MjpcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG5tbS92bXNjYW4uYy0zOTUzLVx0aW50IHRhcmdldF9nZW4gPSAob2xkX2dlbiAmIzQzOyAxKSAlIE1BWF9OUl9HRU5TO1xuLS1cbm1tL3Ztc2Nhbi5jPTQwMjI9c3RhdGljIHZvaWQgdHJ5X3RvX2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmMtNDAyNS1cdGJvb2wgc2VxX2luY19mbGFnID0gZmFsc2U7XG5tbS92bXNjYW4uYzo0MDI2Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy00MDI3LVx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbi0tXG5tbS92bXNjYW4uYy00MDMzLVx0XHR3aGlsZSAobWluX3NlcVt0eXBlXSAmIzQzOyBNSU5fTlJfR0VOUyBcdTAwM2M9IGxydWdlbi1cdTAwM2VtYXhfc2VxKSB7XG5tbS92bXNjYW4uYzo0MDM0Olx0XHRcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWluX3NlcVt0eXBlXSk7XG5tbS92bXNjYW4uYy00MDM1LVxuLS1cbm1tL3Ztc2Nhbi5jLTQwNTQtXG5tbS92bXNjYW4uYzo0MDU1Olx0Lyogc2VlIHRoZSBjb21tZW50IG9uIGxydV9nZW5fZm9saW8gKi9cbm1tL3Ztc2Nhbi5jLTQwNTYtXHRpZiAoc3dhcHBpbmVzcyBcdTAwMjZcdTAwMjYgc3dhcHBpbmVzcyBcdTAwM2M9IE1BWF9TV0FQUElORVNTKSB7XG4tLVxubW0vdm1zY2FuLmM9NDA3ND1zdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy00MDc4LVx0aW50IHR5cGUsIHpvbmU7XG5tbS92bXNjYW4uYzo0MDc5Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy00MDgwLXJlc3RhcnQ6XG4tLVxubW0vdm1zY2FuLmMtNDEwOS1cdCAqL1xubW0vdm1zY2FuLmM6NDExMDpcdHByZXYgPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtYXhfc2VxIC0gMSk7XG5tbS92bXNjYW4uYzo0MTExOlx0bmV4dCA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1heF9zZXEgJiM0MzsgMSk7XG5tbS92bXNjYW4uYy00MTEyLVxuLS1cbm1tL3Ztc2Nhbi5jPTQxMzk9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNDE0Mi1cdGJvb2wgc3VjY2Vzcztcbm1tL3Ztc2Nhbi5jOjQxNDM6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xubW0vdm1zY2FuLmMtNDE0NC1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDtcbm1tL3Ztc2Nhbi5jOjQxNDU6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jOjQxNDY6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTQxNDctXG4tLVxubW0vdm1zY2FuLmMtNDE1OC1cdCAqIElmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xubW0vdm1zY2FuLmM6NDE1OTpcdCAqIHRvIGxydV9nZW5fbG9va19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJpdCBpbiBhXG5tbS92bXNjYW4uYy00MTYwLVx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XG4tLVxubW0vdm1zY2FuLmM9NDE5Nz1zdGF0aWMgdm9pZCBzZXRfaW5pdGlhbF9wcmlvcml0eShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00MjIyLVxubW0vdm1zY2FuLmM6NDIyMzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2dlbl9zaXplKHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4sXG5tbS92bXNjYW4uYy00MjI0LVx0XHRpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBzZXEpXG5tbS92bXNjYW4uYy00MjI1LXtcbm1tL3Ztc2Nhbi5jOjQyMjY6XHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xubW0vdm1zY2FuLmMtNDIyNy1cdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7XG4tLVxubW0vdm1zY2FuLmM9NDIzND1zdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy00MjM3LVx0dW5zaWduZWQgbG9uZyBzZXEsIHRvdGFsID0gMDtcbm1tL3Ztc2Nhbi5jOjQyMzg6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTQyMzktXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTQyNjI9c3RhdGljIGJvb2wgbHJ1dmVjX2lzX3JlY2xhaW1hYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNDI3Ni1cbm1tL3Ztc2Nhbi5jOjQyNzc6XHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpKTtcbm1tL3Ztc2Nhbi5jLTQyNzgtXHRiaXJ0aCA9IFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLnRpbWVzdGFtcHNbZ2VuXSk7XG4tLVxubW0vdm1zY2FuLmMtNDI4My0vKiB0byBwcm90ZWN0IHRoZSB3b3JraW5nIHNldCBvZiB0aGUgbGFzdCBOIGppZmZpZXMgKi9cbm1tL3Ztc2Nhbi5jOjQyODQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1X2dlbl9taW5fdHRsIF9fcmVhZF9tb3N0bHk7XG5tbS92bXNjYW4uYy00Mjg1LVxubW0vdm1zY2FuLmM6NDI4NjpzdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNDI4Ny17XG5tbS92bXNjYW4uYy00Mjg4LVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xubW0vdm1zY2FuLmM6NDI4OTpcdHVuc2lnbmVkIGxvbmcgbWluX3R0bCA9IFJFQURfT05DRShscnVfZ2VuX21pbl90dGwpO1xubW0vdm1zY2FuLmMtNDI5MC1cdGJvb2wgcmVjbGFpbWFibGUgPSAhbWluX3R0bDtcbi0tXG5tbS92bXNjYW4uYy00MzMyLSAqL1xubW0vdm1zY2FuLmM6NDMzMzpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG5tbS92bXNjYW4uYy00MzM0LXtcbi0tXG5tbS92bXNjYW4uYy00MzM4LVx0dW5zaWduZWQgbG9uZyBlbmQ7XG5tbS92bXNjYW4uYzo0MzM5Olx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaztcbm1tL3Ztc2Nhbi5jLTQzNDAtXHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xuLS1cbm1tL3Ztc2Nhbi5jLTQzNDgtXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG5tbS92bXNjYW4uYzo0MzQ5Olx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xubW0vdm1zY2FuLmMtNDM1MC1cdHVuc2lnbmVkIGxvbmcgbWF4X3NlcTtcbi0tXG5tbS92bXNjYW4uYy00Mzg4LVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG5tbS92bXNjYW4uYzo0Mzg5Olx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbm1tL3Ztc2Nhbi5jLTQzOTAtXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ0NTE9ZW51bSB7XG4tLVxubW0vdm1zY2FuLmMtNDQ1OC1cbm1tL3Ztc2Nhbi5jOjQ0NTk6c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG5tbS92bXNjYW4uYy00NDYwLXtcbi0tXG5tbS92bXNjYW4uYy00NTA2LVxubW0vdm1zY2FuLmM6NDUwNzp2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTQ1MDgte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ1MzEtXG5tbS92bXNjYW4uYzo0NTMyOnZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTQ1MzMte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ1MzgtXG5tbS92bXNjYW4uYzo0NTM5Olx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9PTEQpO1xubW0vdm1zY2FuLmMtNDU0MC1cdH1cbi0tXG5tbS92bXNjYW4uYy00NTQyLVxubW0vdm1zY2FuLmM6NDU0Mzp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTQ0LXtcbi0tXG5tbS92bXNjYW4uYy00NTY4LVxubW0vdm1zY2FuLmM6NDU2OTp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ1NzAte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ1NzQtXHRpZiAoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4uc2VnKSAhPSBNRU1DR19MUlVfSEVBRClcbm1tL3Ztc2Nhbi5jOjQ1NzU6XHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX0hFQUQpO1xubW0vdm1zY2FuLmMtNDU3Ni19XG5tbS92bXNjYW4uYy00NTc3LVxubW0vdm1zY2FuLmM6NDU3ODpib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDU3OS17XG4tLVxubW0vdm1zY2FuLmM9NDU5MT1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21heF9zZXFfbm93YWxrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy00NTkzLXtcbm1tL3Ztc2Nhbi5jOjQ1OTQ6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xubW0vdm1zY2FuLmM6NDU5NTpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtNDU5Ni1cdGludCBzd2FwcGluZXNzID0gbWVtX2Nncm91cF9zd2FwcGluZXNzKG1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYy00NjI0LSAqL1xubW0vdm1zY2FuLmM6NDYyNTp2b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ2MjYte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ2NTEtICogICAgZ2VuZXJhdGlvbnMgb24gYW4gTFJVIGxpc3QuXG5tbS92bXNjYW4uYzo0NjUyOiAqIDQuIEluIGxydV9nZW5fZGVsX2ZvbGlvKCksIHRoZSBnZW5lcmF0aW9uIHRvIHdoaWNoIHRoZSBmb2xpbyBiZWxvbmdzIGlzXG5tbS92bXNjYW4uYy00NjUzLSAqICAgIGZvdW5kIGJhc2VkIG9uIHRoZSBnZW5lcmF0aW9uIGluZm9ybWF0aW9uIGluIGZvbGlvLVx1MDAzZWZsYWdzLCBhbmQgdGhlXG4tLVxubW0vdm1zY2FuLmMtNDY1NS0gKiAgICB0aGUgbHJ1IHNpemUgY29ycmVjdGx5IGR1cmluZyByZXBhcmVudGluZywgb3RoZXJ3aXNlIHRoZSBscnUgc2l6ZSBtYXlcbm1tL3Ztc2Nhbi5jOjQ2NTY6ICogICAgYmUgdXBkYXRlZCBpbmNvcnJlY3RseSBpbiBscnVfZ2VuX2RlbF9mb2xpbygpLlxubW0vdm1zY2FuLmMtNDY1Ny0gKlxuLS1cbm1tL3Ztc2Nhbi5jLTQ2NjUtICovXG5tbS92bXNjYW4uYzo0NjY2OnN0YXRpYyB2b2lkIF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsIHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMsXG5tbS92bXNjYW4uYy00NjY3LVx0XHRcdFx0ICAgICBpbnQgem9uZSwgaW50IHR5cGUpXG5tbS92bXNjYW4uYy00NjY4LXtcbm1tL3Ztc2Nhbi5jOjQ2Njk6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqY2hpbGRfbHJ1Z2VuLCAqcGFyZW50X2xydWdlbjtcbm1tL3Ztc2Nhbi5jLTQ2NzAtXHRlbnVtIGxydV9saXN0IGxydSA9IHR5cGUgKiBMUlVfSU5BQ1RJVkVfRklMRTtcbi0tXG5tbS92bXNjYW4uYy00Njc2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZ2V0X25yX2dlbnMoY2hpbGRfbHJ1dmVjLCB0eXBlKTsgaSYjNDM7JiM0MzspIHtcbm1tL3Ztc2Nhbi5jOjQ2Nzc6XHRcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGNoaWxkX2xydWdlbi1cdTAwM2VtYXhfc2VxIC0gaSk7XG5tbS92bXNjYW4uYy00Njc4LVx0XHRsb25nIG5yX3BhZ2VzID0gY2hpbGRfbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV07XG5tbS92bXNjYW4uYzo0Njc5Olx0XHRpbnQgY2hpbGRfbHJ1X2FjdGl2ZSA9IGxydV9nZW5faXNfYWN0aXZlKGNoaWxkX2xydXZlYywgZ2VuKSA/IExSVV9BQ1RJVkUgOiAwO1xubW0vdm1zY2FuLmM6NDY4MDpcdFx0aW50IHBhcmVudF9scnVfYWN0aXZlID0gbHJ1X2dlbl9pc19hY3RpdmUocGFyZW50X2xydXZlYywgZ2VuKSA/IExSVV9BQ1RJVkUgOiAwO1xubW0vdm1zY2FuLmMtNDY4MS1cbi0tXG5tbS92bXNjYW4uYy00Njg5LVxubW0vdm1zY2FuLmM6NDY5MDpcdFx0aWYgKGxydV9nZW5faXNfYWN0aXZlKGNoaWxkX2xydXZlYywgZ2VuKSAhPSBscnVfZ2VuX2lzX2FjdGl2ZShwYXJlbnRfbHJ1dmVjLCBnZW4pKSB7XG5tbS92bXNjYW4uYy00NjkxLVx0XHRcdF9fdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1ICYjNDM7IGNoaWxkX2xydV9hY3RpdmUsIHpvbmUsIC1ucl9wYWdlcyk7XG4tLVxubW0vdm1zY2FuLmMtNDY5Ni1cbm1tL3Ztc2Nhbi5jOjQ2OTc6dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ2OTgte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ3MDgtXHRcdGZvciAodHlwZSA9IDA7IHR5cGUgXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUmIzQzOyYjNDM7KVxubW0vdm1zY2FuLmM6NDcwOTpcdFx0XHRfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCB6aWQsIHR5cGUpO1xubW0vdm1zY2FuLmMtNDcxMC1cbi0tXG5tbS92bXNjYW4uYz00NzI2PXN0YXRpYyBib29sIHNvcnRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy00NzM2LVx0aW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7XG5tbS92bXNjYW4uYzo0NzM3Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy00NzM4LVxuLS1cbm1tL3Ztc2Nhbi5jLTQ3NDItXHRpZiAoIWZvbGlvX2V2aWN0YWJsZShmb2xpbykpIHtcbm1tL3Ztc2Nhbi5jOjQ3NDM6XHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTtcbm1tL3Ztc2Nhbi5jLTQ3NDQtXHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xuLS1cbm1tL3Ztc2Nhbi5jLTQ3NTEtXHQvKiBwcm9tb3RlZCAqL1xubW0vdm1zY2FuLmM6NDc1MjpcdGlmIChnZW4gIT0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSkpIHtcbm1tL3Ztc2Nhbi5jLTQ3NTMtXHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbZ2VuXVt0eXBlXVt6b25lXSk7XG4tLVxubW0vdm1zY2FuLmM9NDc4Mj1zdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDc5OS1cbm1tL3Ztc2Nhbi5jOjQ4MDA6XHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG5tbS92bXNjYW4uYy00ODAxLVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XG4tLVxubW0vdm1zY2FuLmM9NDgwNj1zdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ4MTgtXHR1bnNpZ25lZCBsb25nIHJlbWFpbmluZyA9IG5yX3RvX3NjYW47XG5tbS92bXNjYW4uYzo0ODE5Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy00ODIwLVx0Ym9vbCBlYXJseV9zdG9wID0gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmMtNDgyOS1cbm1tL3Ztc2Nhbi5jOjQ4MzA6XHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbm1tL3Ztc2Nhbi5jLTQ4MzEtXG4tLVxubW0vdm1zY2FuLmM9NTAwOD1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy01MDE2LVx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xubW0vdm1zY2FuLmM6NTAxNzpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG5tbS92bXNjYW4uYy01MDE4LVx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcbi0tXG5tbS92bXNjYW4uYy01MDY5LVx0XHQvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbm1tL3Ztc2Nhbi5jOjUwNzA6XHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbm1tL3Ztc2Nhbi5jLTUwNzEtXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xuLS1cbm1tL3Ztc2Nhbi5jLTUxMDMtXG5tbS92bXNjYW4uYzo1MTA0OnN0YXRpYyBib29sIGxydV9nZW5faW1iYWxhbmNlZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcbm1tL3Ztc2Nhbi5jLTUxMDUtXHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG5tbS92bXNjYW4uYy01MTA2LXtcbm1tL3Ztc2Nhbi5jOjUxMDc6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTUxMDgtXHR1bnNpZ25lZCBsb25nIHlvdW5nID0gMCwgb2xkID0gMCwgbGFnID0gMDtcbi0tXG5tbS92bXNjYW4uYz01MTQyPXN0YXRpYyBib29sIHNob3VsZF9ydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsXG4tLVxubW0vdm1zY2FuLmMtNTE2My1cdC8qIFJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgc2V2ZXJlbHkgaW1iYWxhbmNlZCBhY3Jvc3MgZ2VucyAqL1xubW0vdm1zY2FuLmM6NTE2NDpcdHJldHVybiBscnVfZ2VuX2ltYmFsYW5jZWQobHJ1dmVjLCBtYXhfc2VxLCBzYywgdHlwZSwgc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYy01MTY1LX1cbi0tXG5tbS92bXNjYW4uYz01Mjc4PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyODUtXG5tbS92bXNjYW4uYzo1Mjg2Olx0LyogbHJ1X2dlbl9hZ2Vfbm9kZSgpIGNhbGxlZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKCkgKi9cbm1tL3Ztc2Nhbi5jLTUyODctXHRpZiAobWVtX2Nncm91cF9iZWxvd19taW4oTlVMTCwgbWVtY2cpKVxuLS1cbm1tL3Ztc2Nhbi5jPTUzMTk9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTMyNS1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbm1tL3Ztc2Nhbi5jOjUzMjY6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuO1xubW0vdm1zY2FuLmMtNTMyNy1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbi0tXG5tbS92bXNjYW4uYy01MzM5LVx0XHRpZiAob3ApIHtcbm1tL3Ztc2Nhbi5jOjUzNDA6XHRcdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBvcCk7XG5tbS92bXNjYW4uYy01MzQxLVx0XHRcdG9wID0gMDtcbi0tXG5tbS92bXNjYW4uYy01MzUzLVx0XHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkge1xubW0vdm1zY2FuLmM6NTM1NDpcdFx0XHRscnVfZ2VuX3JlbGVhc2VfbWVtY2cobWVtY2cpO1xubW0vdm1zY2FuLmMtNTM1NS1cdFx0XHRtZW1jZyA9IE5VTEw7XG4tLVxubW0vdm1zY2FuLmMtNTM3MS1cdGlmIChvcClcbm1tL3Ztc2Nhbi5jOjUzNzI6XHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgb3ApO1xubW0vdm1zY2FuLmMtNTM3My1cbi0tXG5tbS92bXNjYW4uYy01Mzc4LVxubW0vdm1zY2FuLmM6NTM3OTpcdC8qIHJlc3RhcnQgaWYgcmFjZWQgd2l0aCBscnVfZ2VuX3JvdGF0ZV9tZW1jZygpICovXG5tbS92bXNjYW4uYy01MzgwLVx0aWYgKGdlbiAhPSBnZXRfbnVsbHNfdmFsdWUocG9zKSlcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk1MAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDkyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBGdXp6aW5nIEVmZm9ydHMgb24gTUdMUlUgUmVjbGFpbSBQYXRocyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoZSBNR0xSVSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIHJlY2xhaW0gcGF0aHMuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyB0aGF0IHRyaWdnZXIgdGhlIHJlY2xhaW0gYW5kIGFnaW5nIGxvZ2ljIGFuZCB0YXJnZXQgdGhvc2UuCgpUaGUgaW5pdGlhbCBhcHByb2FjaCBpbnZvbHZlcyB1bmRlcnN0YW5kaW5nIHdoaWNoIGZ1bmN0aW9ucyBhcmUgKmFjdHVhbGx5KiByZXNwb25zaWJsZSBmb3IgdGhlIHJlY2xhaW0gcHJvY2Vzcy4gV2UgaGF2ZSBhIHNldCBvZiBub24tc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBscnVfZ2VuX2FkZF9tbWAsIGBscnVfZ2VuX2RlbF9tbWAsIGV0Yy4sIGJ1dCB0aGVzZSBhcmVuJiMzOTt0IHRoZSBwcmltYXJ5IGRyaXZlcnMuIFRoZSByZWFsIHJlY2xhaW0gd29yayBpcyBpbml0aWF0ZWQgYnkgbWVtb3J5IHByZXNzdXJlLCB3aGljaCBjYWxscyBhIHNlcXVlbmNlOiBgc2hyaW5rX2xydXZlY2AgLSZndDsgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgLSZndDsgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBhbmQgc28gb24sIGV2ZW50dWFsbHkgbGVhZGluZyB0byBgX19mb2xpb19pbmNfZ2VuYC4gQWdpbmcgaXMgdHJpZ2dlcmVkIGluIGEgc2ltaWxhciBtYW5uZXIsIGZyb20gYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBkb3duIHRvIGBscnVfZ2VuX2ltYmFsYW5jZWRgLgoKR2l2ZW4gdGhhdCB0aGVzZSBwYXRocyBhcmUgYWN0aXZhdGVkIGJ5IG1lbW9yeSBhbGxvY2F0aW9uLCBwYXJ0aWN1bGFybHkgdGhyb3VnaCBzeXNjYWxscyBsaWtlIGBhbGxvY19wYWdlc2Agb3IgYG1tYXBgLCBTeXprYWxsZXIgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyB0b29sIGZvciB0aGUgam9iLiBUbyBtYWtlIGl0IGVmZmVjdGl2ZSwgSSBuZWVkIHRvIHByb3ZpZGUgYEZvY3VzU3ltYm9sc2AgdGhhdCBhcmUgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBhbmQgbm90IGp1c3QgZ2VuZXJpYyBzeXNjYWxscy4KCk15IGZpcnN0IGltcHVsc2Ugd2FzIHRvIGxpc3Qgb3V0IHRoZSBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zOiBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCwgYGxydV9nZW5fYWdlX25vZGVgLCBldGMuIEhvd2V2ZXIsIHRoZSBpbnN0cnVjdGlvbnMgaGlnaGxpZ2h0ZWQgc29tZXRoaW5nIGltcG9ydGFudDogcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgYmVjYXVzZSBzdGF0aWMgaGVscGVycyBhcmUgb2Z0ZW4gaW5saW5lZCBhbmQgZG9uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIGNydWNpYWwgZGlzdGluY3Rpb24uCgpTbywgSSBzdGFydGVkIGNoZWNraW5nIHRoZSBsaXN0ZWQgZnVuY3Rpb25zLiBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBpcyBzdGF0aWMsIGFzIGlzIGBzaHJpbmtfbHJ1dmVjYCwgYHNocmlua19ub2RlYCwgYW5kIGBkb190cnlfdG9fZnJlZV9wYWdlc2AuIEhvd2V2ZXIsIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgbm9uLXN0YXRpYy4gVGhlIHNhbWUgZ29lcyBmb3IgYGtzd2FwZGAsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYGxydV9nZW5fYWRkX21tYCwgYW5kIGBscnVfZ2VuX2RlbF9tbWAuIGB0cnlfdG9fZnJlZV9wYWdlc2Agc291bmRzIGdlbmVyaWMgYW5kIG1pZ2h0IG5vdCBiZSB0aGUgbW9zdCB0YXJnZXRlZC4KCk5vdywgY29uc2lkZXJpbmcgdGhlIGNoYW5nZXMsIHRoZSBtb3JlIHJlbGV2YW50IGZ1bmN0aW9ucyBzZWVtIHRvIGJlIHRob3NlIGludm9sdmVkIGluIGluY3JlYXNpbmcgdGhlIHNlcXVlbmNlIG51bWJlciwgc2Nhbm5pbmcgZm9saW9zLCBpc29sYXRpbmcgYW5kIGV2aWN0aW5nIHRoZW0sIGFuZCB0aGUgYWdpbmcgbG9naWMsIHN1Y2ggYXMgYGxydV9nZW5faW1iYWxhbmNlZGAsIGFuZCBzbyBvbi4gVGhlc2UgYWxsIGZlZWQgaW50byBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIG9yIGBydW5fZXZpY3Rpb25gLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBieSBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIGFuZCBgbWF4X2xydV9nZW5fbWVtY2dgLiBUaGUgcXVlc3Rpb24gaXMsIHdoaWNoIG9mIHRoZXNlIGlzIHRoZSBtb3N0IGVmZmVjdGl2ZSBlbnRyeSBwb2ludD8gYGxydV9nZW5fc29mdF9yZWNsYWltYCBhbmQgYG1heF9scnVfZ2VuX21lbWNnYCBhcmUgbm9uLXN0YXRpYy4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZW0gZnVydGhlciB0byBzZWUgaWYgdGhleSBhcmUgYSBnb29kIGZpdCBmb3IgbXkgYEZvY3VzU3ltYm9sc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhscnVfZ2VuX3NvZnRfcmVjbGFpbXxtYXhfbHJ1X2dlbl9tZW1jZykmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jPTE4MD1zdGF0aWMgdm9pZCBtZW1jZzFfdXBkYXRlX3RyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xODctXHRcdGlmIChzb2Z0X2xpbWl0X2V4Y2VzcyhtZW1jZykpXG5tbS9tZW1jb250cm9sLXYxLmM6MTg4Olx0XHRcdGxydV9nZW5fc29mdF9yZWNsYWltKG1lbWNnLCBuaWQpO1xubW0vbWVtY29udHJvbC12MS5jLTE4OS1cdFx0cmV0dXJuO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0yNzc9c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjg1LVx0XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpXG5tbS9tZW1jb250cm9sLmM6Mjg2Olx0XHRcdG1heF9scnVfZ2VuX21lbWNnKHBhcmVudCwgbmlkKTtcbm1tL21lbWNvbnRyb2wuYy0yODctXG4tLVxubW0vdm1zY2FuLmM9NDU0Mz12b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtNDU2OC1cbm1tL3Ztc2Nhbi5jOjQ1Njk6dm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG5tbS92bXNjYW4uYy00NTcwLXtcbi0tXG5tbS92bXNjYW4uYz00NTkxPXN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWF4X3NlcV9ub3dhbGsoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ2MjQtICovXG5tbS92bXNjYW4uYzo0NjI1OnZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDYyNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTk5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IEludGVyZGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyBzb21lIG1lbW9yeSByZWNsYWltIGxvZ2ljIGhlcmUuIEkgc2VlIHRoYXQgYGxydV9nZW5fc29mdF9yZWNsYWltYCBpcyB0cmlnZ2VyZWQgYnkgYG1lbWNnMV91cGRhdGVfdHJlZWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50IOKAkyBpdCB0ZWxscyBtZSBob3cgc29mdCByZWNsYWltLCBwcmVzdW1hYmx5IHJlbGF0ZWQgdG8gZ2VuZXJhdGlvbmFsIExSVSwgZ2V0cyBpbml0aWF0ZWQgZHVyaW5nIG1lbW9yeSBjb250cm9sIGdyb3VwIHVwZGF0ZXMuIE5vdywgSSBoYXZlIHRvIHJlbWVtYmVyIHRoZSBzcGVjaWZpY3Mgb2YgdGhhdCBjYWxsIGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBob3cgbWVtY2cgcHJlc3N1cmUgaXMgYWRkcmVzc2VkLgoKVGhlbiBJIG5vdGUgYG1heF9scnVfZ2VuX21lbWNnYCBpcyBpbnZva2VkIGZyb20gYG1lbWNnX3JlcGFyZW50X29iamNnc2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBSZXBhcmVudGluZyBvYmplY3QgY2dyb3VwcyBwcm9iYWJseSBpbnZvbHZlcyByZWFkanVzdGluZyBsaW1pdHMgYW5kLCBieSBleHRlbnNpb24sIG1heGltdW0gZ2VuZXJhdGlvbmFsIExSVSB2YWx1ZXMgZm9yIGEgbWVtY2cuIFNvIEkgbmVlZCB0byBnbyBvdmVyIHRoZSBudWFuY2VzIG9mIHRoYXQgaW50ZXJhY3Rpb24gdG9vLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSYjMzk7cyBhbnkgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCBwYWdlIG93bmVyc2hpcCBoYXBwZW5pbmcgaGVyZS4KCk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbiBhcmlzZXM6IFdoYXQgYWJvdXQgYHRyeV90b19mcmVlX3BhZ2VzYD8gV2hlcmUgZG9lcyB0aGF0IGZpdCBpbiB0aGlzIHdob2xlIHBpY3R1cmU/IElzIHRoaXMgYmVpbmcgY2FsbGVkIGRpcmVjdGx5LCBvciBpcyB0aGVyZSBhIGxheWVyIG9mIGFic3RyYWN0aW9uPyBJdCBtaWdodCBiZSB0aGUgY29yZSBwYWdlIGZyZWVpbmcgbWVjaGFuaXNtLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY2FsbHMgSSYjMzk7dmUganVzdCBpZGVudGlmaWVkLiBJIHNob3VsZCBwcm9iYWJseSByZXZpZXcgdGhlIGNhbGwgY2hhaW4gYW5kIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBjb21lcyBpbi4gV2hhdCBhcmUgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGl0PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBzdWNjZXNzIG9yIGZhaWx1cmU/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19mcmVlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9Njk9dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTtcbm1tL2ludGVybmFsLmg6NzA6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG5tbS9pbnRlcm5hbC5oLTcxLVx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm1hc2spO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NDM4PV9fcGVyZm9ybV9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ0NTAtXG5tbS9wYWdlX2FsbG9jLmM6NDQ1MTpcdHByb2dyZXNzID0gdHJ5X3RvX2ZyZWVfcGFnZXMoYWMtXHUwMDNlem9uZWxpc3QsIG9yZGVyLCBnZnBfbWFzayxcbm1tL3BhZ2VfYWxsb2MuYy00NDUyLVx0XHRcdFx0XHRcdFx0XHRhYy1cdTAwM2Vub2RlbWFzayk7XG4tLVxubW0vdm1zY2FuLmM9NjY5Nz1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTY3MjctICovXG5tbS92bXNjYW4uYzo2NzI4OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3RyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG5tbS92bXNjYW4uYy02NzI5LVx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jPTY4NzA9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG4tLVxubW0vdm1zY2FuLmMtNjk0OS1cbm1tL3Ztc2Nhbi5jOjY5NTA6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG5tbS92bXNjYW4uYy02OTUxLVx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL3Ztc2Nhbi5jLTY5ODQtXG5tbS92bXNjYW4uYzo2OTg1Olx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY5ODYtXG4tLVxubW0vdm1zY2FuLmM9NzAzNj11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTcwNjctXG5tbS92bXNjYW4uYzo3MDY4Olx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTcwNjktXG4tLVxubW0vdm1zY2FuLmM9NzgzND11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcbi0tXG5tbS92bXNjYW4uYy03ODUzLVxubW0vdm1zY2FuLmM6Nzg1NDpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy03ODU1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzA5OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0IHdlcmUgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGlyZWN0ICZhbXA7IEJhY2tncm91bmQgUmVjbGFpbSBFbnRyeSBQb2ludHMgJmFtcDsgRXhwbG9yaW5nIEZ1cnRoZXIgTUdMUlUgQ29ubmVjdGlvbnMqKgoKQWxyaWdodCwgc28gYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7ZCByZWFjaCBmb3Igd2hlbiB0aGlua2luZyBhYm91dCAqZGlyZWN0KiBtZW1vcnkgcmVjbGFpbS4gVGhleSByZXByZXNlbnQgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmlnZ2VyaW5nIGltbWVkaWF0ZSBmcmVlaW5nIG9mIHBhZ2VzLiBUaGVuLCBhcyBleHBlY3RlZCwgd2UgaGF2ZSBga3N3YXBkYCBmb3IgYmFja2dyb3VuZCByZWNsYWltLCB0aGUgb25lIHRoYXQgcnVucyBpbiB0aGUgYmFja2dyb3VuZC4KCk5vdywgSSBuZWVkIHRvIHpvb20gaW4gb24gYG1tL3Ztc2Nhbi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb3RoZXIgZnVuY3Rpb25zICp3aXRoaW4qIHRoYXQgbW9kdWxlIG1pZ2h0IGJlIHJlbGV2YW50IHRvIE1HTFJVLiBUaGUgaW50ZW50IGlzIHRvIHNlZSBpZiBhbnkgb3RoZXIgZnVuY3Rpb24gaXMgbm90IHN0YXRpYyBhbmQgbWF5IGJlIHJlbGF0ZWQgdG8gdGhlIE1HTFJVIGNvZGUuIEl0IG1ha2VzIHNlbnNlIHRvIHNlZSBob3cgdGhlc2UgZGlmZmVyZW50IHBpZWNlcyBpbnRlcmNvbm5lY3QuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyB0aGF0IGhhcyBhIHBvdGVudGlhbCBpbXBhY3Qgb24sIG9yIGltcGxpY2F0aW9uIGZvciwgTUdMUlUmIzM5O3MgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIGxydV9nZW5fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Mjk0Mj1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbi0tXG5tbS92bXNjYW4uYy0yOTYwLVxubW0vdm1zY2FuLmM6Mjk2MTp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMjk2Mi17XG4tLVxubW0vdm1zY2FuLmMtMjk4Ny1cbm1tL3Ztc2Nhbi5jOjI5ODg6dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTI5ODkte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwMjctI2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmM6MzAyODp2b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTMwMjkte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ0NTk9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4tLVxubW0vdm1zY2FuLmMtNDUwNi1cbm1tL3Ztc2Nhbi5jOjQ1MDc6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTA4LXtcbi0tXG5tbS92bXNjYW4uYy00NTMxLVxubW0vdm1zY2FuLmM6NDUzMjp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTMzLXtcbi0tXG5tbS92bXNjYW4uYy00NTQyLVxubW0vdm1zY2FuLmM6NDU0Mzp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTQ0LXtcbi0tXG5tbS92bXNjYW4uYy00NTY4LVxubW0vdm1zY2FuLmM6NDU2OTp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ1NzAte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ2NjY9c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00Njk2LVxubW0vdm1zY2FuLmM6NDY5Nzp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDY5OC17XG4tLVxubW0vdm1zY2FuLmM9NjAyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscnVfZ2VuX3JvX2ZvcHMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNjAzOS1cbm1tL3Ztc2Nhbi5jOjYwNDA6dm9pZCBscnVfZ2VuX2luaXRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbm1tL3Ztc2Nhbi5jLTYwNDEte1xuLS1cbm1tL3Ztc2Nhbi5jLTYwNTEtXG5tbS92bXNjYW4uYzo2MDUyOnZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy02MDUzLXtcbi0tXG5tbS92bXNjYW4uYy02MDczLVxubW0vdm1zY2FuLmM6NjA3NDp2b2lkIGxydV9nZW5faW5pdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy02MDc1LXtcbi0tXG5tbS92bXNjYW4uYy02MDg0LVxubW0vdm1zY2FuLmM6NjA4NTp2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy02MDg2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzNTAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQsIGV4cHJlc3NlZCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAqKgoKSG1tLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuLi4gcmlnaHQsIGl0JiMzOTtzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhbiBpbXBvcnRhbnQgcG9pbnQuIEtub3dpbmcgaXQmIzM5O3Mgbm9uLXN0YXRpYyBpbW1lZGlhdGVseSBleHBhbmRzIHRoZSBwb3NzaWJpbGl0aWVzIGZvciBpdHMgdXNhZ2UuIEl0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBwYXJ0IG9mIGEgbGFyZ2VyIGNsYXNzIG9yIG1vZHVsZSwgYW5kIHRoZXJlZm9yZSBpdHMgc2NvcGUgaXNuJiMzOTt0IGxpbWl0ZWQgdG8gYSBzaW5nbGUgZmlsZS4gSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXJlIGl0JiMzOTtzICp2aXNpYmxlKiBhbmQgaG93IHRoYXQgbWlnaHQgYWZmZWN0IGl0cyBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbXBvbmVudHMgd2l0aGluIHRoZSBzeXN0ZW0uIElzIGl0IGBwdWJsaWNgLCBgcHJvdGVjdGVkYCwgb3IgYHByaXZhdGVgPyBUaGF0JiMzOTtzIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIGl0JiMzOTtzIGFib3V0IHRoZSBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucyBhbmQgaG93IHRoaXMgZnVuY3Rpb24gY2FuIGJlIGxldmVyYWdlZCBvciBwb3RlbnRpYWxseSBtb2RpZmllZCBsYXRlci4gSSBzaG91bGQgYmUga2VlcGluZyB0cmFjayBvZiBhbGwgdGhlIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgaXRzIG5vbi1zdGF0aWMgbmF0dXJlIHdpbGwgYmUgaW1wb3J0YW50IHRvIGdyYXNwIHRoZSB3aWRlciBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24mIzM5O3MgcHVycG9zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmJvb2wgbHJ1X2dlbl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00Mjg2PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDMzMi0gKi9cbm1tL3Ztc2Nhbi5jOjQzMzM6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxubW0vdm1zY2FuLmMtNDMzNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NzQxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqVHJhY2luZyB0aGUgRm9vdHN0ZXBzIG9mIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGV2ZXJ5d2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFdoZXJlIGRvZXMgdGhlIGV4ZWN1dGlvbiBwYXRoICpiZWdpbio/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuIFVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcyB3aWxsIHRlbGwgbWUgYSBsb3QuIEVzc2VudGlhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIHNvdXJjZSBjb2RlLCB0cmFjZSB0aGUgdXNhZ2UsIGFuZCBzZWUgaG93IGl0IGlzIHdvcmtpbmcsIGhvcGluZyB0byBwYWludCBhIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcm1hcC5jPTkxOD1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy05ODItXHRcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXHUwMDI2XHUwMDI2IHB2bXcucHRlKSB7XG5tbS9ybWFwLmM6OTgzOlx0XHRcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFx1MDAyNnB2bXcsIG5yKSlcbm1tL3JtYXAuYy05ODQtXHRcdFx0XHRyZWZlcmVuY2VkJiM0MzsmIzQzOztcbi0tXG5tbS92bXNjYW4uYz0yODA3PXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtMjgzNi0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcbm1tL3Ztc2Nhbi5jOjI4Mzc6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxubW0vdm1zY2FuLmMtMjgzOC0gKlxuLS1cbm1tL3Ztc2Nhbi5jPTQxMzk9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNDE1OC1cdCAqIElmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xubW0vdm1zY2FuLmM6NDE1OTpcdCAqIHRvIGxydV9nZW5fbG9va19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJpdCBpbiBhXG5tbS92bXNjYW4uYy00MTYwLVx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XG4tLVxubW0vdm1zY2FuLmM9NDI4Nj1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQzMzItICovXG5tbS92bXNjYW4uYzo0MzMzOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbm1tL3Ztc2Nhbi5jLTQzMzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM5MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1HTFJVIEV2aWN0aW9uIFBhdGggRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgTUdMUlUgcGF0Y2gsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBldmljdGlvbiBhbmQgYWdpbmcgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoZSBpbml0aWFsIGNhbGwgc3RhY2sgcG9pbnRzIHRvIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBmcm9tIGBmb2xpb19yZWZlcmVuY2VkX29uZWAgaW4gYG1tL3JtYXAuY2AsIGJ1dCB0aGUgbWVhdCBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25z4oCUYGZvbGlvX2luY19nZW5gLCBgX19mb2xpb19pbmNfZ2VuYCwgYGluY19taW5fc2VxYCwgYHNjYW5fZm9saW9zYCwgYGdldF90eXBlX3RvX3NjYW5gLCBgaXNvbGF0ZV9mb2xpb3NgLCBgZXZpY3RfZm9saW9zYCwgYGxydV9nZW5faW1iYWxhbmNlZGAsIGFuZCBgc2hvdWxkX3J1bl9hZ2luZ2DigJRhcmUgYWxsIGRlZXBseSBpbnZvbHZlZCBpbiB0aGUgZXZpY3Rpb24gcHJvY2Vzcy4KClRoZSBldmljdGlvbiBwYXRoIGl0c2VsZiBpcyB0cmlnZ2VyZWQgYnkgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBhbmQgYHJ1bl9ldmljdGlvbmAsIGFuZCBpdCBsb29rcyBsaWtlIGBydW5fZXZpY3Rpb25gIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlLCBiZWluZyBjYWxsZWQgYnkgYGxydV9nZW5fc29mdF9yZWNsYWltYCAoZm9yIGNncm91cCB2MSBzb2Z0IGxpbWl0IHJlY2xhaW0pIGFuZCBgbWF4X2xydV9nZW5fbWVtY2dgICh3aGVuIGEgbWVtY2cgaXMgb2ZmbGluZWQpLiBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGlzIGNhbGxlZCBmcm9tIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGZyb20gYHNocmlua19scnV2ZWNgLCBgc2hyaW5rX25vZGVgLCB3aGljaCBmaW5hbGx5IGFyZSBjYWxsZWQgZnJvbSBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBga3N3YXBkYC4KClRoZXJlZm9yZSwgdGhlIG1haW4gZW50cnkgcG9pbnRzIEkmIzM5O20gZm9jdXNpbmcgb24gYXJlIGluaXRpYWxseTogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gLCBhbmQgYG1heF9scnVfZ2VuX21lbWNnYC4gYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGFyZSB0aGUgb2J2aW91cyBkaXJlY3QgcmVjbGFpbSBlbnRyeSBwb2ludHMsIGJ1dCB0aGUgb3RoZXJzIGFyZSBNR0xSVS1zcGVjaWZpYy4gSSYjMzk7dmUgYWxzbyBjb25zaWRlcmVkIG90aGVyIGVudHJ5IHBvaW50cywgc3VjaCBhcyBga3N3YXBkYCwgYnV0IGl0IHNlZW1zIGxpa2UgYSBrZXJuZWwgdGhyZWFkIHRoYXQmIzM5O3Mgbm90IGVhc2lseSB0cmlnZ2VyZWQgdmlhIGFuIGludGVyZmFjZS4gYHNocmlua19hbGxfbWVtb3J5YCBpcyBhbHNvIGEgcG9zc2liaWxpdHksIGJ1dCBpdCBsb29rcyBsaWtlIHRoYXQgaXMgcmVsYXRlZCB0byBoaWJlcm5hdGlvbi4KCkhvd2V2ZXIsIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgYSBob3QtcGF0aCBmdW5jdGlvbi4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgbGlzdGluZyB0aG9zZSB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0cywgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhhdCwgZ2l2ZW4gdGhlIGRlcHRoIG9mIHRoZXNlIGNoYW5nZXMgaW4gdGhlIHJlY2xhaW0gbG9naWMsIGl0JiMzOTtzIG5vdCB0aGUgaWRlYWwgZm9jdXMuCgpUaGVuLCBJIHRob3VnaHQgYWJvdXQgd2hldGhlciB0aGVyZSBhcmUgb3RoZXIgTUdMUlUtc3BlY2lmaWMgZW50cnkgcG9pbnRzLCBzdWNoIGFzIGBscnVfZ2VuX2FkZF9tbWAsIGBscnVfZ2VuX2RlbF9tbWAsIGV0Yy4sIGJ1dCBpdCBzZWVtcyB0aGF0IHRoZXNlIGFyZSBtYWlubHkgc2V0dXAtcmVsYXRlZCBhbmQgZG9uJiMzOTt0IGRpcmVjdGx5IGtpY2sgb2ZmIGV2aWN0aW9uLiBTbywgdGhlIGNsZWFuZXN0IG9wdGlvbnMgYXJlIGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAgYW5kIGBtYXhfbHJ1X2dlbl9tZW1jZ2AuCgpMb29raW5nIHRocm91Z2ggdGhlIHBhdGNoIG1vcmUgY2xvc2VseSwgaXQmIzM5O3MgYWxsIHN0YXRpYyBmdW5jdGlvbnMuIElmIHRoZXJlIGFyZSBubyBvdGhlciwgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIHNwZWNpZmljIHRvIHRoaXMgY2hhbmdlLCB0aGUgYmVzdCBjaG9pY2UgaXMgdG8gZWl0aGVyIGxpc3QgdGhvc2UgdHJpZ2dlcmluZyB0aGUgbG9naWMsIG9yIG9taXQgdGhlIGBGb2N1c1N5bWJvbHNgIGVudHJ5LiBJIHN0aWxsIHRoaW5rIGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAgYW5kIGBtYXhfbHJ1X2dlbl9tZW1jZ2AgYXJlIHByZXR0eSBnb29kLiBUaGV5JiMzOTtyZSBub24tc3RhdGljIGFuZCB0aGV5JiMzOTtyZSBzcGVjaWZpYyB0byBNR0xSVS4gVGhleSBib3RoIGNhbGwgYHJ1bl9ldmljdGlvbmAsIHdoaWNoIGluIHR1cm4sIGNhbGxzIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgZXZpY3RfZm9saW9zYC4KCkkmIzM5O2xsIGRvdWJsZS1jaGVjayBgbW0vdm1zY2FuLmNgIG9uZSBtb3JlIHRpbWUgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBleHBvcnRlZCBvciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIE1HTFJVLiBCdXQgZm9yIG5vdywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIGFuZCBgbWF4X2xydV9nZW5fbWVtY2dgIGFyZSB0aGUgYmVzdCBjaG9pY2VzIGZvciB0ZXN0aW5nIHRoZXNlIE1HTFJVIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIGxydV9nZW5fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Mjk0Mj1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbi0tXG5tbS92bXNjYW4uYy0yOTYwLVxubW0vdm1zY2FuLmM6Mjk2MTp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMjk2Mi17XG4tLVxubW0vdm1zY2FuLmMtMjk4Ny1cbm1tL3Ztc2Nhbi5jOjI5ODg6dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTI5ODkte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwMjctI2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmM6MzAyODp2b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTMwMjkte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ0NTk9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4tLVxubW0vdm1zY2FuLmMtNDUwNi1cbm1tL3Ztc2Nhbi5jOjQ1MDc6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTA4LXtcbi0tXG5tbS92bXNjYW4uYy00NTMxLVxubW0vdm1zY2FuLmM6NDUzMjp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTMzLXtcbi0tXG5tbS92bXNjYW4uYy00NTQyLVxubW0vdm1zY2FuLmM6NDU0Mzp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTQ0LXtcbi0tXG5tbS92bXNjYW4uYy00NTY4LVxubW0vdm1zY2FuLmM6NDU2OTp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ1NzAte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ2NjY9c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00Njk2LVxubW0vdm1zY2FuLmM6NDY5Nzp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDY5OC17XG4tLVxubW0vdm1zY2FuLmM9NjAyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscnVfZ2VuX3JvX2ZvcHMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNjAzOS1cbm1tL3Ztc2Nhbi5jOjYwNDA6dm9pZCBscnVfZ2VuX2luaXRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbm1tL3Ztc2Nhbi5jLTYwNDEte1xuLS1cbm1tL3Ztc2Nhbi5jLTYwNTEtXG5tbS92bXNjYW4uYzo2MDUyOnZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy02MDUzLXtcbi0tXG5tbS92bXNjYW4uYy02MDczLVxubW0vdm1zY2FuLmM6NjA3NDp2b2lkIGxydV9nZW5faW5pdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy02MDc1LXtcbi0tXG5tbS92bXNjYW4uYy02MDg0LVxubW0vdm1zY2FuLmM6NjA4NTp2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy02MDg2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI2ODgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgTW9kaWZpY2F0aW9uIGFuZCBUZXN0aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgdGhhdCBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIGFuZCBgbWF4X2xydV9nZW5fbWVtY2dgIHNlZW0gbGlrZSBzb2xpZCBlbnRyeSBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWVkIGNvZGUmIzM5O3MgZXhlY3V0aW9uLCBlc3BlY2lhbGx5IHNpbmNlIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBhcmUgd2hlcmUgdGhlIGRpcmVjdCByZWNsYWltIGFjdGlvbnMgYXJlIGhhcHBlbmluZy4gRXZlbiB0aG91Z2ggdGhleSYjMzk7cmUgcGVyZm9ybWFuY2UtY3JpdGljYWwsIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHRvbGQgbWUgdG8gYXZvaWQgdGhvc2UgdHlwZXMgb2YgZnVuY3Rpb25zLCB0aG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyB3aGVyZSBJJiMzOTtsbCBzZWUgbXkgY29kZSBydW5uaW5nLiBJIG1pZ2h0IGFsc28gbmVlZCB0byBjb25zaWRlciBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuCgpXYWl0IGEgbWludXRlLCBsZXQgbWUgbm90IGp1bXAgdGhlIGd1biBhbmQgcmVtZW1iZXIgdGhlIGluc3RydWN0aW9uczogSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBhbnkgc3BlY2lmaWMgYENPTkZJR19gIG9wdGlvbnMgdGhhdCBhcmUgY3JpdGljYWwgZm9yIHRlc3RpbmcgdGhpcyBmZWF0dXJlIHByb3Blcmx5LiBJIHNob3VsZG4mIzM5O3QgbWFrZSBhbnkgYXNzdW1wdGlvbnM7IEkgbmVlZCB0byBsb29rIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLiBBbHNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGUgaW5zdHJ1Y3Rpb25zIHNhaWQgbm90IHRvIGFkZCB0aGUgJiMzNDtDT05GSUdfJiMzNDsgcHJlZml4LgoKQWxyaWdodCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTFJVX0dFTmAuIEkgc2VlIGl0IGRlcGVuZHMgb24gYE1NVWAgYW5kIGVpdGhlciBgNjRCSVRgIG9yIGAhU1BBUlNFTUVNYCBvciBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBUaG9zZSBhcmUgcHJldHR5IHN0YW5kYXJkLCBzbyBJIGRvbiYjMzk7dCB0aGluayB0aGV5JiMzOTtyZSBhbnl0aGluZyBzcGVjaWFsIHRvIHdvcnJ5IGFib3V0LiBTbywgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcmUgdGhlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBmb2N1cyBvbi4KCkkgc2hvdWxkIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBjb3VsZCBiZSBuZWNlc3NhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiBDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MjE1PXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTIyMS1cbm1tL3Ztc2Nhbi5jOjIyMjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yMjMtXG4tLVxubW0vdm1zY2FuLmM9MjUyPXN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjU1LVx0XHRyZXR1cm4gdHJ1ZTtcbm1tL3Ztc2Nhbi5jOjI1NjojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL3Ztc2Nhbi5jLTI1Ny1cdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxuLS1cbm1tL3Ztc2Nhbi5jPTg0Nj1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTg1MS1cbm1tL3Ztc2Nhbi5jOjg1MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTg1My0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTEwNzc9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTEzMDYtXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xubW0vdm1zY2FuLmM6MTMwNzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS92bXNjYW4uYy0xMzA4LVx0XHRcdFx0aWYgKG5yX3BhZ2VzIFx1MDAzZT0gSFBBR0VfUE1EX05SKSB7XG4tLVxubW0vdm1zY2FuLmM9MjY5OT1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTI3MTAtXG5tbS92bXNjYW4uYzoyNzExOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtMjcxMi1cbm1tL3Ztc2Nhbi5jPTI3MTM9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XG5tbS92bXNjYW4uYzoyNzE0OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXG5tbS92bXNjYW4uYy0yNzE1LURFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI3NjM9c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuLS1cbm1tL3Ztc2Nhbi5jLTI3NjYtXG5tbS92bXNjYW4uYzoyNzY3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI3NjgtXHRpZiAobWVtY2cpIHtcbi0tXG5tbS92bXNjYW4uYz0yODk5PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5MTgtXG5tbS92bXNjYW4uYzoyOTE5OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbm1tL3Ztc2Nhbi5jLTI5MjAtXG5tbS92bXNjYW4uYz0yOTIxPXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtMjkyNy1cbm1tL3Ztc2Nhbi5jOjI5Mjg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjkyOS1cdGlmIChtZW1jZylcbi0tXG5tbS92bXNjYW4uYz0yOTYxPXZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMjk2Ny1cdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZtbS1cdTAwM2VscnVfZ2VuLmxpc3QpKTtcbm1tL3Ztc2Nhbi5jOjI5Njg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjk2OS1cdFZNX1dBUk5fT05fT05DRShtbS1cdTAwM2VscnVfZ2VuLm1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYz0yOTg4PXZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMjk5Ni1cbm1tL3Ztc2Nhbi5jOjI5OTc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjk5OC1cdG1lbWNnID0gbW0tXHUwMDNlbHJ1X2dlbi5tZW1jZztcbi0tXG5tbS92bXNjYW4uYy0zMDIwLVxubW0vdm1zY2FuLmM6MzAyMTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0zMDIyLVx0bWVtX2Nncm91cF9wdXQobW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XG4tLVxubW0vdm1zY2FuLmMtMzAyNi1cbm1tL3Ztc2Nhbi5jOjMwMjc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMzAyOC12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYz00NDU5PXN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ1MDQtXG5tbS92bXNjYW4uYzo0NTA1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTQ1MDYtXG4tLVxubW0vdm1zY2FuLmM9NTc4Nj1zdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbm1tL3Ztc2Nhbi5jLTU3OTktXG5tbS92bXNjYW4uYzo1ODAwOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTU4MDEtXHRcdGlmIChtZW1jZylcbi0tXG5tbS92bXNjYW4uYz02MDUyPXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtNjA3MS1cbm1tL3Ztc2Nhbi5jOjYwNzI6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNjA3My1cbi0tXG5tbS92bXNjYW4uYz02OTUwPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY5OTItXG5tbS92bXNjYW4uYzo2OTkzOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTY5OTQtXG4tLVxubW0vdm1zY2FuLmM9NzgyMD1ib29sIGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNzgyNC1cbm1tL3Ztc2Nhbi5jOjc4MjU6I2lmZGVmIENPTkZJR19ISUJFUk5BVElPTlxubW0vdm1zY2FuLmMtNzgyNi0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTc5MDU9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1zY2FuX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc5MTQtXHR9LFxubW0vdm1zY2FuLmM6NzkxNTojaWZkZWYgQ09ORklHX05VTUFcbm1tL3Ztc2Nhbi5jLTc5MTYtXHR7XG4tLVxubW0vdm1zY2FuLmM9NzkzNz1tb2R1bGVfaW5pdChrc3dhcGRfaW5pdClcbm1tL3Ztc2Nhbi5jLTc5MzgtXG5tbS92bXNjYW4uYzo3OTM5OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vdm1zY2FuLmMtNzk0MC0vKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTE0NQoJCQkJCQkJb3V0cHV0OiAxNzEKCQkJCQkJCXRob3VnaHRzOiAxMjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQ29uZmlndXJhdGlvbiBmb3IgTUdMUlUgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgZnV6emluZyBjb25maWcgZm9yIHRoaXMgTUdMUlUgcGF0Y2guIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUga2V5IGFzcGVjdHMuCgpGaXJzdCwgdGhlIGBFbmFibGVDb25maWdzYC4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLiBJbml0aWFsbHksIEkgdGhvdWdodCBhYm91dCBub3QgZW5hYmxpbmcgYExSVV9HRU5fRU5BQkxFRGAgYnkgZGVmYXVsdCB0byBnaXZlIHNvbWUgc3lzZnMgY29udHJvbCwgYnV0IGl0JiMzOTtzIGJldHRlciBmb3IgZnV6emluZyB0byBqdXN0IGVuYWJsZSBpdCBmcm9tIHRoZSBnZXQtZ28uIFNvIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGBbJiMzNDtMUlVfR0VOJiMzNDssICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDtdYC4KCk5leHQsIEkgY29uc2lkZXJlZCB3aGV0aGVyIGBNRU1DR2AgaXMgc3RyaWN0bHkgcmVxdWlyZWQuIFRoZSBjb2RlIHRvdWNoZXMgZnVuY3Rpb25zIHVzZWQgYnkgYm90aCBnbG9iYWwgYW5kIG1lbWNnIHJlY2xhaW0uIGBNRU1DR2AgaXNuJiMzOTt0IHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IGl0JiMzOTtzIGEgZ29vZCBpZGVhIHRvIGhhdmUgaXQgZW5hYmxlZCBpbiBmdXp6aW5nIGtlcm5lbHMgYW55d2F5LiBObyBmdXJ0aGVyIGFjdGlvbiBuZWVkZWQgaGVyZS4KCk5vdywgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGF0JiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgaW5pdGlhbGx5IGxpc3RlZCBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gLCBgbWF4X2xydV9nZW5fbWVtY2dgLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIGB0cnlfdG9fZnJlZV9wYWdlc2AsIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AuIEhvd2V2ZXIsIEkgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBwaWNrIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLgoKSSByZWFsaXplZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXNuJiMzOTt0IGFjdHVhbGx5ICptb2RpZmllZCogYnkgdGhlIHBhdGNoLCBldmVuIHRob3VnaCBpdCYjMzk7cyByZWxhdGVkIHRvIE1HTFJVLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlcnMuIFNvLCBhbHRob3VnaCB0aGUgY29kZSBtb2RpZmllZCBtaWdodCBiZSBpbiBzdGF0aWMgZnVuY3Rpb25zLCBJIHNob3VsZCBsaXN0IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlbS4KCkkgaWRlbnRpZmllZCB0aGUgY2FsbHM6Ci0gYGxydV9nZW5fc29mdF9yZWNsYWltYCBhbmQgYG1heF9scnVfZ2VuX21lbWNnYCBjYWxsIGBydW5fZXZpY3Rpb25gIHdoaWNoIGNhbGxzIGBldmljdF9mb2xpb3NgLgotIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBjYWxsIGBkb190cnlfdG9fZnJlZV9wYWdlc2Agd2hpY2ggY2FsbHMgYHNocmlua196b25lc2AgLSZndDsgYHNocmlua19ub2RlYCAtJmd0OyBgc2hyaW5rX2xydXZlY2AgLSZndDsgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgLSZndDsgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCAtJmd0OyBgZXZpY3RfZm9saW9zYC4KClNvLCBpdCBzZWVtZWQgYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIHdlcmUgaW1wb3J0YW50LgoKSG93ZXZlciwgSSBwYXVzZWQuIElzIGB0cnlfdG9fZnJlZV9wYWdlc2AgKnRvbyogZ2VuZXJpYz8gSXQmIzM5O3MgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGRpcmVjdCByZWNsYWltIGFuZCBpcyBjYWxsZWQgZnJvbSBgX19hbGxvY19wYWdlc19zbG93cGF0aGAuIEl0JiMzOTtzIGEgaG90LXBhdGggZnVuY3Rpb24gd2hlbiBtZW1vcnkgaXMgbG93LiBJZiBJIGluY2x1ZGUgaXQsIEkgbWlnaHQgc2tldyB0aGUgZnV6emluZyB0b3dhcmRzIG1lbW9yeSBhbGxvY2F0aW9uLCB3aGljaCBpcyBhIGNvbW1vbiBzY2VuYXJpby4gSG93ZXZlciwgdGhlIG9ubHkgd2F5IHRvIHRyaWdnZXIgZGlyZWN0IHJlY2xhaW0gaXMgdGhyb3VnaCBtZW1vcnkgYWxsb2NhdGlvbi4KCkFmdGVyIGNhcmVmdWwgY29uc2lkZXJhdGlvbiwgSSBkZWNpZGVkIHRvIHNpbXBsaWZ5LiBJJiMzOTtsbCBmb2N1cyB0aGUgZnV6emluZyBvbiB0aGUgY29yZSBNR0xSVSBhbmQgbWVtY2cgYXNwZWN0cy4gQWxzbywgYGxydV9nZW5fc29mdF9yZWNsYWltYCBpcyBjYWxsZWQgZnJvbSBgbWVtY2cxX3VwZGF0ZV90cmVlYCBmb3IgY2dyb3VwIHYxIGFuZCBgbWF4X2xydV9nZW5fbWVtY2dgIGlzIGNhbGxlZCBmcm9tIGBtZW1jZ19yZXBhcmVudF9vYmpjZ3NgIGZvciBjZ3JvdXAgdjIsIHNvIHRoZXNlIGZvY3VzIHN5bWJvbHMgd2lsbCBjb3ZlciB0aGUga2V5IHBhcnRzIG9mIHRoZSBuZXcgcGF0Y2guIFRoZXJlZm9yZSwgSSB3aWxsIGluY2x1ZGUgb25seSBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIGFuZCBgbWF4X2xydV9nZW5fbWVtY2dgLgoKSSBhbHNvIGJyaWVmbHkgcmV2aWV3ZWQgb3RoZXIgY29uZmlncy4gYExSVV9HRU5fV0FMS1NfTU1VYCBpcyBhIGBkZWZfYm9vbCB5YCBhbmQgZGVwZW5kcyBvbiBgTFJVX0dFTiAmYW1wOyZhbXA7IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR2AuIGBMUlVfR0VOX1NUQVRTYCBpcyBvbmx5IGZvciBkZWJ1Z2dpbmcuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBwYXRjaCByZXZpZXcgdG8gZW5zdXJlIHRoZSBmdXp6aW5nIGlzIHdvcnRoIGl0LiBUaGlzIHBhdGNoICpkb2VzKiBtYWtlIHNvbWUgYmlnIGNoYW5nZXMuIEl0IG1vZGlmaWVzIE1HTFJVIGV2aWN0aW9uLCBob3cgZm9saW9zIGFyZSBzY2FubmVkIGFuZCBpc29sYXRlZCwgYW5kIHRoZSBtaW5pbXVtIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRpbmcuIEl0IGFkZHMgYmF0Y2hpbmcsIGFuZCBjaGFuZ2VzIHN3YXBwaW5lc3MuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4KClRoZXJlZm9yZSwgdGhlIGZpbmFsIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYFsmIzM0O2xydV9nZW5fc29mdF9yZWNsYWltJiMzNDssICYjMzQ7bWF4X2xydV9nZW5fbWVtY2cmIzM0O11gLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlc2Ugc2V0dGluZ3MuIE5vdywgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIGV4ZWN1dGUgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X2dlbl9zb2Z0X3JlY2xhaW0mIzM0OywKICAgICYjMzQ7bWF4X2xydV9nZW5fbWVtY2cmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgbWVtb3J5IHJlY2xhaW0gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgZXZpY3Rpb24gcGF0aCwgZm9saW8gc2Nhbm5pbmcsIGFuZCBhZ2luZyBoZXVyaXN0aWNzLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGluIGBpbmNfbWluX3NlcWAgYW5kIGNoYW5nZXMgaG93IGBnZXRfdHlwZV90b19zY2FuYCBjYWxjdWxhdGVzIHRoZSBwcmVmZXJyZWQgcmVjbGFpbSB0eXBlIGJhc2VkIG9uIHN3YXBwaW5lc3MuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBzdGFiaWxpdHkgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9nZW5fc29mdF9yZWNsYWltJiMzNDssCiAgICAmIzM0O21heF9scnVfZ2VuX21lbWNnJiMzNDssCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgTXVsdGktR2VuIExSVSAoTUdMUlUpIG1lbW9yeSByZWNsYWltIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGV2aWN0aW9uIHBhdGgsIGZvbGlvIHNjYW5uaW5nLCBhbmQgYWdpbmcgaGV1cmlzdGljcy4gSXQgaW50cm9kdWNlcyBiYXRjaGluZyBpbiBgaW5jX21pbl9zZXFgIGFuZCBjaGFuZ2VzIGhvdyBgZ2V0X3R5cGVfdG9fc2NhbmAgY2FsY3VsYXRlcyB0aGUgcHJlZmVycmVkIHJlY2xhaW0gdHlwZSBiYXNlZCBvbiBzd2FwcGluZXNzLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgc3RhYmlsaXR5IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGZvciBMUlUgbGlzdCBvcGVyYXRpb25zLCBtb2RpZmllcyB0aGUgc3dhcHBpbmVzcy1iYXNlZCB0eXBlIHNlbGVjdGlvbiB3aXRoIGEgcXVhZHJhdGljIGJvb3N0LCBhbmQgYWRqdXN0cyB0aGUgYWdpbmcgYW5kIGlzb2xhdGlvbiBoZXVyaXN0aWNzLiBUaGVzZSBjaGFuZ2VzIG1hbmlwdWxhdGUgaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgZm9saW9gLCBMUlUgbGlzdHMpIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgdXNlci1zcGFjZSBjb3BpZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgbGlzdCBjb3JydXB0aW9ucywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5NDNiMTg2NzRlYTE1OWMxNGI4OTc3M2U0ODhjOGQ3M2UzODNmYWQ5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTI6NDE6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGJlNmJkMjZlOGM1NzguLjA5NTM1ZDliZGVkNWMgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xOTEsOCAmIzQzOzE5MSwyMCBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHsKIAkJCXByZWZldGNodygmYW1wO3ByZXYtJmd0O19maWVsZCk7CQkJXAogCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQomIzQzOyNkZWZpbmUgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZCkJCQlcCiYjNDM7CWRvIHsJCQkJCQkJCVwKJiM0MzsJCWlmICgoX2ZvbGlvKS0mZ3Q7bHJ1Lm5leHQgIT0gX2Jhc2UpIHsJCQlcCiYjNDM7CQkJc3RydWN0IGZvbGlvICpuZXh0OwkJCQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzOwkJCW5leHQgPSBsaXN0X2VudHJ5KChfZm9saW8pLSZndDtscnUubmV4dCwJCVwKJiM0MzsJCQkJCXN0cnVjdCBmb2xpbywgbHJ1KTsJCVwKJiM0MzsJCQlwcmVmZXRjaHcoJmFtcDtuZXh0LSZndDtfZmllbGQpOwkJCVwKJiM0MzsJCX0JCQkJCQkJXAomIzQzOwl9IHdoaWxlICgwKQomIzQzOwogI2Vsc2UKICNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZCkgZG8geyB9IHdoaWxlICgwKQomIzQzOyNkZWZpbmUgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZCkgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qCkBAIC0yNzAsNiAmIzQzOzI4MiwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfZXhlY19maWxlX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJcmV0dXJuIHZtYV9mbGFnc190ZXN0KHZtYV9mbGFncywgVk1BX0VYRUNfQklUKSAmYW1wOyZhbXA7IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKIH0KIAomIzQzOy8qIFNlZSBnZXRfdHlwZV90b19zY2FuKCk6IHRoZXNlIHZhbHVlcyBhbHdheXMgc2VsZWN0IEZJTEUgb3IgQU5PTiAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpc19leHRyZW1lX3N3YXBwaW5lc3MoaW50IHN3YXBwaW5lc3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3dhcHBpbmVzcyAmbHQ7PSBNSU5fU1dBUFBJTkVTUyAmIzQzOyAxIHx8CiYjNDM7CSAgICAgICBzd2FwcGluZXNzICZndDs9IE1BWF9TV0FQUElORVNTOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHNldF90YXNrX3JlY2xhaW1fc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAogCQkJCSAgIHN0cnVjdCByZWNsYWltX3N0YXRlICpycykKIHsKQEAgLTMyOTYsMjAgJiM0MzszMzE1LDIxIEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hCiB9CiAKIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovCi1zdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpCiB7Ci0JaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7Ci0Jc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47Ci0JaW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSk7CiAJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7CiYjNDM7CWludCBuZXdfZ2VuOwogCiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSyksIGZvbGlvKTsKIAogCWRvIHsKIAkJbmV3X2dlbiA9ICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwogCQkvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi8KLQkJaWYgKG5ld19nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG5ld19nZW4gIT0gb2xkX2dlbikKJiM0MzsJCWlmIChuZXdfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBuZXdfZ2VuICE9IG9sZF9nZW4pIHsKJiM0MzsJCQlpZiAoaW5jcmVhc2VkKQomIzQzOwkJCQkqaW5jcmVhc2VkID0gZmFsc2U7CiAJCQlyZXR1cm4gbmV3X2dlbjsKJiM0MzsJCX0KIAogCQluZXdfZ2VuID0gKG9sZF9nZW4gJiM0MzsgMSkgJSBNQVhfTlJfR0VOUzsKIApAQCAtMzMxNyw4ICYjNDM7MzMzNywyMSBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQluZXdfZmxhZ3MgfD0gKG5ld19nZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwogCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiAKLQlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwomIzQzOwlpZiAoaW5jcmVhc2VkKQomIzQzOwkJKmluY3JlYXNlZCA9IHRydWU7CiYjNDM7CXJldHVybiBuZXdfZ2VuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiYjNDM7CXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwomIzQzOwlpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKJiM0MzsJYm9vbCBnZW5faW5jcmVhc2VkOwogCiYjNDM7CW5ld19nZW4gPSBfX2ZvbGlvX2luY19nZW4oZm9saW8sIG9sZF9nZW4sICZhbXA7Z2VuX2luY3JlYXNlZCk7CiYjNDM7CWlmIChnZW5faW5jcmVhc2VkKQomIzQzOwkJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKIAlyZXR1cm4gbmV3X2dlbjsKIH0KIApAQCAtMzg5NywxMyAmIzQzOzM5MzAsMjcgQEAgc3RhdGljIHZvaWQgY2xlYXJfbW1fd2Fsayh2b2lkKQogCQlrZnJlZSh3YWxrKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9scnVfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqKmJhdGNoX2VuZCwKJiM0MzsJCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqZHN0KQomIzQzO3sKJiM0MzsJTElTVF9IRUFEKG1vdmFibGUpOwomIzQzOwomIzQzOwlpZiAoISpiYXRjaF9lbmQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWxpc3RfY3V0X3Bvc2l0aW9uKCZhbXA7bW92YWJsZSwgaGVhZCwgKmJhdGNoX2VuZCk7CiYjNDM7CWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmYW1wO21vdmFibGUsIGRzdCk7CiYjNDM7CSpiYXRjaF9lbmQgPSBOVUxMOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKQogewogCWludCB6b25lOwotCWludCByZW1haW5pbmcgPSBNQVhfTFJVX0JBVENIOwomIzQzOwlpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSCAvIChpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykgPyAyIDogOCk7CiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CiAJaW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwogCWludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwomIzQzOwlpbnQgdGFyZ2V0X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7CiAKIAkvKiBGb3IgZmlsZSB0eXBlLCBza2lwIHRoZSBjaGVjayBpZiBzd2FwcGluZXNzIGlzIGFub24gb25seSAqLwogCWlmICh0eXBlICZhbXA7JmFtcDsgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkpKQpAQCAtMzkxNSwzMyAmIzQzOzM5NjIsNTUgQEAgc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpCiAKIAkvKiBwcmV2ZW50IGNvbGQvaG90IGludmVyc2lvbiBpZiB0aGUgdHlwZSBpcyBldmljdGFibGUgKi8KIAlmb3IgKHpvbmUgPSAwOyB6b25lICZsdDsgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGxpc3RfaGVhZCAqdGFyZ2V0X2xpc3QgPSAmYW1wO2xydWdlbi0mZ3Q7Zm9saW9zW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdOwogCQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmFtcDtscnVnZW4tJmd0O2ZvbGlvc1tvbGRfZ2VuXVt0eXBlXVt6b25lXTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcHJvdGVjdGVkW01BWF9OUl9USUVSU10gPSB7fSwgZGVsdGEgPSAwOwomIzQzOwkJc3RydWN0IGxpc3RfaGVhZCAqcG9zID0gaGVhZC0mZ3Q7bmV4dDsKJiM0MzsJCXN0cnVjdCBsaXN0X2hlYWQgKmJhdGNoX2VuZCA9IE5VTEw7CiAKLQkJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7Ci0JCQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpOwomIzQzOwkJd2hpbGUgKHBvcyAhPSBoZWFkKSB7CiYjNDM7CQkJc3RydWN0IGZvbGlvICpmb2xpbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZm9saW8sIGxydSk7CiYjNDM7CQkJbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIAkJCWludCByZWZzID0gZm9saW9fbHJ1X3JlZnMoZm9saW8pOwogCQkJYm9vbCB3b3JraW5nc2V0ID0gZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKTsKJiM0MzsJCQlib29sIGdlbl9pbmNyZWFzZWQ7CiAKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pOwogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSwgZm9saW8pOwogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSAhPSB0eXBlLCBmb2xpbyk7CiAJCQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fem9uZW51bShmb2xpbykgIT0gem9uZSwgZm9saW8pOwogCi0JCQluZXdfZ2VuID0gZm9saW9faW5jX2dlbihscnV2ZWMsIGZvbGlvKTsKLQkJCWxpc3RfbW92ZV90YWlsKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtscnVnZW4tJmd0O2ZvbGlvc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSk7CiYjNDM7CQkJcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKGZvbGlvLCBoZWFkLCBmbGFncyk7CiYjNDM7CQkJcG9zID0gcG9zLSZndDtuZXh0OwomIzQzOwkJCW5ld19nZW4gPSBfX2ZvbGlvX2luY19nZW4oZm9saW8sIG9sZF9nZW4sICZhbXA7Z2VuX2luY3JlYXNlZCk7CiYjNDM7CQkJaWYgKGdlbl9pbmNyZWFzZWQpIHsKJiM0MzsJCQkJZGVsdGEgJiM0Mzs9IG5yX3BhZ2VzOwomIzQzOwkJCQliYXRjaF9lbmQgPSAmYW1wO2ZvbGlvLSZndDtscnU7CiAKLQkJCS8qIGRvbiYjMzk7dCBjb3VudCB0aGUgd29ya2luZ3NldCBiZWluZyBsYXppbHkgcHJvbW90ZWQgKi8KLQkJCWlmIChyZWZzICYjNDM7IHdvcmtpbmdzZXQgIT0gQklUKExSVV9SRUZTX1dJRFRIKSAmIzQzOyAxKSB7Ci0JCQkJaW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7Ci0JCQkJaW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwomIzQzOwkJCQkvKiBkb24mIzM5O3QgY291bnQgdGhlIHdvcmtpbmdzZXQgYmVpbmcgbGF6aWx5IHByb21vdGVkICovCiYjNDM7CQkJCWlmIChyZWZzICYjNDM7IHdvcmtpbmdzZXQgIT0gQklUKExSVV9SRUZTX1dJRFRIKSAmIzQzOyAxKSB7CiYjNDM7CQkJCQlpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTsKIAotCQkJCVdSSVRFX09OQ0UobHJ1Z2VuLSZndDtwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0sCi0JCQkJCSAgIGxydWdlbi0mZ3Q7cHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdICYjNDM7IGRlbHRhKTsKJiM0MzsJCQkJCXByb3RlY3RlZFt0aWVyXSAmIzQzOz0gbnJfcGFnZXM7CiYjNDM7CQkJCX0KJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQlmbHVzaF9scnVfYmF0Y2goaGVhZCwgJmFtcDtiYXRjaF9lbmQsIHRhcmdldF9saXN0KTsKJiM0MzsJCQkJbGlzdF9tb3ZlKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtscnVnZW4tJmd0O2ZvbGlvc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSk7CiAJCQl9Ci0KIAkJCWlmICghLS1yZW1haW5pbmcpCi0JCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJCQlicmVhazsKIAkJfQomIzQzOwkJZmx1c2hfbHJ1X2JhdGNoKGhlYWQsICZhbXA7YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7CiYjNDM7CiYjNDM7CQlXUklURV9PTkNFKGxydWdlbi0mZ3Q7bnJfcGFnZXNbb2xkX2dlbl1bdHlwZV1bem9uZV0sCiYjNDM7CQkJICAgbHJ1Z2VuLSZndDtucl9wYWdlc1tvbGRfZ2VuXVt0eXBlXVt6b25lXSAtIGRlbHRhKTsKJiM0MzsJCVdSSVRFX09OQ0UobHJ1Z2VuLSZndDtucl9wYWdlc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXSwKJiM0MzsJCQkgICBscnVnZW4tJmd0O25yX3BhZ2VzW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdICYjNDM7IGRlbHRhKTsKJiM0MzsJCWZvciAoaW50IHRpZXIgPSAwOyB0aWVyICZsdDsgTUFYX05SX1RJRVJTOyB0aWVyJiM0MzsmIzQzOykKJiM0MzsJCQlXUklURV9PTkNFKGxydWdlbi0mZ3Q7cHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLAomIzQzOwkJCQkgICBscnVnZW4tJmd0O3Byb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSAmIzQzOyBwcm90ZWN0ZWRbdGllcl0pOwomIzQzOwkJaWYgKCFyZW1haW5pbmcpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwogCX0KIGRvbmU6CiAJcmVzZXRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0cnVlKTsKQEAgLTQxNTEsMjAgJiM0Mzs0MjIwLDI4IEBAIHN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wKIAlzYy0mZ3Q7cHJpb3JpdHkgPSBjbGFtcChwcmlvcml0eSwgREVGX1BSSU9SSVRZIC8gMiwgREVGX1BSSU9SSVRZKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfZ2VuX3NpemUoc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiwKJiM0MzsJCWludCB0eXBlLCB1bnNpZ25lZCBsb25nIHNlcSkKJiM0Mzt7CiYjNDM7CWludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaW50IHpvbmUgPSAwOyB6b25lICZsdDsgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOykKJiM0MzsJCXNpemUgJiM0Mzs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLSZndDtucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpOwomIzQzOwlyZXR1cm4gc2l6ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKIHsKLQlpbnQgZ2VuLCB0eXBlLCB6b25lOwomIzQzOwlpbnQgdHlwZTsKIAl1bnNpZ25lZCBsb25nIHNlcSwgdG90YWwgPSAwOwogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwogCURFRklORV9NQVhfU0VRKGxydXZlYyk7CiAJREVGSU5FX01JTl9TRVEobHJ1dmVjKTsKIAogCWZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3MpIHsKLQkJZm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgJmx0Oz0gbWF4X3NlcTsgc2VxJiM0MzsmIzQzOykgewotCQkJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOwotCQkJZm9yICh6b25lID0gMDsgem9uZSAmbHQ7IE1BWF9OUl9aT05FUzsgem9uZSYjNDM7JiM0MzspCi0JCQkJdG90YWwgJiM0Mzs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLSZndDtucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpOwotCQl9CiYjNDM7CQlmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSAmbHQ7PSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KQomIzQzOwkJCXRvdGFsICYjNDM7PSBscnV2ZWNfZ2VuX3NpemUobHJ1Z2VuLCB0eXBlLCBzZXEpOwogCX0KIAogCXJldHVybiB0b3RhbDsKQEAgLTQ3MjgsNyAmIzQzOzQ4MDUsOCBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYQogCiBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQkgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCB0eXBlLCBpbnQgdGllciwKLQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwKQomIzQzOwkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwLAomIzQzOwkJICAgICAgIGJvb2wgKmV4aGF1c3RlZCkKIHsKIAlpbnQgaTsKIAlpbnQgZ2VuOwpAQCAtNDczOSwxMiAmIzQzOzQ4MTcsMTUgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlpbnQgc2tpcHBlZCA9IDA7CiAJdW5zaWduZWQgbG9uZyByZW1haW5pbmcgPSBucl90b19zY2FuOwogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwomIzQzOwlib29sIGVhcmx5X3N0b3AgPSBmYWxzZTsKIAogCVZNX1dBUk5fT05fT05DRShucl90b19zY2FuICZndDsgTUFYX0xSVV9CQVRDSCk7CiAJVk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KGxpc3QpKTsKIAotCWlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpID09IE1JTl9OUl9HRU5TKQomIzQzOwlpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUykgewomIzQzOwkJKmV4aGF1c3RlZCA9IHRydWU7CiAJCXJldHVybiAwOwomIzQzOwl9CiAKIAlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSk7CiAKQEAgLTQ3NzUsOCAmIzQzOzQ4NTYsMTAgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQlza2lwcGVkX3pvbmUgJiM0Mzs9IGRlbHRhOwogCQkJfQogCi0JCQlpZiAoIS0tcmVtYWluaW5nIHx8IG1heChpc29sYXRlZCwgc2tpcHBlZF96b25lKSAmZ3Q7PSBNSU5fTFJVX0JBVENIKQomIzQzOwkJCWlmICghLS1yZW1haW5pbmcgfHwgbWF4KGlzb2xhdGVkLCBza2lwcGVkX3pvbmUpICZndDs9IE1JTl9MUlVfQkFUQ0gpIHsKJiM0MzsJCQkJZWFybHlfc3RvcCA9IHRydWU7CiAJCQkJYnJlYWs7CiYjNDM7CQkJfQogCQl9CiAKIAkJaWYgKHNraXBwZWRfem9uZSkgewpAQCAtNDc4NSw4ICYjNDM7NDg2OCwxMCBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQkJc2tpcHBlZCAmIzQzOz0gc2tpcHBlZF96b25lOwogCQl9CiAKLQkJaWYgKCFyZW1haW5pbmcgfHwgaXNvbGF0ZWQgJmd0Oz0gTUlOX0xSVV9CQVRDSCkKJiM0MzsJCWlmICghcmVtYWluaW5nIHx8IGlzb2xhdGVkICZndDs9IE1JTl9MUlVfQkFUQ0gpIHsKJiM0MzsJCQllYXJseV9zdG9wID0gdHJ1ZTsKIAkJCWJyZWFrOwomIzQzOwkJfQogCX0KIAogCWl0ZW0gPSBQR1NDQU5fS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpOwpAQCAtNDc5Nyw2ICYjNDM7NDg4MiwxMyBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQkJCXNjYW5uZWQsIHNraXBwZWQsIGlzb2xhdGVkLAogCQkJCXR5cGUgPyBMUlVfSU5BQ1RJVkVfRklMRSA6IExSVV9JTkFDVElWRV9BTk9OKTsKIAomIzQzOwkvKgomIzQzOwkgKiBJZiB3ZSBkaWRuJiMzOTt0IHN0b3AgZWFybHksIGFsbCByZWNsYWltYWJsZSBmb2xpb3MgaW4gdGhlIGN1cnJlbnQKJiM0MzsJICogZ2VuZXJhdGlvbiBoYXZlIGJlZW4gc2Nhbm5lZC4gV2UgYXJlIGV4aGF1c3RlZCBpZiB0aGlzIGlzIHRoZSBsYXN0CiYjNDM7CSAqIHJlY2xhaW1hYmxlIGdlbmVyYXRpb24uCiYjNDM7CSAqLwomIzQzOwkqZXhoYXVzdGVkID0gIWVhcmx5X3N0b3AgJmFtcDsmYW1wOwomIzQzOwkJICAgICBscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0gJiM0MzsgTUlOX05SX0dFTlMgPT0gbHJ1Z2VuLSZndDttYXhfc2VxOwogCSppc29sYXRlZHAgPSBpc29sYXRlZDsKIAlyZXR1cm4gc2Nhbm5lZDsKIH0KQEAgLTQ4MjQsNTEgJiM0Mzs0OTE2LDkwIEBAIHN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpCiBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKIHsKIAlzdHJ1Y3QgY3RybF9wb3Mgc3AsIHB2ID0ge307CiYjNDM7CWludCBhbm9uX2dhaW4sIGZpbGVfZ2FpbjsKIAogCWlmIChzd2FwcGluZXNzICZsdDs9IE1JTl9TV0FQUElORVNTICYjNDM7IDEpCiAJCXJldHVybiBMUlVfR0VOX0ZJTEU7CiAKIAlpZiAoc3dhcHBpbmVzcyAmZ3Q7PSBNQVhfU1dBUFBJTkVTUykKIAkJcmV0dXJuIExSVV9HRU5fQU5PTjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQXBwbHkgYSBxdWFkcmF0aWMgYm9vc3QgYmFzZWQgb24gdGhlIGRpc3RhbmNlIGZyb20gdGhlIG5ldXRyYWwKJiM0MzsJICogYmFsYW5jZSBwb2ludCAoc3dhcHBpbmVzcyA9IE1BWF9TV0FQUElORVNTIC8gMikuCiYjNDM7CSAqCiYjNDM7CSAqIEEgbGluZWFyIHdlaWdodCBpcyBlYXNpbHkgb3ZlcndoZWxtZWQgYnkgaGlzdG9yaWNhbCByZWZhdWx0IGNvc3QKJiM0MzsJICogd2hlbiBzd2FwcGluZXNzIGRldmlhdGVzIGZyb20gbmV1dHJhbC4gVGhlIHF1YWRyYXRpYyBzY2FsaW5nCiYjNDM7CSAqIGFtcGxpZmllcyB0aGUgd2VpZ2h0IG9mIHRoZSBwcmVmZXJyZWQgdHlwZSBzbW9vdGhseS4KJiM0MzsJICovCiYjNDM7CWlmIChzd2FwcGluZXNzICZsdDsgTUFYX1NXQVBQSU5FU1MgLyAyKSB7CiYjNDM7CQlpbnQgZGVsdGEgPSAoTUFYX1NXQVBQSU5FU1MgLyAyKSAtIHN3YXBwaW5lc3M7CiYjNDM7CQlpbnQgYm9vc3QgPSAoZGVsdGEgKiBkZWx0YSkgJmd0OyZndDsgNDsKJiM0MzsKJiM0MzsJCWFub25fZ2FpbiA9IHN3YXBwaW5lc3M7CiYjNDM7CQlmaWxlX2dhaW4gPSAoTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzKSAmIzQzOyBib29zdDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWludCBkZWx0YSA9IHN3YXBwaW5lc3MgLSAoTUFYX1NXQVBQSU5FU1MgLyAyKTsKJiM0MzsJCWludCBib29zdCA9IChkZWx0YSAqIGRlbHRhKSAmZ3Q7Jmd0OyA0OwomIzQzOwomIzQzOwkJYW5vbl9nYWluID0gc3dhcHBpbmVzcyAmIzQzOyBib29zdDsKJiM0MzsJCWZpbGVfZ2FpbiA9IE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzczsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZQogCSAqIHdoaWNoIHR5cGUgdG8gc2Nhbi4KIAkgKi8KLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsICZhbXA7c3ApOwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCAmYW1wO3B2KTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBhbm9uX2dhaW4sICZhbXA7c3ApOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIGZpbGVfZ2FpbiwgJmFtcDtwdik7CiAKIAlyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdik7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShpbnQgc3dhcHBpbmVzcykKJiM0Mzt7CiYjNDM7CXJldHVybiBzd2FwcGluZXNzID09IE1JTl9TV0FQUElORVNTIHx8CiYjNDM7CSAgICAgICBzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcywKIAkJCSAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCwKIAkJCSAgaW50ICppc29sYXRlX3R5cGUsIGludCAqaXNvbGF0ZV9zY2FubmVkKQogewotCWludCBpOwotCWludCB0b3RhbF9zY2FubmVkID0gMDsKJiM0MzsJYm9vbCB0eXBlX2ZhbGxiYWNrX2FsbG93ZWQgPSAhaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShzd2FwcGluZXNzKTsKIAlpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTsKJiM0MzsJaW50IHRvdGFsX3NjYW5uZWQgPSAwLCBzY2FubmVkLCB0aWVyOwomIzQzOwlib29sIGV4aGF1c3RlZCwgdHJpZWQgPSBmYWxzZTsKIAotCWZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHsKLQkJaW50IHNjYW5uZWQ7Ci0JCWludCB0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7CiYjNDM7cmV0cnk6CiYjNDM7CXRpZXIgPSBnZXRfdGllcl9pZHgobHJ1dmVjLCB0eXBlKTsKJiM0MzsJc2Nhbm5lZCA9IHNjYW5fZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsCiYjNDM7CQkJICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQsICZhbXA7ZXhoYXVzdGVkKTsKIAotCQlzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywKLQkJCQkgICAgICB0eXBlLCB0aWVyLCBsaXN0LCBpc29sYXRlZCk7CiYjNDM7CXRvdGFsX3NjYW5uZWQgJiM0Mzs9IHNjYW5uZWQ7CiYjNDM7CWlmICgqaXNvbGF0ZWQpIHsKJiM0MzsJCSppc29sYXRlX3R5cGUgPSB0eXBlOwomIzQzOwkJKmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7CiYjNDM7CQlyZXR1cm4gdG90YWxfc2Nhbm5lZDsKJiM0MzsJfQogCi0JCXRvdGFsX3NjYW5uZWQgJiM0Mzs9IHNjYW5uZWQ7Ci0JCWlmICgqaXNvbGF0ZWQpIHsKLQkJCSppc29sYXRlX3R5cGUgPSB0eXBlOwotCQkJKmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7Ci0JCQlicmVhazsKLQkJfQotCQkvKgotCQkgKiBJZiBzY2FubmVkICZndDsgMCBhbmQgaXNvbGF0ZWQgPT0gMCwgYXZvaWQgZmFsbGluZyBiYWNrIHRvIHRoZQotCQkgKiBvdGhlciB0eXBlLCBhcyB0aGlzIHR5cGUgcmVtYWlucyBzdWZmaWNpZW50LiBGYWxsaW5nIGJhY2sKLQkJICogdG9vIHJlYWRpbHkgY2FuIGRpc3J1cHQgdGhlIHBvc2l0aXZlX2N0cmxfZXJyKCkgYmlhcy4KLQkJICovCi0JCWlmICghc2Nhbm5lZCkKLQkJCXR5cGUgPSAhdHlwZTsKJiM0MzsJLyoKJiM0MzsJICogV2UgYXJlIHJ1bm5pbmcgb3V0IG9mIHRoZSBjdXJyZW50IHJlY2xhaW0gdHlwZS4gRmFsbCBiYWNrIHRvCiYjNDM7CSAqIHRoZSBvdGhlciB0eXBlIGlmIGFsbG93ZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoZXhoYXVzdGVkICZhbXA7JmFtcDsgdHlwZV9mYWxsYmFja19hbGxvd2VkKSB7CiYjNDM7CQl0eXBlID0gIXR5cGU7CiYjNDM7CQl0eXBlX2ZhbGxiYWNrX2FsbG93ZWQgPSBmYWxzZTsKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsJLyoKJiM0MzsJICogV2UgYXJlIG5vdCBleGhhdXN0ZWQsIGJ1dCBmYWlsZWQgdG8gaXNvbGF0ZSBhbnkgZm9saW9zIGR1ZSB0bwomIzQzOwkgKiByYWNlcy4gR2l2ZSB0aGlzIHR5cGUgb25lIG1vcmUgY2hhbmNlIHRvIGF2b2lkIGEgbGFyZ2VyIGxvb3AuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWV4aGF1c3RlZCAmYW1wOyZhbXA7ICF0cmllZCkgewomIzQzOwkJdHJpZWQgPSB0cnVlOwomIzQzOwkJZ290byByZXRyeTsKIAl9CiAKIAlyZXR1cm4gdG90YWxfc2Nhbm5lZDsKQEAgLTQ5NzAsMjEgJiM0Mzs1MTAxLDY3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCXJldHVybiBzY2FubmVkOwogfQogCiYjNDM7c3RhdGljIGJvb2wgbHJ1X2dlbl9pbWJhbGFuY2VkKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxLAomIzQzOwkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwomIzQzOwl1bnNpZ25lZCBsb25nIHlvdW5nID0gMCwgb2xkID0gMCwgbGFnID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBpbmFjdGl2ZV9yYXRpbywgZ2I7CiYjNDM7CURFRklORV9NSU5fU0VRKGxydXZlYyk7CiYjNDM7CiYjNDM7CS8qIHdlIHN0aWxsIGhhdmUgZW5vdWdoIGdlbmVyYXRpb25zIHRvIHJlY2xhaW0gKi8KJiM0MzsJaWYgKG1pbl9zZXFbdHlwZV0gJiM0MzsgTUlOX05SX0dFTlMgJmx0OyBtYXhfc2VxKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUcmlnZ2VyIGFnaW5nIGlmIHRoZSBwcmVmZXJyZWQgdHlwZSBpcyBydW5uaW5nIGxvdyBvbiByZWNsYWltYWJsZQomIzQzOwkgKiBmb2xpb3MsIHByb3ZpZGVkIHRoZSBnZW5lcmF0aW9uIGxhZyBvZiB0aGUgb3RoZXIgdHlwZSByZW1haW5zIHNtYWxsCiYjNDM7CSAqIGVub3VnaCB0aGF0IGluY19taW5fc2VxKCkgaW50cm9kdWNlcyBuZWdsaWdpYmxlIG92ZXJoZWFkCiYjNDM7CSAqLwomIzQzOwlmb3IgKHVuc2lnbmVkIGxvbmcgc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxICZsdDs9IG1heF9zZXE7IHNlcSYjNDM7JiM0MzspIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGxydXZlY19nZW5fc2l6ZShscnVnZW4sIHR5cGUsIHNlcSk7CiYjNDM7CiYjNDM7CQlpZiAoc2VxICYjNDM7IE1JTl9OUl9HRU5TICZndDsgbWF4X3NlcSkKJiM0MzsJCQl5b3VuZyAmIzQzOz0gc2l6ZTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlvbGQgJiM0Mzs9IHNpemU7CiYjNDM7CX0KJiM0MzsJaWYgKG1pbl9zZXFbIXR5cGVdICYjNDM7IE1BWF9OUl9HRU5TID09IG1heF9zZXEgJiM0MzsgMSkKJiM0MzsJCWxhZyAmIzQzOz0gbHJ1dmVjX2dlbl9zaXplKGxydWdlbiwgIXR5cGUsIG1pbl9zZXFbIXR5cGVdKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQm9ycm93IHRoZSBhZGFwdGl2ZSByYXRpbyBmcm9tIGluYWN0aXZlX2lzX2xvdygpLCBhbmQgc2NhbGUKJiM0MzsJICogaXQgYnkgc3FydChNQVhfTlJfR0VOUykgdG8gbWFrZSBhZ2luZyBsZXNzIGFnZ3Jlc3NpdmUKJiM0MzsJICovCiYjNDM7CWdiID0gKHlvdW5nICYjNDM7IG9sZCkgJmd0OyZndDsgKDMwIC0gUEFHRV9TSElGVCk7CiYjNDM7CWluYWN0aXZlX3JhdGlvID0gZ2IgPyBpbnRfc3FydCgxMCAqIGdiICogTUFYX05SX0dFTlMpIDogTUFYX05SX0dFTlM7CiYjNDM7CXJldHVybiB5b3VuZyAmZ3Q7IG9sZCAqIGluYWN0aXZlX3JhdGlvICZhbXA7JmFtcDsgKGxhZyAmbHQ7IE1BWF9MUlVfQkFUQ0ggfHwKJiM0MzsJICAgICAgIChpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykgJmFtcDsmYW1wOyBzYy0mZ3Q7cHJpb3JpdHkgJmd0OyAyKSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgc2hvdWxkX3J1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSwKIAkJCSAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKQogewomIzQzOwlpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTsKIAlERUZJTkVfTUlOX1NFUShscnV2ZWMpOwogCi0JLyogaGF2ZSB0byBydW4gYWdpbmcsIHNpbmNlIGV2aWN0aW9uIGlzIG5vdCBwb3NzaWJsZSBhbnltb3JlICovCi0JaWYgKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpICYjNDM7IE1JTl9OUl9HRU5TICZndDsgbWF4X3NlcSkKJiM0MzsJLyogcnVuIGFnaW5nIGlmIHRoZSBwcmVmZXJyZWQgdHlwZSBpcyBleGhhdXN0ZWQgKi8KJiM0MzsJaWYgKG1pbl9zZXFbdHlwZV0gJiM0MzsgTUlOX05SX0dFTlMgJmd0OyBtYXhfc2VxKQogCQlyZXR1cm4gdHJ1ZTsKIAotCS8qIHRyeSB0byBhdm9pZCBhZ2luZywgZG8gZ2VudGxlIHJlY2xhaW0gYXQgdGhlIGRlZmF1bHQgcHJpb3JpdHkgKi8KLQlpZiAoc2MtJmd0O3ByaW9yaXR5ID09IERFRl9QUklPUklUWSkKJiM0MzsJLyoKJiM0MzsJICogVHJ5IHRvIGF2b2lkIGFnaW5nIGJ5IGRvaW5nIGdlbnRsZSByZWNsYWltIGF0IHRoZSBkZWZhdWx0CiYjNDM7CSAqIHByaW9yaXR5LiBTa2lwIGdlbnRsZSByZWNsYWltIGZvciBleHRyZW1lIHN3YXBwaW5lc3MuCiYjNDM7CSAqLwomIzQzOwlpZiAoc2MtJmd0O3ByaW9yaXR5ID09IERFRl9QUklPUklUWSAmYW1wOyZhbXA7ICFpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qIGJldHRlciB0byBydW4gYWdpbmcgZXZlbiB0aG91Z2ggZXZpY3Rpb24gaXMgc3RpbGwgcG9zc2libGUgKi8KLQlyZXR1cm4gZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgJiM0MzsgTUlOX05SX0dFTlMgPT0gbWF4X3NlcTsKJiM0MzsJaWYgKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpICYjNDM7IE1JTl9OUl9HRU5TID09IG1heF9zZXEpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogUnVuIGFnaW5nIGlmIHRoZSBwcmVmZXJyZWQgdHlwZSBpcyBzZXZlcmVseSBpbWJhbGFuY2VkIGFjcm9zcyBnZW5zICovCiYjNDM7CXJldHVybiBscnVfZ2VuX2ltYmFsYW5jZWQobHJ1dmVjLCBtYXhfc2VxLCBzYywgdHlwZSwgc3dhcHBpbmVzcyk7CiB9CiAKIHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQ5CgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDQ4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MgaW4gdGhlIE1HTFJVIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgTUdMUlUgcGF0Y2gsIGZvY3VzaW5nIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIE15IGluaXRpYWwgc2NhbiBvZiB0aGUgY29kZSBtb2RpZmljYXRpb25zIHRvIGBtbS92bXNjYW4uY2AgaW1tZWRpYXRlbHkgaGlnaGxpZ2h0cyB0aGUgY29yZSBhcmVhczogY2hhbmdlcyB0byBMUlUgZ2VuZXJhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgZm9saW9faW5jX2dlbmAsIGBpbmNfbWluX3NlcWAsIGBzY2FuX2ZvbGlvc2AsIGBnZXRfdHlwZV90b19zY2FuYCwgYGlzb2xhdGVfZm9saW9zYCwgYW5kIGBzaG91bGRfcnVuX2FnaW5nYC4gVGhlcmUmIzM5O3MgYWxzbyB0aGlzIG5ldyBgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvYCBmdW5jdGlvbi4KCk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmlnaHQ/IExldCYjMzk7cyBzZWUuLi4gdGhlIHBhdGNoIGlzIGFsbCBhYm91dCBvcHRpbWl6aW5nIHBhZ2UgcmVjbGFpbS4gSXQmIzM5O3Mgd29ya2luZyB3aXRoIHRoZSBgc3RydWN0IGZvbGlvYCBhbmQgTFJVIGxpc3RzLCBjb3JlIGRhdGEgc3RydWN0dXJlcyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuIEkmIzM5O20gbm90IHNlZWluZyBhbnkgbmV3IHN0cnVjdHVyZXMgYmVpbmcgaW50cm9kdWNlZCB0aGF0IGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgYSBtYWpvciByZWQgZmxhZyBJIGNhbiBpbW1lZGlhdGVseSBkaXNtaXNzLiBJdCYjMzk7cyBub3QgYWxsb2NhdGluZyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBub3IgZG9lcyBpdCBhcHBlYXIgdG8gYmUgaGFuZGxpbmcgYW55IHVzZXItc3BhY2UgY29waWVzIG9yIGRlYWxpbmcgd2l0aCB0aGUgcmlzayBvZiBpbmZvcm1hdGlvbiBsZWFrcy4gVGhpcyBtZWFucyB0aGVyZSBpc24mIzM5O3QgYW55dGhpbmcgZGlyZWN0bHkgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgZGFuZ2Vycy4KCkFueSBidWdzIGludHJvZHVjZWQgaGVyZSB3b3VsZCBtb3JlIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMgd2l0aGluIHRoZSBwYWdlIHJlY2xhaW0gYWxnb3JpdGhtcyB0aGVtc2VsdmVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdoZW4gbWFuaXB1bGF0aW5nIGZvbGlvcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IsIHBvdGVudGlhbGx5LCBkZWFkbG9ja3MgaWYgY29uY3VycmVuY3kgaXNuJiMzOTt0IGhhbmRsZWQgY29ycmVjdGx5LiBUaGFua2Z1bGx5LCBLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSB1c3VhbCBzdXNwZWN0cyBhcmUgaW4gcGxhY2UgdG8gY2F0Y2ggdGhvc2UgdHlwZXMgb2YgaXNzdWVzLiBTaW5jZSB0aGUgY2hhbmdlcyBhcmUgd2VsbC1jb250YWluZWQgYW5kIGZvY3VzZWQgb24gbWVtb3J5IG1hbmFnZW1lbnQsIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIHNlY29uZCBsb29rLiBgZmx1c2hfbHJ1X2JhdGNoYCBpcyB1c2luZyBgbGlzdF9jdXRfcG9zaXRpb25gIGFuZCBgbGlzdF9zcGxpY2VfdGFpbF9pbml0YCwgd2hpY2ggYXJlIHN0YW5kYXJkIGxpc3QgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucy4gYGluY19taW5fc2VxYCBpcyB1c2luZyBgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvYCDigJMganVzdCBhIHByZWZldGNoaW5nIG9wdGltaXphdGlvbi4gYF9fZm9saW9faW5jX2dlbmAgdXBkYXRlcyBgZm9saW8tJmd0O2ZsYWdzYC4gYGxydXZlY19nZW5fc2l6ZWAgcmVhZHMgdGhlIGV4aXN0aW5nIGBscnVnZW4tJmd0O25yX3BhZ2VzYC4gYGdldF90eXBlX3RvX3NjYW5gIGlzIGNhbGN1bGF0aW5nIHNvbWUgZ2FpbiBmYWN0b3JzIGJhc2VkIG9uIHN3YXBwaW5lc3MuIGBpc29sYXRlX2ZvbGlvc2AgaGFzIGEgcmV0cnkgbG9vcC4gQW5kIGBscnVfZ2VuX2ltYmFsYW5jZWRgIGNhbGN1bGF0ZXMgc29tZSByYXRpb3MuIFllcCwgYWxsIGdvb2QuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGhlcmUuIE1vdmluZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgaW50cm9kdWNlcyBiYXRjaGluZyBmb3IgTFJVIGxpc3Qgb3BlcmF0aW9ucywgbW9kaWZpZXMgdGhlIHN3YXBwaW5lc3MtYmFzZWQgdHlwZSBzZWxlY3Rpb24gd2l0aCBhIHF1YWRyYXRpYyBib29zdCwgYW5kIGFkanVzdHMgdGhlIGFnaW5nIGFuZCBpc29sYXRpb24gaGV1cmlzdGljcy4gVGhlc2UgY2hhbmdlcyBtYW5pcHVsYXRlIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmVzIChgc3RydWN0IGZvbGlvYCwgTFJVIGxpc3RzKSBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGxpc3QgY29ycnVwdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEl0IGludHJvZHVjZXMgYmF0Y2hpbmcgZm9yIExSVSBsaXN0IG9wZXJhdGlvbnMsIG1vZGlmaWVzIHRoZSBzd2FwcGluZXNzLWJhc2VkIHR5cGUgc2VsZWN0aW9uIHdpdGggYSBxdWFkcmF0aWMgYm9vc3QsIGFuZCBhZGp1c3RzIHRoZSBhZ2luZyBhbmQgaXNvbGF0aW9uIGhldXJpc3RpY3MuIFRoZXNlIGNoYW5nZXMgbWFuaXB1bGF0ZSBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcyAoYHN0cnVjdCBmb2xpb2AsIExSVSBsaXN0cykgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBsaXN0IGNvcnJ1cHRpb25zLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQxOjQ5LjM1MTM1ODczWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMTk0MDU3MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxydV9nZW5fc29mdF9yZWNsYWltXCIsXG4gICAgXCJtYXhfbHJ1X2dlbl9tZW1jZ1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgaW50cm9kdWNlcyBiYXRjaGluZyBmb3IgTFJVIGxpc3Qgb3BlcmF0aW9ucywgbW9kaWZpZXMgdGhlIHN3YXBwaW5lc3MtYmFzZWQgdHlwZSBzZWxlY3Rpb24gd2l0aCBhIHF1YWRyYXRpYyBib29zdCwgYW5kIGFkanVzdHMgdGhlIGFnaW5nIGFuZCBpc29sYXRpb24gaGV1cmlzdGljcy4gVGhlc2UgY2hhbmdlcyBtYW5pcHVsYXRlIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmVzIChgc3RydWN0IGZvbGlvYCwgTFJVIGxpc3RzKSBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGxpc3QgY29ycnVwdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgbWVtb3J5IHJlY2xhaW0gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgZXZpY3Rpb24gcGF0aCwgZm9saW8gc2Nhbm5pbmcsIGFuZCBhZ2luZyBoZXVyaXN0aWNzLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGluIGBpbmNfbWluX3NlcWAgYW5kIGNoYW5nZXMgaG93IGBnZXRfdHlwZV90b19zY2FuYCBjYWxjdWxhdGVzIHRoZSBwcmVmZXJyZWQgcmVjbGFpbSB0eXBlIGJhc2VkIG9uIHN3YXBwaW5lc3MuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBzdGFiaWxpdHkgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0MTo0OS4zNTEzNjQyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyODgzMDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTQzYjE4Njc0ZWExNTljMTRiODk3NzNlNDg4YzhkNzNlMzgzZmFkOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxMjo0MTo0OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggYmU2YmQyNmU4YzU3OC4uMDk1MzVkOWJkZWQ1YyAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTE5MSw4ICsxOTEsMjAgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7XFxuIFxcdFxcdFxcdHByZWZldGNodyhcXHUwMDI2cHJldi1cXHUwMDNlX2ZpZWxkKTtcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdH0gd2hpbGUgKDApXFxuKyNkZWZpbmUgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZClcXHRcXHRcXHRcXFxcXFxuK1xcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdGlmICgoX2ZvbGlvKS1cXHUwMDNlbHJ1Lm5leHQgIT0gX2Jhc2UpIHtcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdHN0cnVjdCBmb2xpbyAqbmV4dDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0bmV4dCA9IGxpc3RfZW50cnkoKF9mb2xpbyktXFx1MDAzZWxydS5uZXh0LFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvLCBscnUpO1xcdFxcdFxcXFxcXG4rXFx0XFx0XFx0cHJlZmV0Y2h3KFxcdTAwMjZuZXh0LVxcdTAwM2VfZmllbGQpO1xcdFxcdFxcdFxcXFxcXG4rXFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0fSB3aGlsZSAoMClcXG4rXFxuICNlbHNlXFxuICNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZCkgZG8geyB9IHdoaWxlICgwKVxcbisjZGVmaW5lIHByZWZldGNod19uZXh0X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpIGRvIHsgfSB3aGlsZSAoMClcXG4gI2VuZGlmXFxuIFxcbiAvKlxcbkBAIC0yNzAsNiArMjgyLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19leGVjX2ZpbGVfZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0cmV0dXJuIHZtYV9mbGFnc190ZXN0KHZtYV9mbGFncywgVk1BX0VYRUNfQklUKSBcXHUwMDI2XFx1MDAyNiBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XFxuIH1cXG4gXFxuKy8qIFNlZSBnZXRfdHlwZV90b19zY2FuKCk6IHRoZXNlIHZhbHVlcyBhbHdheXMgc2VsZWN0IEZJTEUgb3IgQU5PTiAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfZXh0cmVtZV9zd2FwcGluZXNzKGludCBzd2FwcGluZXNzKVxcbit7XFxuK1xcdHJldHVybiBzd2FwcGluZXNzIFxcdTAwM2M9IE1JTl9TV0FQUElORVNTICsgMSB8fFxcbitcXHQgICAgICAgc3dhcHBpbmVzcyBcXHUwMDNlPSBNQVhfU1dBUFBJTkVTUztcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgc2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCByZWNsYWltX3N0YXRlICpycylcXG4ge1xcbkBAIC0zMjk2LDIwICszMzE1LDIxIEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hXFxuIH1cXG4gXFxuIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXFxuLXN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpXFxuIHtcXG4tXFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XFxuLVxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuLVxcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4rXFx0aW50IG5ld19nZW47XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XFxuIFxcbiBcXHRkbyB7XFxuIFxcdFxcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbiBcXHRcXHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cXG4tXFx0XFx0aWYgKG5ld19nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pXFxuK1xcdFxcdGlmIChuZXdfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7XFxuK1xcdFxcdFxcdGlmIChpbmNyZWFzZWQpXFxuK1xcdFxcdFxcdFxcdCppbmNyZWFzZWQgPSBmYWxzZTtcXG4gXFx0XFx0XFx0cmV0dXJuIG5ld19nZW47XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdG5ld19nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XFxuIFxcbkBAIC0zMzE3LDggKzMzMzcsMjEgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0bmV3X2ZsYWdzIHw9IChuZXdfZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbiBcXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4gXFxuLVxcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XFxuK1xcdGlmIChpbmNyZWFzZWQpXFxuK1xcdFxcdCppbmNyZWFzZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gbmV3X2dlbjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4rXFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG4rXFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuK1xcdGJvb2wgZ2VuX2luY3JlYXNlZDtcXG4gXFxuK1xcdG5ld19nZW4gPSBfX2ZvbGlvX2luY19nZW4oZm9saW8sIG9sZF9nZW4sIFxcdTAwMjZnZW5faW5jcmVhc2VkKTtcXG4rXFx0aWYgKGdlbl9pbmNyZWFzZWQpXFxuK1xcdFxcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XFxuIFxcdHJldHVybiBuZXdfZ2VuO1xcbiB9XFxuIFxcbkBAIC0zODk3LDEzICszOTMwLDI3IEBAIHN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcXG4gXFx0XFx0a2ZyZWUod2Fsayk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9scnVfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqKmJhdGNoX2VuZCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqZHN0KVxcbit7XFxuK1xcdExJU1RfSEVBRChtb3ZhYmxlKTtcXG4rXFxuK1xcdGlmICghKmJhdGNoX2VuZClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bGlzdF9jdXRfcG9zaXRpb24oXFx1MDAyNm1vdmFibGUsIGhlYWQsICpiYXRjaF9lbmQpO1xcbitcXHRsaXN0X3NwbGljZV90YWlsX2luaXQoXFx1MDAyNm1vdmFibGUsIGRzdCk7XFxuK1xcdCpiYXRjaF9lbmQgPSBOVUxMO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcXG4ge1xcbiBcXHRpbnQgem9uZTtcXG4tXFx0aW50IHJlbWFpbmluZyA9IE1BWF9MUlVfQkFUQ0g7XFxuK1xcdGludCByZW1haW5pbmcgPSBNQVhfTFJVX0JBVENIIC8gKGlzX2V4dHJlbWVfc3dhcHBpbmVzcyhzd2FwcGluZXNzKSA/IDIgOiA4KTtcXG4gXFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG4gXFx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbiBcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG4rXFx0aW50IHRhcmdldF9nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XFxuIFxcbiBcXHQvKiBGb3IgZmlsZSB0eXBlLCBza2lwIHRoZSBjaGVjayBpZiBzd2FwcGluZXNzIGlzIGFub24gb25seSAqL1xcbiBcXHRpZiAodHlwZSBcXHUwMDI2XFx1MDAyNiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkpXFxuQEAgLTM5MTUsMzMgKzM5NjIsNTUgQEAgc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXFxuIFxcbiBcXHQvKiBwcmV2ZW50IGNvbGQvaG90IGludmVyc2lvbiBpZiB0aGUgdHlwZSBpcyBldmljdGFibGUgKi9cXG4gXFx0Zm9yICh6b25lID0gMDsgem9uZSBcXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnRhcmdldF9saXN0ID0gXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdO1xcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW29sZF9nZW5dW3R5cGVdW3pvbmVdO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIHByb3RlY3RlZFtNQVhfTlJfVElFUlNdID0ge30sIGRlbHRhID0gMDtcXG4rXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqcG9zID0gaGVhZC1cXHUwMDNlbmV4dDtcXG4rXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqYmF0Y2hfZW5kID0gTlVMTDtcXG4gXFxuLVxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xcbitcXHRcXHR3aGlsZSAocG9zICE9IGhlYWQpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZm9saW8sIGxydSk7XFxuK1xcdFxcdFxcdGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIFxcdFxcdFxcdGludCByZWZzID0gZm9saW9fbHJ1X3JlZnMoZm9saW8pO1xcbiBcXHRcXHRcXHRib29sIHdvcmtpbmdzZXQgPSBmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pO1xcbitcXHRcXHRcXHRib29sIGdlbl9pbmNyZWFzZWQ7XFxuIFxcbiBcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTtcXG4gXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSwgZm9saW8pO1xcbiBcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfZmlsZV9scnUoZm9saW8pICE9IHR5cGUsIGZvbGlvKTtcXG4gXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3pvbmVudW0oZm9saW8pICE9IHpvbmUsIGZvbGlvKTtcXG4gXFxuLVxcdFxcdFxcdG5ld19nZW4gPSBmb2xpb19pbmNfZ2VuKGxydXZlYywgZm9saW8pO1xcbi1cXHRcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW25ld19nZW5dW3R5cGVdW3pvbmVdKTtcXG4rXFx0XFx0XFx0cHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKGZvbGlvLCBoZWFkLCBmbGFncyk7XFxuK1xcdFxcdFxcdHBvcyA9IHBvcy1cXHUwMDNlbmV4dDtcXG4rXFx0XFx0XFx0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXFx1MDAyNmdlbl9pbmNyZWFzZWQpO1xcbitcXHRcXHRcXHRpZiAoZ2VuX2luY3JlYXNlZCkge1xcbitcXHRcXHRcXHRcXHRkZWx0YSArPSBucl9wYWdlcztcXG4rXFx0XFx0XFx0XFx0YmF0Y2hfZW5kID0gXFx1MDAyNmZvbGlvLVxcdTAwM2VscnU7XFxuIFxcbi1cXHRcXHRcXHQvKiBkb24ndCBjb3VudCB0aGUgd29ya2luZ3NldCBiZWluZyBsYXppbHkgcHJvbW90ZWQgKi9cXG4tXFx0XFx0XFx0aWYgKHJlZnMgKyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgKyAxKSB7XFxuLVxcdFxcdFxcdFxcdGludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpO1xcbi1cXHRcXHRcXHRcXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdFxcdFxcdFxcdC8qIGRvbid0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqL1xcbitcXHRcXHRcXHRcXHRpZiAocmVmcyArIHdvcmtpbmdzZXQgIT0gQklUKExSVV9SRUZTX1dJRFRIKSArIDEpIHtcXG4rXFx0XFx0XFx0XFx0XFx0aW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7XFxuIFxcbi1cXHRcXHRcXHRcXHRXUklURV9PTkNFKGxydWdlbi1cXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBscnVnZW4tXFx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSArIGRlbHRhKTtcXG4rXFx0XFx0XFx0XFx0XFx0cHJvdGVjdGVkW3RpZXJdICs9IG5yX3BhZ2VzO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdGZsdXNoX2xydV9iYXRjaChoZWFkLCBcXHUwMDI2YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7XFxuK1xcdFxcdFxcdFxcdGxpc3RfbW92ZShcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW25ld19nZW5dW3R5cGVdW3pvbmVdKTtcXG4gXFx0XFx0XFx0fVxcbi1cXG4gXFx0XFx0XFx0aWYgKCEtLXJlbWFpbmluZylcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbitcXHRcXHRmbHVzaF9scnVfYmF0Y2goaGVhZCwgXFx1MDAyNmJhdGNoX2VuZCwgdGFyZ2V0X2xpc3QpO1xcbitcXG4rXFx0XFx0V1JJVEVfT05DRShscnVnZW4tXFx1MDAzZW5yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdLFxcbitcXHRcXHRcXHQgICBscnVnZW4tXFx1MDAzZW5yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdIC0gZGVsdGEpO1xcbitcXHRcXHRXUklURV9PTkNFKGxydWdlbi1cXHUwMDNlbnJfcGFnZXNbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV0sXFxuK1xcdFxcdFxcdCAgIGxydWdlbi1cXHUwMDNlbnJfcGFnZXNbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV0gKyBkZWx0YSk7XFxuK1xcdFxcdGZvciAoaW50IHRpZXIgPSAwOyB0aWVyIFxcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspXFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UobHJ1Z2VuLVxcdTAwM2Vwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0sXFxuK1xcdFxcdFxcdFxcdCAgIGxydWdlbi1cXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdICsgcHJvdGVjdGVkW3RpZXJdKTtcXG4rXFx0XFx0aWYgKCFyZW1haW5pbmcpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBkb25lOlxcbiBcXHRyZXNldF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRydWUpO1xcbkBAIC00MTUxLDIwICs0MjIwLDI4IEBAIHN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2xcXG4gXFx0c2MtXFx1MDAzZXByaW9yaXR5ID0gY2xhbXAocHJpb3JpdHksIERFRl9QUklPUklUWSAvIDIsIERFRl9QUklPUklUWSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfZ2VuX3NpemUoc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbixcXG4rXFx0XFx0aW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbit7XFxuK1xcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7XFxuK1xcbitcXHRmb3IgKGludCB6b25lID0gMDsgem9uZSBcXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxcbitcXHRcXHRzaXplICs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVxcdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xcbitcXHRyZXR1cm4gc2l6ZTtcXG4rfVxcbitcXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuIHtcXG4tXFx0aW50IGdlbiwgdHlwZSwgem9uZTtcXG4rXFx0aW50IHR5cGU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2VxLCB0b3RhbCA9IDA7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuIFxcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XFxuIFxcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XFxuIFxcbiBcXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7XFxuLVxcdFxcdGZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFxcdTAwM2M9IG1heF9zZXE7IHNlcSsrKSB7XFxuLVxcdFxcdFxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcXG4tXFx0XFx0XFx0Zm9yICh6b25lID0gMDsgem9uZSBcXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxcbi1cXHRcXHRcXHRcXHR0b3RhbCArPSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSBcXHUwMDNjPSBtYXhfc2VxOyBzZXErKylcXG4rXFx0XFx0XFx0dG90YWwgKz0gbHJ1dmVjX2dlbl9zaXplKGxydWdlbiwgdHlwZSwgc2VxKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHRvdGFsO1xcbkBAIC00NzI4LDcgKzQ4MDUsOCBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxcbiBcXG4gc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHRpZXIsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkcClcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwLFxcbitcXHRcXHQgICAgICAgYm9vbCAqZXhoYXVzdGVkKVxcbiB7XFxuIFxcdGludCBpO1xcbiBcXHRpbnQgZ2VuO1xcbkBAIC00NzM5LDEyICs0ODE3LDE1IEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdGludCBza2lwcGVkID0gMDtcXG4gXFx0dW5zaWduZWQgbG9uZyByZW1haW5pbmcgPSBucl90b19zY2FuO1xcbiBcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbitcXHRib29sIGVhcmx5X3N0b3AgPSBmYWxzZTtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRShucl90b19zY2FuIFxcdTAwM2UgTUFYX0xSVV9CQVRDSCk7XFxuIFxcdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShsaXN0KSk7XFxuIFxcbi1cXHRpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUylcXG4rXFx0aWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgPT0gTUlOX05SX0dFTlMpIHtcXG4rXFx0XFx0KmV4aGF1c3RlZCA9IHRydWU7XFxuIFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuIFxcbiBcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuIFxcbkBAIC00Nzc1LDggKzQ4NTYsMTAgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0XFx0c2tpcHBlZF96b25lICs9IGRlbHRhO1xcbiBcXHRcXHRcXHR9XFxuIFxcbi1cXHRcXHRcXHRpZiAoIS0tcmVtYWluaW5nIHx8IG1heChpc29sYXRlZCwgc2tpcHBlZF96b25lKSBcXHUwMDNlPSBNSU5fTFJVX0JBVENIKVxcbitcXHRcXHRcXHRpZiAoIS0tcmVtYWluaW5nIHx8IG1heChpc29sYXRlZCwgc2tpcHBlZF96b25lKSBcXHUwMDNlPSBNSU5fTFJVX0JBVENIKSB7XFxuK1xcdFxcdFxcdFxcdGVhcmx5X3N0b3AgPSB0cnVlO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoc2tpcHBlZF96b25lKSB7XFxuQEAgLTQ3ODUsOCArNDg2OCwxMCBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRcXHRza2lwcGVkICs9IHNraXBwZWRfem9uZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKCFyZW1haW5pbmcgfHwgaXNvbGF0ZWQgXFx1MDAzZT0gTUlOX0xSVV9CQVRDSClcXG4rXFx0XFx0aWYgKCFyZW1haW5pbmcgfHwgaXNvbGF0ZWQgXFx1MDAzZT0gTUlOX0xSVV9CQVRDSCkge1xcbitcXHRcXHRcXHRlYXJseV9zdG9wID0gdHJ1ZTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0aXRlbSA9IFBHU0NBTl9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcXG5AQCAtNDc5Nyw2ICs0ODgyLDEzIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdFxcdHNjYW5uZWQsIHNraXBwZWQsIGlzb2xhdGVkLFxcbiBcXHRcXHRcXHRcXHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBJZiB3ZSBkaWRuJ3Qgc3RvcCBlYXJseSwgYWxsIHJlY2xhaW1hYmxlIGZvbGlvcyBpbiB0aGUgY3VycmVudFxcbitcXHQgKiBnZW5lcmF0aW9uIGhhdmUgYmVlbiBzY2FubmVkLiBXZSBhcmUgZXhoYXVzdGVkIGlmIHRoaXMgaXMgdGhlIGxhc3RcXG4rXFx0ICogcmVjbGFpbWFibGUgZ2VuZXJhdGlvbi5cXG4rXFx0ICovXFxuK1xcdCpleGhhdXN0ZWQgPSAhZWFybHlfc3RvcCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSArIE1JTl9OUl9HRU5TID09IGxydWdlbi1cXHUwMDNlbWF4X3NlcTtcXG4gXFx0Kmlzb2xhdGVkcCA9IGlzb2xhdGVkO1xcbiBcXHRyZXR1cm4gc2Nhbm5lZDtcXG4gfVxcbkBAIC00ODI0LDUxICs0OTE2LDkwIEBAIHN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXFxuIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbiB7XFxuIFxcdHN0cnVjdCBjdHJsX3BvcyBzcCwgcHYgPSB7fTtcXG4rXFx0aW50IGFub25fZ2FpbiwgZmlsZV9nYWluO1xcbiBcXG4gXFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzYz0gTUlOX1NXQVBQSU5FU1MgKyAxKVxcbiBcXHRcXHRyZXR1cm4gTFJVX0dFTl9GSUxFO1xcbiBcXG4gXFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzZT0gTUFYX1NXQVBQSU5FU1MpXFxuIFxcdFxcdHJldHVybiBMUlVfR0VOX0FOT047XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBcHBseSBhIHF1YWRyYXRpYyBib29zdCBiYXNlZCBvbiB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgbmV1dHJhbFxcbitcXHQgKiBiYWxhbmNlIHBvaW50IChzd2FwcGluZXNzID0gTUFYX1NXQVBQSU5FU1MgLyAyKS5cXG4rXFx0ICpcXG4rXFx0ICogQSBsaW5lYXIgd2VpZ2h0IGlzIGVhc2lseSBvdmVyd2hlbG1lZCBieSBoaXN0b3JpY2FsIHJlZmF1bHQgY29zdFxcbitcXHQgKiB3aGVuIHN3YXBwaW5lc3MgZGV2aWF0ZXMgZnJvbSBuZXV0cmFsLiBUaGUgcXVhZHJhdGljIHNjYWxpbmdcXG4rXFx0ICogYW1wbGlmaWVzIHRoZSB3ZWlnaHQgb2YgdGhlIHByZWZlcnJlZCB0eXBlIHNtb290aGx5LlxcbitcXHQgKi9cXG4rXFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzYyBNQVhfU1dBUFBJTkVTUyAvIDIpIHtcXG4rXFx0XFx0aW50IGRlbHRhID0gKE1BWF9TV0FQUElORVNTIC8gMikgLSBzd2FwcGluZXNzO1xcbitcXHRcXHRpbnQgYm9vc3QgPSAoZGVsdGEgKiBkZWx0YSkgXFx1MDAzZVxcdTAwM2UgNDtcXG4rXFxuK1xcdFxcdGFub25fZ2FpbiA9IHN3YXBwaW5lc3M7XFxuK1xcdFxcdGZpbGVfZ2FpbiA9IChNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MpICsgYm9vc3Q7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGludCBkZWx0YSA9IHN3YXBwaW5lc3MgLSAoTUFYX1NXQVBQSU5FU1MgLyAyKTtcXG4rXFx0XFx0aW50IGJvb3N0ID0gKGRlbHRhICogZGVsdGEpIFxcdTAwM2VcXHUwMDNlIDQ7XFxuK1xcbitcXHRcXHRhbm9uX2dhaW4gPSBzd2FwcGluZXNzICsgYm9vc3Q7XFxuK1xcdFxcdGZpbGVfZ2FpbiA9IE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcztcXG4rXFx0fVxcbitcXG4gXFx0LypcXG4gXFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxcbiBcXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXFxuIFxcdCAqL1xcbi1cXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFxcdTAwMjZzcCk7XFxuLVxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcXHUwMDI2cHYpO1xcbitcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIGFub25fZ2FpbiwgXFx1MDAyNnNwKTtcXG4rXFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBmaWxlX2dhaW4sIFxcdTAwMjZwdik7XFxuIFxcbiBcXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXFx1MDAyNnNwLCBcXHUwMDI2cHYpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShpbnQgc3dhcHBpbmVzcylcXG4re1xcbitcXHRyZXR1cm4gc3dhcHBpbmVzcyA9PSBNSU5fU1dBUFBJTkVTUyB8fFxcbitcXHQgICAgICAgc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MsXFxuIFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCxcXG4gXFx0XFx0XFx0ICBpbnQgKmlzb2xhdGVfdHlwZSwgaW50ICppc29sYXRlX3NjYW5uZWQpXFxuIHtcXG4tXFx0aW50IGk7XFxuLVxcdGludCB0b3RhbF9zY2FubmVkID0gMDtcXG4rXFx0Ym9vbCB0eXBlX2ZhbGxiYWNrX2FsbG93ZWQgPSAhaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShzd2FwcGluZXNzKTtcXG4gXFx0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XFxuK1xcdGludCB0b3RhbF9zY2FubmVkID0gMCwgc2Nhbm5lZCwgdGllcjtcXG4rXFx0Ym9vbCBleGhhdXN0ZWQsIHRyaWVkID0gZmFsc2U7XFxuIFxcbi1cXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7XFxuLVxcdFxcdGludCBzY2FubmVkO1xcbi1cXHRcXHRpbnQgdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xcbityZXRyeTpcXG4rXFx0dGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xcbitcXHRzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYyxcXG4rXFx0XFx0XFx0ICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQsIFxcdTAwMjZleGhhdXN0ZWQpO1xcbiBcXG4tXFx0XFx0c2Nhbm5lZCA9IHNjYW5fZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsXFxuLVxcdFxcdFxcdFxcdCAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkKTtcXG4rXFx0dG90YWxfc2Nhbm5lZCArPSBzY2FubmVkO1xcbitcXHRpZiAoKmlzb2xhdGVkKSB7XFxuK1xcdFxcdCppc29sYXRlX3R5cGUgPSB0eXBlO1xcbitcXHRcXHQqaXNvbGF0ZV9zY2FubmVkID0gc2Nhbm5lZDtcXG4rXFx0XFx0cmV0dXJuIHRvdGFsX3NjYW5uZWQ7XFxuK1xcdH1cXG4gXFxuLVxcdFxcdHRvdGFsX3NjYW5uZWQgKz0gc2Nhbm5lZDtcXG4tXFx0XFx0aWYgKCppc29sYXRlZCkge1xcbi1cXHRcXHRcXHQqaXNvbGF0ZV90eXBlID0gdHlwZTtcXG4tXFx0XFx0XFx0Kmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIElmIHNjYW5uZWQgXFx1MDAzZSAwIGFuZCBpc29sYXRlZCA9PSAwLCBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlXFxuLVxcdFxcdCAqIG90aGVyIHR5cGUsIGFzIHRoaXMgdHlwZSByZW1haW5zIHN1ZmZpY2llbnQuIEZhbGxpbmcgYmFja1xcbi1cXHRcXHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFzY2FubmVkKVxcbi1cXHRcXHRcXHR0eXBlID0gIXR5cGU7XFxuK1xcdC8qXFxuK1xcdCAqIFdlIGFyZSBydW5uaW5nIG91dCBvZiB0aGUgY3VycmVudCByZWNsYWltIHR5cGUuIEZhbGwgYmFjayB0b1xcbitcXHQgKiB0aGUgb3RoZXIgdHlwZSBpZiBhbGxvd2VkLlxcbitcXHQgKi9cXG4rXFx0aWYgKGV4aGF1c3RlZCBcXHUwMDI2XFx1MDAyNiB0eXBlX2ZhbGxiYWNrX2FsbG93ZWQpIHtcXG4rXFx0XFx0dHlwZSA9ICF0eXBlO1xcbitcXHRcXHR0eXBlX2ZhbGxiYWNrX2FsbG93ZWQgPSBmYWxzZTtcXG4rXFx0XFx0Z290byByZXRyeTtcXG4rXFx0fVxcbitcXHQvKlxcbitcXHQgKiBXZSBhcmUgbm90IGV4aGF1c3RlZCwgYnV0IGZhaWxlZCB0byBpc29sYXRlIGFueSBmb2xpb3MgZHVlIHRvXFxuK1xcdCAqIHJhY2VzLiBHaXZlIHRoaXMgdHlwZSBvbmUgbW9yZSBjaGFuY2UgdG8gYXZvaWQgYSBsYXJnZXIgbG9vcC5cXG4rXFx0ICovXFxuK1xcdGlmICghZXhoYXVzdGVkIFxcdTAwMjZcXHUwMDI2ICF0cmllZCkge1xcbitcXHRcXHR0cmllZCA9IHRydWU7XFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiB0b3RhbF9zY2FubmVkO1xcbkBAIC00OTcwLDIxICs1MTAxLDY3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRyZXR1cm4gc2Nhbm5lZDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgbHJ1X2dlbl9pbWJhbGFuY2VkKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxLFxcbitcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxcbit7XFxuK1xcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuK1xcdHVuc2lnbmVkIGxvbmcgeW91bmcgPSAwLCBvbGQgPSAwLCBsYWcgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIGluYWN0aXZlX3JhdGlvLCBnYjtcXG4rXFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG4rXFxuK1xcdC8qIHdlIHN0aWxsIGhhdmUgZW5vdWdoIGdlbmVyYXRpb25zIHRvIHJlY2xhaW0gKi9cXG4rXFx0aWYgKG1pbl9zZXFbdHlwZV0gKyBNSU5fTlJfR0VOUyBcXHUwMDNjIG1heF9zZXEpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRyaWdnZXIgYWdpbmcgaWYgdGhlIHByZWZlcnJlZCB0eXBlIGlzIHJ1bm5pbmcgbG93IG9uIHJlY2xhaW1hYmxlXFxuK1xcdCAqIGZvbGlvcywgcHJvdmlkZWQgdGhlIGdlbmVyYXRpb24gbGFnIG9mIHRoZSBvdGhlciB0eXBlIHJlbWFpbnMgc21hbGxcXG4rXFx0ICogZW5vdWdoIHRoYXQgaW5jX21pbl9zZXEoKSBpbnRyb2R1Y2VzIG5lZ2xpZ2libGUgb3ZlcmhlYWRcXG4rXFx0ICovXFxuK1xcdGZvciAodW5zaWduZWQgbG9uZyBzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXFx1MDAzYz0gbWF4X3NlcTsgc2VxKyspIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBzaXplID0gbHJ1dmVjX2dlbl9zaXplKGxydWdlbiwgdHlwZSwgc2VxKTtcXG4rXFxuK1xcdFxcdGlmIChzZXEgKyBNSU5fTlJfR0VOUyBcXHUwMDNlIG1heF9zZXEpXFxuK1xcdFxcdFxcdHlvdW5nICs9IHNpemU7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0b2xkICs9IHNpemU7XFxuK1xcdH1cXG4rXFx0aWYgKG1pbl9zZXFbIXR5cGVdICsgTUFYX05SX0dFTlMgPT0gbWF4X3NlcSArIDEpXFxuK1xcdFxcdGxhZyArPSBscnV2ZWNfZ2VuX3NpemUobHJ1Z2VuLCAhdHlwZSwgbWluX3NlcVshdHlwZV0pO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQm9ycm93IHRoZSBhZGFwdGl2ZSByYXRpbyBmcm9tIGluYWN0aXZlX2lzX2xvdygpLCBhbmQgc2NhbGVcXG4rXFx0ICogaXQgYnkgc3FydChNQVhfTlJfR0VOUykgdG8gbWFrZSBhZ2luZyBsZXNzIGFnZ3Jlc3NpdmVcXG4rXFx0ICovXFxuK1xcdGdiID0gKHlvdW5nICsgb2xkKSBcXHUwMDNlXFx1MDAzZSAoMzAgLSBQQUdFX1NISUZUKTtcXG4rXFx0aW5hY3RpdmVfcmF0aW8gPSBnYiA/IGludF9zcXJ0KDEwICogZ2IgKiBNQVhfTlJfR0VOUykgOiBNQVhfTlJfR0VOUztcXG4rXFx0cmV0dXJuIHlvdW5nIFxcdTAwM2Ugb2xkICogaW5hY3RpdmVfcmF0aW8gXFx1MDAyNlxcdTAwMjYgKGxhZyBcXHUwMDNjIE1BWF9MUlVfQkFUQ0ggfHxcXG4rXFx0ICAgICAgIChpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykgXFx1MDAyNlxcdTAwMjYgc2MtXFx1MDAzZXByaW9yaXR5IFxcdTAwM2UgMikpO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBzaG91bGRfcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4ge1xcbitcXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcXG4gXFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG4gXFxuLVxcdC8qIGhhdmUgdG8gcnVuIGFnaW5nLCBzaW5jZSBldmljdGlvbiBpcyBub3QgcG9zc2libGUgYW55bW9yZSAqL1xcbi1cXHRpZiAoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyBcXHUwMDNlIG1heF9zZXEpXFxuK1xcdC8qIHJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgZXhoYXVzdGVkICovXFxuK1xcdGlmIChtaW5fc2VxW3R5cGVdICsgTUlOX05SX0dFTlMgXFx1MDAzZSBtYXhfc2VxKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdC8qIHRyeSB0byBhdm9pZCBhZ2luZywgZG8gZ2VudGxlIHJlY2xhaW0gYXQgdGhlIGRlZmF1bHQgcHJpb3JpdHkgKi9cXG4tXFx0aWYgKHNjLVxcdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpXFxuK1xcdC8qXFxuK1xcdCAqIFRyeSB0byBhdm9pZCBhZ2luZyBieSBkb2luZyBnZW50bGUgcmVjbGFpbSBhdCB0aGUgZGVmYXVsdFxcbitcXHQgKiBwcmlvcml0eS4gU2tpcCBnZW50bGUgcmVjbGFpbSBmb3IgZXh0cmVtZSBzd2FwcGluZXNzLlxcbitcXHQgKi9cXG4rXFx0aWYgKHNjLVxcdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkgXFx1MDAyNlxcdTAwMjYgIWlzX2V4dHJlbWVfc3dhcHBpbmVzcyhzd2FwcGluZXNzKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0LyogYmV0dGVyIHRvIHJ1biBhZ2luZyBldmVuIHRob3VnaCBldmljdGlvbiBpcyBzdGlsbCBwb3NzaWJsZSAqL1xcbi1cXHRyZXR1cm4gZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxO1xcbitcXHRpZiAoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdC8qIFJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgc2V2ZXJlbHkgaW1iYWxhbmNlZCBhY3Jvc3MgZ2VucyAqL1xcbitcXHRyZXR1cm4gbHJ1X2dlbl9pbWJhbGFuY2VkKGxydXZlYywgbWF4X3NlcSwgc2MsIHR5cGUsIHN3YXBwaW5lc3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0MTo0OS44MTUwMDQ1MjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDk4NDk3NjgyODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X2dlbl9zb2Z0X3JlY2xhaW1cIixcbiAgICBcIm1heF9scnVfZ2VuX21lbWNnXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgTXVsdGktR2VuIExSVSAoTUdMUlUpIG1lbW9yeSByZWNsYWltIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGV2aWN0aW9uIHBhdGgsIGZvbGlvIHNjYW5uaW5nLCBhbmQgYWdpbmcgaGV1cmlzdGljcy4gSXQgaW50cm9kdWNlcyBiYXRjaGluZyBpbiBgaW5jX21pbl9zZXFgIGFuZCBjaGFuZ2VzIGhvdyBgZ2V0X3R5cGVfdG9fc2NhbmAgY2FsY3VsYXRlcyB0aGUgcHJlZmVycmVkIHJlY2xhaW0gdHlwZSBiYXNlZCBvbiBzd2FwcGluZXNzLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgc3RhYmlsaXR5IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTQzYjE4Njc0ZWExNTljMTRiODk3NzNlNDg4YzhkNzNlMzgzZmFkOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDEyOjQxOjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYmU2YmQyNmU4YzU3OC4uMDk1MzVkOWJkZWQ1YyAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTE5MSw4ICsxOTEsMjAgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7XG4gXHRcdFx0cHJlZmV0Y2h3KFx1MDAyNnByZXYtXHUwMDNlX2ZpZWxkKTtcdFx0XHRcXFxuIFx0XHR9XHRcdFx0XHRcdFx0XHRcXFxuIFx0fSB3aGlsZSAoMClcbisjZGVmaW5lIHByZWZldGNod19uZXh0X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpXHRcdFx0XFxcbitcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0aWYgKChfZm9saW8pLVx1MDAzZWxydS5uZXh0ICE9IF9iYXNlKSB7XHRcdFx0XFxcbitcdFx0XHRzdHJ1Y3QgZm9saW8gKm5leHQ7XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0bmV4dCA9IGxpc3RfZW50cnkoKF9mb2xpbyktXHUwMDNlbHJ1Lm5leHQsXHRcdFxcXG4rXHRcdFx0XHRcdHN0cnVjdCBmb2xpbywgbHJ1KTtcdFx0XFxcbitcdFx0XHRwcmVmZXRjaHcoXHUwMDI2bmV4dC1cdTAwM2VfZmllbGQpO1x0XHRcdFxcXG4rXHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4rXHR9IHdoaWxlICgwKVxuK1xuICNlbHNlXG4gI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKSBkbyB7IH0gd2hpbGUgKDApXG4rI2RlZmluZSBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKSBkbyB7IH0gd2hpbGUgKDApXG4gI2VuZGlmXG4gXG4gLypcbkBAIC0yNzAsNiArMjgyLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19leGVjX2ZpbGVfZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiB2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3MsIFZNQV9FWEVDX0JJVCkgXHUwMDI2XHUwMDI2IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiB9XG4gXG4rLyogU2VlIGdldF90eXBlX3RvX3NjYW4oKTogdGhlc2UgdmFsdWVzIGFsd2F5cyBzZWxlY3QgRklMRSBvciBBTk9OICovXG4rc3RhdGljIGlubGluZSBib29sIGlzX2V4dHJlbWVfc3dhcHBpbmVzcyhpbnQgc3dhcHBpbmVzcylcbit7XG4rXHRyZXR1cm4gc3dhcHBpbmVzcyBcdTAwM2M9IE1JTl9TV0FQUElORVNTICsgMSB8fFxuK1x0ICAgICAgIHN3YXBwaW5lc3MgXHUwMDNlPSBNQVhfU1dBUFBJTkVTUztcbit9XG4rXG4gc3RhdGljIHZvaWQgc2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4gXHRcdFx0XHQgICBzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSAqcnMpXG4ge1xuQEAgLTMyOTYsMjAgKzMzMTUsMjEgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcbiB9XG4gXG4gLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpXG4ge1xuLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4tXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbi1cdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4gXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0aW50IG5ld19nZW47XG4gXG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcbiBcbiBcdGRvIHtcbiBcdFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4gXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcbitcdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pIHtcbitcdFx0XHRpZiAoaW5jcmVhc2VkKVxuK1x0XHRcdFx0KmluY3JlYXNlZCA9IGZhbHNlO1xuIFx0XHRcdHJldHVybiBuZXdfZ2VuO1xuK1x0XHR9XG4gXG4gXHRcdG5ld19nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XG4gXG5AQCAtMzMxNyw4ICszMzM3LDIxIEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdG5ld19mbGFncyB8PSAobmV3X2dlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4gXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbi1cdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4rXHRpZiAoaW5jcmVhc2VkKVxuK1x0XHQqaW5jcmVhc2VkID0gdHJ1ZTtcbitcdHJldHVybiBuZXdfZ2VuO1xuK31cbitcbitzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuK1x0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4rXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuK1x0Ym9vbCBnZW5faW5jcmVhc2VkO1xuIFxuK1x0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXHUwMDI2Z2VuX2luY3JlYXNlZCk7XG4rXHRpZiAoZ2VuX2luY3JlYXNlZClcbitcdFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiBcdHJldHVybiBuZXdfZ2VuO1xuIH1cbiBcbkBAIC0zODk3LDEzICszOTMwLDI3IEBAIHN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcbiBcdFx0a2ZyZWUod2Fsayk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9scnVfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqKmJhdGNoX2VuZCxcbitcdFx0XHRcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKmRzdClcbit7XG4rXHRMSVNUX0hFQUQobW92YWJsZSk7XG4rXG4rXHRpZiAoISpiYXRjaF9lbmQpXG4rXHRcdHJldHVybjtcbitcbitcdGxpc3RfY3V0X3Bvc2l0aW9uKFx1MDAyNm1vdmFibGUsIGhlYWQsICpiYXRjaF9lbmQpO1xuK1x0bGlzdF9zcGxpY2VfdGFpbF9pbml0KFx1MDAyNm1vdmFibGUsIGRzdCk7XG4rXHQqYmF0Y2hfZW5kID0gTlVMTDtcbit9XG4rXG4gc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG4ge1xuIFx0aW50IHpvbmU7XG4tXHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSDtcbitcdGludCByZW1haW5pbmcgPSBNQVhfTFJVX0JBVENIIC8gKGlzX2V4dHJlbWVfc3dhcHBpbmVzcyhzd2FwcGluZXNzKSA/IDIgOiA4KTtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4gXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuK1x0aW50IHRhcmdldF9nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XG4gXG4gXHQvKiBGb3IgZmlsZSB0eXBlLCBza2lwIHRoZSBjaGVjayBpZiBzd2FwcGluZXNzIGlzIGFub24gb25seSAqL1xuIFx0aWYgKHR5cGUgXHUwMDI2XHUwMDI2IChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSlcbkBAIC0zOTE1LDMzICszOTYyLDU1IEBAIHN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxuIFxuIFx0LyogcHJldmVudCBjb2xkL2hvdCBpbnZlcnNpb24gaWYgdGhlIHR5cGUgaXMgZXZpY3RhYmxlICovXG4gXHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKykge1xuK1x0XHRzdHJ1Y3QgbGlzdF9oZWFkICp0YXJnZXRfbGlzdCA9IFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV07XG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW29sZF9nZW5dW3R5cGVdW3pvbmVdO1xuK1x0XHR1bnNpZ25lZCBsb25nIHByb3RlY3RlZFtNQVhfTlJfVElFUlNdID0ge30sIGRlbHRhID0gMDtcbitcdFx0c3RydWN0IGxpc3RfaGVhZCAqcG9zID0gaGVhZC1cdTAwM2VuZXh0O1xuK1x0XHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXRjaF9lbmQgPSBOVUxMO1xuIFxuLVx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHtcbi1cdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuK1x0XHR3aGlsZSAocG9zICE9IGhlYWQpIHtcbitcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBmb2xpbywgbHJ1KTtcbitcdFx0XHRsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFx0XHRcdGludCByZWZzID0gZm9saW9fbHJ1X3JlZnMoZm9saW8pO1xuIFx0XHRcdGJvb2wgd29ya2luZ3NldCA9IGZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbyk7XG4rXHRcdFx0Ym9vbCBnZW5faW5jcmVhc2VkO1xuIFxuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pO1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbyksIGZvbGlvKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfZmlsZV9scnUoZm9saW8pICE9IHR5cGUsIGZvbGlvKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fem9uZW51bShmb2xpbykgIT0gem9uZSwgZm9saW8pO1xuIFxuLVx0XHRcdG5ld19nZW4gPSBmb2xpb19pbmNfZ2VuKGxydXZlYywgZm9saW8pO1xuLVx0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSk7XG4rXHRcdFx0cHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKGZvbGlvLCBoZWFkLCBmbGFncyk7XG4rXHRcdFx0cG9zID0gcG9zLVx1MDAzZW5leHQ7XG4rXHRcdFx0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXHUwMDI2Z2VuX2luY3JlYXNlZCk7XG4rXHRcdFx0aWYgKGdlbl9pbmNyZWFzZWQpIHtcbitcdFx0XHRcdGRlbHRhICs9IG5yX3BhZ2VzO1xuK1x0XHRcdFx0YmF0Y2hfZW5kID0gXHUwMDI2Zm9saW8tXHUwMDNlbHJ1O1xuIFxuLVx0XHRcdC8qIGRvbid0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqL1xuLVx0XHRcdGlmIChyZWZzICsgd29ya2luZ3NldCAhPSBCSVQoTFJVX1JFRlNfV0lEVEgpICsgMSkge1xuLVx0XHRcdFx0aW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7XG4tXHRcdFx0XHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHRcdFx0XHQvKiBkb24ndCBjb3VudCB0aGUgd29ya2luZ3NldCBiZWluZyBsYXppbHkgcHJvbW90ZWQgKi9cbitcdFx0XHRcdGlmIChyZWZzICsgd29ya2luZ3NldCAhPSBCSVQoTFJVX1JFRlNfV0lEVEgpICsgMSkge1xuK1x0XHRcdFx0XHRpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTtcbiBcbi1cdFx0XHRcdFdSSVRFX09OQ0UobHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSxcbi1cdFx0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSArIGRlbHRhKTtcbitcdFx0XHRcdFx0cHJvdGVjdGVkW3RpZXJdICs9IG5yX3BhZ2VzO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRmbHVzaF9scnVfYmF0Y2goaGVhZCwgXHUwMDI2YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7XG4rXHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW25ld19nZW5dW3R5cGVdW3pvbmVdKTtcbiBcdFx0XHR9XG4tXG4gXHRcdFx0aWYgKCEtLXJlbWFpbmluZylcbi1cdFx0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4rXHRcdGZsdXNoX2xydV9iYXRjaChoZWFkLCBcdTAwMjZiYXRjaF9lbmQsIHRhcmdldF9saXN0KTtcbitcbitcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbb2xkX2dlbl1bdHlwZV1bem9uZV0sXG4rXHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdIC0gZGVsdGEpO1xuK1x0XHRXUklURV9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXSxcbitcdFx0XHQgICBscnVnZW4tXHUwMDNlbnJfcGFnZXNbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV0gKyBkZWx0YSk7XG4rXHRcdGZvciAoaW50IHRpZXIgPSAwOyB0aWVyIFx1MDAzYyBNQVhfTlJfVElFUlM7IHRpZXIrKylcbitcdFx0XHRXUklURV9PTkNFKGxydWdlbi1cdTAwM2Vwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0sXG4rXHRcdFx0XHQgICBscnVnZW4tXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdICsgcHJvdGVjdGVkW3RpZXJdKTtcbitcdFx0aWYgKCFyZW1haW5pbmcpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIGRvbmU6XG4gXHRyZXNldF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRydWUpO1xuQEAgLTQxNTEsMjAgKzQyMjAsMjggQEAgc3RhdGljIHZvaWQgc2V0X2luaXRpYWxfcHJpb3JpdHkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbFxuIFx0c2MtXHUwMDNlcHJpb3JpdHkgPSBjbGFtcChwcmlvcml0eSwgREVGX1BSSU9SSVRZIC8gMiwgREVGX1BSSU9SSVRZKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19nZW5fc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuLFxuK1x0XHRpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBzZXEpXG4re1xuK1x0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7XG4rXG4rXHRmb3IgKGludCB6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspXG4rXHRcdHNpemUgKz0gbWF4KFJFQURfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTtcbitcdHJldHVybiBzaXplO1xuK31cbitcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4tXHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xuK1x0aW50IHR5cGU7XG4gXHR1bnNpZ25lZCBsb25nIHNlcSwgdG90YWwgPSAwO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4gXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuIFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbiBcbiBcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3MpIHtcbi1cdFx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXErKykge1xuLVx0XHRcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbi1cdFx0XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKylcbi1cdFx0XHRcdHRvdGFsICs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7XG4tXHRcdH1cbitcdFx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXErKylcbitcdFx0XHR0b3RhbCArPSBscnV2ZWNfZ2VuX3NpemUobHJ1Z2VuLCB0eXBlLCBzZXEpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHRvdGFsO1xuQEAgLTQ3MjgsNyArNDgwNSw4IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhXG4gXG4gc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHRpZXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkcClcbitcdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwLFxuK1x0XHQgICAgICAgYm9vbCAqZXhoYXVzdGVkKVxuIHtcbiBcdGludCBpO1xuIFx0aW50IGdlbjtcbkBAIC00NzM5LDEyICs0ODE3LDE1IEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRpbnQgc2tpcHBlZCA9IDA7XG4gXHR1bnNpZ25lZCBsb25nIHJlbWFpbmluZyA9IG5yX3RvX3NjYW47XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbitcdGJvb2wgZWFybHlfc3RvcCA9IGZhbHNlO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKG5yX3RvX3NjYW4gXHUwMDNlIE1BWF9MUlVfQkFUQ0gpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KGxpc3QpKTtcbiBcbi1cdGlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpID09IE1JTl9OUl9HRU5TKVxuK1x0aWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgPT0gTUlOX05SX0dFTlMpIHtcbitcdFx0KmV4aGF1c3RlZCA9IHRydWU7XG4gXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4gXG5AQCAtNDc3NSw4ICs0ODU2LDEwIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRza2lwcGVkX3pvbmUgKz0gZGVsdGE7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGlmICghLS1yZW1haW5pbmcgfHwgbWF4KGlzb2xhdGVkLCBza2lwcGVkX3pvbmUpIFx1MDAzZT0gTUlOX0xSVV9CQVRDSClcbitcdFx0XHRpZiAoIS0tcmVtYWluaW5nIHx8IG1heChpc29sYXRlZCwgc2tpcHBlZF96b25lKSBcdTAwM2U9IE1JTl9MUlVfQkFUQ0gpIHtcbitcdFx0XHRcdGVhcmx5X3N0b3AgPSB0cnVlO1xuIFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdGlmIChza2lwcGVkX3pvbmUpIHtcbkBAIC00Nzg1LDggKzQ4NjgsMTAgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRza2lwcGVkICs9IHNraXBwZWRfem9uZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoIXJlbWFpbmluZyB8fCBpc29sYXRlZCBcdTAwM2U9IE1JTl9MUlVfQkFUQ0gpXG4rXHRcdGlmICghcmVtYWluaW5nIHx8IGlzb2xhdGVkIFx1MDAzZT0gTUlOX0xSVV9CQVRDSCkge1xuK1x0XHRcdGVhcmx5X3N0b3AgPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRpdGVtID0gUEdTQ0FOX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xuQEAgLTQ3OTcsNiArNDg4MiwxMyBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0c2Nhbm5lZCwgc2tpcHBlZCwgaXNvbGF0ZWQsXG4gXHRcdFx0XHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XG4gXG4rXHQvKlxuK1x0ICogSWYgd2UgZGlkbid0IHN0b3AgZWFybHksIGFsbCByZWNsYWltYWJsZSBmb2xpb3MgaW4gdGhlIGN1cnJlbnRcbitcdCAqIGdlbmVyYXRpb24gaGF2ZSBiZWVuIHNjYW5uZWQuIFdlIGFyZSBleGhhdXN0ZWQgaWYgdGhpcyBpcyB0aGUgbGFzdFxuK1x0ICogcmVjbGFpbWFibGUgZ2VuZXJhdGlvbi5cbitcdCAqL1xuK1x0KmV4aGF1c3RlZCA9ICFlYXJseV9zdG9wIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdICsgTUlOX05SX0dFTlMgPT0gbHJ1Z2VuLVx1MDAzZW1heF9zZXE7XG4gXHQqaXNvbGF0ZWRwID0gaXNvbGF0ZWQ7XG4gXHRyZXR1cm4gc2Nhbm5lZDtcbiB9XG5AQCAtNDgyNCw1MSArNDkxNiw5MCBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIHtcbiBcdHN0cnVjdCBjdHJsX3BvcyBzcCwgcHYgPSB7fTtcbitcdGludCBhbm9uX2dhaW4sIGZpbGVfZ2FpbjtcbiBcbiBcdGlmIChzd2FwcGluZXNzIFx1MDAzYz0gTUlOX1NXQVBQSU5FU1MgKyAxKVxuIFx0XHRyZXR1cm4gTFJVX0dFTl9GSUxFO1xuIFxuIFx0aWYgKHN3YXBwaW5lc3MgXHUwMDNlPSBNQVhfU1dBUFBJTkVTUylcbiBcdFx0cmV0dXJuIExSVV9HRU5fQU5PTjtcbitcbitcdC8qXG4rXHQgKiBBcHBseSBhIHF1YWRyYXRpYyBib29zdCBiYXNlZCBvbiB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgbmV1dHJhbFxuK1x0ICogYmFsYW5jZSBwb2ludCAoc3dhcHBpbmVzcyA9IE1BWF9TV0FQUElORVNTIC8gMikuXG4rXHQgKlxuK1x0ICogQSBsaW5lYXIgd2VpZ2h0IGlzIGVhc2lseSBvdmVyd2hlbG1lZCBieSBoaXN0b3JpY2FsIHJlZmF1bHQgY29zdFxuK1x0ICogd2hlbiBzd2FwcGluZXNzIGRldmlhdGVzIGZyb20gbmV1dHJhbC4gVGhlIHF1YWRyYXRpYyBzY2FsaW5nXG4rXHQgKiBhbXBsaWZpZXMgdGhlIHdlaWdodCBvZiB0aGUgcHJlZmVycmVkIHR5cGUgc21vb3RobHkuXG4rXHQgKi9cbitcdGlmIChzd2FwcGluZXNzIFx1MDAzYyBNQVhfU1dBUFBJTkVTUyAvIDIpIHtcbitcdFx0aW50IGRlbHRhID0gKE1BWF9TV0FQUElORVNTIC8gMikgLSBzd2FwcGluZXNzO1xuK1x0XHRpbnQgYm9vc3QgPSAoZGVsdGEgKiBkZWx0YSkgXHUwMDNlXHUwMDNlIDQ7XG4rXG4rXHRcdGFub25fZ2FpbiA9IHN3YXBwaW5lc3M7XG4rXHRcdGZpbGVfZ2FpbiA9IChNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MpICsgYm9vc3Q7XG4rXHR9IGVsc2Uge1xuK1x0XHRpbnQgZGVsdGEgPSBzd2FwcGluZXNzIC0gKE1BWF9TV0FQUElORVNTIC8gMik7XG4rXHRcdGludCBib29zdCA9IChkZWx0YSAqIGRlbHRhKSBcdTAwM2VcdTAwM2UgNDtcbitcbitcdFx0YW5vbl9nYWluID0gc3dhcHBpbmVzcyArIGJvb3N0O1xuK1x0XHRmaWxlX2dhaW4gPSBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3M7XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxuIFx0ICogd2hpY2ggdHlwZSB0byBzY2FuLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIGFub25fZ2FpbiwgXHUwMDI2c3ApO1xuK1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBmaWxlX2dhaW4sIFx1MDAyNnB2KTtcbiBcbiBcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShpbnQgc3dhcHBpbmVzcylcbit7XG4rXHRyZXR1cm4gc3dhcHBpbmVzcyA9PSBNSU5fU1dBUFBJTkVTUyB8fFxuK1x0ICAgICAgIHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MsXG4gXHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkLFxuIFx0XHRcdCAgaW50ICppc29sYXRlX3R5cGUsIGludCAqaXNvbGF0ZV9zY2FubmVkKVxuIHtcbi1cdGludCBpO1xuLVx0aW50IHRvdGFsX3NjYW5uZWQgPSAwO1xuK1x0Ym9vbCB0eXBlX2ZhbGxiYWNrX2FsbG93ZWQgPSAhaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShzd2FwcGluZXNzKTtcbiBcdGludCB0eXBlID0gZ2V0X3R5cGVfdG9fc2NhbihscnV2ZWMsIHN3YXBwaW5lc3MpO1xuK1x0aW50IHRvdGFsX3NjYW5uZWQgPSAwLCBzY2FubmVkLCB0aWVyO1xuK1x0Ym9vbCBleGhhdXN0ZWQsIHRyaWVkID0gZmFsc2U7XG4gXG4tXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7XG4tXHRcdGludCBzY2FubmVkO1xuLVx0XHRpbnQgdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xuK3JldHJ5OlxuK1x0dGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xuK1x0c2Nhbm5lZCA9IHNjYW5fZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsXG4rXHRcdFx0ICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQsIFx1MDAyNmV4aGF1c3RlZCk7XG4gXG4tXHRcdHNjYW5uZWQgPSBzY2FuX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLFxuLVx0XHRcdFx0ICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQpO1xuK1x0dG90YWxfc2Nhbm5lZCArPSBzY2FubmVkO1xuK1x0aWYgKCppc29sYXRlZCkge1xuK1x0XHQqaXNvbGF0ZV90eXBlID0gdHlwZTtcbitcdFx0Kmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7XG4rXHRcdHJldHVybiB0b3RhbF9zY2FubmVkO1xuK1x0fVxuIFxuLVx0XHR0b3RhbF9zY2FubmVkICs9IHNjYW5uZWQ7XG4tXHRcdGlmICgqaXNvbGF0ZWQpIHtcbi1cdFx0XHQqaXNvbGF0ZV90eXBlID0gdHlwZTtcbi1cdFx0XHQqaXNvbGF0ZV9zY2FubmVkID0gc2Nhbm5lZDtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHQvKlxuLVx0XHQgKiBJZiBzY2FubmVkIFx1MDAzZSAwIGFuZCBpc29sYXRlZCA9PSAwLCBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlXG4tXHRcdCAqIG90aGVyIHR5cGUsIGFzIHRoaXMgdHlwZSByZW1haW5zIHN1ZmZpY2llbnQuIEZhbGxpbmcgYmFja1xuLVx0XHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFzY2FubmVkKVxuLVx0XHRcdHR5cGUgPSAhdHlwZTtcbitcdC8qXG4rXHQgKiBXZSBhcmUgcnVubmluZyBvdXQgb2YgdGhlIGN1cnJlbnQgcmVjbGFpbSB0eXBlLiBGYWxsIGJhY2sgdG9cbitcdCAqIHRoZSBvdGhlciB0eXBlIGlmIGFsbG93ZWQuXG4rXHQgKi9cbitcdGlmIChleGhhdXN0ZWQgXHUwMDI2XHUwMDI2IHR5cGVfZmFsbGJhY2tfYWxsb3dlZCkge1xuK1x0XHR0eXBlID0gIXR5cGU7XG4rXHRcdHR5cGVfZmFsbGJhY2tfYWxsb3dlZCA9IGZhbHNlO1xuK1x0XHRnb3RvIHJldHJ5O1xuK1x0fVxuK1x0LypcbitcdCAqIFdlIGFyZSBub3QgZXhoYXVzdGVkLCBidXQgZmFpbGVkIHRvIGlzb2xhdGUgYW55IGZvbGlvcyBkdWUgdG9cbitcdCAqIHJhY2VzLiBHaXZlIHRoaXMgdHlwZSBvbmUgbW9yZSBjaGFuY2UgdG8gYXZvaWQgYSBsYXJnZXIgbG9vcC5cbitcdCAqL1xuK1x0aWYgKCFleGhhdXN0ZWQgXHUwMDI2XHUwMDI2ICF0cmllZCkge1xuK1x0XHR0cmllZCA9IHRydWU7XG4rXHRcdGdvdG8gcmV0cnk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcbkBAIC00OTcwLDIxICs1MTAxLDY3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0cmV0dXJuIHNjYW5uZWQ7XG4gfVxuIFxuK3N0YXRpYyBib29sIGxydV9nZW5faW1iYWxhbmNlZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcbitcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbit7XG4rXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbitcdHVuc2lnbmVkIGxvbmcgeW91bmcgPSAwLCBvbGQgPSAwLCBsYWcgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBpbmFjdGl2ZV9yYXRpbywgZ2I7XG4rXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuK1xuK1x0Lyogd2Ugc3RpbGwgaGF2ZSBlbm91Z2ggZ2VuZXJhdGlvbnMgdG8gcmVjbGFpbSAqL1xuK1x0aWYgKG1pbl9zZXFbdHlwZV0gKyBNSU5fTlJfR0VOUyBcdTAwM2MgbWF4X3NlcSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LypcbitcdCAqIFRyaWdnZXIgYWdpbmcgaWYgdGhlIHByZWZlcnJlZCB0eXBlIGlzIHJ1bm5pbmcgbG93IG9uIHJlY2xhaW1hYmxlXG4rXHQgKiBmb2xpb3MsIHByb3ZpZGVkIHRoZSBnZW5lcmF0aW9uIGxhZyBvZiB0aGUgb3RoZXIgdHlwZSByZW1haW5zIHNtYWxsXG4rXHQgKiBlbm91Z2ggdGhhdCBpbmNfbWluX3NlcSgpIGludHJvZHVjZXMgbmVnbGlnaWJsZSBvdmVyaGVhZFxuK1x0ICovXG4rXHRmb3IgKHVuc2lnbmVkIGxvbmcgc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFx1MDAzYz0gbWF4X3NlcTsgc2VxKyspIHtcbitcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gbHJ1dmVjX2dlbl9zaXplKGxydWdlbiwgdHlwZSwgc2VxKTtcbitcbitcdFx0aWYgKHNlcSArIE1JTl9OUl9HRU5TIFx1MDAzZSBtYXhfc2VxKVxuK1x0XHRcdHlvdW5nICs9IHNpemU7XG4rXHRcdGVsc2VcbitcdFx0XHRvbGQgKz0gc2l6ZTtcbitcdH1cbitcdGlmIChtaW5fc2VxWyF0eXBlXSArIE1BWF9OUl9HRU5TID09IG1heF9zZXEgKyAxKVxuK1x0XHRsYWcgKz0gbHJ1dmVjX2dlbl9zaXplKGxydWdlbiwgIXR5cGUsIG1pbl9zZXFbIXR5cGVdKTtcbitcbitcdC8qXG4rXHQgKiBCb3Jyb3cgdGhlIGFkYXB0aXZlIHJhdGlvIGZyb20gaW5hY3RpdmVfaXNfbG93KCksIGFuZCBzY2FsZVxuK1x0ICogaXQgYnkgc3FydChNQVhfTlJfR0VOUykgdG8gbWFrZSBhZ2luZyBsZXNzIGFnZ3Jlc3NpdmVcbitcdCAqL1xuK1x0Z2IgPSAoeW91bmcgKyBvbGQpIFx1MDAzZVx1MDAzZSAoMzAgLSBQQUdFX1NISUZUKTtcbitcdGluYWN0aXZlX3JhdGlvID0gZ2IgPyBpbnRfc3FydCgxMCAqIGdiICogTUFYX05SX0dFTlMpIDogTUFYX05SX0dFTlM7XG4rXHRyZXR1cm4geW91bmcgXHUwMDNlIG9sZCAqIGluYWN0aXZlX3JhdGlvIFx1MDAyNlx1MDAyNiAobGFnIFx1MDAzYyBNQVhfTFJVX0JBVENIIHx8XG4rXHQgICAgICAgKGlzX2V4dHJlbWVfc3dhcHBpbmVzcyhzd2FwcGluZXNzKSBcdTAwMjZcdTAwMjYgc2MtXHUwMDNlcHJpb3JpdHkgXHUwMDNlIDIpKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgc2hvdWxkX3J1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcbiBcdFx0XHQgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4rXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbiBcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4gXG4tXHQvKiBoYXZlIHRvIHJ1biBhZ2luZywgc2luY2UgZXZpY3Rpb24gaXMgbm90IHBvc3NpYmxlIGFueW1vcmUgKi9cbi1cdGlmIChldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSArIE1JTl9OUl9HRU5TIFx1MDAzZSBtYXhfc2VxKVxuK1x0LyogcnVuIGFnaW5nIGlmIHRoZSBwcmVmZXJyZWQgdHlwZSBpcyBleGhhdXN0ZWQgKi9cbitcdGlmIChtaW5fc2VxW3R5cGVdICsgTUlOX05SX0dFTlMgXHUwMDNlIG1heF9zZXEpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0LyogdHJ5IHRvIGF2b2lkIGFnaW5nLCBkbyBnZW50bGUgcmVjbGFpbSBhdCB0aGUgZGVmYXVsdCBwcmlvcml0eSAqL1xuLVx0aWYgKHNjLVx1MDAzZXByaW9yaXR5ID09IERFRl9QUklPUklUWSlcbitcdC8qXG4rXHQgKiBUcnkgdG8gYXZvaWQgYWdpbmcgYnkgZG9pbmcgZ2VudGxlIHJlY2xhaW0gYXQgdGhlIGRlZmF1bHRcbitcdCAqIHByaW9yaXR5LiBTa2lwIGdlbnRsZSByZWNsYWltIGZvciBleHRyZW1lIHN3YXBwaW5lc3MuXG4rXHQgKi9cbitcdGlmIChzYy1cdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkgXHUwMDI2XHUwMDI2ICFpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIGJldHRlciB0byBydW4gYWdpbmcgZXZlbiB0aG91Z2ggZXZpY3Rpb24gaXMgc3RpbGwgcG9zc2libGUgKi9cbi1cdHJldHVybiBldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSArIE1JTl9OUl9HRU5TID09IG1heF9zZXE7XG4rXHRpZiAoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdC8qIFJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgc2V2ZXJlbHkgaW1iYWxhbmNlZCBhY3Jvc3MgZ2VucyAqL1xuK1x0cmV0dXJuIGxydV9nZW5faW1iYWxhbmNlZChscnV2ZWMsIG1heF9zZXEsIHNjLCB0eXBlLCBzd2FwcGluZXNzKTtcbiB9XG4gXG4gc3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQxOjQ5LjgxNTAwNTg4NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MDI4NzQ1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNR0xSVSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0J3MgbWVzc2luZyB3aXRoIGBtbS92bXNjYW4uY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCdzIGFib3V0IE1HTFJVIOKAkyBNdWx0aS1HZW4gTFJVLiBMZXQncyBnZXQgcmlnaHQgaW50byB0aGUgc3BlY2lmaWNzLiBJdCdzIHRvdWNoaW5nIGEgbG90IG9mIGtleSBmdW5jdGlvbnM6IGBmb2xpb19pbmNfZ2VuYCwgYGluY19taW5fc2VxYCwgd2hpY2ggSSB1bmRlcnN0YW5kIGFyZSBmdW5kYW1lbnRhbCB0byB0aGUgZ2VuLWJhc2VkIExSVSBsb2dpYzsgYHNjYW5fZm9saW9zYCwgYGdldF90eXBlX3RvX3NjYW5gLCBhbmQgYGlzb2xhdGVfZm9saW9zYCAtLSBhbGwgY3J1Y2lhbCBmb3IgdGhlIHNjYW5uaW5nIHByb2Nlc3M7IGFuZCBgc2hvdWxkX3J1bl9hZ2luZ2AsIHJlbGF0ZWQgdG8gdGhlIGFnaW5nIG1lY2hhbmlzbXMuIFBsdXMsIGl0J3MgYWRkaW5nIHRoZXNlIG5ldyBmdW5jdGlvbnMsIGBscnVfZ2VuX2ltYmFsYW5jZWRgLCBgbHJ1dmVjX2dlbl9zaXplYCwgYGZsdXNoX2xydV9iYXRjaGAsIGFuZCBgaXNfZXh0cmVtZV9zd2FwcGluZXNzYCwgd2hpY2ggc3VnZ2VzdHMgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgYmFsYW5jaW5nIGFuZCBmbHVzaCBiZWhhdmlvciwgYW5kIGhvdyB3ZSBoYW5kbGUgZXh0cmVtZSBzd2FwcGluZy5cblxuRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSXMgTUdMUlUgZW5hYmxlZCBieSBkZWZhdWx0PyBPciBpcyB0aGVyZSBzb21lIHNwZWNpZmljIGNvbmZpZyBvcHRpb24gSSBuZWVkIHRvIGxvb2sgZm9yPyBJIGNhbid0IGp1c3QgZGl2ZSBpbnRvIHRoZSBjb2RlIGJsaW5kLiBJJ2xsIGhpdCBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3IgYExSVV9HRU5gIGluIGBtbS9LY29uZmlnYC4gVGhhdCdsbCBnaXZlIG1lIHRoZSBlbmFibGluZyBjb25kaXRpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgZmVlbCBmb3IgdGhlIHBhdGNoJ3Mgc2lnbmlmaWNhbmNlIGFuZCBpbnRlbmRlZCB1c2UgY2FzZS4gVGhpcyBnaXZlcyBhIGdyZWF0IG92ZXJ2aWV3IGFuZCB3aWxsIGhlbHAgdG8gZ3VpZGUgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDUyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDE6NTUuNjE3ODgzNzQ2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjM2ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzkyPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG4tLVxcbm1tL0tjb25maWctMTQwMi0jIG11bHRpLWdlbiBMUlUge1xcbm1tL0tjb25maWc6MTQwMzpjb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQwNC1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDExLVxcbm1tL0tjb25maWc6MTQxMjpjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDEzLVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDE3LVxcbm1tL0tjb25maWc6MTQxODpjb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQxOS1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MjYtXFxubW0vS2NvbmZpZzoxNDI3OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbm1tL0tjb25maWctMTQyOC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQxOjU1LjY2MzEyNTYzNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODI2ODkzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuT2theSwgc28gYExSVV9HRU5gIGlzIHRoZSBwaWVjZSBvZiB0aGUgY29uZmlnIHdlJ3JlIGZvY3VzaW5nIG9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBzZXR0aW5ncyBgTFJVX0dFTmAgcmVsaWVzIG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpcyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgYW55IHBvdGVudGlhbCBjYXNjYWRpbmcgZWZmZWN0cyBvZiBjaGFuZ2VzIHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Nzg5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDE6NTguNTQ1ODE3Mzg2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODMxMDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzkyPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG4tLVxcbm1tL0tjb25maWctMTQwMi0jIG11bHRpLWdlbiBMUlUge1xcbm1tL0tjb25maWc6MTQwMzpjb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQwNC1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDExLVxcbm1tL0tjb25maWc6MTQxMjpjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDEzLVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDE3LVxcbm1tL0tjb25maWc6MTQxODpjb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQxOS1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MjYtXFxubW0vS2NvbmZpZzoxNDI3OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbm1tL0tjb25maWctMTQyOC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQxOjU4LjU5MDY1NTE3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTk1Njk5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipVbnBhY2tpbmcgdGhlIGBMUlVfR0VOYCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgYmVmb3JlIEkgZGl2ZSBpbiwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IGBMUlVfR0VOYCBhY3R1YWxseSByZWxpZXMgb24uIEkgY2FuJ3QganVzdCBzdGFydCB0d2Vha2luZyBvciBhbmFseXppbmcgaXQgd2l0aG91dCB1bmRlcnN0YW5kaW5nIGl0cyBwbGFjZSBpbiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuIFdoYXQgb3RoZXIgY29tcG9uZW50cywgbGlicmFyaWVzLCBvciBkYXRhIHN0cnVjdHVyZXMgZG9lcyB0aGlzIHRoaW5nIGRlcGVuZCBvbj8gQXJlIHRoZXJlIGFueSB1cHN0cmVhbSBlZmZlY3RzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIHNwZWNpZmljIHZlcnNpb25zIG9yIGNvbmZpZ3VyYXRpb25zPyBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmN5IHRyZWUgaXMgZnVuZGFtZW50YWwgYmVmb3JlIGFueSBzZXJpb3VzIGFuYWx5c2lzIG9yIG1vZGlmaWNhdGlvbiBjYW4gaGFwcGVuLiBJIG5lZWQgdG8gZW5zdXJlIEkgZG9uJ3QgaW50cm9kdWNlIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzIGJ5LCBmb3IgZXhhbXBsZSwgbWlzc2luZyBhIGNyaXRpY2FsIGxpYnJhcnkgdGhhdCdzIHVzZWQgc29tZXdoZXJlLiBJdCBhbGwgaGFuZ3MgdG9nZXRoZXIsIHNvIGxldCdzIHN0YXJ0IHdpdGggYSBzb2xpZCBmb3VuZGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTY1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDI6MDIuMTEwMjI4MzM2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQwMDpcXHRcXHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXFxuMTQwMTpcXHRcXG4xNDAyOlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTQwMzpcXHRjb25maWcgTFJVX0dFTlxcbjE0MDQ6XFx0XFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4xNDA1OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTQwNjpcXHRcXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxuMTQwNzpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcXG4xNDA4OlxcdFxcdGhlbHBcXG4xNDA5OlxcdFxcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXFxuMTQxMDpcXHRcXHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cXG4xNDExOlxcdFxcbjE0MTI6XFx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbjE0MTM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuMTQxNDpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDE1OlxcdFxcdGhlbHBcXG4xNDE2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxcbjE0MTc6XFx0XFxuMTQxODpcXHRjb25maWcgTFJVX0dFTl9TVEFUU1xcbjE0MTk6XFx0XFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbjE0MjA6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQyMTpcXHRcXHRoZWxwXFxuMTQyMjpcXHRcXHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xcbjE0MjM6XFx0XFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxcbjE0MjQ6XFx0XFxuMTQyNTpcXHRcXHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxcbjE0MjY6XFx0XFxuMTQyNzpcXHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG4xNDI4OlxcdFxcdGRlZl9ib29sIHlcXG4xNDI5OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTiBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDI6MDIuMTEwMzM5NDM2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTczMzMyNTQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIE1HTFJVJ3MgQ29yZSBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIHNvIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAg4oCTIHRob3NlIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZ290IGl0LiBOb3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1hcCBvdXQgd2hpY2ggZnVuY3Rpb25zIGhhdmUgYmVlbiB0b3VjaGVkIGluIHRoaXMgY2hhbmdlLCBzcGVjaWZpY2FsbHkuXG5cbkxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGBmb2xpb19pbmNfZ2VuYCwgYF9fZm9saW9faW5jX2dlbmAsIGBpbmNfbWluX3NlcWAsIGBzY2FuX2ZvbGlvc2AsIGBnZXRfdHlwZV90b19zY2FuYCwgYGlzb2xhdGVfZm9saW9zYCwgYGV2aWN0X2ZvbGlvc2AsIGBscnVfZ2VuX2ltYmFsYW5jZWRgLCBhbmQgYHNob3VsZF9ydW5fYWdpbmdgLiBUaGVzZSBhcmUgYWxsIHByZXR0eSBjcml0aWNhbCDigJMgdGhlIGhlYXJ0IG9mIE1HTFJVJ3MgbWVtb3J5IG1hbmFnZW1lbnQsIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSB0byBiZSByZWFjaGVkIGR1cmluZyBzdGFuZGFyZCBvcGVyYXRpb24uIERlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBzZWUgd2hhdCB3ZSBjYW4gc2hha2UgbG9vc2UuXG5cbk5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50IGVudHJ5IHBvaW50cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSAqZGlyZWN0bHkqIGFjY2Vzc2libGUgZnJvbSBlbHNld2hlcmUsIGlkZWFsbHkgbm9uLXN0YXRpYyBvbmVzLiBBaGEsIGl0IHNlZW1zIHRoZXkgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBpcyB0eXBpY2FsbHkgZ29pbmcgdG8gbGltaXQgZGlyZWN0IGZ1enppbmcgb3Bwb3J0dW5pdGllcy4gTm90IGEgZGVhbCBicmVha2VyLCBidXQgaXQgbWVhbnMgSSBuZWVkIHRvIGFkanVzdCBteSBhcHByb2FjaC4gVGhlIG5leHQgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZSB0aGF0IGNhbGwgdGhlc2UgY29yZSBmdW5jdGlvbnM/IFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZW5lcmd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODMxLCJPdXRwdXRUb2tlbnMiOjYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDI6MDcuODQzNjY3Njk5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgxOTA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIoaW5jX21pbl9zZXF8c2Nhbl9mb2xpb3N8Z2V0X3R5cGVfdG9fc2Nhbnxpc29sYXRlX2ZvbGlvc3xldmljdF9mb2xpb3N8c2hvdWxkX3J1bl9hZ2luZylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9Mjc5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19leGVjX2ZpbGVfZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4NC1cXG5tbS92bXNjYW4uYzoyODU6LyogU2VlIGdldF90eXBlX3RvX3NjYW4oKTogdGhlc2UgdmFsdWVzIGFsd2F5cyBzZWxlY3QgRklMRSBvciBBTk9OICovXFxubW0vdm1zY2FuLmMtMjg2LXN0YXRpYyBpbmxpbmUgYm9vbCBpc19leHRyZW1lX3N3YXBwaW5lc3MoaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYz0zOTMzPXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9scnVfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqKmJhdGNoX2VuZCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5NDUtXFxubW0vdm1zY2FuLmM6Mzk0NjpzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcXG5tbS92bXNjYW4uYy0zOTQ3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwMjEtXFxubW0vdm1zY2FuLmM6NDAyMjpzdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG5tbS92bXNjYW4uYy00MDIzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwNzQ9c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00MDk1LVxcbm1tL3Ztc2Nhbi5jOjQwOTY6XFx0XFx0aWYgKGluY19taW5fc2VxKGxydXZlYywgdHlwZSwgc3dhcHBpbmVzcykpXFxubW0vdm1zY2FuLmMtNDA5Ny1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ3ODI9c3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDgwNS1cXG5tbS92bXNjYW4uYzo0ODA2OnN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxubW0vdm1zY2FuLmMtNDgwNy1cXHRcXHQgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCB0eXBlLCBpbnQgdGllcixcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ4OTY9c3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5MTUtXFxubW0vdm1zY2FuLmM6NDkxNjpzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG5tbS92bXNjYW4uYy00OTE3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ5NTk9c3RhdGljIGlubGluZSBib29sIGlzX3NpbmdsZV90eXBlX3JlY2xhaW0oaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00OTY0LVxcbm1tL3Ztc2Nhbi5jOjQ5NjU6c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00OTY2LVxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLFxcbi0tXFxubW0vdm1zY2FuLmMtNDk3MC1cXHRib29sIHR5cGVfZmFsbGJhY2tfYWxsb3dlZCA9ICFpc19zaW5nbGVfdHlwZV9yZWNsYWltKHN3YXBwaW5lc3MpO1xcbm1tL3Ztc2Nhbi5jOjQ5NzE6XFx0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNDk3Mi1cXHRpbnQgdG90YWxfc2Nhbm5lZCA9IDAsIHNjYW5uZWQsIHRpZXI7XFxuLS1cXG5tbS92bXNjYW4uYy00OTc2LVxcdHRpZXIgPSBnZXRfdGllcl9pZHgobHJ1dmVjLCB0eXBlKTtcXG5tbS92bXNjYW4uYzo0OTc3OlxcdHNjYW5uZWQgPSBzY2FuX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLFxcbm1tL3Ztc2Nhbi5jLTQ5NzgtXFx0XFx0XFx0ICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQsIFxcdTAwMjZleGhhdXN0ZWQpO1xcbi0tXFxubW0vdm1zY2FuLmMtNTAwNy1cXG5tbS92bXNjYW4uYzo1MDA4OnN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL3Ztc2Nhbi5jLTUwMDktXFx0XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtNTAyNy1cXHQvKiBJbiBjYXNlIGZvbGlvIGRlbGV0aW9uIGxlZnQgZW1wdHkgb2xkIGdlbnMsIGZsdXNoIHRoZW0gKi9cXG5tbS92bXNjYW4uYzo1MDI4OlxcdHRyeV90b19pbmNfbWluX3NlcShscnV2ZWMsIHN3YXBwaW5lc3MpO1xcbm1tL3Ztc2Nhbi5jLTUwMjktXFxubW0vdm1zY2FuLmM6NTAzMDpcXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcXG5tbS92bXNjYW4uYy01MDMxLVxcdFxcdFxcdFxcdCBcXHUwMDI2bGlzdCwgXFx1MDAyNmlzb2xhdGVkLCBcXHUwMDI2dHlwZSwgXFx1MDAyNnR5cGVfc2Nhbm5lZCk7XFxuLS1cXG5tbS92bXNjYW4uYy01MDM1LVxcdGlmIChzY2FubmVkKVxcbm1tL3Ztc2Nhbi5jOjUwMzY6XFx0XFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTAzNy1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxMDQ9c3RhdGljIGJvb2wgbHJ1X2dlbl9pbWJhbGFuY2VkKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNTExOC1cXHQgKiBmb2xpb3MsIHByb3ZpZGVkIHRoZSBnZW5lcmF0aW9uIGxhZyBvZiB0aGUgb3RoZXIgdHlwZSByZW1haW5zIHNtYWxsXFxubW0vdm1zY2FuLmM6NTExOTpcXHQgKiBlbm91Z2ggdGhhdCBpbmNfbWluX3NlcSgpIGludHJvZHVjZXMgbmVnbGlnaWJsZSBvdmVyaGVhZFxcbm1tL3Ztc2Nhbi5jLTUxMjAtXFx0ICovXFxuLS1cXG5tbS92bXNjYW4uYy01MTQxLVxcbm1tL3Ztc2Nhbi5jOjUxNDI6c3RhdGljIGJvb2wgc2hvdWxkX3J1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcXG5tbS92bXNjYW4uYy01MTQzLVxcdFxcdFxcdCAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxcbm1tL3Ztc2Nhbi5jLTUxNDQte1xcbm1tL3Ztc2Nhbi5jOjUxNDU6XFx0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTE0Ni1cXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xcbi0tXFxubW0vdm1zY2FuLmM9NTIzMz1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI0OS1cXG5tbS92bXNjYW4uYzo1MjUwOlxcdFxcdGlmIChzaG91bGRfcnVuX2FnaW5nKGxydXZlYywgbWF4X3NlcSwgc2MsIHN3YXBwaW5lc3MpKSB7XFxubW0vdm1zY2FuLmMtNTI1MS1cXHRcXHRcXHRpZiAodHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZmFsc2UpKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI1Ni1cXHRcXHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcXG5tbS92bXNjYW4uYzo1MjU3OlxcdFxcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcXG5tbS92bXNjYW4uYy01MjU4LVxcdFxcdGlmICghZGVsdGEpXFxuLS1cXG5tbS92bXNjYW4uYz01ODYwPXN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNTg4MC1cXHRcXHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTg4MTpcXHRcXHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXFxubW0vdm1zY2FuLmMtNTg4Mi1cXHRcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDI6MDcuODkxNDkyNjk3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NDY1Mjk4ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBMUlUgVmVjdG9yIFNocmlua2FnZSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYCwgYW5kIEkgc2VlIHRoZXkgY2FsbCBzb21lIG90aGVyIGZ1bmN0aW9ucy4gTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggb2YgYHRyeV90b19zaHJpbmtfbHJ1dmVjYC4gV2hlcmUgZG9lcyAqaXQqIGdldCBjYWxsZWQ/IFVuZGVyc3RhbmRpbmcgaXRzIHVwc3RyZWFtIGRlcGVuZGVuY2llcyBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IHRoZSBiaWdnZXIgcGljdHVyZSBvZiBob3cgdGhpcyBMUlUgdmVjdG9yIHNocmlua2FnZSBpcyBpbml0aWF0ZWQgd2l0aGluIHRoaXMgc3lzdGVtLiBJdCdzIGEgY2xhc3NpYyBkZWJ1Z2dpbmcgYW5kIHBlcmZvcm1hbmNlIGFuYWx5c2lzIHRlY2huaXF1ZTogZm9sbG93IHRoZSBjYWxsIGNoYWluIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gTGV0J3Mgc2VlIHdoYXQncyBjYWxsaW5nIHRoYXQgZnVuY3Rpb24sIHNoYWxsIHdlPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBvcGVyYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNjgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0MjoxMy44MzgwMjYwOTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDA4NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTUxOTg9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMzItICovXFxubW0vdm1zY2FuLmM6NTIzMzpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyMzQte1xcbi0tXFxubW0vdm1zY2FuLmM9NTI3OD1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyOTctXFxubW0vdm1zY2FuLmM6NTI5ODpcXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUyOTktXFxuLS1cXG5tbS92bXNjYW4uYz01Mzg5PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTQwMS1cXG5tbS92bXNjYW4uYzo1NDAyOlxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01NDAzLVxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDI6MTMuODgzNDQ0NzAyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTg2OTc1NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgTFJVIFNocmlua2FnZSBQcm9jZXNzKipcblxuUmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyB3aXRoaW4gdGhpcyBMUlUgKExlYXN0IFJlY2VudGx5IFVzZWQpIGNhY2hlIHNocmlua2luZyBtZWNoYW5pc20uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGFuZCBgc2hyaW5rX29uZWAgYm90aCBzZWVtIHRvIGV2ZW50dWFsbHkgdHJpZ2dlciBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLiBUaGF0IHN1Z2dlc3RzIGEgc2hhcmVkIHJlc3BvbnNpYmlsaXR5LCBwb3RlbnRpYWxseSBhIGNlbnRyYWxpemVkIGNvbnRyb2wgcG9pbnQgZm9yIHRoZSBhY3R1YWwgc2hyaW5raW5nIG9wZXJhdGlvbi5cblxuTm93LCB3aGVyZSBkb2VzIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIG9yaWdpbmF0ZT8gSXQncyBrZXkgdG8gdHJhY2UgaXRzIGNhbGwgc3RhY2suIE15IGh1bmNoIGlzIHRoYXQgaXQncyBwcm9iYWJseSBjYWxsZWQgZnJvbSBgc2hyaW5rX2xydXZlY2Agb3Igc29tZXRoaW5nIGFuYWxvZ291cy4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGNvbm5lY3Rpb24uIEtub3dpbmcgd2hlcmUgdGhlIHNocmlua2luZyBwcm9jZXNzIGJlZ2lucyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGJlaGF2aW91ciBhbmQgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWlzYXRpb24uIFRpbWUgdG8gZGlnIGRlZXBlciBhbmQgc2VlIGlmIG15IGFzc3VtcHRpb24gaG9sZHMgdHJ1ZS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNhbGxpbmcgY29udGV4dCBvZiBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCB0byBjb25maXJtIHRoZSBpbml0aWFsIHRyaWdnZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzU3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDI6MTcuOTgyMTQ0NTM2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA4OTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX3Nocmlua19scnV2ZWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTMxOT1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzODgtXFxubW0vdm1zY2FuLmM6NTM4OTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01MzkwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYxMzM9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxMzctXFxubW0vdm1zY2FuLmM6NjEzODpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02MTM5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYxNTA9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjE2MS1cXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFxcdTAwMjZcXHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XFxubW0vdm1zY2FuLmM6NjE2MjpcXHRcXHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNjE2My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDI6MTguMDI3MjM5MDk0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTA5MjYzNjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgbW0vdm1zY2FuLmNgIGZvciBNR0xSVSBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbW0vdm1zY2FuLmNgIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIG1vc3QgcmVsZXZhbnQsIHBhcnRpY3VsYXJseSBmb3IgTUdMUlUuIFRoZSBmaXJzdCB0aGluZyBJIHNwb3QgaXMgYHNocmlua19scnV2ZWNgLCBidXQgd2FpdCwgdGhhdCdzIHN0YXRpYyEgVGhhdCBwcm9iYWJseSBtZWFucyBpdCdzIG5vdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBgRm9jdXNTeW1ib2xzYCwgYXMgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljIGVudHJ5IHBvaW50cy5cblxuTGV0J3Mgc2Vl4oCmIE9rYXksIEkgc2VlIGBzaHJpbmtfbm9kZWAsIGBzaHJpbmtfem9uZXNgLCBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgLCBhbmQgYGtzd2FwZGAg4oCTIGFsbCBjbGFzc2ljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgY2F1dGlvbiBhZ2FpbnN0IGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgYmlhc2luZyB0aGUgdGVzdCBkaXN0cmlidXRpb24sIHNvIEkgbmVlZCB0byBiZSBjYXJlZnVsIGhlcmUuIElmIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgYXJlIGhhcHBlbmluZyAqaW5zaWRlKiBvbmUgb2YgdGhlc2UgYWxyZWFkeSBoZWF2aWx5IHNjcnV0aW5pemVkIGZ1bmN0aW9ucywgbGlrZSBgc2hyaW5rX2xydXZlY2AgZm9yIGV4YW1wbGUsIHRoZW4gaW5jbHVkaW5nIHRoZW0gaW4gYEZvY3VzU3ltYm9sc2AgbWlnaHQgbm90IGJlIHRoZSBiZXN0IGFwcHJvYWNoLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiBpZGVudGlmeWluZyBzcGVjaWZpYyBlbnRyeSBwb2ludHMgcmVsYXRlZCB0byBNR0xSVSdzIHVuaXF1ZSBmdW5jdGlvbmFsaXRpZXMuIEkgbmVlZCB0byBjaGVjayBhbmQgZW5zdXJlIHRoYXQgdGhlcmUgYXJlIHNwZWNpZmljIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggTUdMUlUncyBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MzIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDI6NTUuMTM2NTA4MzQ4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTI4MTQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc0NCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vdm1zY2FuLmM9ODQ2PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04NTgtICovXFxubW0vdm1zY2FuLmM6ODU5OnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG5tbS92bXNjYW4uYy04NjAte1xcbi0tXFxubW0vdm1zY2FuLmMtODgwLSNlbHNlXFxubW0vdm1zY2FuLmM6ODgxOnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG5tbS92bXNjYW4uYy04ODIte1xcbi0tXFxubW0vdm1zY2FuLmM9ODg3PXN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vdm1zY2FuLmMtOTExLVxcbm1tL3Ztc2Nhbi5jOjkxMjpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpIHtcXG5tbS92bXNjYW4uYy05MTMtXFx0XFx0aWYgKCFyZWZlcmVuY2VkX3B0ZXMpXFxuLS1cXG5tbS92bXNjYW4uYy05MTUtXFxubW0vdm1zY2FuLmM6OTE2OlxcdFxcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcXG5tbS92bXNjYW4uYy05MTctXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9MjI5OT1zdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIzMDUtXFxubW0vdm1zY2FuLmM6MjMwNjpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXFxubW0vdm1zY2FuLmMtMjMwNy1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYz0yNzEzPURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xcbm1tL3Ztc2Nhbi5jLTI3MTQtI2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcXG5tbS92bXNjYW4uYzoyNzE1OkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbm1tL3Ztc2Nhbi5jOjI3MTY6I2RlZmluZSBnZXRfY2FwKGNhcClcXHRzdGF0aWNfYnJhbmNoX2xpa2VseShcXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXFxubW0vdm1zY2FuLmMtMjcxNy0jZWxzZVxcbm1tL3Ztc2Nhbi5jOjI3MTg6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfRkFMU0UobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbm1tL3Ztc2Nhbi5jOjI3MTk6I2RlZmluZSBnZXRfY2FwKGNhcClcXHRzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcXG5tbS92bXNjYW4uYy0yNzIwLSNlbmRpZlxcbi0tXFxubW0vdm1zY2FuLmM9MjgwNz1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgzNi0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcXG5tbS92bXNjYW4uYzoyODM3OiAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS5cXG5tbS92bXNjYW4uYy0yODM4LSAqXFxuLS1cXG5tbS92bXNjYW4uYz0yODU0PXN0YXRpYyB2b2lkIGdldF9pdGVtX2tleSh2b2lkICppdGVtLCBpbnQgKmtleSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4NjMtXFxubW0vdm1zY2FuLmM6Mjg2NDpzdGF0aWMgYm9vbCB0ZXN0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbm1tL3Ztc2Nhbi5jLTI4NjUtXFx0XFx0XFx0ICAgICAgdm9pZCAqaXRlbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4NzktXFxubW0vdm1zY2FuLmM6Mjg4MDpzdGF0aWMgdm9pZCB1cGRhdGVfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEsXFxubW0vdm1zY2FuLmMtMjg4MS1cXHRcXHRcXHRcXHR2b2lkICppdGVtKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg5OC1cXG5tbS92bXNjYW4uYzoyODk5OnN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbm1tL3Ztc2Nhbi5jLTI5MDAte1xcbi0tXFxubW0vdm1zY2FuLmMtMjkyMC1cXG5tbS92bXNjYW4uYzoyOTIxOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtMjkyMi17XFxubW0vdm1zY2FuLmM6MjkyMzpcXHRzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCBtbV9saXN0ID0ge1xcbm1tL3Ztc2Nhbi5jLTI5MjQtXFx0XFx0LmZpZm8gPSBMSVNUX0hFQURfSU5JVChtbV9saXN0LmZpZm8pLFxcbi0tXFxubW0vdm1zY2FuLmMtMjkzNi1cXG5tbS92bXNjYW4uYzoyOTM3OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy0yOTM4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NDEtXFxubW0vdm1zY2FuLmM6Mjk0MjpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0yOTQzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NDYtXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjI5NDc6XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKHdhbGstXFx1MDAzZWxydXZlYyk7XFxubW0vdm1zY2FuLmMtMjk0OC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NjAtXFxubW0vdm1zY2FuLmM6Mjk2MTp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5NjIte1xcbi0tXFxubW0vdm1zY2FuLmMtMjk2NC1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcXG5tbS92bXNjYW4uYzoyOTY1OlxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxubW0vdm1zY2FuLmMtMjk2Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NzUtXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYzoyOTc2OlxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTI5NzctXFxuLS1cXG5tbS92bXNjYW4uYy0yOTg3LVxcbm1tL3Ztc2Nhbi5jOjI5ODg6dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS92bXNjYW4uYy0yOTg5LXtcXG5tbS92bXNjYW4uYy0yOTkwLVxcdGludCBuaWQ7XFxubW0vdm1zY2FuLmM6Mjk5MTpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0O1xcbm1tL3Ztc2Nhbi5jLTI5OTItXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMDUtXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYzozMDA2OlxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTMwMDctXFxuLS1cXG5tbS92bXNjYW4uYy0zMDI3LSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYzozMDI4OnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTMwMjkte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA1MS1cXG5tbS92bXNjYW4uYzozMDUyOlxcdGxydV9nZW5fZGVsX21tKG1tKTtcXG5tbS92bXNjYW4uYzozMDUzOlxcdGxydV9nZW5fYWRkX21tKG1tKTtcXG5tbS92bXNjYW4uYy0zMDU0LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNTgtXFxubW0vdm1zY2FuLmM6MzA1OTpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTMwNjAte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA2My1cXG5tbS92bXNjYW4uYzozMDY0OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy0zMDY1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNjgtXFxubW0vdm1zY2FuLmM6MzA2OTpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0zMDcwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNzUtXFxubW0vdm1zY2FuLmM6MzA3NjpzdGF0aWMgdm9pZCByZXNldF9tbV9zdGF0cyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBib29sIGxhc3QpXFxubW0vdm1zY2FuLmMtMzA3Ny17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDgwLVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IHdhbGstXFx1MDAzZWxydXZlYztcXG5tbS92bXNjYW4uYzozMDgxOlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTMwODItXFxuLS1cXG5tbS92bXNjYW4uYy0zMTAwLVxcbm1tL3Ztc2Nhbi5jOjMxMDE6c3RhdGljIGJvb2wgaXRlcmF0ZV9tbV9saXN0KHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBtbV9zdHJ1Y3QgKippdGVyKVxcbm1tL3Ztc2Nhbi5jLTMxMDIte1xcbi0tXFxubW0vdm1zY2FuLmMtMzEwNy1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG5tbS92bXNjYW4uYzozMTA4OlxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxubW0vdm1zY2FuLmM6MzEwOTpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG5tbS92bXNjYW4uYy0zMTEwLVxcbi0tXFxubW0vdm1zY2FuLmM9MzE2NT1zdGF0aWMgYm9vbCBpdGVyYXRlX21tX2xpc3Rfbm93YWxrKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0zMTY4LVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjMxNjk6XFx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcXG5tbS92bXNjYW4uYzozMTcwOlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTMxNzEtXFxuLS1cXG5tbS92bXNjYW4uYz0zMjE3PXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxcbi0tXFxubW0vdm1zY2FuLmMtMzIyMC1cXHRpbnQgaTtcXG5tbS92bXNjYW4uYzozMjIxOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtMzIyMi1cXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuLS1cXG5tbS92bXNjYW4uYz0zMjM2PXN0YXRpYyB2b2lkIHJlc2V0X2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGJvb2wgY2FycnlvdmVyKVxcbi0tXFxubW0vdm1zY2FuLmMtMzIzOC1cXHRpbnQgaGlzdCwgdGllcjtcXG5tbS92bXNjYW4uYzozMjM5OlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtMzI0MC1cXHRib29sIGNsZWFyID0gY2FycnlvdmVyID8gTlJfSElTVF9HRU5TID09IDEgOiBOUl9ISVNUX0dFTlMgXFx1MDAzZSAxO1xcbi0tXFxubW0vdm1zY2FuLmM9MzI4OD1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMDUtXFx0ZG8ge1xcbm1tL3Ztc2Nhbi5jOjMzMDY6XFx0XFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xcbm1tL3Ztc2Nhbi5jLTMzMDctXFx0XFx0aWYgKCEob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTMzNDU9c3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzNDctXFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XFxubW0vdm1zY2FuLmM6MzM0ODpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jOjMzNDk6XFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmMtMzM1MC1cXHRib29sIGdlbl9pbmNyZWFzZWQ7XFxuLS1cXG5tbS92bXNjYW4uYy0zMzUzLVxcdGlmIChnZW5faW5jcmVhc2VkKVxcbm1tL3Ztc2Nhbi5jOjMzNTQ6XFx0XFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG5tbS92bXNjYW4uYy0zMzU1LVxcdHJldHVybiBuZXdfZ2VuO1xcbi0tXFxubW0vdm1zY2FuLmMtMzM1Ny1cXG5tbS92bXNjYW4uYzozMzU4OnN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vdm1zY2FuLmMtMzM1OS1cXHRcXHRcXHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXFxuLS1cXG5tbS92bXNjYW4uYy0zMzczLVxcbm1tL3Ztc2Nhbi5jOjMzNzQ6c3RhdGljIHZvaWQgcmVzZXRfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbm1tL3Ztc2Nhbi5jLTMzNzUte1xcbi0tXFxubW0vdm1zY2FuLmMtMzM3Ny1cXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBscnV2ZWNfbGl2ZV9sb2NrX2lycSh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjMzNzg6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zMzc5LVxcbi0tXFxubW0vdm1zY2FuLmMtMzM5Mi1cXG5tbS92bXNjYW4uYzozMzkzOlxcdFxcdGlmIChscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikpXFxubW0vdm1zY2FuLmMtMzM5NC1cXHRcXHRcXHRscnUgKz0gTFJVX0FDVElWRTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM0MDE9c3RhdGljIGludCBzaG91bGRfc2tpcF92bWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICphcmdzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzQwNC1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGFyZ3MtXFx1MDAzZXZtYTtcXG5tbS92bXNjYW4uYzozNDA1OlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbm1tL3Ztc2Nhbi5jLTM0MDYtXFxuLS1cXG5tbS92bXNjYW4uYz0zNTM5PXN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXFxuLS1cXG5tbS92bXNjYW4uYy0zNTQ2LVxcbm1tL3Ztc2Nhbi5jOjM1NDc6c3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vdm1zY2FuLmMtMzU0OC1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM1NjMtXFx0XFx0XFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xcbm1tL3Ztc2Nhbi5jOjM1NjQ6XFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hLVxcdTAwM2VmbGFncykpIHtcXG5tbS92bXNjYW4uYy0zNTY1LVxcdFxcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM1NzE9c3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bXNjYW4uYy0zNTgxLVxcdHN0cnVjdCBmb2xpbyAqbGFzdCA9IE5VTEw7XFxubW0vdm1zY2FuLmM6MzU4MjpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cXHUwMDNlcHJpdmF0ZTtcXG5tbS92bXNjYW4uYy0zNTgzLVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbi0tXFxubW0vdm1zY2FuLmMtMzU4NS1cXHRERUZJTkVfTUFYX1NFUSh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjM1ODY6XFx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XFxubW0vdm1zY2FuLmMtMzU4Ny1cXHR1bnNpZ25lZCBpbnQgbnI7XFxuLS1cXG5tbS92bXNjYW4uYz0zNjYyPXN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vdm1zY2FuLmMtMzY2OS1cXHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xcbm1tL3Ztc2Nhbi5jOjM2NzA6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxubW0vdm1zY2FuLmMtMzY3MS1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM2NzMtXFx0REVGSU5FX01BWF9TRVEod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG5tbS92bXNjYW4uYzozNjc0OlxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbm1tL3Ztc2Nhbi5jLTM2NzUtXFxuLS1cXG5tbS92bXNjYW4uYz0zNzUwPXN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1zY2FuLmMtMzc1OS1cXHR1bnNpZ25lZCBsb25nIGZpcnN0ID0gLTE7XFxubW0vdm1zY2FuLmM6Mzc2MDpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cXHUwMDNlcHJpdmF0ZTtcXG5tbS92bXNjYW4uYzozNzYxOlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZSh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTM3NjItXFxuLS1cXG5tbS92bXNjYW4uYz0zODIzPXN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bXNjYW4uYy0zODI5LVxcdHVuc2lnbmVkIGxvbmcgbmV4dDtcXG5tbS92bXNjYW4uYzozODMwOlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbm1tL3Ztc2Nhbi5jLTM4MzEtXFxuLS1cXG5tbS92bXNjYW4uYy0zODY0LVxcbm1tL3Ztc2Nhbi5jOjM4NjU6c3RhdGljIHZvaWQgd2Fsa19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0zODY2LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4OTktXFxubW0vdm1zY2FuLmM6MzkwMDpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqc2V0X21tX3dhbGsoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmb3JjZV9hbGxvYylcXG5tbS92bXNjYW4uYy0zOTAxLXtcXG5tbS92bXNjYW4uYzozOTAyOlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBjdXJyZW50LVxcdTAwM2VyZWNsYWltX3N0YXRlLVxcdTAwM2VtbV93YWxrO1xcbm1tL3Ztc2Nhbi5jLTM5MDMtXFxuLS1cXG5tbS92bXNjYW4uYz0zOTIwPXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcXG5tbS92bXNjYW4uYy0zOTIxLXtcXG5tbS92bXNjYW4uYzozOTIyOlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBjdXJyZW50LVxcdTAwM2VyZWNsYWltX3N0YXRlLVxcdTAwM2VtbV93YWxrO1xcbm1tL3Ztc2Nhbi5jLTM5MjMtXFxuLS1cXG5tbS92bXNjYW4uYz0zOTQ2PXN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzk0OS1cXHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSCAvIChpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykgPyAyIDogOCk7XFxubW0vdm1zY2FuLmM6Mzk1MDpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTM5NTEtXFx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbm1tL3Ztc2Nhbi5jOjM5NTI6XFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmMtMzk1My1cXHRpbnQgdGFyZ2V0X2dlbiA9IChvbGRfZ2VuICsgMSkgJSBNQVhfTlJfR0VOUztcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwMjI9c3RhdGljIHZvaWQgdHJ5X3RvX2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00MDI1LVxcdGJvb2wgc2VxX2luY19mbGFnID0gZmFsc2U7XFxubW0vdm1zY2FuLmM6NDAyNjpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQwMjctXFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwMzMtXFx0XFx0d2hpbGUgKG1pbl9zZXFbdHlwZV0gKyBNSU5fTlJfR0VOUyBcXHUwMDNjPSBscnVnZW4tXFx1MDAzZW1heF9zZXEpIHtcXG5tbS92bXNjYW4uYzo0MDM0OlxcdFxcdFxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmMtNDAzNS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwNTQtXFxubW0vdm1zY2FuLmM6NDA1NTpcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9mb2xpbyAqL1xcbm1tL3Ztc2Nhbi5jLTQwNTYtXFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAyNlxcdTAwMjYgc3dhcHBpbmVzcyBcXHUwMDNjPSBNQVhfU1dBUFBJTkVTUykge1xcbi0tXFxubW0vdm1zY2FuLmM9NDA3ND1zdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwNzgtXFx0aW50IHR5cGUsIHpvbmU7XFxubW0vdm1zY2FuLmM6NDA3OTpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQwODAtcmVzdGFydDpcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQxMDktXFx0ICovXFxubW0vdm1zY2FuLmM6NDExMDpcXHRwcmV2ID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1heF9zZXEgLSAxKTtcXG5tbS92bXNjYW4uYzo0MTExOlxcdG5leHQgPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWF4X3NlcSArIDEpO1xcbm1tL3Ztc2Nhbi5jLTQxMTItXFxuLS1cXG5tbS92bXNjYW4uYz00MTM5PXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNDE0Mi1cXHRib29sIHN1Y2Nlc3M7XFxubW0vdm1zY2FuLmM6NDE0MzpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xcbm1tL3Ztc2Nhbi5jLTQxNDQtXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMO1xcbm1tL3Ztc2Nhbi5jOjQxNDU6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYzo0MTQ2OlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTQxNDctXFxuLS1cXG5tbS92bXNjYW4uYy00MTU4LVxcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXFxubW0vdm1zY2FuLmM6NDE1OTpcXHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxcbm1tL3Ztc2Nhbi5jLTQxNjAtXFx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XFxuLS1cXG5tbS92bXNjYW4uYz00MTk3PXN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDIyMi1cXG5tbS92bXNjYW4uYzo0MjIzOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfZ2VuX3NpemUoc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbixcXG5tbS92bXNjYW4uYy00MjI0LVxcdFxcdGludCB0eXBlLCB1bnNpZ25lZCBsb25nIHNlcSlcXG5tbS92bXNjYW4uYy00MjI1LXtcXG5tbS92bXNjYW4uYzo0MjI2OlxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XFxubW0vdm1zY2FuLmMtNDIyNy1cXHR1bnNpZ25lZCBsb25nIHNpemUgPSAwO1xcbi0tXFxubW0vdm1zY2FuLmM9NDIzND1zdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyMzctXFx0dW5zaWduZWQgbG9uZyBzZXEsIHRvdGFsID0gMDtcXG5tbS92bXNjYW4uYzo0MjM4OlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtNDIzOS1cXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xcbi0tXFxubW0vdm1zY2FuLmM9NDI2Mj1zdGF0aWMgYm9vbCBscnV2ZWNfaXNfcmVjbGFpbWFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyNzYtXFxubW0vdm1zY2FuLmM6NDI3NzpcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpKTtcXG5tbS92bXNjYW4uYy00Mjc4LVxcdGJpcnRoID0gUkVBRF9PTkNFKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLnRpbWVzdGFtcHNbZ2VuXSk7XFxuLS1cXG5tbS92bXNjYW4uYy00MjgzLS8qIHRvIHByb3RlY3QgdGhlIHdvcmtpbmcgc2V0IG9mIHRoZSBsYXN0IE4gamlmZmllcyAqL1xcbm1tL3Ztc2Nhbi5jOjQyODQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1X2dlbl9taW5fdHRsIF9fcmVhZF9tb3N0bHk7XFxubW0vdm1zY2FuLmMtNDI4NS1cXG5tbS92bXNjYW4uYzo0Mjg2OnN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNDI4Ny17XFxubW0vdm1zY2FuLmMtNDI4OC1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxubW0vdm1zY2FuLmM6NDI4OTpcXHR1bnNpZ25lZCBsb25nIG1pbl90dGwgPSBSRUFEX09OQ0UobHJ1X2dlbl9taW5fdHRsKTtcXG5tbS92bXNjYW4uYy00MjkwLVxcdGJvb2wgcmVjbGFpbWFibGUgPSAhbWluX3R0bDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQzMzItICovXFxubW0vdm1zY2FuLmM6NDMzMzpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxubW0vdm1zY2FuLmMtNDMzNC17XFxuLS1cXG5tbS92bXNjYW4uYy00MzM4LVxcdHVuc2lnbmVkIGxvbmcgZW5kO1xcbm1tL3Ztc2Nhbi5jOjQzMzk6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcXG5tbS92bXNjYW4uYy00MzQwLVxcdHN0cnVjdCBmb2xpbyAqbGFzdCA9IE5VTEw7XFxuLS1cXG5tbS92bXNjYW4uYy00MzQ4LVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG5tbS92bXNjYW4uYzo0MzQ5OlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcXG5tbS92bXNjYW4uYy00MzUwLVxcdHVuc2lnbmVkIGxvbmcgbWF4X3NlcTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQzODgtXFx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xcbm1tL3Ztc2Nhbi5jOjQzODk6XFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcXG5tbS92bXNjYW4uYy00MzkwLVxcdG1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxuLS1cXG5tbS92bXNjYW4uYz00NDUxPWVudW0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNDQ1OC1cXG5tbS92bXNjYW4uYzo0NDU5OnN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxcbm1tL3Ztc2Nhbi5jLTQ0NjAte1xcbi0tXFxubW0vdm1zY2FuLmMtNDUwNi1cXG5tbS92bXNjYW4uYzo0NTA3OnZvaWQgbHJ1X2dlbl9vbmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTQ1MDgte1xcbi0tXFxubW0vdm1zY2FuLmMtNDUzMS1cXG5tbS92bXNjYW4uYzo0NTMyOnZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NTMzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1MzgtXFxubW0vdm1zY2FuLmM6NDUzOTpcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9PTEQpO1xcbm1tL3Ztc2Nhbi5jLTQ1NDAtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmMtNDU0Mi1cXG5tbS92bXNjYW4uYzo0NTQzOnZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NTQ0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1NjgtXFxubW0vdm1zY2FuLmM6NDU2OTp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG5tbS92bXNjYW4uYy00NTcwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1NzQtXFx0aWYgKFJFQURfT05DRShscnV2ZWMtXFx1MDAzZWxydWdlbi5zZWcpICE9IE1FTUNHX0xSVV9IRUFEKVxcbm1tL3Ztc2Nhbi5jOjQ1NzU6XFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfSEVBRCk7XFxubW0vdm1zY2FuLmMtNDU3Ni19XFxubW0vdm1zY2FuLmMtNDU3Ny1cXG5tbS92bXNjYW4uYzo0NTc4OmJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDU3OS17XFxuLS1cXG5tbS92bXNjYW4uYz00NTkxPXN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWF4X3NlcV9ub3dhbGsoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNDU5My17XFxubW0vdm1zY2FuLmM6NDU5NDpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xcbm1tL3Ztc2Nhbi5jOjQ1OTU6XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxubW0vdm1zY2FuLmMtNDU5Ni1cXHRpbnQgc3dhcHBpbmVzcyA9IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYy00NjI0LSAqL1xcbm1tL3Ztc2Nhbi5jOjQ2MjU6dm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDYyNi17XFxuLS1cXG5tbS92bXNjYW4uYy00NjUxLSAqICAgIGdlbmVyYXRpb25zIG9uIGFuIExSVSBsaXN0Llxcbm1tL3Ztc2Nhbi5jOjQ2NTI6ICogNC4gSW4gbHJ1X2dlbl9kZWxfZm9saW8oKSwgdGhlIGdlbmVyYXRpb24gdG8gd2hpY2ggdGhlIGZvbGlvIGJlbG9uZ3MgaXNcXG5tbS92bXNjYW4uYy00NjUzLSAqICAgIGZvdW5kIGJhc2VkIG9uIHRoZSBnZW5lcmF0aW9uIGluZm9ybWF0aW9uIGluIGZvbGlvLVxcdTAwM2VmbGFncywgYW5kIHRoZVxcbi0tXFxubW0vdm1zY2FuLmMtNDY1NS0gKiAgICB0aGUgbHJ1IHNpemUgY29ycmVjdGx5IGR1cmluZyByZXBhcmVudGluZywgb3RoZXJ3aXNlIHRoZSBscnUgc2l6ZSBtYXlcXG5tbS92bXNjYW4uYzo0NjU2OiAqICAgIGJlIHVwZGF0ZWQgaW5jb3JyZWN0bHkgaW4gbHJ1X2dlbl9kZWxfZm9saW8oKS5cXG5tbS92bXNjYW4uYy00NjU3LSAqXFxuLS1cXG5tbS92bXNjYW4uYy00NjY1LSAqL1xcbm1tL3Ztc2Nhbi5jOjQ2NjY6c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG5tbS92bXNjYW4uYy00NjY3LVxcdFxcdFxcdFxcdCAgICAgaW50IHpvbmUsIGludCB0eXBlKVxcbm1tL3Ztc2Nhbi5jLTQ2Njgte1xcbm1tL3Ztc2Nhbi5jOjQ2Njk6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmNoaWxkX2xydWdlbiwgKnBhcmVudF9scnVnZW47XFxubW0vdm1zY2FuLmMtNDY3MC1cXHRlbnVtIGxydV9saXN0IGxydSA9IHR5cGUgKiBMUlVfSU5BQ1RJVkVfRklMRTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2NzYtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGdldF9ucl9nZW5zKGNoaWxkX2xydXZlYywgdHlwZSk7IGkrKykge1xcbm1tL3Ztc2Nhbi5jOjQ2Nzc6XFx0XFx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoY2hpbGRfbHJ1Z2VuLVxcdTAwM2VtYXhfc2VxIC0gaSk7XFxubW0vdm1zY2FuLmMtNDY3OC1cXHRcXHRsb25nIG5yX3BhZ2VzID0gY2hpbGRfbHJ1Z2VuLVxcdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdO1xcbm1tL3Ztc2Nhbi5jOjQ2Nzk6XFx0XFx0aW50IGNoaWxkX2xydV9hY3RpdmUgPSBscnVfZ2VuX2lzX2FjdGl2ZShjaGlsZF9scnV2ZWMsIGdlbikgPyBMUlVfQUNUSVZFIDogMDtcXG5tbS92bXNjYW4uYzo0NjgwOlxcdFxcdGludCBwYXJlbnRfbHJ1X2FjdGl2ZSA9IGxydV9nZW5faXNfYWN0aXZlKHBhcmVudF9scnV2ZWMsIGdlbikgPyBMUlVfQUNUSVZFIDogMDtcXG5tbS92bXNjYW4uYy00NjgxLVxcbi0tXFxubW0vdm1zY2FuLmMtNDY4OS1cXG5tbS92bXNjYW4uYzo0NjkwOlxcdFxcdGlmIChscnVfZ2VuX2lzX2FjdGl2ZShjaGlsZF9scnV2ZWMsIGdlbikgIT0gbHJ1X2dlbl9pc19hY3RpdmUocGFyZW50X2xydXZlYywgZ2VuKSkge1xcbm1tL3Ztc2Nhbi5jLTQ2OTEtXFx0XFx0XFx0X191cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUgKyBjaGlsZF9scnVfYWN0aXZlLCB6b25lLCAtbnJfcGFnZXMpO1xcbi0tXFxubW0vdm1zY2FuLmMtNDY5Ni1cXG5tbS92bXNjYW4uYzo0Njk3OnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDY5OC17XFxuLS1cXG5tbS92bXNjYW4uYy00NzA4LVxcdFxcdGZvciAodHlwZSA9IDA7IHR5cGUgXFx1MDAzYyBBTk9OX0FORF9GSUxFOyB0eXBlKyspXFxubW0vdm1zY2FuLmM6NDcwOTpcXHRcXHRcXHRfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCB6aWQsIHR5cGUpO1xcbm1tL3Ztc2Nhbi5jLTQ3MTAtXFxuLS1cXG5tbS92bXNjYW4uYz00NzI2PXN0YXRpYyBib29sIHNvcnRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3MzYtXFx0aW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7XFxubW0vdm1zY2FuLmM6NDczNzpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQ3MzgtXFxuLS1cXG5tbS92bXNjYW4uYy00NzQyLVxcdGlmICghZm9saW9fZXZpY3RhYmxlKGZvbGlvKSkge1xcbm1tL3Ztc2Nhbi5jOjQ3NDM6XFx0XFx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xcbm1tL3Ztc2Nhbi5jLTQ3NDQtXFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XFxuLS1cXG5tbS92bXNjYW4uYy00NzUxLVxcdC8qIHByb21vdGVkICovXFxubW0vdm1zY2FuLmM6NDc1MjpcXHRpZiAoZ2VuICE9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKSkge1xcbm1tL3Ztc2Nhbi5jLTQ3NTMtXFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2bHJ1Z2VuLVxcdTAwM2Vmb2xpb3NbZ2VuXVt0eXBlXVt6b25lXSk7XFxuLS1cXG5tbS92bXNjYW4uYz00NzgyPXN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3OTktXFxubW0vdm1zY2FuLmM6NDgwMDpcXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XFxubW0vdm1zY2FuLmMtNDgwMS1cXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ4MDY9c3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4MTgtXFx0dW5zaWduZWQgbG9uZyByZW1haW5pbmcgPSBucl90b19zY2FuO1xcbm1tL3Ztc2Nhbi5jOjQ4MTk6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy00ODIwLVxcdGJvb2wgZWFybHlfc3RvcCA9IGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmMtNDgyOS1cXG5tbS92bXNjYW4uYzo0ODMwOlxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG5tbS92bXNjYW4uYy00ODMxLVxcbi0tXFxubW0vdm1zY2FuLmM9NTAwOD1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMTYtXFx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xcbm1tL3Ztc2Nhbi5jOjUwMTc6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcXG5tbS92bXNjYW4uYy01MDE4LVxcdGludCBzY2FubmVkLCByZWNsYWltZWQ7XFxuLS1cXG5tbS92bXNjYW4uYy01MDY5LVxcdFxcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXFxubW0vdm1zY2FuLmM6NTA3MDpcXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXFxubW0vdm1zY2FuLmMtNTA3MS1cXHRcXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR19hY3RpdmUpKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMDMtXFxubW0vdm1zY2FuLmM6NTEwNDpzdGF0aWMgYm9vbCBscnVfZ2VuX2ltYmFsYW5jZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsXFxubW0vdm1zY2FuLmMtNTEwNS1cXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxcbm1tL3Ztc2Nhbi5jLTUxMDYte1xcbm1tL3Ztc2Nhbi5jOjUxMDc6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy01MTA4LVxcdHVuc2lnbmVkIGxvbmcgeW91bmcgPSAwLCBvbGQgPSAwLCBsYWcgPSAwO1xcbi0tXFxubW0vdm1zY2FuLmM9NTE0Mj1zdGF0aWMgYm9vbCBzaG91bGRfcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNTE2My1cXHQvKiBSdW4gYWdpbmcgaWYgdGhlIHByZWZlcnJlZCB0eXBlIGlzIHNldmVyZWx5IGltYmFsYW5jZWQgYWNyb3NzIGdlbnMgKi9cXG5tbS92bXNjYW4uYzo1MTY0OlxcdHJldHVybiBscnVfZ2VuX2ltYmFsYW5jZWQobHJ1dmVjLCBtYXhfc2VxLCBzYywgdHlwZSwgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTE2NS19XFxuLS1cXG5tbS92bXNjYW4uYz01Mjc4PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI4NS1cXG5tbS92bXNjYW4uYzo1Mjg2OlxcdC8qIGxydV9nZW5fYWdlX25vZGUoKSBjYWxsZWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpICovXFxubW0vdm1zY2FuLmMtNTI4Ny1cXHRpZiAobWVtX2Nncm91cF9iZWxvd19taW4oTlVMTCwgbWVtY2cpKVxcbi0tXFxubW0vdm1zY2FuLmM9NTMxOT1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMjUtXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbm1tL3Ztc2Nhbi5jOjUzMjY6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbjtcXG5tbS92bXNjYW4uYy01MzI3LVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMzktXFx0XFx0aWYgKG9wKSB7XFxubW0vdm1zY2FuLmM6NTM0MDpcXHRcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIG9wKTtcXG5tbS92bXNjYW4uYy01MzQxLVxcdFxcdFxcdG9wID0gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzNTMtXFx0XFx0aWYgKCFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpIHtcXG5tbS92bXNjYW4uYzo1MzU0OlxcdFxcdFxcdGxydV9nZW5fcmVsZWFzZV9tZW1jZyhtZW1jZyk7XFxubW0vdm1zY2FuLmMtNTM1NS1cXHRcXHRcXHRtZW1jZyA9IE5VTEw7XFxuLS1cXG5tbS92bXNjYW4uYy01MzcxLVxcdGlmIChvcClcXG5tbS92bXNjYW4uYzo1MzcyOlxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgb3ApO1xcbm1tL3Ztc2Nhbi5jLTUzNzMtXFxuLS1cXG5tbS92bXNjYW4uYy01Mzc4LVxcbm1tL3Ztc2Nhbi5jOjUzNzk6XFx0LyogcmVzdGFydCBpZiByYWNlZCB3aXRoIGxydV9nZW5fcm90YXRlX21lbWNnKCkgKi9cXG5tbS92bXNjYW4uYy01MzgwLVxcdGlmIChnZW4gIT0gZ2V0X251bGxzX3ZhbHVlKHBvcykpXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQyOjU1LjE4NzgxNzIwNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDM5ODY5NzY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBGdXp6aW5nIEVmZm9ydHMgb24gTUdMUlUgUmVjbGFpbSBQYXRocyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGUgTUdMUlUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSByZWNsYWltIHBhdGhzLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSByZWNsYWltIGFuZCBhZ2luZyBsb2dpYyBhbmQgdGFyZ2V0IHRob3NlLlxuXG5UaGUgaW5pdGlhbCBhcHByb2FjaCBpbnZvbHZlcyB1bmRlcnN0YW5kaW5nIHdoaWNoIGZ1bmN0aW9ucyBhcmUgKmFjdHVhbGx5KiByZXNwb25zaWJsZSBmb3IgdGhlIHJlY2xhaW0gcHJvY2Vzcy4gV2UgaGF2ZSBhIHNldCBvZiBub24tc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBscnVfZ2VuX2FkZF9tbWAsIGBscnVfZ2VuX2RlbF9tbWAsIGV0Yy4sIGJ1dCB0aGVzZSBhcmVuJ3QgdGhlIHByaW1hcnkgZHJpdmVycy4gVGhlIHJlYWwgcmVjbGFpbSB3b3JrIGlzIGluaXRpYXRlZCBieSBtZW1vcnkgcHJlc3N1cmUsIHdoaWNoIGNhbGxzIGEgc2VxdWVuY2U6IGBzaHJpbmtfbHJ1dmVjYCAtXHUwMDNlIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIC1cdTAwM2UgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBhbmQgc28gb24sIGV2ZW50dWFsbHkgbGVhZGluZyB0byBgX19mb2xpb19pbmNfZ2VuYC4gQWdpbmcgaXMgdHJpZ2dlcmVkIGluIGEgc2ltaWxhciBtYW5uZXIsIGZyb20gYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBkb3duIHRvIGBscnVfZ2VuX2ltYmFsYW5jZWRgLlxuXG5HaXZlbiB0aGF0IHRoZXNlIHBhdGhzIGFyZSBhY3RpdmF0ZWQgYnkgbWVtb3J5IGFsbG9jYXRpb24sIHBhcnRpY3VsYXJseSB0aHJvdWdoIHN5c2NhbGxzIGxpa2UgYGFsbG9jX3BhZ2VzYCBvciBgbW1hcGAsIFN5emthbGxlciBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIHRvb2wgZm9yIHRoZSBqb2IuIFRvIG1ha2UgaXQgZWZmZWN0aXZlLCBJIG5lZWQgdG8gcHJvdmlkZSBgRm9jdXNTeW1ib2xzYCB0aGF0IGFyZSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGFuZCBub3QganVzdCBnZW5lcmljIHN5c2NhbGxzLlxuXG5NeSBmaXJzdCBpbXB1bHNlIHdhcyB0byBsaXN0IG91dCB0aGUgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uczogYGxydV9nZW5fc2hyaW5rX2xydXZlY2AsIGBscnVfZ2VuX2FnZV9ub2RlYCwgZXRjLiBIb3dldmVyLCB0aGUgaW5zdHJ1Y3Rpb25zIGhpZ2hsaWdodGVkIHNvbWV0aGluZyBpbXBvcnRhbnQ6IHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIGJlY2F1c2Ugc3RhdGljIGhlbHBlcnMgYXJlIG9mdGVuIGlubGluZWQgYW5kIGRvbid0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIGNydWNpYWwgZGlzdGluY3Rpb24uXG5cblNvLCBJIHN0YXJ0ZWQgY2hlY2tpbmcgdGhlIGxpc3RlZCBmdW5jdGlvbnMuIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGlzIHN0YXRpYywgYXMgaXMgYHNocmlua19scnV2ZWNgLCBgc2hyaW5rX25vZGVgLCBhbmQgYGRvX3RyeV90b19mcmVlX3BhZ2VzYC4gSG93ZXZlciwgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBub24tc3RhdGljLiBUaGUgc2FtZSBnb2VzIGZvciBga3N3YXBkYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBgbHJ1X2dlbl9hZGRfbW1gLCBhbmQgYGxydV9nZW5fZGVsX21tYC4gYHRyeV90b19mcmVlX3BhZ2VzYCBzb3VuZHMgZ2VuZXJpYyBhbmQgbWlnaHQgbm90IGJlIHRoZSBtb3N0IHRhcmdldGVkLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBjaGFuZ2VzLCB0aGUgbW9yZSByZWxldmFudCBmdW5jdGlvbnMgc2VlbSB0byBiZSB0aG9zZSBpbnZvbHZlZCBpbiBpbmNyZWFzaW5nIHRoZSBzZXF1ZW5jZSBudW1iZXIsIHNjYW5uaW5nIGZvbGlvcywgaXNvbGF0aW5nIGFuZCBldmljdGluZyB0aGVtLCBhbmQgdGhlIGFnaW5nIGxvZ2ljLCBzdWNoIGFzIGBscnVfZ2VuX2ltYmFsYW5jZWRgLCBhbmQgc28gb24uIFRoZXNlIGFsbCBmZWVkIGludG8gYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBvciBgcnVuX2V2aWN0aW9uYCwgd2hpY2ggaXMgdGhlbiBjYWxsZWQgYnkgYGxydV9nZW5fc29mdF9yZWNsYWltYCBhbmQgYG1heF9scnVfZ2VuX21lbWNnYC4gVGhlIHF1ZXN0aW9uIGlzLCB3aGljaCBvZiB0aGVzZSBpcyB0aGUgbW9zdCBlZmZlY3RpdmUgZW50cnkgcG9pbnQ/IGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAgYW5kIGBtYXhfbHJ1X2dlbl9tZW1jZ2AgYXJlIG5vbi1zdGF0aWMuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGVtIGZ1cnRoZXIgdG8gc2VlIGlmIHRoZXkgYXJlIGEgZ29vZCBmaXQgZm9yIG15IGBGb2N1c1N5bWJvbHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzk1MCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0MzowOS41ODY1MTkwNjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzOTkwMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihscnVfZ2VuX3NvZnRfcmVjbGFpbXxtYXhfbHJ1X2dlbl9tZW1jZylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0xODA9c3RhdGljIHZvaWQgbWVtY2cxX3VwZGF0ZV90cmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODctXFx0XFx0aWYgKHNvZnRfbGltaXRfZXhjZXNzKG1lbWNnKSlcXG5tbS9tZW1jb250cm9sLXYxLmM6MTg4OlxcdFxcdFxcdGxydV9nZW5fc29mdF9yZWNsYWltKG1lbWNnLCBuaWQpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0xODktXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI3Nz1zdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI4NS1cXHRcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpXFxubW0vbWVtY29udHJvbC5jOjI4NjpcXHRcXHRcXHRtYXhfbHJ1X2dlbl9tZW1jZyhwYXJlbnQsIG5pZCk7XFxubW0vbWVtY29udHJvbC5jLTI4Ny1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ1NDM9dm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmMtNDU2OC1cXG5tbS92bXNjYW4uYzo0NTY5OnZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ1NzAte1xcbi0tXFxubW0vdm1zY2FuLmM9NDU5MT1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21heF9zZXFfbm93YWxrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2MjQtICovXFxubW0vdm1zY2FuLmM6NDYyNTp2b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG5tbS92bXNjYW4uYy00NjI2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MDkuNjQwNTE4NTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUyMDE1OTcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQgSW50ZXJkZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyBzb21lIG1lbW9yeSByZWNsYWltIGxvZ2ljIGhlcmUuIEkgc2VlIHRoYXQgYGxydV9nZW5fc29mdF9yZWNsYWltYCBpcyB0cmlnZ2VyZWQgYnkgYG1lbWNnMV91cGRhdGVfdHJlZWAuIFRoYXQncyBpbXBvcnRhbnQg4oCTIGl0IHRlbGxzIG1lIGhvdyBzb2Z0IHJlY2xhaW0sIHByZXN1bWFibHkgcmVsYXRlZCB0byBnZW5lcmF0aW9uYWwgTFJVLCBnZXRzIGluaXRpYXRlZCBkdXJpbmcgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgdXBkYXRlcy4gTm93LCBJIGhhdmUgdG8gcmVtZW1iZXIgdGhlIHNwZWNpZmljcyBvZiB0aGF0IGNhbGwgYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIGhvdyBtZW1jZyBwcmVzc3VyZSBpcyBhZGRyZXNzZWQuXG5cblRoZW4gSSBub3RlIGBtYXhfbHJ1X2dlbl9tZW1jZ2AgaXMgaW52b2tlZCBmcm9tIGBtZW1jZ19yZXBhcmVudF9vYmpjZ3NgLCB3aGljaCBtYWtlcyBzZW5zZS4gUmVwYXJlbnRpbmcgb2JqZWN0IGNncm91cHMgcHJvYmFibHkgaW52b2x2ZXMgcmVhZGp1c3RpbmcgbGltaXRzIGFuZCwgYnkgZXh0ZW5zaW9uLCBtYXhpbXVtIGdlbmVyYXRpb25hbCBMUlUgdmFsdWVzIGZvciBhIG1lbWNnLiBTbyBJIG5lZWQgdG8gZ28gb3ZlciB0aGUgbnVhbmNlcyBvZiB0aGF0IGludGVyYWN0aW9uIHRvby4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSdzIGFueSBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoIHBhZ2Ugb3duZXJzaGlwIGhhcHBlbmluZyBoZXJlLlxuXG5Ob3csIGEgY3JpdGljYWwgcXVlc3Rpb24gYXJpc2VzOiBXaGF0IGFib3V0IGB0cnlfdG9fZnJlZV9wYWdlc2A/IFdoZXJlIGRvZXMgdGhhdCBmaXQgaW4gdGhpcyB3aG9sZSBwaWN0dXJlPyBJcyB0aGlzIGJlaW5nIGNhbGxlZCBkaXJlY3RseSwgb3IgaXMgdGhlcmUgYSBsYXllciBvZiBhYnN0cmFjdGlvbj8gSXQgbWlnaHQgYmUgdGhlIGNvcmUgcGFnZSBmcmVlaW5nIG1lY2hhbmlzbSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGNhbGxzIEkndmUganVzdCBpZGVudGlmaWVkLiBJIHNob3VsZCBwcm9iYWJseSByZXZpZXcgdGhlIGNhbGwgY2hhaW4gYW5kIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBjb21lcyBpbi4gV2hhdCBhcmUgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGl0PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBzdWNjZXNzIG9yIGZhaWx1cmU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTk5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MTguMTYwNjgwOTA3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg4NzM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD02OT11bnNpZ25lZCBsb25nIHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpO1xcbm1tL2ludGVybmFsLmg6NzA6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxubW0vaW50ZXJuYWwuaC03MS1cXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgY29uc3Qgbm9kZW1hc2tfdCAqbWFzayk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDQzOD1fX3BlcmZvcm1fcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQ0NTAtXFxubW0vcGFnZV9hbGxvYy5jOjQ0NTE6XFx0cHJvZ3Jlc3MgPSB0cnlfdG9fZnJlZV9wYWdlcyhhYy1cXHUwMDNlem9uZWxpc3QsIG9yZGVyLCBnZnBfbWFzayxcXG5tbS9wYWdlX2FsbG9jLmMtNDQ1Mi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRhYy1cXHUwMDNlbm9kZW1hc2spO1xcbi0tXFxubW0vdm1zY2FuLmM9NjY5Nz1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNjcyNy0gKi9cXG5tbS92bXNjYW4uYzo2NzI4OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3RyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXFxubW0vdm1zY2FuLmMtNjcyOS1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmM9Njg3MD1zdGF0aWMgYm9vbCB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5NDktXFxubW0vdm1zY2FuLmM6Njk1MDp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG5tbS92bXNjYW4uYy02OTUxLVxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBjb25zdCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5ODQtXFxubW0vdm1zY2FuLmM6Njk4NTpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02OTg2LVxcbi0tXFxubW0vdm1zY2FuLmM9NzAzNj11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNzA2Ny1cXG5tbS92bXNjYW4uYzo3MDY4OlxcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTcwNjktXFxuLS1cXG5tbS92bXNjYW4uYz03ODM0PXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbi0tXFxubW0vdm1zY2FuLmMtNzg1My1cXG5tbS92bXNjYW4uYzo3ODU0OlxcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTc4NTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjE4LjIxMDU3Mzg5NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTcyODc3MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpcmVjdCBcdTAwMjYgQmFja2dyb3VuZCBSZWNsYWltIEVudHJ5IFBvaW50cyBcdTAwMjYgRXhwbG9yaW5nIEZ1cnRoZXIgTUdMUlUgQ29ubmVjdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2Ag4oCTIHRob3NlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJJ2QgcmVhY2ggZm9yIHdoZW4gdGhpbmtpbmcgYWJvdXQgKmRpcmVjdCogbWVtb3J5IHJlY2xhaW0uIFRoZXkgcmVwcmVzZW50IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJpZ2dlcmluZyBpbW1lZGlhdGUgZnJlZWluZyBvZiBwYWdlcy4gVGhlbiwgYXMgZXhwZWN0ZWQsIHdlIGhhdmUgYGtzd2FwZGAgZm9yIGJhY2tncm91bmQgcmVjbGFpbSwgdGhlIG9uZSB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQuXG5cbk5vdywgSSBuZWVkIHRvIHpvb20gaW4gb24gYG1tL3Ztc2Nhbi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb3RoZXIgZnVuY3Rpb25zICp3aXRoaW4qIHRoYXQgbW9kdWxlIG1pZ2h0IGJlIHJlbGV2YW50IHRvIE1HTFJVLiBUaGUgaW50ZW50IGlzIHRvIHNlZSBpZiBhbnkgb3RoZXIgZnVuY3Rpb24gaXMgbm90IHN0YXRpYyBhbmQgbWF5IGJlIHJlbGF0ZWQgdG8gdGhlIE1HTFJVIGNvZGUuIEl0IG1ha2VzIHNlbnNlIHRvIHNlZSBob3cgdGhlc2UgZGlmZmVyZW50IHBpZWNlcyBpbnRlcmNvbm5lY3QuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nIHRoYXQgaGFzIGEgcG90ZW50aWFsIGltcGFjdCBvbiwgb3IgaW1wbGljYXRpb24gZm9yLCBNR0xSVSdzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzA5OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjIzLjc4MzQ1NTQ4M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0NjgyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgbHJ1X2dlbl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9Mjk0Mj1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NjAtXFxubW0vdm1zY2FuLmM6Mjk2MTp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5NjIte1xcbi0tXFxubW0vdm1zY2FuLmMtMjk4Ny1cXG5tbS92bXNjYW4uYzoyOTg4OnZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0vdm1zY2FuLmMtMjk4OS17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDI3LSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYzozMDI4OnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTMwMjkte1xcbi0tXFxubW0vdm1zY2FuLmM9NDQ1OT1zdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1MDYtXFxubW0vdm1zY2FuLmM6NDUwNzp2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NTA4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1MzEtXFxubW0vdm1zY2FuLmM6NDUzMjp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDUzMy17XFxuLS1cXG5tbS92bXNjYW4uYy00NTQyLVxcbm1tL3Ztc2Nhbi5jOjQ1NDM6dm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTQ1NDQte1xcbi0tXFxubW0vdm1zY2FuLmMtNDU2OC1cXG5tbS92bXNjYW4uYzo0NTY5OnZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ1NzAte1xcbi0tXFxubW0vdm1zY2FuLmM9NDY2Nj1zdGF0aWMgdm9pZCBfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLCBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDY5Ni1cXG5tbS92bXNjYW4uYzo0Njk3OnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDY5OC17XFxuLS1cXG5tbS92bXNjYW4uYz02MDI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxydV9nZW5fcm9fZm9wcyA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwMzktXFxubW0vdm1zY2FuLmM6NjA0MDp2b2lkIGxydV9nZW5faW5pdF9wZ2RhdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbm1tL3Ztc2Nhbi5jLTYwNDEte1xcbi0tXFxubW0vdm1zY2FuLmMtNjA1MS1cXG5tbS92bXNjYW4uYzo2MDUyOnZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxubW0vdm1zY2FuLmMtNjA1My17XFxuLS1cXG5tbS92bXNjYW4uYy02MDczLVxcbm1tL3Ztc2Nhbi5jOjYwNzQ6dm9pZCBscnVfZ2VuX2luaXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTYwNzUte1xcbi0tXFxubW0vdm1zY2FuLmMtNjA4NC1cXG5tbS92bXNjYW4uYzo2MDg1OnZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy02MDg2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MjMuODI5OTI5NzkyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDkyNDgzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQsIGV4cHJlc3NlZCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIFNjb3BlIG9mIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCoqXG5cbkhtbSwgYGxydV9nZW5fbG9va19hcm91bmRgLi4uIHJpZ2h0LCBpdCdzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGFuIGltcG9ydGFudCBwb2ludC4gS25vd2luZyBpdCdzIG5vbi1zdGF0aWMgaW1tZWRpYXRlbHkgZXhwYW5kcyB0aGUgcG9zc2liaWxpdGllcyBmb3IgaXRzIHVzYWdlLiBJdCBtZWFucyBpdCdzIGxpa2VseSBwYXJ0IG9mIGEgbGFyZ2VyIGNsYXNzIG9yIG1vZHVsZSwgYW5kIHRoZXJlZm9yZSBpdHMgc2NvcGUgaXNuJ3QgbGltaXRlZCB0byBhIHNpbmdsZSBmaWxlLiBJIG5lZWQgdG8gY29uc2lkZXIgd2hlcmUgaXQncyAqdmlzaWJsZSogYW5kIGhvdyB0aGF0IG1pZ2h0IGFmZmVjdCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21wb25lbnRzIHdpdGhpbiB0aGUgc3lzdGVtLiBJcyBpdCBgcHVibGljYCwgYHByb3RlY3RlZGAsIG9yIGBwcml2YXRlYD8gVGhhdCdzIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgaXQncyBhYm91dCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBsZXZlcmFnZWQgb3IgcG90ZW50aWFsbHkgbW9kaWZpZWQgbGF0ZXIuIEkgc2hvdWxkIGJlIGtlZXBpbmcgdHJhY2sgb2YgYWxsIHRoZSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIGl0cyBub24tc3RhdGljIG5hdHVyZSB3aWxsIGJlIGltcG9ydGFudCB0byBncmFzcCB0aGUgd2lkZXIgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uJ3MgcHVycG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0MzoyOC4yMzkxODA4MzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTU2NTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5ib29sIGxydV9nZW5fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQyODY9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQzMzItICovXFxubW0vdm1zY2FuLmM6NDMzMzpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxubW0vdm1zY2FuLmMtNDMzNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjI4LjI4NjE0MTMzNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTA1NTY2NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipUcmFjaW5nIHRoZSBGb290c3RlcHMgb2YgYGxydV9nZW5fbG9va19hcm91bmRgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBldmVyeXdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiBXaGVyZSBkb2VzIHRoZSBleGVjdXRpb24gcGF0aCAqYmVnaW4qPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLiBVbmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgd2lsbCB0ZWxsIG1lIGEgbG90LiBFc3NlbnRpYWxseSwgSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIHNvdXJjZSBjb2RlLCB0cmFjZSB0aGUgdXNhZ2UsIGFuZCBzZWUgaG93IGl0IGlzIHdvcmtpbmcsIGhvcGluZyB0byBwYWludCBhIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NzQxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6MzMuNzkxNzEwNjc0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDg1NTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ybWFwLmM9OTE4PXN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9ybWFwLmMtOTgyLVxcdFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSBcXHUwMDI2XFx1MDAyNiBwdm13LnB0ZSkge1xcbm1tL3JtYXAuYzo5ODM6XFx0XFx0XFx0aWYgKGxydV9nZW5fbG9va19hcm91bmQoXFx1MDAyNnB2bXcsIG5yKSlcXG5tbS9ybWFwLmMtOTg0LVxcdFxcdFxcdFxcdHJlZmVyZW5jZWQrKztcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4MDc9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4MzYtICogd2Fsa19wbWRfcmFuZ2UoKTsgdGhlIGV2aWN0aW9uIGFsc28gcmVwb3J0IHRoZW0gd2hlbiB3YWxraW5nIHRoZSBybWFwXFxubW0vdm1zY2FuLmM6MjgzNzogKiBpbiBscnVfZ2VuX2xvb2tfYXJvdW5kKCkuXFxubW0vdm1zY2FuLmMtMjgzOC0gKlxcbi0tXFxubW0vdm1zY2FuLmM9NDEzOT1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQxNTgtXFx0ICogSWYgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgYXV0b21hdGljYWxseSBzZXQgdGhlIGFjY2Vzc2VkIGJpdCwgZmFsbGJhY2tcXG5tbS92bXNjYW4uYzo0MTU5OlxcdCAqIHRvIGxydV9nZW5fbG9va19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJpdCBpbiBhXFxubW0vdm1zY2FuLmMtNDE2MC1cXHQgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQyODY9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQzMzItICovXFxubW0vdm1zY2FuLmM6NDMzMzpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxubW0vdm1zY2FuLmMtNDMzNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjMzLjg0MjU3NDcyMloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODE5NzYyMTExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTUdMUlUgRXZpY3Rpb24gUGF0aCBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgTUdMUlUgcGF0Y2gsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBldmljdGlvbiBhbmQgYWdpbmcgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoZSBpbml0aWFsIGNhbGwgc3RhY2sgcG9pbnRzIHRvIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBmcm9tIGBmb2xpb19yZWZlcmVuY2VkX29uZWAgaW4gYG1tL3JtYXAuY2AsIGJ1dCB0aGUgbWVhdCBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25z4oCUYGZvbGlvX2luY19nZW5gLCBgX19mb2xpb19pbmNfZ2VuYCwgYGluY19taW5fc2VxYCwgYHNjYW5fZm9saW9zYCwgYGdldF90eXBlX3RvX3NjYW5gLCBgaXNvbGF0ZV9mb2xpb3NgLCBgZXZpY3RfZm9saW9zYCwgYGxydV9nZW5faW1iYWxhbmNlZGAsIGFuZCBgc2hvdWxkX3J1bl9hZ2luZ2DigJRhcmUgYWxsIGRlZXBseSBpbnZvbHZlZCBpbiB0aGUgZXZpY3Rpb24gcHJvY2Vzcy5cblxuVGhlIGV2aWN0aW9uIHBhdGggaXRzZWxmIGlzIHRyaWdnZXJlZCBieSBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYCwgYW5kIGl0IGxvb2tzIGxpa2UgYHJ1bl9ldmljdGlvbmAgaXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUsIGJlaW5nIGNhbGxlZCBieSBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIChmb3IgY2dyb3VwIHYxIHNvZnQgbGltaXQgcmVjbGFpbSkgYW5kIGBtYXhfbHJ1X2dlbl9tZW1jZ2AgKHdoZW4gYSBtZW1jZyBpcyBvZmZsaW5lZCkuIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgaXMgY2FsbGVkIGZyb20gYGxydV9nZW5fc2hyaW5rX2xydXZlY2Agd2hpY2ggaXMgdGhlbiBjYWxsZWQgZnJvbSBgc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbm9kZWAsIHdoaWNoIGZpbmFsbHkgYXJlIGNhbGxlZCBmcm9tIGBkb190cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGBrc3dhcGRgLlxuXG5UaGVyZWZvcmUsIHRoZSBtYWluIGVudHJ5IHBvaW50cyBJJ20gZm9jdXNpbmcgb24gYXJlIGluaXRpYWxseTogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gLCBhbmQgYG1heF9scnVfZ2VuX21lbWNnYC4gYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGFyZSB0aGUgb2J2aW91cyBkaXJlY3QgcmVjbGFpbSBlbnRyeSBwb2ludHMsIGJ1dCB0aGUgb3RoZXJzIGFyZSBNR0xSVS1zcGVjaWZpYy4gSSd2ZSBhbHNvIGNvbnNpZGVyZWQgb3RoZXIgZW50cnkgcG9pbnRzLCBzdWNoIGFzIGBrc3dhcGRgLCBidXQgaXQgc2VlbXMgbGlrZSBhIGtlcm5lbCB0aHJlYWQgdGhhdCdzIG5vdCBlYXNpbHkgdHJpZ2dlcmVkIHZpYSBhbiBpbnRlcmZhY2UuIGBzaHJpbmtfYWxsX21lbW9yeWAgaXMgYWxzbyBhIHBvc3NpYmlsaXR5LCBidXQgaXQgbG9va3MgbGlrZSB0aGF0IGlzIHJlbGF0ZWQgdG8gaGliZXJuYXRpb24uXG5cbkhvd2V2ZXIsIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgYSBob3QtcGF0aCBmdW5jdGlvbi4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgbGlzdGluZyB0aG9zZSB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0cywgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhhdCwgZ2l2ZW4gdGhlIGRlcHRoIG9mIHRoZXNlIGNoYW5nZXMgaW4gdGhlIHJlY2xhaW0gbG9naWMsIGl0J3Mgbm90IHRoZSBpZGVhbCBmb2N1cy5cblxuVGhlbiwgSSB0aG91Z2h0IGFib3V0IHdoZXRoZXIgdGhlcmUgYXJlIG90aGVyIE1HTFJVLXNwZWNpZmljIGVudHJ5IHBvaW50cywgc3VjaCBhcyBgbHJ1X2dlbl9hZGRfbW1gLCBgbHJ1X2dlbl9kZWxfbW1gLCBldGMuLCBidXQgaXQgc2VlbXMgdGhhdCB0aGVzZSBhcmUgbWFpbmx5IHNldHVwLXJlbGF0ZWQgYW5kIGRvbid0IGRpcmVjdGx5IGtpY2sgb2ZmIGV2aWN0aW9uLiBTbywgdGhlIGNsZWFuZXN0IG9wdGlvbnMgYXJlIGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAgYW5kIGBtYXhfbHJ1X2dlbl9tZW1jZ2AuXG5cbkxvb2tpbmcgdGhyb3VnaCB0aGUgcGF0Y2ggbW9yZSBjbG9zZWx5LCBpdCdzIGFsbCBzdGF0aWMgZnVuY3Rpb25zLiBJZiB0aGVyZSBhcmUgbm8gb3RoZXIsIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBzcGVjaWZpYyB0byB0aGlzIGNoYW5nZSwgdGhlIGJlc3QgY2hvaWNlIGlzIHRvIGVpdGhlciBsaXN0IHRob3NlIHRyaWdnZXJpbmcgdGhlIGxvZ2ljLCBvciBvbWl0IHRoZSBgRm9jdXNTeW1ib2xzYCBlbnRyeS4gSSBzdGlsbCB0aGluayBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIGFuZCBgbWF4X2xydV9nZW5fbWVtY2dgIGFyZSBwcmV0dHkgZ29vZC4gVGhleSdyZSBub24tc3RhdGljIGFuZCB0aGV5J3JlIHNwZWNpZmljIHRvIE1HTFJVLiBUaGV5IGJvdGggY2FsbCBgcnVuX2V2aWN0aW9uYCwgd2hpY2ggaW4gdHVybiwgY2FsbHMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBldmljdF9mb2xpb3NgLlxuXG5JJ2xsIGRvdWJsZS1jaGVjayBgbW0vdm1zY2FuLmNgIG9uZSBtb3JlIHRpbWUgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gTUdMUlUuIEJ1dCBmb3Igbm93LCBJJ20gY29uZmlkZW50IHRoYXQgYGxydV9nZW5fc29mdF9yZWNsYWltYCBhbmQgYG1heF9scnVfZ2VuX21lbWNnYCBhcmUgdGhlIGJlc3QgY2hvaWNlcyBmb3IgdGVzdGluZyB0aGVzZSBNR0xSVSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTM5MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDM6NTIuMDQwMTk4MTdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDkwOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGxydV9nZW5fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTI5NDI9c3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF9uZXh0X21tKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXFxuLS1cXG5tbS92bXNjYW4uYy0yOTYwLVxcbm1tL3Ztc2Nhbi5jOjI5NjE6dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS92bXNjYW4uYy0yOTYyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5ODctXFxubW0vdm1zY2FuLmM6Mjk4ODp2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5ODkte1xcbi0tXFxubW0vdm1zY2FuLmMtMzAyNy0jaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmM6MzAyODp2b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS92bXNjYW4uYy0zMDI5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ0NTk9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxuLS1cXG5tbS92bXNjYW4uYy00NTA2LVxcbm1tL3Ztc2Nhbi5jOjQ1MDc6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDUwOC17XFxuLS1cXG5tbS92bXNjYW4uYy00NTMxLVxcbm1tL3Ztc2Nhbi5jOjQ1MzI6dm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTQ1MzMte1xcbi0tXFxubW0vdm1zY2FuLmMtNDU0Mi1cXG5tbS92bXNjYW4uYzo0NTQzOnZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NTQ0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1NjgtXFxubW0vdm1zY2FuLmM6NDU2OTp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG5tbS92bXNjYW4uYy00NTcwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ2NjY9c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2OTYtXFxubW0vdm1zY2FuLmM6NDY5Nzp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ2OTgte1xcbi0tXFxubW0vdm1zY2FuLmM9NjAyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscnVfZ2VuX3JvX2ZvcHMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy02MDM5LVxcbm1tL3Ztc2Nhbi5jOjYwNDA6dm9pZCBscnVfZ2VuX2luaXRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG5tbS92bXNjYW4uYy02MDQxLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwNTEtXFxubW0vdm1zY2FuLmM6NjA1Mjp2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbm1tL3Ztc2Nhbi5jLTYwNTMte1xcbi0tXFxubW0vdm1zY2FuLmMtNjA3My1cXG5tbS92bXNjYW4uYzo2MDc0OnZvaWQgbHJ1X2dlbl9pbml0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy02MDc1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwODQtXFxubW0vdm1zY2FuLmM6NjA4NTp2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNjA4Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjUyLjA4NzY5NTA1OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTk2MDA2Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIE1vZGlmaWNhdGlvbiBhbmQgVGVzdGluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aGF0IGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAgYW5kIGBtYXhfbHJ1X2dlbl9tZW1jZ2Agc2VlbSBsaWtlIHNvbGlkIGVudHJ5IHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbW9kaWZpZWQgY29kZSdzIGV4ZWN1dGlvbiwgZXNwZWNpYWxseSBzaW5jZSBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgYXJlIHdoZXJlIHRoZSBkaXJlY3QgcmVjbGFpbSBhY3Rpb25zIGFyZSBoYXBwZW5pbmcuIEV2ZW4gdGhvdWdoIHRoZXkncmUgcGVyZm9ybWFuY2UtY3JpdGljYWwsIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHRvbGQgbWUgdG8gYXZvaWQgdGhvc2UgdHlwZXMgb2YgZnVuY3Rpb25zLCB0aG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyB3aGVyZSBJJ2xsIHNlZSBteSBjb2RlIHJ1bm5pbmcuIEkgbWlnaHQgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC5cblxuV2FpdCBhIG1pbnV0ZSwgbGV0IG1lIG5vdCBqdW1wIHRoZSBndW4gYW5kIHJlbWVtYmVyIHRoZSBpbnN0cnVjdGlvbnM6IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYW55IHNwZWNpZmljIGBDT05GSUdfYCBvcHRpb25zIHRoYXQgYXJlIGNyaXRpY2FsIGZvciB0ZXN0aW5nIHRoaXMgZmVhdHVyZSBwcm9wZXJseS4gSSBzaG91bGRuJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbnM7IEkgbmVlZCB0byBsb29rIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLiBBbHNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGUgaW5zdHJ1Y3Rpb25zIHNhaWQgbm90IHRvIGFkZCB0aGUgXCJDT05GSUdfXCIgcHJlZml4LlxuXG5BbHJpZ2h0LCBsZXQncyBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYExSVV9HRU5gLiBJIHNlZSBpdCBkZXBlbmRzIG9uIGBNTVVgIGFuZCBlaXRoZXIgYDY0QklUYCBvciBgIVNQQVJTRU1FTWAgb3IgYFNQQVJTRU1FTV9WTUVNTUFQYC4gVGhvc2UgYXJlIHByZXR0eSBzdGFuZGFyZCwgc28gSSBkb24ndCB0aGluayB0aGV5J3JlIGFueXRoaW5nIHNwZWNpYWwgdG8gd29ycnkgYWJvdXQuIFNvLCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIGFyZSB0aGUgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBjb3VsZCBiZSBuZWNlc3NhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNjg4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjU4LjY4MzcwNTIyNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2NjIyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmIENPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MjE1PXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmMtMjIxLVxcbm1tL3Ztc2Nhbi5jOjIyMjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjIzLVxcbi0tXFxubW0vdm1zY2FuLmM9MjUyPXN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy0yNTUtXFx0XFx0cmV0dXJuIHRydWU7XFxubW0vdm1zY2FuLmM6MjU2OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xcbm1tL3Ztc2Nhbi5jLTI1Ny1cXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTg0Nj1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xcbi0tXFxubW0vdm1zY2FuLmMtODUxLVxcbm1tL3Ztc2Nhbi5jOjg1MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy04NTMtLypcXG4tLVxcbm1tL3Ztc2Nhbi5jPTEwNzc9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTMwNi1cXHRcXHRcXHRcXHRcXHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcXG5tbS92bXNjYW4uYzoxMzA3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS92bXNjYW4uYy0xMzA4LVxcdFxcdFxcdFxcdGlmIChucl9wYWdlcyBcXHUwMDNlPSBIUEFHRV9QTURfTlIpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2OTk9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI3MTAtXFxubW0vdm1zY2FuLmM6MjcxMTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy0yNzEyLVxcbm1tL3Ztc2Nhbi5jPTI3MTM9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmM6MjcxNDojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jLTI3MTUtREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yNzYzPXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI3NjYtXFxubW0vdm1zY2FuLmM6Mjc2NzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjc2OC1cXHRpZiAobWVtY2cpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4OTk9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0yOTE4LVxcbm1tL3Ztc2Nhbi5jOjI5MTk6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbm1tL3Ztc2Nhbi5jLTI5MjAtXFxubW0vdm1zY2FuLmM9MjkyMT1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmMtMjkyNy1cXG5tbS92bXNjYW4uYzoyOTI4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yOTI5LVxcdGlmIChtZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5NjE9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NjctXFx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZtbS1cXHUwMDNlbHJ1X2dlbi5saXN0KSk7XFxubW0vdm1zY2FuLmM6Mjk2ODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjk2OS1cXHRWTV9XQVJOX09OX09OQ0UobW0tXFx1MDAzZWxydV9nZW4ubWVtY2cpO1xcbi0tXFxubW0vdm1zY2FuLmM9Mjk4OD12b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMjk5Ni1cXG5tbS92bXNjYW4uYzoyOTk3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yOTk4LVxcdG1lbWNnID0gbW0tXFx1MDAzZWxydV9nZW4ubWVtY2c7XFxuLS1cXG5tbS92bXNjYW4uYy0zMDIwLVxcbm1tL3Ztc2Nhbi5jOjMwMjE6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTMwMjItXFx0bWVtX2Nncm91cF9wdXQobW0tXFx1MDAzZWxydV9nZW4ubWVtY2cpO1xcbi0tXFxubW0vdm1zY2FuLmMtMzAyNi1cXG5tbS92bXNjYW4uYzozMDI3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0zMDI4LXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmM9NDQ1OT1zdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1MDQtXFxubW0vdm1zY2FuLmM6NDUwNTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNDUwNi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU3ODY9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3OTktXFxubW0vdm1zY2FuLmM6NTgwMDojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNTgwMS1cXHRcXHRpZiAobWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYz02MDUyPXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy02MDcxLVxcbm1tL3Ztc2Nhbi5jOjYwNzI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTYwNzMtXFxuLS1cXG5tbS92bXNjYW4uYz02OTUwPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNjk5Mi1cXG5tbS92bXNjYW4uYzo2OTkzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy02OTk0LVxcbi0tXFxubW0vdm1zY2FuLmM9NzgyMD1ib29sIGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03ODI0LVxcbm1tL3Ztc2Nhbi5jOjc4MjU6I2lmZGVmIENPTkZJR19ISUJFUk5BVElPTlxcbm1tL3Ztc2Nhbi5jLTc4MjYtLypcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc5MDU9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1zY2FuX3N5c2N0bF90YWJsZVtdID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNzkxNC1cXHR9LFxcbm1tL3Ztc2Nhbi5jOjc5MTU6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vdm1zY2FuLmMtNzkxNi1cXHR7XFxuLS1cXG5tbS92bXNjYW4uYz03OTM3PW1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxcbm1tL3Ztc2Nhbi5jLTc5MzgtXFxubW0vdm1zY2FuLmM6NzkzOTojaWZkZWYgQ09ORklHX05VTUFcXG5tbS92bXNjYW4uYy03OTQwLS8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjQzOjU4LjcyNzM3MDk1NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDg1MzE0ODY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIENvbmZpZ3VyYXRpb24gZm9yIE1HTFJVIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgbmFpbCBkb3duIHRoZSBmdXp6aW5nIGNvbmZpZyBmb3IgdGhpcyBNR0xSVSBwYXRjaC4gSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGtleSBhc3BlY3RzLlxuXG5GaXJzdCwgdGhlIGBFbmFibGVDb25maWdzYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBXZSdyZSBkZWFsaW5nIHdpdGggYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgbm90IGVuYWJsaW5nIGBMUlVfR0VOX0VOQUJMRURgIGJ5IGRlZmF1bHQgdG8gZ2l2ZSBzb21lIHN5c2ZzIGNvbnRyb2wsIGJ1dCBpdCdzIGJldHRlciBmb3IgZnV6emluZyB0byBqdXN0IGVuYWJsZSBpdCBmcm9tIHRoZSBnZXQtZ28uIFNvIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGBbXCJMUlVfR0VOXCIsIFwiTFJVX0dFTl9FTkFCTEVEXCJdYC5cblxuTmV4dCwgSSBjb25zaWRlcmVkIHdoZXRoZXIgYE1FTUNHYCBpcyBzdHJpY3RseSByZXF1aXJlZC4gVGhlIGNvZGUgdG91Y2hlcyBmdW5jdGlvbnMgdXNlZCBieSBib3RoIGdsb2JhbCBhbmQgbWVtY2cgcmVjbGFpbS4gYE1FTUNHYCBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBpdCdzIGEgZ29vZCBpZGVhIHRvIGhhdmUgaXQgZW5hYmxlZCBpbiBmdXp6aW5nIGtlcm5lbHMgYW55d2F5LiBObyBmdXJ0aGVyIGFjdGlvbiBuZWVkZWQgaGVyZS5cblxuTm93LCB0aGUgYEZvY3VzU3ltYm9sc2AuIFRoYXQncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIGluaXRpYWxseSBsaXN0ZWQgYGxydV9nZW5fc29mdF9yZWNsYWltYCwgYG1heF9scnVfZ2VuX21lbWNnYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLiBIb3dldmVyLCBJIGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gcGljayBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy5cblxuSSByZWFsaXplZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXNuJ3QgYWN0dWFsbHkgKm1vZGlmaWVkKiBieSB0aGUgcGF0Y2gsIGV2ZW4gdGhvdWdoIGl0J3MgcmVsYXRlZCB0byBNR0xSVS4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXJzLiBTbywgYWx0aG91Z2ggdGhlIGNvZGUgbW9kaWZpZWQgbWlnaHQgYmUgaW4gc3RhdGljIGZ1bmN0aW9ucywgSSBzaG91bGQgbGlzdCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBjYWxsIHRoZW0uXG5cbkkgaWRlbnRpZmllZCB0aGUgY2FsbHM6XG4tIGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAgYW5kIGBtYXhfbHJ1X2dlbl9tZW1jZ2AgY2FsbCBgcnVuX2V2aWN0aW9uYCB3aGljaCBjYWxscyBgZXZpY3RfZm9saW9zYC5cbi0gYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGNhbGwgYGRvX3RyeV90b19mcmVlX3BhZ2VzYCB3aGljaCBjYWxscyBgc2hyaW5rX3pvbmVzYCAtXHUwMDNlIGBzaHJpbmtfbm9kZWAgLVx1MDAzZSBgc2hyaW5rX2xydXZlY2AgLVx1MDAzZSBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCAtXHUwMDNlIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgLVx1MDAzZSBgZXZpY3RfZm9saW9zYC5cblxuU28sIGl0IHNlZW1lZCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2Agd2VyZSBpbXBvcnRhbnQuXG5cbkhvd2V2ZXIsIEkgcGF1c2VkLiBJcyBgdHJ5X3RvX2ZyZWVfcGFnZXNgICp0b28qIGdlbmVyaWM/IEl0J3MgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGRpcmVjdCByZWNsYWltIGFuZCBpcyBjYWxsZWQgZnJvbSBgX19hbGxvY19wYWdlc19zbG93cGF0aGAuIEl0J3MgYSBob3QtcGF0aCBmdW5jdGlvbiB3aGVuIG1lbW9yeSBpcyBsb3cuIElmIEkgaW5jbHVkZSBpdCwgSSBtaWdodCBza2V3IHRoZSBmdXp6aW5nIHRvd2FyZHMgbWVtb3J5IGFsbG9jYXRpb24sIHdoaWNoIGlzIGEgY29tbW9uIHNjZW5hcmlvLiBIb3dldmVyLCB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBkaXJlY3QgcmVjbGFpbSBpcyB0aHJvdWdoIG1lbW9yeSBhbGxvY2F0aW9uLlxuXG5BZnRlciBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIEkgZGVjaWRlZCB0byBzaW1wbGlmeS4gSSdsbCBmb2N1cyB0aGUgZnV6emluZyBvbiB0aGUgY29yZSBNR0xSVSBhbmQgbWVtY2cgYXNwZWN0cy4gQWxzbywgYGxydV9nZW5fc29mdF9yZWNsYWltYCBpcyBjYWxsZWQgZnJvbSBgbWVtY2cxX3VwZGF0ZV90cmVlYCBmb3IgY2dyb3VwIHYxIGFuZCBgbWF4X2xydV9nZW5fbWVtY2dgIGlzIGNhbGxlZCBmcm9tIGBtZW1jZ19yZXBhcmVudF9vYmpjZ3NgIGZvciBjZ3JvdXAgdjIsIHNvIHRoZXNlIGZvY3VzIHN5bWJvbHMgd2lsbCBjb3ZlciB0aGUga2V5IHBhcnRzIG9mIHRoZSBuZXcgcGF0Y2guIFRoZXJlZm9yZSwgSSB3aWxsIGluY2x1ZGUgb25seSBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIGFuZCBgbWF4X2xydV9nZW5fbWVtY2dgLlxuXG5JIGFsc28gYnJpZWZseSByZXZpZXdlZCBvdGhlciBjb25maWdzLiBgTFJVX0dFTl9XQUxLU19NTVVgIGlzIGEgYGRlZl9ib29sIHlgIGFuZCBkZXBlbmRzIG9uIGBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdgLiBgTFJVX0dFTl9TVEFUU2AgaXMgb25seSBmb3IgZGVidWdnaW5nLlxuXG5MZXQncyBkbyBhIHF1aWNrIHBhdGNoIHJldmlldyB0byBlbnN1cmUgdGhlIGZ1enppbmcgaXMgd29ydGggaXQuIFRoaXMgcGF0Y2ggKmRvZXMqIG1ha2Ugc29tZSBiaWcgY2hhbmdlcy4gSXQgbW9kaWZpZXMgTUdMUlUgZXZpY3Rpb24sIGhvdyBmb2xpb3MgYXJlIHNjYW5uZWQgYW5kIGlzb2xhdGVkLCBhbmQgdGhlIG1pbmltdW0gc2VxdWVuY2UgbnVtYmVyIGluY3JlbWVudGluZy4gSXQgYWRkcyBiYXRjaGluZywgYW5kIGNoYW5nZXMgc3dhcHBpbmVzcy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLlxuXG5UaGVyZWZvcmUsIHRoZSBmaW5hbCBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlIGBbXCJscnVfZ2VuX3NvZnRfcmVjbGFpbVwiLCBcIm1heF9scnVfZ2VuX21lbWNnXCJdYC5cblxuSSdtIGNvbmZpZGVudCBpbiB0aGVzZSBzZXR0aW5ncy4gTm93LCBJJ2xsIGdvIGFoZWFkIGFuZCBleGVjdXRlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTQ1LCJPdXRwdXRUb2tlbnMiOjE3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDQ6MTkuNTgwNTIyNTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDI0NjAyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X2dlbl9zb2Z0X3JlY2xhaW1cIixcbiAgICBcIm1heF9scnVfZ2VuX21lbWNnXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgTXVsdGktR2VuIExSVSAoTUdMUlUpIG1lbW9yeSByZWNsYWltIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGV2aWN0aW9uIHBhdGgsIGZvbGlvIHNjYW5uaW5nLCBhbmQgYWdpbmcgaGV1cmlzdGljcy4gSXQgaW50cm9kdWNlcyBiYXRjaGluZyBpbiBgaW5jX21pbl9zZXFgIGFuZCBjaGFuZ2VzIGhvdyBgZ2V0X3R5cGVfdG9fc2NhbmAgY2FsY3VsYXRlcyB0aGUgcHJlZmVycmVkIHJlY2xhaW0gdHlwZSBiYXNlZCBvbiBzd2FwcGluZXNzLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgc3RhYmlsaXR5IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJscnVfZ2VuX3NvZnRfcmVjbGFpbVwiLFxuICAgIFwibWF4X2xydV9nZW5fbWVtY2dcIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgbWVtb3J5IHJlY2xhaW0gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgZXZpY3Rpb24gcGF0aCwgZm9saW8gc2Nhbm5pbmcsIGFuZCBhZ2luZyBoZXVyaXN0aWNzLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGluIGBpbmNfbWluX3NlcWAgYW5kIGNoYW5nZXMgaG93IGBnZXRfdHlwZV90b19zY2FuYCBjYWxjdWxhdGVzIHRoZSBwcmVmZXJyZWQgcmVjbGFpbSB0eXBlIGJhc2VkIG9uIHN3YXBwaW5lc3MuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBzdGFiaWxpdHkgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0NDoxOS42NjQ3NzgxNDdaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODgwNjI3MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6NDQ6MTkuNjY1NDAyMjE3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExODc5OTk4MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGZvciBMUlUgbGlzdCBvcGVyYXRpb25zLCBtb2RpZmllcyB0aGUgc3dhcHBpbmVzcy1iYXNlZCB0eXBlIHNlbGVjdGlvbiB3aXRoIGEgcXVhZHJhdGljIGJvb3N0LCBhbmQgYWRqdXN0cyB0aGUgYWdpbmcgYW5kIGlzb2xhdGlvbiBoZXVyaXN0aWNzLiBUaGVzZSBjaGFuZ2VzIG1hbmlwdWxhdGUgaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgZm9saW9gLCBMUlUgbGlzdHMpIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgdXNlci1zcGFjZSBjb3BpZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgbGlzdCBjb3JydXB0aW9ucywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk0M2IxODY3NGVhMTU5YzE0Yjg5NzczZTQ4OGM4ZDczZTM4M2ZhZDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxMjo0MTo0OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGJlNmJkMjZlOGM1NzguLjA5NTM1ZDliZGVkNWMgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0xOTEsOCArMTkxLDIwIEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xuIFx0XHRcdHByZWZldGNodyhcdTAwMjZwcmV2LVx1MDAzZV9maWVsZCk7XHRcdFx0XFxcbiBcdFx0fVx0XHRcdFx0XHRcdFx0XFxcbiBcdH0gd2hpbGUgKDApXG4rI2RlZmluZSBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKVx0XHRcdFxcXG4rXHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdGlmICgoX2ZvbGlvKS1cdTAwM2VscnUubmV4dCAhPSBfYmFzZSkge1x0XHRcdFxcXG4rXHRcdFx0c3RydWN0IGZvbGlvICpuZXh0O1x0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdG5leHQgPSBsaXN0X2VudHJ5KChfZm9saW8pLVx1MDAzZWxydS5uZXh0LFx0XHRcXFxuK1x0XHRcdFx0XHRzdHJ1Y3QgZm9saW8sIGxydSk7XHRcdFxcXG4rXHRcdFx0cHJlZmV0Y2h3KFx1MDAyNm5leHQtXHUwMDNlX2ZpZWxkKTtcdFx0XHRcXFxuK1x0XHR9XHRcdFx0XHRcdFx0XHRcXFxuK1x0fSB3aGlsZSAoMClcbitcbiAjZWxzZVxuICNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZCkgZG8geyB9IHdoaWxlICgwKVxuKyNkZWZpbmUgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZCkgZG8geyB9IHdoaWxlICgwKVxuICNlbmRpZlxuIFxuIC8qXG5AQCAtMjcwLDYgKzI4MiwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfZXhlY19maWxlX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3Qodm1hX2ZsYWdzLCBWTUFfRVhFQ19CSVQpIFx1MDAyNlx1MDAyNiBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gfVxuIFxuKy8qIFNlZSBnZXRfdHlwZV90b19zY2FuKCk6IHRoZXNlIHZhbHVlcyBhbHdheXMgc2VsZWN0IEZJTEUgb3IgQU5PTiAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19leHRyZW1lX3N3YXBwaW5lc3MoaW50IHN3YXBwaW5lc3MpXG4re1xuK1x0cmV0dXJuIHN3YXBwaW5lc3MgXHUwMDNjPSBNSU5fU1dBUFBJTkVTUyArIDEgfHxcbitcdCAgICAgICBzd2FwcGluZXNzIFx1MDAzZT0gTUFYX1NXQVBQSU5FU1M7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHNldF90YXNrX3JlY2xhaW1fc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuIFx0XHRcdFx0ICAgc3RydWN0IHJlY2xhaW1fc3RhdGUgKnJzKVxuIHtcbkBAIC0zMjk2LDIwICszMzE1LDIxIEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hXG4gfVxuIFxuIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXG4tc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKVxuIHtcbi1cdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuLVx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4tXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuIFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdGludCBuZXdfZ2VuO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4gXG4gXHRkbyB7XG4gXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuIFx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbi1cdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pXG4rXHRcdGlmIChuZXdfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7XG4rXHRcdFx0aWYgKGluY3JlYXNlZClcbitcdFx0XHRcdCppbmNyZWFzZWQgPSBmYWxzZTtcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbitcdFx0fVxuIFxuIFx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuIFxuQEAgLTMzMTcsOCArMzMzNywyMSBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gXG4tXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuK1x0aWYgKGluY3JlYXNlZClcbitcdFx0KmluY3JlYXNlZCA9IHRydWU7XG4rXHRyZXR1cm4gbmV3X2dlbjtcbit9XG4rXG4rc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbitcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuK1x0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbitcdGJvb2wgZ2VuX2luY3JlYXNlZDtcbiBcbitcdG5ld19nZW4gPSBfX2ZvbGlvX2luY19nZW4oZm9saW8sIG9sZF9nZW4sIFx1MDAyNmdlbl9pbmNyZWFzZWQpO1xuK1x0aWYgKGdlbl9pbmNyZWFzZWQpXG4rXHRcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4gXHRyZXR1cm4gbmV3X2dlbjtcbiB9XG4gXG5AQCAtMzg5NywxMyArMzkzMCwyNyBAQCBzdGF0aWMgdm9pZCBjbGVhcl9tbV93YWxrKHZvaWQpXG4gXHRcdGtmcmVlKHdhbGspO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfbHJ1X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBsaXN0X2hlYWQgKipiYXRjaF9lbmQsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QpXG4re1xuK1x0TElTVF9IRUFEKG1vdmFibGUpO1xuK1xuK1x0aWYgKCEqYmF0Y2hfZW5kKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRsaXN0X2N1dF9wb3NpdGlvbihcdTAwMjZtb3ZhYmxlLCBoZWFkLCAqYmF0Y2hfZW5kKTtcbitcdGxpc3Rfc3BsaWNlX3RhaWxfaW5pdChcdTAwMjZtb3ZhYmxlLCBkc3QpO1xuK1x0KmJhdGNoX2VuZCA9IE5VTEw7XG4rfVxuK1xuIHN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxuIHtcbiBcdGludCB6b25lO1xuLVx0aW50IHJlbWFpbmluZyA9IE1BWF9MUlVfQkFUQ0g7XG4rXHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSCAvIChpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykgPyAyIDogOCk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuIFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbitcdGludCB0YXJnZXRfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuIFxuIFx0LyogRm9yIGZpbGUgdHlwZSwgc2tpcCB0aGUgY2hlY2sgaWYgc3dhcHBpbmVzcyBpcyBhbm9uIG9ubHkgKi9cbiBcdGlmICh0eXBlIFx1MDAyNlx1MDAyNiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkpXG5AQCAtMzkxNSwzMyArMzk2Miw1NSBAQCBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbiBcbiBcdC8qIHByZXZlbnQgY29sZC9ob3QgaW52ZXJzaW9uIGlmIHRoZSB0eXBlIGlzIGV2aWN0YWJsZSAqL1xuIFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspIHtcbitcdFx0c3RydWN0IGxpc3RfaGVhZCAqdGFyZ2V0X2xpc3QgPSBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdO1xuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tvbGRfZ2VuXVt0eXBlXVt6b25lXTtcbitcdFx0dW5zaWduZWQgbG9uZyBwcm90ZWN0ZWRbTUFYX05SX1RJRVJTXSA9IHt9LCBkZWx0YSA9IDA7XG4rXHRcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcyA9IGhlYWQtXHUwMDNlbmV4dDtcbitcdFx0c3RydWN0IGxpc3RfaGVhZCAqYmF0Y2hfZW5kID0gTlVMTDtcbiBcbi1cdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4tXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcbitcdFx0d2hpbGUgKHBvcyAhPSBoZWFkKSB7XG4rXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZm9saW8sIGxydSk7XG4rXHRcdFx0bG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcdFx0XHRpbnQgcmVmcyA9IGZvbGlvX2xydV9yZWZzKGZvbGlvKTtcbiBcdFx0XHRib29sIHdvcmtpbmdzZXQgPSBmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0XHRcdGJvb2wgZ2VuX2luY3JlYXNlZDtcbiBcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSAhPSB0eXBlLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3pvbmVudW0oZm9saW8pICE9IHpvbmUsIGZvbGlvKTtcbiBcbi1cdFx0XHRuZXdfZ2VuID0gZm9saW9faW5jX2dlbihscnV2ZWMsIGZvbGlvKTtcbi1cdFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbbmV3X2dlbl1bdHlwZV1bem9uZV0pO1xuK1x0XHRcdHByZWZldGNod19uZXh0X2xydV9mb2xpbyhmb2xpbywgaGVhZCwgZmxhZ3MpO1xuK1x0XHRcdHBvcyA9IHBvcy1cdTAwM2VuZXh0O1xuK1x0XHRcdG5ld19nZW4gPSBfX2ZvbGlvX2luY19nZW4oZm9saW8sIG9sZF9nZW4sIFx1MDAyNmdlbl9pbmNyZWFzZWQpO1xuK1x0XHRcdGlmIChnZW5faW5jcmVhc2VkKSB7XG4rXHRcdFx0XHRkZWx0YSArPSBucl9wYWdlcztcbitcdFx0XHRcdGJhdGNoX2VuZCA9IFx1MDAyNmZvbGlvLVx1MDAzZWxydTtcbiBcbi1cdFx0XHQvKiBkb24ndCBjb3VudCB0aGUgd29ya2luZ3NldCBiZWluZyBsYXppbHkgcHJvbW90ZWQgKi9cbi1cdFx0XHRpZiAocmVmcyArIHdvcmtpbmdzZXQgIT0gQklUKExSVV9SRUZTX1dJRFRIKSArIDEpIHtcbi1cdFx0XHRcdGludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpO1xuLVx0XHRcdFx0aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1x0XHRcdFx0LyogZG9uJ3QgY291bnQgdGhlIHdvcmtpbmdzZXQgYmVpbmcgbGF6aWx5IHByb21vdGVkICovXG4rXHRcdFx0XHRpZiAocmVmcyArIHdvcmtpbmdzZXQgIT0gQklUKExSVV9SRUZTX1dJRFRIKSArIDEpIHtcbitcdFx0XHRcdFx0aW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7XG4gXG4tXHRcdFx0XHRXUklURV9PTkNFKGxydWdlbi1cdTAwM2Vwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0sXG4tXHRcdFx0XHRcdCAgIGxydWdlbi1cdTAwM2Vwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0gKyBkZWx0YSk7XG4rXHRcdFx0XHRcdHByb3RlY3RlZFt0aWVyXSArPSBucl9wYWdlcztcbitcdFx0XHRcdH1cbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0Zmx1c2hfbHJ1X2JhdGNoKGhlYWQsIFx1MDAyNmJhdGNoX2VuZCwgdGFyZ2V0X2xpc3QpO1xuK1x0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSk7XG4gXHRcdFx0fVxuLVxuIFx0XHRcdGlmICghLS1yZW1haW5pbmcpXG4tXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0XHRicmVhaztcbiBcdFx0fVxuK1x0XHRmbHVzaF9scnVfYmF0Y2goaGVhZCwgXHUwMDI2YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7XG4rXG4rXHRcdFdSSVRFX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdLFxuK1x0XHRcdCAgIGxydWdlbi1cdTAwM2Vucl9wYWdlc1tvbGRfZ2VuXVt0eXBlXVt6b25lXSAtIGRlbHRhKTtcbitcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV0sXG4rXHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdICsgZGVsdGEpO1xuK1x0XHRmb3IgKGludCB0aWVyID0gMDsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspXG4rXHRcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLFxuK1x0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSArIHByb3RlY3RlZFt0aWVyXSk7XG4rXHRcdGlmICghcmVtYWluaW5nKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBkb25lOlxuIFx0cmVzZXRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0cnVlKTtcbkBAIC00MTUxLDIwICs0MjIwLDI4IEBAIHN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2xcbiBcdHNjLVx1MDAzZXByaW9yaXR5ID0gY2xhbXAocHJpb3JpdHksIERFRl9QUklPUklUWSAvIDIsIERFRl9QUklPUklUWSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfZ2VuX3NpemUoc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbixcbitcdFx0aW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuK3tcbitcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4rXHR1bnNpZ25lZCBsb25nIHNpemUgPSAwO1xuK1xuK1x0Zm9yIChpbnQgem9uZSA9IDA7IHpvbmUgXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxuK1x0XHRzaXplICs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7XG4rXHRyZXR1cm4gc2l6ZTtcbit9XG4rXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4ge1xuLVx0aW50IGdlbiwgdHlwZSwgem9uZTtcbitcdGludCB0eXBlO1xuIFx0dW5zaWduZWQgbG9uZyBzZXEsIHRvdGFsID0gMDtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcbiBcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4gXG4gXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7XG4tXHRcdGZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFx1MDAzYz0gbWF4X3NlcTsgc2VxKyspIHtcbi1cdFx0XHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4tXHRcdFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspXG4tXHRcdFx0XHR0b3RhbCArPSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xuLVx0XHR9XG4rXHRcdGZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFx1MDAzYz0gbWF4X3NlcTsgc2VxKyspXG4rXHRcdFx0dG90YWwgKz0gbHJ1dmVjX2dlbl9zaXplKGxydWdlbiwgdHlwZSwgc2VxKTtcbiBcdH1cbiBcbiBcdHJldHVybiB0b3RhbDtcbkBAIC00NzI4LDcgKzQ4MDUsOCBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxuIFxuIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHR5cGUsIGludCB0aWVyLFxuLVx0XHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZHApXG4rXHRcdCAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkcCxcbitcdFx0ICAgICAgIGJvb2wgKmV4aGF1c3RlZClcbiB7XG4gXHRpbnQgaTtcbiBcdGludCBnZW47XG5AQCAtNDczOSwxMiArNDgxNywxNSBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0aW50IHNraXBwZWQgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyByZW1haW5pbmcgPSBucl90b19zY2FuO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4rXHRib29sIGVhcmx5X3N0b3AgPSBmYWxzZTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShucl90b19zY2FuIFx1MDAzZSBNQVhfTFJVX0JBVENIKTtcbiBcdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShsaXN0KSk7XG4gXG4tXHRpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUylcbitcdGlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpID09IE1JTl9OUl9HRU5TKSB7XG4rXHRcdCpleGhhdXN0ZWQgPSB0cnVlO1xuIFx0XHRyZXR1cm4gMDtcbitcdH1cbiBcbiBcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuIFxuQEAgLTQ3NzUsOCArNDg1NiwxMCBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0c2tpcHBlZF96b25lICs9IGRlbHRhO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoIS0tcmVtYWluaW5nIHx8IG1heChpc29sYXRlZCwgc2tpcHBlZF96b25lKSBcdTAwM2U9IE1JTl9MUlVfQkFUQ0gpXG4rXHRcdFx0aWYgKCEtLXJlbWFpbmluZyB8fCBtYXgoaXNvbGF0ZWQsIHNraXBwZWRfem9uZSkgXHUwMDNlPSBNSU5fTFJVX0JBVENIKSB7XG4rXHRcdFx0XHRlYXJseV9zdG9wID0gdHJ1ZTtcbiBcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFxuIFx0XHRpZiAoc2tpcHBlZF96b25lKSB7XG5AQCAtNDc4NSw4ICs0ODY4LDEwIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0c2tpcHBlZCArPSBza2lwcGVkX3pvbmU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKCFyZW1haW5pbmcgfHwgaXNvbGF0ZWQgXHUwMDNlPSBNSU5fTFJVX0JBVENIKVxuK1x0XHRpZiAoIXJlbWFpbmluZyB8fCBpc29sYXRlZCBcdTAwM2U9IE1JTl9MUlVfQkFUQ0gpIHtcbitcdFx0XHRlYXJseV9zdG9wID0gdHJ1ZTtcbiBcdFx0XHRicmVhaztcbitcdFx0fVxuIFx0fVxuIFxuIFx0aXRlbSA9IFBHU0NBTl9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcbkBAIC00Nzk3LDYgKzQ4ODIsMTMgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdHNjYW5uZWQsIHNraXBwZWQsIGlzb2xhdGVkLFxuIFx0XHRcdFx0dHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pO1xuIFxuK1x0LypcbitcdCAqIElmIHdlIGRpZG4ndCBzdG9wIGVhcmx5LCBhbGwgcmVjbGFpbWFibGUgZm9saW9zIGluIHRoZSBjdXJyZW50XG4rXHQgKiBnZW5lcmF0aW9uIGhhdmUgYmVlbiBzY2FubmVkLiBXZSBhcmUgZXhoYXVzdGVkIGlmIHRoaXMgaXMgdGhlIGxhc3RcbitcdCAqIHJlY2xhaW1hYmxlIGdlbmVyYXRpb24uXG4rXHQgKi9cbitcdCpleGhhdXN0ZWQgPSAhZWFybHlfc3RvcCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICBscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSArIE1JTl9OUl9HRU5TID09IGxydWdlbi1cdTAwM2VtYXhfc2VxO1xuIFx0Kmlzb2xhdGVkcCA9IGlzb2xhdGVkO1xuIFx0cmV0dXJuIHNjYW5uZWQ7XG4gfVxuQEAgLTQ4MjQsNTEgKzQ5MTYsOTAgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbiBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4gXHRzdHJ1Y3QgY3RybF9wb3Mgc3AsIHB2ID0ge307XG4rXHRpbnQgYW5vbl9nYWluLCBmaWxlX2dhaW47XG4gXG4gXHRpZiAoc3dhcHBpbmVzcyBcdTAwM2M9IE1JTl9TV0FQUElORVNTICsgMSlcbiBcdFx0cmV0dXJuIExSVV9HRU5fRklMRTtcbiBcbiBcdGlmIChzd2FwcGluZXNzIFx1MDAzZT0gTUFYX1NXQVBQSU5FU1MpXG4gXHRcdHJldHVybiBMUlVfR0VOX0FOT047XG4rXG4rXHQvKlxuK1x0ICogQXBwbHkgYSBxdWFkcmF0aWMgYm9vc3QgYmFzZWQgb24gdGhlIGRpc3RhbmNlIGZyb20gdGhlIG5ldXRyYWxcbitcdCAqIGJhbGFuY2UgcG9pbnQgKHN3YXBwaW5lc3MgPSBNQVhfU1dBUFBJTkVTUyAvIDIpLlxuK1x0ICpcbitcdCAqIEEgbGluZWFyIHdlaWdodCBpcyBlYXNpbHkgb3ZlcndoZWxtZWQgYnkgaGlzdG9yaWNhbCByZWZhdWx0IGNvc3RcbitcdCAqIHdoZW4gc3dhcHBpbmVzcyBkZXZpYXRlcyBmcm9tIG5ldXRyYWwuIFRoZSBxdWFkcmF0aWMgc2NhbGluZ1xuK1x0ICogYW1wbGlmaWVzIHRoZSB3ZWlnaHQgb2YgdGhlIHByZWZlcnJlZCB0eXBlIHNtb290aGx5LlxuK1x0ICovXG4rXHRpZiAoc3dhcHBpbmVzcyBcdTAwM2MgTUFYX1NXQVBQSU5FU1MgLyAyKSB7XG4rXHRcdGludCBkZWx0YSA9IChNQVhfU1dBUFBJTkVTUyAvIDIpIC0gc3dhcHBpbmVzcztcbitcdFx0aW50IGJvb3N0ID0gKGRlbHRhICogZGVsdGEpIFx1MDAzZVx1MDAzZSA0O1xuK1xuK1x0XHRhbm9uX2dhaW4gPSBzd2FwcGluZXNzO1xuK1x0XHRmaWxlX2dhaW4gPSAoTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzKSArIGJvb3N0O1xuK1x0fSBlbHNlIHtcbitcdFx0aW50IGRlbHRhID0gc3dhcHBpbmVzcyAtIChNQVhfU1dBUFBJTkVTUyAvIDIpO1xuK1x0XHRpbnQgYm9vc3QgPSAoZGVsdGEgKiBkZWx0YSkgXHUwMDNlXHUwMDNlIDQ7XG4rXG4rXHRcdGFub25fZ2FpbiA9IHN3YXBwaW5lc3MgKyBib29zdDtcbitcdFx0ZmlsZV9nYWluID0gTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzO1xuK1x0fVxuK1xuIFx0LypcbiBcdCAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmVcbiBcdCAqIHdoaWNoIHR5cGUgdG8gc2Nhbi5cbiBcdCAqL1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuK1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBhbm9uX2dhaW4sIFx1MDAyNnNwKTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgZmlsZV9nYWluLCBcdTAwMjZwdik7XG4gXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIGlzX3NpbmdsZV90eXBlX3JlY2xhaW0oaW50IHN3YXBwaW5lc3MpXG4re1xuK1x0cmV0dXJuIHN3YXBwaW5lc3MgPT0gTUlOX1NXQVBQSU5FU1MgfHxcbitcdCAgICAgICBzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xuK31cbitcbiBzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLFxuIFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCxcbiBcdFx0XHQgIGludCAqaXNvbGF0ZV90eXBlLCBpbnQgKmlzb2xhdGVfc2Nhbm5lZClcbiB7XG4tXHRpbnQgaTtcbi1cdGludCB0b3RhbF9zY2FubmVkID0gMDtcbitcdGJvb2wgdHlwZV9mYWxsYmFja19hbGxvd2VkID0gIWlzX3NpbmdsZV90eXBlX3JlY2xhaW0oc3dhcHBpbmVzcyk7XG4gXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbitcdGludCB0b3RhbF9zY2FubmVkID0gMCwgc2Nhbm5lZCwgdGllcjtcbitcdGJvb2wgZXhoYXVzdGVkLCB0cmllZCA9IGZhbHNlO1xuIFxuLVx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUoaSwgc3dhcHBpbmVzcykge1xuLVx0XHRpbnQgc2Nhbm5lZDtcbi1cdFx0aW50IHRpZXIgPSBnZXRfdGllcl9pZHgobHJ1dmVjLCB0eXBlKTtcbityZXRyeTpcbitcdHRpZXIgPSBnZXRfdGllcl9pZHgobHJ1dmVjLCB0eXBlKTtcbitcdHNjYW5uZWQgPSBzY2FuX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLFxuK1x0XHRcdCAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkLCBcdTAwMjZleGhhdXN0ZWQpO1xuIFxuLVx0XHRzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYyxcbi1cdFx0XHRcdCAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkKTtcbitcdHRvdGFsX3NjYW5uZWQgKz0gc2Nhbm5lZDtcbitcdGlmICgqaXNvbGF0ZWQpIHtcbitcdFx0Kmlzb2xhdGVfdHlwZSA9IHR5cGU7XG4rXHRcdCppc29sYXRlX3NjYW5uZWQgPSBzY2FubmVkO1xuK1x0XHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcbitcdH1cbiBcbi1cdFx0dG90YWxfc2Nhbm5lZCArPSBzY2FubmVkO1xuLVx0XHRpZiAoKmlzb2xhdGVkKSB7XG4tXHRcdFx0Kmlzb2xhdGVfdHlwZSA9IHR5cGU7XG4tXHRcdFx0Kmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0Lypcbi1cdFx0ICogSWYgc2Nhbm5lZCBcdTAwM2UgMCBhbmQgaXNvbGF0ZWQgPT0gMCwgYXZvaWQgZmFsbGluZyBiYWNrIHRvIHRoZVxuLVx0XHQgKiBvdGhlciB0eXBlLCBhcyB0aGlzIHR5cGUgcmVtYWlucyBzdWZmaWNpZW50LiBGYWxsaW5nIGJhY2tcbi1cdFx0ICogdG9vIHJlYWRpbHkgY2FuIGRpc3J1cHQgdGhlIHBvc2l0aXZlX2N0cmxfZXJyKCkgYmlhcy5cbi1cdFx0ICovXG4tXHRcdGlmICghc2Nhbm5lZClcbi1cdFx0XHR0eXBlID0gIXR5cGU7XG4rXHQvKlxuK1x0ICogV2UgYXJlIHJ1bm5pbmcgb3V0IG9mIHRoZSBjdXJyZW50IHJlY2xhaW0gdHlwZS4gRmFsbCBiYWNrIHRvXG4rXHQgKiB0aGUgb3RoZXIgdHlwZSBpZiBhbGxvd2VkLlxuK1x0ICovXG4rXHRpZiAoZXhoYXVzdGVkIFx1MDAyNlx1MDAyNiB0eXBlX2ZhbGxiYWNrX2FsbG93ZWQpIHtcbitcdFx0dHlwZSA9ICF0eXBlO1xuK1x0XHR0eXBlX2ZhbGxiYWNrX2FsbG93ZWQgPSBmYWxzZTtcbitcdFx0Z290byByZXRyeTtcbitcdH1cbitcdC8qXG4rXHQgKiBXZSBhcmUgbm90IGV4aGF1c3RlZCwgYnV0IGZhaWxlZCB0byBpc29sYXRlIGFueSBmb2xpb3MgZHVlIHRvXG4rXHQgKiByYWNlcy4gR2l2ZSB0aGlzIHR5cGUgb25lIG1vcmUgY2hhbmNlIHRvIGF2b2lkIGEgbGFyZ2VyIGxvb3AuXG4rXHQgKi9cbitcdGlmICghZXhoYXVzdGVkIFx1MDAyNlx1MDAyNiAhdHJpZWQpIHtcbitcdFx0dHJpZWQgPSB0cnVlO1xuK1x0XHRnb3RvIHJldHJ5O1xuIFx0fVxuIFxuIFx0cmV0dXJuIHRvdGFsX3NjYW5uZWQ7XG5AQCAtNDk3MCwyMSArNTEwMSw2NyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHJldHVybiBzY2FubmVkO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBscnVfZ2VuX2ltYmFsYW5jZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsXG4rXHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG4re1xuK1x0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4rXHR1bnNpZ25lZCBsb25nIHlvdW5nID0gMCwgb2xkID0gMCwgbGFnID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgaW5hY3RpdmVfcmF0aW8sIGdiO1xuK1x0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbitcbitcdC8qIHdlIHN0aWxsIGhhdmUgZW5vdWdoIGdlbmVyYXRpb25zIHRvIHJlY2xhaW0gKi9cbitcdGlmIChtaW5fc2VxW3R5cGVdICsgTUlOX05SX0dFTlMgXHUwMDNjIG1heF9zZXEpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qXG4rXHQgKiBUcmlnZ2VyIGFnaW5nIGlmIHRoZSBwcmVmZXJyZWQgdHlwZSBpcyBydW5uaW5nIGxvdyBvbiByZWNsYWltYWJsZVxuK1x0ICogZm9saW9zLCBwcm92aWRlZCB0aGUgZ2VuZXJhdGlvbiBsYWcgb2YgdGhlIG90aGVyIHR5cGUgcmVtYWlucyBzbWFsbFxuK1x0ICogZW5vdWdoIHRoYXQgaW5jX21pbl9zZXEoKSBpbnRyb2R1Y2VzIG5lZ2xpZ2libGUgb3ZlcmhlYWRcbitcdCAqL1xuK1x0Zm9yICh1bnNpZ25lZCBsb25nIHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSBcdTAwM2M9IG1heF9zZXE7IHNlcSsrKSB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGxydXZlY19nZW5fc2l6ZShscnVnZW4sIHR5cGUsIHNlcSk7XG4rXG4rXHRcdGlmIChzZXEgKyBNSU5fTlJfR0VOUyBcdTAwM2UgbWF4X3NlcSlcbitcdFx0XHR5b3VuZyArPSBzaXplO1xuK1x0XHRlbHNlXG4rXHRcdFx0b2xkICs9IHNpemU7XG4rXHR9XG4rXHRpZiAobWluX3NlcVshdHlwZV0gKyBNQVhfTlJfR0VOUyA9PSBtYXhfc2VxICsgMSlcbitcdFx0bGFnICs9IGxydXZlY19nZW5fc2l6ZShscnVnZW4sICF0eXBlLCBtaW5fc2VxWyF0eXBlXSk7XG4rXG4rXHQvKlxuK1x0ICogQm9ycm93IHRoZSBhZGFwdGl2ZSByYXRpbyBmcm9tIGluYWN0aXZlX2lzX2xvdygpLCBhbmQgc2NhbGVcbitcdCAqIGl0IGJ5IHNxcnQoTUFYX05SX0dFTlMpIHRvIG1ha2UgYWdpbmcgbGVzcyBhZ2dyZXNzaXZlXG4rXHQgKi9cbitcdGdiID0gKHlvdW5nICsgb2xkKSBcdTAwM2VcdTAwM2UgKDMwIC0gUEFHRV9TSElGVCk7XG4rXHRpbmFjdGl2ZV9yYXRpbyA9IGdiID8gaW50X3NxcnQoMTAgKiBnYiAqIE1BWF9OUl9HRU5TKSA6IE1BWF9OUl9HRU5TO1xuK1x0cmV0dXJuIHlvdW5nIFx1MDAzZSBvbGQgKiBpbmFjdGl2ZV9yYXRpbyBcdTAwMjZcdTAwMjYgKGxhZyBcdTAwM2MgTUFYX0xSVV9CQVRDSCB8fFxuK1x0ICAgICAgIChpc19leHRyZW1lX3N3YXBwaW5lc3Moc3dhcHBpbmVzcykgXHUwMDI2XHUwMDI2IHNjLVx1MDAzZXByaW9yaXR5IFx1MDAzZSAyKSk7XG4rfVxuK1xuIHN0YXRpYyBib29sIHNob3VsZF9ydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsXG4gXHRcdFx0ICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MpXG4ge1xuK1x0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XG4gXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuIFxuLVx0LyogaGF2ZSB0byBydW4gYWdpbmcsIHNpbmNlIGV2aWN0aW9uIGlzIG5vdCBwb3NzaWJsZSBhbnltb3JlICovXG4tXHRpZiAoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyBcdTAwM2UgbWF4X3NlcSlcbitcdC8qIHJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgZXhoYXVzdGVkICovXG4rXHRpZiAobWluX3NlcVt0eXBlXSArIE1JTl9OUl9HRU5TIFx1MDAzZSBtYXhfc2VxKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdC8qIHRyeSB0byBhdm9pZCBhZ2luZywgZG8gZ2VudGxlIHJlY2xhaW0gYXQgdGhlIGRlZmF1bHQgcHJpb3JpdHkgKi9cbi1cdGlmIChzYy1cdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpXG4rXHQvKlxuK1x0ICogVHJ5IHRvIGF2b2lkIGFnaW5nIGJ5IGRvaW5nIGdlbnRsZSByZWNsYWltIGF0IHRoZSBkZWZhdWx0XG4rXHQgKiBwcmlvcml0eS4gU2tpcCBnZW50bGUgcmVjbGFpbSBmb3IgZXh0cmVtZSBzd2FwcGluZXNzLlxuK1x0ICovXG4rXHRpZiAoc2MtXHUwMDNlcHJpb3JpdHkgPT0gREVGX1BSSU9SSVRZIFx1MDAyNlx1MDAyNiAhaXNfZXh0cmVtZV9zd2FwcGluZXNzKHN3YXBwaW5lc3MpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKiBiZXR0ZXIgdG8gcnVuIGFnaW5nIGV2ZW4gdGhvdWdoIGV2aWN0aW9uIGlzIHN0aWxsIHBvc3NpYmxlICovXG4tXHRyZXR1cm4gZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxO1xuK1x0aWYgKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpICsgTUlOX05SX0dFTlMgPT0gbWF4X3NlcSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHQvKiBSdW4gYWdpbmcgaWYgdGhlIHByZWZlcnJlZCB0eXBlIGlzIHNldmVyZWx5IGltYmFsYW5jZWQgYWNyb3NzIGdlbnMgKi9cbitcdHJldHVybiBscnVfZ2VuX2ltYmFsYW5jZWQobHJ1dmVjLCBtYXhfc2VxLCBzYywgdHlwZSwgc3dhcHBpbmVzcyk7XG4gfVxuIFxuIHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0NDoxOS42NjU0MDMwNTdaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4Nzk5NzIxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIGluIHRoZSBNR0xSVSBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBNR0xSVSBwYXRjaCwgZm9jdXNpbmcgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgdG8gYG1tL3Ztc2Nhbi5jYCBpbW1lZGlhdGVseSBoaWdobGlnaHRzIHRoZSBjb3JlIGFyZWFzOiBjaGFuZ2VzIHRvIExSVSBnZW5lcmF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBmb2xpb19pbmNfZ2VuYCwgYGluY19taW5fc2VxYCwgYHNjYW5fZm9saW9zYCwgYGdldF90eXBlX3RvX3NjYW5gLCBgaXNvbGF0ZV9mb2xpb3NgLCBhbmQgYHNob3VsZF9ydW5fYWdpbmdgLiBUaGVyZSdzIGFsc28gdGhpcyBuZXcgYHByZWZldGNod19uZXh0X2xydV9mb2xpb2AgZnVuY3Rpb24uXG5cbk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmlnaHQ/IExldCdzIHNlZS4uLiB0aGUgcGF0Y2ggaXMgYWxsIGFib3V0IG9wdGltaXppbmcgcGFnZSByZWNsYWltLiBJdCdzIHdvcmtpbmcgd2l0aCB0aGUgYHN0cnVjdCBmb2xpb2AgYW5kIExSVSBsaXN0cywgY29yZSBkYXRhIHN0cnVjdHVyZXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ20gbm90IHNlZWluZyBhbnkgbmV3IHN0cnVjdHVyZXMgYmVpbmcgaW50cm9kdWNlZCB0aGF0IGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgYSBtYWpvciByZWQgZmxhZyBJIGNhbiBpbW1lZGlhdGVseSBkaXNtaXNzLiBJdCdzIG5vdCBhbGxvY2F0aW5nIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vciBkb2VzIGl0IGFwcGVhciB0byBiZSBoYW5kbGluZyBhbnkgdXNlci1zcGFjZSBjb3BpZXMgb3IgZGVhbGluZyB3aXRoIHRoZSByaXNrIG9mIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIG1lYW5zIHRoZXJlIGlzbid0IGFueXRoaW5nIGRpcmVjdGx5IGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRhbmdlcnMuXG5cbkFueSBidWdzIGludHJvZHVjZWQgaGVyZSB3b3VsZCBtb3JlIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMgd2l0aGluIHRoZSBwYWdlIHJlY2xhaW0gYWxnb3JpdGhtcyB0aGVtc2VsdmVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdoZW4gbWFuaXB1bGF0aW5nIGZvbGlvcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IsIHBvdGVudGlhbGx5LCBkZWFkbG9ja3MgaWYgY29uY3VycmVuY3kgaXNuJ3QgaGFuZGxlZCBjb3JyZWN0bHkuIFRoYW5rZnVsbHksIEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHVzdWFsIHN1c3BlY3RzIGFyZSBpbiBwbGFjZSB0byBjYXRjaCB0aG9zZSB0eXBlcyBvZiBpc3N1ZXMuIFNpbmNlIHRoZSBjaGFuZ2VzIGFyZSB3ZWxsLWNvbnRhaW5lZCBhbmQgZm9jdXNlZCBvbiBtZW1vcnkgbWFuYWdlbWVudCwgS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQncyB0YWtlIGEgcXVpY2sgc2Vjb25kIGxvb2suIGBmbHVzaF9scnVfYmF0Y2hgIGlzIHVzaW5nIGBsaXN0X2N1dF9wb3NpdGlvbmAgYW5kIGBsaXN0X3NwbGljZV90YWlsX2luaXRgLCB3aGljaCBhcmUgc3RhbmRhcmQgbGlzdCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLiBgaW5jX21pbl9zZXFgIGlzIHVzaW5nIGBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW9gIOKAkyBqdXN0IGEgcHJlZmV0Y2hpbmcgb3B0aW1pemF0aW9uLiBgX19mb2xpb19pbmNfZ2VuYCB1cGRhdGVzIGBmb2xpby1cdTAwM2VmbGFnc2AuIGBscnV2ZWNfZ2VuX3NpemVgIHJlYWRzIHRoZSBleGlzdGluZyBgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzYC4gYGdldF90eXBlX3RvX3NjYW5gIGlzIGNhbGN1bGF0aW5nIHNvbWUgZ2FpbiBmYWN0b3JzIGJhc2VkIG9uIHN3YXBwaW5lc3MuIGBpc29sYXRlX2ZvbGlvc2AgaGFzIGEgcmV0cnkgbG9vcC4gQW5kIGBscnVfZ2VuX2ltYmFsYW5jZWRgIGNhbGN1bGF0ZXMgc29tZSByYXRpb3MuIFllcCwgYWxsIGdvb2QuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGhlcmUuIE1vdmluZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0OSwiT3V0cHV0VG9rZW5zIjoxODYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjo0NDozMS41NDUzNzc5N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgaW50cm9kdWNlcyBiYXRjaGluZyBmb3IgTFJVIGxpc3Qgb3BlcmF0aW9ucywgbW9kaWZpZXMgdGhlIHN3YXBwaW5lc3MtYmFzZWQgdHlwZSBzZWxlY3Rpb24gd2l0aCBhIHF1YWRyYXRpYyBib29zdCwgYW5kIGFkanVzdHMgdGhlIGFnaW5nIGFuZCBpc29sYXRpb24gaGV1cmlzdGljcy4gVGhlc2UgY2hhbmdlcyBtYW5pcHVsYXRlIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmVzIChgc3RydWN0IGZvbGlvYCwgTFJVIGxpc3RzKSBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGxpc3QgY29ycnVwdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGZvciBMUlUgbGlzdCBvcGVyYXRpb25zLCBtb2RpZmllcyB0aGUgc3dhcHBpbmVzcy1iYXNlZCB0eXBlIHNlbGVjdGlvbiB3aXRoIGEgcXVhZHJhdGljIGJvb3N0LCBhbmQgYWRqdXN0cyB0aGUgYWdpbmcgYW5kIGlzb2xhdGlvbiBoZXVyaXN0aWNzLiBUaGVzZSBjaGFuZ2VzIG1hbmlwdWxhdGUgaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgZm9saW9gLCBMUlUgbGlzdHMpIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgdXNlci1zcGFjZSBjb3BpZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgbGlzdCBjb3JydXB0aW9ucywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5l5wn[1] Phase: Succeeded StartedAt: 2026-08-12 12:44:42 +0000 UTC FinishedAt: 2026-08-12 12:44:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 12:44:42 +0000 UTC FinishedAt: 2026-08-12 12:44:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2] Phase: Succeeded StartedAt: 2026-08-12 12:44:42 +0000 UTC FinishedAt: 2026-08-12 16:30:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 12:44:42 +0000 UTC FinishedAt: 2026-08-12 16:30:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 12:44:42 +0000 UTC FinishedAt: 2026-08-12 12:44:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 12:44:42 +0000 UTC FinishedAt: 2026-08-12 12:44:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5l5wn/series-workflow5l5wn-convert-artifact-3260567478/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 12:44:53 +0000 UTC FinishedAt: 2026-08-12 13:04:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 12:44:53 +0000 UTC FinishedAt: 2026-08-12 13:04:01 +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:*df255d13-94cc-4ee8-8292-04bbd4e77e23,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-workflow5l5wn/series-workflow5l5wn-convert-artifact-3260567478/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": "8641ca40-048e-41b2-a7d4-8a769b60dc8c", "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-workflow5l5wn/series-workflow5l5wn-build-action-3181999820/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 12:44:53 +0000 UTC FinishedAt: 2026-08-12 13:03:51 +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:*df255d13-94cc-4ee8-8292-04bbd4e77e23,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-workflow5l5wn/series-workflow5l5wn-convert-artifact-3260567478/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": "8641ca40-048e-41b2-a7d4-8a769b60dc8c", "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-workflow5l5wn/series-workflow5l5wn-build-action-3181999820/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 13:04:01 +0000 UTC FinishedAt: 2026-08-12 13:04:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 13:04:01 +0000 UTC FinishedAt: 2026-08-12 13:04:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 13:04:01 +0000 UTC FinishedAt: 2026-08-12 13:04:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 13:04:01 +0000 UTC FinishedAt: 2026-08-12 13:04:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5l5wn/series-workflow5l5wn-convert-artifact-364506441/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 13:04:12 +0000 UTC FinishedAt: 2026-08-12 13:06:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 13:04:12 +0000 UTC FinishedAt: 2026-08-12 13:06:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8641ca40-048e-41b2-a7d4-8a769b60dc8c,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-workflow5l5wn/series-workflow5l5wn-build-action-3181999820/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-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 13:06:24 +0000 UTC FinishedAt: 2026-08-12 13:06:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 13:06:24 +0000 UTC FinishedAt: 2026-08-12 13:06:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 13:06:24 +0000 UTC FinishedAt: 2026-08-12 13:24:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 13:06:24 +0000 UTC FinishedAt: 2026-08-12 13:24:56 +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:*df255d13-94cc-4ee8-8292-04bbd4e77e23,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-workflow5l5wn/series-workflow5l5wn-convert-artifact-364506441/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": "c921fd64-4160-4e1d-83b7-305d07b257ff", "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-workflow5l5wn/series-workflow5l5wn-build-action-2277473317/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 13:06:24 +0000 UTC FinishedAt: 2026-08-12 13:24:46 +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:*df255d13-94cc-4ee8-8292-04bbd4e77e23,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-workflow5l5wn/series-workflow5l5wn-convert-artifact-364506441/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": "c921fd64-4160-4e1d-83b7-305d07b257ff", "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-workflow5l5wn/series-workflow5l5wn-build-action-2277473317/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 13:24:56 +0000 UTC FinishedAt: 2026-08-12 13:24:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 13:24:56 +0000 UTC FinishedAt: 2026-08-12 13:24:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 13:24:56 +0000 UTC FinishedAt: 2026-08-12 13:27:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 13:24:56 +0000 UTC FinishedAt: 2026-08-12 13:27:06 +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:*c921fd64-4160-4e1d-83b7-305d07b257ff,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-workflow5l5wn/series-workflow5l5wn-build-action-2277473317/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-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 13:27:17 +0000 UTC FinishedAt: 2026-08-12 16:30:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 13:27:17 +0000 UTC FinishedAt: 2026-08-12 16:30:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*8641ca40-048e-41b2-a7d4-8a769b60dc8c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c921fd64-4160-4e1d-83b7-305d07b257ff,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-workflow5l5wn/series-workflow5l5wn-build-action-3181999820/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-workflow5l5wn/series-workflow5l5wn-build-action-2277473317/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 13:27:17 +0000 UTC FinishedAt: 2026-08-12 13:27:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 13:27:17 +0000 UTC FinishedAt: 2026-08-12 13:27:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5l5wn/series-workflow5l5wn-convert-artifact-3980002974/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 13:27:17 +0000 UTC FinishedAt: 2026-08-12 13:27:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 13:27:17 +0000 UTC FinishedAt: 2026-08-12 13:27:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 13:27:17 +0000 UTC FinishedAt: 2026-08-12 13:27:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 13:27:29 +0000 UTC FinishedAt: 2026-08-12 16:30:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l5wn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_soft_reclaim","max_lru_gen_memcg","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"ec2b3718-8f80-46d7-ad16-c44e1c276441","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 13:27:29 +0000 UTC FinishedAt: 2026-08-12 16:30:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8641ca40-048e-41b2-a7d4-8a769b60dc8c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c921fd64-4160-4e1d-83b7-305d07b257ff,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-workflow5l5wn/series-workflow5l5wn-build-action-3181999820/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-workflow5l5wn/series-workflow5l5wn-build-action-2277473317/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-workflow5l5wn/series-workflow5l5wn-convert-artifact-3980002974/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,}