Name: series-workflow29tm9 Phase: Succeeded StartedAt: 2026-08-07 16:51:40 +0000 UTC FinishedAt: 2026-08-07 20:37:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[0] Phase: Succeeded StartedAt: 2026-08-07 16:51:40 +0000 UTC FinishedAt: 2026-08-07 16:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 16:51:40 +0000 UTC FinishedAt: 2026-08-07 16:56:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "648294a02bfcd0eddae51877e3b30f8bbb2d4bb6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_KMEMLEAK", "KFENCE", "PREEMPT_RT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "648294a02bfcd0eddae51877e3b30f8bbb2d4bb6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_KMEMLEAK", "KFENCE", "PREEMPT_RT" ], "series_id": "ea037589-5080-48fa-8ecc-bcbc0dca616f" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "kfree_nolock", "set_cpus_allowed_force", "kmemleak_may_need_free", "kfence_obj_to_llnode", "kfence_llnode_to_obj" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX0tNRU1MRUFLJiMzNDssCiAgICAmIzM0O0tGRU5DRSYjMzQ7LAogICAgJiMzNDtQUkVFTVBUX1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a2ZyZWVfbm9sb2NrJiMzNDssCiAgICAmIzM0O3NldF9jcHVzX2FsbG93ZWRfZm9yY2UmIzM0OywKICAgICYjMzQ7a21lbWxlYWtfbWF5X25lZWRfZnJlZSYjMzQ7LAogICAgJiMzNDtrZmVuY2Vfb2JqX3RvX2xsbm9kZSYjMzQ7LAogICAgJiMzNDtrZmVuY2VfbGxub2RlX3RvX29iaiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBmcmVlaW5nIHBhdGhzLCBzcGVjaWZpY2FsbHkgZXh0ZW5kaW5nIGBrZnJlZV9ub2xvY2soKWAgdG8gaGFuZGxlIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgIGFuZCBga21lbV9jYWNoZV9hbGxvYygpYCwgaW5jbHVkaW5nIGxhcmdlIGttYWxsb2NzIGFuZCBLRkVOQ0Ugb2JqZWN0cy4gSXQgZGVmZXJzIGZyZWVpbmcgdG8gYW4gYGlycV93b3JrYCB1c2luZyBhIGxvY2tsZXNzIGxpc3QgKGBsbGlzdGApIHdoZW4gbmVjZXNzYXJ5LiBUaGUgY2hhbmdlcyBpbnZvbHZlIG92ZXJ3cml0aW5nIHBhcnRzIG9mIHRoZSBmcmVlZCBvYmplY3RzIChsaWtlIHRoZSBmcmVlcG9pbnRlciBvciB0aGUgZmlyc3Qgd29yZCBvZiBhIGxhcmdlIGttYWxsb2Mgb2JqZWN0KSB0byBzdG9yZSB0aGUgYGxsaXN0X25vZGVgLiBTaW5jZSB0aGVzZSBvYmplY3RzIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBmcmVlZCwgYW55IGFjY2VzcyB0byB0aGVtIHdvdWxkIGNvbnN0aXR1dGUgYSB1c2UtYWZ0ZXItZnJlZSBidWcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYyBvZiBhY3RpdmUgb2JqZWN0cy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24pIHdpbGwgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBTTFVCIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgZXhwb3NlZCBoZXJlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGtmcmVlX25vbG9jaygpYCBpbiBgbW0vc2x1Yi5jYCB0byBzdXBwb3J0IGZyZWVpbmcgb2JqZWN0cyBhbGxvY2F0ZWQgYnkgYGttYWxsb2MoKWAsIGBrbWVtX2NhY2hlX2FsbG9jKClgLCBhbmQgbGFyZ2Uga21hbGxvY3MsIGFzIHdlbGwgYXMgS0ZFTkNFIG9iamVjdHMuIEl0IGRlZmVycyBmcmVlaW5nIHRvIGFuIGBpcnFfd29ya2AgaWYgbmVjZXNzYXJ5IChlLmcuLCBmb3Iga21lbWxlYWsgb3IgS0ZFTkNFKS4gSXQgYWxzbyBtb2RpZmllcyBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpYCBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AgdG8gdXNlIGBrZnJlZV9ub2xvY2soKWAgaW5zdGVhZCBvZiBga2ZyZWVfcmN1KClgLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2NoZWR1bGVyIGNoYW5nZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTViODZiZGM1OTg0YjZiMGJhMzFkZTA3OTUwMWRlNmIyMTYxOTg3NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTY6NTM6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZmVuY2UuaCBiL2luY2x1ZGUvbGludXgva2ZlbmNlLmhcbmluZGV4IGU1ODIyZjZlN2YyNzkuLjAwNzIxYzg1MjU4ZGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2tmZW5jZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2tmZW5jZS5oXG5AQCAtMTg4LDYgJiM0MzsxODgsOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayBib29sIGtmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKTtcbiYjNDM7dm9pZCAqa2ZlbmNlX2xsbm9kZV90b19vYmooc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSk7XG4mIzQzO1xuIC8qKlxuICAqIGtmZW5jZV9oYW5kbGVfcGFnZV9mYXVsdCgpIC0gcGVyZm9ybSBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciBLRkVOQ0UgcGFnZXNcbiAgKiBAYWRkcjogZmF1bHRpbmcgYWRkcmVzc1xuQEAgLTIzNSw2ICYjNDM7MjM4LDggQEAgc3RhdGljIGlubGluZSBzaXplX3Qga2ZlbmNlX2tzaXplKGNvbnN0IHZvaWQgKmFkZHIpIHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgKmtmZW5jZV9vYmplY3Rfc3RhcnQoY29uc3Qgdm9pZCAqYWRkcikgeyByZXR1cm4gTlVMTDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpIHsgfVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sga2ZlbmNlX2ZyZWUodm9pZCAqYWRkcikgeyByZXR1cm4gZmFsc2U7IH1cbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3Rfbm9kZSAqa2ZlbmNlX29ial90b19sbG5vZGUodm9pZCAqYWRkcikgeyByZXR1cm4gTlVMTDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmtmZW5jZV9sbG5vZGVfdG9fb2JqKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpIHsgcmV0dXJuIE5VTEw7IH1cbiBzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGtmZW5jZV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsXG4gXHRcdFx0XHRcdFx0XHQgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21lbWxlYWsuaCBiL2luY2x1ZGUvbGludXgva21lbWxlYWsuaFxuaW5kZXggZmJkNDI0YjJhYmIxNC4uNTJmNzVmMTBhOWNlNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva21lbWxlYWsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEAgZXh0ZXJuIHZvaWQga21lbWxlYWtfYWxsb2NfcGVyY3B1KGNvbnN0IHZvaWQgX19wZXJjcHUgKnB0ciwgc2l6ZV90IHNpemUsXG4gZXh0ZXJuIHZvaWQga21lbWxlYWtfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBzaXplX3Qgc2l6ZSxcbiBcdFx0XHQgICAgIGdmcF90IGdmcCkgX19yZWY7XG4gZXh0ZXJuIHZvaWQga21lbWxlYWtfZnJlZShjb25zdCB2b2lkICpwdHIpIF9fcmVmO1xuJiM0Mztib29sIGttZW1sZWFrX21heV9uZWVkX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjtcbiBleHRlcm4gdm9pZCBrbWVtbGVha19mcmVlX3BhcnQoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkgX19yZWY7XG4gZXh0ZXJuIHZvaWQga21lbWxlYWtfZnJlZV9wZXJjcHUoY29uc3Qgdm9pZCBfX3BlcmNwdSAqcHRyKSBfX3JlZjtcbiBleHRlcm4gdm9pZCBrbWVtbGVha191cGRhdGVfdHJhY2UoY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjtcbkBAIC01MCw2ICYjNDM7NTEsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKGNvbnN0IHZvaWQgKnB0ciwgc2xhYl9mbGFnc190IGZsYWdzKVxuIFx0XHRrbWVtbGVha19mcmVlKHB0cik7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIShmbGFncyBcdTAwMjYgU0xBQl9OT0xFQUtUUkFDRSkpXG4mIzQzO1x0XHRyZXR1cm4ga21lbWxlYWtfbWF5X25lZWRfZnJlZShwdHIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2VyYXNlKHZvaWQgKipwdHIpXG4ge1xuIFx0KnB0ciA9IE5VTEw7XG5AQCAtODYsNiAmIzQzOzk1LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19mcmVlX3BhcnQoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSlcbiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXG4ge1xuIH1cbiYjNDM7c3RhdGljIGlubGluZSBib29sIGttZW1sZWFrX21heV9uZWVkX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19mcmVlX3BlcmNwdShjb25zdCB2b2lkIF9fcGVyY3B1ICpwdHIpXG4ge1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuaW5kZXggOTYyMjY3MDdjMmY2MS4uZDI5MjllNGUyM2YxMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbkBAIC0yODA3LDIwICYjNDM7MjgwNywxNSBAQCB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZm9yY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbmV3X21hc1xuIFx0XHQudXNlcl9tYXNrID0gTlVMTCxcbiBcdFx0LmZsYWdzICAgICA9IFNDQV9VU0VSLFx0LyogY2xlYXIgdGhlIHVzZXIgcmVxdWVzdGVkIG1hc2sgKi9cbiBcdH07XG4tXHR1bmlvbiBjcHVtYXNrX3JjdWhlYWQge1xuLVx0XHRjcHVtYXNrX3QgY3B1bWFzaztcbi1cdFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbi1cdH07XG4gXG4gXHRzY29wZWRfZ3VhcmQgKF9fdGFza19ycV9sb2NrLCBwKVxuIFx0XHRkb19zZXRfY3B1c19hbGxvd2VkKHAsIFx1MDAyNmFjKTtcbiBcbiBcdC8qXG4gXHQgKiBCZWNhdXNlIHRoaXMgaXMgY2FsbGVkIHdpdGggcC1cdTAwM2VwaV9sb2NrIGhlbGQsIGl0IGlzIG5vdCBwb3NzaWJsZVxuLVx0ICogdG8gdXNlIGtmcmVlKCkgaGVyZSAod2hlbiBQUkVFTVBUX1JUPXkpLCB0aGVyZWZvcmUgcHVudCB0byB1c2luZ1xuLVx0ICoga2ZyZWVfcmN1KCkuXG4mIzQzO1x0ICogdG8gdXNlIGtmcmVlKCkgaGVyZSAod2hlbiBQUkVFTVBUX1JUPXkpLCB0aHVzIHVzZSBrZnJlZV9ub2xvY2soKVxuIFx0ICovXG4tXHRrZnJlZV9yY3UoKHVuaW9uIGNwdW1hc2tfcmN1aGVhZCAqKWFjLnVzZXJfbWFzaywgcmN1KTtcbiYjNDM7XHRrZnJlZV9ub2xvY2soYWMudXNlcl9tYXNrKTtcbiB9XG4gXG4gaW50IGR1cF91c2VyX2NwdXNfcHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYyxcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvc2NoZWQuaCBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oXG5pbmRleCA1NmFjZjUwMmJhMjYwLi42YThkMDU3OGU5NjMzIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL3NjaGVkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oXG5AQCAtMjg4NiwxMiAmIzQzOzI4ODYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGFza19hbGxvd2VkX29uX2NwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjcHUpXG4gXG4gc3RhdGljIGlubGluZSBjcHVtYXNrX3QgKmFsbG9jX3VzZXJfY3B1c19wdHIoaW50IG5vZGUpXG4ge1xuLVx0Lypcbi1cdCAqIFNlZSBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKCkgYWJvdmUgZm9yIHRoZSByY3VfaGVhZCB1c2FnZS5cbi1cdCAqL1xuLVx0aW50IHNpemUgPSBtYXhfdChpbnQsIGNwdW1hc2tfc2l6ZSgpLCBzaXplb2Yoc3RydWN0IHJjdV9oZWFkKSk7XG4tXG4tXHRyZXR1cm4ga21hbGxvY19ub2RlKHNpemUsIEdGUF9LRVJORUwsIG5vZGUpO1xuJiM0MztcdHJldHVybiBrbWFsbG9jX25vZGUoY3B1bWFza19zaXplKCksIEdGUF9LRVJORUwsIG5vZGUpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X3B1c2hfdGFzayhzdHJ1Y3QgcnEgKnJxKVxuZGlmZiAtLWdpdCBhL21tL2tmZW5jZS9jb3JlLmMgYi9tbS9rZmVuY2UvY29yZS5jXG5pbmRleCA2NTc3YmQ3Njk1NGViLi40MjUxOWQyNDY4N2ZmIDEwMDY0NFxuLS0tIGEvbW0va2ZlbmNlL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0va2ZlbmNlL2NvcmUuY1xuQEAgLTEyNzEsNiAmIzQzOzEyNzEsMjAgQEAgdm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG4gXHR9XG4gfVxuIFxuJiM0MztzdHJ1Y3QgbGxpc3Rfbm9kZSAqa2ZlbmNlX29ial90b19sbG5vZGUodm9pZCAqYWRkcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrZmVuY2VfbWV0YWRhdGEgKm1ldGEgPSBhZGRyX3RvX21ldGFkYXRhKCh1bnNpZ25lZCBsb25nKWFkZHIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2bWV0YS1cdTAwM2VsbG5vZGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgKmtmZW5jZV9sbG5vZGVfdG9fb2JqKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhICptZXRhID0gY29udGFpbmVyX29mKGxsbm9kZSwgc3RydWN0IGtmZW5jZV9tZXRhZGF0YSwgbGxub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICh2b2lkICopbWV0YS1cdTAwM2VhZGRyO1xuJiM0Mzt9XG4mIzQzO1xuIGJvb2wga2ZlbmNlX2hhbmRsZV9wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBpc193cml0ZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4ge1xuIFx0Y29uc3QgaW50IHBhZ2VfaW5kZXggPSAoYWRkciAtICh1bnNpZ25lZCBsb25nKV9fa2ZlbmNlX3Bvb2wpIC8gUEFHRV9TSVpFO1xuZGlmZiAtLWdpdCBhL21tL2tmZW5jZS9rZmVuY2UuaCBiL21tL2tmZW5jZS9rZmVuY2UuaFxuaW5kZXggMWY2MThmOWIwZDEyZC4uMGZjYTFkYzJjNzk0MSAxMDA2NDRcbi0tLSBhL21tL2tmZW5jZS9rZmVuY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0va2ZlbmNlL2tmZW5jZS5oXG5AQCAtNTgsNyAmIzQzOzU4LDEwIEBAIHN0cnVjdCBrZmVuY2VfdHJhY2sge1xuIC8qIEtGRU5DRSBtZXRhZGF0YSBwZXIgZ3VhcmRlZCBhbGxvY2F0aW9uLiAqL1xuIHN0cnVjdCBrZmVuY2VfbWV0YWRhdGEge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0IF9fZ3VhcmRlZF9ieShcdTAwMjZrZmVuY2VfZnJlZWxpc3RfbG9jayk7XHQvKiBGcmVlbGlzdCBub2RlLiAqL1xuLVx0c3RydWN0IHJjdV9oZWFkIHJjdV9oZWFkO1x0LyogRm9yIGRlbGF5ZWQgZnJlZWluZy4gKi9cbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7XHQvKiBGb3IgZGVsYXllZCBmcmVlaW5nLiAqL1xuJiM0MztcdFx0c3RydWN0IGxsaXN0X25vZGUgbGxub2RlO1x0LyogRm9yIGtmcmVlX25vbG9jaygpLiAqL1xuJiM0MztcdH07XG4gXG4gXHQvKlxuIFx0ICogTG9jayBwcm90ZWN0aW5nIGJlbG93IGRhdGE7IHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBvZiB0aGUgYmVsb3cgZGF0YSxcbmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuY1xuaW5kZXggN2M3YmExN2NlN2FmMC4uZTM1NjBjZTgyNjMyNiAxMDA2NDRcbi0tLSBhL21tL2ttZW1sZWFrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ttZW1sZWFrLmNcbkBAIC0xMTY4LDYgJiM0MzsxMTY4LDQ4IEBAIHZvaWQgX19yZWYga21lbWxlYWtfZnJlZShjb25zdCB2b2lkICpwdHIpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGttZW1sZWFrX2ZyZWUpO1xuIFxuJiM0MzsvKipcbiYjNDM7ICoga21lbWxlYWtfbWF5X25lZWRfZnJlZSAtIGNoZWNrIGlmIG9iamVjdCBpcyByZWdpc3RlcmVkXG4mIzQzOyAqIEBwdHI6XHRwb2ludGVyIHRvIGJlZ2lubmluZyBvZiB0aGUgb2JqZWN0XG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGtlcm5lbCBhbGxvY2F0b3Igd2hlbiBhbiBvYmplY3Qgc2hvdWxkIGJlXG4mIzQzOyAqIGZyZWVkIGJ1dCB0aGUgY2FsbGVyIGNvbnRleHQgbWlnaHQgYmUgdW5zYWZlIHRvIHNwaW4gb24gdGhlIGludGVybmFsIGxvY2tzLlxuJiM0MzsgKlxuJiM0MzsgKiBJdCB3aWxsIHRoZXJlZm9yZSBvbmx5IHVzZSB0cnlsb2NrIGFuZCB0aHVzIG1pZ2h0IHJldHVybiBhIGZhbHNlIHBvc2l0aXZlXG4mIzQzOyAqIGlmIHRoZSB0cnlsb2NrIGZhaWxzIGFuZCB0aGUgc3RhdHVzIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuJiM0MzsgKlxuJiM0MzsgKiBGb3Igb2JqZWN0cyB0aGF0IChtaWdodCkgbmVlZCBmcmVlLCB0aGUgYWxsb2NhdG9yIGhhcyB0byBkZWZlciB0aGUgYWN0dWFsXG4mIzQzOyAqIGZyZWVpbmcgdG8gYSBzYWZlIGNvbnRleHQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgbW9zdCBvYmplY3RzIGZyZWVkIGZyb20gdGhlIHVuc2FmZSBjb250ZXh0IGFyZSBhbHNvXG4mIzQzOyAqIGFsbG9jYXRlZCBpbiBzdWNoIGNvbnRleHQgYW5kIHRodXMgYXJlIG5vdCByZWdpc3RlcmVkIGluIGttZW1sZWFrLCBzbyBpdCYjMzk7c1xuJiM0MzsgKiB1bmxpa2VseSB0aGUgZGVmZXJlZCBmcmVlaW5nIHdpbGwgYmUgbmVjZXNzYXJ5IGp1c3QgYmVjYXVzZSBrbWVtbGVhayBpc1xuJiM0MzsgKiBlbmFibGVkLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBfX3JlZiBrbWVtbGVha19tYXlfbmVlZF9mcmVlKGNvbnN0IHZvaWQgKnB0cilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0c3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0O1xuJiM0MztcbiYjNDM7XHRwcl9kZWJ1ZyhcJiMzNDslcygweCVweClcXG5cJiMzNDssIF9fZnVuY19fLCBwdHIpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWttZW1sZWFrX2ZyZWVfZW5hYmxlZCB8fCAhcHRyIHx8IElTX0VSUihwdHIpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBPbiBVUCwgcmF3X3NwaW5fdHJ5bG9jaygpIGFsd2F5cyBzdWNjZWVkcyBldmVuIHdoZW4gaXQgaXMgbG9ja2VkICovXG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19TTVApIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhd19zcGluX3RyeWxvY2tfaXJxc2F2ZShcdTAwMjZrbWVtbGVha19sb2NrLCBmbGFncykpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0b2JqZWN0ID0gX19sb29rdXBfb2JqZWN0KCh1bnNpZ25lZCBsb25nKXB0ciwgMCwgMCk7XG4mIzQzO1xuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmttZW1sZWFrX2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICEhb2JqZWN0O1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGttZW1sZWFrX2ZyZWVfcGFydCAtIHBhcnRpYWxseSB1bnJlZ2lzdGVyIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIG9iamVjdFxuICAqIEBwdHI6XHRwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb3IgaW5zaWRlIHRoZSBvYmplY3QuIFRoaXMgYWxzb1xuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggYjlhZWIwMmE4ODBmMS4uM2JlOThmYWE5ZjBkZSAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2x1Yi5jXG5AQCAtNDA1MCw2ICYjNDM7NDA1MCw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX2FsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcbiBzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsge1xuIFx0c3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0cztcbiYjNDM7XHRzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzX2tmZW5jZTtcbiYjNDM7XHRzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzX2xhcmdlX2ttYWxsb2M7XG4gXHRzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzX2J5X3JjdTtcbiBcdHN0cnVjdCBsbGlzdF9oZWFkIHJjdV9zaGVhdmVzO1xuIFx0c3RydWN0IGlycV93b3JrIHdvcms7XG5AQCAtNDA1OSw2ICYjNDM7NDA2MSw4IEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yayk7XG4gXG4gc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yaywgZGVmZXJyZWRfcGVyY3B1X3dvcmspID0ge1xuIFx0Lm9iamVjdHMgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0cyksXG4mIzQzO1x0Lm9iamVjdHNfa2ZlbmNlID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHNfa2ZlbmNlKSxcbiYjNDM7XHQub2JqZWN0c19sYXJnZV9rbWFsbG9jID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHNfbGFyZ2Vfa21hbGxvYyksXG4gXHQub2JqZWN0c19ieV9yY3UgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0c19ieV9yY3UpLFxuIFx0LnJjdV9zaGVhdmVzID0gTExJU1RfSEVBRF9JTklUKHJjdV9zaGVhdmVzKSxcbiBcdC53b3JrID0gSVJRX1dPUktfSU5JVChkZWZlcnJlZF9wZXJjcHVfd29ya19mbiksXG5AQCAtNjM2Myw2ICYjNDM7NjM2NywyMSBAQCBzdGF0aWMgdm9pZCBmcmVlX3RvX3Bjc19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWRcbiYjNDM7X19mcmVlX2xhcmdlX2ttYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihwYWdlKTtcbiYjNDM7XG4mIzQzO1x0bW9kX2xydXZlY19wYWdlX3N0YXRlKHBhZ2UsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CLFxuJiM0MztcdFx0XHQgICAgICAtKFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpKTtcbiYjNDM7XHRfX0NsZWFyUGFnZUxhcmdlS21hbGxvYyhwYWdlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZyZWVfZmxhZ3MgXHUwMDI2IFNMQUJfRlJFRV9OT0xPQ0spXG4mIzQzO1x0XHRmcmVlX2Zyb3plbl9wYWdlc19ub2xvY2socGFnZSwgb3JkZXIpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEluIFBSRUVNUFRfUlQgaXJxX3dvcmsgcnVucyBpbiBwZXItY3B1IGt0aHJlYWQsIHNvIGl0JiMzOTtzIHNhZmVcbiAgKiB0byB0YWtlIHNsZWVwaW5nIHNwaW5fbG9ja3MgZnJvbSBfX3NsYWJfZnJlZSgpLlxuQEAgLTYzNzEsMTYgJiM0Mzs2MzkwLDEyIEBAIHN0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbiBzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspXG4ge1xuIFx0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XG4tXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqb2JqcywgKm9ianNfYnlfcmN1LCAqcmN1X3NoZWF2ZXM7XG4gXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCAqcG9zLCAqdDtcbiBcdHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZiwgKm5leHQ7XG4gXG4gXHRkcHcgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrLCB3b3JrKTtcbi1cdHJjdV9zaGVhdmVzID0gXHUwMDI2ZHB3LVx1MDAzZXJjdV9zaGVhdmVzO1xuLVx0b2JqcyA9IFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzO1xuLVx0b2Jqc19ieV9yY3UgPSBcdTAwMjZkcHctXHUwMDNlb2JqZWN0c19ieV9yY3U7XG4gXG4tXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKG9ianMpO1xuJiM0MztcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHMpO1xuIFx0bGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHQsIGxsbm9kZSkge1xuIFx0XHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcbiBcdFx0c3RydWN0IHNsYWIgKnNsYWI7XG5AQCAtNjM5Miw2ICYjNDM7NjQwNyw4IEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcbiBcdFx0LyogUG9pbnQgJiMzOTt4JiMzOTsgYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIGFsbG9jYXRlZCBvYmplY3QgKi9cbiBcdFx0eCAtPSBzLVx1MDAzZW9mZnNldDtcbiBcbiYjNDM7XHRcdGttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKHgsIHMtXHUwMDNlZmxhZ3MpO1xuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogV2UgdXNlZCBmcmVlcG9pbnRlciBpbiAmIzM5O3gmIzM5OyB0byBsaW5rICYjMzk7eCYjMzk7IGludG8gZGYtXHUwMDNlb2JqZWN0cy5cbiBcdFx0ICogQ2xlYXIgaXQgdG8gTlVMTCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZSBkZXRlY3Rpb25cbkBAIC02NDAzLDcgJiM0Mzs2NDIwLDMwIEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcbiBcdFx0c3RhdChzLCBGUkVFX1NMT1dQQVRIKTtcbiBcdH1cbiBcbi1cdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwob2Jqc19ieV9yY3UpO1xuJiM0MztcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHNfa2ZlbmNlKTtcbiYjNDM7XHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XG4mIzQzO1x0XHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcbiYjNDM7XHRcdHN0cnVjdCBzbGFiICpzbGFiO1xuJiM0MztcdFx0dm9pZCAqb2JqID0ga2ZlbmNlX2xsbm9kZV90b19vYmoocG9zKTtcbiYjNDM7XG4mIzQzO1x0XHRzbGFiID0gdmlydF90b19zbGFiKG9iaik7XG4mIzQzO1x0XHRzID0gc2xhYi1cdTAwM2VzbGFiX2NhY2hlO1xuJiM0MztcbiYjNDM7XHRcdGttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKG9iaiwgcy1cdTAwM2VmbGFncyk7XG4mIzQzO1xuJiM0MztcdFx0X19rZmVuY2VfZnJlZShvYmopO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZkcHctXHUwMDNlb2JqZWN0c19sYXJnZV9rbWFsbG9jKTtcbiYjNDM7XHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZpcnRfdG9fcGFnZShwb3MpO1xuJiM0MztcbiYjNDM7XHRcdGttZW1sZWFrX2ZyZWUocG9zKTtcbiYjNDM7XG4mIzQzO1x0XHRfX2ZyZWVfbGFyZ2Vfa21hbGxvY19wYWdlKHBhZ2UsIFNMQUJfRlJFRV9ERUZBVUxUKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHNfYnlfcmN1KTtcbiBcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHtcbiBcdFx0dm9pZCAqaGVhZCA9IHBvcztcbiBcdFx0dm9pZCAqb2JqcCA9IGt2bWFsbG9jX29ial9zdGFydF9hZGRyKGhlYWQpO1xuQEAgLTY0MTEsMjEgJiM0Mzs2NDUxLDYwIEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcbiBcdFx0a3ZmcmVlX2NhbGxfcmN1KGhlYWQsIG9ianApO1xuIFx0fVxuIFxuLVx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChyY3Vfc2hlYXZlcyk7XG4mIzQzO1x0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZkcHctXHUwMDNlcmN1X3NoZWF2ZXMpO1xuIFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaGVhZiwgbmV4dCwgbGxub2RlLCBsbG5vZGUpXG4gXHRcdGNhbGxfcmN1KFx1MDAyNnNoZWFmLVx1MDAzZXJjdV9oZWFkLCByY3VfZnJlZV9zaGVhZik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGRlZmVyX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKmhlYWQpXG4mIzQzO3N0YXRpYyB2b2lkIGRlZmVyX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcbiB7XG4gXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFBsYWNlIHRoZSBsbGlzdCBub2RlIHdoZXJlIHRoZSBmcmVlcG9pbnRlciB3b3VsZCBiZSBpZiB3ZSBmcmVlZCB0aGVcbiYjNDM7XHQgKiBvYmplY3QgaW1tZWRpYXRlbHkuIFRoYXQgbWVhbnMgd2UgY2FuIHdyaXRlIHRoZXJlIHNhZmVseSwgb25seSBuZWVkXG4mIzQzO1x0ICogdG8gcmVtb3ZlIGthc2FuIHRhZyBmaXJzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRsbG5vZGUgPSBrYXNhbl9yZXNldF90YWcob2JqKSAmIzQzOyBzLVx1MDAzZW9mZnNldDtcbiBcbiBcdGd1YXJkKHByZWVtcHQpKCk7XG4gXG4tXHRoZWFkID0ga2FzYW5fcmVzZXRfdGFnKGhlYWQpO1xuJiM0MztcdGRwdyA9IHRoaXNfY3B1X3B0cihcdTAwMjZkZWZlcnJlZF9wZXJjcHVfd29yayk7XG4mIzQzO1x0aWYgKGxsaXN0X2FkZChsbG5vZGUsIFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzKSlcbiYjNDM7XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNmRwdy1cdTAwM2V3b3JrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGVmZXJfZnJlZV9rZmVuY2Uodm9pZCAqb2JqKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcbiYjNDM7XG4mIzQzO1x0Lyoga2FzYW5fcmVzZXRfdGFnKCkgaXMgbm90IG5lY2Vzc2FyeSwga2ZlbmNlIG9iamVjdHMgYXJlIG5vdCB0YWdnZWQgKi9cbiYjNDM7XHRsbG5vZGUgPSBrZmVuY2Vfb2JqX3RvX2xsbm9kZShvYmopO1xuJiM0MztcbiYjNDM7XHRndWFyZChwcmVlbXB0KSgpO1xuJiM0MztcbiYjNDM7XHRkcHcgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xuJiM0MztcdGlmIChsbGlzdF9hZGQobGxub2RlLCBcdTAwMjZkcHctXHUwMDNlb2JqZWN0c19rZmVuY2UpKVxuJiM0MztcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2ZHB3LVx1MDAzZXdvcmspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2Modm9pZCAqb2JqKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiB3ZSBjYW4gc2ltcGx5IHVzZSB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGFyZ2Uga21hbGxvYyBvYmplY3RcbiYjNDM7XHQgKiBmb3IgdGhlIGxsbm9kZSwgYXMgdGhlcmUmIzM5O3Mgbm8gY3RvciBvciBUWVBFU0FGRV9CWV9SQ1VcbiYjNDM7XHQgKi9cbiYjNDM7XHRsbG5vZGUgPSBrYXNhbl9yZXNldF90YWcob2JqKTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQocHJlZW1wdCkoKTtcbiBcbiBcdGRwdyA9IHRoaXNfY3B1X3B0cihcdTAwMjZkZWZlcnJlZF9wZXJjcHVfd29yayk7XG4tXHRpZiAobGxpc3RfYWRkKGhlYWQgJiM0Mzsgcy1cdTAwM2VvZmZzZXQsIFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzKSlcbiYjNDM7XHRpZiAobGxpc3RfYWRkKGxsbm9kZSwgXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHNfbGFyZ2Vfa21hbGxvYykpXG4gXHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNmRwdy1cdTAwM2V3b3JrKTtcbiB9XG4gXG5AQCAtNjY3Nyw5ICYjNDM7Njc1NiwxMSBAQCBzaXplX3Qga3NpemUoY29uc3Qgdm9pZCAqb2JqcClcbiB9XG4gRVhQT1JUX1NZTUJPTChrc2l6ZSk7XG4gXG4tc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpXG4mIzQzO3N0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0LFxuJiM0MztcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpXG4ge1xuIFx0dW5zaWduZWQgaW50IG9yZGVyID0gY29tcG91bmRfb3JkZXIocGFnZSk7XG4mIzQzO1x0Ym9vbCBub2xvY2sgPSBmcmVlX2ZsYWdzIFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghUGFnZUxhcmdlS21hbGxvYyhwYWdlKSkpIHtcbiBcdFx0ZHVtcF9wYWdlKHBhZ2UsIFwmIzM0O05vdCBhIGttYWxsb2MgYWxsb2NhdGlvblwmIzM0Oyk7XG5AQCAtNjY4OSwxNCAmIzQzOzY3NzAsMTYgQEAgc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpXG4gXHRpZiAoV0FSTl9PTl9PTkNFKG9yZGVyID09IDApKVxuIFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7b2JqZWN0IHBvaW50ZXI6IDB4JXBcXG5cJiMzNDssIG9iamVjdCk7XG4gXG4tXHRrbWVtbGVha19mcmVlKG9iamVjdCk7XG4mIzQzO1x0aWYgKCFub2xvY2spXG4mIzQzO1x0XHRrbWVtbGVha19mcmVlKG9iamVjdCk7XG4mIzQzO1xuIFx0a2FzYW5fa2ZyZWVfbGFyZ2Uob2JqZWN0KTtcbiBcdGttc2FuX2tmcmVlX2xhcmdlKG9iamVjdCk7XG4gXG4tXHRtb2RfbHJ1dmVjX3BhZ2Vfc3RhdGUocGFnZSwgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0IsXG4tXHRcdFx0ICAgICAgLShQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKSk7XG4tXHRfX0NsZWFyUGFnZUxhcmdlS21hbGxvYyhwYWdlKTtcbi1cdGZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyKTtcbiYjNDM7XHRpZiAodW5saWtlbHkobm9sb2NrIFx1MDAyNlx1MDAyNiBrbWVtbGVha19tYXlfbmVlZF9mcmVlKG9iamVjdCkpKVxuJiM0MztcdFx0ZGVmZXJfZnJlZV9sYXJnZV9rbWFsbG9jKG9iamVjdCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0X19mcmVlX2xhcmdlX2ttYWxsb2NfcGFnZShwYWdlLCBmcmVlX2ZsYWdzKTtcbiB9XG4gXG4gLypcbkBAIC02NzE4LDcgJiM0Mzs2ODAxLDcgQEAgdm9pZCBrdmZyZWVfcmN1X2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiBcdFx0aWYgKHNsYWIpXG4gXHRcdFx0c2xhYl9mcmVlKHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgb2JqLCBfUkVUX0lQXyk7XG4gXHRcdGVsc2Vcbi1cdFx0XHRmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgb2JqKTtcbiYjNDM7XHRcdFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iaiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xuIFx0fVxuIH1cbiBcbkBAIC02NzQ0LDcgJiM0Mzs2ODI3LDcgQEAgdm9pZCBrZnJlZShjb25zdCB2b2lkICpvYmplY3QpXG4gXHRzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xuIFx0aWYgKCFzbGFiKSB7XG4gXHRcdC8qIGttYWxsb2Nfbm9sb2NrKCkgZG9lc24mIzM5O3Qgc3VwcG9ydCBsYXJnZSBrbWFsbG9jICovXG4tXHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCAodm9pZCAqKW9iamVjdCk7XG4mIzQzO1x0XHRmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgKHZvaWQgKilvYmplY3QsIFNMQUJfRlJFRV9ERUZBVUxUKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTY3NTUsMTUgJiM0Mzs2ODM4LDE0IEBAIEVYUE9SVF9TWU1CT0woa2ZyZWUpO1xuIFxuIC8qXG4gICogQ2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIHJhd19zcGlubG9ja190IG9yIGZyb20gSVJRIGFuZCBOTUksXG4tICogYnV0IE9OTFkgZm9yIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGttYWxsb2Nfbm9sb2NrKCkuXG4tICogRGVidWcgY2hlY2tzIChsaWtlIGttZW1sZWFrIGFuZCBrZmVuY2UpIHdlcmUgc2tpcHBlZCBvbiBhbGxvY2F0aW9uLFxuLSAqIGhlbmNlXG4tICogb2JqID0ga21hbGxvYygpOyBrZnJlZV9ub2xvY2sob2JqKTtcbi0gKiB3aWxsIG1pc3Mga21lbWxlYWsva2ZlbmNlIGJvb2sga2VlcGluZyBhbmQgd2lsbCBjYXVzZSBmYWxzZSBwb3NpdGl2ZXMuXG4tICogbGFyZ2Vfa21hbGxvYyBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlci5cbiYjNDM7ICogYnV0IG1heSBkZWZlciBmcmVlaW5nIHRvIGlycV93b3JrKCkgaW4gc29tZSBjYXNlcy5cbiYjNDM7ICpcbiYjNDM7ICogSW50ZW5kZWQgbWFpbmx5IGZvciBvYmplY3RzIGFsbG9jYXRlZCBmcm9tIGttYWxsb2Nfbm9sb2NrKCksIGJ1dCBjYW4gaGFuZGxlXG4mIzQzOyAqIGFsc28ga21lbV9jYWNoZV9hbGxvYygpIGFuZCBrbWFsbG9jKCkgb2JqZWN0cywgaW5jbHVkaW5nIGxhcmdlX2ttYWxsb2MuXG4gICovXG4gdm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHN0cnVjdCBzbGFiICpzbGFiO1xuIFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XG4gXHR2b2lkICp4ID0gKHZvaWQgKilvYmplY3Q7XG5AQCAtNjc3MSw5ICYjNDM7Njg1MywxMCBAQCB2b2lkIGtmcmVlX25vbG9jayhjb25zdCB2b2lkICpvYmplY3QpXG4gXHRpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihvYmplY3QpKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0c2xhYiA9IHZpcnRfdG9fc2xhYihvYmplY3QpO1xuJiM0MztcdHBhZ2UgPSB2aXJ0X3RvX3BhZ2Uob2JqZWN0KTtcbiYjNDM7XHRzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xuIFx0aWYgKHVubGlrZWx5KCFzbGFiKSkge1xuLVx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7bGFyZ2Vfa21hbGxvYyBpcyBub3Qgc3VwcG9ydGVkIGJ5IGtmcmVlX25vbG9jaygpXCYjMzQ7KTtcbiYjNDM7XHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCAodm9pZCAqKW9iamVjdCwgU0xBQl9GUkVFX05PTE9DSyk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC02NzkxLDYgJiM0Mzs2ODc0LDEyIEBAIHZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcbiBcdCAqIHNpbmNlIHRoZXkgdGFrZSBzcGlubG9ja3Mgb3Igbm90IHNhZmUgZnJvbSBhbnkgY29udGV4dC5cbiBcdCAqL1xuIFx0a21zYW5fc2xhYl9mcmVlKHMsIHgpO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfa2ZlbmNlX2FkZHJlc3MoeCkpIHtcbiYjNDM7XHRcdGRlZmVyX2ZyZWVfa2ZlbmNlKHgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKlxuIFx0ICogSWYgS0FTQU4gZmluZHMgYSBrZXJuZWwgYnVnIGl0IHdpbGwgZG8ga2FzYW5fcmVwb3J0X2ludmFsaWRfZnJlZSgpXG4gXHQgKiB3aGljaCB3aWxsIGNhbGwgcmF3X3NwaW5fbG9ja19pcnFzYXZlKCkgd2hpY2ggaXMgdGVjaG5pY2FsbHlcbkBAIC02ODA5LDkgJiM0Mzs2ODk4LDIzIEBAIHZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcbiBcdCAqL1xuIFx0a2FzYW5fc2xhYl9mcmVlKHMsIHgsIGZhbHNlLCBmYWxzZSwgLyogc2tpcCBxdWFyYW50aW5lICovdHJ1ZSk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiB3aXRoIGtmcmVlKCkgdGhlIGttZW1sZWFrIGhhbmRsaW5nIGhhcHBlbnMgbXVjaCBzb29uZXIsIGJ1dCBmb3JcbiYjNDM7XHQgKiBkZWZlcmluZyB3ZSBuZWVkIHRvIHdyaXRlIGxsbm9kZSB0byB0aGUgb2JqZWN0JiMzOTtzIGZyZWVwb2ludGVyIHNvXG4mIzQzO1x0ICogd2Ugc2hvdWxkIGhhdmUgaXQgaW4gdGhlIHN0YXRlIHdoZW4gaXQmIzM5O3Mgbm8gbG9uZ2VyIHRyZWF0ZWQgYXNcbiYjNDM7XHQgKiBhbGxvY2F0ZWQgYnkga2FzYW4gZXRjLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogZGVmZXJfZnJlZSB3aWxsIGFsc28gcmVzZXQgdGhlIHBvaW50ZXIgdGFnLCBidXQgaXQmIzM5O3Mgb2sgdG8gZG8gYVxuJiM0MztcdCAqIGRlZmVycmVkIGttZW1sZWFrX2ZyZWUoKSB1c2luZyB0aGUgdW50YWdnZWQgcG9pbnRlciwgYmVjYXVzZVxuJiM0MztcdCAqIF9fbG9va3VwX29iamVjdCgpIHJlc2V0cyB0aGUgdGFnIGFueXdheVxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZSh4LCBzLVx1MDAzZWZsYWdzKSkpXG4mIzQzO1x0XHRnb3RvIGRlZmVyO1xuJiM0MztcbiBcdGlmIChsaWtlbHkoY2FuX2ZyZWVfdG9fcGNzKHNsYWIpKSBcdTAwMjZcdTAwMjYgbGlrZWx5KGZyZWVfdG9fcGNzKHMsIHgsIGZhbHNlKSkpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7ZGVmZXI6XG4gXHQvKlxuIFx0ICogX19zbGFiX2ZyZWUoKSBjYW4gbG9ja2xlc3NseSBjbXB4Y2hnMTYgaW50byBhIHNsYWIsIGJ1dCB0aGVuIGl0IG1pZ2h0XG4gXHQgKiBuZWVkIHRvIHRha2Ugc3Bpbl9sb2NrIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXG5AQCAtNzExNCw3ICYjNDM7NzIxNyw3IEBAIGludCBidWlsZF9kZXRhY2hlZF9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsXG4gXHRpZiAoIXMpIHtcbiBcdFx0LyogSGFuZGxlIGthbGxvYyYjMzk7ZWQgb2JqZWN0cyAqL1xuIFx0XHRpZiAoIXNsYWIpIHtcbi1cdFx0XHRmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgb2JqZWN0KTtcbiYjNDM7XHRcdFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iamVjdCwgU0xBQl9GUkVFX0RFRkFVTFQpO1xuIFx0XHRcdGRmLVx1MDAzZXNsYWIgPSBOVUxMO1xuIFx0XHRcdHJldHVybiBzaXplO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX0tNRU1MRUFLJiMzNDssCiAgICAmIzM0O0tGRU5DRSYjMzQ7LAogICAgJiMzNDtQUkVFTVBUX1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a2ZyZWVfbm9sb2NrJiMzNDssCiAgICAmIzM0O3NldF9jcHVzX2FsbG93ZWRfZm9yY2UmIzM0OywKICAgICYjMzQ7a21lbWxlYWtfbWF5X25lZWRfZnJlZSYjMzQ7LAogICAgJiMzNDtrZmVuY2Vfb2JqX3RvX2xsbm9kZSYjMzQ7LAogICAgJiMzNDtrZmVuY2VfbGxub2RlX3RvX29iaiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBga2ZyZWVfbm9sb2NrKClgIGluIGBtbS9zbHViLmNgIHRvIHN1cHBvcnQgZnJlZWluZyBvYmplY3RzIGFsbG9jYXRlZCBieSBga21hbGxvYygpYCwgYGttZW1fY2FjaGVfYWxsb2MoKWAsIGFuZCBsYXJnZSBrbWFsbG9jcywgYXMgd2VsbCBhcyBLRkVOQ0Ugb2JqZWN0cy4gSXQgZGVmZXJzIGZyZWVpbmcgdG8gYW4gYGlycV93b3JrYCBpZiBuZWNlc3NhcnkgKGUuZy4sIGZvciBrbWVtbGVhayBvciBLRkVOQ0UpLiBJdCBhbHNvIG1vZGlmaWVzIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKClgIGluIGBrZXJuZWwvc2NoZWQvY29yZS5jYCB0byB1c2UgYGtmcmVlX25vbG9jaygpYCBpbnN0ZWFkIG9mIGBrZnJlZV9yY3UoKWAuIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzY2hlZHVsZXIgY2hhbmdlcyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNWI4NmJkYzU5ODRiNmIwYmEzMWRlMDc5NTAxZGU2YjIxNjE5ODc0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxNjo1Mzo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2ZlbmNlLmggYi9pbmNsdWRlL2xpbnV4L2tmZW5jZS5oCmluZGV4IGU1ODIyZjZlN2YyNzkuLjAwNzIxYzg1MjU4ZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2ZlbmNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rZmVuY2UuaApAQCAtMTg4LDYgJiM0MzsxODgsOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayBib29sIGtmZW5jZV9mcmVlKHZvaWQgKmFkZHIpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdHJ1Y3QgbGxpc3Rfbm9kZSAqa2ZlbmNlX29ial90b19sbG5vZGUodm9pZCAqYWRkcik7CiYjNDM7dm9pZCAqa2ZlbmNlX2xsbm9kZV90b19vYmooc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSk7CiYjNDM7CiAvKioKICAqIGtmZW5jZV9oYW5kbGVfcGFnZV9mYXVsdCgpIC0gcGVyZm9ybSBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciBLRkVOQ0UgcGFnZXMKICAqIEBhZGRyOiBmYXVsdGluZyBhZGRyZXNzCkBAIC0yMzUsNiAmIzQzOzIzOCw4IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGtmZW5jZV9rc2l6ZShjb25zdCB2b2lkICphZGRyKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgKmtmZW5jZV9vYmplY3Rfc3RhcnQoY29uc3Qgdm9pZCAqYWRkcikgeyByZXR1cm4gTlVMTDsgfQogc3RhdGljIGlubGluZSB2b2lkIF9fa2ZlbmNlX2ZyZWUodm9pZCAqYWRkcikgeyB9CiBzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGtmZW5jZV9mcmVlKHZvaWQgKmFkZHIpIHsgcmV0dXJuIGZhbHNlOyB9CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3Rfbm9kZSAqa2ZlbmNlX29ial90b19sbG5vZGUodm9pZCAqYWRkcikgeyByZXR1cm4gTlVMTDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqa2ZlbmNlX2xsbm9kZV90b19vYmooc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSkgeyByZXR1cm4gTlVMTDsgfQogc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBrZmVuY2VfaGFuZGxlX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGlzX3dyaXRlLAogCQkJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21lbWxlYWsuaCBiL2luY2x1ZGUvbGludXgva21lbWxlYWsuaAppbmRleCBmYmQ0MjRiMmFiYjE0Li41MmY3NWYxMGE5Y2U2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oCkBAIC0yMiw2ICYjNDM7MjIsNyBAQCBleHRlcm4gdm9pZCBrbWVtbGVha19hbGxvY19wZXJjcHUoY29uc3Qgdm9pZCBfX3BlcmNwdSAqcHRyLCBzaXplX3Qgc2l6ZSwKIGV4dGVybiB2b2lkIGttZW1sZWFrX3ZtYWxsb2MoY29uc3Qgc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgc2l6ZV90IHNpemUsCiAJCQkgICAgIGdmcF90IGdmcCkgX19yZWY7CiBleHRlcm4gdm9pZCBrbWVtbGVha19mcmVlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7CiYjNDM7Ym9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7CiBleHRlcm4gdm9pZCBrbWVtbGVha19mcmVlX3BhcnQoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkgX19yZWY7CiBleHRlcm4gdm9pZCBrbWVtbGVha19mcmVlX3BlcmNwdShjb25zdCB2b2lkIF9fcGVyY3B1ICpwdHIpIF9fcmVmOwogZXh0ZXJuIHZvaWQga21lbWxlYWtfdXBkYXRlX3RyYWNlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7CkBAIC01MCw2ICYjNDM7NTEsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKGNvbnN0IHZvaWQgKnB0ciwgc2xhYl9mbGFnc190IGZsYWdzKQogCQlrbWVtbGVha19mcmVlKHB0cik7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpCiYjNDM7ewomIzQzOwlpZiAoIShmbGFncyAmYW1wOyBTTEFCX05PTEVBS1RSQUNFKSkKJiM0MzsJCXJldHVybiBrbWVtbGVha19tYXlfbmVlZF9mcmVlKHB0cik7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZXJhc2Uodm9pZCAqKnB0cikKIHsKIAkqcHRyID0gTlVMTDsKQEAgLTg2LDYgJiM0Mzs5NSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9wYXJ0KGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpCiB7CiB9CiYjNDM7c3RhdGljIGlubGluZSBib29sIGttZW1sZWFrX21heV9uZWVkX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQogc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2ZyZWVfcGVyY3B1KGNvbnN0IHZvaWQgX19wZXJjcHUgKnB0cikKIHsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jCmluZGV4IDk2MjI2NzA3YzJmNjEuLmQyOTI5ZTRlMjNmMTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2NvcmUuYwpAQCAtMjgwNywyMCAmIzQzOzI4MDcsMTUgQEAgdm9pZCBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld19tYXMKIAkJLnVzZXJfbWFzayA9IE5VTEwsCiAJCS5mbGFncyAgICAgPSBTQ0FfVVNFUiwJLyogY2xlYXIgdGhlIHVzZXIgcmVxdWVzdGVkIG1hc2sgKi8KIAl9OwotCXVuaW9uIGNwdW1hc2tfcmN1aGVhZCB7Ci0JCWNwdW1hc2tfdCBjcHVtYXNrOwotCQlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwotCX07CiAKIAlzY29wZWRfZ3VhcmQgKF9fdGFza19ycV9sb2NrLCBwKQogCQlkb19zZXRfY3B1c19hbGxvd2VkKHAsICZhbXA7YWMpOwogCiAJLyoKIAkgKiBCZWNhdXNlIHRoaXMgaXMgY2FsbGVkIHdpdGggcC0mZ3Q7cGlfbG9jayBoZWxkLCBpdCBpcyBub3QgcG9zc2libGUKLQkgKiB0byB1c2Uga2ZyZWUoKSBoZXJlICh3aGVuIFBSRUVNUFRfUlQ9eSksIHRoZXJlZm9yZSBwdW50IHRvIHVzaW5nCi0JICoga2ZyZWVfcmN1KCkuCiYjNDM7CSAqIHRvIHVzZSBrZnJlZSgpIGhlcmUgKHdoZW4gUFJFRU1QVF9SVD15KSwgdGh1cyB1c2Uga2ZyZWVfbm9sb2NrKCkKIAkgKi8KLQlrZnJlZV9yY3UoKHVuaW9uIGNwdW1hc2tfcmN1aGVhZCAqKWFjLnVzZXJfbWFzaywgcmN1KTsKJiM0MzsJa2ZyZWVfbm9sb2NrKGFjLnVzZXJfbWFzayk7CiB9CiAKIGludCBkdXBfdXNlcl9jcHVzX3B0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMsCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvc2NoZWQuaCBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oCmluZGV4IDU2YWNmNTAyYmEyNjAuLjZhOGQwNTc4ZTk2MzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oCkBAIC0yODg2LDEyICYjNDM7Mjg4Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2FsbG93ZWRfb25fY3B1KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNwdSkKIAogc3RhdGljIGlubGluZSBjcHVtYXNrX3QgKmFsbG9jX3VzZXJfY3B1c19wdHIoaW50IG5vZGUpCiB7Ci0JLyoKLQkgKiBTZWUgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpIGFib3ZlIGZvciB0aGUgcmN1X2hlYWQgdXNhZ2UuCi0JICovCi0JaW50IHNpemUgPSBtYXhfdChpbnQsIGNwdW1hc2tfc2l6ZSgpLCBzaXplb2Yoc3RydWN0IHJjdV9oZWFkKSk7Ci0KLQlyZXR1cm4ga21hbGxvY19ub2RlKHNpemUsIEdGUF9LRVJORUwsIG5vZGUpOwomIzQzOwlyZXR1cm4ga21hbGxvY19ub2RlKGNwdW1hc2tfc2l6ZSgpLCBHRlBfS0VSTkVMLCBub2RlKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmdldF9wdXNoX3Rhc2soc3RydWN0IHJxICpycSkKZGlmZiAtLWdpdCBhL21tL2tmZW5jZS9jb3JlLmMgYi9tbS9rZmVuY2UvY29yZS5jCmluZGV4IDY1NzdiZDc2OTU0ZWIuLjQyNTE5ZDI0Njg3ZmYgMTAwNjQ0Ci0tLSBhL21tL2tmZW5jZS9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0va2ZlbmNlL2NvcmUuYwpAQCAtMTI3MSw2ICYjNDM7MTI3MSwyMCBAQCB2b2lkIF9fa2ZlbmNlX2ZyZWUodm9pZCAqYWRkcikKIAl9CiB9CiAKJiM0MztzdHJ1Y3QgbGxpc3Rfbm9kZSAqa2ZlbmNlX29ial90b19sbG5vZGUodm9pZCAqYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrZmVuY2VfbWV0YWRhdGEgKm1ldGEgPSBhZGRyX3RvX21ldGFkYXRhKCh1bnNpZ25lZCBsb25nKWFkZHIpOwomIzQzOwomIzQzOwlyZXR1cm4gJmFtcDttZXRhLSZndDtsbG5vZGU7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgKmtmZW5jZV9sbG5vZGVfdG9fb2JqKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhICptZXRhID0gY29udGFpbmVyX29mKGxsbm9kZSwgc3RydWN0IGtmZW5jZV9tZXRhZGF0YSwgbGxub2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuICh2b2lkICopbWV0YS0mZ3Q7YWRkcjsKJiM0Mzt9CiYjNDM7CiBib29sIGtmZW5jZV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWNvbnN0IGludCBwYWdlX2luZGV4ID0gKGFkZHIgLSAodW5zaWduZWQgbG9uZylfX2tmZW5jZV9wb29sKSAvIFBBR0VfU0laRTsKZGlmZiAtLWdpdCBhL21tL2tmZW5jZS9rZmVuY2UuaCBiL21tL2tmZW5jZS9rZmVuY2UuaAppbmRleCAxZjYxOGY5YjBkMTJkLi4wZmNhMWRjMmM3OTQxIDEwMDY0NAotLS0gYS9tbS9rZmVuY2Uva2ZlbmNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0va2ZlbmNlL2tmZW5jZS5oCkBAIC01OCw3ICYjNDM7NTgsMTAgQEAgc3RydWN0IGtmZW5jZV90cmFjayB7CiAvKiBLRkVOQ0UgbWV0YWRhdGEgcGVyIGd1YXJkZWQgYWxsb2NhdGlvbi4gKi8KIHN0cnVjdCBrZmVuY2VfbWV0YWRhdGEgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdCBfX2d1YXJkZWRfYnkoJmFtcDtrZmVuY2VfZnJlZWxpc3RfbG9jayk7CS8qIEZyZWVsaXN0IG5vZGUuICovCi0Jc3RydWN0IHJjdV9oZWFkIHJjdV9oZWFkOwkvKiBGb3IgZGVsYXllZCBmcmVlaW5nLiAqLwomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CS8qIEZvciBkZWxheWVkIGZyZWVpbmcuICovCiYjNDM7CQlzdHJ1Y3QgbGxpc3Rfbm9kZSBsbG5vZGU7CS8qIEZvciBrZnJlZV9ub2xvY2soKS4gKi8KJiM0MzsJfTsKIAogCS8qCiAJICogTG9jayBwcm90ZWN0aW5nIGJlbG93IGRhdGE7IHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBvZiB0aGUgYmVsb3cgZGF0YSwKZGlmZiAtLWdpdCBhL21tL2ttZW1sZWFrLmMgYi9tbS9rbWVtbGVhay5jCmluZGV4IDdjN2JhMTdjZTdhZjAuLmUzNTYwY2U4MjYzMjYgMTAwNjQ0Ci0tLSBhL21tL2ttZW1sZWFrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0va21lbWxlYWsuYwpAQCAtMTE2OCw2ICYjNDM7MTE2OCw0OCBAQCB2b2lkIF9fcmVmIGttZW1sZWFrX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoa21lbWxlYWtfZnJlZSk7CiAKJiM0MzsvKioKJiM0MzsgKiBrbWVtbGVha19tYXlfbmVlZF9mcmVlIC0gY2hlY2sgaWYgb2JqZWN0IGlzIHJlZ2lzdGVyZWQKJiM0MzsgKiBAcHRyOglwb2ludGVyIHRvIGJlZ2lubmluZyBvZiB0aGUgb2JqZWN0CiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBrZXJuZWwgYWxsb2NhdG9yIHdoZW4gYW4gb2JqZWN0IHNob3VsZCBiZQomIzQzOyAqIGZyZWVkIGJ1dCB0aGUgY2FsbGVyIGNvbnRleHQgbWlnaHQgYmUgdW5zYWZlIHRvIHNwaW4gb24gdGhlIGludGVybmFsIGxvY2tzLgomIzQzOyAqCiYjNDM7ICogSXQgd2lsbCB0aGVyZWZvcmUgb25seSB1c2UgdHJ5bG9jayBhbmQgdGh1cyBtaWdodCByZXR1cm4gYSBmYWxzZSBwb3NpdGl2ZQomIzQzOyAqIGlmIHRoZSB0cnlsb2NrIGZhaWxzIGFuZCB0aGUgc3RhdHVzIGNhbm5vdCBiZSBkZXRlcm1pbmVkLgomIzQzOyAqCiYjNDM7ICogRm9yIG9iamVjdHMgdGhhdCAobWlnaHQpIG5lZWQgZnJlZSwgdGhlIGFsbG9jYXRvciBoYXMgdG8gZGVmZXIgdGhlIGFjdHVhbAomIzQzOyAqIGZyZWVpbmcgdG8gYSBzYWZlIGNvbnRleHQuCiYjNDM7ICoKJiM0MzsgKiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IG1vc3Qgb2JqZWN0cyBmcmVlZCBmcm9tIHRoZSB1bnNhZmUgY29udGV4dCBhcmUgYWxzbwomIzQzOyAqIGFsbG9jYXRlZCBpbiBzdWNoIGNvbnRleHQgYW5kIHRodXMgYXJlIG5vdCByZWdpc3RlcmVkIGluIGttZW1sZWFrLCBzbyBpdCYjMzk7cwomIzQzOyAqIHVubGlrZWx5IHRoZSBkZWZlcmVkIGZyZWVpbmcgd2lsbCBiZSBuZWNlc3NhcnkganVzdCBiZWNhdXNlIGttZW1sZWFrIGlzCiYjNDM7ICogZW5hYmxlZC4KJiM0MzsgKi8KJiM0Mztib29sIF9fcmVmIGttZW1sZWFrX21heV9uZWVkX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJc3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0OwomIzQzOwomIzQzOwlwcl9kZWJ1ZygmIzM0OyVzKDB4JXB4KVxuJiMzNDssIF9fZnVuY19fLCBwdHIpOwomIzQzOwomIzQzOwlpZiAoIWttZW1sZWFrX2ZyZWVfZW5hYmxlZCB8fCAhcHRyIHx8IElTX0VSUihwdHIpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBPbiBVUCwgcmF3X3NwaW5fdHJ5bG9jaygpIGFsd2F5cyBzdWNjZWVkcyBldmVuIHdoZW4gaXQgaXMgbG9ja2VkICovCiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfU01QKSAmYW1wOyZhbXA7IGluX25taSgpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWlmICghcmF3X3NwaW5fdHJ5bG9ja19pcnFzYXZlKCZhbXA7a21lbWxlYWtfbG9jaywgZmxhZ3MpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CW9iamVjdCA9IF9fbG9va3VwX29iamVjdCgodW5zaWduZWQgbG9uZylwdHIsIDAsIDApOwomIzQzOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2ttZW1sZWFrX2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJcmV0dXJuICEhb2JqZWN0OwomIzQzO30KJiM0MzsKIC8qKgogICoga21lbWxlYWtfZnJlZV9wYXJ0IC0gcGFydGlhbGx5IHVucmVnaXN0ZXIgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgb2JqZWN0CiAgKiBAcHRyOglwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb3IgaW5zaWRlIHRoZSBvYmplY3QuIFRoaXMgYWxzbwpkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IGI5YWViMDJhODgwZjEuLjNiZTk4ZmFhOWYwZGUgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmMKQEAgLTQwNTAsNiAmIzQzOzQwNTAsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9hbGwoc3RydWN0IGttZW1fY2FjaGUgKnMpCiAKIHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayB7CiAJc3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0czsKJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0c19rZmVuY2U7CiYjNDM7CXN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHNfbGFyZ2Vfa21hbGxvYzsKIAlzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzX2J5X3JjdTsKIAlzdHJ1Y3QgbGxpc3RfaGVhZCByY3Vfc2hlYXZlczsKIAlzdHJ1Y3QgaXJxX3dvcmsgd29yazsKQEAgLTQwNTksNiAmIzQzOzQwNjEsOCBAQCBzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspOwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrLCBkZWZlcnJlZF9wZXJjcHVfd29yaykgPSB7CiAJLm9iamVjdHMgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0cyksCiYjNDM7CS5vYmplY3RzX2tmZW5jZSA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzX2tmZW5jZSksCiYjNDM7CS5vYmplY3RzX2xhcmdlX2ttYWxsb2MgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0c19sYXJnZV9rbWFsbG9jKSwKIAkub2JqZWN0c19ieV9yY3UgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0c19ieV9yY3UpLAogCS5yY3Vfc2hlYXZlcyA9IExMSVNUX0hFQURfSU5JVChyY3Vfc2hlYXZlcyksCiAJLndvcmsgPSBJUlFfV09SS19JTklUKGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKSwKQEAgLTYzNjMsNiAmIzQzOzYzNjcsMjEgQEAgc3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKQogCX0KIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZAomIzQzO19fZnJlZV9sYXJnZV9rbWFsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IG9yZGVyID0gY29tcG91bmRfb3JkZXIocGFnZSk7CiYjNDM7CiYjNDM7CW1vZF9scnV2ZWNfcGFnZV9zdGF0ZShwYWdlLCBOUl9TTEFCX1VOUkVDTEFJTUFCTEVfQiwKJiM0MzsJCQkgICAgICAtKFBBR0VfU0laRSAmbHQ7Jmx0OyBvcmRlcikpOwomIzQzOwlfX0NsZWFyUGFnZUxhcmdlS21hbGxvYyhwYWdlKTsKJiM0MzsKJiM0MzsJaWYgKGZyZWVfZmxhZ3MgJmFtcDsgU0xBQl9GUkVFX05PTE9DSykKJiM0MzsJCWZyZWVfZnJvemVuX3BhZ2VzX25vbG9jayhwYWdlLCBvcmRlcik7CiYjNDM7CWVsc2UKJiM0MzsJCWZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogSW4gUFJFRU1QVF9SVCBpcnFfd29yayBydW5zIGluIHBlci1jcHUga3RocmVhZCwgc28gaXQmIzM5O3Mgc2FmZQogICogdG8gdGFrZSBzbGVlcGluZyBzcGluX2xvY2tzIGZyb20gX19zbGFiX2ZyZWUoKS4KQEAgLTYzNzEsMTYgJiM0Mzs2MzkwLDEyIEBAIHN0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcCkKIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaykKIHsKIAlzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdzsKLQlzdHJ1Y3QgbGxpc3RfaGVhZCAqb2JqcywgKm9ianNfYnlfcmN1LCAqcmN1X3NoZWF2ZXM7CiAJc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSwgKnBvcywgKnQ7CiAJc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLCAqbmV4dDsKIAogCWRwdyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmssIHdvcmspOwotCXJjdV9zaGVhdmVzID0gJmFtcDtkcHctJmd0O3JjdV9zaGVhdmVzOwotCW9ianMgPSAmYW1wO2Rwdy0mZ3Q7b2JqZWN0czsKLQlvYmpzX2J5X3JjdSA9ICZhbXA7ZHB3LSZndDtvYmplY3RzX2J5X3JjdTsKIAotCWxsbm9kZSA9IGxsaXN0X2RlbF9hbGwob2Jqcyk7CiYjNDM7CWxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtkcHctJmd0O29iamVjdHMpOwogCWxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHsKIAkJc3RydWN0IGttZW1fY2FjaGUgKnM7CiAJCXN0cnVjdCBzbGFiICpzbGFiOwpAQCAtNjM5Miw2ICYjNDM7NjQwNyw4IEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaykKIAkJLyogUG9pbnQgJiMzOTt4JiMzOTsgYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIGFsbG9jYXRlZCBvYmplY3QgKi8KIAkJeCAtPSBzLSZndDtvZmZzZXQ7CiAKJiM0MzsJCWttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKHgsIHMtJmd0O2ZsYWdzKTsKJiM0MzsKIAkJLyoKIAkJICogV2UgdXNlZCBmcmVlcG9pbnRlciBpbiAmIzM5O3gmIzM5OyB0byBsaW5rICYjMzk7eCYjMzk7IGludG8gZGYtJmd0O29iamVjdHMuCiAJCSAqIENsZWFyIGl0IHRvIE5VTEwgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmUgZGV0ZWN0aW9uCkBAIC02NDAzLDcgJiM0Mzs2NDIwLDMwIEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaykKIAkJc3RhdChzLCBGUkVFX1NMT1dQQVRIKTsKIAl9CiAKLQlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKG9ianNfYnlfcmN1KTsKJiM0MzsJbGxub2RlID0gbGxpc3RfZGVsX2FsbCgmYW1wO2Rwdy0mZ3Q7b2JqZWN0c19rZmVuY2UpOwomIzQzOwlsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7CiYjNDM7CQlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKJiM0MzsJCXN0cnVjdCBzbGFiICpzbGFiOwomIzQzOwkJdm9pZCAqb2JqID0ga2ZlbmNlX2xsbm9kZV90b19vYmoocG9zKTsKJiM0MzsKJiM0MzsJCXNsYWIgPSB2aXJ0X3RvX3NsYWIob2JqKTsKJiM0MzsJCXMgPSBzbGFiLSZndDtzbGFiX2NhY2hlOwomIzQzOwomIzQzOwkJa21lbWxlYWtfZnJlZV9yZWN1cnNpdmUob2JqLCBzLSZndDtmbGFncyk7CiYjNDM7CiYjNDM7CQlfX2tmZW5jZV9mcmVlKG9iaik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGxub2RlID0gbGxpc3RfZGVsX2FsbCgmYW1wO2Rwdy0mZ3Q7b2JqZWN0c19sYXJnZV9rbWFsbG9jKTsKJiM0MzsJbGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHQsIGxsbm9kZSkgewomIzQzOwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UocG9zKTsKJiM0MzsKJiM0MzsJCWttZW1sZWFrX2ZyZWUocG9zKTsKJiM0MzsKJiM0MzsJCV9fZnJlZV9sYXJnZV9rbWFsbG9jX3BhZ2UocGFnZSwgU0xBQl9GUkVFX0RFRkFVTFQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtkcHctJmd0O29iamVjdHNfYnlfcmN1KTsKIAlsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7CiAJCXZvaWQgKmhlYWQgPSBwb3M7CiAJCXZvaWQgKm9ianAgPSBrdm1hbGxvY19vYmpfc3RhcnRfYWRkcihoZWFkKTsKQEAgLTY0MTEsMjEgJiM0Mzs2NDUxLDYwIEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaykKIAkJa3ZmcmVlX2NhbGxfcmN1KGhlYWQsIG9ianApOwogCX0KIAotCWxsbm9kZSA9IGxsaXN0X2RlbF9hbGwocmN1X3NoZWF2ZXMpOwomIzQzOwlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7ZHB3LSZndDtyY3Vfc2hlYXZlcyk7CiAJbGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaGVhZiwgbmV4dCwgbGxub2RlLCBsbG5vZGUpCiAJCWNhbGxfcmN1KCZhbXA7c2hlYWYtJmd0O3JjdV9oZWFkLCByY3VfZnJlZV9zaGVhZik7CiB9CiAKLXN0YXRpYyB2b2lkIGRlZmVyX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKmhlYWQpCiYjNDM7c3RhdGljIHZvaWQgZGVmZXJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKQogewogCXN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3OwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQbGFjZSB0aGUgbGxpc3Qgbm9kZSB3aGVyZSB0aGUgZnJlZXBvaW50ZXIgd291bGQgYmUgaWYgd2UgZnJlZWQgdGhlCiYjNDM7CSAqIG9iamVjdCBpbW1lZGlhdGVseS4gVGhhdCBtZWFucyB3ZSBjYW4gd3JpdGUgdGhlcmUgc2FmZWx5LCBvbmx5IG5lZWQKJiM0MzsJICogdG8gcmVtb3ZlIGthc2FuIHRhZyBmaXJzdC4KJiM0MzsJICovCiYjNDM7CWxsbm9kZSA9IGthc2FuX3Jlc2V0X3RhZyhvYmopICYjNDM7IHMtJmd0O29mZnNldDsKIAogCWd1YXJkKHByZWVtcHQpKCk7CiAKLQloZWFkID0ga2FzYW5fcmVzZXRfdGFnKGhlYWQpOwomIzQzOwlkcHcgPSB0aGlzX2NwdV9wdHIoJmFtcDtkZWZlcnJlZF9wZXJjcHVfd29yayk7CiYjNDM7CWlmIChsbGlzdF9hZGQobGxub2RlLCAmYW1wO2Rwdy0mZ3Q7b2JqZWN0cykpCiYjNDM7CQlpcnFfd29ya19xdWV1ZSgmYW1wO2Rwdy0mZ3Q7d29yayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRlZmVyX2ZyZWVfa2ZlbmNlKHZvaWQgKm9iaikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3OwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlOwomIzQzOwomIzQzOwkvKiBrYXNhbl9yZXNldF90YWcoKSBpcyBub3QgbmVjZXNzYXJ5LCBrZmVuY2Ugb2JqZWN0cyBhcmUgbm90IHRhZ2dlZCAqLwomIzQzOwlsbG5vZGUgPSBrZmVuY2Vfb2JqX3RvX2xsbm9kZShvYmopOwomIzQzOwomIzQzOwlndWFyZChwcmVlbXB0KSgpOwomIzQzOwomIzQzOwlkcHcgPSB0aGlzX2NwdV9wdHIoJmFtcDtkZWZlcnJlZF9wZXJjcHVfd29yayk7CiYjNDM7CWlmIChsbGlzdF9hZGQobGxub2RlLCAmYW1wO2Rwdy0mZ3Q7b2JqZWN0c19rZmVuY2UpKQomIzQzOwkJaXJxX3dvcmtfcXVldWUoJmFtcDtkcHctJmd0O3dvcmspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2Modm9pZCAqb2JqKQomIzQzO3sKJiM0MzsJc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHdlIGNhbiBzaW1wbHkgdXNlIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsYXJnZSBrbWFsbG9jIG9iamVjdAomIzQzOwkgKiBmb3IgdGhlIGxsbm9kZSwgYXMgdGhlcmUmIzM5O3Mgbm8gY3RvciBvciBUWVBFU0FGRV9CWV9SQ1UKJiM0MzsJICovCiYjNDM7CWxsbm9kZSA9IGthc2FuX3Jlc2V0X3RhZyhvYmopOwomIzQzOwomIzQzOwlndWFyZChwcmVlbXB0KSgpOwogCiAJZHB3ID0gdGhpc19jcHVfcHRyKCZhbXA7ZGVmZXJyZWRfcGVyY3B1X3dvcmspOwotCWlmIChsbGlzdF9hZGQoaGVhZCAmIzQzOyBzLSZndDtvZmZzZXQsICZhbXA7ZHB3LSZndDtvYmplY3RzKSkKJiM0MzsJaWYgKGxsaXN0X2FkZChsbG5vZGUsICZhbXA7ZHB3LSZndDtvYmplY3RzX2xhcmdlX2ttYWxsb2MpKQogCQlpcnFfd29ya19xdWV1ZSgmYW1wO2Rwdy0mZ3Q7d29yayk7CiB9CiAKQEAgLTY2NzcsOSAmIzQzOzY3NTYsMTEgQEAgc2l6ZV90IGtzaXplKGNvbnN0IHZvaWQgKm9ianApCiB9CiBFWFBPUlRfU1lNQk9MKGtzaXplKTsKIAotc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpCiYjNDM7c3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QsCiYjNDM7CQkJICAgICAgIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKQogewogCXVuc2lnbmVkIGludCBvcmRlciA9IGNvbXBvdW5kX29yZGVyKHBhZ2UpOwomIzQzOwlib29sIG5vbG9jayA9IGZyZWVfZmxhZ3MgJmFtcDsgU0xBQl9GUkVFX05PTE9DSzsKIAogCWlmIChXQVJOX09OX09OQ0UoIVBhZ2VMYXJnZUttYWxsb2MocGFnZSkpKSB7CiAJCWR1bXBfcGFnZShwYWdlLCAmIzM0O05vdCBhIGttYWxsb2MgYWxsb2NhdGlvbiYjMzQ7KTsKQEAgLTY2ODksMTQgJiM0Mzs2NzcwLDE2IEBAIHN0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0KQogCWlmIChXQVJOX09OX09OQ0Uob3JkZXIgPT0gMCkpCiAJCXByX3dhcm5fb25jZSgmIzM0O29iamVjdCBwb2ludGVyOiAweCVwXG4mIzM0Oywgb2JqZWN0KTsKIAotCWttZW1sZWFrX2ZyZWUob2JqZWN0KTsKJiM0MzsJaWYgKCFub2xvY2spCiYjNDM7CQlrbWVtbGVha19mcmVlKG9iamVjdCk7CiYjNDM7CiAJa2FzYW5fa2ZyZWVfbGFyZ2Uob2JqZWN0KTsKIAlrbXNhbl9rZnJlZV9sYXJnZShvYmplY3QpOwogCi0JbW9kX2xydXZlY19wYWdlX3N0YXRlKHBhZ2UsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CLAotCQkJICAgICAgLShQQUdFX1NJWkUgJmx0OyZsdDsgb3JkZXIpKTsKLQlfX0NsZWFyUGFnZUxhcmdlS21hbGxvYyhwYWdlKTsKLQlmcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlcik7CiYjNDM7CWlmICh1bmxpa2VseShub2xvY2sgJmFtcDsmYW1wOyBrbWVtbGVha19tYXlfbmVlZF9mcmVlKG9iamVjdCkpKQomIzQzOwkJZGVmZXJfZnJlZV9sYXJnZV9rbWFsbG9jKG9iamVjdCk7CiYjNDM7CWVsc2UKJiM0MzsJCV9fZnJlZV9sYXJnZV9rbWFsbG9jX3BhZ2UocGFnZSwgZnJlZV9mbGFncyk7CiB9CiAKIC8qCkBAIC02NzE4LDcgJiM0Mzs2ODAxLDcgQEAgdm9pZCBrdmZyZWVfcmN1X2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIAkJaWYgKHNsYWIpCiAJCQlzbGFiX2ZyZWUoc2xhYi0mZ3Q7c2xhYl9jYWNoZSwgc2xhYiwgb2JqLCBfUkVUX0lQXyk7CiAJCWVsc2UKLQkJCWZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmopOwomIzQzOwkJCWZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmosIFNMQUJfRlJFRV9ERUZBVUxUKTsKIAl9CiB9CiAKQEAgLTY3NDQsNyAmIzQzOzY4MjcsNyBAQCB2b2lkIGtmcmVlKGNvbnN0IHZvaWQgKm9iamVjdCkKIAlzbGFiID0gcGFnZV9zbGFiKHBhZ2UpOwogCWlmICghc2xhYikgewogCQkvKiBrbWFsbG9jX25vbG9jaygpIGRvZXNuJiMzOTt0IHN1cHBvcnQgbGFyZ2Uga21hbGxvYyAqLwotCQlmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgKHZvaWQgKilvYmplY3QpOwomIzQzOwkJZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsICh2b2lkICopb2JqZWN0LCBTTEFCX0ZSRUVfREVGQVVMVCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTY3NTUsMTUgJiM0Mzs2ODM4LDE0IEBAIEVYUE9SVF9TWU1CT0woa2ZyZWUpOwogCiAvKgogICogQ2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIHJhd19zcGlubG9ja190IG9yIGZyb20gSVJRIGFuZCBOTUksCi0gKiBidXQgT05MWSBmb3Igb2JqZWN0cyBhbGxvY2F0ZWQgYnkga21hbGxvY19ub2xvY2soKS4KLSAqIERlYnVnIGNoZWNrcyAobGlrZSBrbWVtbGVhayBhbmQga2ZlbmNlKSB3ZXJlIHNraXBwZWQgb24gYWxsb2NhdGlvbiwKLSAqIGhlbmNlCi0gKiBvYmogPSBrbWFsbG9jKCk7IGtmcmVlX25vbG9jayhvYmopOwotICogd2lsbCBtaXNzIGttZW1sZWFrL2tmZW5jZSBib29rIGtlZXBpbmcgYW5kIHdpbGwgY2F1c2UgZmFsc2UgcG9zaXRpdmVzLgotICogbGFyZ2Vfa21hbGxvYyBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlci4KJiM0MzsgKiBidXQgbWF5IGRlZmVyIGZyZWVpbmcgdG8gaXJxX3dvcmsoKSBpbiBzb21lIGNhc2VzLgomIzQzOyAqCiYjNDM7ICogSW50ZW5kZWQgbWFpbmx5IGZvciBvYmplY3RzIGFsbG9jYXRlZCBmcm9tIGttYWxsb2Nfbm9sb2NrKCksIGJ1dCBjYW4gaGFuZGxlCiYjNDM7ICogYWxzbyBrbWVtX2NhY2hlX2FsbG9jKCkgYW5kIGttYWxsb2MoKSBvYmplY3RzLCBpbmNsdWRpbmcgbGFyZ2Vfa21hbGxvYy4KICAqLwogdm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KQogewomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3Qgc2xhYiAqc2xhYjsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIAl2b2lkICp4ID0gKHZvaWQgKilvYmplY3Q7CkBAIC02NzcxLDkgJiM0Mzs2ODUzLDEwIEBAIHZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdCkKIAlpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihvYmplY3QpKSkKIAkJcmV0dXJuOwogCi0Jc2xhYiA9IHZpcnRfdG9fc2xhYihvYmplY3QpOwomIzQzOwlwYWdlID0gdmlydF90b19wYWdlKG9iamVjdCk7CiYjNDM7CXNsYWIgPSBwYWdlX3NsYWIocGFnZSk7CiAJaWYgKHVubGlrZWx5KCFzbGFiKSkgewotCQlXQVJOX09OQ0UoMSwgJiMzNDtsYXJnZV9rbWFsbG9jIGlzIG5vdCBzdXBwb3J0ZWQgYnkga2ZyZWVfbm9sb2NrKCkmIzM0Oyk7CiYjNDM7CQlmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgKHZvaWQgKilvYmplY3QsIFNMQUJfRlJFRV9OT0xPQ0spOwogCQlyZXR1cm47CiAJfQogCkBAIC02NzkxLDYgJiM0Mzs2ODc0LDEyIEBAIHZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdCkKIAkgKiBzaW5jZSB0aGV5IHRha2Ugc3BpbmxvY2tzIG9yIG5vdCBzYWZlIGZyb20gYW55IGNvbnRleHQuCiAJICovCiAJa21zYW5fc2xhYl9mcmVlKHMsIHgpOwomIzQzOwomIzQzOwlpZiAoaXNfa2ZlbmNlX2FkZHJlc3MoeCkpIHsKJiM0MzsJCWRlZmVyX2ZyZWVfa2ZlbmNlKHgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBJZiBLQVNBTiBmaW5kcyBhIGtlcm5lbCBidWcgaXQgd2lsbCBkbyBrYXNhbl9yZXBvcnRfaW52YWxpZF9mcmVlKCkKIAkgKiB3aGljaCB3aWxsIGNhbGwgcmF3X3NwaW5fbG9ja19pcnFzYXZlKCkgd2hpY2ggaXMgdGVjaG5pY2FsbHkKQEAgLTY4MDksOSAmIzQzOzY4OTgsMjMgQEAgdm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KQogCSAqLwogCWthc2FuX3NsYWJfZnJlZShzLCB4LCBmYWxzZSwgZmFsc2UsIC8qIHNraXAgcXVhcmFudGluZSAqL3RydWUpOwogCiYjNDM7CS8qCiYjNDM7CSAqIHdpdGgga2ZyZWUoKSB0aGUga21lbWxlYWsgaGFuZGxpbmcgaGFwcGVucyBtdWNoIHNvb25lciwgYnV0IGZvcgomIzQzOwkgKiBkZWZlcmluZyB3ZSBuZWVkIHRvIHdyaXRlIGxsbm9kZSB0byB0aGUgb2JqZWN0JiMzOTtzIGZyZWVwb2ludGVyIHNvCiYjNDM7CSAqIHdlIHNob3VsZCBoYXZlIGl0IGluIHRoZSBzdGF0ZSB3aGVuIGl0JiMzOTtzIG5vIGxvbmdlciB0cmVhdGVkIGFzCiYjNDM7CSAqIGFsbG9jYXRlZCBieSBrYXNhbiBldGMuCiYjNDM7CSAqCiYjNDM7CSAqIGRlZmVyX2ZyZWUgd2lsbCBhbHNvIHJlc2V0IHRoZSBwb2ludGVyIHRhZywgYnV0IGl0JiMzOTtzIG9rIHRvIGRvIGEKJiM0MzsJICogZGVmZXJyZWQga21lbWxlYWtfZnJlZSgpIHVzaW5nIHRoZSB1bnRhZ2dlZCBwb2ludGVyLCBiZWNhdXNlCiYjNDM7CSAqIF9fbG9va3VwX29iamVjdCgpIHJlc2V0cyB0aGUgdGFnIGFueXdheQomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KGttZW1sZWFrX21heV9uZWVkX2ZyZWVfcmVjdXJzaXZlKHgsIHMtJmd0O2ZsYWdzKSkpCiYjNDM7CQlnb3RvIGRlZmVyOwomIzQzOwogCWlmIChsaWtlbHkoY2FuX2ZyZWVfdG9fcGNzKHNsYWIpKSAmYW1wOyZhbXA7IGxpa2VseShmcmVlX3RvX3BjcyhzLCB4LCBmYWxzZSkpKQogCQlyZXR1cm47CiAKJiM0MztkZWZlcjoKIAkvKgogCSAqIF9fc2xhYl9mcmVlKCkgY2FuIGxvY2tsZXNzbHkgY21weGNoZzE2IGludG8gYSBzbGFiLCBidXQgdGhlbiBpdCBtaWdodAogCSAqIG5lZWQgdG8gdGFrZSBzcGluX2xvY2sgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4KQEAgLTcxMTQsNyAmIzQzOzcyMTcsNyBAQCBpbnQgYnVpbGRfZGV0YWNoZWRfZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLAogCWlmICghcykgewogCQkvKiBIYW5kbGUga2FsbG9jJiMzOTtlZCBvYmplY3RzICovCiAJCWlmICghc2xhYikgewotCQkJZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iamVjdCk7CiYjNDM7CQkJZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iamVjdCwgU0xBQl9GUkVFX0RFRkFVTFQpOwogCQkJZGYtJmd0O3NsYWIgPSBOVUxMOwogCQkJcmV0dXJuIHNpemU7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQyMAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGtmcmVlX25vbG9jaygpIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgYWx0ZXJpbmcgYGtmcmVlX25vbG9jaygpYCB3aXRoaW4gYG1tL3NsdWIuY2Ag4oCTIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHBhcnRpY3VsYXJseSB0aGUgU0xVQiBhbGxvY2F0b3IuIFRoZSBrZXkgaXMgdGhhdCBpdCYjMzk7cyBleHBhbmRpbmcgdGhlIHNjb3BlIG9mIGBrZnJlZV9ub2xvY2soKWAgdG8gaGFuZGxlIG9iamVjdHMgYmV5b25kIGl0cyBvcmlnaW5hbCBkZXNpZ24sIG5vdyBpbmNsdWRpbmcgbWVtb3J5IGFsbG9jYXRlZCB2aWEgYGttYWxsb2MoKWAsIGBrbWVtX2NhY2hlX2FsbG9jKClgLCBhbmQgaW1wb3J0YW50bHksICpsYXJnZSogYGttYWxsb2NgIGFsbG9jYXRpb25zLCBhcyB3ZWxsIGFzIEtGRU5DRSBvYmplY3RzLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBpbXBseWluZyBtb3JlIGNvbXByZWhlbnNpdmUgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoYXQgZnVuY3Rpb24uCgpUaGUgYWRkaXRpb24gb2YgYW4gYGlycV93b3JrYCBtZWNoYW5pc20gaGludHMgYXQgaGFuZGxpbmcgY2VydGFpbiBmcmVlaW5nIG9wZXJhdGlvbnMgYXN5bmNocm9ub3VzbHkuIFRoaXMgaXMgbGlrZWx5IGluIHJlc3BvbnNlIHRvIGlzc3VlcyB3aXRoIGBrbWVtbGVha2Agb3IgS0ZFTkNFIHRoYXQgd291bGQgaGF2ZSByZXF1aXJlZCB0aGUgZnJlZWluZyB0byBvY2N1ciBvdXRzaWRlIG9mIG5vcm1hbCBpbnRlcnJ1cHQgY29udGV4dC4gU28sIHBvdGVudGlhbGx5IHdlIGFyZSBkZWFsaW5nIHdpdGggZGVmZXJyZWQgZnJlZWluZyBpbiBjZXJ0YWluIGNvbmRpdGlvbnMsIHdoaWNoIGlzIGNvbW1vbiBpbiBhIG1vZGVybiBrZXJuZWwuCgpOb3csIEkgc2VlIGl0JiMzOTtzIGFsc28gaW1wYWN0aW5nIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKClgIGluIGBrZXJuZWwvc2NoZWQvY29yZS5jYCwgcmVwbGFjaW5nIGBrZnJlZV9yY3UoKWAgd2l0aCBga2ZyZWVfbm9sb2NrKClgLiBUaGlzIGlzIGFub3RoZXIgaW50ZXJlc3RpbmcgcG9pbnQuIFdoeSB0aGlzIGNoYW5nZT8gRG9lcyB0aGlzIG1lYW4gYGtmcmVlX25vbG9jaygpYCBpcyBub3cgY29uc2lkZXJlZCBtb3JlIGFwcHJvcHJpYXRlIG9yIGVmZmljaWVudCBpbiB0aGlzIGNvbnRleHQ/IExldCYjMzk7cyBjaGVjay4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIGBrZnJlZV9ub2xvY2soKWAgaXRzZWxmLiBJdCYjMzk7cyBhIGNvcmUga2VybmVsIGZ1bmN0aW9uLiBUaGUgcGF0Y2gmIzM5O3MgcHJpbWFyeSBjb250cmlidXRpb24gaXMgc3VwcG9ydGluZyB0aGVzZSBvdGhlciBtZW1vcnkgYWxsb2NhdGlvbiBtZXRob2RzLiBFc3NlbnRpYWxseSwgaXQgYWRkcyB0aGUgY2FwYWJpbGl0eSBvZiBmcmVlaW5nIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGttYWxsb2Mva21lbV9jYWNoZV9hbGxvYyBldGMuLi4gYXMgd2VsbCBhcyBkZWZlcnJpbmcgZnJlZWluZyB0byBgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm5gIHdoZW4gbmVjZXNzYXJ5LgoKUmlnaHQsIHNvIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLCBJIG5lZWQgdG8gc3RhcnQgdHJhY2luZyB0aGUgdXNhZ2Ugb2YgYGtmcmVlX25vbG9jaygpYC4gTGV0JiMzOTtzIHNlZSB3aGVyZSB0aGlzIGlzIG5vdyBiZWluZyBjYWxsZWQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGNoYW5nZXMgdG8gaG93IGxhcmdlIGBrbWFsbG9jYCBhbmQgS0ZFTkNFIG9iamVjdHMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIG5vdyBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZV9ub2xvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zbGFiLmg9NTkyPXZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqb2JqcCk7XG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo1OTM6dm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqcCk7XG5pbmNsdWRlL2xpbnV4L3NsYWIuaC01OTQtdm9pZCBrZnJlZV9zZW5zaXRpdmUoY29uc3Qgdm9pZCAqb2JqcCk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY1OT1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTc1NS1cdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xua2VybmVsL2JwZi9hcmVuYS5jOjc1NjpcdGtmcmVlX25vbG9jayhwYWdlcyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzU3LVx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzY5LW91dF9mcmVlX3BhZ2VzOlxua2VybmVsL2JwZi9hcmVuYS5jOjc3MDpcdGtmcmVlX25vbG9jayhwYWdlcyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcxLVx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9OTYyPXN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTAxNi1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMDE3Olx0XHRrZnJlZV9ub2xvY2socyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTAxOC1cdH1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0xMjQyPXN0YXRpYyB2b2lkIGJwZl9hc3luY19jYl9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xMjUyLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6MTI1MzpcdGtmcmVlX25vbG9jayhjYik7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xMjU0LX1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0xMzE3PXN0YXRpYyBpbnQgX19icGZfYXN5bmNfaW5pdChzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4gKmFzeW5jLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgZmxhZ3MsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTM3Mi1cdFx0LyogTG9zdCB0aGUgcmFjZSB0byBpbml0aWFsaXplIHRoaXMgYnBmX2FzeW5jX2tlcm4sIGRyb3AgdGhlIGFsbG9jYXRlZCBvYmplY3QgKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjEzNzM6XHRcdGtmcmVlX25vbG9jayhjYik7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xMzc0LVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTE2NjI9c3RhdGljIHZvaWQgYnBmX2FzeW5jX2lycV93b3JrZXIoc3RydWN0IGlycV93b3JrICp3b3JrKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTE2NzctXHRcdGJwZl9hc3luY19wcm9jZXNzX29wKGNiLCBjbWQtXHUwMDNlb3AsIGNtZC1cdTAwM2Vuc2VjLCBjbWQtXHUwMDNlbW9kZSk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoxNjc4Olx0XHRrZnJlZV9ub2xvY2soY21kKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTE2NzktXHR9XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDUyMD1zdGF0aWMgc3RydWN0IGJwZl90YXNrX3dvcmtfY3R4ICpicGZfdGFza193b3JrX2ZldGNoX2N0eChzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqdHcsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU0My1cdFx0ICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTQ0Olx0XHRrZnJlZV9ub2xvY2soY3R4KTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1NDUtXHRcdHJldHVybiBvbGRfY3R4O1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ3MTA9X19icGZfa2Z1bmMgaW50IGJwZl9keW5wdHJfZmlsZV9kaXNjYXJkKHN0cnVjdCBicGZfZHlucHRyICpkeW5wdHIpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDcxOC1cdGZyZWFkZXJfY2xlYW51cChcdTAwMjZkZi1cdTAwM2VmcmVhZGVyKTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3MTk6XHRrZnJlZV9ub2xvY2soZGYpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDcyMC1cdGJwZl9keW5wdHJfc2V0X251bGwocHRyKTtcbi0tXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYz0xMzY9aW50IHJhbmdlX3RyZWVfY2xlYXIoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4tLVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMTcyLVx0XHRcdHJhbmdlX2l0X3JlbW92ZShybiwgcnQpO1xua2VybmVsL2JwZi9yYW5nZV90cmVlLmM6MTczOlx0XHRcdGtmcmVlX25vbG9jayhybik7XG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0xNzQtXHRcdH1cbi0tXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYz0xOTM9aW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxuLS1cbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTIyNS1cdFx0cmFuZ2VfaXRfaW5zZXJ0KGxlZnQsIHJ0KTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjIyNjpcdFx0a2ZyZWVfbm9sb2NrKHJpZ2h0KTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTIyNy1cdH0gZWxzZSBpZiAobGVmdCkge1xuLS1cbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jPTI0OD12b2lkIHJhbmdlX3RyZWVfZGVzdHJveShzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQpXG4tLVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMjUzLVx0XHRyYW5nZV9pdF9yZW1vdmUocm4sIHJ0KTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjI1NDpcdFx0a2ZyZWVfbm9sb2NrKHJuKTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTI1NS1cdH1cbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTkyPXN0YXRpYyB2b2lkIGJwZl9zdHJlYW1fZnJlZV9lbGVtKHN0cnVjdCBicGZfc3RyZWFtX2VsZW0gKmVsZW0pXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTkzLXtcbmtlcm5lbC9icGYvc3RyZWFtLmM6OTQ6XHRrZnJlZV9ub2xvY2soZWxlbSk7XG5rZXJuZWwvYnBmL3N0cmVhbS5jLTk1LX1cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTI4MDM9dm9pZCBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld19tYXNrKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjgxNS1cdCAqIEJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgd2l0aCBwLVx1MDAzZXBpX2xvY2sgaGVsZCwgaXQgaXMgbm90IHBvc3NpYmxlXG5rZXJuZWwvc2NoZWQvY29yZS5jOjI4MTY6XHQgKiB0byB1c2Uga2ZyZWUoKSBoZXJlICh3aGVuIFBSRUVNUFRfUlQ9eSksIHRodXMgdXNlIGtmcmVlX25vbG9jaygpXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI4MTctXHQgKi9cbmtlcm5lbC9zY2hlZC9jb3JlLmM6MjgxODpcdGtmcmVlX25vbG9jayhhYy51c2VyX21hc2spO1xua2VybmVsL3NjaGVkL2NvcmUuYy0yODE5LX1cbi0tXG5saWIvdGVzdHMvc2x1Yl9rdW5pdC5jPTM0ND1zdGF0aWMgdm9pZCB0ZXN0X25vbG9jayhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxuLS1cbmxpYi90ZXN0cy9zbHViX2t1bml0LmMtMzYxLVx0ZWxzZVxubGliL3Rlc3RzL3NsdWJfa3VuaXQuYzozNjI6XHRcdGtmcmVlX25vbG9jayhvYmpwKTtcbmxpYi90ZXN0cy9zbHViX2t1bml0LmMtMzYzLVxuLS1cbm1tL2tmZW5jZS9rZmVuY2UuaD01OT1zdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhIHtcbi0tXG5tbS9rZmVuY2Uva2ZlbmNlLmgtNjItXHRcdHN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDtcdC8qIEZvciBkZWxheWVkIGZyZWVpbmcuICovXG5tbS9rZmVuY2Uva2ZlbmNlLmg6NjM6XHRcdHN0cnVjdCBsbGlzdF9ub2RlIGxsbm9kZTtcdC8qIEZvciBrZnJlZV9ub2xvY2soKS4gKi9cbm1tL2tmZW5jZS9rZmVuY2UuaC02NC1cdH07XG4tLVxubW0vc2xhYl9jb21tb24uYz01Mjc9dm9pZCBrbWVtX2NhY2hlX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2xhYl9jb21tb24uYy01NTItXG5tbS9zbGFiX2NvbW1vbi5jOjU1MzpcdC8qIFdhaXQgZm9yIGRlZmVycmVkIHdvcmsgZnJvbSBrbWFsbG9jL2tmcmVlX25vbG9jaygpICovXG5tbS9zbGFiX2NvbW1vbi5jLTU1NC1cdGRlZmVycmVkX3dvcmtfYmFycmllcigpO1xuLS1cbm1tL3NsdWIuYy0xNjAtICogICBQcmVlbXB0aW9uIGlzIGRpc2FibGVkIGFzIHBhcnQgb2YgbG9jYWxfdHJ5bG9jayBvcGVyYXRpb25zLlxubW0vc2x1Yi5jOjE2MTogKiAgIGttYWxsb2Nfbm9sb2NrKCkgYW5kIGtmcmVlX25vbG9jaygpIGFyZSBzYWZlIGluIE5NSSBjb250ZXh0IGJ1dCBzZWVcbm1tL3NsdWIuYy0xNjItICogICB0aGVpciBsaW1pdGF0aW9ucy5cbi0tXG5tbS9zbHViLmM9MjE0Nj1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTIyMjEtXHRcdGlmICh1bmxpa2VseSghYWxsb3dfc3BpbikpXG5tbS9zbHViLmM6MjIyMjpcdFx0XHRrZnJlZV9ub2xvY2sodmVjKTtcbm1tL3NsdWIuYy0yMjIzLVx0XHRlbHNlXG4tLVxubW0vc2x1Yi5jPTIyMzY9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMjU4LVx0ZWxzZVxubW0vc2x1Yi5jOjIyNTk6XHRcdGtmcmVlX25vbG9jayhvYmpfZXh0cyk7XG5tbS9zbHViLmMtMjI2MC1cdHNsYWItXHUwMDNlb2JqX2V4dHMgPSAwO1xuLS1cbm1tL3NsdWIuYz0yNzk0PXN0YXRpYyB2b2lkIF9fZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLFxuLS1cbm1tL3NsdWIuYy0yODA4LVx0aWYgKHVubGlrZWx5KGZyZWVfZmxhZ3MgXHUwMDI2IFNMQUJfRlJFRV9OT0xPQ0spKVxubW0vc2x1Yi5jOjI4MDk6XHRcdGtmcmVlX25vbG9jayhzaGVhZik7XG5tbS9zbHViLmMtMjgxMC1cdGVsc2Vcbi0tXG5tbS9zbHViLmM9NjgzNz1FWFBPUlRfU1lNQk9MKGtmcmVlKTtcbi0tXG5tbS9zbHViLmMtNjg0NS0gKi9cbm1tL3NsdWIuYzo2ODQ2OnZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcbm1tL3NsdWIuYy02ODQ3LXtcbi0tXG5tbS9zbHViLmMtNjg4OC1cdCAqIGthc2FuX3JlcG9ydF9pbnZhbGlkX2ZyZWUoKSAtXHUwMDNlIHJhd19zcGluX2xvY2tfaXJxc2F2ZSgpIC1cdTAwM2UgTk1JXG5tbS9zbHViLmM6Njg4OTpcdCAqICAtXHUwMDNlIGtmcmVlX25vbG9jaygpIC1cdTAwM2Uga2FzYW5fcmVwb3J0X2ludmFsaWRfZnJlZSgpIG9uIHRoZSBzYW1lIENQVVxubW0vc2x1Yi5jLTY4OTAtXHQgKiBpcyBkb3VibGUgYnVnZ3kgYW5kIGRlc2VydmVzIHRvIGRlYWRsb2NrLlxuLS1cbm1tL3NsdWIuYy02OTI0LX1cbm1tL3NsdWIuYzo2OTI1OkVYUE9SVF9TWU1CT0xfR1BMKGtmcmVlX25vbG9jayk7XG5tbS9zbHViLmMtNjkyNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYwOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBrZnJlZV9ub2xvY2tgIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtmcmVlX25vbG9ja2AsIHdoaWNoIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGZ1bmN0aW9uLiBJIGtub3cgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIHVzZWQgaW4gQlBGLCB0aGUgc2NoZWR1bGVyLCBhbmQgZXZlbiB0aGUgU0xVQiBhbGxvY2F0b3IgaXRzZWxmIOKAkyB0aGF0IG1ha2VzIGl0IGEgY3JpdGljYWwgcGllY2UuIFRoZSBmaXJzdCBjaGFuZ2UsIHN3YXBwaW5nIG91dCBga2ZyZWVfcmN1YCBmb3IgYGtmcmVlX25vbG9ja2Agd2l0aGluIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlYCBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AsIGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbi4gYGtmcmVlX3JjdWAgaXMgYSB3YXkgdG8gc2FmZWx5IGZyZWUgbWVtb3J5IHRoYXQgbWlnaHQgc3RpbGwgYmUgaW4gdXNlIGJ5IG90aGVyIENQVXMsIHJpZ2h0PyBTbywgdGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24g4oCTIG9yIGEgc2lnbmlmaWNhbnQgcmlzaywgZGVwZW5kaW5nIG9uIHRoZSBpbXBsaWNhdGlvbnMuCgpUaGUgc2Vjb25kIHBhcnQgbWVudGlvbnMgc3VwcG9ydGluZyBsYXJnZSBga21hbGxvY2AgYW5kIEtGRU5DRSB3aXRoaW4gYGtmcmVlX25vbG9ja2AuIFRoYXQgY291bGQgYmUgYSBjb21wYXRpYmlsaXR5IG9yIGVmZmljaWVuY3kgY2hhbmdlLgoKTm93LCB3YWl0IGEgbWludXRlLi4uIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlYC4uLiB0aGF0JiMzOTtzIGEgKmNvcmUqIHNjaGVkdWxlciBmdW5jdGlvbi4gVGhlIGltcGxpY2F0aW9ucyBvZiBnZXR0aW5nIHRoaXMgd3JvbmcgYXJlIHN1YnN0YW50aWFsLCB0b3VjaGluZyBzY2hlZHVsaW5nIGlzIGEgdmVyeSBzZW5zaXRpdmUgYXJlYS4gVGhpcyBtZWFucyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNhbGwgY2hhaW4gaW4gZGV0YWlsLiBNeSBmaXJzdCBpbnN0aW5jdCBoZXJlIGlzIHRvIHRyYWNlIHdoZXJlIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlYCBpcyAqYWN0dWFsbHkqIGNhbGxlZCBhbmQgZnVsbHkgdW5kZXJzdGFuZCBpdHMgdXNhZ2UgbW9kZWwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBmbG93IG9mIGRhdGEgaGVyZSBhbmQgZW5zdXJlIHRoaXMgcmVwbGFjZW1lbnQgaXMgYWN0dWFsbHkgc2FmZS4gSSYjMzk7bGwgbmVlZCB0byBkbyBzb21lIGNvZGUgZGl2aW5nIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSwgZ2l2ZW4gaXRzIHNpZ25pZmljYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfY3B1c19hbGxvd2VkX2ZvcmNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2NoZWQuaD0xOTEwPWV4dGVybiB2b2lkIGRsX2J3X2ZyZWUoaW50IGNwdSwgdTY0IGRsX2J3KTtcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xOTExLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjE5MTI6Lyogc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpIC0gY29uc2lkZXIgdXNpbmcgc2V0X2NwdXNfYWxsb3dlZF9wdHIoKSBpbnN0ZWFkICovXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTkxMzpleHRlcm4gdm9pZCBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld19tYXNrKTtcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xOTE0LVxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM9NDA5Mz1ib29sIGNwdXNldF9jcHVzX2FsbG93ZWRfZmFsbGJhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYy00MTAxLVx0aWYgKGlzX2luX3YyX21vZGUoKSBcdTAwMjZcdTAwMjYgY3B1bWFza19zdWJzZXQoY3NfbWFzaywgcG9zc2libGVfbWFzaykpIHtcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6NDEwMjpcdFx0c2V0X2NwdXNfYWxsb3dlZF9mb3JjZSh0c2ssIGNzX21hc2spO1xua2VybmVsL2Nncm91cC9jcHVzZXQuYy00MTAzLVx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi0tXG5rZXJuZWwva3RocmVhZC5jPTU2Nj1zdGF0aWMgdm9pZCBfX2t0aHJlYWRfYmluZF9tYXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzdGF0ZSlcbi0tXG5rZXJuZWwva3RocmVhZC5jLTU3My1cdHNjb3BlZF9ndWFyZCAocmF3X3NwaW5sb2NrX2lycXNhdmUsIFx1MDAyNnAtXHUwMDNlcGlfbG9jaylcbmtlcm5lbC9rdGhyZWFkLmM6NTc0Olx0XHRzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHAsIG1hc2spO1xua2VybmVsL2t0aHJlYWQuYy01NzUtXG4tLVxua2VybmVsL2t0aHJlYWQuYz04Mzk9aW50IGt0aHJlYWRfYWZmaW5lX3ByZWZlcnJlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKVxuLS1cbmtlcm5lbC9rdGhyZWFkLmMtODY3LVx0c2NvcGVkX2d1YXJkIChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2cC1cdTAwM2VwaV9sb2NrKVxua2VybmVsL2t0aHJlYWQuYzo4Njg6XHRcdHNldF9jcHVzX2FsbG93ZWRfZm9yY2UocCwgYWZmaW5pdHkpO1xua2VybmVsL2t0aHJlYWQuYy04NjktXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz0yNzkzPWRvX3NldF9jcHVzX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgYWZmaW5pdHlfY29udGV4dCAqY3R4KVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjgwMi0gKi9cbmtlcm5lbC9zY2hlZC9jb3JlLmM6MjgwMzp2b2lkIHNldF9jcHVzX2FsbG93ZWRfZm9yY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbmV3X21hc2spXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI4MDQte1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9MjgyMT1pbnQgZHVwX3VzZXJfY3B1c19wdHIoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjLFxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjg0OC1cdCAqIFRob3VnaCB1bmxpa2VseSwgdXNlcl9jcHVzX3B0ciBjYW4gYmUgcmVzZXQgdG8gTlVMTCBieSBhIGNvbmN1cnJlbnRcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Mjg0OTpcdCAqIHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKS5cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjg1MC1cdCAqL1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9MzU0MD1zdGF0aWMgaW50IHNlbGVjdF9mYWxsYmFja19ycShpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy0zNTc5LVx0XHRjYXNlIHBvc3NpYmxlOlxua2VybmVsL3NjaGVkL2NvcmUuYzozNTgwOlx0XHRcdHNldF9jcHVzX2FsbG93ZWRfZm9yY2UocCwgdGFza19jcHVfZmFsbGJhY2tfbWFzayhwKSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTM1ODEtXHRcdFx0c3RhdGUgPSBmYWlsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTIyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudDogUHJvbWlzaW5nIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2VgIGlzIGRlZmluaXRlbHkgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGNsZWFybHkgcmVhY2hhYmxlLiBCZXlvbmQgdGhhdCwgSSBzZWUgYGtmcmVlX25vbG9ja2AgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIEJQRiBhcmVuYSBhbmQgcmFuZ2UgdHJlZSwgd2hpY2ggaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBhdHRlbnRpb24gYXMgYSBwb3RlbnRpYWwgYXJlYSB0byBleHBsb3JlLgoKSSYjMzk7bSBzZWVpbmcgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzIGluIGBtbS9zbHViLmNgIGFuZCBgbW0va21lbWxlYWsuY2AuIFNwZWNpZmljYWxseSwgdGhlIGludHJvZHVjdGlvbiBvZiBga21lbWxlYWtfbWF5X25lZWRfZnJlZWAgYW5kIHRoZSBkZWZlcnJhbCBvZiBmcmVlaW5nIG9wZXJhdGlvbnMgdG8gYGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuYCBhcmUgbWFqb3IgcmVkIGZsYWdzLCBlc3NlbnRpYWxseSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMuIEkgbmVlZCB0byBkaWcgaW50byB0aG9zZSBmdW5jdGlvbnMgaW4gYG1tL3NsdWIuY2AgbmV4dC4KCkFscmlnaHQsIGxvb2tpbmcgYXQgYG1tL3NsdWIuY2AsIEkgc2VlIGBkZWZlcl9mcmVlX2tmZW5jZWAgYW5kIGBkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2NgIGhhdmUgYmVlbiBhZGRlZCwgYW5kIHRoZXkgYXJlIGRlZmVycmluZyBmcmVlaW5nIHRvIGBkZWZlcnJlZF9wZXJjcHVfd29ya19mbmAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIGNvbmZpcm0gYGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuYCBpcyByZWFjaGFibGUuCgpZZXAsIGBkZWZlcnJlZF9wZXJjcHVfd29ya19mbmAgaXMgcmVhY2hhYmxlIHRocm91Z2ggYW4gYGlycV93b3JrYCBxdWV1ZWQgYnkgYGRlZmVyX2ZyZWVgLCBgZGVmZXJfZnJlZV9rZmVuY2VgLCBhbmQgYGRlZmVyX2ZyZWVfbGFyZ2Vfa21hbGxvY2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHNwb3Qgd29ydGggc3BlbmRpbmcgc29tZSB0aW1lIG9uIHdpdGggdGhlIGZ1enplci4KCk9rYXksIGxldCYjMzk7cyBuYWlsIGRvd24gc29tZSBmb2N1cyBzeW1ib2xzLiBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZWAsIGBrZnJlZV9ub2xvY2tgLCBga21lbWxlYWtfbWF5X25lZWRfZnJlZWAsIGBkZWZlcl9mcmVlX2tmZW5jZWAgKHdoaWNoIGxvb2tzIHRvIGJlIHN0YXRpYyksIGBkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2NgIChhbHNvIHN0YXRpYyksIGBkZWZlcnJlZF9wZXJjcHVfd29ya19mbmAgKHN0YXRpYyksIGBmcmVlX2xhcmdlX2ttYWxsb2NgIChzdGF0aWMpLCBhbmQgZmluYWxseSBga2ZlbmNlX29ial90b19sbG5vZGVgIGFuZCBga2ZlbmNlX2xsbm9kZV90b19vYmpgLiBUaG9zZSBsYXN0IHR3byBsb29rIGxpa2UgdGhleSBjb3VsZCBiZSBpbnRlcmVzdGluZy4KCkhvbGQgb24gYSBtaW51dGXigKYgRm9jdXNpbmcgaW4gb24gYGtmcmVlX25vbG9ja2AsIHRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZWAgaXMgZ29vZCB0b28uIEFuZCBga21lbWxlYWtfbWF5X25lZWRfZnJlZWAgaXMgYWxzbyBhIHByaW1lIGNhbmRpZGF0ZS4gTGV0IG1lIGNoZWNrIHRoZSBrZXJuZWwgc291cmNlIHRvIHNlZSBpZiBga2ZlbmNlX29ial90b19sbG5vZGVgIGFuZCBga2ZlbmNlX2xsbm9kZV90b19vYmpgIGFyZSBleHBvcnRlZC4gVGhleSYjMzk7cmUgaW4gYG1tL2tmZW5jZS9jb3JlLmNgLiBMZXQgbWUgY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZmVuY2Vfb2JqX3RvX2xsbm9kZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2tmZW5jZS5oPTE4Mz1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayBib29sIGtmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG4tLVxuaW5jbHVkZS9saW51eC9rZmVuY2UuaC0xOTAtXG5pbmNsdWRlL2xpbnV4L2tmZW5jZS5oOjE5MTpzdHJ1Y3QgbGxpc3Rfbm9kZSAqa2ZlbmNlX29ial90b19sbG5vZGUodm9pZCAqYWRkcik7XG5pbmNsdWRlL2xpbnV4L2tmZW5jZS5oLTE5Mi12b2lkICprZmVuY2VfbGxub2RlX3RvX29iaihzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2tmZW5jZS5oPTI0MD1zdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGtmZW5jZV9mcmVlKHZvaWQgKmFkZHIpIHsgcmV0dXJuIGZhbHNlOyB9XG5pbmNsdWRlL2xpbnV4L2tmZW5jZS5oOjI0MTpzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKSB7IHJldHVybiBOVUxMOyB9XG5pbmNsdWRlL2xpbnV4L2tmZW5jZS5oLTI0Mi1zdGF0aWMgaW5saW5lIHZvaWQgKmtmZW5jZV9sbG5vZGVfdG9fb2JqKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpIHsgcmV0dXJuIE5VTEw7IH1cbi0tXG5tbS9rZmVuY2UvY29yZS5jPTEyNDc9dm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG4tLVxubW0va2ZlbmNlL2NvcmUuYy0xMjczLVxubW0va2ZlbmNlL2NvcmUuYzoxMjc0OnN0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKVxubW0va2ZlbmNlL2NvcmUuYy0xMjc1LXtcbi0tXG5tbS9zbHViLmM9NjQ3OD1zdGF0aWMgdm9pZCBkZWZlcl9mcmVlX2tmZW5jZSh2b2lkICpvYmopXG4tLVxubW0vc2x1Yi5jLTY0ODMtXHQvKiBrYXNhbl9yZXNldF90YWcoKSBpcyBub3QgbmVjZXNzYXJ5LCBrZmVuY2Ugb2JqZWN0cyBhcmUgbm90IHRhZ2dlZCAqL1xubW0vc2x1Yi5jOjY0ODQ6XHRsbG5vZGUgPSBrZmVuY2Vfb2JqX3RvX2xsbm9kZShvYmopO1xubW0vc2x1Yi5jLTY0ODUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MzMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQWRkaW5nIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKgoKT2theSwgSSBuZWVkIHRvIGludGVncmF0ZSB0aGVzZSBmdW5jdGlvbnM6IGBrZnJlZV9ub2xvY2tgLCBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZWAsIGBrbWVtbGVha19tYXlfbmVlZF9mcmVlYCwgYGtmZW5jZV9vYmpfdG9fbGxub2RlYCwgYW5kIGBrZmVuY2VfbGxub2RlX3RvX29iamAuIE5vdywgYmVmb3JlIEkganVzdCBzdGFydCB0aHJvd2luZyBjb2RlIGFyb3VuZCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIHByZXR0eSBzdXJlIGBrZmVuY2Vfb2JqX3RvX2xsbm9kZWAgcmVxdWlyZXMgYENPTkZJR19LRkVOQ0VgLiBBbmQgYGttZW1sZWFrX21heV9uZWVkX2ZyZWVgIGRlZmluaXRlbHkgaGluZ2VzIG9uIGBDT05GSUdfREVCVUdfS01FTUxFQUtgLiBJJiMzOTtsbCBjb25maXJtIHRoYXQgYnkgcmVmZXJlbmNpbmcgdGhlIHNvdXJjZSBjb2RlIGRpcmVjdGx5LiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbW0va21lbWxlYWsuY2AgdG8gYmUgc3VyZSBhYm91dCBga21lbWxlYWtfbWF5X25lZWRfZnJlZWAgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIFRoYXTigJlzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gYmUgc3VyZSBldmVyeXRoaW5nIGlzIGludGVncmF0ZWQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWVtbGVha19tYXlfbmVlZF9mcmVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva21lbWxlYWsuaD0yND1leHRlcm4gdm9pZCBrbWVtbGVha19mcmVlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7XG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmg6MjU6Ym9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7XG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgtMjYtZXh0ZXJuIHZvaWQga21lbWxlYWtfZnJlZV9wYXJ0KGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpIF9fcmVmO1xuLS1cbmluY2x1ZGUvbGludXgva21lbWxlYWsuaD00OD1zdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXG4tLVxuaW5jbHVkZS9saW51eC9rbWVtbGVhay5oLTUzLVxuaW5jbHVkZS9saW51eC9rbWVtbGVhay5oOjU0OnN0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncylcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaC01NS17XG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgtNTYtXHRpZiAoIShmbGFncyBcdTAwMjYgU0xBQl9OT0xFQUtUUkFDRSkpXG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmg6NTc6XHRcdHJldHVybiBrbWVtbGVha19tYXlfbmVlZF9mcmVlKHB0cik7XG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgtNTgtXG4tLVxuaW5jbHVkZS9saW51eC9rbWVtbGVhay5oPTk1PXN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncylcbi0tXG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgtOTctfVxuaW5jbHVkZS9saW51eC9rbWVtbGVhay5oOjk4OnN0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlKGNvbnN0IHZvaWQgKnB0cilcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaC05OS17XG4tLVxuaW5jbHVkZS9saW51eC9rbWVtbGVhay5oLTEwMS19XG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmg6MTAyOnN0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncylcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaC0xMDMte1xuLS1cbm1tL2ttZW1sZWFrLmM9MTE2OT1FWFBPUlRfU1lNQk9MX0dQTChrbWVtbGVha19mcmVlKTtcbi0tXG5tbS9rbWVtbGVhay5jLTExNzEtLyoqXG5tbS9rbWVtbGVhay5jOjExNzI6ICoga21lbWxlYWtfbWF5X25lZWRfZnJlZSAtIGNoZWNrIGlmIG9iamVjdCBpcyByZWdpc3RlcmVkXG5tbS9rbWVtbGVhay5jLTExNzMtICogQHB0cjpcdHBvaW50ZXIgdG8gYmVnaW5uaW5nIG9mIHRoZSBvYmplY3Rcbi0tXG5tbS9rbWVtbGVhay5jLTExODgtICovXG5tbS9rbWVtbGVhay5jOjExODk6Ym9vbCBfX3JlZiBrbWVtbGVha19tYXlfbmVlZF9mcmVlKGNvbnN0IHZvaWQgKnB0cilcbm1tL2ttZW1sZWFrLmMtMTE5MC17XG4tLVxubW0vc2x1Yi5jPTY3NTk9c3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QsXG4tLVxubW0vc2x1Yi5jLTY3NzgtXG5tbS9zbHViLmM6Njc3OTpcdGlmICh1bmxpa2VseShub2xvY2sgXHUwMDI2XHUwMDI2IGttZW1sZWFrX21heV9uZWVkX2ZyZWUob2JqZWN0KSkpXG5tbS9zbHViLmMtNjc4MC1cdFx0ZGVmZXJfZnJlZV9sYXJnZV9rbWFsbG9jKG9iamVjdCk7XG4tLVxubW0vc2x1Yi5jPTY4NDY9dm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxuLS1cbm1tL3NsdWIuYy02OTEwLVx0ICovXG5tbS9zbHViLmM6NjkxMTpcdGlmICh1bmxpa2VseShrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZSh4LCBzLVx1MDAzZWZsYWdzKSkpXG5tbS9zbHViLmMtNjkxMi1cdFx0Z290byBkZWZlcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MjUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBMZWFrIERldGVjdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG1lbW9yeSBsZWFrIGRldGVjdGlvbiwgYW5kIEkmIzM5O3ZlIGdvdCBgQ09ORklHX0RFQlVHX0tNRU1MRUFLYCBhbmQgYENPTkZJR19LRkVOQ0VgIGluIG1pbmQuIENsYXNzaWMgY2hvaWNlcy4gQnV0IGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBjb21wYXJpbmcgdGhlbSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhleSBhcmUgc3VwcG9ydGVkIGluIHRoZSBrZXJuZWwmIzM5O3Mgc2NoZWR1bGVyIGNvZGUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGhvdyBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZWAgaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgIGhhbmRsZXMgdGhlc2UgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGF0IGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yIGlzIGNvbmRpdGlvbmFsIG9uIGVpdGhlciBvZiB0aG9zZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmVpbmcgZW5hYmxlZC4gSWYgc28sIHRoZW4gdGhhdCBtaWdodCBhZmZlY3QgdGhlIHdheSBtZW1vcnkgaXMgaGFuZGxlZCBhbmQgcHJvdmlkZSBpbnNpZ2h0IHRvIHdoZXJlIGFueSBsZWFrIG1heSBiZSBoYXBwZW5pbmcuIFRoaXMgaXMgYWx3YXlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzIGluIHNjaGVkdWxpbmcuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUgZGVmaW5lcyBzYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9jcHVzX2FsbG93ZWRfZm9yY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9jb3JlLmM9Mjc5Mz1kb19zZXRfY3B1c19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGFmZmluaXR5X2NvbnRleHQgKmN0eClcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI4MDItICovXG5rZXJuZWwvc2NoZWQvY29yZS5jOjI4MDM6dm9pZCBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld19tYXNrKVxua2VybmVsL3NjaGVkL2NvcmUuYy0yODA0LXtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTI4MjE9aW50IGR1cF91c2VyX2NwdXNfcHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYyxcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI4NDgtXHQgKiBUaG91Z2ggdW5saWtlbHksIHVzZXJfY3B1c19wdHIgY2FuIGJlIHJlc2V0IHRvIE5VTEwgYnkgYSBjb25jdXJyZW50XG5rZXJuZWwvc2NoZWQvY29yZS5jOjI4NDk6XHQgKiBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKCkuXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI4NTAtXHQgKi9cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTM1NDA9c3RhdGljIGludCBzZWxlY3RfZmFsbGJhY2tfcnEoaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMzU3OS1cdFx0Y2FzZSBwb3NzaWJsZTpcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MzU4MDpcdFx0XHRzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHAsIHRhc2tfY3B1X2ZhbGxiYWNrX21hc2socCkpO1xua2VybmVsL3NjaGVkL2NvcmUuYy0zNTgxLVx0XHRcdHN0YXRlID0gZmFpbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNTMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBMZWFrIERldGVjdGlvbiBpbiB0aGUgS2VybmVsKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBsZWFrcywgd2hpY2gsIGFzIHdlIGtub3csIGNhbiBiZSBhIHJlYWwgcGFpbi4gVGhlIGtlcm5lbCYjMzk7cyBkZXNpZ24gbWVhbnMgZGVidWdnaW5nIHRvb2xzIGFyZSBhbG1vc3QgYWx3YXlzIGVuYWJsZWQgdmlhIGNvbmZpZ3VyYXRpb24gZmxhZ3MuIEkgbmVlZCB0byByZW1lbWJlciB0aGUgc3BlY2lmaWMgb25lcyBmb3IgbWVtb3J5IGxlYWsgZGV0ZWN0aW9uLCBzbyBgQ09ORklHX0RFQlVHX0tNRU1MRUFLYCBhbmQgYENPTkZJR19LRkVOQ0VgIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRob3NlIGFyZSBpbiBmYWN0IHdoYXQgZW5hYmxlIHRoZSB0b29scyBJJiMzOTttIGxvb2tpbmcgZm9yLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIHNwZWNpZmljcyBvZiBhIHBvc3NpYmxlIGxlYWsuIEkmIzM5O2xsIHdhbnQgdG8gdHJhY2UgaG93IGBrZnJlZV9ub2xvY2tgIG9wZXJhdGVzLCBhbmQgdGhhdCYjMzk7cyBpbiBgbW0vc2x1Yi5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGUgbG9naWMgbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCwgZGVwZW5kZW50IG9uIHNvbWUgY29uZmlnLiBOZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGF0JiMzOTtzIHRoZSBjYXNlLiBUaW1lIHRvIGNoZWNrIGlmIGBrZnJlZV9ub2xvY2tgIGhhcyBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYXJvdW5kIGl0LCBjaGVja2luZyB3aGljaCBjb25maWdzIGFyZSByZWxldmFudCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2ZyZWVfbm9sb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYy0xNjAtICogICBQcmVlbXB0aW9uIGlzIGRpc2FibGVkIGFzIHBhcnQgb2YgbG9jYWxfdHJ5bG9jayBvcGVyYXRpb25zLlxubW0vc2x1Yi5jOjE2MTogKiAgIGttYWxsb2Nfbm9sb2NrKCkgYW5kIGtmcmVlX25vbG9jaygpIGFyZSBzYWZlIGluIE5NSSBjb250ZXh0IGJ1dCBzZWVcbm1tL3NsdWIuYy0xNjItICogICB0aGVpciBsaW1pdGF0aW9ucy5cbi0tXG5tbS9zbHViLmM9MjE0Nj1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTIyMjEtXHRcdGlmICh1bmxpa2VseSghYWxsb3dfc3BpbikpXG5tbS9zbHViLmM6MjIyMjpcdFx0XHRrZnJlZV9ub2xvY2sodmVjKTtcbm1tL3NsdWIuYy0yMjIzLVx0XHRlbHNlXG4tLVxubW0vc2x1Yi5jPTIyMzY9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMjU4LVx0ZWxzZVxubW0vc2x1Yi5jOjIyNTk6XHRcdGtmcmVlX25vbG9jayhvYmpfZXh0cyk7XG5tbS9zbHViLmMtMjI2MC1cdHNsYWItXHUwMDNlb2JqX2V4dHMgPSAwO1xuLS1cbm1tL3NsdWIuYz0yNzk0PXN0YXRpYyB2b2lkIF9fZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLFxuLS1cbm1tL3NsdWIuYy0yODA4LVx0aWYgKHVubGlrZWx5KGZyZWVfZmxhZ3MgXHUwMDI2IFNMQUJfRlJFRV9OT0xPQ0spKVxubW0vc2x1Yi5jOjI4MDk6XHRcdGtmcmVlX25vbG9jayhzaGVhZik7XG5tbS9zbHViLmMtMjgxMC1cdGVsc2Vcbi0tXG5tbS9zbHViLmM9NjgzNz1FWFBPUlRfU1lNQk9MKGtmcmVlKTtcbi0tXG5tbS9zbHViLmMtNjg0NS0gKi9cbm1tL3NsdWIuYzo2ODQ2OnZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcbm1tL3NsdWIuYy02ODQ3LXtcbi0tXG5tbS9zbHViLmMtNjg4OC1cdCAqIGthc2FuX3JlcG9ydF9pbnZhbGlkX2ZyZWUoKSAtXHUwMDNlIHJhd19zcGluX2xvY2tfaXJxc2F2ZSgpIC1cdTAwM2UgTk1JXG5tbS9zbHViLmM6Njg4OTpcdCAqICAtXHUwMDNlIGtmcmVlX25vbG9jaygpIC1cdTAwM2Uga2FzYW5fcmVwb3J0X2ludmFsaWRfZnJlZSgpIG9uIHRoZSBzYW1lIENQVVxubW0vc2x1Yi5jLTY4OTAtXHQgKiBpcyBkb3VibGUgYnVnZ3kgYW5kIGRlc2VydmVzIHRvIGRlYWRsb2NrLlxuLS1cbm1tL3NsdWIuYy02OTI0LX1cbm1tL3NsdWIuYzo2OTI1OkVYUE9SVF9TWU1CT0xfR1BMKGtmcmVlX25vbG9jayk7XG5tbS9zbHViLmMtNjkyNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMDIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvbXBpbGF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGl0JiMzOTtzIGNvbXBpbGVkLCB0aGF0IG11Y2ggaXMgb2J2aW91cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGtleSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSYjMzk7dmUgZ290IGEgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHRvIHdvcmsgd2l0aCwgYGtmcmVlX25vbG9ja2AsIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlYCwgYGttZW1sZWFrX21heV9uZWVkX2ZyZWVgLCBga2ZlbmNlX29ial90b19sbG5vZGVgLCBhbmQgYGtmZW5jZV9sbG5vZGVfdG9fb2JqYC4gVGhvc2UgYXJlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCByZXF1aXJlbWVudHMuCgpOb3csIGxldCYjMzk7cyBsb29rIGZvciBhIHBvdGVudGlhbCBrZXkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIFRoZSBjb21taXQgbWVzc2FnZSBtZW50aW9ucyBgUFJFRU1QVF9SVD15YCBpbiByZWxhdGlvbiB0byBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZWAsIHNvIHRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgb24gbXkgcmFkYXIuIENoZWNraW5nIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlYC4uLiBBaCwgdGhlIGNvbW1lbnQgaGVyZSBpcyBjcnVjaWFsLiBJdCBub3RlcyB0aGF0IGBrZnJlZV9ub2xvY2tgIGlzIHVzZWQgYmVjYXVzZSBvZiB0aGUgYHAtJmd0O3BpX2xvY2tgIGFuZCB0aGUgcG90ZW50aWFsIGNvbmZsaWN0IHdpdGggYGtmcmVlYCB3aGVuIGBQUkVFTVBUX1JUYCBpcyBlbmFibGVkLiBIb3dldmVyLCB0aGUgY29tbWVudCBkb2VzICpub3QqIHNheSB0aGF0IGBrZnJlZV9ub2xvY2tgIGlzICpvbmx5KiBjYWxsZWQgd2l0aCBgUFJFRU1QVF9SVGAuIFNvIGl0IGxvb2tzIGxpa2UgYGtmcmVlX25vbG9ja2AgaXMgY2FsbGVkIGluIGFueSBjYXNlLCBldmVuIGlmIGBQUkVFTVBUX1JUYCBpcyBub3QgZW5hYmxlZCwgdGhvdWdoIHRoaXMgc3BlY2lmaWMgY2FsbCB3aXRoIGEgbG9jayBtaWdodCBiZSB0aGUgcmVhc29uIGZvciBpbmNsdWRpbmcgaXQuIAoKSSYjMzk7bGwgaW5jbHVkZSBgUFJFRU1QVF9SVGAgaW4gYEVuYWJsZUNvbmZpZ3NgIGp1c3QgdG8gYmUgc2FmZSwganVzdCBpbiBjYXNlIHRoYXQmIzM5O3Mgd2h5IHRoaXMgaXMgY2FsbGVkLCBidXQgaXQgZG9lc24mIzM5O3QgbG9vayB0byBiZSBzdHJpY3RseSBuZWNlc3NhcnkgZm9yIHRoZSBjb2RlIHRvIGNvbXBpbGUuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCB0aGF0IGNvbmZpZyBhY3R1YWxseSBleGlzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUkVFTVBUX1JUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLnByZWVtcHQ9OTA9ZW5kY2hvaWNlXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTkxLVxua2VybmVsL0tjb25maWcucHJlZW1wdDo5Mjpjb25maWcgUFJFRU1QVF9SVFxua2VybmVsL0tjb25maWcucHJlZW1wdC05My1cdGJvb2wgXCYjMzQ7RnVsbHkgUHJlZW1wdGlibGUgS2VybmVsIChSZWFsLVRpbWUpXCYjMzQ7XG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdC0xMDgtXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjEwOTpjb25maWcgUFJFRU1QVF9SVF9ORUVEU19CSF9MT0NLXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTExMC1cdGJvb2wgXCYjMzQ7RW5mb3JjZSBzb2Z0aXJxIHN5bmNocm9uaXNhdGlvbiBvbiBQUkVFTVBUX1JUXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDI2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFBSRUVNUFRfUlQgYW5kIFJlbGF0ZWQgU3ltYm9scyoqCgpPa2F5LCBzbyBgUFJFRU1QVF9SVGAgaXMgZGVmaW5pdGVseSBhIGZhY3RvciBoZXJlLiBMZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhpcyBhbmFseXNpcy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBjb3JlIHN5bWJvbHMgdGhhdCBJJiMzOTttIGRlYWxpbmcgd2l0aC4gSSBzZWUgdGhlc2UgYXMga2V5OiBga2ZyZWVfbm9sb2NrYCwgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2VgLCBga21lbWxlYWtfbWF5X25lZWRfZnJlZWAsIGBrZmVuY2Vfb2JqX3RvX2xsbm9kZWAsIGFuZCBga2ZlbmNlX2xsbm9kZV90b19vYmpgLiBUaG9zZSBhcmUgdGhlIG9uZXMgSSYjMzk7bSB0cmFja2luZywgaW4gcmVsYXRpb24gdG8gYFBSRUVNUFRfUlRgLgoKTm93LCBmb3IgdGhlIGNvbmZpZ3VyYXRpb25zIHRoZW1zZWx2ZXMsIEkmIzM5O3ZlIGdvdCBgREVCVUdfS01FTUxFQUtgLCBgS0ZFTkNFYCwgYW5kIG9mIGNvdXJzZSwgYFBSRUVNUFRfUlRgLiBUaGVzZSBzZWVtIGNlbnRyYWwgdG8gdGhlIHByb2JsZW0uCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZSBsb2NhdGlvbiBvZiBga2ZlbmNlX29ial90b19sbG5vZGVgIGFuZCBga2ZlbmNlX2xsbm9kZV90b19vYmpgLiBBaCwgeWVzLCB0aGV5JiMzOTtyZSBpbiBgbW0va2ZlbmNlL2NvcmUuY2AuIEdvb2QsIHRoYXQgc29saWRpZmllcyBteSBtZW50YWwgbWFwIG9mIHdoZXJlIHRoZSBLRkVOQ0UgbG9naWMgcmVzaWRlcy4gSSYjMzk7bSBub3cgcmVhZHkgdG8gcHJvY2VlZCwgYXJtZWQgd2l0aCBhIGNvbmZpcm1lZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmZW5jZV9vYmpfdG9fbGxub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2ZlbmNlL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9rZmVuY2UvY29yZS5jPTEyNDc9dm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG4tLVxubW0va2ZlbmNlL2NvcmUuYy0xMjczLVxubW0va2ZlbmNlL2NvcmUuYzoxMjc0OnN0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKVxubW0va2ZlbmNlL2NvcmUuYy0xMjc1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1ODAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJiMzOTttIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBpbnRlcm5hbHM6CgoqKkNvbmZpcm1pbmcgdGhlIFNjb3BlIGFuZCBEcmlsbGluZyBEb3duKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGdsb2JhbCBmdW5jdGlvbnMsIHdoaWNoIGlzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQuIFRoZSBjb250ZXh0IHN1Z2dlc3RzIHdlJiMzOTtyZSBsaWtlbHkgaW4gdGhlIHJlYWxtIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBsaWtlbHkga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LiBIbW0sIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmUgYSBmaXJtIGdyYXNwIG9mIHRoZSBzaXR1YXRpb24gaGVyZSwgbGV0IG1lIGdvIGFoZWFkIGFuZCBkb3VibGUgY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgYGttZW1sZWFrX21heV9uZWVkX2ZyZWVgIGZ1bmN0aW9uLiBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgcmVjYWxsIGl0cyBwdXJwb3NlLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ggYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGFueSBzdWJ0bGV0aWVzLiBUaGF0IGZ1bmN0aW9uIGNvdWxkIGJlIGNlbnRyYWwgdG8gd2hhdGV2ZXIgaXNzdWUgd2UmIzM5O3JlIGV4YW1pbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21lbWxlYWtfbWF5X25lZWRfZnJlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2ttZW1sZWFrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va21lbWxlYWsuYz0xMTY5PUVYUE9SVF9TWU1CT0xfR1BMKGttZW1sZWFrX2ZyZWUpO1xuLS1cbm1tL2ttZW1sZWFrLmMtMTE3MS0vKipcbm1tL2ttZW1sZWFrLmM6MTE3MjogKiBrbWVtbGVha19tYXlfbmVlZF9mcmVlIC0gY2hlY2sgaWYgb2JqZWN0IGlzIHJlZ2lzdGVyZWRcbm1tL2ttZW1sZWFrLmMtMTE3My0gKiBAcHRyOlx0cG9pbnRlciB0byBiZWdpbm5pbmcgb2YgdGhlIG9iamVjdFxuLS1cbm1tL2ttZW1sZWFrLmMtMTE4OC0gKi9cbm1tL2ttZW1sZWFrLmM6MTE4OTpib29sIF9fcmVmIGttZW1sZWFrX21heV9uZWVkX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKVxubW0va21lbWxlYWsuYy0xMTkwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NzYKCQkJCQkJCW91dHB1dDogMjQ0CgkJCQkJCQl0aG91Z2h0czogMTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBhICpnbG9iYWwgZnVuY3Rpb24qLCBzcGVjaWZpY2FsbHkgYGtmcmVlX25vbG9jaygpYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGNvbmZpcm1zIHRoaXMg4oCTIHllcywgaXQmIzM5O3MgYSBnbG9iYWwgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWluZyBtb2RpZmllZC4gVGhhdCBtZWFucyBpdOKAmXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgcmVhY2ggb2YgdGhpcyBjaGFuZ2UuCgpOb3csIHRoZSBjb3JlIG9mIGl0IGlzIHRoZSBtb2RpZmljYXRpb24gdG8gYGtmcmVlX25vbG9jaygpYCB3aXRoaW4gYG1tL3NsdWIuY2AuIEl0JiMzOTtzIGRlc2lnbmVkIHRvIG1ha2UgYGtmcmVlX25vbG9jaygpYCBoYW5kbGUgYSB3aWRlciByYW5nZSBvZiBvYmplY3RzOiB0aG9zZSBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jKClgLCBga21lbV9jYWNoZV9hbGxvYygpYCwgYW5kIGV2ZW4gdGhlIGxhcmdlciBga21hbGxvY2AgYWxsb2NhdGlvbnMsIG5vdCB0byBtZW50aW9uIEtGRU5DRSBvYmplY3RzLiBUaGUgbG9naWMgb2YgZGVmZXJyaW5nIHRoZSBhY3R1YWwgZnJlZWluZyB1c2luZyBgaXJxX3dvcmtgIHdoZW4gbmVjZXNzYXJ5IChsaWtlIHdoZW4gZGVhbGluZyB3aXRoIGBrbWVtbGVha2Agb3IgYEtGRU5DRWApIGlzIGNsZXZlciBhbmQgc2VlbXMgc3RyYXRlZ2ljYWxseSBzb3VuZCwgYSBjb21tb24gYXBwcm9hY2ggaW4gdGhlIGtlcm5lbC4gQnV0IGl0IGRvZXMgaW50cm9kdWNlIGEgbmV3IHBhdGgsIGEgc3VidGxlIGludGVyYWN0aW9uIGJldHdlZW4gZGlmZmVyZW50IHNjaGVkdWxpbmcgcGF0aHMuIEl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4KCkludGVyZXN0aW5nbHksIGl0IGFsc28gdG91Y2hlcyBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpYCBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AsIHNoaWZ0aW5nIGl0cyB1c2UgZnJvbSBga2ZyZWVfcmN1KClgIHRvIGBrZnJlZV9ub2xvY2soKWAuIFRoZSBzaGlmdCBpbiBmdW5jdGlvbiBpcyBub3RhYmxlOyBga2ZyZWVfbm9sb2NrKClgIGlzIGxlc3MgY29uc2VydmF0aXZlIHRoYW4gYGtmcmVlX3JjdSgpYCBpbiB0ZXJtcyBvZiBzeW5jaHJvbml6YXRpb24uIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzY2hlZHVsZXIgY2hhbmdlcyBhbmQgYXJlICpoaWdobHkqIHJlYWNoYWJsZS4gVGhpcyBzaWduaWZpY2FudGx5IGluY3JlYXNlcyB0aGUgZnV6emluZyBzdXJmYWNlIGFuZCBoaWdobGlnaHRzIHRoZWlyIGluaGVyZW50IHZ1bG5lcmFiaWxpdHkuIFRoZSBjb21iaW5hdGlvbiBvZiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2NoZWR1bGVyIGNoYW5nZXMgbWVhbnMgaXQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gZXhwb3NlIHRyaWNreSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMuIFRoaXMgaXMgdGhlIHBsYWNlIHRvIGNvbmNlbnRyYXRlIHRoZSBmdXp6aW5nIGVmZm9ydHMuCgpJJiMzOTttIGNvbmZpZGVudCBpbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVCVUdfS01FTUxFQUsmIzM0OywKICAgICYjMzQ7S0ZFTkNFJiMzNDssCiAgICAmIzM0O1BSRUVNUFRfUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrZnJlZV9ub2xvY2smIzM0OywKICAgICYjMzQ7c2V0X2NwdXNfYWxsb3dlZF9mb3JjZSYjMzQ7LAogICAgJiMzNDtrbWVtbGVha19tYXlfbmVlZF9mcmVlJiMzNDssCiAgICAmIzM0O2tmZW5jZV9vYmpfdG9fbGxub2RlJiMzNDssCiAgICAmIzM0O2tmZW5jZV9sbG5vZGVfdG9fb2JqJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBrZnJlZV9ub2xvY2soKWAgaW4gYG1tL3NsdWIuY2AgdG8gc3VwcG9ydCBmcmVlaW5nIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgLCBga21lbV9jYWNoZV9hbGxvYygpYCwgYW5kIGxhcmdlIGttYWxsb2NzLCBhcyB3ZWxsIGFzIEtGRU5DRSBvYmplY3RzLiBJdCBkZWZlcnMgZnJlZWluZyB0byBhbiBgaXJxX3dvcmtgIGlmIG5lY2Vzc2FyeSAoZS5nLiwgZm9yIGttZW1sZWFrIG9yIEtGRU5DRSkuIEl0IGFsc28gbW9kaWZpZXMgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKWAgaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgIHRvIHVzZSBga2ZyZWVfbm9sb2NrKClgIGluc3RlYWQgb2YgYGtmcmVlX3JjdSgpYC4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxlciBjaGFuZ2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVCVUdfS01FTUxFQUsmIzM0OywKICAgICYjMzQ7S0ZFTkNFJiMzNDssCiAgICAmIzM0O1BSRUVNUFRfUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrZnJlZV9ub2xvY2smIzM0OywKICAgICYjMzQ7c2V0X2NwdXNfYWxsb3dlZF9mb3JjZSYjMzQ7LAogICAgJiMzNDtrbWVtbGVha19tYXlfbmVlZF9mcmVlJiMzNDssCiAgICAmIzM0O2tmZW5jZV9vYmpfdG9fbGxub2RlJiMzNDssCiAgICAmIzM0O2tmZW5jZV9sbG5vZGVfdG9fb2JqJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBrZnJlZV9ub2xvY2soKWAgaW4gYG1tL3NsdWIuY2AgdG8gc3VwcG9ydCBmcmVlaW5nIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgLCBga21lbV9jYWNoZV9hbGxvYygpYCwgYW5kIGxhcmdlIGttYWxsb2NzLCBhcyB3ZWxsIGFzIEtGRU5DRSBvYmplY3RzLiBJdCBkZWZlcnMgZnJlZWluZyB0byBhbiBgaXJxX3dvcmtgIGlmIG5lY2Vzc2FyeSAoZS5nLiwgZm9yIGttZW1sZWFrIG9yIEtGRU5DRSkuIEl0IGFsc28gbW9kaWZpZXMgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKWAgaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgIHRvIHVzZSBga2ZyZWVfbm9sb2NrKClgIGluc3RlYWQgb2YgYGtmcmVlX3JjdSgpYC4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxlciBjaGFuZ2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgZnJlZWluZyBwYXRocywgc3BlY2lmaWNhbGx5IGV4dGVuZGluZyBga2ZyZWVfbm9sb2NrKClgIHRvIGhhbmRsZSBvYmplY3RzIGFsbG9jYXRlZCBieSBga21hbGxvYygpYCBhbmQgYGttZW1fY2FjaGVfYWxsb2MoKWAsIGluY2x1ZGluZyBsYXJnZSBrbWFsbG9jcyBhbmQgS0ZFTkNFIG9iamVjdHMuIEl0IGRlZmVycyBmcmVlaW5nIHRvIGFuIGBpcnFfd29ya2AgdXNpbmcgYSBsb2NrbGVzcyBsaXN0IChgbGxpc3RgKSB3aGVuIG5lY2Vzc2FyeS4gVGhlIGNoYW5nZXMgaW52b2x2ZSBvdmVyd3JpdGluZyBwYXJ0cyBvZiB0aGUgZnJlZWQgb2JqZWN0cyAobGlrZSB0aGUgZnJlZXBvaW50ZXIgb3IgdGhlIGZpcnN0IHdvcmQgb2YgYSBsYXJnZSBrbWFsbG9jIG9iamVjdCkgdG8gc3RvcmUgdGhlIGBsbGlzdF9ub2RlYC4gU2luY2UgdGhlc2Ugb2JqZWN0cyBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZnJlZWQsIGFueSBhY2Nlc3MgdG8gdGhlbSB3b3VsZCBjb25zdGl0dXRlIGEgdXNlLWFmdGVyLWZyZWUgYnVnLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMgb2YgYWN0aXZlIG9iamVjdHMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIG1lbW9yeSBjb3JydXB0aW9uKSB3aWxsIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgU0xVQiBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGV4cG9zZWQgaGVyZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU1Yjg2YmRjNTk4NGI2YjBiYTMxZGUwNzk1MDFkZTZiMjE2MTk4NzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjUzOjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZmVuY2UuaCBiL2luY2x1ZGUvbGludXgva2ZlbmNlLmgKaW5kZXggZTU4MjJmNmU3ZjI3OS4uMDA3MjFjODUyNThkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZmVuY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2tmZW5jZS5oCkBAIC0xODgsNiAmIzQzOzE4OCw5IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19tdXN0X2NoZWNrIGJvb2wga2ZlbmNlX2ZyZWUodm9pZCAqYWRkcikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKTsKJiM0Mzt2b2lkICprZmVuY2VfbGxub2RlX3RvX29iaihzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlKTsKJiM0MzsKIC8qKgogICoga2ZlbmNlX2hhbmRsZV9wYWdlX2ZhdWx0KCkgLSBwZXJmb3JtIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIEtGRU5DRSBwYWdlcwogICogQGFkZHI6IGZhdWx0aW5nIGFkZHJlc3MKQEAgLTIzNSw2ICYjNDM7MjM4LDggQEAgc3RhdGljIGlubGluZSBzaXplX3Qga2ZlbmNlX2tzaXplKGNvbnN0IHZvaWQgKmFkZHIpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCAqa2ZlbmNlX29iamVjdF9zdGFydChjb25zdCB2b2lkICphZGRyKSB7IHJldHVybiBOVUxMOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKSB7IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sga2ZlbmNlX2ZyZWUodm9pZCAqYWRkcikgeyByZXR1cm4gZmFsc2U7IH0KJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKSB7IHJldHVybiBOVUxMOyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkICprZmVuY2VfbGxub2RlX3RvX29iaihzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlKSB7IHJldHVybiBOVUxMOyB9CiBzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGtmZW5jZV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsCiAJCQkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oIGIvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oCmluZGV4IGZiZDQyNGIyYWJiMTQuLjUyZjc1ZjEwYTljZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva21lbWxlYWsuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgKQEAgLTIyLDYgJiM0MzsyMiw3IEBAIGV4dGVybiB2b2lkIGttZW1sZWFrX2FsbG9jX3BlcmNwdShjb25zdCB2b2lkIF9fcGVyY3B1ICpwdHIsIHNpemVfdCBzaXplLAogZXh0ZXJuIHZvaWQga21lbWxlYWtfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBzaXplX3Qgc2l6ZSwKIAkJCSAgICAgZ2ZwX3QgZ2ZwKSBfX3JlZjsKIGV4dGVybiB2b2lkIGttZW1sZWFrX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjsKJiM0Mztib29sIGttZW1sZWFrX21heV9uZWVkX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjsKIGV4dGVybiB2b2lkIGttZW1sZWFrX2ZyZWVfcGFydChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplKSBfX3JlZjsKIGV4dGVybiB2b2lkIGttZW1sZWFrX2ZyZWVfcGVyY3B1KGNvbnN0IHZvaWQgX19wZXJjcHUgKnB0cikgX19yZWY7CiBleHRlcm4gdm9pZCBrbWVtbGVha191cGRhdGVfdHJhY2UoY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjsKQEAgLTUwLDYgJiM0Mzs1MSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpCiAJCWttZW1sZWFrX2ZyZWUocHRyKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncykKJiM0Mzt7CiYjNDM7CWlmICghKGZsYWdzICZhbXA7IFNMQUJfTk9MRUFLVFJBQ0UpKQomIzQzOwkJcmV0dXJuIGttZW1sZWFrX21heV9uZWVkX2ZyZWUocHRyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19lcmFzZSh2b2lkICoqcHRyKQogewogCSpwdHIgPSBOVUxMOwpAQCAtODYsNiAmIzQzOzk1LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19mcmVlX3BhcnQoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncykKIHsKIH0KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9wZXJjcHUoY29uc3Qgdm9pZCBfX3BlcmNwdSAqcHRyKQogewogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NvcmUuYyBiL2tlcm5lbC9zY2hlZC9jb3JlLmMKaW5kZXggOTYyMjY3MDdjMmY2MS4uZDI5MjllNGUyM2YxMyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvY29yZS5jCkBAIC0yODA3LDIwICYjNDM7MjgwNywxNSBAQCB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZm9yY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbmV3X21hcwogCQkudXNlcl9tYXNrID0gTlVMTCwKIAkJLmZsYWdzICAgICA9IFNDQV9VU0VSLAkvKiBjbGVhciB0aGUgdXNlciByZXF1ZXN0ZWQgbWFzayAqLwogCX07Ci0JdW5pb24gY3B1bWFza19yY3VoZWFkIHsKLQkJY3B1bWFza190IGNwdW1hc2s7Ci0JCXN0cnVjdCByY3VfaGVhZCByY3U7Ci0JfTsKIAogCXNjb3BlZF9ndWFyZCAoX190YXNrX3JxX2xvY2ssIHApCiAJCWRvX3NldF9jcHVzX2FsbG93ZWQocCwgJmFtcDthYyk7CiAKIAkvKgogCSAqIEJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgd2l0aCBwLSZndDtwaV9sb2NrIGhlbGQsIGl0IGlzIG5vdCBwb3NzaWJsZQotCSAqIHRvIHVzZSBrZnJlZSgpIGhlcmUgKHdoZW4gUFJFRU1QVF9SVD15KSwgdGhlcmVmb3JlIHB1bnQgdG8gdXNpbmcKLQkgKiBrZnJlZV9yY3UoKS4KJiM0MzsJICogdG8gdXNlIGtmcmVlKCkgaGVyZSAod2hlbiBQUkVFTVBUX1JUPXkpLCB0aHVzIHVzZSBrZnJlZV9ub2xvY2soKQogCSAqLwotCWtmcmVlX3JjdSgodW5pb24gY3B1bWFza19yY3VoZWFkICopYWMudXNlcl9tYXNrLCByY3UpOwomIzQzOwlrZnJlZV9ub2xvY2soYWMudXNlcl9tYXNrKTsKIH0KIAogaW50IGR1cF91c2VyX2NwdXNfcHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYywKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oIGIva2VybmVsL3NjaGVkL3NjaGVkLmgKaW5kZXggNTZhY2Y1MDJiYTI2MC4uNmE4ZDA1NzhlOTYzMyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL3NjaGVkLmgKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL3NjaGVkLmgKQEAgLTI4ODYsMTIgJiM0MzsyODg2LDcgQEAgc3RhdGljIGlubGluZSBib29sIHRhc2tfYWxsb3dlZF9vbl9jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY3B1KQogCiBzdGF0aWMgaW5saW5lIGNwdW1hc2tfdCAqYWxsb2NfdXNlcl9jcHVzX3B0cihpbnQgbm9kZSkKIHsKLQkvKgotCSAqIFNlZSBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKCkgYWJvdmUgZm9yIHRoZSByY3VfaGVhZCB1c2FnZS4KLQkgKi8KLQlpbnQgc2l6ZSA9IG1heF90KGludCwgY3B1bWFza19zaXplKCksIHNpemVvZihzdHJ1Y3QgcmN1X2hlYWQpKTsKLQotCXJldHVybiBrbWFsbG9jX25vZGUoc2l6ZSwgR0ZQX0tFUk5FTCwgbm9kZSk7CiYjNDM7CXJldHVybiBrbWFsbG9jX25vZGUoY3B1bWFza19zaXplKCksIEdGUF9LRVJORUwsIG5vZGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X3B1c2hfdGFzayhzdHJ1Y3QgcnEgKnJxKQpkaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2NvcmUuYyBiL21tL2tmZW5jZS9jb3JlLmMKaW5kZXggNjU3N2JkNzY5NTRlYi4uNDI1MTlkMjQ2ODdmZiAxMDA2NDQKLS0tIGEvbW0va2ZlbmNlL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9rZmVuY2UvY29yZS5jCkBAIC0xMjcxLDYgJiM0MzsxMjcxLDIwIEBAIHZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKQogCX0KIH0KIAomIzQzO3N0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IGtmZW5jZV9tZXRhZGF0YSAqbWV0YSA9IGFkZHJfdG9fbWV0YWRhdGEoKHVuc2lnbmVkIGxvbmcpYWRkcik7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO21ldGEtJmd0O2xsbm9kZTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCAqa2ZlbmNlX2xsbm9kZV90b19vYmooc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrZmVuY2VfbWV0YWRhdGEgKm1ldGEgPSBjb250YWluZXJfb2YobGxub2RlLCBzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhLCBsbG5vZGUpOwomIzQzOwomIzQzOwlyZXR1cm4gKHZvaWQgKiltZXRhLSZndDthZGRyOwomIzQzO30KJiM0MzsKIGJvb2wga2ZlbmNlX2hhbmRsZV9wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBpc193cml0ZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJY29uc3QgaW50IHBhZ2VfaW5kZXggPSAoYWRkciAtICh1bnNpZ25lZCBsb25nKV9fa2ZlbmNlX3Bvb2wpIC8gUEFHRV9TSVpFOwpkaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZS5oIGIvbW0va2ZlbmNlL2tmZW5jZS5oCmluZGV4IDFmNjE4ZjliMGQxMmQuLjBmY2ExZGMyYzc5NDEgMTAwNjQ0Ci0tLSBhL21tL2tmZW5jZS9rZmVuY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9rZmVuY2Uva2ZlbmNlLmgKQEAgLTU4LDcgJiM0Mzs1OCwxMCBAQCBzdHJ1Y3Qga2ZlbmNlX3RyYWNrIHsKIC8qIEtGRU5DRSBtZXRhZGF0YSBwZXIgZ3VhcmRlZCBhbGxvY2F0aW9uLiAqLwogc3RydWN0IGtmZW5jZV9tZXRhZGF0YSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0IF9fZ3VhcmRlZF9ieSgmYW1wO2tmZW5jZV9mcmVlbGlzdF9sb2NrKTsJLyogRnJlZWxpc3Qgbm9kZS4gKi8KLQlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CS8qIEZvciBkZWxheWVkIGZyZWVpbmcuICovCiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsJLyogRm9yIGRlbGF5ZWQgZnJlZWluZy4gKi8KJiM0MzsJCXN0cnVjdCBsbGlzdF9ub2RlIGxsbm9kZTsJLyogRm9yIGtmcmVlX25vbG9jaygpLiAqLwomIzQzOwl9OwogCiAJLyoKIAkgKiBMb2NrIHByb3RlY3RpbmcgYmVsb3cgZGF0YTsgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IG9mIHRoZSBiZWxvdyBkYXRhLApkaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmMKaW5kZXggN2M3YmExN2NlN2FmMC4uZTM1NjBjZTgyNjMyNiAxMDA2NDQKLS0tIGEvbW0va21lbWxlYWsuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9rbWVtbGVhay5jCkBAIC0xMTY4LDYgJiM0MzsxMTY4LDQ4IEBAIHZvaWQgX19yZWYga21lbWxlYWtfZnJlZShjb25zdCB2b2lkICpwdHIpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrbWVtbGVha19mcmVlKTsKIAomIzQzOy8qKgomIzQzOyAqIGttZW1sZWFrX21heV9uZWVkX2ZyZWUgLSBjaGVjayBpZiBvYmplY3QgaXMgcmVnaXN0ZXJlZAomIzQzOyAqIEBwdHI6CXBvaW50ZXIgdG8gYmVnaW5uaW5nIG9mIHRoZSBvYmplY3QKJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGtlcm5lbCBhbGxvY2F0b3Igd2hlbiBhbiBvYmplY3Qgc2hvdWxkIGJlCiYjNDM7ICogZnJlZWQgYnV0IHRoZSBjYWxsZXIgY29udGV4dCBtaWdodCBiZSB1bnNhZmUgdG8gc3BpbiBvbiB0aGUgaW50ZXJuYWwgbG9ja3MuCiYjNDM7ICoKJiM0MzsgKiBJdCB3aWxsIHRoZXJlZm9yZSBvbmx5IHVzZSB0cnlsb2NrIGFuZCB0aHVzIG1pZ2h0IHJldHVybiBhIGZhbHNlIHBvc2l0aXZlCiYjNDM7ICogaWYgdGhlIHRyeWxvY2sgZmFpbHMgYW5kIHRoZSBzdGF0dXMgY2Fubm90IGJlIGRldGVybWluZWQuCiYjNDM7ICoKJiM0MzsgKiBGb3Igb2JqZWN0cyB0aGF0IChtaWdodCkgbmVlZCBmcmVlLCB0aGUgYWxsb2NhdG9yIGhhcyB0byBkZWZlciB0aGUgYWN0dWFsCiYjNDM7ICogZnJlZWluZyB0byBhIHNhZmUgY29udGV4dC4KJiM0MzsgKgomIzQzOyAqIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgbW9zdCBvYmplY3RzIGZyZWVkIGZyb20gdGhlIHVuc2FmZSBjb250ZXh0IGFyZSBhbHNvCiYjNDM7ICogYWxsb2NhdGVkIGluIHN1Y2ggY29udGV4dCBhbmQgdGh1cyBhcmUgbm90IHJlZ2lzdGVyZWQgaW4ga21lbWxlYWssIHNvIGl0JiMzOTtzCiYjNDM7ICogdW5saWtlbHkgdGhlIGRlZmVyZWQgZnJlZWluZyB3aWxsIGJlIG5lY2Vzc2FyeSBqdXN0IGJlY2F1c2Uga21lbWxlYWsgaXMKJiM0MzsgKiBlbmFibGVkLgomIzQzOyAqLwomIzQzO2Jvb2wgX19yZWYga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3Q7CiYjNDM7CiYjNDM7CXByX2RlYnVnKCYjMzQ7JXMoMHglcHgpXG4mIzM0OywgX19mdW5jX18sIHB0cik7CiYjNDM7CiYjNDM7CWlmICgha21lbWxlYWtfZnJlZV9lbmFibGVkIHx8ICFwdHIgfHwgSVNfRVJSKHB0cikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIE9uIFVQLCByYXdfc3Bpbl90cnlsb2NrKCkgYWx3YXlzIHN1Y2NlZWRzIGV2ZW4gd2hlbiBpdCBpcyBsb2NrZWQgKi8KJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19TTVApICZhbXA7JmFtcDsgaW5fbm1pKCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKCFyYXdfc3Bpbl90cnlsb2NrX2lycXNhdmUoJmFtcDtrbWVtbGVha19sb2NrLCBmbGFncykpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJb2JqZWN0ID0gX19sb29rdXBfb2JqZWN0KCh1bnNpZ25lZCBsb25nKXB0ciwgMCwgMCk7CiYjNDM7CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7a21lbWxlYWtfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gISFvYmplY3Q7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBrbWVtbGVha19mcmVlX3BhcnQgLSBwYXJ0aWFsbHkgdW5yZWdpc3RlciBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBvYmplY3QKICAqIEBwdHI6CXBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvciBpbnNpZGUgdGhlIG9iamVjdC4gVGhpcyBhbHNvCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggYjlhZWIwMmE4ODBmMS4uM2JlOThmYWE5ZjBkZSAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsdWIuYwpAQCAtNDA1MCw2ICYjNDM7NDA1MCw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX2FsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcykKIAogc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrIHsKIAlzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzOwomIzQzOwlzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzX2tmZW5jZTsKJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0c19sYXJnZV9rbWFsbG9jOwogCXN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHNfYnlfcmN1OwogCXN0cnVjdCBsbGlzdF9oZWFkIHJjdV9zaGVhdmVzOwogCXN0cnVjdCBpcnFfd29yayB3b3JrOwpAQCAtNDA1OSw2ICYjNDM7NDA2MSw4IEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yayk7CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmssIGRlZmVycmVkX3BlcmNwdV93b3JrKSA9IHsKIAkub2JqZWN0cyA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzKSwKJiM0MzsJLm9iamVjdHNfa2ZlbmNlID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHNfa2ZlbmNlKSwKJiM0MzsJLm9iamVjdHNfbGFyZ2Vfa21hbGxvYyA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzX2xhcmdlX2ttYWxsb2MpLAogCS5vYmplY3RzX2J5X3JjdSA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzX2J5X3JjdSksCiAJLnJjdV9zaGVhdmVzID0gTExJU1RfSEVBRF9JTklUKHJjdV9zaGVhdmVzKSwKIAkud29yayA9IElSUV9XT1JLX0lOSVQoZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4pLApAQCAtNjM2Myw2ICYjNDM7NjM2NywyMSBAQCBzdGF0aWMgdm9pZCBmcmVlX3RvX3Bjc19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApCiAJfQogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkCiYjNDM7X19mcmVlX2xhcmdlX2ttYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihwYWdlKTsKJiM0MzsKJiM0MzsJbW9kX2xydXZlY19wYWdlX3N0YXRlKHBhZ2UsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CLAomIzQzOwkJCSAgICAgIC0oUEFHRV9TSVpFICZsdDsmbHQ7IG9yZGVyKSk7CiYjNDM7CV9fQ2xlYXJQYWdlTGFyZ2VLbWFsbG9jKHBhZ2UpOwomIzQzOwomIzQzOwlpZiAoZnJlZV9mbGFncyAmYW1wOyBTTEFCX0ZSRUVfTk9MT0NLKQomIzQzOwkJZnJlZV9mcm96ZW5fcGFnZXNfbm9sb2NrKHBhZ2UsIG9yZGVyKTsKJiM0MzsJZWxzZQomIzQzOwkJZnJlZV9mcm96ZW5fcGFnZXMocGFnZSwgb3JkZXIpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBJbiBQUkVFTVBUX1JUIGlycV93b3JrIHJ1bnMgaW4gcGVyLWNwdSBrdGhyZWFkLCBzbyBpdCYjMzk7cyBzYWZlCiAgKiB0byB0YWtlIHNsZWVwaW5nIHNwaW5fbG9ja3MgZnJvbSBfX3NsYWJfZnJlZSgpLgpAQCAtNjM3MSwxNiAmIzQzOzYzOTAsMTIgQEAgc3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKQogc3RhdGljIHZvaWQgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3b3JrKQogewogCXN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3OwotCXN0cnVjdCBsbGlzdF9oZWFkICpvYmpzLCAqb2Jqc19ieV9yY3UsICpyY3Vfc2hlYXZlczsKIAlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCAqcG9zLCAqdDsKIAlzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsICpuZXh0OwogCiAJZHB3ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yaywgd29yayk7Ci0JcmN1X3NoZWF2ZXMgPSAmYW1wO2Rwdy0mZ3Q7cmN1X3NoZWF2ZXM7Ci0Jb2JqcyA9ICZhbXA7ZHB3LSZndDtvYmplY3RzOwotCW9ianNfYnlfcmN1ID0gJmFtcDtkcHctJmd0O29iamVjdHNfYnlfcmN1OwogCi0JbGxub2RlID0gbGxpc3RfZGVsX2FsbChvYmpzKTsKJiM0MzsJbGxub2RlID0gbGxpc3RfZGVsX2FsbCgmYW1wO2Rwdy0mZ3Q7b2JqZWN0cyk7CiAJbGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHQsIGxsbm9kZSkgewogCQlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIAkJc3RydWN0IHNsYWIgKnNsYWI7CkBAIC02MzkyLDYgJiM0Mzs2NDA3LDggQEAgc3RhdGljIHZvaWQgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3b3JrKQogCQkvKiBQb2ludCAmIzM5O3gmIzM5OyBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgb2YgYWxsb2NhdGVkIG9iamVjdCAqLwogCQl4IC09IHMtJmd0O29mZnNldDsKIAomIzQzOwkJa21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoeCwgcy0mZ3Q7ZmxhZ3MpOwomIzQzOwogCQkvKgogCQkgKiBXZSB1c2VkIGZyZWVwb2ludGVyIGluICYjMzk7eCYjMzk7IHRvIGxpbmsgJiMzOTt4JiMzOTsgaW50byBkZi0mZ3Q7b2JqZWN0cy4KIAkJICogQ2xlYXIgaXQgdG8gTlVMTCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZSBkZXRlY3Rpb24KQEAgLTY0MDMsNyAmIzQzOzY0MjAsMzAgQEAgc3RhdGljIHZvaWQgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3b3JrKQogCQlzdGF0KHMsIEZSRUVfU0xPV1BBVEgpOwogCX0KIAotCWxsbm9kZSA9IGxsaXN0X2RlbF9hbGwob2Jqc19ieV9yY3UpOwomIzQzOwlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7ZHB3LSZndDtvYmplY3RzX2tmZW5jZSk7CiYjNDM7CWxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHsKJiM0MzsJCXN0cnVjdCBrbWVtX2NhY2hlICpzOwomIzQzOwkJc3RydWN0IHNsYWIgKnNsYWI7CiYjNDM7CQl2b2lkICpvYmogPSBrZmVuY2VfbGxub2RlX3RvX29iaihwb3MpOwomIzQzOwomIzQzOwkJc2xhYiA9IHZpcnRfdG9fc2xhYihvYmopOwomIzQzOwkJcyA9IHNsYWItJmd0O3NsYWJfY2FjaGU7CiYjNDM7CiYjNDM7CQlrbWVtbGVha19mcmVlX3JlY3Vyc2l2ZShvYmosIHMtJmd0O2ZsYWdzKTsKJiM0MzsKJiM0MzsJCV9fa2ZlbmNlX2ZyZWUob2JqKTsKJiM0MzsJfQomIzQzOwomIzQzOwlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7ZHB3LSZndDtvYmplY3RzX2xhcmdlX2ttYWxsb2MpOwomIzQzOwlsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7CiYjNDM7CQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZpcnRfdG9fcGFnZShwb3MpOwomIzQzOwomIzQzOwkJa21lbWxlYWtfZnJlZShwb3MpOwomIzQzOwomIzQzOwkJX19mcmVlX2xhcmdlX2ttYWxsb2NfcGFnZShwYWdlLCBTTEFCX0ZSRUVfREVGQVVMVCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGxub2RlID0gbGxpc3RfZGVsX2FsbCgmYW1wO2Rwdy0mZ3Q7b2JqZWN0c19ieV9yY3UpOwogCWxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHsKIAkJdm9pZCAqaGVhZCA9IHBvczsKIAkJdm9pZCAqb2JqcCA9IGt2bWFsbG9jX29ial9zdGFydF9hZGRyKGhlYWQpOwpAQCAtNjQxMSwyMSAmIzQzOzY0NTEsNjAgQEAgc3RhdGljIHZvaWQgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3b3JrKQogCQlrdmZyZWVfY2FsbF9yY3UoaGVhZCwgb2JqcCk7CiAJfQogCi0JbGxub2RlID0gbGxpc3RfZGVsX2FsbChyY3Vfc2hlYXZlcyk7CiYjNDM7CWxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtkcHctJmd0O3JjdV9zaGVhdmVzKTsKIAlsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNoZWFmLCBuZXh0LCBsbG5vZGUsIGxsbm9kZSkKIAkJY2FsbF9yY3UoJmFtcDtzaGVhZi0mZ3Q7cmN1X2hlYWQsIHJjdV9mcmVlX3NoZWFmKTsKIH0KIAotc3RhdGljIHZvaWQgZGVmZXJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqaGVhZCkKJiM0MztzdGF0aWMgdm9pZCBkZWZlcl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopCiB7CiAJc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFBsYWNlIHRoZSBsbGlzdCBub2RlIHdoZXJlIHRoZSBmcmVlcG9pbnRlciB3b3VsZCBiZSBpZiB3ZSBmcmVlZCB0aGUKJiM0MzsJICogb2JqZWN0IGltbWVkaWF0ZWx5LiBUaGF0IG1lYW5zIHdlIGNhbiB3cml0ZSB0aGVyZSBzYWZlbHksIG9ubHkgbmVlZAomIzQzOwkgKiB0byByZW1vdmUga2FzYW4gdGFnIGZpcnN0LgomIzQzOwkgKi8KJiM0MzsJbGxub2RlID0ga2FzYW5fcmVzZXRfdGFnKG9iaikgJiM0Mzsgcy0mZ3Q7b2Zmc2V0OwogCiAJZ3VhcmQocHJlZW1wdCkoKTsKIAotCWhlYWQgPSBrYXNhbl9yZXNldF90YWcoaGVhZCk7CiYjNDM7CWRwdyA9IHRoaXNfY3B1X3B0cigmYW1wO2RlZmVycmVkX3BlcmNwdV93b3JrKTsKJiM0MzsJaWYgKGxsaXN0X2FkZChsbG5vZGUsICZhbXA7ZHB3LSZndDtvYmplY3RzKSkKJiM0MzsJCWlycV93b3JrX3F1ZXVlKCZhbXA7ZHB3LSZndDt3b3JrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGVmZXJfZnJlZV9rZmVuY2Uodm9pZCAqb2JqKQomIzQzO3sKJiM0MzsJc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7CiYjNDM7CiYjNDM7CS8qIGthc2FuX3Jlc2V0X3RhZygpIGlzIG5vdCBuZWNlc3NhcnksIGtmZW5jZSBvYmplY3RzIGFyZSBub3QgdGFnZ2VkICovCiYjNDM7CWxsbm9kZSA9IGtmZW5jZV9vYmpfdG9fbGxub2RlKG9iaik7CiYjNDM7CiYjNDM7CWd1YXJkKHByZWVtcHQpKCk7CiYjNDM7CiYjNDM7CWRwdyA9IHRoaXNfY3B1X3B0cigmYW1wO2RlZmVycmVkX3BlcmNwdV93b3JrKTsKJiM0MzsJaWYgKGxsaXN0X2FkZChsbG5vZGUsICZhbXA7ZHB3LSZndDtvYmplY3RzX2tmZW5jZSkpCiYjNDM7CQlpcnFfd29ya19xdWV1ZSgmYW1wO2Rwdy0mZ3Q7d29yayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRlZmVyX2ZyZWVfbGFyZ2Vfa21hbGxvYyh2b2lkICpvYmopCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdzsKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogd2UgY2FuIHNpbXBseSB1c2UgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxhcmdlIGttYWxsb2Mgb2JqZWN0CiYjNDM7CSAqIGZvciB0aGUgbGxub2RlLCBhcyB0aGVyZSYjMzk7cyBubyBjdG9yIG9yIFRZUEVTQUZFX0JZX1JDVQomIzQzOwkgKi8KJiM0MzsJbGxub2RlID0ga2FzYW5fcmVzZXRfdGFnKG9iaik7CiYjNDM7CiYjNDM7CWd1YXJkKHByZWVtcHQpKCk7CiAKIAlkcHcgPSB0aGlzX2NwdV9wdHIoJmFtcDtkZWZlcnJlZF9wZXJjcHVfd29yayk7Ci0JaWYgKGxsaXN0X2FkZChoZWFkICYjNDM7IHMtJmd0O29mZnNldCwgJmFtcDtkcHctJmd0O29iamVjdHMpKQomIzQzOwlpZiAobGxpc3RfYWRkKGxsbm9kZSwgJmFtcDtkcHctJmd0O29iamVjdHNfbGFyZ2Vfa21hbGxvYykpCiAJCWlycV93b3JrX3F1ZXVlKCZhbXA7ZHB3LSZndDt3b3JrKTsKIH0KIApAQCAtNjY3Nyw5ICYjNDM7Njc1NiwxMSBAQCBzaXplX3Qga3NpemUoY29uc3Qgdm9pZCAqb2JqcCkKIH0KIEVYUE9SVF9TWU1CT0woa3NpemUpOwogCi1zdGF0aWMgdm9pZCBmcmVlX2xhcmdlX2ttYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKm9iamVjdCkKJiM0MztzdGF0aWMgdm9pZCBmcmVlX2xhcmdlX2ttYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKm9iamVjdCwKJiM0MzsJCQkgICAgICAgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpCiB7CiAJdW5zaWduZWQgaW50IG9yZGVyID0gY29tcG91bmRfb3JkZXIocGFnZSk7CiYjNDM7CWJvb2wgbm9sb2NrID0gZnJlZV9mbGFncyAmYW1wOyBTTEFCX0ZSRUVfTk9MT0NLOwogCiAJaWYgKFdBUk5fT05fT05DRSghUGFnZUxhcmdlS21hbGxvYyhwYWdlKSkpIHsKIAkJZHVtcF9wYWdlKHBhZ2UsICYjMzQ7Tm90IGEga21hbGxvYyBhbGxvY2F0aW9uJiMzNDspOwpAQCAtNjY4OSwxNCAmIzQzOzY3NzAsMTYgQEAgc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpCiAJaWYgKFdBUk5fT05fT05DRShvcmRlciA9PSAwKSkKIAkJcHJfd2Fybl9vbmNlKCYjMzQ7b2JqZWN0IHBvaW50ZXI6IDB4JXBcbiYjMzQ7LCBvYmplY3QpOwogCi0Ja21lbWxlYWtfZnJlZShvYmplY3QpOwomIzQzOwlpZiAoIW5vbG9jaykKJiM0MzsJCWttZW1sZWFrX2ZyZWUob2JqZWN0KTsKJiM0MzsKIAlrYXNhbl9rZnJlZV9sYXJnZShvYmplY3QpOwogCWttc2FuX2tmcmVlX2xhcmdlKG9iamVjdCk7CiAKLQltb2RfbHJ1dmVjX3BhZ2Vfc3RhdGUocGFnZSwgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0IsCi0JCQkgICAgICAtKFBBR0VfU0laRSAmbHQ7Jmx0OyBvcmRlcikpOwotCV9fQ2xlYXJQYWdlTGFyZ2VLbWFsbG9jKHBhZ2UpOwotCWZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyKTsKJiM0MzsJaWYgKHVubGlrZWx5KG5vbG9jayAmYW1wOyZhbXA7IGttZW1sZWFrX21heV9uZWVkX2ZyZWUob2JqZWN0KSkpCiYjNDM7CQlkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2Mob2JqZWN0KTsKJiM0MzsJZWxzZQomIzQzOwkJX19mcmVlX2xhcmdlX2ttYWxsb2NfcGFnZShwYWdlLCBmcmVlX2ZsYWdzKTsKIH0KIAogLyoKQEAgLTY3MTgsNyAmIzQzOzY4MDEsNyBAQCB2b2lkIGt2ZnJlZV9yY3VfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKQogCQlpZiAoc2xhYikKIAkJCXNsYWJfZnJlZShzbGFiLSZndDtzbGFiX2NhY2hlLCBzbGFiLCBvYmosIF9SRVRfSVBfKTsKIAkJZWxzZQotCQkJZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iaik7CiYjNDM7CQkJZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iaiwgU0xBQl9GUkVFX0RFRkFVTFQpOwogCX0KIH0KIApAQCAtNjc0NCw3ICYjNDM7NjgyNyw3IEBAIHZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqb2JqZWN0KQogCXNsYWIgPSBwYWdlX3NsYWIocGFnZSk7CiAJaWYgKCFzbGFiKSB7CiAJCS8qIGttYWxsb2Nfbm9sb2NrKCkgZG9lc24mIzM5O3Qgc3VwcG9ydCBsYXJnZSBrbWFsbG9jICovCi0JCWZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCAodm9pZCAqKW9iamVjdCk7CiYjNDM7CQlmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgKHZvaWQgKilvYmplY3QsIFNMQUJfRlJFRV9ERUZBVUxUKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNjc1NSwxNSAmIzQzOzY4MzgsMTQgQEAgRVhQT1JUX1NZTUJPTChrZnJlZSk7CiAKIC8qCiAgKiBDYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgcmF3X3NwaW5sb2NrX3Qgb3IgZnJvbSBJUlEgYW5kIE5NSSwKLSAqIGJ1dCBPTkxZIGZvciBvYmplY3RzIGFsbG9jYXRlZCBieSBrbWFsbG9jX25vbG9jaygpLgotICogRGVidWcgY2hlY2tzIChsaWtlIGttZW1sZWFrIGFuZCBrZmVuY2UpIHdlcmUgc2tpcHBlZCBvbiBhbGxvY2F0aW9uLAotICogaGVuY2UKLSAqIG9iaiA9IGttYWxsb2MoKTsga2ZyZWVfbm9sb2NrKG9iaik7Ci0gKiB3aWxsIG1pc3Mga21lbWxlYWsva2ZlbmNlIGJvb2sga2VlcGluZyBhbmQgd2lsbCBjYXVzZSBmYWxzZSBwb3NpdGl2ZXMuCi0gKiBsYXJnZV9rbWFsbG9jIGlzIG5vdCBzdXBwb3J0ZWQgZWl0aGVyLgomIzQzOyAqIGJ1dCBtYXkgZGVmZXIgZnJlZWluZyB0byBpcnFfd29yaygpIGluIHNvbWUgY2FzZXMuCiYjNDM7ICoKJiM0MzsgKiBJbnRlbmRlZCBtYWlubHkgZm9yIG9iamVjdHMgYWxsb2NhdGVkIGZyb20ga21hbGxvY19ub2xvY2soKSwgYnV0IGNhbiBoYW5kbGUKJiM0MzsgKiBhbHNvIGttZW1fY2FjaGVfYWxsb2MoKSBhbmQga21hbGxvYygpIG9iamVjdHMsIGluY2x1ZGluZyBsYXJnZV9rbWFsbG9jLgogICovCiB2b2lkIGtmcmVlX25vbG9jayhjb25zdCB2b2lkICpvYmplY3QpCiB7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlOwogCXN0cnVjdCBzbGFiICpzbGFiOwogCXN0cnVjdCBrbWVtX2NhY2hlICpzOwogCXZvaWQgKnggPSAodm9pZCAqKW9iamVjdDsKQEAgLTY3NzEsOSAmIzQzOzY4NTMsMTAgQEAgdm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KQogCWlmICh1bmxpa2VseShaRVJPX09SX05VTExfUFRSKG9iamVjdCkpKQogCQlyZXR1cm47CiAKLQlzbGFiID0gdmlydF90b19zbGFiKG9iamVjdCk7CiYjNDM7CXBhZ2UgPSB2aXJ0X3RvX3BhZ2Uob2JqZWN0KTsKJiM0MzsJc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTsKIAlpZiAodW5saWtlbHkoIXNsYWIpKSB7Ci0JCVdBUk5fT05DRSgxLCAmIzM0O2xhcmdlX2ttYWxsb2MgaXMgbm90IHN1cHBvcnRlZCBieSBrZnJlZV9ub2xvY2soKSYjMzQ7KTsKJiM0MzsJCWZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCAodm9pZCAqKW9iamVjdCwgU0xBQl9GUkVFX05PTE9DSyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTY3OTEsNiAmIzQzOzY4NzQsMTIgQEAgdm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KQogCSAqIHNpbmNlIHRoZXkgdGFrZSBzcGlubG9ja3Mgb3Igbm90IHNhZmUgZnJvbSBhbnkgY29udGV4dC4KIAkgKi8KIAlrbXNhbl9zbGFiX2ZyZWUocywgeCk7CiYjNDM7CiYjNDM7CWlmIChpc19rZmVuY2VfYWRkcmVzcyh4KSkgewomIzQzOwkJZGVmZXJfZnJlZV9rZmVuY2UoeCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAkvKgogCSAqIElmIEtBU0FOIGZpbmRzIGEga2VybmVsIGJ1ZyBpdCB3aWxsIGRvIGthc2FuX3JlcG9ydF9pbnZhbGlkX2ZyZWUoKQogCSAqIHdoaWNoIHdpbGwgY2FsbCByYXdfc3Bpbl9sb2NrX2lycXNhdmUoKSB3aGljaCBpcyB0ZWNobmljYWxseQpAQCAtNjgwOSw5ICYjNDM7Njg5OCwyMyBAQCB2b2lkIGtmcmVlX25vbG9jayhjb25zdCB2b2lkICpvYmplY3QpCiAJICovCiAJa2FzYW5fc2xhYl9mcmVlKHMsIHgsIGZhbHNlLCBmYWxzZSwgLyogc2tpcCBxdWFyYW50aW5lICovdHJ1ZSk7CiAKJiM0MzsJLyoKJiM0MzsJICogd2l0aCBrZnJlZSgpIHRoZSBrbWVtbGVhayBoYW5kbGluZyBoYXBwZW5zIG11Y2ggc29vbmVyLCBidXQgZm9yCiYjNDM7CSAqIGRlZmVyaW5nIHdlIG5lZWQgdG8gd3JpdGUgbGxub2RlIHRvIHRoZSBvYmplY3QmIzM5O3MgZnJlZXBvaW50ZXIgc28KJiM0MzsJICogd2Ugc2hvdWxkIGhhdmUgaXQgaW4gdGhlIHN0YXRlIHdoZW4gaXQmIzM5O3Mgbm8gbG9uZ2VyIHRyZWF0ZWQgYXMKJiM0MzsJICogYWxsb2NhdGVkIGJ5IGthc2FuIGV0Yy4KJiM0MzsJICoKJiM0MzsJICogZGVmZXJfZnJlZSB3aWxsIGFsc28gcmVzZXQgdGhlIHBvaW50ZXIgdGFnLCBidXQgaXQmIzM5O3Mgb2sgdG8gZG8gYQomIzQzOwkgKiBkZWZlcnJlZCBrbWVtbGVha19mcmVlKCkgdXNpbmcgdGhlIHVudGFnZ2VkIHBvaW50ZXIsIGJlY2F1c2UKJiM0MzsJICogX19sb29rdXBfb2JqZWN0KCkgcmVzZXRzIHRoZSB0YWcgYW55d2F5CiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkoa21lbWxlYWtfbWF5X25lZWRfZnJlZV9yZWN1cnNpdmUoeCwgcy0mZ3Q7ZmxhZ3MpKSkKJiM0MzsJCWdvdG8gZGVmZXI7CiYjNDM7CiAJaWYgKGxpa2VseShjYW5fZnJlZV90b19wY3Moc2xhYikpICZhbXA7JmFtcDsgbGlrZWx5KGZyZWVfdG9fcGNzKHMsIHgsIGZhbHNlKSkpCiAJCXJldHVybjsKIAomIzQzO2RlZmVyOgogCS8qCiAJICogX19zbGFiX2ZyZWUoKSBjYW4gbG9ja2xlc3NseSBjbXB4Y2hnMTYgaW50byBhIHNsYWIsIGJ1dCB0aGVuIGl0IG1pZ2h0CiAJICogbmVlZCB0byB0YWtlIHNwaW5fbG9jayBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgpAQCAtNzExNCw3ICYjNDM7NzIxNyw3IEBAIGludCBidWlsZF9kZXRhY2hlZF9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsCiAJaWYgKCFzKSB7CiAJCS8qIEhhbmRsZSBrYWxsb2MmIzM5O2VkIG9iamVjdHMgKi8KIAkJaWYgKCFzbGFiKSB7Ci0JCQlmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgb2JqZWN0KTsKJiM0MzsJCQlmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgb2JqZWN0LCBTTEFCX0ZSRUVfREVGQVVMVCk7CiAJCQlkZi0mZ3Q7c2xhYiA9IE5VTEw7CiAJCQlyZXR1cm4gc2l6ZTsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQxNwoJCQkJCQkJb3V0cHV0OiAyNDEKCQkJCQkJCXRob3VnaHRzOiAxMDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIFJpc2sgQXNzZXNzbWVudCBvZiBNZW1vcnkgRnJlZWluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4sIGFzIHdpdGggYW55IG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSwgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGNlbnRlcnMgYXJvdW5kIG1vZGlmeWluZyBga2ZyZWVfbm9sb2NrKClgIGFuZCBpdHMgcmVsYXRlZCBmdW5jdGlvbnMgdG8gaGFuZGxlIG9iamVjdCBmcmVlaW5nLCBlc3BlY2lhbGx5IHRob3NlIGFsbG9jYXRlZCBieSBga21hbGxvYygpYCBhbmQgYGttZW1fY2FjaGVfYWxsb2MoKWAsIGluY2x1ZGluZyBsYXJnZSBrbWFsbG9jcyBhbmQgS0ZFTkNFIG9iamVjdHMuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBkZWZlcnJhbCB0byBgaXJxX3dvcmtgIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMsIGxpa2UgaWYgYGttZW1sZWFrX21heV9uZWVkX2ZyZWUoKWAgaXMgdHJ1ZSwgaWYgaXQmIzM5O3MgYSBLRkVOQ0Ugb2JqZWN0LCBvciBhIGxhcmdlIGttYWxsb2Mgb2JqZWN0IHRyaWdnZXJpbmcga21lbWxlYWsgZnJlZWluZy4gSXQgYWxzbyBsb29rcyBsaWtlIGEgY2hhbmdlIHRvIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKClgIHRvIHVzZSBga2ZyZWVfbm9sb2NrKClgIGluc3RlYWQgb2YgYGtmcmVlX3JjdSgpYC4KCk15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEVzc2VudGlhbGx5LCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGxvY2tsZXNzIGZyZWVpbmcgKGBrZnJlZV9ub2xvY2tgKSwgYW5kIHRoZSBwYXRjaCB1dGlsaXplcyB0aGUgb2JqZWN0JiMzOTtzIG1lbW9yeSBmb3IgYW4gYGxsaXN0X25vZGVgIHRvIGhhbmRsZSB0aGUgZGVmZXJyZWQgZnJlZWluZy4gRm9yIGBkZWZlcl9mcmVlKClgLCBpdCB1c2VzIGBsbG5vZGUgPSBrYXNhbl9yZXNldF90YWcob2JqKSAmIzQzOyBzLSZndDtvZmZzZXQ7YCwgd2hpY2ggc2VlbXMgZmluZS4gVGhlIGBkZWZlcl9mcmVlX2tmZW5jZSgpYCB1c2VzIGBsbG5vZGUgPSBrZmVuY2Vfb2JqX3RvX2xsbm9kZShvYmopO2AgKHVzaW5nIGAmYW1wO21ldGEtJmd0O2xsbm9kZWApLCBhbHNvIHNlZW1zIGNvcnJlY3QsIGFzIHRoZSBLRkVOQ0UgbWV0YWRhdGEgaXMgY2xlYXJseSBkZWZpbmVkLiBCdXQgdGhlIGBkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2MoKWAgdXNlcyBgbGxub2RlID0ga2FzYW5fcmVzZXRfdGFnKG9iaik7YCwgd2hpY2ggaXMgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxhcmdlIGttYWxsb2Mgb2JqZWN0LgoKVGhlIGNvbmNlcm4gd2l0aCBgZGVmZXJfZnJlZV9sYXJnZV9rbWFsbG9jKClgIGlzIHRoYXQgYnkgb3ZlcndyaXRpbmcgdGhlIGZpcnN0IDggYnl0ZXMgb2YgdGhlIG9iamVjdCwgYW0gSSBpbmFkdmVydGVudGx5IGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhpcyBpcyBub3QgdGhlIGNhc2UgYmVjYXVzZSB0aGUgb2JqZWN0IGlzICpiZWluZyBmcmVlZCouIFRoZSBgbGxub2RlYCBpcyBwdXJlbHkgZm9yIGludGVybmFsIGxpbmtpbmcgd2l0aGluIHRoZSBTTFVCIGFsbG9jYXRvciYjMzk7cyBkZWZlcnJlZCBmcmVlIGxpc3QuIE9uY2UgdGhlIGBpcnFfd29ya2AgcnVucywgdGhlIG9iamVjdCBpcyByZW1vdmVkIGZyb20gdGhlIGxpc3QgYW5kIGFjdHVhbGx5IGZyZWVkLiBUaHVzLCBhbnkgY29udGVudCBpbiB0aGUgb2JqZWN0IGlzIGlycmVsZXZhbnQgYXQgdGhpcyBwb2ludCBhbmQgdGhlcmUgc2hvdWxkIGJlIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC4KClRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIG1vZGlmaWNhdGlvbnMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucywgYW5kIG5vIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhpcyBpcyBhbGwgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBmcmVlaW5nIHBhdGhzLiBDb25zZXF1ZW50bHksIHRoZSBsaWtlbHkgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIFRoZXNlIGFyZSAqcHJlY2lzZWx5KiB0aGUga2luZHMgb2YgaXNzdWVzIEtBU0FOIGFuZCBzdGFuZGFyZCBTTFVCIGRlYnVnZ2luZyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoYXQgYGRlZmVyX2ZyZWVfbGFyZ2Vfa21hbGxvYygpYCBjb2RlIGJsb2NrOgpgYGBjCnN0YXRpYyB2b2lkIGRlZmVyX2ZyZWVfbGFyZ2Vfa21hbGxvYyh2b2lkICpvYmopCnsKCXN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3OwoJc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTsKCgkvKgoJICogd2UgY2FuIHNpbXBseSB1c2UgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxhcmdlIGttYWxsb2Mgb2JqZWN0CgkgKiBmb3IgdGhlIGxsbm9kZSwgYXMgdGhlcmUmIzM5O3Mgbm8gY3RvciBvciBUWVBFU0FGRV9CWV9SQ1UKCSAqLwoJbGxub2RlID0ga2FzYW5fcmVzZXRfdGFnKG9iaik7CgoJZ3VhcmQocHJlZW1wdCkoKTsKCglkcHcgPSB0aGlzX2NwdV9wdHIoJmFtcDtkZWZlcnJlZF9wZXJjcHVfd29yayk7CglpZiAobGxpc3RfYWRkKGxsbm9kZSwgJmFtcDtkcHctJmd0O29iamVjdHNfbGFyZ2Vfa21hbGxvYykpCgkJaXJxX3dvcmtfcXVldWUoJmFtcDtkcHctJmd0O3dvcmspOwp9CmBgYApZZWFoLCBleGFjdGx5IGFzIEkgZXhwZWN0ZWQuIEl0IG92ZXJ3cml0ZXMgdGhlIGZpcnN0IDggYnl0ZXMgb2YgdGhlIG9iamVjdCB0byBiZSBmcmVlZC4gU2luY2UgdGhlIG9iamVjdCBpcyBhbHJlYWR5IHNjaGVkdWxlZCB0byBiZSBmcmVlZCwgaXQgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBieSB1c2VyIHNwYWNlIGFueSBsb25nZXIuIElmIGl0ICppcyogYWNjZXNzZWQsIHRoYXQmIzM5O3MgYSB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggS0FTQU4gKndpbGwqIGNhdGNoLgoKTm93LCBsZXQmIzM5O3MgYnJpZWZseSBsb29rIGF0IHRoZSBjaGFuZ2UgaW4gYHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKWA6CmBgYGMKLQlrZnJlZV9yY3UoKHVuaW9uIGNwdW1hc2tfcmN1aGVhZCAqKWFjLnVzZXJfbWFzaywgcmN1KTsKJiM0MzsJa2ZyZWVfbm9sb2NrKGFjLnVzZXJfbWFzayk7CmBgYApJdCYjMzk7cyBqdXN0IHJlcGxhY2luZyBga2ZyZWVfcmN1YCB3aXRoIGBrZnJlZV9ub2xvY2tgLiBUaGUgYGFjLnVzZXJfbWFza2Agd2FzIGFsbG9jYXRlZCB3aXRoIGBhbGxvY191c2VyX2NwdXNfcHRyYC4KYGBgYwogc3RhdGljIGlubGluZSBjcHVtYXNrX3QgKmFsbG9jX3VzZXJfY3B1c19wdHIoaW50IG5vZGUpCiB7Ci0JLyoKLQkgKiBTZWUgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpIGFib3ZlIGZvciB0aGUgcmN1X2hlYWQgdXNhZ2UuCi0JICovCi0JaW50IHNpemUgPSBtYXhfdChpbnQsIGNwdW1hc2tfc2l6ZQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBmcmVlaW5nIHBhdGhzLCBzcGVjaWZpY2FsbHkgZXh0ZW5kaW5nIGBrZnJlZV9ub2xvY2soKWAgdG8gaGFuZGxlIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgIGFuZCBga21lbV9jYWNoZV9hbGxvYygpYCwgaW5jbHVkaW5nIGxhcmdlIGttYWxsb2NzIGFuZCBLRkVOQ0Ugb2JqZWN0cy4gSXQgZGVmZXJzIGZyZWVpbmcgdG8gYW4gYGlycV93b3JrYCB1c2luZyBhIGxvY2tsZXNzIGxpc3QgKGBsbGlzdGApIHdoZW4gbmVjZXNzYXJ5LiBUaGUgY2hhbmdlcyBpbnZvbHZlIG92ZXJ3cml0aW5nIHBhcnRzIG9mIHRoZSBmcmVlZCBvYmplY3RzIChsaWtlIHRoZSBmcmVlcG9pbnRlciBvciB0aGUgZmlyc3Qgd29yZCBvZiBhIGxhcmdlIGttYWxsb2Mgb2JqZWN0KSB0byBzdG9yZSB0aGUgYGxsaXN0X25vZGVgLiBTaW5jZSB0aGVzZSBvYmplY3RzIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBmcmVlZCwgYW55IGFjY2VzcyB0byB0aGVtIHdvdWxkIGNvbnN0aXR1dGUgYSB1c2UtYWZ0ZXItZnJlZSBidWcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYyBvZiBhY3RpdmUgb2JqZWN0cy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24pIHdpbGwgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBTTFVCIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgZXhwb3NlZCBoZXJlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBmcmVlaW5nIHBhdGhzLCBzcGVjaWZpY2FsbHkgZXh0ZW5kaW5nIGBrZnJlZV9ub2xvY2soKWAgdG8gaGFuZGxlIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgIGFuZCBga21lbV9jYWNoZV9hbGxvYygpYCwgaW5jbHVkaW5nIGxhcmdlIGttYWxsb2NzIGFuZCBLRkVOQ0Ugb2JqZWN0cy4gSXQgZGVmZXJzIGZyZWVpbmcgdG8gYW4gYGlycV93b3JrYCB1c2luZyBhIGxvY2tsZXNzIGxpc3QgKGBsbGlzdGApIHdoZW4gbmVjZXNzYXJ5LiBUaGUgY2hhbmdlcyBpbnZvbHZlIG92ZXJ3cml0aW5nIHBhcnRzIG9mIHRoZSBmcmVlZCBvYmplY3RzIChsaWtlIHRoZSBmcmVlcG9pbnRlciBvciB0aGUgZmlyc3Qgd29yZCBvZiBhIGxhcmdlIGttYWxsb2Mgb2JqZWN0KSB0byBzdG9yZSB0aGUgYGxsaXN0X25vZGVgLiBTaW5jZSB0aGVzZSBvYmplY3RzIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBmcmVlZCwgYW55IGFjY2VzcyB0byB0aGVtIHdvdWxkIGNvbnN0aXR1dGUgYSB1c2UtYWZ0ZXItZnJlZSBidWcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYyBvZiBhY3RpdmUgb2JqZWN0cy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24pIHdpbGwgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBTTFVCIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgZXhwb3NlZCBoZXJlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTM6NDcuMjk0MzM2MDg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5ODg5Nzc3NjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX0tNRU1MRUFLXCIsXG4gICAgXCJLRkVOQ0VcIixcbiAgICBcIlBSRUVNUFRfUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrZnJlZV9ub2xvY2tcIixcbiAgICBcInNldF9jcHVzX2FsbG93ZWRfZm9yY2VcIixcbiAgICBcImttZW1sZWFrX21heV9uZWVkX2ZyZWVcIixcbiAgICBcImtmZW5jZV9vYmpfdG9fbGxub2RlXCIsXG4gICAgXCJrZmVuY2VfbGxub2RlX3RvX29ialwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGZyZWVpbmcgcGF0aHMsIHNwZWNpZmljYWxseSBleHRlbmRpbmcgYGtmcmVlX25vbG9jaygpYCB0byBoYW5kbGUgb2JqZWN0cyBhbGxvY2F0ZWQgYnkgYGttYWxsb2MoKWAgYW5kIGBrbWVtX2NhY2hlX2FsbG9jKClgLCBpbmNsdWRpbmcgbGFyZ2Uga21hbGxvY3MgYW5kIEtGRU5DRSBvYmplY3RzLiBJdCBkZWZlcnMgZnJlZWluZyB0byBhbiBgaXJxX3dvcmtgIHVzaW5nIGEgbG9ja2xlc3MgbGlzdCAoYGxsaXN0YCkgd2hlbiBuZWNlc3NhcnkuIFRoZSBjaGFuZ2VzIGludm9sdmUgb3ZlcndyaXRpbmcgcGFydHMgb2YgdGhlIGZyZWVkIG9iamVjdHMgKGxpa2UgdGhlIGZyZWVwb2ludGVyIG9yIHRoZSBmaXJzdCB3b3JkIG9mIGEgbGFyZ2Uga21hbGxvYyBvYmplY3QpIHRvIHN0b3JlIHRoZSBgbGxpc3Rfbm9kZWAuIFNpbmNlIHRoZXNlIG9iamVjdHMgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGZyZWVkLCBhbnkgYWNjZXNzIHRvIHRoZW0gd291bGQgY29uc3RpdHV0ZSBhIHVzZS1hZnRlci1mcmVlIGJ1Zy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljIG9mIGFjdGl2ZSBvYmplY3RzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBtZW1vcnkgY29ycnVwdGlvbikgd2lsbCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIFNMVUIgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBleHBvc2VkIGhlcmUgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBrZnJlZV9ub2xvY2soKWAgaW4gYG1tL3NsdWIuY2AgdG8gc3VwcG9ydCBmcmVlaW5nIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgLCBga21lbV9jYWNoZV9hbGxvYygpYCwgYW5kIGxhcmdlIGttYWxsb2NzLCBhcyB3ZWxsIGFzIEtGRU5DRSBvYmplY3RzLiBJdCBkZWZlcnMgZnJlZWluZyB0byBhbiBgaXJxX3dvcmtgIGlmIG5lY2Vzc2FyeSAoZS5nLiwgZm9yIGttZW1sZWFrIG9yIEtGRU5DRSkuIEl0IGFsc28gbW9kaWZpZXMgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKWAgaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgIHRvIHVzZSBga2ZyZWVfbm9sb2NrKClgIGluc3RlYWQgb2YgYGtmcmVlX3JjdSgpYC4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxlciBjaGFuZ2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTM6NDcuMjk0MzQzODQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTU5NjE1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlNWI4NmJkYzU5ODRiNmIwYmEzMWRlMDc5NTAxZGU2YjIxNjE5ODc0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTY6NTM6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZmVuY2UuaCBiL2luY2x1ZGUvbGludXgva2ZlbmNlLmhcXG5pbmRleCBlNTgyMmY2ZTdmMjc5Li4wMDcyMWM4NTI1OGRjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgva2ZlbmNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2tmZW5jZS5oXFxuQEAgLTE4OCw2ICsxODgsOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayBib29sIGtmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdHJ1Y3QgbGxpc3Rfbm9kZSAqa2ZlbmNlX29ial90b19sbG5vZGUodm9pZCAqYWRkcik7XFxuK3ZvaWQgKmtmZW5jZV9sbG5vZGVfdG9fb2JqKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpO1xcbitcXG4gLyoqXFxuICAqIGtmZW5jZV9oYW5kbGVfcGFnZV9mYXVsdCgpIC0gcGVyZm9ybSBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciBLRkVOQ0UgcGFnZXNcXG4gICogQGFkZHI6IGZhdWx0aW5nIGFkZHJlc3NcXG5AQCAtMjM1LDYgKzIzOCw4IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGtmZW5jZV9rc2l6ZShjb25zdCB2b2lkICphZGRyKSB7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCAqa2ZlbmNlX29iamVjdF9zdGFydChjb25zdCB2b2lkICphZGRyKSB7IHJldHVybiBOVUxMOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpIHsgfVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGtmZW5jZV9mcmVlKHZvaWQgKmFkZHIpIHsgcmV0dXJuIGZhbHNlOyB9XFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X25vZGUgKmtmZW5jZV9vYmpfdG9fbGxub2RlKHZvaWQgKmFkZHIpIHsgcmV0dXJuIE5VTEw7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkICprZmVuY2VfbGxub2RlX3RvX29iaihzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlKSB7IHJldHVybiBOVUxMOyB9XFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sga2ZlbmNlX2hhbmRsZV9wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBpc193cml0ZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21lbWxlYWsuaCBiL2luY2x1ZGUvbGludXgva21lbWxlYWsuaFxcbmluZGV4IGZiZDQyNGIyYWJiMTQuLjUyZjc1ZjEwYTljZTYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oXFxuQEAgLTIyLDYgKzIyLDcgQEAgZXh0ZXJuIHZvaWQga21lbWxlYWtfYWxsb2NfcGVyY3B1KGNvbnN0IHZvaWQgX19wZXJjcHUgKnB0ciwgc2l6ZV90IHNpemUsXFxuIGV4dGVybiB2b2lkIGttZW1sZWFrX3ZtYWxsb2MoY29uc3Qgc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgc2l6ZV90IHNpemUsXFxuIFxcdFxcdFxcdCAgICAgZ2ZwX3QgZ2ZwKSBfX3JlZjtcXG4gZXh0ZXJuIHZvaWQga21lbWxlYWtfZnJlZShjb25zdCB2b2lkICpwdHIpIF9fcmVmO1xcbitib29sIGttZW1sZWFrX21heV9uZWVkX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjtcXG4gZXh0ZXJuIHZvaWQga21lbWxlYWtfZnJlZV9wYXJ0KGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpIF9fcmVmO1xcbiBleHRlcm4gdm9pZCBrbWVtbGVha19mcmVlX3BlcmNwdShjb25zdCB2b2lkIF9fcGVyY3B1ICpwdHIpIF9fcmVmO1xcbiBleHRlcm4gdm9pZCBrbWVtbGVha191cGRhdGVfdHJhY2UoY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjtcXG5AQCAtNTAsNiArNTEsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKGNvbnN0IHZvaWQgKnB0ciwgc2xhYl9mbGFnc190IGZsYWdzKVxcbiBcXHRcXHRrbWVtbGVha19mcmVlKHB0cik7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncylcXG4re1xcbitcXHRpZiAoIShmbGFncyBcXHUwMDI2IFNMQUJfTk9MRUFLVFJBQ0UpKVxcbitcXHRcXHRyZXR1cm4ga21lbWxlYWtfbWF5X25lZWRfZnJlZShwdHIpO1xcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZXJhc2Uodm9pZCAqKnB0cilcXG4ge1xcbiBcXHQqcHRyID0gTlVMTDtcXG5AQCAtODYsNiArOTUsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2ZyZWVfcGFydChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplKVxcbiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXFxuIHtcXG4gfVxcbitzdGF0aWMgaW5saW5lIGJvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncylcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4gc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2ZyZWVfcGVyY3B1KGNvbnN0IHZvaWQgX19wZXJjcHUgKnB0cilcXG4ge1xcbiB9XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXFxuaW5kZXggOTYyMjY3MDdjMmY2MS4uZDI5MjllNGUyM2YxMyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jXFxuKysrIGIva2VybmVsL3NjaGVkL2NvcmUuY1xcbkBAIC0yODA3LDIwICsyODA3LDE1IEBAIHZvaWQgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpuZXdfbWFzXFxuIFxcdFxcdC51c2VyX21hc2sgPSBOVUxMLFxcbiBcXHRcXHQuZmxhZ3MgICAgID0gU0NBX1VTRVIsXFx0LyogY2xlYXIgdGhlIHVzZXIgcmVxdWVzdGVkIG1hc2sgKi9cXG4gXFx0fTtcXG4tXFx0dW5pb24gY3B1bWFza19yY3VoZWFkIHtcXG4tXFx0XFx0Y3B1bWFza190IGNwdW1hc2s7XFxuLVxcdFxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuLVxcdH07XFxuIFxcbiBcXHRzY29wZWRfZ3VhcmQgKF9fdGFza19ycV9sb2NrLCBwKVxcbiBcXHRcXHRkb19zZXRfY3B1c19hbGxvd2VkKHAsIFxcdTAwMjZhYyk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBCZWNhdXNlIHRoaXMgaXMgY2FsbGVkIHdpdGggcC1cXHUwMDNlcGlfbG9jayBoZWxkLCBpdCBpcyBub3QgcG9zc2libGVcXG4tXFx0ICogdG8gdXNlIGtmcmVlKCkgaGVyZSAod2hlbiBQUkVFTVBUX1JUPXkpLCB0aGVyZWZvcmUgcHVudCB0byB1c2luZ1xcbi1cXHQgKiBrZnJlZV9yY3UoKS5cXG4rXFx0ICogdG8gdXNlIGtmcmVlKCkgaGVyZSAod2hlbiBQUkVFTVBUX1JUPXkpLCB0aHVzIHVzZSBrZnJlZV9ub2xvY2soKVxcbiBcXHQgKi9cXG4tXFx0a2ZyZWVfcmN1KCh1bmlvbiBjcHVtYXNrX3JjdWhlYWQgKilhYy51c2VyX21hc2ssIHJjdSk7XFxuK1xcdGtmcmVlX25vbG9jayhhYy51c2VyX21hc2spO1xcbiB9XFxuIFxcbiBpbnQgZHVwX3VzZXJfY3B1c19wdHIoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvc2NoZWQuaCBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oXFxuaW5kZXggNTZhY2Y1MDJiYTI2MC4uNmE4ZDA1NzhlOTYzMyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvc2NoZWQvc2NoZWQuaFxcbisrKyBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oXFxuQEAgLTI4ODYsMTIgKzI4ODYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGFza19hbGxvd2VkX29uX2NwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjcHUpXFxuIFxcbiBzdGF0aWMgaW5saW5lIGNwdW1hc2tfdCAqYWxsb2NfdXNlcl9jcHVzX3B0cihpbnQgbm9kZSlcXG4ge1xcbi1cXHQvKlxcbi1cXHQgKiBTZWUgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpIGFib3ZlIGZvciB0aGUgcmN1X2hlYWQgdXNhZ2UuXFxuLVxcdCAqL1xcbi1cXHRpbnQgc2l6ZSA9IG1heF90KGludCwgY3B1bWFza19zaXplKCksIHNpemVvZihzdHJ1Y3QgcmN1X2hlYWQpKTtcXG4tXFxuLVxcdHJldHVybiBrbWFsbG9jX25vZGUoc2l6ZSwgR0ZQX0tFUk5FTCwgbm9kZSk7XFxuK1xcdHJldHVybiBrbWFsbG9jX25vZGUoY3B1bWFza19zaXplKCksIEdGUF9LRVJORUwsIG5vZGUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X3B1c2hfdGFzayhzdHJ1Y3QgcnEgKnJxKVxcbmRpZmYgLS1naXQgYS9tbS9rZmVuY2UvY29yZS5jIGIvbW0va2ZlbmNlL2NvcmUuY1xcbmluZGV4IDY1NzdiZDc2OTU0ZWIuLjQyNTE5ZDI0Njg3ZmYgMTAwNjQ0XFxuLS0tIGEvbW0va2ZlbmNlL2NvcmUuY1xcbisrKyBiL21tL2tmZW5jZS9jb3JlLmNcXG5AQCAtMTI3MSw2ICsxMjcxLDIwIEBAIHZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKVxcbit7XFxuK1xcdHN0cnVjdCBrZmVuY2VfbWV0YWRhdGEgKm1ldGEgPSBhZGRyX3RvX21ldGFkYXRhKCh1bnNpZ25lZCBsb25nKWFkZHIpO1xcbitcXG4rXFx0cmV0dXJuIFxcdTAwMjZtZXRhLVxcdTAwM2VsbG5vZGU7XFxuK31cXG4rXFxuK3ZvaWQgKmtmZW5jZV9sbG5vZGVfdG9fb2JqKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IGtmZW5jZV9tZXRhZGF0YSAqbWV0YSA9IGNvbnRhaW5lcl9vZihsbG5vZGUsIHN0cnVjdCBrZmVuY2VfbWV0YWRhdGEsIGxsbm9kZSk7XFxuK1xcbitcXHRyZXR1cm4gKHZvaWQgKiltZXRhLVxcdTAwM2VhZGRyO1xcbit9XFxuK1xcbiBib29sIGtmZW5jZV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiB7XFxuIFxcdGNvbnN0IGludCBwYWdlX2luZGV4ID0gKGFkZHIgLSAodW5zaWduZWQgbG9uZylfX2tmZW5jZV9wb29sKSAvIFBBR0VfU0laRTtcXG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZS5oIGIvbW0va2ZlbmNlL2tmZW5jZS5oXFxuaW5kZXggMWY2MThmOWIwZDEyZC4uMGZjYTFkYzJjNzk0MSAxMDA2NDRcXG4tLS0gYS9tbS9rZmVuY2Uva2ZlbmNlLmhcXG4rKysgYi9tbS9rZmVuY2Uva2ZlbmNlLmhcXG5AQCAtNTgsNyArNTgsMTAgQEAgc3RydWN0IGtmZW5jZV90cmFjayB7XFxuIC8qIEtGRU5DRSBtZXRhZGF0YSBwZXIgZ3VhcmRlZCBhbGxvY2F0aW9uLiAqL1xcbiBzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0IF9fZ3VhcmRlZF9ieShcXHUwMDI2a2ZlbmNlX2ZyZWVsaXN0X2xvY2spO1xcdC8qIEZyZWVsaXN0IG5vZGUuICovXFxuLVxcdHN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDtcXHQvKiBGb3IgZGVsYXllZCBmcmVlaW5nLiAqL1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDtcXHQvKiBGb3IgZGVsYXllZCBmcmVlaW5nLiAqL1xcbitcXHRcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBsbG5vZGU7XFx0LyogRm9yIGtmcmVlX25vbG9jaygpLiAqL1xcbitcXHR9O1xcbiBcXG4gXFx0LypcXG4gXFx0ICogTG9jayBwcm90ZWN0aW5nIGJlbG93IGRhdGE7IHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBvZiB0aGUgYmVsb3cgZGF0YSxcXG5kaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmNcXG5pbmRleCA3YzdiYTE3Y2U3YWYwLi5lMzU2MGNlODI2MzI2IDEwMDY0NFxcbi0tLSBhL21tL2ttZW1sZWFrLmNcXG4rKysgYi9tbS9rbWVtbGVhay5jXFxuQEAgLTExNjgsNiArMTE2OCw0OCBAQCB2b2lkIF9fcmVmIGttZW1sZWFrX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGttZW1sZWFrX2ZyZWUpO1xcbiBcXG4rLyoqXFxuKyAqIGttZW1sZWFrX21heV9uZWVkX2ZyZWUgLSBjaGVjayBpZiBvYmplY3QgaXMgcmVnaXN0ZXJlZFxcbisgKiBAcHRyOlxcdHBvaW50ZXIgdG8gYmVnaW5uaW5nIG9mIHRoZSBvYmplY3RcXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUga2VybmVsIGFsbG9jYXRvciB3aGVuIGFuIG9iamVjdCBzaG91bGQgYmVcXG4rICogZnJlZWQgYnV0IHRoZSBjYWxsZXIgY29udGV4dCBtaWdodCBiZSB1bnNhZmUgdG8gc3BpbiBvbiB0aGUgaW50ZXJuYWwgbG9ja3MuXFxuKyAqXFxuKyAqIEl0IHdpbGwgdGhlcmVmb3JlIG9ubHkgdXNlIHRyeWxvY2sgYW5kIHRodXMgbWlnaHQgcmV0dXJuIGEgZmFsc2UgcG9zaXRpdmVcXG4rICogaWYgdGhlIHRyeWxvY2sgZmFpbHMgYW5kIHRoZSBzdGF0dXMgY2Fubm90IGJlIGRldGVybWluZWQuXFxuKyAqXFxuKyAqIEZvciBvYmplY3RzIHRoYXQgKG1pZ2h0KSBuZWVkIGZyZWUsIHRoZSBhbGxvY2F0b3IgaGFzIHRvIGRlZmVyIHRoZSBhY3R1YWxcXG4rICogZnJlZWluZyB0byBhIHNhZmUgY29udGV4dC5cXG4rICpcXG4rICogVGhlIGFzc3VtcHRpb24gaXMgdGhhdCBtb3N0IG9iamVjdHMgZnJlZWQgZnJvbSB0aGUgdW5zYWZlIGNvbnRleHQgYXJlIGFsc29cXG4rICogYWxsb2NhdGVkIGluIHN1Y2ggY29udGV4dCBhbmQgdGh1cyBhcmUgbm90IHJlZ2lzdGVyZWQgaW4ga21lbWxlYWssIHNvIGl0J3NcXG4rICogdW5saWtlbHkgdGhlIGRlZmVyZWQgZnJlZWluZyB3aWxsIGJlIG5lY2Vzc2FyeSBqdXN0IGJlY2F1c2Uga21lbWxlYWsgaXNcXG4rICogZW5hYmxlZC5cXG4rICovXFxuK2Jvb2wgX19yZWYga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0c3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0O1xcbitcXG4rXFx0cHJfZGVidWcoXFxcIiVzKDB4JXB4KVxcXFxuXFxcIiwgX19mdW5jX18sIHB0cik7XFxuK1xcbitcXHRpZiAoIWttZW1sZWFrX2ZyZWVfZW5hYmxlZCB8fCAhcHRyIHx8IElTX0VSUihwdHIpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKiBPbiBVUCwgcmF3X3NwaW5fdHJ5bG9jaygpIGFsd2F5cyBzdWNjZWVkcyBldmVuIHdoZW4gaXQgaXMgbG9ja2VkICovXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfU01QKSBcXHUwMDI2XFx1MDAyNiBpbl9ubWkoKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRpZiAoIXJhd19zcGluX3RyeWxvY2tfaXJxc2F2ZShcXHUwMDI2a21lbWxlYWtfbG9jaywgZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdG9iamVjdCA9IF9fbG9va3VwX29iamVjdCgodW5zaWduZWQgbG9uZylwdHIsIDAsIDApO1xcbitcXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmttZW1sZWFrX2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdHJldHVybiAhIW9iamVjdDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGttZW1sZWFrX2ZyZWVfcGFydCAtIHBhcnRpYWxseSB1bnJlZ2lzdGVyIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIG9iamVjdFxcbiAgKiBAcHRyOlxcdHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvciBpbnNpZGUgdGhlIG9iamVjdC4gVGhpcyBhbHNvXFxuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xcbmluZGV4IGI5YWViMDJhODgwZjEuLjNiZTk4ZmFhOWYwZGUgMTAwNjQ0XFxuLS0tIGEvbW0vc2x1Yi5jXFxuKysrIGIvbW0vc2x1Yi5jXFxuQEAgLTQwNTAsNiArNDA1MCw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX2FsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4gXFxuIHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayB7XFxuIFxcdHN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHM7XFxuK1xcdHN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHNfa2ZlbmNlO1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzX2xhcmdlX2ttYWxsb2M7XFxuIFxcdHN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHNfYnlfcmN1O1xcbiBcXHRzdHJ1Y3QgbGxpc3RfaGVhZCByY3Vfc2hlYXZlcztcXG4gXFx0c3RydWN0IGlycV93b3JrIHdvcms7XFxuQEAgLTQwNTksNiArNDA2MSw4IEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yayk7XFxuIFxcbiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrLCBkZWZlcnJlZF9wZXJjcHVfd29yaykgPSB7XFxuIFxcdC5vYmplY3RzID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHMpLFxcbitcXHQub2JqZWN0c19rZmVuY2UgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0c19rZmVuY2UpLFxcbitcXHQub2JqZWN0c19sYXJnZV9rbWFsbG9jID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHNfbGFyZ2Vfa21hbGxvYyksXFxuIFxcdC5vYmplY3RzX2J5X3JjdSA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzX2J5X3JjdSksXFxuIFxcdC5yY3Vfc2hlYXZlcyA9IExMSVNUX0hFQURfSU5JVChyY3Vfc2hlYXZlcyksXFxuIFxcdC53b3JrID0gSVJRX1dPUktfSU5JVChkZWZlcnJlZF9wZXJjcHVfd29ya19mbiksXFxuQEAgLTYzNjMsNiArNjM2NywyMSBAQCBzdGF0aWMgdm9pZCBmcmVlX3RvX3Bjc19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkXFxuK19fZnJlZV9sYXJnZV9rbWFsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBvcmRlciA9IGNvbXBvdW5kX29yZGVyKHBhZ2UpO1xcbitcXG4rXFx0bW9kX2xydXZlY19wYWdlX3N0YXRlKHBhZ2UsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CLFxcbitcXHRcXHRcXHQgICAgICAtKFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcikpO1xcbitcXHRfX0NsZWFyUGFnZUxhcmdlS21hbGxvYyhwYWdlKTtcXG4rXFxuK1xcdGlmIChmcmVlX2ZsYWdzIFxcdTAwMjYgU0xBQl9GUkVFX05PTE9DSylcXG4rXFx0XFx0ZnJlZV9mcm96ZW5fcGFnZXNfbm9sb2NrKHBhZ2UsIG9yZGVyKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRmcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlcik7XFxuK31cXG4rXFxuIC8qXFxuICAqIEluIFBSRUVNUFRfUlQgaXJxX3dvcmsgcnVucyBpbiBwZXItY3B1IGt0aHJlYWQsIHNvIGl0J3Mgc2FmZVxcbiAgKiB0byB0YWtlIHNsZWVwaW5nIHNwaW5fbG9ja3MgZnJvbSBfX3NsYWJfZnJlZSgpLlxcbkBAIC02MzcxLDE2ICs2MzkwLDEyIEBAIHN0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcXG4gc3RhdGljIHZvaWQgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3O1xcbi1cXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqb2JqcywgKm9ianNfYnlfcmN1LCAqcmN1X3NoZWF2ZXM7XFxuIFxcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsICpwb3MsICp0O1xcbiBcXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsICpuZXh0O1xcbiBcXG4gXFx0ZHB3ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yaywgd29yayk7XFxuLVxcdHJjdV9zaGVhdmVzID0gXFx1MDAyNmRwdy1cXHUwMDNlcmN1X3NoZWF2ZXM7XFxuLVxcdG9ianMgPSBcXHUwMDI2ZHB3LVxcdTAwM2VvYmplY3RzO1xcbi1cXHRvYmpzX2J5X3JjdSA9IFxcdTAwMjZkcHctXFx1MDAzZW9iamVjdHNfYnlfcmN1O1xcbiBcXG4tXFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChvYmpzKTtcXG4rXFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2ZHB3LVxcdTAwM2VvYmplY3RzKTtcXG4gXFx0bGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHQsIGxsbm9kZSkge1xcbiBcXHRcXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcXG4gXFx0XFx0c3RydWN0IHNsYWIgKnNsYWI7XFxuQEAgLTYzOTIsNiArNjQwNyw4IEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcXG4gXFx0XFx0LyogUG9pbnQgJ3gnIGJhY2sgdG8gdGhlIGJlZ2lubmluZyBvZiBhbGxvY2F0ZWQgb2JqZWN0ICovXFxuIFxcdFxcdHggLT0gcy1cXHUwMDNlb2Zmc2V0O1xcbiBcXG4rXFx0XFx0a21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoeCwgcy1cXHUwMDNlZmxhZ3MpO1xcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogV2UgdXNlZCBmcmVlcG9pbnRlciBpbiAneCcgdG8gbGluayAneCcgaW50byBkZi1cXHUwMDNlb2JqZWN0cy5cXG4gXFx0XFx0ICogQ2xlYXIgaXQgdG8gTlVMTCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZSBkZXRlY3Rpb25cXG5AQCAtNjQwMyw3ICs2NDIwLDMwIEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcXG4gXFx0XFx0c3RhdChzLCBGUkVFX1NMT1dQQVRIKTtcXG4gXFx0fVxcbiBcXG4tXFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChvYmpzX2J5X3JjdSk7XFxuK1xcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNmRwdy1cXHUwMDNlb2JqZWN0c19rZmVuY2UpO1xcbitcXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XFxuK1xcdFxcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xcbitcXHRcXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcXG4rXFx0XFx0dm9pZCAqb2JqID0ga2ZlbmNlX2xsbm9kZV90b19vYmoocG9zKTtcXG4rXFxuK1xcdFxcdHNsYWIgPSB2aXJ0X3RvX3NsYWIob2JqKTtcXG4rXFx0XFx0cyA9IHNsYWItXFx1MDAzZXNsYWJfY2FjaGU7XFxuK1xcbitcXHRcXHRrbWVtbGVha19mcmVlX3JlY3Vyc2l2ZShvYmosIHMtXFx1MDAzZWZsYWdzKTtcXG4rXFxuK1xcdFxcdF9fa2ZlbmNlX2ZyZWUob2JqKTtcXG4rXFx0fVxcbitcXG4rXFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2ZHB3LVxcdTAwM2VvYmplY3RzX2xhcmdlX2ttYWxsb2MpO1xcbitcXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XFxuK1xcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKHBvcyk7XFxuK1xcbitcXHRcXHRrbWVtbGVha19mcmVlKHBvcyk7XFxuK1xcbitcXHRcXHRfX2ZyZWVfbGFyZ2Vfa21hbGxvY19wYWdlKHBhZ2UsIFNMQUJfRlJFRV9ERUZBVUxUKTtcXG4rXFx0fVxcbitcXG4rXFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2ZHB3LVxcdTAwM2VvYmplY3RzX2J5X3JjdSk7XFxuIFxcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHtcXG4gXFx0XFx0dm9pZCAqaGVhZCA9IHBvcztcXG4gXFx0XFx0dm9pZCAqb2JqcCA9IGt2bWFsbG9jX29ial9zdGFydF9hZGRyKGhlYWQpO1xcbkBAIC02NDExLDIxICs2NDUxLDYwIEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcXG4gXFx0XFx0a3ZmcmVlX2NhbGxfcmN1KGhlYWQsIG9ianApO1xcbiBcXHR9XFxuIFxcbi1cXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKHJjdV9zaGVhdmVzKTtcXG4rXFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2ZHB3LVxcdTAwM2VyY3Vfc2hlYXZlcyk7XFxuIFxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2hlYWYsIG5leHQsIGxsbm9kZSwgbGxub2RlKVxcbiBcXHRcXHRjYWxsX3JjdShcXHUwMDI2c2hlYWYtXFx1MDAzZXJjdV9oZWFkLCByY3VfZnJlZV9zaGVhZik7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGRlZmVyX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKmhlYWQpXFxuK3N0YXRpYyB2b2lkIGRlZmVyX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcXG4ge1xcbiBcXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFBsYWNlIHRoZSBsbGlzdCBub2RlIHdoZXJlIHRoZSBmcmVlcG9pbnRlciB3b3VsZCBiZSBpZiB3ZSBmcmVlZCB0aGVcXG4rXFx0ICogb2JqZWN0IGltbWVkaWF0ZWx5LiBUaGF0IG1lYW5zIHdlIGNhbiB3cml0ZSB0aGVyZSBzYWZlbHksIG9ubHkgbmVlZFxcbitcXHQgKiB0byByZW1vdmUga2FzYW4gdGFnIGZpcnN0LlxcbitcXHQgKi9cXG4rXFx0bGxub2RlID0ga2FzYW5fcmVzZXRfdGFnKG9iaikgKyBzLVxcdTAwM2VvZmZzZXQ7XFxuIFxcbiBcXHRndWFyZChwcmVlbXB0KSgpO1xcbiBcXG4tXFx0aGVhZCA9IGthc2FuX3Jlc2V0X3RhZyhoZWFkKTtcXG4rXFx0ZHB3ID0gdGhpc19jcHVfcHRyKFxcdTAwMjZkZWZlcnJlZF9wZXJjcHVfd29yayk7XFxuK1xcdGlmIChsbGlzdF9hZGQobGxub2RlLCBcXHUwMDI2ZHB3LVxcdTAwM2VvYmplY3RzKSlcXG4rXFx0XFx0aXJxX3dvcmtfcXVldWUoXFx1MDAyNmRwdy1cXHUwMDNld29yayk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRlZmVyX2ZyZWVfa2ZlbmNlKHZvaWQgKm9iailcXG4re1xcbitcXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcXG4rXFxuK1xcdC8qIGthc2FuX3Jlc2V0X3RhZygpIGlzIG5vdCBuZWNlc3NhcnksIGtmZW5jZSBvYmplY3RzIGFyZSBub3QgdGFnZ2VkICovXFxuK1xcdGxsbm9kZSA9IGtmZW5jZV9vYmpfdG9fbGxub2RlKG9iaik7XFxuK1xcbitcXHRndWFyZChwcmVlbXB0KSgpO1xcbitcXG4rXFx0ZHB3ID0gdGhpc19jcHVfcHRyKFxcdTAwMjZkZWZlcnJlZF9wZXJjcHVfd29yayk7XFxuK1xcdGlmIChsbGlzdF9hZGQobGxub2RlLCBcXHUwMDI2ZHB3LVxcdTAwM2VvYmplY3RzX2tmZW5jZSkpXFxuK1xcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZkcHctXFx1MDAzZXdvcmspO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2Modm9pZCAqb2JqKVxcbit7XFxuK1xcdHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3O1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogd2UgY2FuIHNpbXBseSB1c2UgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxhcmdlIGttYWxsb2Mgb2JqZWN0XFxuK1xcdCAqIGZvciB0aGUgbGxub2RlLCBhcyB0aGVyZSdzIG5vIGN0b3Igb3IgVFlQRVNBRkVfQllfUkNVXFxuK1xcdCAqL1xcbitcXHRsbG5vZGUgPSBrYXNhbl9yZXNldF90YWcob2JqKTtcXG4rXFxuK1xcdGd1YXJkKHByZWVtcHQpKCk7XFxuIFxcbiBcXHRkcHcgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNmRlZmVycmVkX3BlcmNwdV93b3JrKTtcXG4tXFx0aWYgKGxsaXN0X2FkZChoZWFkICsgcy1cXHUwMDNlb2Zmc2V0LCBcXHUwMDI2ZHB3LVxcdTAwM2VvYmplY3RzKSlcXG4rXFx0aWYgKGxsaXN0X2FkZChsbG5vZGUsIFxcdTAwMjZkcHctXFx1MDAzZW9iamVjdHNfbGFyZ2Vfa21hbGxvYykpXFxuIFxcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZkcHctXFx1MDAzZXdvcmspO1xcbiB9XFxuIFxcbkBAIC02Njc3LDkgKzY3NTYsMTEgQEAgc2l6ZV90IGtzaXplKGNvbnN0IHZvaWQgKm9ianApXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChrc2l6ZSk7XFxuIFxcbi1zdGF0aWMgdm9pZCBmcmVlX2xhcmdlX2ttYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKm9iamVjdClcXG4rc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QsXFxuK1xcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihwYWdlKTtcXG4rXFx0Ym9vbCBub2xvY2sgPSBmcmVlX2ZsYWdzIFxcdTAwMjYgU0xBQl9GUkVFX05PTE9DSztcXG4gXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoIVBhZ2VMYXJnZUttYWxsb2MocGFnZSkpKSB7XFxuIFxcdFxcdGR1bXBfcGFnZShwYWdlLCBcXFwiTm90IGEga21hbGxvYyBhbGxvY2F0aW9uXFxcIik7XFxuQEAgLTY2ODksMTQgKzY3NzAsMTYgQEAgc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpXFxuIFxcdGlmIChXQVJOX09OX09OQ0Uob3JkZXIgPT0gMCkpXFxuIFxcdFxcdHByX3dhcm5fb25jZShcXFwib2JqZWN0IHBvaW50ZXI6IDB4JXBcXFxcblxcXCIsIG9iamVjdCk7XFxuIFxcbi1cXHRrbWVtbGVha19mcmVlKG9iamVjdCk7XFxuK1xcdGlmICghbm9sb2NrKVxcbitcXHRcXHRrbWVtbGVha19mcmVlKG9iamVjdCk7XFxuK1xcbiBcXHRrYXNhbl9rZnJlZV9sYXJnZShvYmplY3QpO1xcbiBcXHRrbXNhbl9rZnJlZV9sYXJnZShvYmplY3QpO1xcbiBcXG4tXFx0bW9kX2xydXZlY19wYWdlX3N0YXRlKHBhZ2UsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CLFxcbi1cXHRcXHRcXHQgICAgICAtKFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcikpO1xcbi1cXHRfX0NsZWFyUGFnZUxhcmdlS21hbGxvYyhwYWdlKTtcXG4tXFx0ZnJlZV9mcm96ZW5fcGFnZXMocGFnZSwgb3JkZXIpO1xcbitcXHRpZiAodW5saWtlbHkobm9sb2NrIFxcdTAwMjZcXHUwMDI2IGttZW1sZWFrX21heV9uZWVkX2ZyZWUob2JqZWN0KSkpXFxuK1xcdFxcdGRlZmVyX2ZyZWVfbGFyZ2Vfa21hbGxvYyhvYmplY3QpO1xcbitcXHRlbHNlXFxuK1xcdFxcdF9fZnJlZV9sYXJnZV9rbWFsbG9jX3BhZ2UocGFnZSwgZnJlZV9mbGFncyk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTY3MTgsNyArNjgwMSw3IEBAIHZvaWQga3ZmcmVlX3JjdV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuIFxcdFxcdGlmIChzbGFiKVxcbiBcXHRcXHRcXHRzbGFiX2ZyZWUoc2xhYi1cXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgb2JqLCBfUkVUX0lQXyk7XFxuIFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iaik7XFxuK1xcdFxcdFxcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmosIFNMQUJfRlJFRV9ERUZBVUxUKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC02NzQ0LDcgKzY4MjcsNyBAQCB2b2lkIGtmcmVlKGNvbnN0IHZvaWQgKm9iamVjdClcXG4gXFx0c2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcXG4gXFx0aWYgKCFzbGFiKSB7XFxuIFxcdFxcdC8qIGttYWxsb2Nfbm9sb2NrKCkgZG9lc24ndCBzdXBwb3J0IGxhcmdlIGttYWxsb2MgKi9cXG4tXFx0XFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsICh2b2lkICopb2JqZWN0KTtcXG4rXFx0XFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsICh2b2lkICopb2JqZWN0LCBTTEFCX0ZSRUVfREVGQVVMVCk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG5AQCAtNjc1NSwxNSArNjgzOCwxNCBAQCBFWFBPUlRfU1lNQk9MKGtmcmVlKTtcXG4gXFxuIC8qXFxuICAqIENhbiBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyByYXdfc3BpbmxvY2tfdCBvciBmcm9tIElSUSBhbmQgTk1JLFxcbi0gKiBidXQgT05MWSBmb3Igb2JqZWN0cyBhbGxvY2F0ZWQgYnkga21hbGxvY19ub2xvY2soKS5cXG4tICogRGVidWcgY2hlY2tzIChsaWtlIGttZW1sZWFrIGFuZCBrZmVuY2UpIHdlcmUgc2tpcHBlZCBvbiBhbGxvY2F0aW9uLFxcbi0gKiBoZW5jZVxcbi0gKiBvYmogPSBrbWFsbG9jKCk7IGtmcmVlX25vbG9jayhvYmopO1xcbi0gKiB3aWxsIG1pc3Mga21lbWxlYWsva2ZlbmNlIGJvb2sga2VlcGluZyBhbmQgd2lsbCBjYXVzZSBmYWxzZSBwb3NpdGl2ZXMuXFxuLSAqIGxhcmdlX2ttYWxsb2MgaXMgbm90IHN1cHBvcnRlZCBlaXRoZXIuXFxuKyAqIGJ1dCBtYXkgZGVmZXIgZnJlZWluZyB0byBpcnFfd29yaygpIGluIHNvbWUgY2FzZXMuXFxuKyAqXFxuKyAqIEludGVuZGVkIG1haW5seSBmb3Igb2JqZWN0cyBhbGxvY2F0ZWQgZnJvbSBrbWFsbG9jX25vbG9jaygpLCBidXQgY2FuIGhhbmRsZVxcbisgKiBhbHNvIGttZW1fY2FjaGVfYWxsb2MoKSBhbmQga21hbGxvYygpIG9iamVjdHMsIGluY2x1ZGluZyBsYXJnZV9rbWFsbG9jLlxcbiAgKi9cXG4gdm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxcbiB7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcXG4gXFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XFxuIFxcdHZvaWQgKnggPSAodm9pZCAqKW9iamVjdDtcXG5AQCAtNjc3MSw5ICs2ODUzLDEwIEBAIHZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcXG4gXFx0aWYgKHVubGlrZWx5KFpFUk9fT1JfTlVMTF9QVFIob2JqZWN0KSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHNsYWIgPSB2aXJ0X3RvX3NsYWIob2JqZWN0KTtcXG4rXFx0cGFnZSA9IHZpcnRfdG9fcGFnZShvYmplY3QpO1xcbitcXHRzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xcbiBcXHRpZiAodW5saWtlbHkoIXNsYWIpKSB7XFxuLVxcdFxcdFdBUk5fT05DRSgxLCBcXFwibGFyZ2Vfa21hbGxvYyBpcyBub3Qgc3VwcG9ydGVkIGJ5IGtmcmVlX25vbG9jaygpXFxcIik7XFxuK1xcdFxcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCAodm9pZCAqKW9iamVjdCwgU0xBQl9GUkVFX05PTE9DSyk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG5AQCAtNjc5MSw2ICs2ODc0LDEyIEBAIHZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcXG4gXFx0ICogc2luY2UgdGhleSB0YWtlIHNwaW5sb2NrcyBvciBub3Qgc2FmZSBmcm9tIGFueSBjb250ZXh0LlxcbiBcXHQgKi9cXG4gXFx0a21zYW5fc2xhYl9mcmVlKHMsIHgpO1xcbitcXG4rXFx0aWYgKGlzX2tmZW5jZV9hZGRyZXNzKHgpKSB7XFxuK1xcdFxcdGRlZmVyX2ZyZWVfa2ZlbmNlKHgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuIFxcdCAqIElmIEtBU0FOIGZpbmRzIGEga2VybmVsIGJ1ZyBpdCB3aWxsIGRvIGthc2FuX3JlcG9ydF9pbnZhbGlkX2ZyZWUoKVxcbiBcXHQgKiB3aGljaCB3aWxsIGNhbGwgcmF3X3NwaW5fbG9ja19pcnFzYXZlKCkgd2hpY2ggaXMgdGVjaG5pY2FsbHlcXG5AQCAtNjgwOSw5ICs2ODk4LDIzIEBAIHZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcXG4gXFx0ICovXFxuIFxcdGthc2FuX3NsYWJfZnJlZShzLCB4LCBmYWxzZSwgZmFsc2UsIC8qIHNraXAgcXVhcmFudGluZSAqL3RydWUpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogd2l0aCBrZnJlZSgpIHRoZSBrbWVtbGVhayBoYW5kbGluZyBoYXBwZW5zIG11Y2ggc29vbmVyLCBidXQgZm9yXFxuK1xcdCAqIGRlZmVyaW5nIHdlIG5lZWQgdG8gd3JpdGUgbGxub2RlIHRvIHRoZSBvYmplY3QncyBmcmVlcG9pbnRlciBzb1xcbitcXHQgKiB3ZSBzaG91bGQgaGF2ZSBpdCBpbiB0aGUgc3RhdGUgd2hlbiBpdCdzIG5vIGxvbmdlciB0cmVhdGVkIGFzXFxuK1xcdCAqIGFsbG9jYXRlZCBieSBrYXNhbiBldGMuXFxuK1xcdCAqXFxuK1xcdCAqIGRlZmVyX2ZyZWUgd2lsbCBhbHNvIHJlc2V0IHRoZSBwb2ludGVyIHRhZywgYnV0IGl0J3Mgb2sgdG8gZG8gYVxcbitcXHQgKiBkZWZlcnJlZCBrbWVtbGVha19mcmVlKCkgdXNpbmcgdGhlIHVudGFnZ2VkIHBvaW50ZXIsIGJlY2F1c2VcXG4rXFx0ICogX19sb29rdXBfb2JqZWN0KCkgcmVzZXRzIHRoZSB0YWcgYW55d2F5XFxuK1xcdCAqL1xcbitcXHRpZiAodW5saWtlbHkoa21lbWxlYWtfbWF5X25lZWRfZnJlZV9yZWN1cnNpdmUoeCwgcy1cXHUwMDNlZmxhZ3MpKSlcXG4rXFx0XFx0Z290byBkZWZlcjtcXG4rXFxuIFxcdGlmIChsaWtlbHkoY2FuX2ZyZWVfdG9fcGNzKHNsYWIpKSBcXHUwMDI2XFx1MDAyNiBsaWtlbHkoZnJlZV90b19wY3MocywgeCwgZmFsc2UpKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rZGVmZXI6XFxuIFxcdC8qXFxuIFxcdCAqIF9fc2xhYl9mcmVlKCkgY2FuIGxvY2tsZXNzbHkgY21weGNoZzE2IGludG8gYSBzbGFiLCBidXQgdGhlbiBpdCBtaWdodFxcbiBcXHQgKiBuZWVkIHRvIHRha2Ugc3Bpbl9sb2NrIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXFxuQEAgLTcxMTQsNyArNzIxNyw3IEBAIGludCBidWlsZF9kZXRhY2hlZF9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsXFxuIFxcdGlmICghcykge1xcbiBcXHRcXHQvKiBIYW5kbGUga2FsbG9jJ2VkIG9iamVjdHMgKi9cXG4gXFx0XFx0aWYgKCFzbGFiKSB7XFxuLVxcdFxcdFxcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmplY3QpO1xcbitcXHRcXHRcXHRmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgb2JqZWN0LCBTTEFCX0ZSRUVfREVGQVVMVCk7XFxuIFxcdFxcdFxcdGRmLVxcdTAwM2VzbGFiID0gTlVMTDtcXG4gXFx0XFx0XFx0cmV0dXJuIHNpemU7XFxuIFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTM6NDcuODkxMDM2MDIyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTExODk3MDMwODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX0tNRU1MRUFLXCIsXG4gICAgXCJLRkVOQ0VcIixcbiAgICBcIlBSRUVNUFRfUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrZnJlZV9ub2xvY2tcIixcbiAgICBcInNldF9jcHVzX2FsbG93ZWRfZm9yY2VcIixcbiAgICBcImttZW1sZWFrX21heV9uZWVkX2ZyZWVcIixcbiAgICBcImtmZW5jZV9vYmpfdG9fbGxub2RlXCIsXG4gICAgXCJrZmVuY2VfbGxub2RlX3RvX29ialwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBrZnJlZV9ub2xvY2soKWAgaW4gYG1tL3NsdWIuY2AgdG8gc3VwcG9ydCBmcmVlaW5nIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgLCBga21lbV9jYWNoZV9hbGxvYygpYCwgYW5kIGxhcmdlIGttYWxsb2NzLCBhcyB3ZWxsIGFzIEtGRU5DRSBvYmplY3RzLiBJdCBkZWZlcnMgZnJlZWluZyB0byBhbiBgaXJxX3dvcmtgIGlmIG5lY2Vzc2FyeSAoZS5nLiwgZm9yIGttZW1sZWFrIG9yIEtGRU5DRSkuIEl0IGFsc28gbW9kaWZpZXMgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKWAgaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgIHRvIHVzZSBga2ZyZWVfbm9sb2NrKClgIGluc3RlYWQgb2YgYGtmcmVlX3JjdSgpYC4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxlciBjaGFuZ2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTViODZiZGM1OTg0YjZiMGJhMzFkZTA3OTUwMWRlNmIyMTYxOTg3NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTY6NTM6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tmZW5jZS5oIGIvaW5jbHVkZS9saW51eC9rZmVuY2UuaFxuaW5kZXggZTU4MjJmNmU3ZjI3OS4uMDA3MjFjODUyNThkYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva2ZlbmNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgva2ZlbmNlLmhcbkBAIC0xODgsNiArMTg4LDkgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX211c3RfY2hlY2sgYm9vbCBrZmVuY2VfZnJlZSh2b2lkICphZGRyKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKTtcbit2b2lkICprZmVuY2VfbGxub2RlX3RvX29iaihzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlKTtcbitcbiAvKipcbiAgKiBrZmVuY2VfaGFuZGxlX3BhZ2VfZmF1bHQoKSAtIHBlcmZvcm0gcGFnZSBmYXVsdCBoYW5kbGluZyBmb3IgS0ZFTkNFIHBhZ2VzXG4gICogQGFkZHI6IGZhdWx0aW5nIGFkZHJlc3NcbkBAIC0yMzUsNiArMjM4LDggQEAgc3RhdGljIGlubGluZSBzaXplX3Qga2ZlbmNlX2tzaXplKGNvbnN0IHZvaWQgKmFkZHIpIHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgKmtmZW5jZV9vYmplY3Rfc3RhcnQoY29uc3Qgdm9pZCAqYWRkcikgeyByZXR1cm4gTlVMTDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpIHsgfVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sga2ZlbmNlX2ZyZWUodm9pZCAqYWRkcikgeyByZXR1cm4gZmFsc2U7IH1cbitzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKSB7IHJldHVybiBOVUxMOyB9XG4rc3RhdGljIGlubGluZSB2b2lkICprZmVuY2VfbGxub2RlX3RvX29iaihzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlKSB7IHJldHVybiBOVUxMOyB9XG4gc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBrZmVuY2VfaGFuZGxlX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGlzX3dyaXRlLFxuIFx0XHRcdFx0XHRcdFx0IHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmggYi9pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmhcbmluZGV4IGZiZDQyNGIyYWJiMTQuLjUyZjc1ZjEwYTljZTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmhcbisrKyBiL2luY2x1ZGUvbGludXgva21lbWxlYWsuaFxuQEAgLTIyLDYgKzIyLDcgQEAgZXh0ZXJuIHZvaWQga21lbWxlYWtfYWxsb2NfcGVyY3B1KGNvbnN0IHZvaWQgX19wZXJjcHUgKnB0ciwgc2l6ZV90IHNpemUsXG4gZXh0ZXJuIHZvaWQga21lbWxlYWtfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBzaXplX3Qgc2l6ZSxcbiBcdFx0XHQgICAgIGdmcF90IGdmcCkgX19yZWY7XG4gZXh0ZXJuIHZvaWQga21lbWxlYWtfZnJlZShjb25zdCB2b2lkICpwdHIpIF9fcmVmO1xuK2Jvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpIF9fcmVmO1xuIGV4dGVybiB2b2lkIGttZW1sZWFrX2ZyZWVfcGFydChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplKSBfX3JlZjtcbiBleHRlcm4gdm9pZCBrbWVtbGVha19mcmVlX3BlcmNwdShjb25zdCB2b2lkIF9fcGVyY3B1ICpwdHIpIF9fcmVmO1xuIGV4dGVybiB2b2lkIGttZW1sZWFrX3VwZGF0ZV90cmFjZShjb25zdCB2b2lkICpwdHIpIF9fcmVmO1xuQEAgLTUwLDYgKzUxLDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncylcbiBcdFx0a21lbWxlYWtfZnJlZShwdHIpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXG4re1xuK1x0aWYgKCEoZmxhZ3MgXHUwMDI2IFNMQUJfTk9MRUFLVFJBQ0UpKVxuK1x0XHRyZXR1cm4ga21lbWxlYWtfbWF5X25lZWRfZnJlZShwdHIpO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZXJhc2Uodm9pZCAqKnB0cilcbiB7XG4gXHQqcHRyID0gTlVMTDtcbkBAIC04Niw2ICs5NSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9wYXJ0KGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXG4gc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKGNvbnN0IHZvaWQgKnB0ciwgc2xhYl9mbGFnc190IGZsYWdzKVxuIHtcbiB9XG4rc3RhdGljIGlubGluZSBib29sIGttZW1sZWFrX21heV9uZWVkX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rc3RhdGljIGlubGluZSBib29sIGttZW1sZWFrX21heV9uZWVkX2ZyZWVfcmVjdXJzaXZlKGNvbnN0IHZvaWQgKnB0ciwgc2xhYl9mbGFnc190IGZsYWdzKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4gc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2ZyZWVfcGVyY3B1KGNvbnN0IHZvaWQgX19wZXJjcHUgKnB0cilcbiB7XG4gfVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXG5pbmRleCA5NjIyNjcwN2MyZjYxLi5kMjkyOWU0ZTIzZjEzIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuY1xuKysrIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuQEAgLTI4MDcsMjAgKzI4MDcsMTUgQEAgdm9pZCBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld19tYXNcbiBcdFx0LnVzZXJfbWFzayA9IE5VTEwsXG4gXHRcdC5mbGFncyAgICAgPSBTQ0FfVVNFUixcdC8qIGNsZWFyIHRoZSB1c2VyIHJlcXVlc3RlZCBtYXNrICovXG4gXHR9O1xuLVx0dW5pb24gY3B1bWFza19yY3VoZWFkIHtcbi1cdFx0Y3B1bWFza190IGNwdW1hc2s7XG4tXHRcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4tXHR9O1xuIFxuIFx0c2NvcGVkX2d1YXJkIChfX3Rhc2tfcnFfbG9jaywgcClcbiBcdFx0ZG9fc2V0X2NwdXNfYWxsb3dlZChwLCBcdTAwMjZhYyk7XG4gXG4gXHQvKlxuIFx0ICogQmVjYXVzZSB0aGlzIGlzIGNhbGxlZCB3aXRoIHAtXHUwMDNlcGlfbG9jayBoZWxkLCBpdCBpcyBub3QgcG9zc2libGVcbi1cdCAqIHRvIHVzZSBrZnJlZSgpIGhlcmUgKHdoZW4gUFJFRU1QVF9SVD15KSwgdGhlcmVmb3JlIHB1bnQgdG8gdXNpbmdcbi1cdCAqIGtmcmVlX3JjdSgpLlxuK1x0ICogdG8gdXNlIGtmcmVlKCkgaGVyZSAod2hlbiBQUkVFTVBUX1JUPXkpLCB0aHVzIHVzZSBrZnJlZV9ub2xvY2soKVxuIFx0ICovXG4tXHRrZnJlZV9yY3UoKHVuaW9uIGNwdW1hc2tfcmN1aGVhZCAqKWFjLnVzZXJfbWFzaywgcmN1KTtcbitcdGtmcmVlX25vbG9jayhhYy51c2VyX21hc2spO1xuIH1cbiBcbiBpbnQgZHVwX3VzZXJfY3B1c19wdHIoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcbmluZGV4IDU2YWNmNTAyYmEyNjAuLjZhOGQwNTc4ZTk2MzMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvc2NoZWQuaFxuKysrIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcbkBAIC0yODg2LDEyICsyODg2LDcgQEAgc3RhdGljIGlubGluZSBib29sIHRhc2tfYWxsb3dlZF9vbl9jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY3B1KVxuIFxuIHN0YXRpYyBpbmxpbmUgY3B1bWFza190ICphbGxvY191c2VyX2NwdXNfcHRyKGludCBub2RlKVxuIHtcbi1cdC8qXG4tXHQgKiBTZWUgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpIGFib3ZlIGZvciB0aGUgcmN1X2hlYWQgdXNhZ2UuXG4tXHQgKi9cbi1cdGludCBzaXplID0gbWF4X3QoaW50LCBjcHVtYXNrX3NpemUoKSwgc2l6ZW9mKHN0cnVjdCByY3VfaGVhZCkpO1xuLVxuLVx0cmV0dXJuIGttYWxsb2Nfbm9kZShzaXplLCBHRlBfS0VSTkVMLCBub2RlKTtcbitcdHJldHVybiBrbWFsbG9jX25vZGUoY3B1bWFza19zaXplKCksIEdGUF9LRVJORUwsIG5vZGUpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X3B1c2hfdGFzayhzdHJ1Y3QgcnEgKnJxKVxuZGlmZiAtLWdpdCBhL21tL2tmZW5jZS9jb3JlLmMgYi9tbS9rZmVuY2UvY29yZS5jXG5pbmRleCA2NTc3YmQ3Njk1NGViLi40MjUxOWQyNDY4N2ZmIDEwMDY0NFxuLS0tIGEvbW0va2ZlbmNlL2NvcmUuY1xuKysrIGIvbW0va2ZlbmNlL2NvcmUuY1xuQEAgLTEyNzEsNiArMTI3MSwyMCBAQCB2b2lkIF9fa2ZlbmNlX2ZyZWUodm9pZCAqYWRkcilcbiBcdH1cbiB9XG4gXG4rc3RydWN0IGxsaXN0X25vZGUgKmtmZW5jZV9vYmpfdG9fbGxub2RlKHZvaWQgKmFkZHIpXG4re1xuK1x0c3RydWN0IGtmZW5jZV9tZXRhZGF0YSAqbWV0YSA9IGFkZHJfdG9fbWV0YWRhdGEoKHVuc2lnbmVkIGxvbmcpYWRkcik7XG4rXG4rXHRyZXR1cm4gXHUwMDI2bWV0YS1cdTAwM2VsbG5vZGU7XG4rfVxuK1xuK3ZvaWQgKmtmZW5jZV9sbG5vZGVfdG9fb2JqKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpXG4re1xuK1x0c3RydWN0IGtmZW5jZV9tZXRhZGF0YSAqbWV0YSA9IGNvbnRhaW5lcl9vZihsbG5vZGUsIHN0cnVjdCBrZmVuY2VfbWV0YWRhdGEsIGxsbm9kZSk7XG4rXG4rXHRyZXR1cm4gKHZvaWQgKiltZXRhLVx1MDAzZWFkZHI7XG4rfVxuK1xuIGJvb2wga2ZlbmNlX2hhbmRsZV9wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBpc193cml0ZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4ge1xuIFx0Y29uc3QgaW50IHBhZ2VfaW5kZXggPSAoYWRkciAtICh1bnNpZ25lZCBsb25nKV9fa2ZlbmNlX3Bvb2wpIC8gUEFHRV9TSVpFO1xuZGlmZiAtLWdpdCBhL21tL2tmZW5jZS9rZmVuY2UuaCBiL21tL2tmZW5jZS9rZmVuY2UuaFxuaW5kZXggMWY2MThmOWIwZDEyZC4uMGZjYTFkYzJjNzk0MSAxMDA2NDRcbi0tLSBhL21tL2tmZW5jZS9rZmVuY2UuaFxuKysrIGIvbW0va2ZlbmNlL2tmZW5jZS5oXG5AQCAtNTgsNyArNTgsMTAgQEAgc3RydWN0IGtmZW5jZV90cmFjayB7XG4gLyogS0ZFTkNFIG1ldGFkYXRhIHBlciBndWFyZGVkIGFsbG9jYXRpb24uICovXG4gc3RydWN0IGtmZW5jZV9tZXRhZGF0YSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3QgX19ndWFyZGVkX2J5KFx1MDAyNmtmZW5jZV9mcmVlbGlzdF9sb2NrKTtcdC8qIEZyZWVsaXN0IG5vZGUuICovXG4tXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7XHQvKiBGb3IgZGVsYXllZCBmcmVlaW5nLiAqL1xuK1x0dW5pb24ge1xuK1x0XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7XHQvKiBGb3IgZGVsYXllZCBmcmVlaW5nLiAqL1xuK1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSBsbG5vZGU7XHQvKiBGb3Iga2ZyZWVfbm9sb2NrKCkuICovXG4rXHR9O1xuIFxuIFx0LypcbiBcdCAqIExvY2sgcHJvdGVjdGluZyBiZWxvdyBkYXRhOyB0byBlbnN1cmUgY29uc2lzdGVuY3kgb2YgdGhlIGJlbG93IGRhdGEsXG5kaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmNcbmluZGV4IDdjN2JhMTdjZTdhZjAuLmUzNTYwY2U4MjYzMjYgMTAwNjQ0XG4tLS0gYS9tbS9rbWVtbGVhay5jXG4rKysgYi9tbS9rbWVtbGVhay5jXG5AQCAtMTE2OCw2ICsxMTY4LDQ4IEBAIHZvaWQgX19yZWYga21lbWxlYWtfZnJlZShjb25zdCB2b2lkICpwdHIpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGttZW1sZWFrX2ZyZWUpO1xuIFxuKy8qKlxuKyAqIGttZW1sZWFrX21heV9uZWVkX2ZyZWUgLSBjaGVjayBpZiBvYmplY3QgaXMgcmVnaXN0ZXJlZFxuKyAqIEBwdHI6XHRwb2ludGVyIHRvIGJlZ2lubmluZyBvZiB0aGUgb2JqZWN0XG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBrZXJuZWwgYWxsb2NhdG9yIHdoZW4gYW4gb2JqZWN0IHNob3VsZCBiZVxuKyAqIGZyZWVkIGJ1dCB0aGUgY2FsbGVyIGNvbnRleHQgbWlnaHQgYmUgdW5zYWZlIHRvIHNwaW4gb24gdGhlIGludGVybmFsIGxvY2tzLlxuKyAqXG4rICogSXQgd2lsbCB0aGVyZWZvcmUgb25seSB1c2UgdHJ5bG9jayBhbmQgdGh1cyBtaWdodCByZXR1cm4gYSBmYWxzZSBwb3NpdGl2ZVxuKyAqIGlmIHRoZSB0cnlsb2NrIGZhaWxzIGFuZCB0aGUgc3RhdHVzIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuKyAqXG4rICogRm9yIG9iamVjdHMgdGhhdCAobWlnaHQpIG5lZWQgZnJlZSwgdGhlIGFsbG9jYXRvciBoYXMgdG8gZGVmZXIgdGhlIGFjdHVhbFxuKyAqIGZyZWVpbmcgdG8gYSBzYWZlIGNvbnRleHQuXG4rICpcbisgKiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IG1vc3Qgb2JqZWN0cyBmcmVlZCBmcm9tIHRoZSB1bnNhZmUgY29udGV4dCBhcmUgYWxzb1xuKyAqIGFsbG9jYXRlZCBpbiBzdWNoIGNvbnRleHQgYW5kIHRodXMgYXJlIG5vdCByZWdpc3RlcmVkIGluIGttZW1sZWFrLCBzbyBpdCdzXG4rICogdW5saWtlbHkgdGhlIGRlZmVyZWQgZnJlZWluZyB3aWxsIGJlIG5lY2Vzc2FyeSBqdXN0IGJlY2F1c2Uga21lbWxlYWsgaXNcbisgKiBlbmFibGVkLlxuKyAqL1xuK2Jvb2wgX19yZWYga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdDtcbitcbitcdHByX2RlYnVnKFwiJXMoMHglcHgpXFxuXCIsIF9fZnVuY19fLCBwdHIpO1xuK1xuK1x0aWYgKCFrbWVtbGVha19mcmVlX2VuYWJsZWQgfHwgIXB0ciB8fCBJU19FUlIocHRyKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogT24gVVAsIHJhd19zcGluX3RyeWxvY2soKSBhbHdheXMgc3VjY2VlZHMgZXZlbiB3aGVuIGl0IGlzIGxvY2tlZCAqL1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19TTVApIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAoIXJhd19zcGluX3RyeWxvY2tfaXJxc2F2ZShcdTAwMjZrbWVtbGVha19sb2NrLCBmbGFncykpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0b2JqZWN0ID0gX19sb29rdXBfb2JqZWN0KCh1bnNpZ25lZCBsb25nKXB0ciwgMCwgMCk7XG4rXG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZrbWVtbGVha19sb2NrLCBmbGFncyk7XG4rXG4rXHRyZXR1cm4gISFvYmplY3Q7XG4rfVxuK1xuIC8qKlxuICAqIGttZW1sZWFrX2ZyZWVfcGFydCAtIHBhcnRpYWxseSB1bnJlZ2lzdGVyIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIG9iamVjdFxuICAqIEBwdHI6XHRwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb3IgaW5zaWRlIHRoZSBvYmplY3QuIFRoaXMgYWxzb1xuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggYjlhZWIwMmE4ODBmMS4uM2JlOThmYWE5ZjBkZSAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuKysrIGIvbW0vc2x1Yi5jXG5AQCAtNDA1MCw2ICs0MDUwLDggQEAgc3RhdGljIHZvaWQgZmx1c2hfYWxsKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIFxuIHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayB7XG4gXHRzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzO1xuK1x0c3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0c19rZmVuY2U7XG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzX2xhcmdlX2ttYWxsb2M7XG4gXHRzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzX2J5X3JjdTtcbiBcdHN0cnVjdCBsbGlzdF9oZWFkIHJjdV9zaGVhdmVzO1xuIFx0c3RydWN0IGlycV93b3JrIHdvcms7XG5AQCAtNDA1OSw2ICs0MDYxLDggQEAgc3RhdGljIHZvaWQgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3b3JrKTtcbiBcbiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrLCBkZWZlcnJlZF9wZXJjcHVfd29yaykgPSB7XG4gXHQub2JqZWN0cyA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzKSxcbitcdC5vYmplY3RzX2tmZW5jZSA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzX2tmZW5jZSksXG4rXHQub2JqZWN0c19sYXJnZV9rbWFsbG9jID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHNfbGFyZ2Vfa21hbGxvYyksXG4gXHQub2JqZWN0c19ieV9yY3UgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0c19ieV9yY3UpLFxuIFx0LnJjdV9zaGVhdmVzID0gTExJU1RfSEVBRF9JTklUKHJjdV9zaGVhdmVzKSxcbiBcdC53b3JrID0gSVJRX1dPUktfSU5JVChkZWZlcnJlZF9wZXJjcHVfd29ya19mbiksXG5AQCAtNjM2Myw2ICs2MzY3LDIxIEBAIHN0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkXG4rX19mcmVlX2xhcmdlX2ttYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpXG4re1xuK1x0dW5zaWduZWQgaW50IG9yZGVyID0gY29tcG91bmRfb3JkZXIocGFnZSk7XG4rXG4rXHRtb2RfbHJ1dmVjX3BhZ2Vfc3RhdGUocGFnZSwgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0IsXG4rXHRcdFx0ICAgICAgLShQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKSk7XG4rXHRfX0NsZWFyUGFnZUxhcmdlS21hbGxvYyhwYWdlKTtcbitcbitcdGlmIChmcmVlX2ZsYWdzIFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLKVxuK1x0XHRmcmVlX2Zyb3plbl9wYWdlc19ub2xvY2socGFnZSwgb3JkZXIpO1xuK1x0ZWxzZVxuK1x0XHRmcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlcik7XG4rfVxuK1xuIC8qXG4gICogSW4gUFJFRU1QVF9SVCBpcnFfd29yayBydW5zIGluIHBlci1jcHUga3RocmVhZCwgc28gaXQncyBzYWZlXG4gICogdG8gdGFrZSBzbGVlcGluZyBzcGluX2xvY2tzIGZyb20gX19zbGFiX2ZyZWUoKS5cbkBAIC02MzcxLDE2ICs2MzkwLDEyIEBAIHN0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbiBzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspXG4ge1xuIFx0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XG4tXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqb2JqcywgKm9ianNfYnlfcmN1LCAqcmN1X3NoZWF2ZXM7XG4gXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCAqcG9zLCAqdDtcbiBcdHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZiwgKm5leHQ7XG4gXG4gXHRkcHcgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrLCB3b3JrKTtcbi1cdHJjdV9zaGVhdmVzID0gXHUwMDI2ZHB3LVx1MDAzZXJjdV9zaGVhdmVzO1xuLVx0b2JqcyA9IFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzO1xuLVx0b2Jqc19ieV9yY3UgPSBcdTAwMjZkcHctXHUwMDNlb2JqZWN0c19ieV9yY3U7XG4gXG4tXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKG9ianMpO1xuK1x0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZkcHctXHUwMDNlb2JqZWN0cyk7XG4gXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XG4gXHRcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuIFx0XHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbkBAIC02MzkyLDYgKzY0MDcsOCBAQCBzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspXG4gXHRcdC8qIFBvaW50ICd4JyBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgb2YgYWxsb2NhdGVkIG9iamVjdCAqL1xuIFx0XHR4IC09IHMtXHUwMDNlb2Zmc2V0O1xuIFxuK1x0XHRrbWVtbGVha19mcmVlX3JlY3Vyc2l2ZSh4LCBzLVx1MDAzZWZsYWdzKTtcbitcbiBcdFx0LypcbiBcdFx0ICogV2UgdXNlZCBmcmVlcG9pbnRlciBpbiAneCcgdG8gbGluayAneCcgaW50byBkZi1cdTAwM2VvYmplY3RzLlxuIFx0XHQgKiBDbGVhciBpdCB0byBOVUxMIHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlIGRldGVjdGlvblxuQEAgLTY0MDMsNyArNjQyMCwzMCBAQCBzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspXG4gXHRcdHN0YXQocywgRlJFRV9TTE9XUEFUSCk7XG4gXHR9XG4gXG4tXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKG9ianNfYnlfcmN1KTtcbitcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHNfa2ZlbmNlKTtcbitcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHtcbitcdFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XG4rXHRcdHN0cnVjdCBzbGFiICpzbGFiO1xuK1x0XHR2b2lkICpvYmogPSBrZmVuY2VfbGxub2RlX3RvX29iaihwb3MpO1xuK1xuK1x0XHRzbGFiID0gdmlydF90b19zbGFiKG9iaik7XG4rXHRcdHMgPSBzbGFiLVx1MDAzZXNsYWJfY2FjaGU7XG4rXG4rXHRcdGttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKG9iaiwgcy1cdTAwM2VmbGFncyk7XG4rXG4rXHRcdF9fa2ZlbmNlX2ZyZWUob2JqKTtcbitcdH1cbitcbitcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHNfbGFyZ2Vfa21hbGxvYyk7XG4rXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKHBvcyk7XG4rXG4rXHRcdGttZW1sZWFrX2ZyZWUocG9zKTtcbitcbitcdFx0X19mcmVlX2xhcmdlX2ttYWxsb2NfcGFnZShwYWdlLCBTTEFCX0ZSRUVfREVGQVVMVCk7XG4rXHR9XG4rXG4rXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzX2J5X3JjdSk7XG4gXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XG4gXHRcdHZvaWQgKmhlYWQgPSBwb3M7XG4gXHRcdHZvaWQgKm9ianAgPSBrdm1hbGxvY19vYmpfc3RhcnRfYWRkcihoZWFkKTtcbkBAIC02NDExLDIxICs2NDUxLDYwIEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcbiBcdFx0a3ZmcmVlX2NhbGxfcmN1KGhlYWQsIG9ianApO1xuIFx0fVxuIFxuLVx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChyY3Vfc2hlYXZlcyk7XG4rXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNmRwdy1cdTAwM2VyY3Vfc2hlYXZlcyk7XG4gXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNoZWFmLCBuZXh0LCBsbG5vZGUsIGxsbm9kZSlcbiBcdFx0Y2FsbF9yY3UoXHUwMDI2c2hlYWYtXHUwMDNlcmN1X2hlYWQsIHJjdV9mcmVlX3NoZWFmKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZGVmZXJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqaGVhZClcbitzdGF0aWMgdm9pZCBkZWZlcl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopXG4ge1xuIFx0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xuK1xuK1x0LypcbitcdCAqIFBsYWNlIHRoZSBsbGlzdCBub2RlIHdoZXJlIHRoZSBmcmVlcG9pbnRlciB3b3VsZCBiZSBpZiB3ZSBmcmVlZCB0aGVcbitcdCAqIG9iamVjdCBpbW1lZGlhdGVseS4gVGhhdCBtZWFucyB3ZSBjYW4gd3JpdGUgdGhlcmUgc2FmZWx5LCBvbmx5IG5lZWRcbitcdCAqIHRvIHJlbW92ZSBrYXNhbiB0YWcgZmlyc3QuXG4rXHQgKi9cbitcdGxsbm9kZSA9IGthc2FuX3Jlc2V0X3RhZyhvYmopICsgcy1cdTAwM2VvZmZzZXQ7XG4gXG4gXHRndWFyZChwcmVlbXB0KSgpO1xuIFxuLVx0aGVhZCA9IGthc2FuX3Jlc2V0X3RhZyhoZWFkKTtcbitcdGRwdyA9IHRoaXNfY3B1X3B0cihcdTAwMjZkZWZlcnJlZF9wZXJjcHVfd29yayk7XG4rXHRpZiAobGxpc3RfYWRkKGxsbm9kZSwgXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHMpKVxuK1x0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZkcHctXHUwMDNld29yayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRlZmVyX2ZyZWVfa2ZlbmNlKHZvaWQgKm9iailcbit7XG4rXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4rXG4rXHQvKiBrYXNhbl9yZXNldF90YWcoKSBpcyBub3QgbmVjZXNzYXJ5LCBrZmVuY2Ugb2JqZWN0cyBhcmUgbm90IHRhZ2dlZCAqL1xuK1x0bGxub2RlID0ga2ZlbmNlX29ial90b19sbG5vZGUob2JqKTtcbitcbitcdGd1YXJkKHByZWVtcHQpKCk7XG4rXG4rXHRkcHcgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xuK1x0aWYgKGxsaXN0X2FkZChsbG5vZGUsIFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzX2tmZW5jZSkpXG4rXHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNmRwdy1cdTAwM2V3b3JrKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZGVmZXJfZnJlZV9sYXJnZV9rbWFsbG9jKHZvaWQgKm9iailcbit7XG4rXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4rXG4rXHQvKlxuK1x0ICogd2UgY2FuIHNpbXBseSB1c2UgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxhcmdlIGttYWxsb2Mgb2JqZWN0XG4rXHQgKiBmb3IgdGhlIGxsbm9kZSwgYXMgdGhlcmUncyBubyBjdG9yIG9yIFRZUEVTQUZFX0JZX1JDVVxuK1x0ICovXG4rXHRsbG5vZGUgPSBrYXNhbl9yZXNldF90YWcob2JqKTtcbitcbitcdGd1YXJkKHByZWVtcHQpKCk7XG4gXG4gXHRkcHcgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xuLVx0aWYgKGxsaXN0X2FkZChoZWFkICsgcy1cdTAwM2VvZmZzZXQsIFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzKSlcbitcdGlmIChsbGlzdF9hZGQobGxub2RlLCBcdTAwMjZkcHctXHUwMDNlb2JqZWN0c19sYXJnZV9rbWFsbG9jKSlcbiBcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2ZHB3LVx1MDAzZXdvcmspO1xuIH1cbiBcbkBAIC02Njc3LDkgKzY3NTYsMTEgQEAgc2l6ZV90IGtzaXplKGNvbnN0IHZvaWQgKm9ianApXG4gfVxuIEVYUE9SVF9TWU1CT0woa3NpemUpO1xuIFxuLXN0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0KVxuK3N0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0LFxuK1x0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcbiB7XG4gXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihwYWdlKTtcbitcdGJvb2wgbm9sb2NrID0gZnJlZV9mbGFncyBcdTAwMjYgU0xBQl9GUkVFX05PTE9DSztcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIVBhZ2VMYXJnZUttYWxsb2MocGFnZSkpKSB7XG4gXHRcdGR1bXBfcGFnZShwYWdlLCBcIk5vdCBhIGttYWxsb2MgYWxsb2NhdGlvblwiKTtcbkBAIC02Njg5LDE0ICs2NzcwLDE2IEBAIHN0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0KVxuIFx0aWYgKFdBUk5fT05fT05DRShvcmRlciA9PSAwKSlcbiBcdFx0cHJfd2Fybl9vbmNlKFwib2JqZWN0IHBvaW50ZXI6IDB4JXBcXG5cIiwgb2JqZWN0KTtcbiBcbi1cdGttZW1sZWFrX2ZyZWUob2JqZWN0KTtcbitcdGlmICghbm9sb2NrKVxuK1x0XHRrbWVtbGVha19mcmVlKG9iamVjdCk7XG4rXG4gXHRrYXNhbl9rZnJlZV9sYXJnZShvYmplY3QpO1xuIFx0a21zYW5fa2ZyZWVfbGFyZ2Uob2JqZWN0KTtcbiBcbi1cdG1vZF9scnV2ZWNfcGFnZV9zdGF0ZShwYWdlLCBOUl9TTEFCX1VOUkVDTEFJTUFCTEVfQixcbi1cdFx0XHQgICAgICAtKFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpKTtcbi1cdF9fQ2xlYXJQYWdlTGFyZ2VLbWFsbG9jKHBhZ2UpO1xuLVx0ZnJlZV9mcm96ZW5fcGFnZXMocGFnZSwgb3JkZXIpO1xuK1x0aWYgKHVubGlrZWx5KG5vbG9jayBcdTAwMjZcdTAwMjYga21lbWxlYWtfbWF5X25lZWRfZnJlZShvYmplY3QpKSlcbitcdFx0ZGVmZXJfZnJlZV9sYXJnZV9rbWFsbG9jKG9iamVjdCk7XG4rXHRlbHNlXG4rXHRcdF9fZnJlZV9sYXJnZV9rbWFsbG9jX3BhZ2UocGFnZSwgZnJlZV9mbGFncyk7XG4gfVxuIFxuIC8qXG5AQCAtNjcxOCw3ICs2ODAxLDcgQEAgdm9pZCBrdmZyZWVfcmN1X2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiBcdFx0aWYgKHNsYWIpXG4gXHRcdFx0c2xhYl9mcmVlKHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgb2JqLCBfUkVUX0lQXyk7XG4gXHRcdGVsc2Vcbi1cdFx0XHRmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgb2JqKTtcbitcdFx0XHRmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgb2JqLCBTTEFCX0ZSRUVfREVGQVVMVCk7XG4gXHR9XG4gfVxuIFxuQEAgLTY3NDQsNyArNjgyNyw3IEBAIHZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqb2JqZWN0KVxuIFx0c2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcbiBcdGlmICghc2xhYikge1xuIFx0XHQvKiBrbWFsbG9jX25vbG9jaygpIGRvZXNuJ3Qgc3VwcG9ydCBsYXJnZSBrbWFsbG9jICovXG4tXHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCAodm9pZCAqKW9iamVjdCk7XG4rXHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCAodm9pZCAqKW9iamVjdCwgU0xBQl9GUkVFX0RFRkFVTFQpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtNjc1NSwxNSArNjgzOCwxNCBAQCBFWFBPUlRfU1lNQk9MKGtmcmVlKTtcbiBcbiAvKlxuICAqIENhbiBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyByYXdfc3BpbmxvY2tfdCBvciBmcm9tIElSUSBhbmQgTk1JLFxuLSAqIGJ1dCBPTkxZIGZvciBvYmplY3RzIGFsbG9jYXRlZCBieSBrbWFsbG9jX25vbG9jaygpLlxuLSAqIERlYnVnIGNoZWNrcyAobGlrZSBrbWVtbGVhayBhbmQga2ZlbmNlKSB3ZXJlIHNraXBwZWQgb24gYWxsb2NhdGlvbixcbi0gKiBoZW5jZVxuLSAqIG9iaiA9IGttYWxsb2MoKTsga2ZyZWVfbm9sb2NrKG9iaik7XG4tICogd2lsbCBtaXNzIGttZW1sZWFrL2tmZW5jZSBib29rIGtlZXBpbmcgYW5kIHdpbGwgY2F1c2UgZmFsc2UgcG9zaXRpdmVzLlxuLSAqIGxhcmdlX2ttYWxsb2MgaXMgbm90IHN1cHBvcnRlZCBlaXRoZXIuXG4rICogYnV0IG1heSBkZWZlciBmcmVlaW5nIHRvIGlycV93b3JrKCkgaW4gc29tZSBjYXNlcy5cbisgKlxuKyAqIEludGVuZGVkIG1haW5seSBmb3Igb2JqZWN0cyBhbGxvY2F0ZWQgZnJvbSBrbWFsbG9jX25vbG9jaygpLCBidXQgY2FuIGhhbmRsZVxuKyAqIGFsc28ga21lbV9jYWNoZV9hbGxvYygpIGFuZCBrbWFsbG9jKCkgb2JqZWN0cywgaW5jbHVkaW5nIGxhcmdlX2ttYWxsb2MuXG4gICovXG4gdm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxuIHtcbitcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0c3RydWN0IHNsYWIgKnNsYWI7XG4gXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcbiBcdHZvaWQgKnggPSAodm9pZCAqKW9iamVjdDtcbkBAIC02NzcxLDkgKzY4NTMsMTAgQEAgdm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxuIFx0aWYgKHVubGlrZWx5KFpFUk9fT1JfTlVMTF9QVFIob2JqZWN0KSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdHNsYWIgPSB2aXJ0X3RvX3NsYWIob2JqZWN0KTtcbitcdHBhZ2UgPSB2aXJ0X3RvX3BhZ2Uob2JqZWN0KTtcbitcdHNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XG4gXHRpZiAodW5saWtlbHkoIXNsYWIpKSB7XG4tXHRcdFdBUk5fT05DRSgxLCBcImxhcmdlX2ttYWxsb2MgaXMgbm90IHN1cHBvcnRlZCBieSBrZnJlZV9ub2xvY2soKVwiKTtcbitcdFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsICh2b2lkICopb2JqZWN0LCBTTEFCX0ZSRUVfTk9MT0NLKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTY3OTEsNiArNjg3NCwxMiBAQCB2b2lkIGtmcmVlX25vbG9jayhjb25zdCB2b2lkICpvYmplY3QpXG4gXHQgKiBzaW5jZSB0aGV5IHRha2Ugc3BpbmxvY2tzIG9yIG5vdCBzYWZlIGZyb20gYW55IGNvbnRleHQuXG4gXHQgKi9cbiBcdGttc2FuX3NsYWJfZnJlZShzLCB4KTtcbitcbitcdGlmIChpc19rZmVuY2VfYWRkcmVzcyh4KSkge1xuK1x0XHRkZWZlcl9mcmVlX2tmZW5jZSh4KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0LypcbiBcdCAqIElmIEtBU0FOIGZpbmRzIGEga2VybmVsIGJ1ZyBpdCB3aWxsIGRvIGthc2FuX3JlcG9ydF9pbnZhbGlkX2ZyZWUoKVxuIFx0ICogd2hpY2ggd2lsbCBjYWxsIHJhd19zcGluX2xvY2tfaXJxc2F2ZSgpIHdoaWNoIGlzIHRlY2huaWNhbGx5XG5AQCAtNjgwOSw5ICs2ODk4LDIzIEBAIHZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcbiBcdCAqL1xuIFx0a2FzYW5fc2xhYl9mcmVlKHMsIHgsIGZhbHNlLCBmYWxzZSwgLyogc2tpcCBxdWFyYW50aW5lICovdHJ1ZSk7XG4gXG4rXHQvKlxuK1x0ICogd2l0aCBrZnJlZSgpIHRoZSBrbWVtbGVhayBoYW5kbGluZyBoYXBwZW5zIG11Y2ggc29vbmVyLCBidXQgZm9yXG4rXHQgKiBkZWZlcmluZyB3ZSBuZWVkIHRvIHdyaXRlIGxsbm9kZSB0byB0aGUgb2JqZWN0J3MgZnJlZXBvaW50ZXIgc29cbitcdCAqIHdlIHNob3VsZCBoYXZlIGl0IGluIHRoZSBzdGF0ZSB3aGVuIGl0J3Mgbm8gbG9uZ2VyIHRyZWF0ZWQgYXNcbitcdCAqIGFsbG9jYXRlZCBieSBrYXNhbiBldGMuXG4rXHQgKlxuK1x0ICogZGVmZXJfZnJlZSB3aWxsIGFsc28gcmVzZXQgdGhlIHBvaW50ZXIgdGFnLCBidXQgaXQncyBvayB0byBkbyBhXG4rXHQgKiBkZWZlcnJlZCBrbWVtbGVha19mcmVlKCkgdXNpbmcgdGhlIHVudGFnZ2VkIHBvaW50ZXIsIGJlY2F1c2VcbitcdCAqIF9fbG9va3VwX29iamVjdCgpIHJlc2V0cyB0aGUgdGFnIGFueXdheVxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkoa21lbWxlYWtfbWF5X25lZWRfZnJlZV9yZWN1cnNpdmUoeCwgcy1cdTAwM2VmbGFncykpKVxuK1x0XHRnb3RvIGRlZmVyO1xuK1xuIFx0aWYgKGxpa2VseShjYW5fZnJlZV90b19wY3Moc2xhYikpIFx1MDAyNlx1MDAyNiBsaWtlbHkoZnJlZV90b19wY3MocywgeCwgZmFsc2UpKSlcbiBcdFx0cmV0dXJuO1xuIFxuK2RlZmVyOlxuIFx0LypcbiBcdCAqIF9fc2xhYl9mcmVlKCkgY2FuIGxvY2tsZXNzbHkgY21weGNoZzE2IGludG8gYSBzbGFiLCBidXQgdGhlbiBpdCBtaWdodFxuIFx0ICogbmVlZCB0byB0YWtlIHNwaW5fbG9jayBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuQEAgLTcxMTQsNyArNzIxNyw3IEBAIGludCBidWlsZF9kZXRhY2hlZF9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsXG4gXHRpZiAoIXMpIHtcbiBcdFx0LyogSGFuZGxlIGthbGxvYydlZCBvYmplY3RzICovXG4gXHRcdGlmICghc2xhYikge1xuLVx0XHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmplY3QpO1xuK1x0XHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmplY3QsIFNMQUJfRlJFRV9ERUZBVUxUKTtcbiBcdFx0XHRkZi1cdTAwM2VzbGFiID0gTlVMTDtcbiBcdFx0XHRyZXR1cm4gc2l6ZTtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTM6NDcuODkxMDM3MjQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY0ODg0NjIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGtmcmVlX25vbG9jaygpIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgYWx0ZXJpbmcgYGtmcmVlX25vbG9jaygpYCB3aXRoaW4gYG1tL3NsdWIuY2Ag4oCTIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHBhcnRpY3VsYXJseSB0aGUgU0xVQiBhbGxvY2F0b3IuIFRoZSBrZXkgaXMgdGhhdCBpdCdzIGV4cGFuZGluZyB0aGUgc2NvcGUgb2YgYGtmcmVlX25vbG9jaygpYCB0byBoYW5kbGUgb2JqZWN0cyBiZXlvbmQgaXRzIG9yaWdpbmFsIGRlc2lnbiwgbm93IGluY2x1ZGluZyBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga21hbGxvYygpYCwgYGttZW1fY2FjaGVfYWxsb2MoKWAsIGFuZCBpbXBvcnRhbnRseSwgKmxhcmdlKiBga21hbGxvY2AgYWxsb2NhdGlvbnMsIGFzIHdlbGwgYXMgS0ZFTkNFIG9iamVjdHMuIFRoYXQncyBhIHNpZ25pZmljYW50IGNoYW5nZSwgaW1wbHlpbmcgbW9yZSBjb21wcmVoZW5zaXZlIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGF0IGZ1bmN0aW9uLlxuXG5UaGUgYWRkaXRpb24gb2YgYW4gYGlycV93b3JrYCBtZWNoYW5pc20gaGludHMgYXQgaGFuZGxpbmcgY2VydGFpbiBmcmVlaW5nIG9wZXJhdGlvbnMgYXN5bmNocm9ub3VzbHkuIFRoaXMgaXMgbGlrZWx5IGluIHJlc3BvbnNlIHRvIGlzc3VlcyB3aXRoIGBrbWVtbGVha2Agb3IgS0ZFTkNFIHRoYXQgd291bGQgaGF2ZSByZXF1aXJlZCB0aGUgZnJlZWluZyB0byBvY2N1ciBvdXRzaWRlIG9mIG5vcm1hbCBpbnRlcnJ1cHQgY29udGV4dC4gU28sIHBvdGVudGlhbGx5IHdlIGFyZSBkZWFsaW5nIHdpdGggZGVmZXJyZWQgZnJlZWluZyBpbiBjZXJ0YWluIGNvbmRpdGlvbnMsIHdoaWNoIGlzIGNvbW1vbiBpbiBhIG1vZGVybiBrZXJuZWwuXG5cbk5vdywgSSBzZWUgaXQncyBhbHNvIGltcGFjdGluZyBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpYCBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AsIHJlcGxhY2luZyBga2ZyZWVfcmN1KClgIHdpdGggYGtmcmVlX25vbG9jaygpYC4gVGhpcyBpcyBhbm90aGVyIGludGVyZXN0aW5nIHBvaW50LiBXaHkgdGhpcyBjaGFuZ2U/IERvZXMgdGhpcyBtZWFuIGBrZnJlZV9ub2xvY2soKWAgaXMgbm93IGNvbnNpZGVyZWQgbW9yZSBhcHByb3ByaWF0ZSBvciBlZmZpY2llbnQgaW4gdGhpcyBjb250ZXh0PyBMZXQncyBjaGVjay5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBga2ZyZWVfbm9sb2NrKClgIGl0c2VsZi4gSXQncyBhIGNvcmUga2VybmVsIGZ1bmN0aW9uLiBUaGUgcGF0Y2gncyBwcmltYXJ5IGNvbnRyaWJ1dGlvbiBpcyBzdXBwb3J0aW5nIHRoZXNlIG90aGVyIG1lbW9yeSBhbGxvY2F0aW9uIG1ldGhvZHMuIEVzc2VudGlhbGx5LCBpdCBhZGRzIHRoZSBjYXBhYmlsaXR5IG9mIGZyZWVpbmcgb2JqZWN0cyBhbGxvY2F0ZWQgYnkga21hbGxvYy9rbWVtX2NhY2hlX2FsbG9jIGV0Yy4uLiBhcyB3ZWxsIGFzIGRlZmVycmluZyBmcmVlaW5nIHRvIGBkZWZlcnJlZF9wZXJjcHVfd29ya19mbmAgd2hlbiBuZWNlc3NhcnkuXG5cblJpZ2h0LCBzbyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcywgSSBuZWVkIHRvIHN0YXJ0IHRyYWNpbmcgdGhlIHVzYWdlIG9mIGBrZnJlZV9ub2xvY2soKWAuIExldCdzIHNlZSB3aGVyZSB0aGlzIGlzIG5vdyBiZWluZyBjYWxsZWQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGNoYW5nZXMgdG8gaG93IGxhcmdlIGBrbWFsbG9jYCBhbmQgS0ZFTkNFIG9iamVjdHMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIG5vdyBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQyMCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjUzOjU0LjUzOTg4NjI1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU1ODYwNzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX25vbG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaD01OTI9dm9pZCBrZnJlZShjb25zdCB2b2lkICpvYmpwKTtcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo1OTM6dm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqcCk7XFxuaW5jbHVkZS9saW51eC9zbGFiLmgtNTk0LXZvaWQga2ZyZWVfc2Vuc2l0aXZlKGNvbnN0IHZvaWQgKm9ianApO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY1OT1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzU1LVxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjc1NjpcXHRrZnJlZV9ub2xvY2socGFnZXMpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03NTctXFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03Njktb3V0X2ZyZWVfcGFnZXM6XFxua2VybmVsL2JwZi9hcmVuYS5jOjc3MDpcXHRrZnJlZV9ub2xvY2socGFnZXMpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03NzEtXFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz05NjI9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwMTYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwMTc6XFx0XFx0a2ZyZWVfbm9sb2NrKHMpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDE4LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTEyNDI9c3RhdGljIHZvaWQgYnBmX2FzeW5jX2NiX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTI1Mi1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoxMjUzOlxcdGtmcmVlX25vbG9jayhjYik7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTI1NC19XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0xMzE3PXN0YXRpYyBpbnQgX19icGZfYXN5bmNfaW5pdChzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4gKmFzeW5jLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgZmxhZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xMzcyLVxcdFxcdC8qIExvc3QgdGhlIHJhY2UgdG8gaW5pdGlhbGl6ZSB0aGlzIGJwZl9hc3luY19rZXJuLCBkcm9wIHRoZSBhbGxvY2F0ZWQgb2JqZWN0ICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MTM3MzpcXHRcXHRrZnJlZV9ub2xvY2soY2IpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTEzNzQtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTE2NjI9c3RhdGljIHZvaWQgYnBmX2FzeW5jX2lycV93b3JrZXIoc3RydWN0IGlycV93b3JrICp3b3JrKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTY3Ny1cXHRcXHRicGZfYXN5bmNfcHJvY2Vzc19vcChjYiwgY21kLVxcdTAwM2VvcCwgY21kLVxcdTAwM2Vuc2VjLCBjbWQtXFx1MDAzZW1vZGUpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjE2Nzg6XFx0XFx0a2ZyZWVfbm9sb2NrKGNtZCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTY3OS1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00NTIwPXN0YXRpYyBzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmJwZl90YXNrX3dvcmtfZmV0Y2hfY3R4KHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1NDMtXFx0XFx0ICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDU0NDpcXHRcXHRrZnJlZV9ub2xvY2soY3R4KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTQ1LVxcdFxcdHJldHVybiBvbGRfY3R4O1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDcxMD1fX2JwZl9rZnVuYyBpbnQgYnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoc3RydWN0IGJwZl9keW5wdHIgKmR5bnB0cilcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ3MTgtXFx0ZnJlYWRlcl9jbGVhbnVwKFxcdTAwMjZkZi1cXHUwMDNlZnJlYWRlcik7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDcxOTpcXHRrZnJlZV9ub2xvY2soZGYpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ3MjAtXFx0YnBmX2R5bnB0cl9zZXRfbnVsbChwdHIpO1xcbi0tXFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmM9MTM2PWludCByYW5nZV90cmVlX2NsZWFyKHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMTcyLVxcdFxcdFxcdHJhbmdlX2l0X3JlbW92ZShybiwgcnQpO1xcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjE3MzpcXHRcXHRcXHRrZnJlZV9ub2xvY2socm4pO1xcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTE3NC1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYz0xOTM9aW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMjI1LVxcdFxcdHJhbmdlX2l0X2luc2VydChsZWZ0LCBydCk7XFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmM6MjI2OlxcdFxcdGtmcmVlX25vbG9jayhyaWdodCk7XFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMjI3LVxcdH0gZWxzZSBpZiAobGVmdCkge1xcbi0tXFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmM9MjQ4PXZvaWQgcmFuZ2VfdHJlZV9kZXN0cm95KHN0cnVjdCByYW5nZV90cmVlICpydClcXG4tLVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTI1My1cXHRcXHRyYW5nZV9pdF9yZW1vdmUocm4sIHJ0KTtcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoyNTQ6XFx0XFx0a2ZyZWVfbm9sb2NrKHJuKTtcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0yNTUtXFx0fVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYz05Mj1zdGF0aWMgdm9pZCBicGZfc3RyZWFtX2ZyZWVfZWxlbShzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICplbGVtKVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtOTMte1xcbmtlcm5lbC9icGYvc3RyZWFtLmM6OTQ6XFx0a2ZyZWVfbm9sb2NrKGVsZW0pO1xcbmtlcm5lbC9icGYvc3RyZWFtLmMtOTUtfVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz0yODAzPXZvaWQgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpuZXdfbWFzaylcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjgxNS1cXHQgKiBCZWNhdXNlIHRoaXMgaXMgY2FsbGVkIHdpdGggcC1cXHUwMDNlcGlfbG9jayBoZWxkLCBpdCBpcyBub3QgcG9zc2libGVcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjI4MTY6XFx0ICogdG8gdXNlIGtmcmVlKCkgaGVyZSAod2hlbiBQUkVFTVBUX1JUPXkpLCB0aHVzIHVzZSBrZnJlZV9ub2xvY2soKVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjgxNy1cXHQgKi9cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjI4MTg6XFx0a2ZyZWVfbm9sb2NrKGFjLnVzZXJfbWFzayk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy0yODE5LX1cXG4tLVxcbmxpYi90ZXN0cy9zbHViX2t1bml0LmM9MzQ0PXN0YXRpYyB2b2lkIHRlc3Rfbm9sb2NrKHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0ICpjdHgpXFxuLS1cXG5saWIvdGVzdHMvc2x1Yl9rdW5pdC5jLTM2MS1cXHRlbHNlXFxubGliL3Rlc3RzL3NsdWJfa3VuaXQuYzozNjI6XFx0XFx0a2ZyZWVfbm9sb2NrKG9ianApO1xcbmxpYi90ZXN0cy9zbHViX2t1bml0LmMtMzYzLVxcbi0tXFxubW0va2ZlbmNlL2tmZW5jZS5oPTU5PXN0cnVjdCBrZmVuY2VfbWV0YWRhdGEge1xcbi0tXFxubW0va2ZlbmNlL2tmZW5jZS5oLTYyLVxcdFxcdHN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDtcXHQvKiBGb3IgZGVsYXllZCBmcmVlaW5nLiAqL1xcbm1tL2tmZW5jZS9rZmVuY2UuaDo2MzpcXHRcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBsbG5vZGU7XFx0LyogRm9yIGtmcmVlX25vbG9jaygpLiAqL1xcbm1tL2tmZW5jZS9rZmVuY2UuaC02NC1cXHR9O1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz01Mjc9dm9pZCBrbWVtX2NhY2hlX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTU1Mi1cXG5tbS9zbGFiX2NvbW1vbi5jOjU1MzpcXHQvKiBXYWl0IGZvciBkZWZlcnJlZCB3b3JrIGZyb20ga21hbGxvYy9rZnJlZV9ub2xvY2soKSAqL1xcbm1tL3NsYWJfY29tbW9uLmMtNTU0LVxcdGRlZmVycmVkX3dvcmtfYmFycmllcigpO1xcbi0tXFxubW0vc2x1Yi5jLTE2MC0gKiAgIFByZWVtcHRpb24gaXMgZGlzYWJsZWQgYXMgcGFydCBvZiBsb2NhbF90cnlsb2NrIG9wZXJhdGlvbnMuXFxubW0vc2x1Yi5jOjE2MTogKiAgIGttYWxsb2Nfbm9sb2NrKCkgYW5kIGtmcmVlX25vbG9jaygpIGFyZSBzYWZlIGluIE5NSSBjb250ZXh0IGJ1dCBzZWVcXG5tbS9zbHViLmMtMTYyLSAqICAgdGhlaXIgbGltaXRhdGlvbnMuXFxuLS1cXG5tbS9zbHViLmM9MjE0Nj1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjIyMS1cXHRcXHRpZiAodW5saWtlbHkoIWFsbG93X3NwaW4pKVxcbm1tL3NsdWIuYzoyMjIyOlxcdFxcdFxcdGtmcmVlX25vbG9jayh2ZWMpO1xcbm1tL3NsdWIuYy0yMjIzLVxcdFxcdGVsc2VcXG4tLVxcbm1tL3NsdWIuYz0yMjM2PXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3BpbilcXG4tLVxcbm1tL3NsdWIuYy0yMjU4LVxcdGVsc2VcXG5tbS9zbHViLmM6MjI1OTpcXHRcXHRrZnJlZV9ub2xvY2sob2JqX2V4dHMpO1xcbm1tL3NsdWIuYy0yMjYwLVxcdHNsYWItXFx1MDAzZW9ial9leHRzID0gMDtcXG4tLVxcbm1tL3NsdWIuYz0yNzk0PXN0YXRpYyB2b2lkIF9fZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLFxcbi0tXFxubW0vc2x1Yi5jLTI4MDgtXFx0aWYgKHVubGlrZWx5KGZyZWVfZmxhZ3MgXFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLKSlcXG5tbS9zbHViLmM6MjgwOTpcXHRcXHRrZnJlZV9ub2xvY2soc2hlYWYpO1xcbm1tL3NsdWIuYy0yODEwLVxcdGVsc2VcXG4tLVxcbm1tL3NsdWIuYz02ODM3PUVYUE9SVF9TWU1CT0woa2ZyZWUpO1xcbi0tXFxubW0vc2x1Yi5jLTY4NDUtICovXFxubW0vc2x1Yi5jOjY4NDY6dm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxcbm1tL3NsdWIuYy02ODQ3LXtcXG4tLVxcbm1tL3NsdWIuYy02ODg4LVxcdCAqIGthc2FuX3JlcG9ydF9pbnZhbGlkX2ZyZWUoKSAtXFx1MDAzZSByYXdfc3Bpbl9sb2NrX2lycXNhdmUoKSAtXFx1MDAzZSBOTUlcXG5tbS9zbHViLmM6Njg4OTpcXHQgKiAgLVxcdTAwM2Uga2ZyZWVfbm9sb2NrKCkgLVxcdTAwM2Uga2FzYW5fcmVwb3J0X2ludmFsaWRfZnJlZSgpIG9uIHRoZSBzYW1lIENQVVxcbm1tL3NsdWIuYy02ODkwLVxcdCAqIGlzIGRvdWJsZSBidWdneSBhbmQgZGVzZXJ2ZXMgdG8gZGVhZGxvY2suXFxuLS1cXG5tbS9zbHViLmMtNjkyNC19XFxubW0vc2x1Yi5jOjY5MjU6RVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfbm9sb2NrKTtcXG5tbS9zbHViLmMtNjkyNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTM6NTcuMTk1NzUxMTk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ4MTUyMDA3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBga2ZyZWVfbm9sb2NrYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtmcmVlX25vbG9ja2AsIHdoaWNoIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGZ1bmN0aW9uLiBJIGtub3cgaXQncyBleHBvcnRlZCBhbmQgdXNlZCBpbiBCUEYsIHRoZSBzY2hlZHVsZXIsIGFuZCBldmVuIHRoZSBTTFVCIGFsbG9jYXRvciBpdHNlbGYg4oCTIHRoYXQgbWFrZXMgaXQgYSBjcml0aWNhbCBwaWVjZS4gVGhlIGZpcnN0IGNoYW5nZSwgc3dhcHBpbmcgb3V0IGBrZnJlZV9yY3VgIGZvciBga2ZyZWVfbm9sb2NrYCB3aXRoaW4gYHNldF9jcHVzX2FsbG93ZWRfZm9yY2VgIGluIGBrZXJuZWwvc2NoZWQvY29yZS5jYCwgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBga2ZyZWVfcmN1YCBpcyBhIHdheSB0byBzYWZlbHkgZnJlZSBtZW1vcnkgdGhhdCBtaWdodCBzdGlsbCBiZSBpbiB1c2UgYnkgb3RoZXIgQ1BVcywgcmlnaHQ/IFNvLCB0aGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiDigJMgb3IgYSBzaWduaWZpY2FudCByaXNrLCBkZXBlbmRpbmcgb24gdGhlIGltcGxpY2F0aW9ucy5cblxuVGhlIHNlY29uZCBwYXJ0IG1lbnRpb25zIHN1cHBvcnRpbmcgbGFyZ2UgYGttYWxsb2NgIGFuZCBLRkVOQ0Ugd2l0aGluIGBrZnJlZV9ub2xvY2tgLiBUaGF0IGNvdWxkIGJlIGEgY29tcGF0aWJpbGl0eSBvciBlZmZpY2llbmN5IGNoYW5nZS5cblxuTm93LCB3YWl0IGEgbWludXRlLi4uIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlYC4uLiB0aGF0J3MgYSAqY29yZSogc2NoZWR1bGVyIGZ1bmN0aW9uLiBUaGUgaW1wbGljYXRpb25zIG9mIGdldHRpbmcgdGhpcyB3cm9uZyBhcmUgc3Vic3RhbnRpYWwsIHRvdWNoaW5nIHNjaGVkdWxpbmcgaXMgYSB2ZXJ5IHNlbnNpdGl2ZSBhcmVhLiBUaGlzIG1lYW5zIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY2FsbCBjaGFpbiBpbiBkZXRhaWwuIE15IGZpcnN0IGluc3RpbmN0IGhlcmUgaXMgdG8gdHJhY2Ugd2hlcmUgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2VgIGlzICphY3R1YWxseSogY2FsbGVkIGFuZCBmdWxseSB1bmRlcnN0YW5kIGl0cyB1c2FnZSBtb2RlbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGZsb3cgb2YgZGF0YSBoZXJlIGFuZCBlbnN1cmUgdGhpcyByZXBsYWNlbWVudCBpcyBhY3R1YWxseSBzYWZlLiBJJ2xsIG5lZWQgdG8gZG8gc29tZSBjb2RlIGRpdmluZyB0byBtYWtlIHN1cmUgdGhpcyBpcyBhY3R1YWxseSByZWFjaGFibGUsIGdpdmVuIGl0cyBzaWduaWZpY2FuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU0OjEyLjAxMDk1NDQ5NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgxOTQ1NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9jcHVzX2FsbG93ZWRfZm9yY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zY2hlZC5oPTE5MTA9ZXh0ZXJuIHZvaWQgZGxfYndfZnJlZShpbnQgY3B1LCB1NjQgZGxfYncpO1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xOTExLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxOTEyOi8qIHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKSAtIGNvbnNpZGVyIHVzaW5nIHNldF9jcHVzX2FsbG93ZWRfcHRyKCkgaW5zdGVhZCAqL1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxOTEzOmV4dGVybiB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZm9yY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbmV3X21hc2spO1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xOTE0LVxcbi0tXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYz00MDkzPWJvb2wgY3B1c2V0X2NwdXNfYWxsb3dlZF9mYWxsYmFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDEwMS1cXHRpZiAoaXNfaW5fdjJfbW9kZSgpIFxcdTAwMjZcXHUwMDI2IGNwdW1hc2tfc3Vic2V0KGNzX21hc2ssIHBvc3NpYmxlX21hc2spKSB7XFxua2VybmVsL2Nncm91cC9jcHVzZXQuYzo0MTAyOlxcdFxcdHNldF9jcHVzX2FsbG93ZWRfZm9yY2UodHNrLCBjc19tYXNrKTtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQxMDMtXFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuLS1cXG5rZXJuZWwva3RocmVhZC5jPTU2Nj1zdGF0aWMgdm9pZCBfX2t0aHJlYWRfYmluZF9tYXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzdGF0ZSlcXG4tLVxcbmtlcm5lbC9rdGhyZWFkLmMtNTczLVxcdHNjb3BlZF9ndWFyZCAocmF3X3NwaW5sb2NrX2lycXNhdmUsIFxcdTAwMjZwLVxcdTAwM2VwaV9sb2NrKVxcbmtlcm5lbC9rdGhyZWFkLmM6NTc0OlxcdFxcdHNldF9jcHVzX2FsbG93ZWRfZm9yY2UocCwgbWFzayk7XFxua2VybmVsL2t0aHJlYWQuYy01NzUtXFxuLS1cXG5rZXJuZWwva3RocmVhZC5jPTgzOT1pbnQga3RocmVhZF9hZmZpbmVfcHJlZmVycmVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spXFxuLS1cXG5rZXJuZWwva3RocmVhZC5jLTg2Ny1cXHRzY29wZWRfZ3VhcmQgKHJhd19zcGlubG9ja19pcnFzYXZlLCBcXHUwMDI2cC1cXHUwMDNlcGlfbG9jaylcXG5rZXJuZWwva3RocmVhZC5jOjg2ODpcXHRcXHRzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHAsIGFmZmluaXR5KTtcXG5rZXJuZWwva3RocmVhZC5jLTg2OS1cXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9Mjc5Mz1kb19zZXRfY3B1c19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGFmZmluaXR5X2NvbnRleHQgKmN0eClcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjgwMi0gKi9cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjI4MDM6dm9pZCBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld19tYXNrKVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjgwNC17XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTI4MjE9aW50IGR1cF91c2VyX2NwdXNfcHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjg0OC1cXHQgKiBUaG91Z2ggdW5saWtlbHksIHVzZXJfY3B1c19wdHIgY2FuIGJlIHJlc2V0IHRvIE5VTEwgYnkgYSBjb25jdXJyZW50XFxua2VybmVsL3NjaGVkL2NvcmUuYzoyODQ5OlxcdCAqIHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKS5cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI4NTAtXFx0ICovXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTM1NDA9c3RhdGljIGludCBzZWxlY3RfZmFsbGJhY2tfcnEoaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0zNTc5LVxcdFxcdGNhc2UgcG9zc2libGU6XFxua2VybmVsL3NjaGVkL2NvcmUuYzozNTgwOlxcdFxcdFxcdHNldF9jcHVzX2FsbG93ZWRfZm9yY2UocCwgdGFza19jcHVfZmFsbGJhY2tfbWFzayhwKSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy0zNTgxLVxcdFxcdFxcdHN0YXRlID0gZmFpbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTQ6MTQuMzkyOTA0MTM1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE3NzM3MjgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQ6IFByb21pc2luZyBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2VgIGlzIGRlZmluaXRlbHkgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcuIEl0J3MgY2xlYXJseSByZWFjaGFibGUuIEJleW9uZCB0aGF0LCBJIHNlZSBga2ZyZWVfbm9sb2NrYCBiZWluZyB1c2VkIHdpdGhpbiB0aGUgQlBGIGFyZW5hIGFuZCByYW5nZSB0cmVlLCB3aGljaCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbiBhcyBhIHBvdGVudGlhbCBhcmVhIHRvIGV4cGxvcmUuXG5cbkknbSBzZWVpbmcgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzIGluIGBtbS9zbHViLmNgIGFuZCBgbW0va21lbWxlYWsuY2AuIFNwZWNpZmljYWxseSwgdGhlIGludHJvZHVjdGlvbiBvZiBga21lbWxlYWtfbWF5X25lZWRfZnJlZWAgYW5kIHRoZSBkZWZlcnJhbCBvZiBmcmVlaW5nIG9wZXJhdGlvbnMgdG8gYGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuYCBhcmUgbWFqb3IgcmVkIGZsYWdzLCBlc3NlbnRpYWxseSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMuIEkgbmVlZCB0byBkaWcgaW50byB0aG9zZSBmdW5jdGlvbnMgaW4gYG1tL3NsdWIuY2AgbmV4dC5cblxuQWxyaWdodCwgbG9va2luZyBhdCBgbW0vc2x1Yi5jYCwgSSBzZWUgYGRlZmVyX2ZyZWVfa2ZlbmNlYCBhbmQgYGRlZmVyX2ZyZWVfbGFyZ2Vfa21hbGxvY2AgaGF2ZSBiZWVuIGFkZGVkLCBhbmQgdGhleSBhcmUgZGVmZXJyaW5nIGZyZWVpbmcgdG8gYGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuYC4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byBjb25maXJtIGBkZWZlcnJlZF9wZXJjcHVfd29ya19mbmAgaXMgcmVhY2hhYmxlLlxuXG5ZZXAsIGBkZWZlcnJlZF9wZXJjcHVfd29ya19mbmAgaXMgcmVhY2hhYmxlIHRocm91Z2ggYW4gYGlycV93b3JrYCBxdWV1ZWQgYnkgYGRlZmVyX2ZyZWVgLCBgZGVmZXJfZnJlZV9rZmVuY2VgLCBhbmQgYGRlZmVyX2ZyZWVfbGFyZ2Vfa21hbGxvY2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHNwb3Qgd29ydGggc3BlbmRpbmcgc29tZSB0aW1lIG9uIHdpdGggdGhlIGZ1enplci5cblxuT2theSwgbGV0J3MgbmFpbCBkb3duIHNvbWUgZm9jdXMgc3ltYm9scy4gYHNldF9jcHVzX2FsbG93ZWRfZm9yY2VgLCBga2ZyZWVfbm9sb2NrYCwgYGttZW1sZWFrX21heV9uZWVkX2ZyZWVgLCBgZGVmZXJfZnJlZV9rZmVuY2VgICh3aGljaCBsb29rcyB0byBiZSBzdGF0aWMpLCBgZGVmZXJfZnJlZV9sYXJnZV9rbWFsbG9jYCAoYWxzbyBzdGF0aWMpLCBgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm5gIChzdGF0aWMpLCBgZnJlZV9sYXJnZV9rbWFsbG9jYCAoc3RhdGljKSwgYW5kIGZpbmFsbHkgYGtmZW5jZV9vYmpfdG9fbGxub2RlYCBhbmQgYGtmZW5jZV9sbG5vZGVfdG9fb2JqYC4gVGhvc2UgbGFzdCB0d28gbG9vayBsaWtlIHRoZXkgY291bGQgYmUgaW50ZXJlc3RpbmcuXG5cbkhvbGQgb24gYSBtaW51dGXigKYgRm9jdXNpbmcgaW4gb24gYGtmcmVlX25vbG9ja2AsIHRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlYCBpcyBnb29kIHRvby4gQW5kIGBrbWVtbGVha19tYXlfbmVlZF9mcmVlYCBpcyBhbHNvIGEgcHJpbWUgY2FuZGlkYXRlLiBMZXQgbWUgY2hlY2sgdGhlIGtlcm5lbCBzb3VyY2UgdG8gc2VlIGlmIGBrZmVuY2Vfb2JqX3RvX2xsbm9kZWAgYW5kIGBrZmVuY2VfbGxub2RlX3RvX29iamAgYXJlIGV4cG9ydGVkLiBUaGV5J3JlIGluIGBtbS9rZmVuY2UvY29yZS5jYC4gTGV0IG1lIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTIyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU0OjIyLjU3MDI3OTgyOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDIxMjM4OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmZW5jZV9vYmpfdG9fbGxub2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2ZlbmNlLmg9MTgzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19tdXN0X2NoZWNrIGJvb2wga2ZlbmNlX2ZyZWUodm9pZCAqYWRkcilcXG4tLVxcbmluY2x1ZGUvbGludXgva2ZlbmNlLmgtMTkwLVxcbmluY2x1ZGUvbGludXgva2ZlbmNlLmg6MTkxOnN0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKTtcXG5pbmNsdWRlL2xpbnV4L2tmZW5jZS5oLTE5Mi12b2lkICprZmVuY2VfbGxub2RlX3RvX29iaihzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2ZlbmNlLmg9MjQwPXN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sga2ZlbmNlX2ZyZWUodm9pZCAqYWRkcikgeyByZXR1cm4gZmFsc2U7IH1cXG5pbmNsdWRlL2xpbnV4L2tmZW5jZS5oOjI0MTpzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKSB7IHJldHVybiBOVUxMOyB9XFxuaW5jbHVkZS9saW51eC9rZmVuY2UuaC0yNDItc3RhdGljIGlubGluZSB2b2lkICprZmVuY2VfbGxub2RlX3RvX29iaihzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlKSB7IHJldHVybiBOVUxMOyB9XFxuLS1cXG5tbS9rZmVuY2UvY29yZS5jPTEyNDc9dm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXFxuLS1cXG5tbS9rZmVuY2UvY29yZS5jLTEyNzMtXFxubW0va2ZlbmNlL2NvcmUuYzoxMjc0OnN0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKVxcbm1tL2tmZW5jZS9jb3JlLmMtMTI3NS17XFxuLS1cXG5tbS9zbHViLmM9NjQ3OD1zdGF0aWMgdm9pZCBkZWZlcl9mcmVlX2tmZW5jZSh2b2lkICpvYmopXFxuLS1cXG5tbS9zbHViLmMtNjQ4My1cXHQvKiBrYXNhbl9yZXNldF90YWcoKSBpcyBub3QgbmVjZXNzYXJ5LCBrZmVuY2Ugb2JqZWN0cyBhcmUgbm90IHRhZ2dlZCAqL1xcbm1tL3NsdWIuYzo2NDg0OlxcdGxsbm9kZSA9IGtmZW5jZV9vYmpfdG9fbGxub2RlKG9iaik7XFxubW0vc2x1Yi5jLTY0ODUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU0OjI0LjU5MTUyMzcxN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDI3MTQ4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQWRkaW5nIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gaW50ZWdyYXRlIHRoZXNlIGZ1bmN0aW9uczogYGtmcmVlX25vbG9ja2AsIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlYCwgYGttZW1sZWFrX21heV9uZWVkX2ZyZWVgLCBga2ZlbmNlX29ial90b19sbG5vZGVgLCBhbmQgYGtmZW5jZV9sbG5vZGVfdG9fb2JqYC4gTm93LCBiZWZvcmUgSSBqdXN0IHN0YXJ0IHRocm93aW5nIGNvZGUgYXJvdW5kLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUuLi4gSSdtIHByZXR0eSBzdXJlIGBrZmVuY2Vfb2JqX3RvX2xsbm9kZWAgcmVxdWlyZXMgYENPTkZJR19LRkVOQ0VgLiBBbmQgYGttZW1sZWFrX21heV9uZWVkX2ZyZWVgIGRlZmluaXRlbHkgaGluZ2VzIG9uIGBDT05GSUdfREVCVUdfS01FTUxFQUtgLiBJJ2xsIGNvbmZpcm0gdGhhdCBieSByZWZlcmVuY2luZyB0aGUgc291cmNlIGNvZGUgZGlyZWN0bHkuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYG1tL2ttZW1sZWFrLmNgIHRvIGJlIHN1cmUgYWJvdXQgYGttZW1sZWFrX21heV9uZWVkX2ZyZWVgIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBUaGF04oCZcyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGJlIHN1cmUgZXZlcnl0aGluZyBpcyBpbnRlZ3JhdGVkIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MzMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTQ6MjguMzM0MjQ4NTQ1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDExMjc4MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1sZWFrX21heV9uZWVkX2ZyZWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rbWVtbGVhay5oPTI0PWV4dGVybiB2b2lkIGttZW1sZWFrX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjtcXG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmg6MjU6Ym9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7XFxuaW5jbHVkZS9saW51eC9rbWVtbGVhay5oLTI2LWV4dGVybiB2b2lkIGttZW1sZWFrX2ZyZWVfcGFydChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplKSBfX3JlZjtcXG4tLVxcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaD00OD1zdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgtNTMtXFxuaW5jbHVkZS9saW51eC9rbWVtbGVhay5oOjU0OnN0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncylcXG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgtNTUte1xcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaC01Ni1cXHRpZiAoIShmbGFncyBcXHUwMDI2IFNMQUJfTk9MRUFLVFJBQ0UpKVxcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaDo1NzpcXHRcXHRyZXR1cm4ga21lbWxlYWtfbWF5X25lZWRfZnJlZShwdHIpO1xcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaC01OC1cXG4tLVxcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaD05NT1zdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgtOTctfVxcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaDo5ODpzdGF0aWMgaW5saW5lIGJvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpXFxuaW5jbHVkZS9saW51eC9rbWVtbGVhay5oLTk5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaC0xMDEtfVxcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaDoxMDI6c3RhdGljIGlubGluZSBib29sIGttZW1sZWFrX21heV9uZWVkX2ZyZWVfcmVjdXJzaXZlKGNvbnN0IHZvaWQgKnB0ciwgc2xhYl9mbGFnc190IGZsYWdzKVxcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaC0xMDMte1xcbi0tXFxubW0va21lbWxlYWsuYz0xMTY5PUVYUE9SVF9TWU1CT0xfR1BMKGttZW1sZWFrX2ZyZWUpO1xcbi0tXFxubW0va21lbWxlYWsuYy0xMTcxLS8qKlxcbm1tL2ttZW1sZWFrLmM6MTE3MjogKiBrbWVtbGVha19tYXlfbmVlZF9mcmVlIC0gY2hlY2sgaWYgb2JqZWN0IGlzIHJlZ2lzdGVyZWRcXG5tbS9rbWVtbGVhay5jLTExNzMtICogQHB0cjpcXHRwb2ludGVyIHRvIGJlZ2lubmluZyBvZiB0aGUgb2JqZWN0XFxuLS1cXG5tbS9rbWVtbGVhay5jLTExODgtICovXFxubW0va21lbWxlYWsuYzoxMTg5OmJvb2wgX19yZWYga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpXFxubW0va21lbWxlYWsuYy0xMTkwLXtcXG4tLVxcbm1tL3NsdWIuYz02NzU5PXN0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0LFxcbi0tXFxubW0vc2x1Yi5jLTY3NzgtXFxubW0vc2x1Yi5jOjY3Nzk6XFx0aWYgKHVubGlrZWx5KG5vbG9jayBcXHUwMDI2XFx1MDAyNiBrbWVtbGVha19tYXlfbmVlZF9mcmVlKG9iamVjdCkpKVxcbm1tL3NsdWIuYy02NzgwLVxcdFxcdGRlZmVyX2ZyZWVfbGFyZ2Vfa21hbGxvYyhvYmplY3QpO1xcbi0tXFxubW0vc2x1Yi5jPTY4NDY9dm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxcbi0tXFxubW0vc2x1Yi5jLTY5MTAtXFx0ICovXFxubW0vc2x1Yi5jOjY5MTE6XFx0aWYgKHVubGlrZWx5KGttZW1sZWFrX21heV9uZWVkX2ZyZWVfcmVjdXJzaXZlKHgsIHMtXFx1MDAzZWZsYWdzKSkpXFxubW0vc2x1Yi5jLTY5MTItXFx0XFx0Z290byBkZWZlcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTQ6MzAuNzQ1NTM1MzMyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MzAwNjY5NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBMZWFrIERldGVjdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBtZW1vcnkgbGVhayBkZXRlY3Rpb24sIGFuZCBJJ3ZlIGdvdCBgQ09ORklHX0RFQlVHX0tNRU1MRUFLYCBhbmQgYENPTkZJR19LRkVOQ0VgIGluIG1pbmQuIENsYXNzaWMgY2hvaWNlcy4gQnV0IGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBjb21wYXJpbmcgdGhlbSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhleSBhcmUgc3VwcG9ydGVkIGluIHRoZSBrZXJuZWwncyBzY2hlZHVsZXIgY29kZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgaG93IGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlYCBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AgaGFuZGxlcyB0aGVzZSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoYXQgZnVuY3Rpb24ncyBiZWhhdmlvciBpcyBjb25kaXRpb25hbCBvbiBlaXRoZXIgb2YgdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGJlaW5nIGVuYWJsZWQuIElmIHNvLCB0aGVuIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSB3YXkgbWVtb3J5IGlzIGhhbmRsZWQgYW5kIHByb3ZpZGUgaW5zaWdodCB0byB3aGVyZSBhbnkgbGVhayBtYXkgYmUgaGFwcGVuaW5nLiBUaGlzIGlzIGFsd2F5cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIG1lbW9yeS1yZWxhdGVkIGlzc3VlcyBpbiBzY2hlZHVsaW5nLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGRlZmluZXMgc2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTYyNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU0OjU4LjA0NjIwOTAxM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzNjUwNTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9jcHVzX2FsbG93ZWRfZm9yY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3NjaGVkL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvc2NoZWQvY29yZS5jPTI3OTM9ZG9fc2V0X2NwdXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBhZmZpbml0eV9jb250ZXh0ICpjdHgpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI4MDItICovXFxua2VybmVsL3NjaGVkL2NvcmUuYzoyODAzOnZvaWQgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpuZXdfbWFzaylcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI4MDQte1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz0yODIxPWludCBkdXBfdXNlcl9jcHVzX3B0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMsXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI4NDgtXFx0ICogVGhvdWdoIHVubGlrZWx5LCB1c2VyX2NwdXNfcHRyIGNhbiBiZSByZXNldCB0byBOVUxMIGJ5IGEgY29uY3VycmVudFxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Mjg0OTpcXHQgKiBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKCkuXFxua2VybmVsL3NjaGVkL2NvcmUuYy0yODUwLVxcdCAqL1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz0zNTQwPXN0YXRpYyBpbnQgc2VsZWN0X2ZhbGxiYWNrX3JxKGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMzU3OS1cXHRcXHRjYXNlIHBvc3NpYmxlOlxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MzU4MDpcXHRcXHRcXHRzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHAsIHRhc2tfY3B1X2ZhbGxiYWNrX21hc2socCkpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMzU4MS1cXHRcXHRcXHRzdGF0ZSA9IGZhaWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU0OjU4LjQ3OTg2NDcyOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzgxNDE5NDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBMZWFrIERldGVjdGlvbiBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbGVha3MsIHdoaWNoLCBhcyB3ZSBrbm93LCBjYW4gYmUgYSByZWFsIHBhaW4uIFRoZSBrZXJuZWwncyBkZXNpZ24gbWVhbnMgZGVidWdnaW5nIHRvb2xzIGFyZSBhbG1vc3QgYWx3YXlzIGVuYWJsZWQgdmlhIGNvbmZpZ3VyYXRpb24gZmxhZ3MuIEkgbmVlZCB0byByZW1lbWJlciB0aGUgc3BlY2lmaWMgb25lcyBmb3IgbWVtb3J5IGxlYWsgZGV0ZWN0aW9uLCBzbyBgQ09ORklHX0RFQlVHX0tNRU1MRUFLYCBhbmQgYENPTkZJR19LRkVOQ0VgIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UgYXJlIGluIGZhY3Qgd2hhdCBlbmFibGUgdGhlIHRvb2xzIEknbSBsb29raW5nIGZvci5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgc3BlY2lmaWNzIG9mIGEgcG9zc2libGUgbGVhay4gSSdsbCB3YW50IHRvIHRyYWNlIGhvdyBga2ZyZWVfbm9sb2NrYCBvcGVyYXRlcywgYW5kIHRoYXQncyBpbiBgbW0vc2x1Yi5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGUgbG9naWMgbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCwgZGVwZW5kZW50IG9uIHNvbWUgY29uZmlnLiBOZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGF0J3MgdGhlIGNhc2UuIFRpbWUgdG8gY2hlY2sgaWYgYGtmcmVlX25vbG9ja2AgaGFzIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhcm91bmQgaXQsIGNoZWNraW5nIHdoaWNoIGNvbmZpZ3MgYXJlIHJlbGV2YW50IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI1MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU1OjAzLjg2MTMwMjYwNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MjU2ODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX25vbG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jLTE2MC0gKiAgIFByZWVtcHRpb24gaXMgZGlzYWJsZWQgYXMgcGFydCBvZiBsb2NhbF90cnlsb2NrIG9wZXJhdGlvbnMuXFxubW0vc2x1Yi5jOjE2MTogKiAgIGttYWxsb2Nfbm9sb2NrKCkgYW5kIGtmcmVlX25vbG9jaygpIGFyZSBzYWZlIGluIE5NSSBjb250ZXh0IGJ1dCBzZWVcXG5tbS9zbHViLmMtMTYyLSAqICAgdGhlaXIgbGltaXRhdGlvbnMuXFxuLS1cXG5tbS9zbHViLmM9MjE0Nj1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjIyMS1cXHRcXHRpZiAodW5saWtlbHkoIWFsbG93X3NwaW4pKVxcbm1tL3NsdWIuYzoyMjIyOlxcdFxcdFxcdGtmcmVlX25vbG9jayh2ZWMpO1xcbm1tL3NsdWIuYy0yMjIzLVxcdFxcdGVsc2VcXG4tLVxcbm1tL3NsdWIuYz0yMjM2PXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3BpbilcXG4tLVxcbm1tL3NsdWIuYy0yMjU4LVxcdGVsc2VcXG5tbS9zbHViLmM6MjI1OTpcXHRcXHRrZnJlZV9ub2xvY2sob2JqX2V4dHMpO1xcbm1tL3NsdWIuYy0yMjYwLVxcdHNsYWItXFx1MDAzZW9ial9leHRzID0gMDtcXG4tLVxcbm1tL3NsdWIuYz0yNzk0PXN0YXRpYyB2b2lkIF9fZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLFxcbi0tXFxubW0vc2x1Yi5jLTI4MDgtXFx0aWYgKHVubGlrZWx5KGZyZWVfZmxhZ3MgXFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLKSlcXG5tbS9zbHViLmM6MjgwOTpcXHRcXHRrZnJlZV9ub2xvY2soc2hlYWYpO1xcbm1tL3NsdWIuYy0yODEwLVxcdGVsc2VcXG4tLVxcbm1tL3NsdWIuYz02ODM3PUVYUE9SVF9TWU1CT0woa2ZyZWUpO1xcbi0tXFxubW0vc2x1Yi5jLTY4NDUtICovXFxubW0vc2x1Yi5jOjY4NDY6dm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxcbm1tL3NsdWIuYy02ODQ3LXtcXG4tLVxcbm1tL3NsdWIuYy02ODg4LVxcdCAqIGthc2FuX3JlcG9ydF9pbnZhbGlkX2ZyZWUoKSAtXFx1MDAzZSByYXdfc3Bpbl9sb2NrX2lycXNhdmUoKSAtXFx1MDAzZSBOTUlcXG5tbS9zbHViLmM6Njg4OTpcXHQgKiAgLVxcdTAwM2Uga2ZyZWVfbm9sb2NrKCkgLVxcdTAwM2Uga2FzYW5fcmVwb3J0X2ludmFsaWRfZnJlZSgpIG9uIHRoZSBzYW1lIENQVVxcbm1tL3NsdWIuYy02ODkwLVxcdCAqIGlzIGRvdWJsZSBidWdneSBhbmQgZGVzZXJ2ZXMgdG8gZGVhZGxvY2suXFxuLS1cXG5tbS9zbHViLmMtNjkyNC19XFxubW0vc2x1Yi5jOjY5MjU6RVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfbm9sb2NrKTtcXG5tbS9zbHViLmMtNjkyNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTU6MDMuOTg1NTY0NTExWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTUxOTM0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbXBpbGF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBpdCdzIGNvbXBpbGVkLCB0aGF0IG11Y2ggaXMgb2J2aW91cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGtleSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSd2ZSBnb3QgYSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgdG8gd29yayB3aXRoLCBga2ZyZWVfbm9sb2NrYCwgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2VgLCBga21lbWxlYWtfbWF5X25lZWRfZnJlZWAsIGBrZmVuY2Vfb2JqX3RvX2xsbm9kZWAsIGFuZCBga2ZlbmNlX2xsbm9kZV90b19vYmpgLiBUaG9zZSBhcmUgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHJlcXVpcmVtZW50cy5cblxuTm93LCBsZXQncyBsb29rIGZvciBhIHBvdGVudGlhbCBrZXkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIFRoZSBjb21taXQgbWVzc2FnZSBtZW50aW9ucyBgUFJFRU1QVF9SVD15YCBpbiByZWxhdGlvbiB0byBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZWAsIHNvIHRoYXQncyBpbW1lZGlhdGVseSBvbiBteSByYWRhci4gQ2hlY2tpbmcgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2VgLi4uIEFoLCB0aGUgY29tbWVudCBoZXJlIGlzIGNydWNpYWwuIEl0IG5vdGVzIHRoYXQgYGtmcmVlX25vbG9ja2AgaXMgdXNlZCBiZWNhdXNlIG9mIHRoZSBgcC1cdTAwM2VwaV9sb2NrYCBhbmQgdGhlIHBvdGVudGlhbCBjb25mbGljdCB3aXRoIGBrZnJlZWAgd2hlbiBgUFJFRU1QVF9SVGAgaXMgZW5hYmxlZC4gSG93ZXZlciwgdGhlIGNvbW1lbnQgZG9lcyAqbm90KiBzYXkgdGhhdCBga2ZyZWVfbm9sb2NrYCBpcyAqb25seSogY2FsbGVkIHdpdGggYFBSRUVNUFRfUlRgLiBTbyBpdCBsb29rcyBsaWtlIGBrZnJlZV9ub2xvY2tgIGlzIGNhbGxlZCBpbiBhbnkgY2FzZSwgZXZlbiBpZiBgUFJFRU1QVF9SVGAgaXMgbm90IGVuYWJsZWQsIHRob3VnaCB0aGlzIHNwZWNpZmljIGNhbGwgd2l0aCBhIGxvY2sgbWlnaHQgYmUgdGhlIHJlYXNvbiBmb3IgaW5jbHVkaW5nIGl0LiBcblxuSSdsbCBpbmNsdWRlIGBQUkVFTVBUX1JUYCBpbiBgRW5hYmxlQ29uZmlnc2AganVzdCB0byBiZSBzYWZlLCBqdXN0IGluIGNhc2UgdGhhdCdzIHdoeSB0aGlzIGlzIGNhbGxlZCwgYnV0IGl0IGRvZXNuJ3QgbG9vayB0byBiZSBzdHJpY3RseSBuZWNlc3NhcnkgZm9yIHRoZSBjb2RlIHRvIGNvbXBpbGUuIExldCdzIG1ha2Ugc3VyZSB0aGF0IHRoYXQgY29uZmlnIGFjdHVhbGx5IGV4aXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMDIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTU6MDkuNDQwNzYyODdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTYyMzY5OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBSRUVNUFRfUlRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL0tjb25maWcucHJlZW1wdD05MD1lbmRjaG9pY2VcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTkxLVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6OTI6Y29uZmlnIFBSRUVNUFRfUlRcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTkzLVxcdGJvb2wgXFxcIkZ1bGx5IFByZWVtcHRpYmxlIEtlcm5lbCAoUmVhbC1UaW1lKVxcXCJcXG4tLVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTA4LVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6MTA5OmNvbmZpZyBQUkVFTVBUX1JUX05FRURTX0JIX0xPQ0tcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTExMC1cXHRib29sIFxcXCJFbmZvcmNlIHNvZnRpcnEgc3luY2hyb25pc2F0aW9uIG9uIFBSRUVNUFRfUlRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU1OjExLjY1NzAwODQ3OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzIzMDM3OTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBSRUVNUFRfUlQgYW5kIFJlbGF0ZWQgU3ltYm9scyoqXG5cbk9rYXksIHNvIGBQUkVFTVBUX1JUYCBpcyBkZWZpbml0ZWx5IGEgZmFjdG9yIGhlcmUuIExldCdzIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgcmVsZXZhbnQgdG8gdGhpcyBhbmFseXNpcy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBjb3JlIHN5bWJvbHMgdGhhdCBJJ20gZGVhbGluZyB3aXRoLiBJIHNlZSB0aGVzZSBhcyBrZXk6IGBrZnJlZV9ub2xvY2tgLCBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZWAsIGBrbWVtbGVha19tYXlfbmVlZF9mcmVlYCwgYGtmZW5jZV9vYmpfdG9fbGxub2RlYCwgYW5kIGBrZmVuY2VfbGxub2RlX3RvX29iamAuIFRob3NlIGFyZSB0aGUgb25lcyBJJ20gdHJhY2tpbmcsIGluIHJlbGF0aW9uIHRvIGBQUkVFTVBUX1JUYC5cblxuTm93LCBmb3IgdGhlIGNvbmZpZ3VyYXRpb25zIHRoZW1zZWx2ZXMsIEkndmUgZ290IGBERUJVR19LTUVNTEVBS2AsIGBLRkVOQ0VgLCBhbmQgb2YgY291cnNlLCBgUFJFRU1QVF9SVGAuIFRoZXNlIHNlZW0gY2VudHJhbCB0byB0aGUgcHJvYmxlbS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCBtZSBxdWlja2x5IHZlcmlmeSB0aGUgbG9jYXRpb24gb2YgYGtmZW5jZV9vYmpfdG9fbGxub2RlYCBhbmQgYGtmZW5jZV9sbG5vZGVfdG9fb2JqYC4gQWgsIHllcywgdGhleSdyZSBpbiBgbW0va2ZlbmNlL2NvcmUuY2AuIEdvb2QsIHRoYXQgc29saWRpZmllcyBteSBtZW50YWwgbWFwIG9mIHdoZXJlIHRoZSBLRkVOQ0UgbG9naWMgcmVzaWRlcy4gSSdtIG5vdyByZWFkeSB0byBwcm9jZWVkLCBhcm1lZCB3aXRoIGEgY29uZmlybWVkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMjYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTU6MTcuOTgwMDUwNjI1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODU1ODc4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZmVuY2Vfb2JqX3RvX2xsbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9rZmVuY2UvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2tmZW5jZS9jb3JlLmM9MTI0Nz12b2lkIF9fa2ZlbmNlX2ZyZWUodm9pZCAqYWRkcilcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtMTI3My1cXG5tbS9rZmVuY2UvY29yZS5jOjEyNzQ6c3RydWN0IGxsaXN0X25vZGUgKmtmZW5jZV9vYmpfdG9fbGxub2RlKHZvaWQgKmFkZHIpXFxubW0va2ZlbmNlL2NvcmUuYy0xMjc1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTU6MTguMDQ4NjE3MjA4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1OTEwMjIxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4ga2VybmVsIGludGVybmFsczpcblxuKipDb25maXJtaW5nIHRoZSBTY29wZSBhbmQgRHJpbGxpbmcgRG93bioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggZ2xvYmFsIGZ1bmN0aW9ucywgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZC4gVGhlIGNvbnRleHQgc3VnZ2VzdHMgd2UncmUgbGlrZWx5IGluIHRoZSByZWFsbSBvZiBtZW1vcnkgbWFuYWdlbWVudCwgbGlrZWx5IGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudC4gSG1tLCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmUgYSBmaXJtIGdyYXNwIG9mIHRoZSBzaXR1YXRpb24gaGVyZSwgbGV0IG1lIGdvIGFoZWFkIGFuZCBkb3VibGUgY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgYGttZW1sZWFrX21heV9uZWVkX2ZyZWVgIGZ1bmN0aW9uLiBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgcmVjYWxsIGl0cyBwdXJwb3NlLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gYW55IHN1YnRsZXRpZXMuIFRoYXQgZnVuY3Rpb24gY291bGQgYmUgY2VudHJhbCB0byB3aGF0ZXZlciBpc3N1ZSB3ZSdyZSBleGFtaW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTU6MjIuNjM5NjQyNjA4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjE0NDYxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbWVtbGVha19tYXlfbmVlZF9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2ttZW1sZWFrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va21lbWxlYWsuYz0xMTY5PUVYUE9SVF9TWU1CT0xfR1BMKGttZW1sZWFrX2ZyZWUpO1xcbi0tXFxubW0va21lbWxlYWsuYy0xMTcxLS8qKlxcbm1tL2ttZW1sZWFrLmM6MTE3MjogKiBrbWVtbGVha19tYXlfbmVlZF9mcmVlIC0gY2hlY2sgaWYgb2JqZWN0IGlzIHJlZ2lzdGVyZWRcXG5tbS9rbWVtbGVhay5jLTExNzMtICogQHB0cjpcXHRwb2ludGVyIHRvIGJlZ2lubmluZyBvZiB0aGUgb2JqZWN0XFxuLS1cXG5tbS9rbWVtbGVhay5jLTExODgtICovXFxubW0va21lbWxlYWsuYzoxMTg5OmJvb2wgX19yZWYga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpXFxubW0va21lbWxlYWsuYy0xMTkwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTU6MjIuNjk1NzkxNjAyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2OTU3MTY1MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgKmdsb2JhbCBmdW5jdGlvbiosIHNwZWNpZmljYWxseSBga2ZyZWVfbm9sb2NrKClgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgY29uZmlybXMgdGhpcyDigJMgeWVzLCBpdCdzIGEgZ2xvYmFsIGZ1bmN0aW9uIHRoYXQncyBiZWluZyBtb2RpZmllZC4gVGhhdCBtZWFucyBpdOKAmXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgcmVhY2ggb2YgdGhpcyBjaGFuZ2UuXG5cbk5vdywgdGhlIGNvcmUgb2YgaXQgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBga2ZyZWVfbm9sb2NrKClgIHdpdGhpbiBgbW0vc2x1Yi5jYC4gSXQncyBkZXNpZ25lZCB0byBtYWtlIGBrZnJlZV9ub2xvY2soKWAgaGFuZGxlIGEgd2lkZXIgcmFuZ2Ugb2Ygb2JqZWN0czogdGhvc2UgYWxsb2NhdGVkIHZpYSBga21hbGxvYygpYCwgYGttZW1fY2FjaGVfYWxsb2MoKWAsIGFuZCBldmVuIHRoZSBsYXJnZXIgYGttYWxsb2NgIGFsbG9jYXRpb25zLCBub3QgdG8gbWVudGlvbiBLRkVOQ0Ugb2JqZWN0cy4gVGhlIGxvZ2ljIG9mIGRlZmVycmluZyB0aGUgYWN0dWFsIGZyZWVpbmcgdXNpbmcgYGlycV93b3JrYCB3aGVuIG5lY2Vzc2FyeSAobGlrZSB3aGVuIGRlYWxpbmcgd2l0aCBga21lbWxlYWtgIG9yIGBLRkVOQ0VgKSBpcyBjbGV2ZXIgYW5kIHNlZW1zIHN0cmF0ZWdpY2FsbHkgc291bmQsIGEgY29tbW9uIGFwcHJvYWNoIGluIHRoZSBrZXJuZWwuIEJ1dCBpdCBkb2VzIGludHJvZHVjZSBhIG5ldyBwYXRoLCBhIHN1YnRsZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGRpZmZlcmVudCBzY2hlZHVsaW5nIHBhdGhzLiBJdCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuXG5cbkludGVyZXN0aW5nbHksIGl0IGFsc28gdG91Y2hlcyBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpYCBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AsIHNoaWZ0aW5nIGl0cyB1c2UgZnJvbSBga2ZyZWVfcmN1KClgIHRvIGBrZnJlZV9ub2xvY2soKWAuIFRoZSBzaGlmdCBpbiBmdW5jdGlvbiBpcyBub3RhYmxlOyBga2ZyZWVfbm9sb2NrKClgIGlzIGxlc3MgY29uc2VydmF0aXZlIHRoYW4gYGtmcmVlX3JjdSgpYCBpbiB0ZXJtcyBvZiBzeW5jaHJvbml6YXRpb24uIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzY2hlZHVsZXIgY2hhbmdlcyBhbmQgYXJlICpoaWdobHkqIHJlYWNoYWJsZS4gVGhpcyBzaWduaWZpY2FudGx5IGluY3JlYXNlcyB0aGUgZnV6emluZyBzdXJmYWNlIGFuZCBoaWdobGlnaHRzIHRoZWlyIGluaGVyZW50IHZ1bG5lcmFiaWxpdHkuIFRoZSBjb21iaW5hdGlvbiBvZiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2NoZWR1bGVyIGNoYW5nZXMgbWVhbnMgaXQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gZXhwb3NlIHRyaWNreSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMuIFRoaXMgaXMgdGhlIHBsYWNlIHRvIGNvbmNlbnRyYXRlIHRoZSBmdXp6aW5nIGVmZm9ydHMuXG5cbkknbSBjb25maWRlbnQgaW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NzYsIk91dHB1dFRva2VucyI6MjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU1OjM5LjY1Mjk1OTkzNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTEwMzY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVCVUdfS01FTUxFQUtcIixcbiAgICBcIktGRU5DRVwiLFxuICAgIFwiUFJFRU1QVF9SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImtmcmVlX25vbG9ja1wiLFxuICAgIFwic2V0X2NwdXNfYWxsb3dlZF9mb3JjZVwiLFxuICAgIFwia21lbWxlYWtfbWF5X25lZWRfZnJlZVwiLFxuICAgIFwia2ZlbmNlX29ial90b19sbG5vZGVcIixcbiAgICBcImtmZW5jZV9sbG5vZGVfdG9fb2JqXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGtmcmVlX25vbG9jaygpYCBpbiBgbW0vc2x1Yi5jYCB0byBzdXBwb3J0IGZyZWVpbmcgb2JqZWN0cyBhbGxvY2F0ZWQgYnkgYGttYWxsb2MoKWAsIGBrbWVtX2NhY2hlX2FsbG9jKClgLCBhbmQgbGFyZ2Uga21hbGxvY3MsIGFzIHdlbGwgYXMgS0ZFTkNFIG9iamVjdHMuIEl0IGRlZmVycyBmcmVlaW5nIHRvIGFuIGBpcnFfd29ya2AgaWYgbmVjZXNzYXJ5IChlLmcuLCBmb3Iga21lbWxlYWsgb3IgS0ZFTkNFKS4gSXQgYWxzbyBtb2RpZmllcyBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpYCBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AgdG8gdXNlIGBrZnJlZV9ub2xvY2soKWAgaW5zdGVhZCBvZiBga2ZyZWVfcmN1KClgLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2NoZWR1bGVyIGNoYW5nZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX0tNRU1MRUFLXCIsXG4gICAgXCJLRkVOQ0VcIixcbiAgICBcIlBSRUVNUFRfUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrZnJlZV9ub2xvY2tcIixcbiAgICBcInNldF9jcHVzX2FsbG93ZWRfZm9yY2VcIixcbiAgICBcImttZW1sZWFrX21heV9uZWVkX2ZyZWVcIixcbiAgICBcImtmZW5jZV9vYmpfdG9fbGxub2RlXCIsXG4gICAgXCJrZmVuY2VfbGxub2RlX3RvX29ialwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBrZnJlZV9ub2xvY2soKWAgaW4gYG1tL3NsdWIuY2AgdG8gc3VwcG9ydCBmcmVlaW5nIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgLCBga21lbV9jYWNoZV9hbGxvYygpYCwgYW5kIGxhcmdlIGttYWxsb2NzLCBhcyB3ZWxsIGFzIEtGRU5DRSBvYmplY3RzLiBJdCBkZWZlcnMgZnJlZWluZyB0byBhbiBgaXJxX3dvcmtgIGlmIG5lY2Vzc2FyeSAoZS5nLiwgZm9yIGttZW1sZWFrIG9yIEtGRU5DRSkuIEl0IGFsc28gbW9kaWZpZXMgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKWAgaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgIHRvIHVzZSBga2ZyZWVfbm9sb2NrKClgIGluc3RlYWQgb2YgYGtmcmVlX3JjdSgpYC4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxlciBjaGFuZ2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTU6MzkuNzg4MDcxNDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mzk2MDMyNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTU6MzkuNzg4NzE3ODhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTczOTUzODEzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBmcmVlaW5nIHBhdGhzLCBzcGVjaWZpY2FsbHkgZXh0ZW5kaW5nIGBrZnJlZV9ub2xvY2soKWAgdG8gaGFuZGxlIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgIGFuZCBga21lbV9jYWNoZV9hbGxvYygpYCwgaW5jbHVkaW5nIGxhcmdlIGttYWxsb2NzIGFuZCBLRkVOQ0Ugb2JqZWN0cy4gSXQgZGVmZXJzIGZyZWVpbmcgdG8gYW4gYGlycV93b3JrYCB1c2luZyBhIGxvY2tsZXNzIGxpc3QgKGBsbGlzdGApIHdoZW4gbmVjZXNzYXJ5LiBUaGUgY2hhbmdlcyBpbnZvbHZlIG92ZXJ3cml0aW5nIHBhcnRzIG9mIHRoZSBmcmVlZCBvYmplY3RzIChsaWtlIHRoZSBmcmVlcG9pbnRlciBvciB0aGUgZmlyc3Qgd29yZCBvZiBhIGxhcmdlIGttYWxsb2Mgb2JqZWN0KSB0byBzdG9yZSB0aGUgYGxsaXN0X25vZGVgLiBTaW5jZSB0aGVzZSBvYmplY3RzIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBmcmVlZCwgYW55IGFjY2VzcyB0byB0aGVtIHdvdWxkIGNvbnN0aXR1dGUgYSB1c2UtYWZ0ZXItZnJlZSBidWcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYyBvZiBhY3RpdmUgb2JqZWN0cy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24pIHdpbGwgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBTTFVCIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgZXhwb3NlZCBoZXJlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNWI4NmJkYzU5ODRiNmIwYmEzMWRlMDc5NTAxZGU2YjIxNjE5ODc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNjo1Mzo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2ZlbmNlLmggYi9pbmNsdWRlL2xpbnV4L2tmZW5jZS5oXG5pbmRleCBlNTgyMmY2ZTdmMjc5Li4wMDcyMWM4NTI1OGRjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rZmVuY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rZmVuY2UuaFxuQEAgLTE4OCw2ICsxODgsOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayBib29sIGtmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RydWN0IGxsaXN0X25vZGUgKmtmZW5jZV9vYmpfdG9fbGxub2RlKHZvaWQgKmFkZHIpO1xuK3ZvaWQgKmtmZW5jZV9sbG5vZGVfdG9fb2JqKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpO1xuK1xuIC8qKlxuICAqIGtmZW5jZV9oYW5kbGVfcGFnZV9mYXVsdCgpIC0gcGVyZm9ybSBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciBLRkVOQ0UgcGFnZXNcbiAgKiBAYWRkcjogZmF1bHRpbmcgYWRkcmVzc1xuQEAgLTIzNSw2ICsyMzgsOCBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBrZmVuY2Vfa3NpemUoY29uc3Qgdm9pZCAqYWRkcikgeyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCAqa2ZlbmNlX29iamVjdF9zdGFydChjb25zdCB2b2lkICphZGRyKSB7IHJldHVybiBOVUxMOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIF9fa2ZlbmNlX2ZyZWUodm9pZCAqYWRkcikgeyB9XG4gc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBrZmVuY2VfZnJlZSh2b2lkICphZGRyKSB7IHJldHVybiBmYWxzZTsgfVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X25vZGUgKmtmZW5jZV9vYmpfdG9fbGxub2RlKHZvaWQgKmFkZHIpIHsgcmV0dXJuIE5VTEw7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgKmtmZW5jZV9sbG5vZGVfdG9fb2JqKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpIHsgcmV0dXJuIE5VTEw7IH1cbiBzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGtmZW5jZV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsXG4gXHRcdFx0XHRcdFx0XHQgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21lbWxlYWsuaCBiL2luY2x1ZGUvbGludXgva21lbWxlYWsuaFxuaW5kZXggZmJkNDI0YjJhYmIxNC4uNTJmNzVmMTBhOWNlNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva21lbWxlYWsuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oXG5AQCAtMjIsNiArMjIsNyBAQCBleHRlcm4gdm9pZCBrbWVtbGVha19hbGxvY19wZXJjcHUoY29uc3Qgdm9pZCBfX3BlcmNwdSAqcHRyLCBzaXplX3Qgc2l6ZSxcbiBleHRlcm4gdm9pZCBrbWVtbGVha192bWFsbG9jKGNvbnN0IHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIHNpemVfdCBzaXplLFxuIFx0XHRcdCAgICAgZ2ZwX3QgZ2ZwKSBfX3JlZjtcbiBleHRlcm4gdm9pZCBrbWVtbGVha19mcmVlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7XG4rYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7XG4gZXh0ZXJuIHZvaWQga21lbWxlYWtfZnJlZV9wYXJ0KGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpIF9fcmVmO1xuIGV4dGVybiB2b2lkIGttZW1sZWFrX2ZyZWVfcGVyY3B1KGNvbnN0IHZvaWQgX19wZXJjcHUgKnB0cikgX19yZWY7XG4gZXh0ZXJuIHZvaWQga21lbWxlYWtfdXBkYXRlX3RyYWNlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7XG5AQCAtNTAsNiArNTEsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKGNvbnN0IHZvaWQgKnB0ciwgc2xhYl9mbGFnc190IGZsYWdzKVxuIFx0XHRrbWVtbGVha19mcmVlKHB0cik7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncylcbit7XG4rXHRpZiAoIShmbGFncyBcdTAwMjYgU0xBQl9OT0xFQUtUUkFDRSkpXG4rXHRcdHJldHVybiBrbWVtbGVha19tYXlfbmVlZF9mcmVlKHB0cik7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19lcmFzZSh2b2lkICoqcHRyKVxuIHtcbiBcdCpwdHIgPSBOVUxMO1xuQEAgLTg2LDYgKzk1LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19mcmVlX3BhcnQoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSlcbiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXG4ge1xuIH1cbitzdGF0aWMgaW5saW5lIGJvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitzdGF0aWMgaW5saW5lIGJvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9wZXJjcHUoY29uc3Qgdm9pZCBfX3BlcmNwdSAqcHRyKVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NvcmUuYyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbmluZGV4IDk2MjI2NzA3YzJmNjEuLmQyOTI5ZTRlMjNmMTMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jXG4rKysgYi9rZXJuZWwvc2NoZWQvY29yZS5jXG5AQCAtMjgwNywyMCArMjgwNywxNSBAQCB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZm9yY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbmV3X21hc1xuIFx0XHQudXNlcl9tYXNrID0gTlVMTCxcbiBcdFx0LmZsYWdzICAgICA9IFNDQV9VU0VSLFx0LyogY2xlYXIgdGhlIHVzZXIgcmVxdWVzdGVkIG1hc2sgKi9cbiBcdH07XG4tXHR1bmlvbiBjcHVtYXNrX3JjdWhlYWQge1xuLVx0XHRjcHVtYXNrX3QgY3B1bWFzaztcbi1cdFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbi1cdH07XG4gXG4gXHRzY29wZWRfZ3VhcmQgKF9fdGFza19ycV9sb2NrLCBwKVxuIFx0XHRkb19zZXRfY3B1c19hbGxvd2VkKHAsIFx1MDAyNmFjKTtcbiBcbiBcdC8qXG4gXHQgKiBCZWNhdXNlIHRoaXMgaXMgY2FsbGVkIHdpdGggcC1cdTAwM2VwaV9sb2NrIGhlbGQsIGl0IGlzIG5vdCBwb3NzaWJsZVxuLVx0ICogdG8gdXNlIGtmcmVlKCkgaGVyZSAod2hlbiBQUkVFTVBUX1JUPXkpLCB0aGVyZWZvcmUgcHVudCB0byB1c2luZ1xuLVx0ICoga2ZyZWVfcmN1KCkuXG4rXHQgKiB0byB1c2Uga2ZyZWUoKSBoZXJlICh3aGVuIFBSRUVNUFRfUlQ9eSksIHRodXMgdXNlIGtmcmVlX25vbG9jaygpXG4gXHQgKi9cbi1cdGtmcmVlX3JjdSgodW5pb24gY3B1bWFza19yY3VoZWFkICopYWMudXNlcl9tYXNrLCByY3UpO1xuK1x0a2ZyZWVfbm9sb2NrKGFjLnVzZXJfbWFzayk7XG4gfVxuIFxuIGludCBkdXBfdXNlcl9jcHVzX3B0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMsXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL3NjaGVkLmggYi9rZXJuZWwvc2NoZWQvc2NoZWQuaFxuaW5kZXggNTZhY2Y1MDJiYTI2MC4uNmE4ZDA1NzhlOTYzMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oXG4rKysgYi9rZXJuZWwvc2NoZWQvc2NoZWQuaFxuQEAgLTI4ODYsMTIgKzI4ODYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGFza19hbGxvd2VkX29uX2NwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjcHUpXG4gXG4gc3RhdGljIGlubGluZSBjcHVtYXNrX3QgKmFsbG9jX3VzZXJfY3B1c19wdHIoaW50IG5vZGUpXG4ge1xuLVx0Lypcbi1cdCAqIFNlZSBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKCkgYWJvdmUgZm9yIHRoZSByY3VfaGVhZCB1c2FnZS5cbi1cdCAqL1xuLVx0aW50IHNpemUgPSBtYXhfdChpbnQsIGNwdW1hc2tfc2l6ZSgpLCBzaXplb2Yoc3RydWN0IHJjdV9oZWFkKSk7XG4tXG4tXHRyZXR1cm4ga21hbGxvY19ub2RlKHNpemUsIEdGUF9LRVJORUwsIG5vZGUpO1xuK1x0cmV0dXJuIGttYWxsb2Nfbm9kZShjcHVtYXNrX3NpemUoKSwgR0ZQX0tFUk5FTCwgbm9kZSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpnZXRfcHVzaF90YXNrKHN0cnVjdCBycSAqcnEpXG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2NvcmUuYyBiL21tL2tmZW5jZS9jb3JlLmNcbmluZGV4IDY1NzdiZDc2OTU0ZWIuLjQyNTE5ZDI0Njg3ZmYgMTAwNjQ0XG4tLS0gYS9tbS9rZmVuY2UvY29yZS5jXG4rKysgYi9tbS9rZmVuY2UvY29yZS5jXG5AQCAtMTI3MSw2ICsxMjcxLDIwIEBAIHZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKVxuIFx0fVxuIH1cbiBcbitzdHJ1Y3QgbGxpc3Rfbm9kZSAqa2ZlbmNlX29ial90b19sbG5vZGUodm9pZCAqYWRkcilcbit7XG4rXHRzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhICptZXRhID0gYWRkcl90b19tZXRhZGF0YSgodW5zaWduZWQgbG9uZylhZGRyKTtcbitcbitcdHJldHVybiBcdTAwMjZtZXRhLVx1MDAzZWxsbm9kZTtcbit9XG4rXG4rdm9pZCAqa2ZlbmNlX2xsbm9kZV90b19vYmooc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSlcbit7XG4rXHRzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhICptZXRhID0gY29udGFpbmVyX29mKGxsbm9kZSwgc3RydWN0IGtmZW5jZV9tZXRhZGF0YSwgbGxub2RlKTtcbitcbitcdHJldHVybiAodm9pZCAqKW1ldGEtXHUwMDNlYWRkcjtcbit9XG4rXG4gYm9vbCBrZmVuY2VfaGFuZGxlX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGlzX3dyaXRlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB7XG4gXHRjb25zdCBpbnQgcGFnZV9pbmRleCA9IChhZGRyIC0gKHVuc2lnbmVkIGxvbmcpX19rZmVuY2VfcG9vbCkgLyBQQUdFX1NJWkU7XG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZS5oIGIvbW0va2ZlbmNlL2tmZW5jZS5oXG5pbmRleCAxZjYxOGY5YjBkMTJkLi4wZmNhMWRjMmM3OTQxIDEwMDY0NFxuLS0tIGEvbW0va2ZlbmNlL2tmZW5jZS5oXG4rKysgYi9tbS9rZmVuY2Uva2ZlbmNlLmhcbkBAIC01OCw3ICs1OCwxMCBAQCBzdHJ1Y3Qga2ZlbmNlX3RyYWNrIHtcbiAvKiBLRkVOQ0UgbWV0YWRhdGEgcGVyIGd1YXJkZWQgYWxsb2NhdGlvbi4gKi9cbiBzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdCBfX2d1YXJkZWRfYnkoXHUwMDI2a2ZlbmNlX2ZyZWVsaXN0X2xvY2spO1x0LyogRnJlZWxpc3Qgbm9kZS4gKi9cbi1cdHN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDtcdC8qIEZvciBkZWxheWVkIGZyZWVpbmcuICovXG4rXHR1bmlvbiB7XG4rXHRcdHN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDtcdC8qIEZvciBkZWxheWVkIGZyZWVpbmcuICovXG4rXHRcdHN0cnVjdCBsbGlzdF9ub2RlIGxsbm9kZTtcdC8qIEZvciBrZnJlZV9ub2xvY2soKS4gKi9cbitcdH07XG4gXG4gXHQvKlxuIFx0ICogTG9jayBwcm90ZWN0aW5nIGJlbG93IGRhdGE7IHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBvZiB0aGUgYmVsb3cgZGF0YSxcbmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuY1xuaW5kZXggN2M3YmExN2NlN2FmMC4uZTM1NjBjZTgyNjMyNiAxMDA2NDRcbi0tLSBhL21tL2ttZW1sZWFrLmNcbisrKyBiL21tL2ttZW1sZWFrLmNcbkBAIC0xMTY4LDYgKzExNjgsNDggQEAgdm9pZCBfX3JlZiBrbWVtbGVha19mcmVlKGNvbnN0IHZvaWQgKnB0cilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoa21lbWxlYWtfZnJlZSk7XG4gXG4rLyoqXG4rICoga21lbWxlYWtfbWF5X25lZWRfZnJlZSAtIGNoZWNrIGlmIG9iamVjdCBpcyByZWdpc3RlcmVkXG4rICogQHB0cjpcdHBvaW50ZXIgdG8gYmVnaW5uaW5nIG9mIHRoZSBvYmplY3RcbisgKlxuKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGtlcm5lbCBhbGxvY2F0b3Igd2hlbiBhbiBvYmplY3Qgc2hvdWxkIGJlXG4rICogZnJlZWQgYnV0IHRoZSBjYWxsZXIgY29udGV4dCBtaWdodCBiZSB1bnNhZmUgdG8gc3BpbiBvbiB0aGUgaW50ZXJuYWwgbG9ja3MuXG4rICpcbisgKiBJdCB3aWxsIHRoZXJlZm9yZSBvbmx5IHVzZSB0cnlsb2NrIGFuZCB0aHVzIG1pZ2h0IHJldHVybiBhIGZhbHNlIHBvc2l0aXZlXG4rICogaWYgdGhlIHRyeWxvY2sgZmFpbHMgYW5kIHRoZSBzdGF0dXMgY2Fubm90IGJlIGRldGVybWluZWQuXG4rICpcbisgKiBGb3Igb2JqZWN0cyB0aGF0IChtaWdodCkgbmVlZCBmcmVlLCB0aGUgYWxsb2NhdG9yIGhhcyB0byBkZWZlciB0aGUgYWN0dWFsXG4rICogZnJlZWluZyB0byBhIHNhZmUgY29udGV4dC5cbisgKlxuKyAqIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgbW9zdCBvYmplY3RzIGZyZWVkIGZyb20gdGhlIHVuc2FmZSBjb250ZXh0IGFyZSBhbHNvXG4rICogYWxsb2NhdGVkIGluIHN1Y2ggY29udGV4dCBhbmQgdGh1cyBhcmUgbm90IHJlZ2lzdGVyZWQgaW4ga21lbWxlYWssIHNvIGl0J3NcbisgKiB1bmxpa2VseSB0aGUgZGVmZXJlZCBmcmVlaW5nIHdpbGwgYmUgbmVjZXNzYXJ5IGp1c3QgYmVjYXVzZSBrbWVtbGVhayBpc1xuKyAqIGVuYWJsZWQuXG4rICovXG4rYm9vbCBfX3JlZiBrbWVtbGVha19tYXlfbmVlZF9mcmVlKGNvbnN0IHZvaWQgKnB0cilcbit7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0c3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0O1xuK1xuK1x0cHJfZGVidWcoXCIlcygweCVweClcXG5cIiwgX19mdW5jX18sIHB0cik7XG4rXG4rXHRpZiAoIWttZW1sZWFrX2ZyZWVfZW5hYmxlZCB8fCAhcHRyIHx8IElTX0VSUihwdHIpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBPbiBVUCwgcmF3X3NwaW5fdHJ5bG9jaygpIGFsd2F5cyBzdWNjZWVkcyBldmVuIHdoZW4gaXQgaXMgbG9ja2VkICovXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1NNUCkgXHUwMDI2XHUwMDI2IGluX25taSgpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGlmICghcmF3X3NwaW5fdHJ5bG9ja19pcnFzYXZlKFx1MDAyNmttZW1sZWFrX2xvY2ssIGZsYWdzKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRvYmplY3QgPSBfX2xvb2t1cF9vYmplY3QoKHVuc2lnbmVkIGxvbmcpcHRyLCAwLCAwKTtcbitcbitcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmttZW1sZWFrX2xvY2ssIGZsYWdzKTtcbitcbitcdHJldHVybiAhIW9iamVjdDtcbit9XG4rXG4gLyoqXG4gICoga21lbWxlYWtfZnJlZV9wYXJ0IC0gcGFydGlhbGx5IHVucmVnaXN0ZXIgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgb2JqZWN0XG4gICogQHB0cjpcdHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvciBpbnNpZGUgdGhlIG9iamVjdC4gVGhpcyBhbHNvXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCBiOWFlYjAyYTg4MGYxLi4zYmU5OGZhYTlmMGRlIDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4rKysgYi9tbS9zbHViLmNcbkBAIC00MDUwLDYgKzQwNTAsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9hbGwoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXG4gc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrIHtcbiBcdHN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHM7XG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzX2tmZW5jZTtcbitcdHN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHNfbGFyZ2Vfa21hbGxvYztcbiBcdHN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHNfYnlfcmN1O1xuIFx0c3RydWN0IGxsaXN0X2hlYWQgcmN1X3NoZWF2ZXM7XG4gXHRzdHJ1Y3QgaXJxX3dvcmsgd29yaztcbkBAIC00MDU5LDYgKzQwNjEsOCBAQCBzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspO1xuIFxuIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmssIGRlZmVycmVkX3BlcmNwdV93b3JrKSA9IHtcbiBcdC5vYmplY3RzID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHMpLFxuK1x0Lm9iamVjdHNfa2ZlbmNlID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHNfa2ZlbmNlKSxcbitcdC5vYmplY3RzX2xhcmdlX2ttYWxsb2MgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0c19sYXJnZV9rbWFsbG9jKSxcbiBcdC5vYmplY3RzX2J5X3JjdSA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzX2J5X3JjdSksXG4gXHQucmN1X3NoZWF2ZXMgPSBMTElTVF9IRUFEX0lOSVQocmN1X3NoZWF2ZXMpLFxuIFx0LndvcmsgPSBJUlFfV09SS19JTklUKGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKSxcbkBAIC02MzYzLDYgKzYzNjcsMjEgQEAgc3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWRcbitfX2ZyZWVfbGFyZ2Vfa21hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcbit7XG4rXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihwYWdlKTtcbitcbitcdG1vZF9scnV2ZWNfcGFnZV9zdGF0ZShwYWdlLCBOUl9TTEFCX1VOUkVDTEFJTUFCTEVfQixcbitcdFx0XHQgICAgICAtKFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpKTtcbitcdF9fQ2xlYXJQYWdlTGFyZ2VLbWFsbG9jKHBhZ2UpO1xuK1xuK1x0aWYgKGZyZWVfZmxhZ3MgXHUwMDI2IFNMQUJfRlJFRV9OT0xPQ0spXG4rXHRcdGZyZWVfZnJvemVuX3BhZ2VzX25vbG9jayhwYWdlLCBvcmRlcik7XG4rXHRlbHNlXG4rXHRcdGZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyKTtcbit9XG4rXG4gLypcbiAgKiBJbiBQUkVFTVBUX1JUIGlycV93b3JrIHJ1bnMgaW4gcGVyLWNwdSBrdGhyZWFkLCBzbyBpdCdzIHNhZmVcbiAgKiB0byB0YWtlIHNsZWVwaW5nIHNwaW5fbG9ja3MgZnJvbSBfX3NsYWJfZnJlZSgpLlxuQEAgLTYzNzEsMTYgKzYzOTAsMTIgQEAgc3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxuIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcbi1cdHN0cnVjdCBsbGlzdF9oZWFkICpvYmpzLCAqb2Jqc19ieV9yY3UsICpyY3Vfc2hlYXZlcztcbiBcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsICpwb3MsICp0O1xuIFx0c3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLCAqbmV4dDtcbiBcbiBcdGRwdyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmssIHdvcmspO1xuLVx0cmN1X3NoZWF2ZXMgPSBcdTAwMjZkcHctXHUwMDNlcmN1X3NoZWF2ZXM7XG4tXHRvYmpzID0gXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHM7XG4tXHRvYmpzX2J5X3JjdSA9IFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzX2J5X3JjdTtcbiBcbi1cdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwob2Jqcyk7XG4rXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzKTtcbiBcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHtcbiBcdFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XG4gXHRcdHN0cnVjdCBzbGFiICpzbGFiO1xuQEAgLTYzOTIsNiArNjQwNyw4IEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcbiBcdFx0LyogUG9pbnQgJ3gnIGJhY2sgdG8gdGhlIGJlZ2lubmluZyBvZiBhbGxvY2F0ZWQgb2JqZWN0ICovXG4gXHRcdHggLT0gcy1cdTAwM2VvZmZzZXQ7XG4gXG4rXHRcdGttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKHgsIHMtXHUwMDNlZmxhZ3MpO1xuK1xuIFx0XHQvKlxuIFx0XHQgKiBXZSB1c2VkIGZyZWVwb2ludGVyIGluICd4JyB0byBsaW5rICd4JyBpbnRvIGRmLVx1MDAzZW9iamVjdHMuXG4gXHRcdCAqIENsZWFyIGl0IHRvIE5VTEwgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmUgZGV0ZWN0aW9uXG5AQCAtNjQwMyw3ICs2NDIwLDMwIEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcbiBcdFx0c3RhdChzLCBGUkVFX1NMT1dQQVRIKTtcbiBcdH1cbiBcbi1cdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwob2Jqc19ieV9yY3UpO1xuK1x0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZkcHctXHUwMDNlb2JqZWN0c19rZmVuY2UpO1xuK1x0bGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHQsIGxsbm9kZSkge1xuK1x0XHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcbitcdFx0c3RydWN0IHNsYWIgKnNsYWI7XG4rXHRcdHZvaWQgKm9iaiA9IGtmZW5jZV9sbG5vZGVfdG9fb2JqKHBvcyk7XG4rXG4rXHRcdHNsYWIgPSB2aXJ0X3RvX3NsYWIob2JqKTtcbitcdFx0cyA9IHNsYWItXHUwMDNlc2xhYl9jYWNoZTtcbitcbitcdFx0a21lbWxlYWtfZnJlZV9yZWN1cnNpdmUob2JqLCBzLVx1MDAzZWZsYWdzKTtcbitcbitcdFx0X19rZmVuY2VfZnJlZShvYmopO1xuK1x0fVxuK1xuK1x0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZkcHctXHUwMDNlb2JqZWN0c19sYXJnZV9rbWFsbG9jKTtcbitcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHtcbitcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UocG9zKTtcbitcbitcdFx0a21lbWxlYWtfZnJlZShwb3MpO1xuK1xuK1x0XHRfX2ZyZWVfbGFyZ2Vfa21hbGxvY19wYWdlKHBhZ2UsIFNMQUJfRlJFRV9ERUZBVUxUKTtcbitcdH1cbitcbitcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHNfYnlfcmN1KTtcbiBcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHtcbiBcdFx0dm9pZCAqaGVhZCA9IHBvcztcbiBcdFx0dm9pZCAqb2JqcCA9IGt2bWFsbG9jX29ial9zdGFydF9hZGRyKGhlYWQpO1xuQEAgLTY0MTEsMjEgKzY0NTEsNjAgQEAgc3RhdGljIHZvaWQgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3b3JrKVxuIFx0XHRrdmZyZWVfY2FsbF9yY3UoaGVhZCwgb2JqcCk7XG4gXHR9XG4gXG4tXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKHJjdV9zaGVhdmVzKTtcbitcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2ZHB3LVx1MDAzZXJjdV9zaGVhdmVzKTtcbiBcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2hlYWYsIG5leHQsIGxsbm9kZSwgbGxub2RlKVxuIFx0XHRjYWxsX3JjdShcdTAwMjZzaGVhZi1cdTAwM2VyY3VfaGVhZCwgcmN1X2ZyZWVfc2hlYWYpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBkZWZlcl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpoZWFkKVxuK3N0YXRpYyB2b2lkIGRlZmVyX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcbiB7XG4gXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4rXG4rXHQvKlxuK1x0ICogUGxhY2UgdGhlIGxsaXN0IG5vZGUgd2hlcmUgdGhlIGZyZWVwb2ludGVyIHdvdWxkIGJlIGlmIHdlIGZyZWVkIHRoZVxuK1x0ICogb2JqZWN0IGltbWVkaWF0ZWx5LiBUaGF0IG1lYW5zIHdlIGNhbiB3cml0ZSB0aGVyZSBzYWZlbHksIG9ubHkgbmVlZFxuK1x0ICogdG8gcmVtb3ZlIGthc2FuIHRhZyBmaXJzdC5cbitcdCAqL1xuK1x0bGxub2RlID0ga2FzYW5fcmVzZXRfdGFnKG9iaikgKyBzLVx1MDAzZW9mZnNldDtcbiBcbiBcdGd1YXJkKHByZWVtcHQpKCk7XG4gXG4tXHRoZWFkID0ga2FzYW5fcmVzZXRfdGFnKGhlYWQpO1xuK1x0ZHB3ID0gdGhpc19jcHVfcHRyKFx1MDAyNmRlZmVycmVkX3BlcmNwdV93b3JrKTtcbitcdGlmIChsbGlzdF9hZGQobGxub2RlLCBcdTAwMjZkcHctXHUwMDNlb2JqZWN0cykpXG4rXHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNmRwdy1cdTAwM2V3b3JrKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZGVmZXJfZnJlZV9rZmVuY2Uodm9pZCAqb2JqKVxuK3tcbitcdHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3O1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcbitcbitcdC8qIGthc2FuX3Jlc2V0X3RhZygpIGlzIG5vdCBuZWNlc3NhcnksIGtmZW5jZSBvYmplY3RzIGFyZSBub3QgdGFnZ2VkICovXG4rXHRsbG5vZGUgPSBrZmVuY2Vfb2JqX3RvX2xsbm9kZShvYmopO1xuK1xuK1x0Z3VhcmQocHJlZW1wdCkoKTtcbitcbitcdGRwdyA9IHRoaXNfY3B1X3B0cihcdTAwMjZkZWZlcnJlZF9wZXJjcHVfd29yayk7XG4rXHRpZiAobGxpc3RfYWRkKGxsbm9kZSwgXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHNfa2ZlbmNlKSlcbitcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2ZHB3LVx1MDAzZXdvcmspO1xuK31cbitcbitzdGF0aWMgdm9pZCBkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2Modm9pZCAqb2JqKVxuK3tcbitcdHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3O1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcbitcbitcdC8qXG4rXHQgKiB3ZSBjYW4gc2ltcGx5IHVzZSB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGFyZ2Uga21hbGxvYyBvYmplY3RcbitcdCAqIGZvciB0aGUgbGxub2RlLCBhcyB0aGVyZSdzIG5vIGN0b3Igb3IgVFlQRVNBRkVfQllfUkNVXG4rXHQgKi9cbitcdGxsbm9kZSA9IGthc2FuX3Jlc2V0X3RhZyhvYmopO1xuK1xuK1x0Z3VhcmQocHJlZW1wdCkoKTtcbiBcbiBcdGRwdyA9IHRoaXNfY3B1X3B0cihcdTAwMjZkZWZlcnJlZF9wZXJjcHVfd29yayk7XG4tXHRpZiAobGxpc3RfYWRkKGhlYWQgKyBzLVx1MDAzZW9mZnNldCwgXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHMpKVxuK1x0aWYgKGxsaXN0X2FkZChsbG5vZGUsIFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzX2xhcmdlX2ttYWxsb2MpKVxuIFx0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZkcHctXHUwMDNld29yayk7XG4gfVxuIFxuQEAgLTY2NzcsOSArNjc1NiwxMSBAQCBzaXplX3Qga3NpemUoY29uc3Qgdm9pZCAqb2JqcClcbiB9XG4gRVhQT1JUX1NZTUJPTChrc2l6ZSk7XG4gXG4tc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpXG4rc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QsXG4rXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGludCBvcmRlciA9IGNvbXBvdW5kX29yZGVyKHBhZ2UpO1xuK1x0Ym9vbCBub2xvY2sgPSBmcmVlX2ZsYWdzIFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghUGFnZUxhcmdlS21hbGxvYyhwYWdlKSkpIHtcbiBcdFx0ZHVtcF9wYWdlKHBhZ2UsIFwiTm90IGEga21hbGxvYyBhbGxvY2F0aW9uXCIpO1xuQEAgLTY2ODksMTQgKzY3NzAsMTYgQEAgc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpXG4gXHRpZiAoV0FSTl9PTl9PTkNFKG9yZGVyID09IDApKVxuIFx0XHRwcl93YXJuX29uY2UoXCJvYmplY3QgcG9pbnRlcjogMHglcFxcblwiLCBvYmplY3QpO1xuIFxuLVx0a21lbWxlYWtfZnJlZShvYmplY3QpO1xuK1x0aWYgKCFub2xvY2spXG4rXHRcdGttZW1sZWFrX2ZyZWUob2JqZWN0KTtcbitcbiBcdGthc2FuX2tmcmVlX2xhcmdlKG9iamVjdCk7XG4gXHRrbXNhbl9rZnJlZV9sYXJnZShvYmplY3QpO1xuIFxuLVx0bW9kX2xydXZlY19wYWdlX3N0YXRlKHBhZ2UsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CLFxuLVx0XHRcdCAgICAgIC0oUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlcikpO1xuLVx0X19DbGVhclBhZ2VMYXJnZUttYWxsb2MocGFnZSk7XG4tXHRmcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlcik7XG4rXHRpZiAodW5saWtlbHkobm9sb2NrIFx1MDAyNlx1MDAyNiBrbWVtbGVha19tYXlfbmVlZF9mcmVlKG9iamVjdCkpKVxuK1x0XHRkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2Mob2JqZWN0KTtcbitcdGVsc2VcbitcdFx0X19mcmVlX2xhcmdlX2ttYWxsb2NfcGFnZShwYWdlLCBmcmVlX2ZsYWdzKTtcbiB9XG4gXG4gLypcbkBAIC02NzE4LDcgKzY4MDEsNyBAQCB2b2lkIGt2ZnJlZV9yY3VfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIFx0XHRpZiAoc2xhYilcbiBcdFx0XHRzbGFiX2ZyZWUoc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBzbGFiLCBvYmosIF9SRVRfSVBfKTtcbiBcdFx0ZWxzZVxuLVx0XHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmopO1xuK1x0XHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmosIFNMQUJfRlJFRV9ERUZBVUxUKTtcbiBcdH1cbiB9XG4gXG5AQCAtNjc0NCw3ICs2ODI3LDcgQEAgdm9pZCBrZnJlZShjb25zdCB2b2lkICpvYmplY3QpXG4gXHRzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xuIFx0aWYgKCFzbGFiKSB7XG4gXHRcdC8qIGttYWxsb2Nfbm9sb2NrKCkgZG9lc24ndCBzdXBwb3J0IGxhcmdlIGttYWxsb2MgKi9cbi1cdFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsICh2b2lkICopb2JqZWN0KTtcbitcdFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsICh2b2lkICopb2JqZWN0LCBTTEFCX0ZSRUVfREVGQVVMVCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC02NzU1LDE1ICs2ODM4LDE0IEBAIEVYUE9SVF9TWU1CT0woa2ZyZWUpO1xuIFxuIC8qXG4gICogQ2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIHJhd19zcGlubG9ja190IG9yIGZyb20gSVJRIGFuZCBOTUksXG4tICogYnV0IE9OTFkgZm9yIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGttYWxsb2Nfbm9sb2NrKCkuXG4tICogRGVidWcgY2hlY2tzIChsaWtlIGttZW1sZWFrIGFuZCBrZmVuY2UpIHdlcmUgc2tpcHBlZCBvbiBhbGxvY2F0aW9uLFxuLSAqIGhlbmNlXG4tICogb2JqID0ga21hbGxvYygpOyBrZnJlZV9ub2xvY2sob2JqKTtcbi0gKiB3aWxsIG1pc3Mga21lbWxlYWsva2ZlbmNlIGJvb2sga2VlcGluZyBhbmQgd2lsbCBjYXVzZSBmYWxzZSBwb3NpdGl2ZXMuXG4tICogbGFyZ2Vfa21hbGxvYyBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlci5cbisgKiBidXQgbWF5IGRlZmVyIGZyZWVpbmcgdG8gaXJxX3dvcmsoKSBpbiBzb21lIGNhc2VzLlxuKyAqXG4rICogSW50ZW5kZWQgbWFpbmx5IGZvciBvYmplY3RzIGFsbG9jYXRlZCBmcm9tIGttYWxsb2Nfbm9sb2NrKCksIGJ1dCBjYW4gaGFuZGxlXG4rICogYWxzbyBrbWVtX2NhY2hlX2FsbG9jKCkgYW5kIGttYWxsb2MoKSBvYmplY3RzLCBpbmNsdWRpbmcgbGFyZ2Vfa21hbGxvYy5cbiAgKi9cbiB2b2lkIGtmcmVlX25vbG9jayhjb25zdCB2b2lkICpvYmplY3QpXG4ge1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbiBcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuIFx0dm9pZCAqeCA9ICh2b2lkICopb2JqZWN0O1xuQEAgLTY3NzEsOSArNjg1MywxMCBAQCB2b2lkIGtmcmVlX25vbG9jayhjb25zdCB2b2lkICpvYmplY3QpXG4gXHRpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihvYmplY3QpKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0c2xhYiA9IHZpcnRfdG9fc2xhYihvYmplY3QpO1xuK1x0cGFnZSA9IHZpcnRfdG9fcGFnZShvYmplY3QpO1xuK1x0c2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcbiBcdGlmICh1bmxpa2VseSghc2xhYikpIHtcbi1cdFx0V0FSTl9PTkNFKDEsIFwibGFyZ2Vfa21hbGxvYyBpcyBub3Qgc3VwcG9ydGVkIGJ5IGtmcmVlX25vbG9jaygpXCIpO1xuK1x0XHRmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgKHZvaWQgKilvYmplY3QsIFNMQUJfRlJFRV9OT0xPQ0spO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtNjc5MSw2ICs2ODc0LDEyIEBAIHZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcbiBcdCAqIHNpbmNlIHRoZXkgdGFrZSBzcGlubG9ja3Mgb3Igbm90IHNhZmUgZnJvbSBhbnkgY29udGV4dC5cbiBcdCAqL1xuIFx0a21zYW5fc2xhYl9mcmVlKHMsIHgpO1xuK1xuK1x0aWYgKGlzX2tmZW5jZV9hZGRyZXNzKHgpKSB7XG4rXHRcdGRlZmVyX2ZyZWVfa2ZlbmNlKHgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogSWYgS0FTQU4gZmluZHMgYSBrZXJuZWwgYnVnIGl0IHdpbGwgZG8ga2FzYW5fcmVwb3J0X2ludmFsaWRfZnJlZSgpXG4gXHQgKiB3aGljaCB3aWxsIGNhbGwgcmF3X3NwaW5fbG9ja19pcnFzYXZlKCkgd2hpY2ggaXMgdGVjaG5pY2FsbHlcbkBAIC02ODA5LDkgKzY4OTgsMjMgQEAgdm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxuIFx0ICovXG4gXHRrYXNhbl9zbGFiX2ZyZWUocywgeCwgZmFsc2UsIGZhbHNlLCAvKiBza2lwIHF1YXJhbnRpbmUgKi90cnVlKTtcbiBcbitcdC8qXG4rXHQgKiB3aXRoIGtmcmVlKCkgdGhlIGttZW1sZWFrIGhhbmRsaW5nIGhhcHBlbnMgbXVjaCBzb29uZXIsIGJ1dCBmb3JcbitcdCAqIGRlZmVyaW5nIHdlIG5lZWQgdG8gd3JpdGUgbGxub2RlIHRvIHRoZSBvYmplY3QncyBmcmVlcG9pbnRlciBzb1xuK1x0ICogd2Ugc2hvdWxkIGhhdmUgaXQgaW4gdGhlIHN0YXRlIHdoZW4gaXQncyBubyBsb25nZXIgdHJlYXRlZCBhc1xuK1x0ICogYWxsb2NhdGVkIGJ5IGthc2FuIGV0Yy5cbitcdCAqXG4rXHQgKiBkZWZlcl9mcmVlIHdpbGwgYWxzbyByZXNldCB0aGUgcG9pbnRlciB0YWcsIGJ1dCBpdCdzIG9rIHRvIGRvIGFcbitcdCAqIGRlZmVycmVkIGttZW1sZWFrX2ZyZWUoKSB1c2luZyB0aGUgdW50YWdnZWQgcG9pbnRlciwgYmVjYXVzZVxuK1x0ICogX19sb29rdXBfb2JqZWN0KCkgcmVzZXRzIHRoZSB0YWcgYW55d2F5XG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZSh4LCBzLVx1MDAzZWZsYWdzKSkpXG4rXHRcdGdvdG8gZGVmZXI7XG4rXG4gXHRpZiAobGlrZWx5KGNhbl9mcmVlX3RvX3BjcyhzbGFiKSkgXHUwMDI2XHUwMDI2IGxpa2VseShmcmVlX3RvX3BjcyhzLCB4LCBmYWxzZSkpKVxuIFx0XHRyZXR1cm47XG4gXG4rZGVmZXI6XG4gXHQvKlxuIFx0ICogX19zbGFiX2ZyZWUoKSBjYW4gbG9ja2xlc3NseSBjbXB4Y2hnMTYgaW50byBhIHNsYWIsIGJ1dCB0aGVuIGl0IG1pZ2h0XG4gXHQgKiBuZWVkIHRvIHRha2Ugc3Bpbl9sb2NrIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXG5AQCAtNzExNCw3ICs3MjE3LDcgQEAgaW50IGJ1aWxkX2RldGFjaGVkX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSxcbiBcdGlmICghcykge1xuIFx0XHQvKiBIYW5kbGUga2FsbG9jJ2VkIG9iamVjdHMgKi9cbiBcdFx0aWYgKCFzbGFiKSB7XG4tXHRcdFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iamVjdCk7XG4rXHRcdFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iamVjdCwgU0xBQl9GUkVFX0RFRkFVTFQpO1xuIFx0XHRcdGRmLVx1MDAzZXNsYWIgPSBOVUxMO1xuIFx0XHRcdHJldHVybiBzaXplO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjo1NTozOS43ODg3MTkyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3Mzk1MzU1OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIFJpc2sgQXNzZXNzbWVudCBvZiBNZW1vcnkgRnJlZWluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuLCBhcyB3aXRoIGFueSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2UsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBjZW50ZXJzIGFyb3VuZCBtb2RpZnlpbmcgYGtmcmVlX25vbG9jaygpYCBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGhhbmRsZSBvYmplY3QgZnJlZWluZywgZXNwZWNpYWxseSB0aG9zZSBhbGxvY2F0ZWQgYnkgYGttYWxsb2MoKWAgYW5kIGBrbWVtX2NhY2hlX2FsbG9jKClgLCBpbmNsdWRpbmcgbGFyZ2Uga21hbGxvY3MgYW5kIEtGRU5DRSBvYmplY3RzLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgZGVmZXJyYWwgdG8gYGlycV93b3JrYCB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zLCBsaWtlIGlmIGBrbWVtbGVha19tYXlfbmVlZF9mcmVlKClgIGlzIHRydWUsIGlmIGl0J3MgYSBLRkVOQ0Ugb2JqZWN0LCBvciBhIGxhcmdlIGttYWxsb2Mgb2JqZWN0IHRyaWdnZXJpbmcga21lbWxlYWsgZnJlZWluZy4gSXQgYWxzbyBsb29rcyBsaWtlIGEgY2hhbmdlIHRvIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKClgIHRvIHVzZSBga2ZyZWVfbm9sb2NrKClgIGluc3RlYWQgb2YgYGtmcmVlX3JjdSgpYC5cblxuTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRXNzZW50aWFsbHksIHdlJ3JlIGRlYWxpbmcgd2l0aCBsb2NrbGVzcyBmcmVlaW5nIChga2ZyZWVfbm9sb2NrYCksIGFuZCB0aGUgcGF0Y2ggdXRpbGl6ZXMgdGhlIG9iamVjdCdzIG1lbW9yeSBmb3IgYW4gYGxsaXN0X25vZGVgIHRvIGhhbmRsZSB0aGUgZGVmZXJyZWQgZnJlZWluZy4gRm9yIGBkZWZlcl9mcmVlKClgLCBpdCB1c2VzIGBsbG5vZGUgPSBrYXNhbl9yZXNldF90YWcob2JqKSArIHMtXHUwMDNlb2Zmc2V0O2AsIHdoaWNoIHNlZW1zIGZpbmUuIFRoZSBgZGVmZXJfZnJlZV9rZmVuY2UoKWAgdXNlcyBgbGxub2RlID0ga2ZlbmNlX29ial90b19sbG5vZGUob2JqKTtgICh1c2luZyBgXHUwMDI2bWV0YS1cdTAwM2VsbG5vZGVgKSwgYWxzbyBzZWVtcyBjb3JyZWN0LCBhcyB0aGUgS0ZFTkNFIG1ldGFkYXRhIGlzIGNsZWFybHkgZGVmaW5lZC4gQnV0IHRoZSBgZGVmZXJfZnJlZV9sYXJnZV9rbWFsbG9jKClgIHVzZXMgYGxsbm9kZSA9IGthc2FuX3Jlc2V0X3RhZyhvYmopO2AsIHdoaWNoIGlzIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsYXJnZSBrbWFsbG9jIG9iamVjdC5cblxuVGhlIGNvbmNlcm4gd2l0aCBgZGVmZXJfZnJlZV9sYXJnZV9rbWFsbG9jKClgIGlzIHRoYXQgYnkgb3ZlcndyaXRpbmcgdGhlIGZpcnN0IDggYnl0ZXMgb2YgdGhlIG9iamVjdCwgYW0gSSBpbmFkdmVydGVudGx5IGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhpcyBpcyBub3QgdGhlIGNhc2UgYmVjYXVzZSB0aGUgb2JqZWN0IGlzICpiZWluZyBmcmVlZCouIFRoZSBgbGxub2RlYCBpcyBwdXJlbHkgZm9yIGludGVybmFsIGxpbmtpbmcgd2l0aGluIHRoZSBTTFVCIGFsbG9jYXRvcidzIGRlZmVycmVkIGZyZWUgbGlzdC4gT25jZSB0aGUgYGlycV93b3JrYCBydW5zLCB0aGUgb2JqZWN0IGlzIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBhbmQgYWN0dWFsbHkgZnJlZWQuIFRodXMsIGFueSBjb250ZW50IGluIHRoZSBvYmplY3QgaXMgaXJyZWxldmFudCBhdCB0aGlzIHBvaW50IGFuZCB0aGVyZSBzaG91bGQgYmUgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLlxuXG5UaGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIG1vZGlmaWNhdGlvbnMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucywgYW5kIG5vIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhpcyBpcyBhbGwgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBmcmVlaW5nIHBhdGhzLiBDb25zZXF1ZW50bHksIHRoZSBsaWtlbHkgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIFRoZXNlIGFyZSAqcHJlY2lzZWx5KiB0aGUga2luZHMgb2YgaXNzdWVzIEtBU0FOIGFuZCBzdGFuZGFyZCBTTFVCIGRlYnVnZ2luZyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGF0IGBkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2MoKWAgY29kZSBibG9jazpcbmBgYGNcbnN0YXRpYyB2b2lkIGRlZmVyX2ZyZWVfbGFyZ2Vfa21hbGxvYyh2b2lkICpvYmopXG57XG5cdHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3O1xuXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xuXG5cdC8qXG5cdCAqIHdlIGNhbiBzaW1wbHkgdXNlIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsYXJnZSBrbWFsbG9jIG9iamVjdFxuXHQgKiBmb3IgdGhlIGxsbm9kZSwgYXMgdGhlcmUncyBubyBjdG9yIG9yIFRZUEVTQUZFX0JZX1JDVVxuXHQgKi9cblx0bGxub2RlID0ga2FzYW5fcmVzZXRfdGFnKG9iaik7XG5cblx0Z3VhcmQocHJlZW1wdCkoKTtcblxuXHRkcHcgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xuXHRpZiAobGxpc3RfYWRkKGxsbm9kZSwgXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHNfbGFyZ2Vfa21hbGxvYykpXG5cdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2ZHB3LVx1MDAzZXdvcmspO1xufVxuYGBgXG5ZZWFoLCBleGFjdGx5IGFzIEkgZXhwZWN0ZWQuIEl0IG92ZXJ3cml0ZXMgdGhlIGZpcnN0IDggYnl0ZXMgb2YgdGhlIG9iamVjdCB0byBiZSBmcmVlZC4gU2luY2UgdGhlIG9iamVjdCBpcyBhbHJlYWR5IHNjaGVkdWxlZCB0byBiZSBmcmVlZCwgaXQgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBieSB1c2VyIHNwYWNlIGFueSBsb25nZXIuIElmIGl0ICppcyogYWNjZXNzZWQsIHRoYXQncyBhIHVzZS1hZnRlci1mcmVlLCB3aGljaCBLQVNBTiAqd2lsbCogY2F0Y2guXG5cbk5vdywgbGV0J3MgYnJpZWZseSBsb29rIGF0IHRoZSBjaGFuZ2UgaW4gYHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKWA6XG5gYGBjXG4tXHRrZnJlZV9yY3UoKHVuaW9uIGNwdW1hc2tfcmN1aGVhZCAqKWFjLnVzZXJfbWFzaywgcmN1KTtcbitcdGtmcmVlX25vbG9jayhhYy51c2VyX21hc2spO1xuYGBgXG5JdCdzIGp1c3QgcmVwbGFjaW5nIGBrZnJlZV9yY3VgIHdpdGggYGtmcmVlX25vbG9ja2AuIFRoZSBgYWMudXNlcl9tYXNrYCB3YXMgYWxsb2NhdGVkIHdpdGggYGFsbG9jX3VzZXJfY3B1c19wdHJgLlxuYGBgY1xuIHN0YXRpYyBpbmxpbmUgY3B1bWFza190ICphbGxvY191c2VyX2NwdXNfcHRyKGludCBub2RlKVxuIHtcbi1cdC8qXG4tXHQgKiBTZWUgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpIGFib3ZlIGZvciB0aGUgcmN1X2hlYWQgdXNhZ2UuXG4tXHQgKi9cbi1cdGludCBzaXplID0gbWF4X3QoaW50LCBjcHVtYXNrX3NpemVcblxuIiwiSW5wdXRUb2tlbnMiOjg0MTcsIk91dHB1dFRva2VucyI6MjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU1OjU3LjE4NDA3OTU2OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGZyZWVpbmcgcGF0aHMsIHNwZWNpZmljYWxseSBleHRlbmRpbmcgYGtmcmVlX25vbG9jaygpYCB0byBoYW5kbGUgb2JqZWN0cyBhbGxvY2F0ZWQgYnkgYGttYWxsb2MoKWAgYW5kIGBrbWVtX2NhY2hlX2FsbG9jKClgLCBpbmNsdWRpbmcgbGFyZ2Uga21hbGxvY3MgYW5kIEtGRU5DRSBvYmplY3RzLiBJdCBkZWZlcnMgZnJlZWluZyB0byBhbiBgaXJxX3dvcmtgIHVzaW5nIGEgbG9ja2xlc3MgbGlzdCAoYGxsaXN0YCkgd2hlbiBuZWNlc3NhcnkuIFRoZSBjaGFuZ2VzIGludm9sdmUgb3ZlcndyaXRpbmcgcGFydHMgb2YgdGhlIGZyZWVkIG9iamVjdHMgKGxpa2UgdGhlIGZyZWVwb2ludGVyIG9yIHRoZSBmaXJzdCB3b3JkIG9mIGEgbGFyZ2Uga21hbGxvYyBvYmplY3QpIHRvIHN0b3JlIHRoZSBgbGxpc3Rfbm9kZWAuIFNpbmNlIHRoZXNlIG9iamVjdHMgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGZyZWVkLCBhbnkgYWNjZXNzIHRvIHRoZW0gd291bGQgY29uc3RpdHV0ZSBhIHVzZS1hZnRlci1mcmVlIGJ1Zy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljIG9mIGFjdGl2ZSBvYmplY3RzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBtZW1vcnkgY29ycnVwdGlvbikgd2lsbCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIFNMVUIgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBleHBvc2VkIGhlcmUgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBmcmVlaW5nIHBhdGhzLCBzcGVjaWZpY2FsbHkgZXh0ZW5kaW5nIGBrZnJlZV9ub2xvY2soKWAgdG8gaGFuZGxlIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgIGFuZCBga21lbV9jYWNoZV9hbGxvYygpYCwgaW5jbHVkaW5nIGxhcmdlIGttYWxsb2NzIGFuZCBLRkVOQ0Ugb2JqZWN0cy4gSXQgZGVmZXJzIGZyZWVpbmcgdG8gYW4gYGlycV93b3JrYCB1c2luZyBhIGxvY2tsZXNzIGxpc3QgKGBsbGlzdGApIHdoZW4gbmVjZXNzYXJ5LiBUaGUgY2hhbmdlcyBpbnZvbHZlIG92ZXJ3cml0aW5nIHBhcnRzIG9mIHRoZSBmcmVlZCBvYmplY3RzIChsaWtlIHRoZSBmcmVlcG9pbnRlciBvciB0aGUgZmlyc3Qgd29yZCBvZiBhIGxhcmdlIGttYWxsb2Mgb2JqZWN0KSB0byBzdG9yZSB0aGUgYGxsaXN0X25vZGVgLiBTaW5jZSB0aGVzZSBvYmplY3RzIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBmcmVlZCwgYW55IGFjY2VzcyB0byB0aGVtIHdvdWxkIGNvbnN0aXR1dGUgYSB1c2UtYWZ0ZXItZnJlZSBidWcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYyBvZiBhY3RpdmUgb2JqZWN0cy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24pIHdpbGwgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBTTFVCIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgZXhwb3NlZCBoZXJlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow29tm9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 16:51:40 +0000 UTC FinishedAt: 2026-08-07 16:55:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "648294a02bfcd0eddae51877e3b30f8bbb2d4bb6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_KMEMLEAK", "KFENCE", "PREEMPT_RT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "648294a02bfcd0eddae51877e3b30f8bbb2d4bb6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_KMEMLEAK", "KFENCE", "PREEMPT_RT" ], "series_id": "ea037589-5080-48fa-8ecc-bcbc0dca616f" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "kfree_nolock", "set_cpus_allowed_force", "kmemleak_may_need_free", "kfence_obj_to_llnode", "kfence_llnode_to_obj" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX0tNRU1MRUFLJiMzNDssCiAgICAmIzM0O0tGRU5DRSYjMzQ7LAogICAgJiMzNDtQUkVFTVBUX1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a2ZyZWVfbm9sb2NrJiMzNDssCiAgICAmIzM0O3NldF9jcHVzX2FsbG93ZWRfZm9yY2UmIzM0OywKICAgICYjMzQ7a21lbWxlYWtfbWF5X25lZWRfZnJlZSYjMzQ7LAogICAgJiMzNDtrZmVuY2Vfb2JqX3RvX2xsbm9kZSYjMzQ7LAogICAgJiMzNDtrZmVuY2VfbGxub2RlX3RvX29iaiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBmcmVlaW5nIHBhdGhzLCBzcGVjaWZpY2FsbHkgZXh0ZW5kaW5nIGBrZnJlZV9ub2xvY2soKWAgdG8gaGFuZGxlIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgIGFuZCBga21lbV9jYWNoZV9hbGxvYygpYCwgaW5jbHVkaW5nIGxhcmdlIGttYWxsb2NzIGFuZCBLRkVOQ0Ugb2JqZWN0cy4gSXQgZGVmZXJzIGZyZWVpbmcgdG8gYW4gYGlycV93b3JrYCB1c2luZyBhIGxvY2tsZXNzIGxpc3QgKGBsbGlzdGApIHdoZW4gbmVjZXNzYXJ5LiBUaGUgY2hhbmdlcyBpbnZvbHZlIG92ZXJ3cml0aW5nIHBhcnRzIG9mIHRoZSBmcmVlZCBvYmplY3RzIChsaWtlIHRoZSBmcmVlcG9pbnRlciBvciB0aGUgZmlyc3Qgd29yZCBvZiBhIGxhcmdlIGttYWxsb2Mgb2JqZWN0KSB0byBzdG9yZSB0aGUgYGxsaXN0X25vZGVgLiBTaW5jZSB0aGVzZSBvYmplY3RzIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBmcmVlZCwgYW55IGFjY2VzcyB0byB0aGVtIHdvdWxkIGNvbnN0aXR1dGUgYSB1c2UtYWZ0ZXItZnJlZSBidWcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYyBvZiBhY3RpdmUgb2JqZWN0cy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24pIHdpbGwgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBTTFVCIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgZXhwb3NlZCBoZXJlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGtmcmVlX25vbG9jaygpYCBpbiBgbW0vc2x1Yi5jYCB0byBzdXBwb3J0IGZyZWVpbmcgb2JqZWN0cyBhbGxvY2F0ZWQgYnkgYGttYWxsb2MoKWAsIGBrbWVtX2NhY2hlX2FsbG9jKClgLCBhbmQgbGFyZ2Uga21hbGxvY3MsIGFzIHdlbGwgYXMgS0ZFTkNFIG9iamVjdHMuIEl0IGRlZmVycyBmcmVlaW5nIHRvIGFuIGBpcnFfd29ya2AgaWYgbmVjZXNzYXJ5IChlLmcuLCBmb3Iga21lbWxlYWsgb3IgS0ZFTkNFKS4gSXQgYWxzbyBtb2RpZmllcyBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpYCBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AgdG8gdXNlIGBrZnJlZV9ub2xvY2soKWAgaW5zdGVhZCBvZiBga2ZyZWVfcmN1KClgLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2NoZWR1bGVyIGNoYW5nZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTViODZiZGM1OTg0YjZiMGJhMzFkZTA3OTUwMWRlNmIyMTYxOTg3NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTY6NTM6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZmVuY2UuaCBiL2luY2x1ZGUvbGludXgva2ZlbmNlLmhcbmluZGV4IGU1ODIyZjZlN2YyNzkuLjAwNzIxYzg1MjU4ZGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2tmZW5jZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2tmZW5jZS5oXG5AQCAtMTg4LDYgJiM0MzsxODgsOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayBib29sIGtmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKTtcbiYjNDM7dm9pZCAqa2ZlbmNlX2xsbm9kZV90b19vYmooc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSk7XG4mIzQzO1xuIC8qKlxuICAqIGtmZW5jZV9oYW5kbGVfcGFnZV9mYXVsdCgpIC0gcGVyZm9ybSBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciBLRkVOQ0UgcGFnZXNcbiAgKiBAYWRkcjogZmF1bHRpbmcgYWRkcmVzc1xuQEAgLTIzNSw2ICYjNDM7MjM4LDggQEAgc3RhdGljIGlubGluZSBzaXplX3Qga2ZlbmNlX2tzaXplKGNvbnN0IHZvaWQgKmFkZHIpIHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgKmtmZW5jZV9vYmplY3Rfc3RhcnQoY29uc3Qgdm9pZCAqYWRkcikgeyByZXR1cm4gTlVMTDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpIHsgfVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sga2ZlbmNlX2ZyZWUodm9pZCAqYWRkcikgeyByZXR1cm4gZmFsc2U7IH1cbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3Rfbm9kZSAqa2ZlbmNlX29ial90b19sbG5vZGUodm9pZCAqYWRkcikgeyByZXR1cm4gTlVMTDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmtmZW5jZV9sbG5vZGVfdG9fb2JqKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpIHsgcmV0dXJuIE5VTEw7IH1cbiBzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGtmZW5jZV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsXG4gXHRcdFx0XHRcdFx0XHQgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21lbWxlYWsuaCBiL2luY2x1ZGUvbGludXgva21lbWxlYWsuaFxuaW5kZXggZmJkNDI0YjJhYmIxNC4uNTJmNzVmMTBhOWNlNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva21lbWxlYWsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEAgZXh0ZXJuIHZvaWQga21lbWxlYWtfYWxsb2NfcGVyY3B1KGNvbnN0IHZvaWQgX19wZXJjcHUgKnB0ciwgc2l6ZV90IHNpemUsXG4gZXh0ZXJuIHZvaWQga21lbWxlYWtfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBzaXplX3Qgc2l6ZSxcbiBcdFx0XHQgICAgIGdmcF90IGdmcCkgX19yZWY7XG4gZXh0ZXJuIHZvaWQga21lbWxlYWtfZnJlZShjb25zdCB2b2lkICpwdHIpIF9fcmVmO1xuJiM0Mztib29sIGttZW1sZWFrX21heV9uZWVkX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjtcbiBleHRlcm4gdm9pZCBrbWVtbGVha19mcmVlX3BhcnQoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkgX19yZWY7XG4gZXh0ZXJuIHZvaWQga21lbWxlYWtfZnJlZV9wZXJjcHUoY29uc3Qgdm9pZCBfX3BlcmNwdSAqcHRyKSBfX3JlZjtcbiBleHRlcm4gdm9pZCBrbWVtbGVha191cGRhdGVfdHJhY2UoY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjtcbkBAIC01MCw2ICYjNDM7NTEsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKGNvbnN0IHZvaWQgKnB0ciwgc2xhYl9mbGFnc190IGZsYWdzKVxuIFx0XHRrbWVtbGVha19mcmVlKHB0cik7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIShmbGFncyBcdTAwMjYgU0xBQl9OT0xFQUtUUkFDRSkpXG4mIzQzO1x0XHRyZXR1cm4ga21lbWxlYWtfbWF5X25lZWRfZnJlZShwdHIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2VyYXNlKHZvaWQgKipwdHIpXG4ge1xuIFx0KnB0ciA9IE5VTEw7XG5AQCAtODYsNiAmIzQzOzk1LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19mcmVlX3BhcnQoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSlcbiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXG4ge1xuIH1cbiYjNDM7c3RhdGljIGlubGluZSBib29sIGttZW1sZWFrX21heV9uZWVkX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19mcmVlX3BlcmNwdShjb25zdCB2b2lkIF9fcGVyY3B1ICpwdHIpXG4ge1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuaW5kZXggOTYyMjY3MDdjMmY2MS4uZDI5MjllNGUyM2YxMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbkBAIC0yODA3LDIwICYjNDM7MjgwNywxNSBAQCB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZm9yY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbmV3X21hc1xuIFx0XHQudXNlcl9tYXNrID0gTlVMTCxcbiBcdFx0LmZsYWdzICAgICA9IFNDQV9VU0VSLFx0LyogY2xlYXIgdGhlIHVzZXIgcmVxdWVzdGVkIG1hc2sgKi9cbiBcdH07XG4tXHR1bmlvbiBjcHVtYXNrX3JjdWhlYWQge1xuLVx0XHRjcHVtYXNrX3QgY3B1bWFzaztcbi1cdFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbi1cdH07XG4gXG4gXHRzY29wZWRfZ3VhcmQgKF9fdGFza19ycV9sb2NrLCBwKVxuIFx0XHRkb19zZXRfY3B1c19hbGxvd2VkKHAsIFx1MDAyNmFjKTtcbiBcbiBcdC8qXG4gXHQgKiBCZWNhdXNlIHRoaXMgaXMgY2FsbGVkIHdpdGggcC1cdTAwM2VwaV9sb2NrIGhlbGQsIGl0IGlzIG5vdCBwb3NzaWJsZVxuLVx0ICogdG8gdXNlIGtmcmVlKCkgaGVyZSAod2hlbiBQUkVFTVBUX1JUPXkpLCB0aGVyZWZvcmUgcHVudCB0byB1c2luZ1xuLVx0ICoga2ZyZWVfcmN1KCkuXG4mIzQzO1x0ICogdG8gdXNlIGtmcmVlKCkgaGVyZSAod2hlbiBQUkVFTVBUX1JUPXkpLCB0aHVzIHVzZSBrZnJlZV9ub2xvY2soKVxuIFx0ICovXG4tXHRrZnJlZV9yY3UoKHVuaW9uIGNwdW1hc2tfcmN1aGVhZCAqKWFjLnVzZXJfbWFzaywgcmN1KTtcbiYjNDM7XHRrZnJlZV9ub2xvY2soYWMudXNlcl9tYXNrKTtcbiB9XG4gXG4gaW50IGR1cF91c2VyX2NwdXNfcHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYyxcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvc2NoZWQuaCBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oXG5pbmRleCA1NmFjZjUwMmJhMjYwLi42YThkMDU3OGU5NjMzIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL3NjaGVkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oXG5AQCAtMjg4NiwxMiAmIzQzOzI4ODYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGFza19hbGxvd2VkX29uX2NwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjcHUpXG4gXG4gc3RhdGljIGlubGluZSBjcHVtYXNrX3QgKmFsbG9jX3VzZXJfY3B1c19wdHIoaW50IG5vZGUpXG4ge1xuLVx0Lypcbi1cdCAqIFNlZSBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKCkgYWJvdmUgZm9yIHRoZSByY3VfaGVhZCB1c2FnZS5cbi1cdCAqL1xuLVx0aW50IHNpemUgPSBtYXhfdChpbnQsIGNwdW1hc2tfc2l6ZSgpLCBzaXplb2Yoc3RydWN0IHJjdV9oZWFkKSk7XG4tXG4tXHRyZXR1cm4ga21hbGxvY19ub2RlKHNpemUsIEdGUF9LRVJORUwsIG5vZGUpO1xuJiM0MztcdHJldHVybiBrbWFsbG9jX25vZGUoY3B1bWFza19zaXplKCksIEdGUF9LRVJORUwsIG5vZGUpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X3B1c2hfdGFzayhzdHJ1Y3QgcnEgKnJxKVxuZGlmZiAtLWdpdCBhL21tL2tmZW5jZS9jb3JlLmMgYi9tbS9rZmVuY2UvY29yZS5jXG5pbmRleCA2NTc3YmQ3Njk1NGViLi40MjUxOWQyNDY4N2ZmIDEwMDY0NFxuLS0tIGEvbW0va2ZlbmNlL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0va2ZlbmNlL2NvcmUuY1xuQEAgLTEyNzEsNiAmIzQzOzEyNzEsMjAgQEAgdm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG4gXHR9XG4gfVxuIFxuJiM0MztzdHJ1Y3QgbGxpc3Rfbm9kZSAqa2ZlbmNlX29ial90b19sbG5vZGUodm9pZCAqYWRkcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrZmVuY2VfbWV0YWRhdGEgKm1ldGEgPSBhZGRyX3RvX21ldGFkYXRhKCh1bnNpZ25lZCBsb25nKWFkZHIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2bWV0YS1cdTAwM2VsbG5vZGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgKmtmZW5jZV9sbG5vZGVfdG9fb2JqKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhICptZXRhID0gY29udGFpbmVyX29mKGxsbm9kZSwgc3RydWN0IGtmZW5jZV9tZXRhZGF0YSwgbGxub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICh2b2lkICopbWV0YS1cdTAwM2VhZGRyO1xuJiM0Mzt9XG4mIzQzO1xuIGJvb2wga2ZlbmNlX2hhbmRsZV9wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBpc193cml0ZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4ge1xuIFx0Y29uc3QgaW50IHBhZ2VfaW5kZXggPSAoYWRkciAtICh1bnNpZ25lZCBsb25nKV9fa2ZlbmNlX3Bvb2wpIC8gUEFHRV9TSVpFO1xuZGlmZiAtLWdpdCBhL21tL2tmZW5jZS9rZmVuY2UuaCBiL21tL2tmZW5jZS9rZmVuY2UuaFxuaW5kZXggMWY2MThmOWIwZDEyZC4uMGZjYTFkYzJjNzk0MSAxMDA2NDRcbi0tLSBhL21tL2tmZW5jZS9rZmVuY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0va2ZlbmNlL2tmZW5jZS5oXG5AQCAtNTgsNyAmIzQzOzU4LDEwIEBAIHN0cnVjdCBrZmVuY2VfdHJhY2sge1xuIC8qIEtGRU5DRSBtZXRhZGF0YSBwZXIgZ3VhcmRlZCBhbGxvY2F0aW9uLiAqL1xuIHN0cnVjdCBrZmVuY2VfbWV0YWRhdGEge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0IF9fZ3VhcmRlZF9ieShcdTAwMjZrZmVuY2VfZnJlZWxpc3RfbG9jayk7XHQvKiBGcmVlbGlzdCBub2RlLiAqL1xuLVx0c3RydWN0IHJjdV9oZWFkIHJjdV9oZWFkO1x0LyogRm9yIGRlbGF5ZWQgZnJlZWluZy4gKi9cbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7XHQvKiBGb3IgZGVsYXllZCBmcmVlaW5nLiAqL1xuJiM0MztcdFx0c3RydWN0IGxsaXN0X25vZGUgbGxub2RlO1x0LyogRm9yIGtmcmVlX25vbG9jaygpLiAqL1xuJiM0MztcdH07XG4gXG4gXHQvKlxuIFx0ICogTG9jayBwcm90ZWN0aW5nIGJlbG93IGRhdGE7IHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBvZiB0aGUgYmVsb3cgZGF0YSxcbmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuY1xuaW5kZXggN2M3YmExN2NlN2FmMC4uZTM1NjBjZTgyNjMyNiAxMDA2NDRcbi0tLSBhL21tL2ttZW1sZWFrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ttZW1sZWFrLmNcbkBAIC0xMTY4LDYgJiM0MzsxMTY4LDQ4IEBAIHZvaWQgX19yZWYga21lbWxlYWtfZnJlZShjb25zdCB2b2lkICpwdHIpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGttZW1sZWFrX2ZyZWUpO1xuIFxuJiM0MzsvKipcbiYjNDM7ICoga21lbWxlYWtfbWF5X25lZWRfZnJlZSAtIGNoZWNrIGlmIG9iamVjdCBpcyByZWdpc3RlcmVkXG4mIzQzOyAqIEBwdHI6XHRwb2ludGVyIHRvIGJlZ2lubmluZyBvZiB0aGUgb2JqZWN0XG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGtlcm5lbCBhbGxvY2F0b3Igd2hlbiBhbiBvYmplY3Qgc2hvdWxkIGJlXG4mIzQzOyAqIGZyZWVkIGJ1dCB0aGUgY2FsbGVyIGNvbnRleHQgbWlnaHQgYmUgdW5zYWZlIHRvIHNwaW4gb24gdGhlIGludGVybmFsIGxvY2tzLlxuJiM0MzsgKlxuJiM0MzsgKiBJdCB3aWxsIHRoZXJlZm9yZSBvbmx5IHVzZSB0cnlsb2NrIGFuZCB0aHVzIG1pZ2h0IHJldHVybiBhIGZhbHNlIHBvc2l0aXZlXG4mIzQzOyAqIGlmIHRoZSB0cnlsb2NrIGZhaWxzIGFuZCB0aGUgc3RhdHVzIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuJiM0MzsgKlxuJiM0MzsgKiBGb3Igb2JqZWN0cyB0aGF0IChtaWdodCkgbmVlZCBmcmVlLCB0aGUgYWxsb2NhdG9yIGhhcyB0byBkZWZlciB0aGUgYWN0dWFsXG4mIzQzOyAqIGZyZWVpbmcgdG8gYSBzYWZlIGNvbnRleHQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgbW9zdCBvYmplY3RzIGZyZWVkIGZyb20gdGhlIHVuc2FmZSBjb250ZXh0IGFyZSBhbHNvXG4mIzQzOyAqIGFsbG9jYXRlZCBpbiBzdWNoIGNvbnRleHQgYW5kIHRodXMgYXJlIG5vdCByZWdpc3RlcmVkIGluIGttZW1sZWFrLCBzbyBpdCYjMzk7c1xuJiM0MzsgKiB1bmxpa2VseSB0aGUgZGVmZXJlZCBmcmVlaW5nIHdpbGwgYmUgbmVjZXNzYXJ5IGp1c3QgYmVjYXVzZSBrbWVtbGVhayBpc1xuJiM0MzsgKiBlbmFibGVkLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBfX3JlZiBrbWVtbGVha19tYXlfbmVlZF9mcmVlKGNvbnN0IHZvaWQgKnB0cilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0c3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0O1xuJiM0MztcbiYjNDM7XHRwcl9kZWJ1ZyhcJiMzNDslcygweCVweClcXG5cJiMzNDssIF9fZnVuY19fLCBwdHIpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWttZW1sZWFrX2ZyZWVfZW5hYmxlZCB8fCAhcHRyIHx8IElTX0VSUihwdHIpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBPbiBVUCwgcmF3X3NwaW5fdHJ5bG9jaygpIGFsd2F5cyBzdWNjZWVkcyBldmVuIHdoZW4gaXQgaXMgbG9ja2VkICovXG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19TTVApIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhd19zcGluX3RyeWxvY2tfaXJxc2F2ZShcdTAwMjZrbWVtbGVha19sb2NrLCBmbGFncykpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0b2JqZWN0ID0gX19sb29rdXBfb2JqZWN0KCh1bnNpZ25lZCBsb25nKXB0ciwgMCwgMCk7XG4mIzQzO1xuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmttZW1sZWFrX2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICEhb2JqZWN0O1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGttZW1sZWFrX2ZyZWVfcGFydCAtIHBhcnRpYWxseSB1bnJlZ2lzdGVyIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIG9iamVjdFxuICAqIEBwdHI6XHRwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb3IgaW5zaWRlIHRoZSBvYmplY3QuIFRoaXMgYWxzb1xuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggYjlhZWIwMmE4ODBmMS4uM2JlOThmYWE5ZjBkZSAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2x1Yi5jXG5AQCAtNDA1MCw2ICYjNDM7NDA1MCw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX2FsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcbiBzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsge1xuIFx0c3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0cztcbiYjNDM7XHRzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzX2tmZW5jZTtcbiYjNDM7XHRzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzX2xhcmdlX2ttYWxsb2M7XG4gXHRzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzX2J5X3JjdTtcbiBcdHN0cnVjdCBsbGlzdF9oZWFkIHJjdV9zaGVhdmVzO1xuIFx0c3RydWN0IGlycV93b3JrIHdvcms7XG5AQCAtNDA1OSw2ICYjNDM7NDA2MSw4IEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yayk7XG4gXG4gc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yaywgZGVmZXJyZWRfcGVyY3B1X3dvcmspID0ge1xuIFx0Lm9iamVjdHMgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0cyksXG4mIzQzO1x0Lm9iamVjdHNfa2ZlbmNlID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHNfa2ZlbmNlKSxcbiYjNDM7XHQub2JqZWN0c19sYXJnZV9rbWFsbG9jID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHNfbGFyZ2Vfa21hbGxvYyksXG4gXHQub2JqZWN0c19ieV9yY3UgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0c19ieV9yY3UpLFxuIFx0LnJjdV9zaGVhdmVzID0gTExJU1RfSEVBRF9JTklUKHJjdV9zaGVhdmVzKSxcbiBcdC53b3JrID0gSVJRX1dPUktfSU5JVChkZWZlcnJlZF9wZXJjcHVfd29ya19mbiksXG5AQCAtNjM2Myw2ICYjNDM7NjM2NywyMSBAQCBzdGF0aWMgdm9pZCBmcmVlX3RvX3Bjc19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWRcbiYjNDM7X19mcmVlX2xhcmdlX2ttYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihwYWdlKTtcbiYjNDM7XG4mIzQzO1x0bW9kX2xydXZlY19wYWdlX3N0YXRlKHBhZ2UsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CLFxuJiM0MztcdFx0XHQgICAgICAtKFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpKTtcbiYjNDM7XHRfX0NsZWFyUGFnZUxhcmdlS21hbGxvYyhwYWdlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZyZWVfZmxhZ3MgXHUwMDI2IFNMQUJfRlJFRV9OT0xPQ0spXG4mIzQzO1x0XHRmcmVlX2Zyb3plbl9wYWdlc19ub2xvY2socGFnZSwgb3JkZXIpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEluIFBSRUVNUFRfUlQgaXJxX3dvcmsgcnVucyBpbiBwZXItY3B1IGt0aHJlYWQsIHNvIGl0JiMzOTtzIHNhZmVcbiAgKiB0byB0YWtlIHNsZWVwaW5nIHNwaW5fbG9ja3MgZnJvbSBfX3NsYWJfZnJlZSgpLlxuQEAgLTYzNzEsMTYgJiM0Mzs2MzkwLDEyIEBAIHN0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbiBzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspXG4ge1xuIFx0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XG4tXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqb2JqcywgKm9ianNfYnlfcmN1LCAqcmN1X3NoZWF2ZXM7XG4gXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCAqcG9zLCAqdDtcbiBcdHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZiwgKm5leHQ7XG4gXG4gXHRkcHcgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrLCB3b3JrKTtcbi1cdHJjdV9zaGVhdmVzID0gXHUwMDI2ZHB3LVx1MDAzZXJjdV9zaGVhdmVzO1xuLVx0b2JqcyA9IFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzO1xuLVx0b2Jqc19ieV9yY3UgPSBcdTAwMjZkcHctXHUwMDNlb2JqZWN0c19ieV9yY3U7XG4gXG4tXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKG9ianMpO1xuJiM0MztcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHMpO1xuIFx0bGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHQsIGxsbm9kZSkge1xuIFx0XHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcbiBcdFx0c3RydWN0IHNsYWIgKnNsYWI7XG5AQCAtNjM5Miw2ICYjNDM7NjQwNyw4IEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcbiBcdFx0LyogUG9pbnQgJiMzOTt4JiMzOTsgYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIGFsbG9jYXRlZCBvYmplY3QgKi9cbiBcdFx0eCAtPSBzLVx1MDAzZW9mZnNldDtcbiBcbiYjNDM7XHRcdGttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKHgsIHMtXHUwMDNlZmxhZ3MpO1xuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogV2UgdXNlZCBmcmVlcG9pbnRlciBpbiAmIzM5O3gmIzM5OyB0byBsaW5rICYjMzk7eCYjMzk7IGludG8gZGYtXHUwMDNlb2JqZWN0cy5cbiBcdFx0ICogQ2xlYXIgaXQgdG8gTlVMTCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZSBkZXRlY3Rpb25cbkBAIC02NDAzLDcgJiM0Mzs2NDIwLDMwIEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcbiBcdFx0c3RhdChzLCBGUkVFX1NMT1dQQVRIKTtcbiBcdH1cbiBcbi1cdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwob2Jqc19ieV9yY3UpO1xuJiM0MztcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHNfa2ZlbmNlKTtcbiYjNDM7XHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XG4mIzQzO1x0XHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcbiYjNDM7XHRcdHN0cnVjdCBzbGFiICpzbGFiO1xuJiM0MztcdFx0dm9pZCAqb2JqID0ga2ZlbmNlX2xsbm9kZV90b19vYmoocG9zKTtcbiYjNDM7XG4mIzQzO1x0XHRzbGFiID0gdmlydF90b19zbGFiKG9iaik7XG4mIzQzO1x0XHRzID0gc2xhYi1cdTAwM2VzbGFiX2NhY2hlO1xuJiM0MztcbiYjNDM7XHRcdGttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKG9iaiwgcy1cdTAwM2VmbGFncyk7XG4mIzQzO1xuJiM0MztcdFx0X19rZmVuY2VfZnJlZShvYmopO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZkcHctXHUwMDNlb2JqZWN0c19sYXJnZV9rbWFsbG9jKTtcbiYjNDM7XHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZpcnRfdG9fcGFnZShwb3MpO1xuJiM0MztcbiYjNDM7XHRcdGttZW1sZWFrX2ZyZWUocG9zKTtcbiYjNDM7XG4mIzQzO1x0XHRfX2ZyZWVfbGFyZ2Vfa21hbGxvY19wYWdlKHBhZ2UsIFNMQUJfRlJFRV9ERUZBVUxUKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHNfYnlfcmN1KTtcbiBcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHtcbiBcdFx0dm9pZCAqaGVhZCA9IHBvcztcbiBcdFx0dm9pZCAqb2JqcCA9IGt2bWFsbG9jX29ial9zdGFydF9hZGRyKGhlYWQpO1xuQEAgLTY0MTEsMjEgJiM0Mzs2NDUxLDYwIEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcbiBcdFx0a3ZmcmVlX2NhbGxfcmN1KGhlYWQsIG9ianApO1xuIFx0fVxuIFxuLVx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChyY3Vfc2hlYXZlcyk7XG4mIzQzO1x0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZkcHctXHUwMDNlcmN1X3NoZWF2ZXMpO1xuIFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaGVhZiwgbmV4dCwgbGxub2RlLCBsbG5vZGUpXG4gXHRcdGNhbGxfcmN1KFx1MDAyNnNoZWFmLVx1MDAzZXJjdV9oZWFkLCByY3VfZnJlZV9zaGVhZik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGRlZmVyX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKmhlYWQpXG4mIzQzO3N0YXRpYyB2b2lkIGRlZmVyX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcbiB7XG4gXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFBsYWNlIHRoZSBsbGlzdCBub2RlIHdoZXJlIHRoZSBmcmVlcG9pbnRlciB3b3VsZCBiZSBpZiB3ZSBmcmVlZCB0aGVcbiYjNDM7XHQgKiBvYmplY3QgaW1tZWRpYXRlbHkuIFRoYXQgbWVhbnMgd2UgY2FuIHdyaXRlIHRoZXJlIHNhZmVseSwgb25seSBuZWVkXG4mIzQzO1x0ICogdG8gcmVtb3ZlIGthc2FuIHRhZyBmaXJzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRsbG5vZGUgPSBrYXNhbl9yZXNldF90YWcob2JqKSAmIzQzOyBzLVx1MDAzZW9mZnNldDtcbiBcbiBcdGd1YXJkKHByZWVtcHQpKCk7XG4gXG4tXHRoZWFkID0ga2FzYW5fcmVzZXRfdGFnKGhlYWQpO1xuJiM0MztcdGRwdyA9IHRoaXNfY3B1X3B0cihcdTAwMjZkZWZlcnJlZF9wZXJjcHVfd29yayk7XG4mIzQzO1x0aWYgKGxsaXN0X2FkZChsbG5vZGUsIFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzKSlcbiYjNDM7XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNmRwdy1cdTAwM2V3b3JrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGVmZXJfZnJlZV9rZmVuY2Uodm9pZCAqb2JqKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcbiYjNDM7XG4mIzQzO1x0Lyoga2FzYW5fcmVzZXRfdGFnKCkgaXMgbm90IG5lY2Vzc2FyeSwga2ZlbmNlIG9iamVjdHMgYXJlIG5vdCB0YWdnZWQgKi9cbiYjNDM7XHRsbG5vZGUgPSBrZmVuY2Vfb2JqX3RvX2xsbm9kZShvYmopO1xuJiM0MztcbiYjNDM7XHRndWFyZChwcmVlbXB0KSgpO1xuJiM0MztcbiYjNDM7XHRkcHcgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xuJiM0MztcdGlmIChsbGlzdF9hZGQobGxub2RlLCBcdTAwMjZkcHctXHUwMDNlb2JqZWN0c19rZmVuY2UpKVxuJiM0MztcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2ZHB3LVx1MDAzZXdvcmspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2Modm9pZCAqb2JqKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiB3ZSBjYW4gc2ltcGx5IHVzZSB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGFyZ2Uga21hbGxvYyBvYmplY3RcbiYjNDM7XHQgKiBmb3IgdGhlIGxsbm9kZSwgYXMgdGhlcmUmIzM5O3Mgbm8gY3RvciBvciBUWVBFU0FGRV9CWV9SQ1VcbiYjNDM7XHQgKi9cbiYjNDM7XHRsbG5vZGUgPSBrYXNhbl9yZXNldF90YWcob2JqKTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQocHJlZW1wdCkoKTtcbiBcbiBcdGRwdyA9IHRoaXNfY3B1X3B0cihcdTAwMjZkZWZlcnJlZF9wZXJjcHVfd29yayk7XG4tXHRpZiAobGxpc3RfYWRkKGhlYWQgJiM0Mzsgcy1cdTAwM2VvZmZzZXQsIFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzKSlcbiYjNDM7XHRpZiAobGxpc3RfYWRkKGxsbm9kZSwgXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHNfbGFyZ2Vfa21hbGxvYykpXG4gXHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNmRwdy1cdTAwM2V3b3JrKTtcbiB9XG4gXG5AQCAtNjY3Nyw5ICYjNDM7Njc1NiwxMSBAQCBzaXplX3Qga3NpemUoY29uc3Qgdm9pZCAqb2JqcClcbiB9XG4gRVhQT1JUX1NZTUJPTChrc2l6ZSk7XG4gXG4tc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpXG4mIzQzO3N0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0LFxuJiM0MztcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpXG4ge1xuIFx0dW5zaWduZWQgaW50IG9yZGVyID0gY29tcG91bmRfb3JkZXIocGFnZSk7XG4mIzQzO1x0Ym9vbCBub2xvY2sgPSBmcmVlX2ZsYWdzIFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghUGFnZUxhcmdlS21hbGxvYyhwYWdlKSkpIHtcbiBcdFx0ZHVtcF9wYWdlKHBhZ2UsIFwmIzM0O05vdCBhIGttYWxsb2MgYWxsb2NhdGlvblwmIzM0Oyk7XG5AQCAtNjY4OSwxNCAmIzQzOzY3NzAsMTYgQEAgc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpXG4gXHRpZiAoV0FSTl9PTl9PTkNFKG9yZGVyID09IDApKVxuIFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7b2JqZWN0IHBvaW50ZXI6IDB4JXBcXG5cJiMzNDssIG9iamVjdCk7XG4gXG4tXHRrbWVtbGVha19mcmVlKG9iamVjdCk7XG4mIzQzO1x0aWYgKCFub2xvY2spXG4mIzQzO1x0XHRrbWVtbGVha19mcmVlKG9iamVjdCk7XG4mIzQzO1xuIFx0a2FzYW5fa2ZyZWVfbGFyZ2Uob2JqZWN0KTtcbiBcdGttc2FuX2tmcmVlX2xhcmdlKG9iamVjdCk7XG4gXG4tXHRtb2RfbHJ1dmVjX3BhZ2Vfc3RhdGUocGFnZSwgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0IsXG4tXHRcdFx0ICAgICAgLShQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKSk7XG4tXHRfX0NsZWFyUGFnZUxhcmdlS21hbGxvYyhwYWdlKTtcbi1cdGZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyKTtcbiYjNDM7XHRpZiAodW5saWtlbHkobm9sb2NrIFx1MDAyNlx1MDAyNiBrbWVtbGVha19tYXlfbmVlZF9mcmVlKG9iamVjdCkpKVxuJiM0MztcdFx0ZGVmZXJfZnJlZV9sYXJnZV9rbWFsbG9jKG9iamVjdCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0X19mcmVlX2xhcmdlX2ttYWxsb2NfcGFnZShwYWdlLCBmcmVlX2ZsYWdzKTtcbiB9XG4gXG4gLypcbkBAIC02NzE4LDcgJiM0Mzs2ODAxLDcgQEAgdm9pZCBrdmZyZWVfcmN1X2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiBcdFx0aWYgKHNsYWIpXG4gXHRcdFx0c2xhYl9mcmVlKHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgb2JqLCBfUkVUX0lQXyk7XG4gXHRcdGVsc2Vcbi1cdFx0XHRmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgb2JqKTtcbiYjNDM7XHRcdFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iaiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xuIFx0fVxuIH1cbiBcbkBAIC02NzQ0LDcgJiM0Mzs2ODI3LDcgQEAgdm9pZCBrZnJlZShjb25zdCB2b2lkICpvYmplY3QpXG4gXHRzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xuIFx0aWYgKCFzbGFiKSB7XG4gXHRcdC8qIGttYWxsb2Nfbm9sb2NrKCkgZG9lc24mIzM5O3Qgc3VwcG9ydCBsYXJnZSBrbWFsbG9jICovXG4tXHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCAodm9pZCAqKW9iamVjdCk7XG4mIzQzO1x0XHRmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgKHZvaWQgKilvYmplY3QsIFNMQUJfRlJFRV9ERUZBVUxUKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTY3NTUsMTUgJiM0Mzs2ODM4LDE0IEBAIEVYUE9SVF9TWU1CT0woa2ZyZWUpO1xuIFxuIC8qXG4gICogQ2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIHJhd19zcGlubG9ja190IG9yIGZyb20gSVJRIGFuZCBOTUksXG4tICogYnV0IE9OTFkgZm9yIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGttYWxsb2Nfbm9sb2NrKCkuXG4tICogRGVidWcgY2hlY2tzIChsaWtlIGttZW1sZWFrIGFuZCBrZmVuY2UpIHdlcmUgc2tpcHBlZCBvbiBhbGxvY2F0aW9uLFxuLSAqIGhlbmNlXG4tICogb2JqID0ga21hbGxvYygpOyBrZnJlZV9ub2xvY2sob2JqKTtcbi0gKiB3aWxsIG1pc3Mga21lbWxlYWsva2ZlbmNlIGJvb2sga2VlcGluZyBhbmQgd2lsbCBjYXVzZSBmYWxzZSBwb3NpdGl2ZXMuXG4tICogbGFyZ2Vfa21hbGxvYyBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlci5cbiYjNDM7ICogYnV0IG1heSBkZWZlciBmcmVlaW5nIHRvIGlycV93b3JrKCkgaW4gc29tZSBjYXNlcy5cbiYjNDM7ICpcbiYjNDM7ICogSW50ZW5kZWQgbWFpbmx5IGZvciBvYmplY3RzIGFsbG9jYXRlZCBmcm9tIGttYWxsb2Nfbm9sb2NrKCksIGJ1dCBjYW4gaGFuZGxlXG4mIzQzOyAqIGFsc28ga21lbV9jYWNoZV9hbGxvYygpIGFuZCBrbWFsbG9jKCkgb2JqZWN0cywgaW5jbHVkaW5nIGxhcmdlX2ttYWxsb2MuXG4gICovXG4gdm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHN0cnVjdCBzbGFiICpzbGFiO1xuIFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XG4gXHR2b2lkICp4ID0gKHZvaWQgKilvYmplY3Q7XG5AQCAtNjc3MSw5ICYjNDM7Njg1MywxMCBAQCB2b2lkIGtmcmVlX25vbG9jayhjb25zdCB2b2lkICpvYmplY3QpXG4gXHRpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihvYmplY3QpKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0c2xhYiA9IHZpcnRfdG9fc2xhYihvYmplY3QpO1xuJiM0MztcdHBhZ2UgPSB2aXJ0X3RvX3BhZ2Uob2JqZWN0KTtcbiYjNDM7XHRzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xuIFx0aWYgKHVubGlrZWx5KCFzbGFiKSkge1xuLVx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7bGFyZ2Vfa21hbGxvYyBpcyBub3Qgc3VwcG9ydGVkIGJ5IGtmcmVlX25vbG9jaygpXCYjMzQ7KTtcbiYjNDM7XHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCAodm9pZCAqKW9iamVjdCwgU0xBQl9GUkVFX05PTE9DSyk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC02NzkxLDYgJiM0Mzs2ODc0LDEyIEBAIHZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcbiBcdCAqIHNpbmNlIHRoZXkgdGFrZSBzcGlubG9ja3Mgb3Igbm90IHNhZmUgZnJvbSBhbnkgY29udGV4dC5cbiBcdCAqL1xuIFx0a21zYW5fc2xhYl9mcmVlKHMsIHgpO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfa2ZlbmNlX2FkZHJlc3MoeCkpIHtcbiYjNDM7XHRcdGRlZmVyX2ZyZWVfa2ZlbmNlKHgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKlxuIFx0ICogSWYgS0FTQU4gZmluZHMgYSBrZXJuZWwgYnVnIGl0IHdpbGwgZG8ga2FzYW5fcmVwb3J0X2ludmFsaWRfZnJlZSgpXG4gXHQgKiB3aGljaCB3aWxsIGNhbGwgcmF3X3NwaW5fbG9ja19pcnFzYXZlKCkgd2hpY2ggaXMgdGVjaG5pY2FsbHlcbkBAIC02ODA5LDkgJiM0Mzs2ODk4LDIzIEBAIHZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcbiBcdCAqL1xuIFx0a2FzYW5fc2xhYl9mcmVlKHMsIHgsIGZhbHNlLCBmYWxzZSwgLyogc2tpcCBxdWFyYW50aW5lICovdHJ1ZSk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiB3aXRoIGtmcmVlKCkgdGhlIGttZW1sZWFrIGhhbmRsaW5nIGhhcHBlbnMgbXVjaCBzb29uZXIsIGJ1dCBmb3JcbiYjNDM7XHQgKiBkZWZlcmluZyB3ZSBuZWVkIHRvIHdyaXRlIGxsbm9kZSB0byB0aGUgb2JqZWN0JiMzOTtzIGZyZWVwb2ludGVyIHNvXG4mIzQzO1x0ICogd2Ugc2hvdWxkIGhhdmUgaXQgaW4gdGhlIHN0YXRlIHdoZW4gaXQmIzM5O3Mgbm8gbG9uZ2VyIHRyZWF0ZWQgYXNcbiYjNDM7XHQgKiBhbGxvY2F0ZWQgYnkga2FzYW4gZXRjLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogZGVmZXJfZnJlZSB3aWxsIGFsc28gcmVzZXQgdGhlIHBvaW50ZXIgdGFnLCBidXQgaXQmIzM5O3Mgb2sgdG8gZG8gYVxuJiM0MztcdCAqIGRlZmVycmVkIGttZW1sZWFrX2ZyZWUoKSB1c2luZyB0aGUgdW50YWdnZWQgcG9pbnRlciwgYmVjYXVzZVxuJiM0MztcdCAqIF9fbG9va3VwX29iamVjdCgpIHJlc2V0cyB0aGUgdGFnIGFueXdheVxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZSh4LCBzLVx1MDAzZWZsYWdzKSkpXG4mIzQzO1x0XHRnb3RvIGRlZmVyO1xuJiM0MztcbiBcdGlmIChsaWtlbHkoY2FuX2ZyZWVfdG9fcGNzKHNsYWIpKSBcdTAwMjZcdTAwMjYgbGlrZWx5KGZyZWVfdG9fcGNzKHMsIHgsIGZhbHNlKSkpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7ZGVmZXI6XG4gXHQvKlxuIFx0ICogX19zbGFiX2ZyZWUoKSBjYW4gbG9ja2xlc3NseSBjbXB4Y2hnMTYgaW50byBhIHNsYWIsIGJ1dCB0aGVuIGl0IG1pZ2h0XG4gXHQgKiBuZWVkIHRvIHRha2Ugc3Bpbl9sb2NrIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXG5AQCAtNzExNCw3ICYjNDM7NzIxNyw3IEBAIGludCBidWlsZF9kZXRhY2hlZF9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsXG4gXHRpZiAoIXMpIHtcbiBcdFx0LyogSGFuZGxlIGthbGxvYyYjMzk7ZWQgb2JqZWN0cyAqL1xuIFx0XHRpZiAoIXNsYWIpIHtcbi1cdFx0XHRmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgb2JqZWN0KTtcbiYjNDM7XHRcdFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iamVjdCwgU0xBQl9GUkVFX0RFRkFVTFQpO1xuIFx0XHRcdGRmLVx1MDAzZXNsYWIgPSBOVUxMO1xuIFx0XHRcdHJldHVybiBzaXplO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX0tNRU1MRUFLJiMzNDssCiAgICAmIzM0O0tGRU5DRSYjMzQ7LAogICAgJiMzNDtQUkVFTVBUX1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a2ZyZWVfbm9sb2NrJiMzNDssCiAgICAmIzM0O3NldF9jcHVzX2FsbG93ZWRfZm9yY2UmIzM0OywKICAgICYjMzQ7a21lbWxlYWtfbWF5X25lZWRfZnJlZSYjMzQ7LAogICAgJiMzNDtrZmVuY2Vfb2JqX3RvX2xsbm9kZSYjMzQ7LAogICAgJiMzNDtrZmVuY2VfbGxub2RlX3RvX29iaiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBga2ZyZWVfbm9sb2NrKClgIGluIGBtbS9zbHViLmNgIHRvIHN1cHBvcnQgZnJlZWluZyBvYmplY3RzIGFsbG9jYXRlZCBieSBga21hbGxvYygpYCwgYGttZW1fY2FjaGVfYWxsb2MoKWAsIGFuZCBsYXJnZSBrbWFsbG9jcywgYXMgd2VsbCBhcyBLRkVOQ0Ugb2JqZWN0cy4gSXQgZGVmZXJzIGZyZWVpbmcgdG8gYW4gYGlycV93b3JrYCBpZiBuZWNlc3NhcnkgKGUuZy4sIGZvciBrbWVtbGVhayBvciBLRkVOQ0UpLiBJdCBhbHNvIG1vZGlmaWVzIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKClgIGluIGBrZXJuZWwvc2NoZWQvY29yZS5jYCB0byB1c2UgYGtmcmVlX25vbG9jaygpYCBpbnN0ZWFkIG9mIGBrZnJlZV9yY3UoKWAuIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzY2hlZHVsZXIgY2hhbmdlcyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNWI4NmJkYzU5ODRiNmIwYmEzMWRlMDc5NTAxZGU2YjIxNjE5ODc0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxNjo1Mzo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2ZlbmNlLmggYi9pbmNsdWRlL2xpbnV4L2tmZW5jZS5oCmluZGV4IGU1ODIyZjZlN2YyNzkuLjAwNzIxYzg1MjU4ZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2ZlbmNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rZmVuY2UuaApAQCAtMTg4LDYgJiM0MzsxODgsOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayBib29sIGtmZW5jZV9mcmVlKHZvaWQgKmFkZHIpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdHJ1Y3QgbGxpc3Rfbm9kZSAqa2ZlbmNlX29ial90b19sbG5vZGUodm9pZCAqYWRkcik7CiYjNDM7dm9pZCAqa2ZlbmNlX2xsbm9kZV90b19vYmooc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSk7CiYjNDM7CiAvKioKICAqIGtmZW5jZV9oYW5kbGVfcGFnZV9mYXVsdCgpIC0gcGVyZm9ybSBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciBLRkVOQ0UgcGFnZXMKICAqIEBhZGRyOiBmYXVsdGluZyBhZGRyZXNzCkBAIC0yMzUsNiAmIzQzOzIzOCw4IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGtmZW5jZV9rc2l6ZShjb25zdCB2b2lkICphZGRyKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgKmtmZW5jZV9vYmplY3Rfc3RhcnQoY29uc3Qgdm9pZCAqYWRkcikgeyByZXR1cm4gTlVMTDsgfQogc3RhdGljIGlubGluZSB2b2lkIF9fa2ZlbmNlX2ZyZWUodm9pZCAqYWRkcikgeyB9CiBzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGtmZW5jZV9mcmVlKHZvaWQgKmFkZHIpIHsgcmV0dXJuIGZhbHNlOyB9CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3Rfbm9kZSAqa2ZlbmNlX29ial90b19sbG5vZGUodm9pZCAqYWRkcikgeyByZXR1cm4gTlVMTDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqa2ZlbmNlX2xsbm9kZV90b19vYmooc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSkgeyByZXR1cm4gTlVMTDsgfQogc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBrZmVuY2VfaGFuZGxlX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGlzX3dyaXRlLAogCQkJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21lbWxlYWsuaCBiL2luY2x1ZGUvbGludXgva21lbWxlYWsuaAppbmRleCBmYmQ0MjRiMmFiYjE0Li41MmY3NWYxMGE5Y2U2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oCkBAIC0yMiw2ICYjNDM7MjIsNyBAQCBleHRlcm4gdm9pZCBrbWVtbGVha19hbGxvY19wZXJjcHUoY29uc3Qgdm9pZCBfX3BlcmNwdSAqcHRyLCBzaXplX3Qgc2l6ZSwKIGV4dGVybiB2b2lkIGttZW1sZWFrX3ZtYWxsb2MoY29uc3Qgc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgc2l6ZV90IHNpemUsCiAJCQkgICAgIGdmcF90IGdmcCkgX19yZWY7CiBleHRlcm4gdm9pZCBrbWVtbGVha19mcmVlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7CiYjNDM7Ym9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7CiBleHRlcm4gdm9pZCBrbWVtbGVha19mcmVlX3BhcnQoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkgX19yZWY7CiBleHRlcm4gdm9pZCBrbWVtbGVha19mcmVlX3BlcmNwdShjb25zdCB2b2lkIF9fcGVyY3B1ICpwdHIpIF9fcmVmOwogZXh0ZXJuIHZvaWQga21lbWxlYWtfdXBkYXRlX3RyYWNlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7CkBAIC01MCw2ICYjNDM7NTEsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKGNvbnN0IHZvaWQgKnB0ciwgc2xhYl9mbGFnc190IGZsYWdzKQogCQlrbWVtbGVha19mcmVlKHB0cik7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpCiYjNDM7ewomIzQzOwlpZiAoIShmbGFncyAmYW1wOyBTTEFCX05PTEVBS1RSQUNFKSkKJiM0MzsJCXJldHVybiBrbWVtbGVha19tYXlfbmVlZF9mcmVlKHB0cik7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZXJhc2Uodm9pZCAqKnB0cikKIHsKIAkqcHRyID0gTlVMTDsKQEAgLTg2LDYgJiM0Mzs5NSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9wYXJ0KGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpCiB7CiB9CiYjNDM7c3RhdGljIGlubGluZSBib29sIGttZW1sZWFrX21heV9uZWVkX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQogc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2ZyZWVfcGVyY3B1KGNvbnN0IHZvaWQgX19wZXJjcHUgKnB0cikKIHsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jCmluZGV4IDk2MjI2NzA3YzJmNjEuLmQyOTI5ZTRlMjNmMTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2NvcmUuYwpAQCAtMjgwNywyMCAmIzQzOzI4MDcsMTUgQEAgdm9pZCBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld19tYXMKIAkJLnVzZXJfbWFzayA9IE5VTEwsCiAJCS5mbGFncyAgICAgPSBTQ0FfVVNFUiwJLyogY2xlYXIgdGhlIHVzZXIgcmVxdWVzdGVkIG1hc2sgKi8KIAl9OwotCXVuaW9uIGNwdW1hc2tfcmN1aGVhZCB7Ci0JCWNwdW1hc2tfdCBjcHVtYXNrOwotCQlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwotCX07CiAKIAlzY29wZWRfZ3VhcmQgKF9fdGFza19ycV9sb2NrLCBwKQogCQlkb19zZXRfY3B1c19hbGxvd2VkKHAsICZhbXA7YWMpOwogCiAJLyoKIAkgKiBCZWNhdXNlIHRoaXMgaXMgY2FsbGVkIHdpdGggcC0mZ3Q7cGlfbG9jayBoZWxkLCBpdCBpcyBub3QgcG9zc2libGUKLQkgKiB0byB1c2Uga2ZyZWUoKSBoZXJlICh3aGVuIFBSRUVNUFRfUlQ9eSksIHRoZXJlZm9yZSBwdW50IHRvIHVzaW5nCi0JICoga2ZyZWVfcmN1KCkuCiYjNDM7CSAqIHRvIHVzZSBrZnJlZSgpIGhlcmUgKHdoZW4gUFJFRU1QVF9SVD15KSwgdGh1cyB1c2Uga2ZyZWVfbm9sb2NrKCkKIAkgKi8KLQlrZnJlZV9yY3UoKHVuaW9uIGNwdW1hc2tfcmN1aGVhZCAqKWFjLnVzZXJfbWFzaywgcmN1KTsKJiM0MzsJa2ZyZWVfbm9sb2NrKGFjLnVzZXJfbWFzayk7CiB9CiAKIGludCBkdXBfdXNlcl9jcHVzX3B0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMsCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvc2NoZWQuaCBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oCmluZGV4IDU2YWNmNTAyYmEyNjAuLjZhOGQwNTc4ZTk2MzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oCkBAIC0yODg2LDEyICYjNDM7Mjg4Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2FsbG93ZWRfb25fY3B1KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNwdSkKIAogc3RhdGljIGlubGluZSBjcHVtYXNrX3QgKmFsbG9jX3VzZXJfY3B1c19wdHIoaW50IG5vZGUpCiB7Ci0JLyoKLQkgKiBTZWUgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpIGFib3ZlIGZvciB0aGUgcmN1X2hlYWQgdXNhZ2UuCi0JICovCi0JaW50IHNpemUgPSBtYXhfdChpbnQsIGNwdW1hc2tfc2l6ZSgpLCBzaXplb2Yoc3RydWN0IHJjdV9oZWFkKSk7Ci0KLQlyZXR1cm4ga21hbGxvY19ub2RlKHNpemUsIEdGUF9LRVJORUwsIG5vZGUpOwomIzQzOwlyZXR1cm4ga21hbGxvY19ub2RlKGNwdW1hc2tfc2l6ZSgpLCBHRlBfS0VSTkVMLCBub2RlKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmdldF9wdXNoX3Rhc2soc3RydWN0IHJxICpycSkKZGlmZiAtLWdpdCBhL21tL2tmZW5jZS9jb3JlLmMgYi9tbS9rZmVuY2UvY29yZS5jCmluZGV4IDY1NzdiZDc2OTU0ZWIuLjQyNTE5ZDI0Njg3ZmYgMTAwNjQ0Ci0tLSBhL21tL2tmZW5jZS9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0va2ZlbmNlL2NvcmUuYwpAQCAtMTI3MSw2ICYjNDM7MTI3MSwyMCBAQCB2b2lkIF9fa2ZlbmNlX2ZyZWUodm9pZCAqYWRkcikKIAl9CiB9CiAKJiM0MztzdHJ1Y3QgbGxpc3Rfbm9kZSAqa2ZlbmNlX29ial90b19sbG5vZGUodm9pZCAqYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrZmVuY2VfbWV0YWRhdGEgKm1ldGEgPSBhZGRyX3RvX21ldGFkYXRhKCh1bnNpZ25lZCBsb25nKWFkZHIpOwomIzQzOwomIzQzOwlyZXR1cm4gJmFtcDttZXRhLSZndDtsbG5vZGU7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgKmtmZW5jZV9sbG5vZGVfdG9fb2JqKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhICptZXRhID0gY29udGFpbmVyX29mKGxsbm9kZSwgc3RydWN0IGtmZW5jZV9tZXRhZGF0YSwgbGxub2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuICh2b2lkICopbWV0YS0mZ3Q7YWRkcjsKJiM0Mzt9CiYjNDM7CiBib29sIGtmZW5jZV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWNvbnN0IGludCBwYWdlX2luZGV4ID0gKGFkZHIgLSAodW5zaWduZWQgbG9uZylfX2tmZW5jZV9wb29sKSAvIFBBR0VfU0laRTsKZGlmZiAtLWdpdCBhL21tL2tmZW5jZS9rZmVuY2UuaCBiL21tL2tmZW5jZS9rZmVuY2UuaAppbmRleCAxZjYxOGY5YjBkMTJkLi4wZmNhMWRjMmM3OTQxIDEwMDY0NAotLS0gYS9tbS9rZmVuY2Uva2ZlbmNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0va2ZlbmNlL2tmZW5jZS5oCkBAIC01OCw3ICYjNDM7NTgsMTAgQEAgc3RydWN0IGtmZW5jZV90cmFjayB7CiAvKiBLRkVOQ0UgbWV0YWRhdGEgcGVyIGd1YXJkZWQgYWxsb2NhdGlvbi4gKi8KIHN0cnVjdCBrZmVuY2VfbWV0YWRhdGEgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdCBfX2d1YXJkZWRfYnkoJmFtcDtrZmVuY2VfZnJlZWxpc3RfbG9jayk7CS8qIEZyZWVsaXN0IG5vZGUuICovCi0Jc3RydWN0IHJjdV9oZWFkIHJjdV9oZWFkOwkvKiBGb3IgZGVsYXllZCBmcmVlaW5nLiAqLwomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CS8qIEZvciBkZWxheWVkIGZyZWVpbmcuICovCiYjNDM7CQlzdHJ1Y3QgbGxpc3Rfbm9kZSBsbG5vZGU7CS8qIEZvciBrZnJlZV9ub2xvY2soKS4gKi8KJiM0MzsJfTsKIAogCS8qCiAJICogTG9jayBwcm90ZWN0aW5nIGJlbG93IGRhdGE7IHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBvZiB0aGUgYmVsb3cgZGF0YSwKZGlmZiAtLWdpdCBhL21tL2ttZW1sZWFrLmMgYi9tbS9rbWVtbGVhay5jCmluZGV4IDdjN2JhMTdjZTdhZjAuLmUzNTYwY2U4MjYzMjYgMTAwNjQ0Ci0tLSBhL21tL2ttZW1sZWFrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0va21lbWxlYWsuYwpAQCAtMTE2OCw2ICYjNDM7MTE2OCw0OCBAQCB2b2lkIF9fcmVmIGttZW1sZWFrX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoa21lbWxlYWtfZnJlZSk7CiAKJiM0MzsvKioKJiM0MzsgKiBrbWVtbGVha19tYXlfbmVlZF9mcmVlIC0gY2hlY2sgaWYgb2JqZWN0IGlzIHJlZ2lzdGVyZWQKJiM0MzsgKiBAcHRyOglwb2ludGVyIHRvIGJlZ2lubmluZyBvZiB0aGUgb2JqZWN0CiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBrZXJuZWwgYWxsb2NhdG9yIHdoZW4gYW4gb2JqZWN0IHNob3VsZCBiZQomIzQzOyAqIGZyZWVkIGJ1dCB0aGUgY2FsbGVyIGNvbnRleHQgbWlnaHQgYmUgdW5zYWZlIHRvIHNwaW4gb24gdGhlIGludGVybmFsIGxvY2tzLgomIzQzOyAqCiYjNDM7ICogSXQgd2lsbCB0aGVyZWZvcmUgb25seSB1c2UgdHJ5bG9jayBhbmQgdGh1cyBtaWdodCByZXR1cm4gYSBmYWxzZSBwb3NpdGl2ZQomIzQzOyAqIGlmIHRoZSB0cnlsb2NrIGZhaWxzIGFuZCB0aGUgc3RhdHVzIGNhbm5vdCBiZSBkZXRlcm1pbmVkLgomIzQzOyAqCiYjNDM7ICogRm9yIG9iamVjdHMgdGhhdCAobWlnaHQpIG5lZWQgZnJlZSwgdGhlIGFsbG9jYXRvciBoYXMgdG8gZGVmZXIgdGhlIGFjdHVhbAomIzQzOyAqIGZyZWVpbmcgdG8gYSBzYWZlIGNvbnRleHQuCiYjNDM7ICoKJiM0MzsgKiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IG1vc3Qgb2JqZWN0cyBmcmVlZCBmcm9tIHRoZSB1bnNhZmUgY29udGV4dCBhcmUgYWxzbwomIzQzOyAqIGFsbG9jYXRlZCBpbiBzdWNoIGNvbnRleHQgYW5kIHRodXMgYXJlIG5vdCByZWdpc3RlcmVkIGluIGttZW1sZWFrLCBzbyBpdCYjMzk7cwomIzQzOyAqIHVubGlrZWx5IHRoZSBkZWZlcmVkIGZyZWVpbmcgd2lsbCBiZSBuZWNlc3NhcnkganVzdCBiZWNhdXNlIGttZW1sZWFrIGlzCiYjNDM7ICogZW5hYmxlZC4KJiM0MzsgKi8KJiM0Mztib29sIF9fcmVmIGttZW1sZWFrX21heV9uZWVkX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJc3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0OwomIzQzOwomIzQzOwlwcl9kZWJ1ZygmIzM0OyVzKDB4JXB4KVxuJiMzNDssIF9fZnVuY19fLCBwdHIpOwomIzQzOwomIzQzOwlpZiAoIWttZW1sZWFrX2ZyZWVfZW5hYmxlZCB8fCAhcHRyIHx8IElTX0VSUihwdHIpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBPbiBVUCwgcmF3X3NwaW5fdHJ5bG9jaygpIGFsd2F5cyBzdWNjZWVkcyBldmVuIHdoZW4gaXQgaXMgbG9ja2VkICovCiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfU01QKSAmYW1wOyZhbXA7IGluX25taSgpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWlmICghcmF3X3NwaW5fdHJ5bG9ja19pcnFzYXZlKCZhbXA7a21lbWxlYWtfbG9jaywgZmxhZ3MpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CW9iamVjdCA9IF9fbG9va3VwX29iamVjdCgodW5zaWduZWQgbG9uZylwdHIsIDAsIDApOwomIzQzOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2ttZW1sZWFrX2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJcmV0dXJuICEhb2JqZWN0OwomIzQzO30KJiM0MzsKIC8qKgogICoga21lbWxlYWtfZnJlZV9wYXJ0IC0gcGFydGlhbGx5IHVucmVnaXN0ZXIgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgb2JqZWN0CiAgKiBAcHRyOglwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb3IgaW5zaWRlIHRoZSBvYmplY3QuIFRoaXMgYWxzbwpkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IGI5YWViMDJhODgwZjEuLjNiZTk4ZmFhOWYwZGUgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmMKQEAgLTQwNTAsNiAmIzQzOzQwNTAsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9hbGwoc3RydWN0IGttZW1fY2FjaGUgKnMpCiAKIHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayB7CiAJc3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0czsKJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0c19rZmVuY2U7CiYjNDM7CXN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHNfbGFyZ2Vfa21hbGxvYzsKIAlzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzX2J5X3JjdTsKIAlzdHJ1Y3QgbGxpc3RfaGVhZCByY3Vfc2hlYXZlczsKIAlzdHJ1Y3QgaXJxX3dvcmsgd29yazsKQEAgLTQwNTksNiAmIzQzOzQwNjEsOCBAQCBzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspOwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrLCBkZWZlcnJlZF9wZXJjcHVfd29yaykgPSB7CiAJLm9iamVjdHMgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0cyksCiYjNDM7CS5vYmplY3RzX2tmZW5jZSA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzX2tmZW5jZSksCiYjNDM7CS5vYmplY3RzX2xhcmdlX2ttYWxsb2MgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0c19sYXJnZV9rbWFsbG9jKSwKIAkub2JqZWN0c19ieV9yY3UgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0c19ieV9yY3UpLAogCS5yY3Vfc2hlYXZlcyA9IExMSVNUX0hFQURfSU5JVChyY3Vfc2hlYXZlcyksCiAJLndvcmsgPSBJUlFfV09SS19JTklUKGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKSwKQEAgLTYzNjMsNiAmIzQzOzYzNjcsMjEgQEAgc3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKQogCX0KIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZAomIzQzO19fZnJlZV9sYXJnZV9rbWFsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IG9yZGVyID0gY29tcG91bmRfb3JkZXIocGFnZSk7CiYjNDM7CiYjNDM7CW1vZF9scnV2ZWNfcGFnZV9zdGF0ZShwYWdlLCBOUl9TTEFCX1VOUkVDTEFJTUFCTEVfQiwKJiM0MzsJCQkgICAgICAtKFBBR0VfU0laRSAmbHQ7Jmx0OyBvcmRlcikpOwomIzQzOwlfX0NsZWFyUGFnZUxhcmdlS21hbGxvYyhwYWdlKTsKJiM0MzsKJiM0MzsJaWYgKGZyZWVfZmxhZ3MgJmFtcDsgU0xBQl9GUkVFX05PTE9DSykKJiM0MzsJCWZyZWVfZnJvemVuX3BhZ2VzX25vbG9jayhwYWdlLCBvcmRlcik7CiYjNDM7CWVsc2UKJiM0MzsJCWZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogSW4gUFJFRU1QVF9SVCBpcnFfd29yayBydW5zIGluIHBlci1jcHUga3RocmVhZCwgc28gaXQmIzM5O3Mgc2FmZQogICogdG8gdGFrZSBzbGVlcGluZyBzcGluX2xvY2tzIGZyb20gX19zbGFiX2ZyZWUoKS4KQEAgLTYzNzEsMTYgJiM0Mzs2MzkwLDEyIEBAIHN0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcCkKIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaykKIHsKIAlzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdzsKLQlzdHJ1Y3QgbGxpc3RfaGVhZCAqb2JqcywgKm9ianNfYnlfcmN1LCAqcmN1X3NoZWF2ZXM7CiAJc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSwgKnBvcywgKnQ7CiAJc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLCAqbmV4dDsKIAogCWRwdyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmssIHdvcmspOwotCXJjdV9zaGVhdmVzID0gJmFtcDtkcHctJmd0O3JjdV9zaGVhdmVzOwotCW9ianMgPSAmYW1wO2Rwdy0mZ3Q7b2JqZWN0czsKLQlvYmpzX2J5X3JjdSA9ICZhbXA7ZHB3LSZndDtvYmplY3RzX2J5X3JjdTsKIAotCWxsbm9kZSA9IGxsaXN0X2RlbF9hbGwob2Jqcyk7CiYjNDM7CWxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtkcHctJmd0O29iamVjdHMpOwogCWxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHsKIAkJc3RydWN0IGttZW1fY2FjaGUgKnM7CiAJCXN0cnVjdCBzbGFiICpzbGFiOwpAQCAtNjM5Miw2ICYjNDM7NjQwNyw4IEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaykKIAkJLyogUG9pbnQgJiMzOTt4JiMzOTsgYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIGFsbG9jYXRlZCBvYmplY3QgKi8KIAkJeCAtPSBzLSZndDtvZmZzZXQ7CiAKJiM0MzsJCWttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKHgsIHMtJmd0O2ZsYWdzKTsKJiM0MzsKIAkJLyoKIAkJICogV2UgdXNlZCBmcmVlcG9pbnRlciBpbiAmIzM5O3gmIzM5OyB0byBsaW5rICYjMzk7eCYjMzk7IGludG8gZGYtJmd0O29iamVjdHMuCiAJCSAqIENsZWFyIGl0IHRvIE5VTEwgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmUgZGV0ZWN0aW9uCkBAIC02NDAzLDcgJiM0Mzs2NDIwLDMwIEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaykKIAkJc3RhdChzLCBGUkVFX1NMT1dQQVRIKTsKIAl9CiAKLQlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKG9ianNfYnlfcmN1KTsKJiM0MzsJbGxub2RlID0gbGxpc3RfZGVsX2FsbCgmYW1wO2Rwdy0mZ3Q7b2JqZWN0c19rZmVuY2UpOwomIzQzOwlsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7CiYjNDM7CQlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKJiM0MzsJCXN0cnVjdCBzbGFiICpzbGFiOwomIzQzOwkJdm9pZCAqb2JqID0ga2ZlbmNlX2xsbm9kZV90b19vYmoocG9zKTsKJiM0MzsKJiM0MzsJCXNsYWIgPSB2aXJ0X3RvX3NsYWIob2JqKTsKJiM0MzsJCXMgPSBzbGFiLSZndDtzbGFiX2NhY2hlOwomIzQzOwomIzQzOwkJa21lbWxlYWtfZnJlZV9yZWN1cnNpdmUob2JqLCBzLSZndDtmbGFncyk7CiYjNDM7CiYjNDM7CQlfX2tmZW5jZV9mcmVlKG9iaik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGxub2RlID0gbGxpc3RfZGVsX2FsbCgmYW1wO2Rwdy0mZ3Q7b2JqZWN0c19sYXJnZV9rbWFsbG9jKTsKJiM0MzsJbGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHQsIGxsbm9kZSkgewomIzQzOwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UocG9zKTsKJiM0MzsKJiM0MzsJCWttZW1sZWFrX2ZyZWUocG9zKTsKJiM0MzsKJiM0MzsJCV9fZnJlZV9sYXJnZV9rbWFsbG9jX3BhZ2UocGFnZSwgU0xBQl9GUkVFX0RFRkFVTFQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtkcHctJmd0O29iamVjdHNfYnlfcmN1KTsKIAlsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7CiAJCXZvaWQgKmhlYWQgPSBwb3M7CiAJCXZvaWQgKm9ianAgPSBrdm1hbGxvY19vYmpfc3RhcnRfYWRkcihoZWFkKTsKQEAgLTY0MTEsMjEgJiM0Mzs2NDUxLDYwIEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaykKIAkJa3ZmcmVlX2NhbGxfcmN1KGhlYWQsIG9ianApOwogCX0KIAotCWxsbm9kZSA9IGxsaXN0X2RlbF9hbGwocmN1X3NoZWF2ZXMpOwomIzQzOwlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7ZHB3LSZndDtyY3Vfc2hlYXZlcyk7CiAJbGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaGVhZiwgbmV4dCwgbGxub2RlLCBsbG5vZGUpCiAJCWNhbGxfcmN1KCZhbXA7c2hlYWYtJmd0O3JjdV9oZWFkLCByY3VfZnJlZV9zaGVhZik7CiB9CiAKLXN0YXRpYyB2b2lkIGRlZmVyX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKmhlYWQpCiYjNDM7c3RhdGljIHZvaWQgZGVmZXJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKQogewogCXN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3OwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQbGFjZSB0aGUgbGxpc3Qgbm9kZSB3aGVyZSB0aGUgZnJlZXBvaW50ZXIgd291bGQgYmUgaWYgd2UgZnJlZWQgdGhlCiYjNDM7CSAqIG9iamVjdCBpbW1lZGlhdGVseS4gVGhhdCBtZWFucyB3ZSBjYW4gd3JpdGUgdGhlcmUgc2FmZWx5LCBvbmx5IG5lZWQKJiM0MzsJICogdG8gcmVtb3ZlIGthc2FuIHRhZyBmaXJzdC4KJiM0MzsJICovCiYjNDM7CWxsbm9kZSA9IGthc2FuX3Jlc2V0X3RhZyhvYmopICYjNDM7IHMtJmd0O29mZnNldDsKIAogCWd1YXJkKHByZWVtcHQpKCk7CiAKLQloZWFkID0ga2FzYW5fcmVzZXRfdGFnKGhlYWQpOwomIzQzOwlkcHcgPSB0aGlzX2NwdV9wdHIoJmFtcDtkZWZlcnJlZF9wZXJjcHVfd29yayk7CiYjNDM7CWlmIChsbGlzdF9hZGQobGxub2RlLCAmYW1wO2Rwdy0mZ3Q7b2JqZWN0cykpCiYjNDM7CQlpcnFfd29ya19xdWV1ZSgmYW1wO2Rwdy0mZ3Q7d29yayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRlZmVyX2ZyZWVfa2ZlbmNlKHZvaWQgKm9iaikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3OwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlOwomIzQzOwomIzQzOwkvKiBrYXNhbl9yZXNldF90YWcoKSBpcyBub3QgbmVjZXNzYXJ5LCBrZmVuY2Ugb2JqZWN0cyBhcmUgbm90IHRhZ2dlZCAqLwomIzQzOwlsbG5vZGUgPSBrZmVuY2Vfb2JqX3RvX2xsbm9kZShvYmopOwomIzQzOwomIzQzOwlndWFyZChwcmVlbXB0KSgpOwomIzQzOwomIzQzOwlkcHcgPSB0aGlzX2NwdV9wdHIoJmFtcDtkZWZlcnJlZF9wZXJjcHVfd29yayk7CiYjNDM7CWlmIChsbGlzdF9hZGQobGxub2RlLCAmYW1wO2Rwdy0mZ3Q7b2JqZWN0c19rZmVuY2UpKQomIzQzOwkJaXJxX3dvcmtfcXVldWUoJmFtcDtkcHctJmd0O3dvcmspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2Modm9pZCAqb2JqKQomIzQzO3sKJiM0MzsJc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHdlIGNhbiBzaW1wbHkgdXNlIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsYXJnZSBrbWFsbG9jIG9iamVjdAomIzQzOwkgKiBmb3IgdGhlIGxsbm9kZSwgYXMgdGhlcmUmIzM5O3Mgbm8gY3RvciBvciBUWVBFU0FGRV9CWV9SQ1UKJiM0MzsJICovCiYjNDM7CWxsbm9kZSA9IGthc2FuX3Jlc2V0X3RhZyhvYmopOwomIzQzOwomIzQzOwlndWFyZChwcmVlbXB0KSgpOwogCiAJZHB3ID0gdGhpc19jcHVfcHRyKCZhbXA7ZGVmZXJyZWRfcGVyY3B1X3dvcmspOwotCWlmIChsbGlzdF9hZGQoaGVhZCAmIzQzOyBzLSZndDtvZmZzZXQsICZhbXA7ZHB3LSZndDtvYmplY3RzKSkKJiM0MzsJaWYgKGxsaXN0X2FkZChsbG5vZGUsICZhbXA7ZHB3LSZndDtvYmplY3RzX2xhcmdlX2ttYWxsb2MpKQogCQlpcnFfd29ya19xdWV1ZSgmYW1wO2Rwdy0mZ3Q7d29yayk7CiB9CiAKQEAgLTY2NzcsOSAmIzQzOzY3NTYsMTEgQEAgc2l6ZV90IGtzaXplKGNvbnN0IHZvaWQgKm9ianApCiB9CiBFWFBPUlRfU1lNQk9MKGtzaXplKTsKIAotc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpCiYjNDM7c3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QsCiYjNDM7CQkJICAgICAgIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKQogewogCXVuc2lnbmVkIGludCBvcmRlciA9IGNvbXBvdW5kX29yZGVyKHBhZ2UpOwomIzQzOwlib29sIG5vbG9jayA9IGZyZWVfZmxhZ3MgJmFtcDsgU0xBQl9GUkVFX05PTE9DSzsKIAogCWlmIChXQVJOX09OX09OQ0UoIVBhZ2VMYXJnZUttYWxsb2MocGFnZSkpKSB7CiAJCWR1bXBfcGFnZShwYWdlLCAmIzM0O05vdCBhIGttYWxsb2MgYWxsb2NhdGlvbiYjMzQ7KTsKQEAgLTY2ODksMTQgJiM0Mzs2NzcwLDE2IEBAIHN0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0KQogCWlmIChXQVJOX09OX09OQ0Uob3JkZXIgPT0gMCkpCiAJCXByX3dhcm5fb25jZSgmIzM0O29iamVjdCBwb2ludGVyOiAweCVwXG4mIzM0Oywgb2JqZWN0KTsKIAotCWttZW1sZWFrX2ZyZWUob2JqZWN0KTsKJiM0MzsJaWYgKCFub2xvY2spCiYjNDM7CQlrbWVtbGVha19mcmVlKG9iamVjdCk7CiYjNDM7CiAJa2FzYW5fa2ZyZWVfbGFyZ2Uob2JqZWN0KTsKIAlrbXNhbl9rZnJlZV9sYXJnZShvYmplY3QpOwogCi0JbW9kX2xydXZlY19wYWdlX3N0YXRlKHBhZ2UsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CLAotCQkJICAgICAgLShQQUdFX1NJWkUgJmx0OyZsdDsgb3JkZXIpKTsKLQlfX0NsZWFyUGFnZUxhcmdlS21hbGxvYyhwYWdlKTsKLQlmcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlcik7CiYjNDM7CWlmICh1bmxpa2VseShub2xvY2sgJmFtcDsmYW1wOyBrbWVtbGVha19tYXlfbmVlZF9mcmVlKG9iamVjdCkpKQomIzQzOwkJZGVmZXJfZnJlZV9sYXJnZV9rbWFsbG9jKG9iamVjdCk7CiYjNDM7CWVsc2UKJiM0MzsJCV9fZnJlZV9sYXJnZV9rbWFsbG9jX3BhZ2UocGFnZSwgZnJlZV9mbGFncyk7CiB9CiAKIC8qCkBAIC02NzE4LDcgJiM0Mzs2ODAxLDcgQEAgdm9pZCBrdmZyZWVfcmN1X2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIAkJaWYgKHNsYWIpCiAJCQlzbGFiX2ZyZWUoc2xhYi0mZ3Q7c2xhYl9jYWNoZSwgc2xhYiwgb2JqLCBfUkVUX0lQXyk7CiAJCWVsc2UKLQkJCWZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmopOwomIzQzOwkJCWZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmosIFNMQUJfRlJFRV9ERUZBVUxUKTsKIAl9CiB9CiAKQEAgLTY3NDQsNyAmIzQzOzY4MjcsNyBAQCB2b2lkIGtmcmVlKGNvbnN0IHZvaWQgKm9iamVjdCkKIAlzbGFiID0gcGFnZV9zbGFiKHBhZ2UpOwogCWlmICghc2xhYikgewogCQkvKiBrbWFsbG9jX25vbG9jaygpIGRvZXNuJiMzOTt0IHN1cHBvcnQgbGFyZ2Uga21hbGxvYyAqLwotCQlmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgKHZvaWQgKilvYmplY3QpOwomIzQzOwkJZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsICh2b2lkICopb2JqZWN0LCBTTEFCX0ZSRUVfREVGQVVMVCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTY3NTUsMTUgJiM0Mzs2ODM4LDE0IEBAIEVYUE9SVF9TWU1CT0woa2ZyZWUpOwogCiAvKgogICogQ2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIHJhd19zcGlubG9ja190IG9yIGZyb20gSVJRIGFuZCBOTUksCi0gKiBidXQgT05MWSBmb3Igb2JqZWN0cyBhbGxvY2F0ZWQgYnkga21hbGxvY19ub2xvY2soKS4KLSAqIERlYnVnIGNoZWNrcyAobGlrZSBrbWVtbGVhayBhbmQga2ZlbmNlKSB3ZXJlIHNraXBwZWQgb24gYWxsb2NhdGlvbiwKLSAqIGhlbmNlCi0gKiBvYmogPSBrbWFsbG9jKCk7IGtmcmVlX25vbG9jayhvYmopOwotICogd2lsbCBtaXNzIGttZW1sZWFrL2tmZW5jZSBib29rIGtlZXBpbmcgYW5kIHdpbGwgY2F1c2UgZmFsc2UgcG9zaXRpdmVzLgotICogbGFyZ2Vfa21hbGxvYyBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlci4KJiM0MzsgKiBidXQgbWF5IGRlZmVyIGZyZWVpbmcgdG8gaXJxX3dvcmsoKSBpbiBzb21lIGNhc2VzLgomIzQzOyAqCiYjNDM7ICogSW50ZW5kZWQgbWFpbmx5IGZvciBvYmplY3RzIGFsbG9jYXRlZCBmcm9tIGttYWxsb2Nfbm9sb2NrKCksIGJ1dCBjYW4gaGFuZGxlCiYjNDM7ICogYWxzbyBrbWVtX2NhY2hlX2FsbG9jKCkgYW5kIGttYWxsb2MoKSBvYmplY3RzLCBpbmNsdWRpbmcgbGFyZ2Vfa21hbGxvYy4KICAqLwogdm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KQogewomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3Qgc2xhYiAqc2xhYjsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIAl2b2lkICp4ID0gKHZvaWQgKilvYmplY3Q7CkBAIC02NzcxLDkgJiM0Mzs2ODUzLDEwIEBAIHZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdCkKIAlpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihvYmplY3QpKSkKIAkJcmV0dXJuOwogCi0Jc2xhYiA9IHZpcnRfdG9fc2xhYihvYmplY3QpOwomIzQzOwlwYWdlID0gdmlydF90b19wYWdlKG9iamVjdCk7CiYjNDM7CXNsYWIgPSBwYWdlX3NsYWIocGFnZSk7CiAJaWYgKHVubGlrZWx5KCFzbGFiKSkgewotCQlXQVJOX09OQ0UoMSwgJiMzNDtsYXJnZV9rbWFsbG9jIGlzIG5vdCBzdXBwb3J0ZWQgYnkga2ZyZWVfbm9sb2NrKCkmIzM0Oyk7CiYjNDM7CQlmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgKHZvaWQgKilvYmplY3QsIFNMQUJfRlJFRV9OT0xPQ0spOwogCQlyZXR1cm47CiAJfQogCkBAIC02NzkxLDYgJiM0Mzs2ODc0LDEyIEBAIHZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdCkKIAkgKiBzaW5jZSB0aGV5IHRha2Ugc3BpbmxvY2tzIG9yIG5vdCBzYWZlIGZyb20gYW55IGNvbnRleHQuCiAJICovCiAJa21zYW5fc2xhYl9mcmVlKHMsIHgpOwomIzQzOwomIzQzOwlpZiAoaXNfa2ZlbmNlX2FkZHJlc3MoeCkpIHsKJiM0MzsJCWRlZmVyX2ZyZWVfa2ZlbmNlKHgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBJZiBLQVNBTiBmaW5kcyBhIGtlcm5lbCBidWcgaXQgd2lsbCBkbyBrYXNhbl9yZXBvcnRfaW52YWxpZF9mcmVlKCkKIAkgKiB3aGljaCB3aWxsIGNhbGwgcmF3X3NwaW5fbG9ja19pcnFzYXZlKCkgd2hpY2ggaXMgdGVjaG5pY2FsbHkKQEAgLTY4MDksOSAmIzQzOzY4OTgsMjMgQEAgdm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KQogCSAqLwogCWthc2FuX3NsYWJfZnJlZShzLCB4LCBmYWxzZSwgZmFsc2UsIC8qIHNraXAgcXVhcmFudGluZSAqL3RydWUpOwogCiYjNDM7CS8qCiYjNDM7CSAqIHdpdGgga2ZyZWUoKSB0aGUga21lbWxlYWsgaGFuZGxpbmcgaGFwcGVucyBtdWNoIHNvb25lciwgYnV0IGZvcgomIzQzOwkgKiBkZWZlcmluZyB3ZSBuZWVkIHRvIHdyaXRlIGxsbm9kZSB0byB0aGUgb2JqZWN0JiMzOTtzIGZyZWVwb2ludGVyIHNvCiYjNDM7CSAqIHdlIHNob3VsZCBoYXZlIGl0IGluIHRoZSBzdGF0ZSB3aGVuIGl0JiMzOTtzIG5vIGxvbmdlciB0cmVhdGVkIGFzCiYjNDM7CSAqIGFsbG9jYXRlZCBieSBrYXNhbiBldGMuCiYjNDM7CSAqCiYjNDM7CSAqIGRlZmVyX2ZyZWUgd2lsbCBhbHNvIHJlc2V0IHRoZSBwb2ludGVyIHRhZywgYnV0IGl0JiMzOTtzIG9rIHRvIGRvIGEKJiM0MzsJICogZGVmZXJyZWQga21lbWxlYWtfZnJlZSgpIHVzaW5nIHRoZSB1bnRhZ2dlZCBwb2ludGVyLCBiZWNhdXNlCiYjNDM7CSAqIF9fbG9va3VwX29iamVjdCgpIHJlc2V0cyB0aGUgdGFnIGFueXdheQomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KGttZW1sZWFrX21heV9uZWVkX2ZyZWVfcmVjdXJzaXZlKHgsIHMtJmd0O2ZsYWdzKSkpCiYjNDM7CQlnb3RvIGRlZmVyOwomIzQzOwogCWlmIChsaWtlbHkoY2FuX2ZyZWVfdG9fcGNzKHNsYWIpKSAmYW1wOyZhbXA7IGxpa2VseShmcmVlX3RvX3BjcyhzLCB4LCBmYWxzZSkpKQogCQlyZXR1cm47CiAKJiM0MztkZWZlcjoKIAkvKgogCSAqIF9fc2xhYl9mcmVlKCkgY2FuIGxvY2tsZXNzbHkgY21weGNoZzE2IGludG8gYSBzbGFiLCBidXQgdGhlbiBpdCBtaWdodAogCSAqIG5lZWQgdG8gdGFrZSBzcGluX2xvY2sgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4KQEAgLTcxMTQsNyAmIzQzOzcyMTcsNyBAQCBpbnQgYnVpbGRfZGV0YWNoZWRfZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLAogCWlmICghcykgewogCQkvKiBIYW5kbGUga2FsbG9jJiMzOTtlZCBvYmplY3RzICovCiAJCWlmICghc2xhYikgewotCQkJZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iamVjdCk7CiYjNDM7CQkJZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iamVjdCwgU0xBQl9GUkVFX0RFRkFVTFQpOwogCQkJZGYtJmd0O3NsYWIgPSBOVUxMOwogCQkJcmV0dXJuIHNpemU7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQyMAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGtmcmVlX25vbG9jaygpIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgYWx0ZXJpbmcgYGtmcmVlX25vbG9jaygpYCB3aXRoaW4gYG1tL3NsdWIuY2Ag4oCTIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHBhcnRpY3VsYXJseSB0aGUgU0xVQiBhbGxvY2F0b3IuIFRoZSBrZXkgaXMgdGhhdCBpdCYjMzk7cyBleHBhbmRpbmcgdGhlIHNjb3BlIG9mIGBrZnJlZV9ub2xvY2soKWAgdG8gaGFuZGxlIG9iamVjdHMgYmV5b25kIGl0cyBvcmlnaW5hbCBkZXNpZ24sIG5vdyBpbmNsdWRpbmcgbWVtb3J5IGFsbG9jYXRlZCB2aWEgYGttYWxsb2MoKWAsIGBrbWVtX2NhY2hlX2FsbG9jKClgLCBhbmQgaW1wb3J0YW50bHksICpsYXJnZSogYGttYWxsb2NgIGFsbG9jYXRpb25zLCBhcyB3ZWxsIGFzIEtGRU5DRSBvYmplY3RzLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBpbXBseWluZyBtb3JlIGNvbXByZWhlbnNpdmUgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoYXQgZnVuY3Rpb24uCgpUaGUgYWRkaXRpb24gb2YgYW4gYGlycV93b3JrYCBtZWNoYW5pc20gaGludHMgYXQgaGFuZGxpbmcgY2VydGFpbiBmcmVlaW5nIG9wZXJhdGlvbnMgYXN5bmNocm9ub3VzbHkuIFRoaXMgaXMgbGlrZWx5IGluIHJlc3BvbnNlIHRvIGlzc3VlcyB3aXRoIGBrbWVtbGVha2Agb3IgS0ZFTkNFIHRoYXQgd291bGQgaGF2ZSByZXF1aXJlZCB0aGUgZnJlZWluZyB0byBvY2N1ciBvdXRzaWRlIG9mIG5vcm1hbCBpbnRlcnJ1cHQgY29udGV4dC4gU28sIHBvdGVudGlhbGx5IHdlIGFyZSBkZWFsaW5nIHdpdGggZGVmZXJyZWQgZnJlZWluZyBpbiBjZXJ0YWluIGNvbmRpdGlvbnMsIHdoaWNoIGlzIGNvbW1vbiBpbiBhIG1vZGVybiBrZXJuZWwuCgpOb3csIEkgc2VlIGl0JiMzOTtzIGFsc28gaW1wYWN0aW5nIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKClgIGluIGBrZXJuZWwvc2NoZWQvY29yZS5jYCwgcmVwbGFjaW5nIGBrZnJlZV9yY3UoKWAgd2l0aCBga2ZyZWVfbm9sb2NrKClgLiBUaGlzIGlzIGFub3RoZXIgaW50ZXJlc3RpbmcgcG9pbnQuIFdoeSB0aGlzIGNoYW5nZT8gRG9lcyB0aGlzIG1lYW4gYGtmcmVlX25vbG9jaygpYCBpcyBub3cgY29uc2lkZXJlZCBtb3JlIGFwcHJvcHJpYXRlIG9yIGVmZmljaWVudCBpbiB0aGlzIGNvbnRleHQ/IExldCYjMzk7cyBjaGVjay4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIGBrZnJlZV9ub2xvY2soKWAgaXRzZWxmLiBJdCYjMzk7cyBhIGNvcmUga2VybmVsIGZ1bmN0aW9uLiBUaGUgcGF0Y2gmIzM5O3MgcHJpbWFyeSBjb250cmlidXRpb24gaXMgc3VwcG9ydGluZyB0aGVzZSBvdGhlciBtZW1vcnkgYWxsb2NhdGlvbiBtZXRob2RzLiBFc3NlbnRpYWxseSwgaXQgYWRkcyB0aGUgY2FwYWJpbGl0eSBvZiBmcmVlaW5nIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGttYWxsb2Mva21lbV9jYWNoZV9hbGxvYyBldGMuLi4gYXMgd2VsbCBhcyBkZWZlcnJpbmcgZnJlZWluZyB0byBgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm5gIHdoZW4gbmVjZXNzYXJ5LgoKUmlnaHQsIHNvIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLCBJIG5lZWQgdG8gc3RhcnQgdHJhY2luZyB0aGUgdXNhZ2Ugb2YgYGtmcmVlX25vbG9jaygpYC4gTGV0JiMzOTtzIHNlZSB3aGVyZSB0aGlzIGlzIG5vdyBiZWluZyBjYWxsZWQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGNoYW5nZXMgdG8gaG93IGxhcmdlIGBrbWFsbG9jYCBhbmQgS0ZFTkNFIG9iamVjdHMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIG5vdyBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZV9ub2xvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zbGFiLmg9NTkyPXZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqb2JqcCk7XG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo1OTM6dm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqcCk7XG5pbmNsdWRlL2xpbnV4L3NsYWIuaC01OTQtdm9pZCBrZnJlZV9zZW5zaXRpdmUoY29uc3Qgdm9pZCAqb2JqcCk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY1OT1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTc1NS1cdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xua2VybmVsL2JwZi9hcmVuYS5jOjc1NjpcdGtmcmVlX25vbG9jayhwYWdlcyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzU3LVx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzY5LW91dF9mcmVlX3BhZ2VzOlxua2VybmVsL2JwZi9hcmVuYS5jOjc3MDpcdGtmcmVlX25vbG9jayhwYWdlcyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcxLVx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9OTYyPXN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTAxNi1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMDE3Olx0XHRrZnJlZV9ub2xvY2socyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTAxOC1cdH1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0xMjQyPXN0YXRpYyB2b2lkIGJwZl9hc3luY19jYl9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xMjUyLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6MTI1MzpcdGtmcmVlX25vbG9jayhjYik7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xMjU0LX1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0xMzE3PXN0YXRpYyBpbnQgX19icGZfYXN5bmNfaW5pdChzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4gKmFzeW5jLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgZmxhZ3MsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTM3Mi1cdFx0LyogTG9zdCB0aGUgcmFjZSB0byBpbml0aWFsaXplIHRoaXMgYnBmX2FzeW5jX2tlcm4sIGRyb3AgdGhlIGFsbG9jYXRlZCBvYmplY3QgKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjEzNzM6XHRcdGtmcmVlX25vbG9jayhjYik7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xMzc0LVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTE2NjI9c3RhdGljIHZvaWQgYnBmX2FzeW5jX2lycV93b3JrZXIoc3RydWN0IGlycV93b3JrICp3b3JrKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTE2NzctXHRcdGJwZl9hc3luY19wcm9jZXNzX29wKGNiLCBjbWQtXHUwMDNlb3AsIGNtZC1cdTAwM2Vuc2VjLCBjbWQtXHUwMDNlbW9kZSk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoxNjc4Olx0XHRrZnJlZV9ub2xvY2soY21kKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTE2NzktXHR9XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDUyMD1zdGF0aWMgc3RydWN0IGJwZl90YXNrX3dvcmtfY3R4ICpicGZfdGFza193b3JrX2ZldGNoX2N0eChzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqdHcsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU0My1cdFx0ICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTQ0Olx0XHRrZnJlZV9ub2xvY2soY3R4KTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1NDUtXHRcdHJldHVybiBvbGRfY3R4O1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ3MTA9X19icGZfa2Z1bmMgaW50IGJwZl9keW5wdHJfZmlsZV9kaXNjYXJkKHN0cnVjdCBicGZfZHlucHRyICpkeW5wdHIpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDcxOC1cdGZyZWFkZXJfY2xlYW51cChcdTAwMjZkZi1cdTAwM2VmcmVhZGVyKTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3MTk6XHRrZnJlZV9ub2xvY2soZGYpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDcyMC1cdGJwZl9keW5wdHJfc2V0X251bGwocHRyKTtcbi0tXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYz0xMzY9aW50IHJhbmdlX3RyZWVfY2xlYXIoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4tLVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMTcyLVx0XHRcdHJhbmdlX2l0X3JlbW92ZShybiwgcnQpO1xua2VybmVsL2JwZi9yYW5nZV90cmVlLmM6MTczOlx0XHRcdGtmcmVlX25vbG9jayhybik7XG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0xNzQtXHRcdH1cbi0tXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYz0xOTM9aW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxuLS1cbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTIyNS1cdFx0cmFuZ2VfaXRfaW5zZXJ0KGxlZnQsIHJ0KTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjIyNjpcdFx0a2ZyZWVfbm9sb2NrKHJpZ2h0KTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTIyNy1cdH0gZWxzZSBpZiAobGVmdCkge1xuLS1cbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jPTI0OD12b2lkIHJhbmdlX3RyZWVfZGVzdHJveShzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQpXG4tLVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMjUzLVx0XHRyYW5nZV9pdF9yZW1vdmUocm4sIHJ0KTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjI1NDpcdFx0a2ZyZWVfbm9sb2NrKHJuKTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTI1NS1cdH1cbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTkyPXN0YXRpYyB2b2lkIGJwZl9zdHJlYW1fZnJlZV9lbGVtKHN0cnVjdCBicGZfc3RyZWFtX2VsZW0gKmVsZW0pXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTkzLXtcbmtlcm5lbC9icGYvc3RyZWFtLmM6OTQ6XHRrZnJlZV9ub2xvY2soZWxlbSk7XG5rZXJuZWwvYnBmL3N0cmVhbS5jLTk1LX1cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTI4MDM9dm9pZCBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld19tYXNrKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjgxNS1cdCAqIEJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgd2l0aCBwLVx1MDAzZXBpX2xvY2sgaGVsZCwgaXQgaXMgbm90IHBvc3NpYmxlXG5rZXJuZWwvc2NoZWQvY29yZS5jOjI4MTY6XHQgKiB0byB1c2Uga2ZyZWUoKSBoZXJlICh3aGVuIFBSRUVNUFRfUlQ9eSksIHRodXMgdXNlIGtmcmVlX25vbG9jaygpXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI4MTctXHQgKi9cbmtlcm5lbC9zY2hlZC9jb3JlLmM6MjgxODpcdGtmcmVlX25vbG9jayhhYy51c2VyX21hc2spO1xua2VybmVsL3NjaGVkL2NvcmUuYy0yODE5LX1cbi0tXG5saWIvdGVzdHMvc2x1Yl9rdW5pdC5jPTM0ND1zdGF0aWMgdm9pZCB0ZXN0X25vbG9jayhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxuLS1cbmxpYi90ZXN0cy9zbHViX2t1bml0LmMtMzYxLVx0ZWxzZVxubGliL3Rlc3RzL3NsdWJfa3VuaXQuYzozNjI6XHRcdGtmcmVlX25vbG9jayhvYmpwKTtcbmxpYi90ZXN0cy9zbHViX2t1bml0LmMtMzYzLVxuLS1cbm1tL2tmZW5jZS9rZmVuY2UuaD01OT1zdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhIHtcbi0tXG5tbS9rZmVuY2Uva2ZlbmNlLmgtNjItXHRcdHN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDtcdC8qIEZvciBkZWxheWVkIGZyZWVpbmcuICovXG5tbS9rZmVuY2Uva2ZlbmNlLmg6NjM6XHRcdHN0cnVjdCBsbGlzdF9ub2RlIGxsbm9kZTtcdC8qIEZvciBrZnJlZV9ub2xvY2soKS4gKi9cbm1tL2tmZW5jZS9rZmVuY2UuaC02NC1cdH07XG4tLVxubW0vc2xhYl9jb21tb24uYz01Mjc9dm9pZCBrbWVtX2NhY2hlX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2xhYl9jb21tb24uYy01NTItXG5tbS9zbGFiX2NvbW1vbi5jOjU1MzpcdC8qIFdhaXQgZm9yIGRlZmVycmVkIHdvcmsgZnJvbSBrbWFsbG9jL2tmcmVlX25vbG9jaygpICovXG5tbS9zbGFiX2NvbW1vbi5jLTU1NC1cdGRlZmVycmVkX3dvcmtfYmFycmllcigpO1xuLS1cbm1tL3NsdWIuYy0xNjAtICogICBQcmVlbXB0aW9uIGlzIGRpc2FibGVkIGFzIHBhcnQgb2YgbG9jYWxfdHJ5bG9jayBvcGVyYXRpb25zLlxubW0vc2x1Yi5jOjE2MTogKiAgIGttYWxsb2Nfbm9sb2NrKCkgYW5kIGtmcmVlX25vbG9jaygpIGFyZSBzYWZlIGluIE5NSSBjb250ZXh0IGJ1dCBzZWVcbm1tL3NsdWIuYy0xNjItICogICB0aGVpciBsaW1pdGF0aW9ucy5cbi0tXG5tbS9zbHViLmM9MjE0Nj1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTIyMjEtXHRcdGlmICh1bmxpa2VseSghYWxsb3dfc3BpbikpXG5tbS9zbHViLmM6MjIyMjpcdFx0XHRrZnJlZV9ub2xvY2sodmVjKTtcbm1tL3NsdWIuYy0yMjIzLVx0XHRlbHNlXG4tLVxubW0vc2x1Yi5jPTIyMzY9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMjU4LVx0ZWxzZVxubW0vc2x1Yi5jOjIyNTk6XHRcdGtmcmVlX25vbG9jayhvYmpfZXh0cyk7XG5tbS9zbHViLmMtMjI2MC1cdHNsYWItXHUwMDNlb2JqX2V4dHMgPSAwO1xuLS1cbm1tL3NsdWIuYz0yNzk0PXN0YXRpYyB2b2lkIF9fZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLFxuLS1cbm1tL3NsdWIuYy0yODA4LVx0aWYgKHVubGlrZWx5KGZyZWVfZmxhZ3MgXHUwMDI2IFNMQUJfRlJFRV9OT0xPQ0spKVxubW0vc2x1Yi5jOjI4MDk6XHRcdGtmcmVlX25vbG9jayhzaGVhZik7XG5tbS9zbHViLmMtMjgxMC1cdGVsc2Vcbi0tXG5tbS9zbHViLmM9NjgzNz1FWFBPUlRfU1lNQk9MKGtmcmVlKTtcbi0tXG5tbS9zbHViLmMtNjg0NS0gKi9cbm1tL3NsdWIuYzo2ODQ2OnZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcbm1tL3NsdWIuYy02ODQ3LXtcbi0tXG5tbS9zbHViLmMtNjg4OC1cdCAqIGthc2FuX3JlcG9ydF9pbnZhbGlkX2ZyZWUoKSAtXHUwMDNlIHJhd19zcGluX2xvY2tfaXJxc2F2ZSgpIC1cdTAwM2UgTk1JXG5tbS9zbHViLmM6Njg4OTpcdCAqICAtXHUwMDNlIGtmcmVlX25vbG9jaygpIC1cdTAwM2Uga2FzYW5fcmVwb3J0X2ludmFsaWRfZnJlZSgpIG9uIHRoZSBzYW1lIENQVVxubW0vc2x1Yi5jLTY4OTAtXHQgKiBpcyBkb3VibGUgYnVnZ3kgYW5kIGRlc2VydmVzIHRvIGRlYWRsb2NrLlxuLS1cbm1tL3NsdWIuYy02OTI0LX1cbm1tL3NsdWIuYzo2OTI1OkVYUE9SVF9TWU1CT0xfR1BMKGtmcmVlX25vbG9jayk7XG5tbS9zbHViLmMtNjkyNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYwOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBrZnJlZV9ub2xvY2tgIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtmcmVlX25vbG9ja2AsIHdoaWNoIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGZ1bmN0aW9uLiBJIGtub3cgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIHVzZWQgaW4gQlBGLCB0aGUgc2NoZWR1bGVyLCBhbmQgZXZlbiB0aGUgU0xVQiBhbGxvY2F0b3IgaXRzZWxmIOKAkyB0aGF0IG1ha2VzIGl0IGEgY3JpdGljYWwgcGllY2UuIFRoZSBmaXJzdCBjaGFuZ2UsIHN3YXBwaW5nIG91dCBga2ZyZWVfcmN1YCBmb3IgYGtmcmVlX25vbG9ja2Agd2l0aGluIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlYCBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AsIGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbi4gYGtmcmVlX3JjdWAgaXMgYSB3YXkgdG8gc2FmZWx5IGZyZWUgbWVtb3J5IHRoYXQgbWlnaHQgc3RpbGwgYmUgaW4gdXNlIGJ5IG90aGVyIENQVXMsIHJpZ2h0PyBTbywgdGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24g4oCTIG9yIGEgc2lnbmlmaWNhbnQgcmlzaywgZGVwZW5kaW5nIG9uIHRoZSBpbXBsaWNhdGlvbnMuCgpUaGUgc2Vjb25kIHBhcnQgbWVudGlvbnMgc3VwcG9ydGluZyBsYXJnZSBga21hbGxvY2AgYW5kIEtGRU5DRSB3aXRoaW4gYGtmcmVlX25vbG9ja2AuIFRoYXQgY291bGQgYmUgYSBjb21wYXRpYmlsaXR5IG9yIGVmZmljaWVuY3kgY2hhbmdlLgoKTm93LCB3YWl0IGEgbWludXRlLi4uIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlYC4uLiB0aGF0JiMzOTtzIGEgKmNvcmUqIHNjaGVkdWxlciBmdW5jdGlvbi4gVGhlIGltcGxpY2F0aW9ucyBvZiBnZXR0aW5nIHRoaXMgd3JvbmcgYXJlIHN1YnN0YW50aWFsLCB0b3VjaGluZyBzY2hlZHVsaW5nIGlzIGEgdmVyeSBzZW5zaXRpdmUgYXJlYS4gVGhpcyBtZWFucyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNhbGwgY2hhaW4gaW4gZGV0YWlsLiBNeSBmaXJzdCBpbnN0aW5jdCBoZXJlIGlzIHRvIHRyYWNlIHdoZXJlIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlYCBpcyAqYWN0dWFsbHkqIGNhbGxlZCBhbmQgZnVsbHkgdW5kZXJzdGFuZCBpdHMgdXNhZ2UgbW9kZWwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBmbG93IG9mIGRhdGEgaGVyZSBhbmQgZW5zdXJlIHRoaXMgcmVwbGFjZW1lbnQgaXMgYWN0dWFsbHkgc2FmZS4gSSYjMzk7bGwgbmVlZCB0byBkbyBzb21lIGNvZGUgZGl2aW5nIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSwgZ2l2ZW4gaXRzIHNpZ25pZmljYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfY3B1c19hbGxvd2VkX2ZvcmNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2NoZWQuaD0xOTEwPWV4dGVybiB2b2lkIGRsX2J3X2ZyZWUoaW50IGNwdSwgdTY0IGRsX2J3KTtcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xOTExLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjE5MTI6Lyogc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpIC0gY29uc2lkZXIgdXNpbmcgc2V0X2NwdXNfYWxsb3dlZF9wdHIoKSBpbnN0ZWFkICovXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTkxMzpleHRlcm4gdm9pZCBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld19tYXNrKTtcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xOTE0LVxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM9NDA5Mz1ib29sIGNwdXNldF9jcHVzX2FsbG93ZWRfZmFsbGJhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYy00MTAxLVx0aWYgKGlzX2luX3YyX21vZGUoKSBcdTAwMjZcdTAwMjYgY3B1bWFza19zdWJzZXQoY3NfbWFzaywgcG9zc2libGVfbWFzaykpIHtcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM6NDEwMjpcdFx0c2V0X2NwdXNfYWxsb3dlZF9mb3JjZSh0c2ssIGNzX21hc2spO1xua2VybmVsL2Nncm91cC9jcHVzZXQuYy00MTAzLVx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi0tXG5rZXJuZWwva3RocmVhZC5jPTU2Nj1zdGF0aWMgdm9pZCBfX2t0aHJlYWRfYmluZF9tYXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzdGF0ZSlcbi0tXG5rZXJuZWwva3RocmVhZC5jLTU3My1cdHNjb3BlZF9ndWFyZCAocmF3X3NwaW5sb2NrX2lycXNhdmUsIFx1MDAyNnAtXHUwMDNlcGlfbG9jaylcbmtlcm5lbC9rdGhyZWFkLmM6NTc0Olx0XHRzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHAsIG1hc2spO1xua2VybmVsL2t0aHJlYWQuYy01NzUtXG4tLVxua2VybmVsL2t0aHJlYWQuYz04Mzk9aW50IGt0aHJlYWRfYWZmaW5lX3ByZWZlcnJlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKVxuLS1cbmtlcm5lbC9rdGhyZWFkLmMtODY3LVx0c2NvcGVkX2d1YXJkIChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2cC1cdTAwM2VwaV9sb2NrKVxua2VybmVsL2t0aHJlYWQuYzo4Njg6XHRcdHNldF9jcHVzX2FsbG93ZWRfZm9yY2UocCwgYWZmaW5pdHkpO1xua2VybmVsL2t0aHJlYWQuYy04NjktXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz0yNzkzPWRvX3NldF9jcHVzX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgYWZmaW5pdHlfY29udGV4dCAqY3R4KVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjgwMi0gKi9cbmtlcm5lbC9zY2hlZC9jb3JlLmM6MjgwMzp2b2lkIHNldF9jcHVzX2FsbG93ZWRfZm9yY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbmV3X21hc2spXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI4MDQte1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9MjgyMT1pbnQgZHVwX3VzZXJfY3B1c19wdHIoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjLFxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjg0OC1cdCAqIFRob3VnaCB1bmxpa2VseSwgdXNlcl9jcHVzX3B0ciBjYW4gYmUgcmVzZXQgdG8gTlVMTCBieSBhIGNvbmN1cnJlbnRcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Mjg0OTpcdCAqIHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKS5cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjg1MC1cdCAqL1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9MzU0MD1zdGF0aWMgaW50IHNlbGVjdF9mYWxsYmFja19ycShpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy0zNTc5LVx0XHRjYXNlIHBvc3NpYmxlOlxua2VybmVsL3NjaGVkL2NvcmUuYzozNTgwOlx0XHRcdHNldF9jcHVzX2FsbG93ZWRfZm9yY2UocCwgdGFza19jcHVfZmFsbGJhY2tfbWFzayhwKSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTM1ODEtXHRcdFx0c3RhdGUgPSBmYWlsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTIyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudDogUHJvbWlzaW5nIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2VgIGlzIGRlZmluaXRlbHkgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGNsZWFybHkgcmVhY2hhYmxlLiBCZXlvbmQgdGhhdCwgSSBzZWUgYGtmcmVlX25vbG9ja2AgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIEJQRiBhcmVuYSBhbmQgcmFuZ2UgdHJlZSwgd2hpY2ggaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBhdHRlbnRpb24gYXMgYSBwb3RlbnRpYWwgYXJlYSB0byBleHBsb3JlLgoKSSYjMzk7bSBzZWVpbmcgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzIGluIGBtbS9zbHViLmNgIGFuZCBgbW0va21lbWxlYWsuY2AuIFNwZWNpZmljYWxseSwgdGhlIGludHJvZHVjdGlvbiBvZiBga21lbWxlYWtfbWF5X25lZWRfZnJlZWAgYW5kIHRoZSBkZWZlcnJhbCBvZiBmcmVlaW5nIG9wZXJhdGlvbnMgdG8gYGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuYCBhcmUgbWFqb3IgcmVkIGZsYWdzLCBlc3NlbnRpYWxseSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMuIEkgbmVlZCB0byBkaWcgaW50byB0aG9zZSBmdW5jdGlvbnMgaW4gYG1tL3NsdWIuY2AgbmV4dC4KCkFscmlnaHQsIGxvb2tpbmcgYXQgYG1tL3NsdWIuY2AsIEkgc2VlIGBkZWZlcl9mcmVlX2tmZW5jZWAgYW5kIGBkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2NgIGhhdmUgYmVlbiBhZGRlZCwgYW5kIHRoZXkgYXJlIGRlZmVycmluZyBmcmVlaW5nIHRvIGBkZWZlcnJlZF9wZXJjcHVfd29ya19mbmAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIGNvbmZpcm0gYGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuYCBpcyByZWFjaGFibGUuCgpZZXAsIGBkZWZlcnJlZF9wZXJjcHVfd29ya19mbmAgaXMgcmVhY2hhYmxlIHRocm91Z2ggYW4gYGlycV93b3JrYCBxdWV1ZWQgYnkgYGRlZmVyX2ZyZWVgLCBgZGVmZXJfZnJlZV9rZmVuY2VgLCBhbmQgYGRlZmVyX2ZyZWVfbGFyZ2Vfa21hbGxvY2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHNwb3Qgd29ydGggc3BlbmRpbmcgc29tZSB0aW1lIG9uIHdpdGggdGhlIGZ1enplci4KCk9rYXksIGxldCYjMzk7cyBuYWlsIGRvd24gc29tZSBmb2N1cyBzeW1ib2xzLiBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZWAsIGBrZnJlZV9ub2xvY2tgLCBga21lbWxlYWtfbWF5X25lZWRfZnJlZWAsIGBkZWZlcl9mcmVlX2tmZW5jZWAgKHdoaWNoIGxvb2tzIHRvIGJlIHN0YXRpYyksIGBkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2NgIChhbHNvIHN0YXRpYyksIGBkZWZlcnJlZF9wZXJjcHVfd29ya19mbmAgKHN0YXRpYyksIGBmcmVlX2xhcmdlX2ttYWxsb2NgIChzdGF0aWMpLCBhbmQgZmluYWxseSBga2ZlbmNlX29ial90b19sbG5vZGVgIGFuZCBga2ZlbmNlX2xsbm9kZV90b19vYmpgLiBUaG9zZSBsYXN0IHR3byBsb29rIGxpa2UgdGhleSBjb3VsZCBiZSBpbnRlcmVzdGluZy4KCkhvbGQgb24gYSBtaW51dGXigKYgRm9jdXNpbmcgaW4gb24gYGtmcmVlX25vbG9ja2AsIHRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZWAgaXMgZ29vZCB0b28uIEFuZCBga21lbWxlYWtfbWF5X25lZWRfZnJlZWAgaXMgYWxzbyBhIHByaW1lIGNhbmRpZGF0ZS4gTGV0IG1lIGNoZWNrIHRoZSBrZXJuZWwgc291cmNlIHRvIHNlZSBpZiBga2ZlbmNlX29ial90b19sbG5vZGVgIGFuZCBga2ZlbmNlX2xsbm9kZV90b19vYmpgIGFyZSBleHBvcnRlZC4gVGhleSYjMzk7cmUgaW4gYG1tL2tmZW5jZS9jb3JlLmNgLiBMZXQgbWUgY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZmVuY2Vfb2JqX3RvX2xsbm9kZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2tmZW5jZS5oPTE4Mz1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayBib29sIGtmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG4tLVxuaW5jbHVkZS9saW51eC9rZmVuY2UuaC0xOTAtXG5pbmNsdWRlL2xpbnV4L2tmZW5jZS5oOjE5MTpzdHJ1Y3QgbGxpc3Rfbm9kZSAqa2ZlbmNlX29ial90b19sbG5vZGUodm9pZCAqYWRkcik7XG5pbmNsdWRlL2xpbnV4L2tmZW5jZS5oLTE5Mi12b2lkICprZmVuY2VfbGxub2RlX3RvX29iaihzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2tmZW5jZS5oPTI0MD1zdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGtmZW5jZV9mcmVlKHZvaWQgKmFkZHIpIHsgcmV0dXJuIGZhbHNlOyB9XG5pbmNsdWRlL2xpbnV4L2tmZW5jZS5oOjI0MTpzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKSB7IHJldHVybiBOVUxMOyB9XG5pbmNsdWRlL2xpbnV4L2tmZW5jZS5oLTI0Mi1zdGF0aWMgaW5saW5lIHZvaWQgKmtmZW5jZV9sbG5vZGVfdG9fb2JqKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpIHsgcmV0dXJuIE5VTEw7IH1cbi0tXG5tbS9rZmVuY2UvY29yZS5jPTEyNDc9dm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG4tLVxubW0va2ZlbmNlL2NvcmUuYy0xMjczLVxubW0va2ZlbmNlL2NvcmUuYzoxMjc0OnN0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKVxubW0va2ZlbmNlL2NvcmUuYy0xMjc1LXtcbi0tXG5tbS9zbHViLmM9NjQ3OD1zdGF0aWMgdm9pZCBkZWZlcl9mcmVlX2tmZW5jZSh2b2lkICpvYmopXG4tLVxubW0vc2x1Yi5jLTY0ODMtXHQvKiBrYXNhbl9yZXNldF90YWcoKSBpcyBub3QgbmVjZXNzYXJ5LCBrZmVuY2Ugb2JqZWN0cyBhcmUgbm90IHRhZ2dlZCAqL1xubW0vc2x1Yi5jOjY0ODQ6XHRsbG5vZGUgPSBrZmVuY2Vfb2JqX3RvX2xsbm9kZShvYmopO1xubW0vc2x1Yi5jLTY0ODUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MzMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQWRkaW5nIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKgoKT2theSwgSSBuZWVkIHRvIGludGVncmF0ZSB0aGVzZSBmdW5jdGlvbnM6IGBrZnJlZV9ub2xvY2tgLCBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZWAsIGBrbWVtbGVha19tYXlfbmVlZF9mcmVlYCwgYGtmZW5jZV9vYmpfdG9fbGxub2RlYCwgYW5kIGBrZmVuY2VfbGxub2RlX3RvX29iamAuIE5vdywgYmVmb3JlIEkganVzdCBzdGFydCB0aHJvd2luZyBjb2RlIGFyb3VuZCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIHByZXR0eSBzdXJlIGBrZmVuY2Vfb2JqX3RvX2xsbm9kZWAgcmVxdWlyZXMgYENPTkZJR19LRkVOQ0VgLiBBbmQgYGttZW1sZWFrX21heV9uZWVkX2ZyZWVgIGRlZmluaXRlbHkgaGluZ2VzIG9uIGBDT05GSUdfREVCVUdfS01FTUxFQUtgLiBJJiMzOTtsbCBjb25maXJtIHRoYXQgYnkgcmVmZXJlbmNpbmcgdGhlIHNvdXJjZSBjb2RlIGRpcmVjdGx5LiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbW0va21lbWxlYWsuY2AgdG8gYmUgc3VyZSBhYm91dCBga21lbWxlYWtfbWF5X25lZWRfZnJlZWAgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIFRoYXTigJlzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gYmUgc3VyZSBldmVyeXRoaW5nIGlzIGludGVncmF0ZWQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWVtbGVha19tYXlfbmVlZF9mcmVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva21lbWxlYWsuaD0yND1leHRlcm4gdm9pZCBrbWVtbGVha19mcmVlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7XG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmg6MjU6Ym9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7XG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgtMjYtZXh0ZXJuIHZvaWQga21lbWxlYWtfZnJlZV9wYXJ0KGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpIF9fcmVmO1xuLS1cbmluY2x1ZGUvbGludXgva21lbWxlYWsuaD00OD1zdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXG4tLVxuaW5jbHVkZS9saW51eC9rbWVtbGVhay5oLTUzLVxuaW5jbHVkZS9saW51eC9rbWVtbGVhay5oOjU0OnN0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncylcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaC01NS17XG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgtNTYtXHRpZiAoIShmbGFncyBcdTAwMjYgU0xBQl9OT0xFQUtUUkFDRSkpXG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmg6NTc6XHRcdHJldHVybiBrbWVtbGVha19tYXlfbmVlZF9mcmVlKHB0cik7XG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgtNTgtXG4tLVxuaW5jbHVkZS9saW51eC9rbWVtbGVhay5oPTk1PXN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncylcbi0tXG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgtOTctfVxuaW5jbHVkZS9saW51eC9rbWVtbGVhay5oOjk4OnN0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlKGNvbnN0IHZvaWQgKnB0cilcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaC05OS17XG4tLVxuaW5jbHVkZS9saW51eC9rbWVtbGVhay5oLTEwMS19XG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmg6MTAyOnN0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncylcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaC0xMDMte1xuLS1cbm1tL2ttZW1sZWFrLmM9MTE2OT1FWFBPUlRfU1lNQk9MX0dQTChrbWVtbGVha19mcmVlKTtcbi0tXG5tbS9rbWVtbGVhay5jLTExNzEtLyoqXG5tbS9rbWVtbGVhay5jOjExNzI6ICoga21lbWxlYWtfbWF5X25lZWRfZnJlZSAtIGNoZWNrIGlmIG9iamVjdCBpcyByZWdpc3RlcmVkXG5tbS9rbWVtbGVhay5jLTExNzMtICogQHB0cjpcdHBvaW50ZXIgdG8gYmVnaW5uaW5nIG9mIHRoZSBvYmplY3Rcbi0tXG5tbS9rbWVtbGVhay5jLTExODgtICovXG5tbS9rbWVtbGVhay5jOjExODk6Ym9vbCBfX3JlZiBrbWVtbGVha19tYXlfbmVlZF9mcmVlKGNvbnN0IHZvaWQgKnB0cilcbm1tL2ttZW1sZWFrLmMtMTE5MC17XG4tLVxubW0vc2x1Yi5jPTY3NTk9c3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QsXG4tLVxubW0vc2x1Yi5jLTY3NzgtXG5tbS9zbHViLmM6Njc3OTpcdGlmICh1bmxpa2VseShub2xvY2sgXHUwMDI2XHUwMDI2IGttZW1sZWFrX21heV9uZWVkX2ZyZWUob2JqZWN0KSkpXG5tbS9zbHViLmMtNjc4MC1cdFx0ZGVmZXJfZnJlZV9sYXJnZV9rbWFsbG9jKG9iamVjdCk7XG4tLVxubW0vc2x1Yi5jPTY4NDY9dm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxuLS1cbm1tL3NsdWIuYy02OTEwLVx0ICovXG5tbS9zbHViLmM6NjkxMTpcdGlmICh1bmxpa2VseShrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZSh4LCBzLVx1MDAzZWZsYWdzKSkpXG5tbS9zbHViLmMtNjkxMi1cdFx0Z290byBkZWZlcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MjUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBMZWFrIERldGVjdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG1lbW9yeSBsZWFrIGRldGVjdGlvbiwgYW5kIEkmIzM5O3ZlIGdvdCBgQ09ORklHX0RFQlVHX0tNRU1MRUFLYCBhbmQgYENPTkZJR19LRkVOQ0VgIGluIG1pbmQuIENsYXNzaWMgY2hvaWNlcy4gQnV0IGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBjb21wYXJpbmcgdGhlbSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhleSBhcmUgc3VwcG9ydGVkIGluIHRoZSBrZXJuZWwmIzM5O3Mgc2NoZWR1bGVyIGNvZGUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGhvdyBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZWAgaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgIGhhbmRsZXMgdGhlc2UgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGF0IGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yIGlzIGNvbmRpdGlvbmFsIG9uIGVpdGhlciBvZiB0aG9zZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmVpbmcgZW5hYmxlZC4gSWYgc28sIHRoZW4gdGhhdCBtaWdodCBhZmZlY3QgdGhlIHdheSBtZW1vcnkgaXMgaGFuZGxlZCBhbmQgcHJvdmlkZSBpbnNpZ2h0IHRvIHdoZXJlIGFueSBsZWFrIG1heSBiZSBoYXBwZW5pbmcuIFRoaXMgaXMgYWx3YXlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzIGluIHNjaGVkdWxpbmcuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUgZGVmaW5lcyBzYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9jcHVzX2FsbG93ZWRfZm9yY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9jb3JlLmM9Mjc5Mz1kb19zZXRfY3B1c19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGFmZmluaXR5X2NvbnRleHQgKmN0eClcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI4MDItICovXG5rZXJuZWwvc2NoZWQvY29yZS5jOjI4MDM6dm9pZCBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld19tYXNrKVxua2VybmVsL3NjaGVkL2NvcmUuYy0yODA0LXtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTI4MjE9aW50IGR1cF91c2VyX2NwdXNfcHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYyxcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI4NDgtXHQgKiBUaG91Z2ggdW5saWtlbHksIHVzZXJfY3B1c19wdHIgY2FuIGJlIHJlc2V0IHRvIE5VTEwgYnkgYSBjb25jdXJyZW50XG5rZXJuZWwvc2NoZWQvY29yZS5jOjI4NDk6XHQgKiBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKCkuXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI4NTAtXHQgKi9cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTM1NDA9c3RhdGljIGludCBzZWxlY3RfZmFsbGJhY2tfcnEoaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMzU3OS1cdFx0Y2FzZSBwb3NzaWJsZTpcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MzU4MDpcdFx0XHRzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHAsIHRhc2tfY3B1X2ZhbGxiYWNrX21hc2socCkpO1xua2VybmVsL3NjaGVkL2NvcmUuYy0zNTgxLVx0XHRcdHN0YXRlID0gZmFpbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNTMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBMZWFrIERldGVjdGlvbiBpbiB0aGUgS2VybmVsKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBsZWFrcywgd2hpY2gsIGFzIHdlIGtub3csIGNhbiBiZSBhIHJlYWwgcGFpbi4gVGhlIGtlcm5lbCYjMzk7cyBkZXNpZ24gbWVhbnMgZGVidWdnaW5nIHRvb2xzIGFyZSBhbG1vc3QgYWx3YXlzIGVuYWJsZWQgdmlhIGNvbmZpZ3VyYXRpb24gZmxhZ3MuIEkgbmVlZCB0byByZW1lbWJlciB0aGUgc3BlY2lmaWMgb25lcyBmb3IgbWVtb3J5IGxlYWsgZGV0ZWN0aW9uLCBzbyBgQ09ORklHX0RFQlVHX0tNRU1MRUFLYCBhbmQgYENPTkZJR19LRkVOQ0VgIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRob3NlIGFyZSBpbiBmYWN0IHdoYXQgZW5hYmxlIHRoZSB0b29scyBJJiMzOTttIGxvb2tpbmcgZm9yLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIHNwZWNpZmljcyBvZiBhIHBvc3NpYmxlIGxlYWsuIEkmIzM5O2xsIHdhbnQgdG8gdHJhY2UgaG93IGBrZnJlZV9ub2xvY2tgIG9wZXJhdGVzLCBhbmQgdGhhdCYjMzk7cyBpbiBgbW0vc2x1Yi5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGUgbG9naWMgbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCwgZGVwZW5kZW50IG9uIHNvbWUgY29uZmlnLiBOZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGF0JiMzOTtzIHRoZSBjYXNlLiBUaW1lIHRvIGNoZWNrIGlmIGBrZnJlZV9ub2xvY2tgIGhhcyBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYXJvdW5kIGl0LCBjaGVja2luZyB3aGljaCBjb25maWdzIGFyZSByZWxldmFudCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2ZyZWVfbm9sb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYy0xNjAtICogICBQcmVlbXB0aW9uIGlzIGRpc2FibGVkIGFzIHBhcnQgb2YgbG9jYWxfdHJ5bG9jayBvcGVyYXRpb25zLlxubW0vc2x1Yi5jOjE2MTogKiAgIGttYWxsb2Nfbm9sb2NrKCkgYW5kIGtmcmVlX25vbG9jaygpIGFyZSBzYWZlIGluIE5NSSBjb250ZXh0IGJ1dCBzZWVcbm1tL3NsdWIuYy0xNjItICogICB0aGVpciBsaW1pdGF0aW9ucy5cbi0tXG5tbS9zbHViLmM9MjE0Nj1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTIyMjEtXHRcdGlmICh1bmxpa2VseSghYWxsb3dfc3BpbikpXG5tbS9zbHViLmM6MjIyMjpcdFx0XHRrZnJlZV9ub2xvY2sodmVjKTtcbm1tL3NsdWIuYy0yMjIzLVx0XHRlbHNlXG4tLVxubW0vc2x1Yi5jPTIyMzY9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMjU4LVx0ZWxzZVxubW0vc2x1Yi5jOjIyNTk6XHRcdGtmcmVlX25vbG9jayhvYmpfZXh0cyk7XG5tbS9zbHViLmMtMjI2MC1cdHNsYWItXHUwMDNlb2JqX2V4dHMgPSAwO1xuLS1cbm1tL3NsdWIuYz0yNzk0PXN0YXRpYyB2b2lkIF9fZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLFxuLS1cbm1tL3NsdWIuYy0yODA4LVx0aWYgKHVubGlrZWx5KGZyZWVfZmxhZ3MgXHUwMDI2IFNMQUJfRlJFRV9OT0xPQ0spKVxubW0vc2x1Yi5jOjI4MDk6XHRcdGtmcmVlX25vbG9jayhzaGVhZik7XG5tbS9zbHViLmMtMjgxMC1cdGVsc2Vcbi0tXG5tbS9zbHViLmM9NjgzNz1FWFBPUlRfU1lNQk9MKGtmcmVlKTtcbi0tXG5tbS9zbHViLmMtNjg0NS0gKi9cbm1tL3NsdWIuYzo2ODQ2OnZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcbm1tL3NsdWIuYy02ODQ3LXtcbi0tXG5tbS9zbHViLmMtNjg4OC1cdCAqIGthc2FuX3JlcG9ydF9pbnZhbGlkX2ZyZWUoKSAtXHUwMDNlIHJhd19zcGluX2xvY2tfaXJxc2F2ZSgpIC1cdTAwM2UgTk1JXG5tbS9zbHViLmM6Njg4OTpcdCAqICAtXHUwMDNlIGtmcmVlX25vbG9jaygpIC1cdTAwM2Uga2FzYW5fcmVwb3J0X2ludmFsaWRfZnJlZSgpIG9uIHRoZSBzYW1lIENQVVxubW0vc2x1Yi5jLTY4OTAtXHQgKiBpcyBkb3VibGUgYnVnZ3kgYW5kIGRlc2VydmVzIHRvIGRlYWRsb2NrLlxuLS1cbm1tL3NsdWIuYy02OTI0LX1cbm1tL3NsdWIuYzo2OTI1OkVYUE9SVF9TWU1CT0xfR1BMKGtmcmVlX25vbG9jayk7XG5tbS9zbHViLmMtNjkyNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMDIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvbXBpbGF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGl0JiMzOTtzIGNvbXBpbGVkLCB0aGF0IG11Y2ggaXMgb2J2aW91cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGtleSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSYjMzk7dmUgZ290IGEgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHRvIHdvcmsgd2l0aCwgYGtmcmVlX25vbG9ja2AsIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlYCwgYGttZW1sZWFrX21heV9uZWVkX2ZyZWVgLCBga2ZlbmNlX29ial90b19sbG5vZGVgLCBhbmQgYGtmZW5jZV9sbG5vZGVfdG9fb2JqYC4gVGhvc2UgYXJlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCByZXF1aXJlbWVudHMuCgpOb3csIGxldCYjMzk7cyBsb29rIGZvciBhIHBvdGVudGlhbCBrZXkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIFRoZSBjb21taXQgbWVzc2FnZSBtZW50aW9ucyBgUFJFRU1QVF9SVD15YCBpbiByZWxhdGlvbiB0byBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZWAsIHNvIHRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgb24gbXkgcmFkYXIuIENoZWNraW5nIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlYC4uLiBBaCwgdGhlIGNvbW1lbnQgaGVyZSBpcyBjcnVjaWFsLiBJdCBub3RlcyB0aGF0IGBrZnJlZV9ub2xvY2tgIGlzIHVzZWQgYmVjYXVzZSBvZiB0aGUgYHAtJmd0O3BpX2xvY2tgIGFuZCB0aGUgcG90ZW50aWFsIGNvbmZsaWN0IHdpdGggYGtmcmVlYCB3aGVuIGBQUkVFTVBUX1JUYCBpcyBlbmFibGVkLiBIb3dldmVyLCB0aGUgY29tbWVudCBkb2VzICpub3QqIHNheSB0aGF0IGBrZnJlZV9ub2xvY2tgIGlzICpvbmx5KiBjYWxsZWQgd2l0aCBgUFJFRU1QVF9SVGAuIFNvIGl0IGxvb2tzIGxpa2UgYGtmcmVlX25vbG9ja2AgaXMgY2FsbGVkIGluIGFueSBjYXNlLCBldmVuIGlmIGBQUkVFTVBUX1JUYCBpcyBub3QgZW5hYmxlZCwgdGhvdWdoIHRoaXMgc3BlY2lmaWMgY2FsbCB3aXRoIGEgbG9jayBtaWdodCBiZSB0aGUgcmVhc29uIGZvciBpbmNsdWRpbmcgaXQuIAoKSSYjMzk7bGwgaW5jbHVkZSBgUFJFRU1QVF9SVGAgaW4gYEVuYWJsZUNvbmZpZ3NgIGp1c3QgdG8gYmUgc2FmZSwganVzdCBpbiBjYXNlIHRoYXQmIzM5O3Mgd2h5IHRoaXMgaXMgY2FsbGVkLCBidXQgaXQgZG9lc24mIzM5O3QgbG9vayB0byBiZSBzdHJpY3RseSBuZWNlc3NhcnkgZm9yIHRoZSBjb2RlIHRvIGNvbXBpbGUuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCB0aGF0IGNvbmZpZyBhY3R1YWxseSBleGlzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUkVFTVBUX1JUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLnByZWVtcHQ9OTA9ZW5kY2hvaWNlXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTkxLVxua2VybmVsL0tjb25maWcucHJlZW1wdDo5Mjpjb25maWcgUFJFRU1QVF9SVFxua2VybmVsL0tjb25maWcucHJlZW1wdC05My1cdGJvb2wgXCYjMzQ7RnVsbHkgUHJlZW1wdGlibGUgS2VybmVsIChSZWFsLVRpbWUpXCYjMzQ7XG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdC0xMDgtXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjEwOTpjb25maWcgUFJFRU1QVF9SVF9ORUVEU19CSF9MT0NLXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTExMC1cdGJvb2wgXCYjMzQ7RW5mb3JjZSBzb2Z0aXJxIHN5bmNocm9uaXNhdGlvbiBvbiBQUkVFTVBUX1JUXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDI2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFBSRUVNUFRfUlQgYW5kIFJlbGF0ZWQgU3ltYm9scyoqCgpPa2F5LCBzbyBgUFJFRU1QVF9SVGAgaXMgZGVmaW5pdGVseSBhIGZhY3RvciBoZXJlLiBMZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhpcyBhbmFseXNpcy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBjb3JlIHN5bWJvbHMgdGhhdCBJJiMzOTttIGRlYWxpbmcgd2l0aC4gSSBzZWUgdGhlc2UgYXMga2V5OiBga2ZyZWVfbm9sb2NrYCwgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2VgLCBga21lbWxlYWtfbWF5X25lZWRfZnJlZWAsIGBrZmVuY2Vfb2JqX3RvX2xsbm9kZWAsIGFuZCBga2ZlbmNlX2xsbm9kZV90b19vYmpgLiBUaG9zZSBhcmUgdGhlIG9uZXMgSSYjMzk7bSB0cmFja2luZywgaW4gcmVsYXRpb24gdG8gYFBSRUVNUFRfUlRgLgoKTm93LCBmb3IgdGhlIGNvbmZpZ3VyYXRpb25zIHRoZW1zZWx2ZXMsIEkmIzM5O3ZlIGdvdCBgREVCVUdfS01FTUxFQUtgLCBgS0ZFTkNFYCwgYW5kIG9mIGNvdXJzZSwgYFBSRUVNUFRfUlRgLiBUaGVzZSBzZWVtIGNlbnRyYWwgdG8gdGhlIHByb2JsZW0uCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZSBsb2NhdGlvbiBvZiBga2ZlbmNlX29ial90b19sbG5vZGVgIGFuZCBga2ZlbmNlX2xsbm9kZV90b19vYmpgLiBBaCwgeWVzLCB0aGV5JiMzOTtyZSBpbiBgbW0va2ZlbmNlL2NvcmUuY2AuIEdvb2QsIHRoYXQgc29saWRpZmllcyBteSBtZW50YWwgbWFwIG9mIHdoZXJlIHRoZSBLRkVOQ0UgbG9naWMgcmVzaWRlcy4gSSYjMzk7bSBub3cgcmVhZHkgdG8gcHJvY2VlZCwgYXJtZWQgd2l0aCBhIGNvbmZpcm1lZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmZW5jZV9vYmpfdG9fbGxub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2ZlbmNlL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9rZmVuY2UvY29yZS5jPTEyNDc9dm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG4tLVxubW0va2ZlbmNlL2NvcmUuYy0xMjczLVxubW0va2ZlbmNlL2NvcmUuYzoxMjc0OnN0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKVxubW0va2ZlbmNlL2NvcmUuYy0xMjc1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1ODAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJiMzOTttIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBpbnRlcm5hbHM6CgoqKkNvbmZpcm1pbmcgdGhlIFNjb3BlIGFuZCBEcmlsbGluZyBEb3duKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGdsb2JhbCBmdW5jdGlvbnMsIHdoaWNoIGlzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQuIFRoZSBjb250ZXh0IHN1Z2dlc3RzIHdlJiMzOTtyZSBsaWtlbHkgaW4gdGhlIHJlYWxtIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBsaWtlbHkga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LiBIbW0sIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmUgYSBmaXJtIGdyYXNwIG9mIHRoZSBzaXR1YXRpb24gaGVyZSwgbGV0IG1lIGdvIGFoZWFkIGFuZCBkb3VibGUgY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgYGttZW1sZWFrX21heV9uZWVkX2ZyZWVgIGZ1bmN0aW9uLiBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgcmVjYWxsIGl0cyBwdXJwb3NlLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ggYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGFueSBzdWJ0bGV0aWVzLiBUaGF0IGZ1bmN0aW9uIGNvdWxkIGJlIGNlbnRyYWwgdG8gd2hhdGV2ZXIgaXNzdWUgd2UmIzM5O3JlIGV4YW1pbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21lbWxlYWtfbWF5X25lZWRfZnJlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2ttZW1sZWFrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va21lbWxlYWsuYz0xMTY5PUVYUE9SVF9TWU1CT0xfR1BMKGttZW1sZWFrX2ZyZWUpO1xuLS1cbm1tL2ttZW1sZWFrLmMtMTE3MS0vKipcbm1tL2ttZW1sZWFrLmM6MTE3MjogKiBrbWVtbGVha19tYXlfbmVlZF9mcmVlIC0gY2hlY2sgaWYgb2JqZWN0IGlzIHJlZ2lzdGVyZWRcbm1tL2ttZW1sZWFrLmMtMTE3My0gKiBAcHRyOlx0cG9pbnRlciB0byBiZWdpbm5pbmcgb2YgdGhlIG9iamVjdFxuLS1cbm1tL2ttZW1sZWFrLmMtMTE4OC0gKi9cbm1tL2ttZW1sZWFrLmM6MTE4OTpib29sIF9fcmVmIGttZW1sZWFrX21heV9uZWVkX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKVxubW0va21lbWxlYWsuYy0xMTkwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NzYKCQkJCQkJCW91dHB1dDogMjQ0CgkJCQkJCQl0aG91Z2h0czogMTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBhICpnbG9iYWwgZnVuY3Rpb24qLCBzcGVjaWZpY2FsbHkgYGtmcmVlX25vbG9jaygpYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGNvbmZpcm1zIHRoaXMg4oCTIHllcywgaXQmIzM5O3MgYSBnbG9iYWwgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWluZyBtb2RpZmllZC4gVGhhdCBtZWFucyBpdOKAmXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgcmVhY2ggb2YgdGhpcyBjaGFuZ2UuCgpOb3csIHRoZSBjb3JlIG9mIGl0IGlzIHRoZSBtb2RpZmljYXRpb24gdG8gYGtmcmVlX25vbG9jaygpYCB3aXRoaW4gYG1tL3NsdWIuY2AuIEl0JiMzOTtzIGRlc2lnbmVkIHRvIG1ha2UgYGtmcmVlX25vbG9jaygpYCBoYW5kbGUgYSB3aWRlciByYW5nZSBvZiBvYmplY3RzOiB0aG9zZSBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jKClgLCBga21lbV9jYWNoZV9hbGxvYygpYCwgYW5kIGV2ZW4gdGhlIGxhcmdlciBga21hbGxvY2AgYWxsb2NhdGlvbnMsIG5vdCB0byBtZW50aW9uIEtGRU5DRSBvYmplY3RzLiBUaGUgbG9naWMgb2YgZGVmZXJyaW5nIHRoZSBhY3R1YWwgZnJlZWluZyB1c2luZyBgaXJxX3dvcmtgIHdoZW4gbmVjZXNzYXJ5IChsaWtlIHdoZW4gZGVhbGluZyB3aXRoIGBrbWVtbGVha2Agb3IgYEtGRU5DRWApIGlzIGNsZXZlciBhbmQgc2VlbXMgc3RyYXRlZ2ljYWxseSBzb3VuZCwgYSBjb21tb24gYXBwcm9hY2ggaW4gdGhlIGtlcm5lbC4gQnV0IGl0IGRvZXMgaW50cm9kdWNlIGEgbmV3IHBhdGgsIGEgc3VidGxlIGludGVyYWN0aW9uIGJldHdlZW4gZGlmZmVyZW50IHNjaGVkdWxpbmcgcGF0aHMuIEl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4KCkludGVyZXN0aW5nbHksIGl0IGFsc28gdG91Y2hlcyBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpYCBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AsIHNoaWZ0aW5nIGl0cyB1c2UgZnJvbSBga2ZyZWVfcmN1KClgIHRvIGBrZnJlZV9ub2xvY2soKWAuIFRoZSBzaGlmdCBpbiBmdW5jdGlvbiBpcyBub3RhYmxlOyBga2ZyZWVfbm9sb2NrKClgIGlzIGxlc3MgY29uc2VydmF0aXZlIHRoYW4gYGtmcmVlX3JjdSgpYCBpbiB0ZXJtcyBvZiBzeW5jaHJvbml6YXRpb24uIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzY2hlZHVsZXIgY2hhbmdlcyBhbmQgYXJlICpoaWdobHkqIHJlYWNoYWJsZS4gVGhpcyBzaWduaWZpY2FudGx5IGluY3JlYXNlcyB0aGUgZnV6emluZyBzdXJmYWNlIGFuZCBoaWdobGlnaHRzIHRoZWlyIGluaGVyZW50IHZ1bG5lcmFiaWxpdHkuIFRoZSBjb21iaW5hdGlvbiBvZiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2NoZWR1bGVyIGNoYW5nZXMgbWVhbnMgaXQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gZXhwb3NlIHRyaWNreSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMuIFRoaXMgaXMgdGhlIHBsYWNlIHRvIGNvbmNlbnRyYXRlIHRoZSBmdXp6aW5nIGVmZm9ydHMuCgpJJiMzOTttIGNvbmZpZGVudCBpbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVCVUdfS01FTUxFQUsmIzM0OywKICAgICYjMzQ7S0ZFTkNFJiMzNDssCiAgICAmIzM0O1BSRUVNUFRfUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrZnJlZV9ub2xvY2smIzM0OywKICAgICYjMzQ7c2V0X2NwdXNfYWxsb3dlZF9mb3JjZSYjMzQ7LAogICAgJiMzNDtrbWVtbGVha19tYXlfbmVlZF9mcmVlJiMzNDssCiAgICAmIzM0O2tmZW5jZV9vYmpfdG9fbGxub2RlJiMzNDssCiAgICAmIzM0O2tmZW5jZV9sbG5vZGVfdG9fb2JqJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBrZnJlZV9ub2xvY2soKWAgaW4gYG1tL3NsdWIuY2AgdG8gc3VwcG9ydCBmcmVlaW5nIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgLCBga21lbV9jYWNoZV9hbGxvYygpYCwgYW5kIGxhcmdlIGttYWxsb2NzLCBhcyB3ZWxsIGFzIEtGRU5DRSBvYmplY3RzLiBJdCBkZWZlcnMgZnJlZWluZyB0byBhbiBgaXJxX3dvcmtgIGlmIG5lY2Vzc2FyeSAoZS5nLiwgZm9yIGttZW1sZWFrIG9yIEtGRU5DRSkuIEl0IGFsc28gbW9kaWZpZXMgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKWAgaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgIHRvIHVzZSBga2ZyZWVfbm9sb2NrKClgIGluc3RlYWQgb2YgYGtmcmVlX3JjdSgpYC4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxlciBjaGFuZ2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVCVUdfS01FTUxFQUsmIzM0OywKICAgICYjMzQ7S0ZFTkNFJiMzNDssCiAgICAmIzM0O1BSRUVNUFRfUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrZnJlZV9ub2xvY2smIzM0OywKICAgICYjMzQ7c2V0X2NwdXNfYWxsb3dlZF9mb3JjZSYjMzQ7LAogICAgJiMzNDtrbWVtbGVha19tYXlfbmVlZF9mcmVlJiMzNDssCiAgICAmIzM0O2tmZW5jZV9vYmpfdG9fbGxub2RlJiMzNDssCiAgICAmIzM0O2tmZW5jZV9sbG5vZGVfdG9fb2JqJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBrZnJlZV9ub2xvY2soKWAgaW4gYG1tL3NsdWIuY2AgdG8gc3VwcG9ydCBmcmVlaW5nIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgLCBga21lbV9jYWNoZV9hbGxvYygpYCwgYW5kIGxhcmdlIGttYWxsb2NzLCBhcyB3ZWxsIGFzIEtGRU5DRSBvYmplY3RzLiBJdCBkZWZlcnMgZnJlZWluZyB0byBhbiBgaXJxX3dvcmtgIGlmIG5lY2Vzc2FyeSAoZS5nLiwgZm9yIGttZW1sZWFrIG9yIEtGRU5DRSkuIEl0IGFsc28gbW9kaWZpZXMgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKWAgaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgIHRvIHVzZSBga2ZyZWVfbm9sb2NrKClgIGluc3RlYWQgb2YgYGtmcmVlX3JjdSgpYC4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxlciBjaGFuZ2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgZnJlZWluZyBwYXRocywgc3BlY2lmaWNhbGx5IGV4dGVuZGluZyBga2ZyZWVfbm9sb2NrKClgIHRvIGhhbmRsZSBvYmplY3RzIGFsbG9jYXRlZCBieSBga21hbGxvYygpYCBhbmQgYGttZW1fY2FjaGVfYWxsb2MoKWAsIGluY2x1ZGluZyBsYXJnZSBrbWFsbG9jcyBhbmQgS0ZFTkNFIG9iamVjdHMuIEl0IGRlZmVycyBmcmVlaW5nIHRvIGFuIGBpcnFfd29ya2AgdXNpbmcgYSBsb2NrbGVzcyBsaXN0IChgbGxpc3RgKSB3aGVuIG5lY2Vzc2FyeS4gVGhlIGNoYW5nZXMgaW52b2x2ZSBvdmVyd3JpdGluZyBwYXJ0cyBvZiB0aGUgZnJlZWQgb2JqZWN0cyAobGlrZSB0aGUgZnJlZXBvaW50ZXIgb3IgdGhlIGZpcnN0IHdvcmQgb2YgYSBsYXJnZSBrbWFsbG9jIG9iamVjdCkgdG8gc3RvcmUgdGhlIGBsbGlzdF9ub2RlYC4gU2luY2UgdGhlc2Ugb2JqZWN0cyBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZnJlZWQsIGFueSBhY2Nlc3MgdG8gdGhlbSB3b3VsZCBjb25zdGl0dXRlIGEgdXNlLWFmdGVyLWZyZWUgYnVnLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMgb2YgYWN0aXZlIG9iamVjdHMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIG1lbW9yeSBjb3JydXB0aW9uKSB3aWxsIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgU0xVQiBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGV4cG9zZWQgaGVyZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU1Yjg2YmRjNTk4NGI2YjBiYTMxZGUwNzk1MDFkZTZiMjE2MTk4NzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjUzOjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZmVuY2UuaCBiL2luY2x1ZGUvbGludXgva2ZlbmNlLmgKaW5kZXggZTU4MjJmNmU3ZjI3OS4uMDA3MjFjODUyNThkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZmVuY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2tmZW5jZS5oCkBAIC0xODgsNiAmIzQzOzE4OCw5IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19tdXN0X2NoZWNrIGJvb2wga2ZlbmNlX2ZyZWUodm9pZCAqYWRkcikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKTsKJiM0Mzt2b2lkICprZmVuY2VfbGxub2RlX3RvX29iaihzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlKTsKJiM0MzsKIC8qKgogICoga2ZlbmNlX2hhbmRsZV9wYWdlX2ZhdWx0KCkgLSBwZXJmb3JtIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIEtGRU5DRSBwYWdlcwogICogQGFkZHI6IGZhdWx0aW5nIGFkZHJlc3MKQEAgLTIzNSw2ICYjNDM7MjM4LDggQEAgc3RhdGljIGlubGluZSBzaXplX3Qga2ZlbmNlX2tzaXplKGNvbnN0IHZvaWQgKmFkZHIpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCAqa2ZlbmNlX29iamVjdF9zdGFydChjb25zdCB2b2lkICphZGRyKSB7IHJldHVybiBOVUxMOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKSB7IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sga2ZlbmNlX2ZyZWUodm9pZCAqYWRkcikgeyByZXR1cm4gZmFsc2U7IH0KJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKSB7IHJldHVybiBOVUxMOyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkICprZmVuY2VfbGxub2RlX3RvX29iaihzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlKSB7IHJldHVybiBOVUxMOyB9CiBzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGtmZW5jZV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsCiAJCQkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oIGIvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oCmluZGV4IGZiZDQyNGIyYWJiMTQuLjUyZjc1ZjEwYTljZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva21lbWxlYWsuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgKQEAgLTIyLDYgJiM0MzsyMiw3IEBAIGV4dGVybiB2b2lkIGttZW1sZWFrX2FsbG9jX3BlcmNwdShjb25zdCB2b2lkIF9fcGVyY3B1ICpwdHIsIHNpemVfdCBzaXplLAogZXh0ZXJuIHZvaWQga21lbWxlYWtfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBzaXplX3Qgc2l6ZSwKIAkJCSAgICAgZ2ZwX3QgZ2ZwKSBfX3JlZjsKIGV4dGVybiB2b2lkIGttZW1sZWFrX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjsKJiM0Mztib29sIGttZW1sZWFrX21heV9uZWVkX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjsKIGV4dGVybiB2b2lkIGttZW1sZWFrX2ZyZWVfcGFydChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplKSBfX3JlZjsKIGV4dGVybiB2b2lkIGttZW1sZWFrX2ZyZWVfcGVyY3B1KGNvbnN0IHZvaWQgX19wZXJjcHUgKnB0cikgX19yZWY7CiBleHRlcm4gdm9pZCBrbWVtbGVha191cGRhdGVfdHJhY2UoY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjsKQEAgLTUwLDYgJiM0Mzs1MSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpCiAJCWttZW1sZWFrX2ZyZWUocHRyKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncykKJiM0Mzt7CiYjNDM7CWlmICghKGZsYWdzICZhbXA7IFNMQUJfTk9MRUFLVFJBQ0UpKQomIzQzOwkJcmV0dXJuIGttZW1sZWFrX21heV9uZWVkX2ZyZWUocHRyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19lcmFzZSh2b2lkICoqcHRyKQogewogCSpwdHIgPSBOVUxMOwpAQCAtODYsNiAmIzQzOzk1LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19mcmVlX3BhcnQoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncykKIHsKIH0KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9wZXJjcHUoY29uc3Qgdm9pZCBfX3BlcmNwdSAqcHRyKQogewogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NvcmUuYyBiL2tlcm5lbC9zY2hlZC9jb3JlLmMKaW5kZXggOTYyMjY3MDdjMmY2MS4uZDI5MjllNGUyM2YxMyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvY29yZS5jCkBAIC0yODA3LDIwICYjNDM7MjgwNywxNSBAQCB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZm9yY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbmV3X21hcwogCQkudXNlcl9tYXNrID0gTlVMTCwKIAkJLmZsYWdzICAgICA9IFNDQV9VU0VSLAkvKiBjbGVhciB0aGUgdXNlciByZXF1ZXN0ZWQgbWFzayAqLwogCX07Ci0JdW5pb24gY3B1bWFza19yY3VoZWFkIHsKLQkJY3B1bWFza190IGNwdW1hc2s7Ci0JCXN0cnVjdCByY3VfaGVhZCByY3U7Ci0JfTsKIAogCXNjb3BlZF9ndWFyZCAoX190YXNrX3JxX2xvY2ssIHApCiAJCWRvX3NldF9jcHVzX2FsbG93ZWQocCwgJmFtcDthYyk7CiAKIAkvKgogCSAqIEJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgd2l0aCBwLSZndDtwaV9sb2NrIGhlbGQsIGl0IGlzIG5vdCBwb3NzaWJsZQotCSAqIHRvIHVzZSBrZnJlZSgpIGhlcmUgKHdoZW4gUFJFRU1QVF9SVD15KSwgdGhlcmVmb3JlIHB1bnQgdG8gdXNpbmcKLQkgKiBrZnJlZV9yY3UoKS4KJiM0MzsJICogdG8gdXNlIGtmcmVlKCkgaGVyZSAod2hlbiBQUkVFTVBUX1JUPXkpLCB0aHVzIHVzZSBrZnJlZV9ub2xvY2soKQogCSAqLwotCWtmcmVlX3JjdSgodW5pb24gY3B1bWFza19yY3VoZWFkICopYWMudXNlcl9tYXNrLCByY3UpOwomIzQzOwlrZnJlZV9ub2xvY2soYWMudXNlcl9tYXNrKTsKIH0KIAogaW50IGR1cF91c2VyX2NwdXNfcHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYywKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oIGIva2VybmVsL3NjaGVkL3NjaGVkLmgKaW5kZXggNTZhY2Y1MDJiYTI2MC4uNmE4ZDA1NzhlOTYzMyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL3NjaGVkLmgKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL3NjaGVkLmgKQEAgLTI4ODYsMTIgJiM0MzsyODg2LDcgQEAgc3RhdGljIGlubGluZSBib29sIHRhc2tfYWxsb3dlZF9vbl9jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY3B1KQogCiBzdGF0aWMgaW5saW5lIGNwdW1hc2tfdCAqYWxsb2NfdXNlcl9jcHVzX3B0cihpbnQgbm9kZSkKIHsKLQkvKgotCSAqIFNlZSBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKCkgYWJvdmUgZm9yIHRoZSByY3VfaGVhZCB1c2FnZS4KLQkgKi8KLQlpbnQgc2l6ZSA9IG1heF90KGludCwgY3B1bWFza19zaXplKCksIHNpemVvZihzdHJ1Y3QgcmN1X2hlYWQpKTsKLQotCXJldHVybiBrbWFsbG9jX25vZGUoc2l6ZSwgR0ZQX0tFUk5FTCwgbm9kZSk7CiYjNDM7CXJldHVybiBrbWFsbG9jX25vZGUoY3B1bWFza19zaXplKCksIEdGUF9LRVJORUwsIG5vZGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X3B1c2hfdGFzayhzdHJ1Y3QgcnEgKnJxKQpkaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2NvcmUuYyBiL21tL2tmZW5jZS9jb3JlLmMKaW5kZXggNjU3N2JkNzY5NTRlYi4uNDI1MTlkMjQ2ODdmZiAxMDA2NDQKLS0tIGEvbW0va2ZlbmNlL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9rZmVuY2UvY29yZS5jCkBAIC0xMjcxLDYgJiM0MzsxMjcxLDIwIEBAIHZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKQogCX0KIH0KIAomIzQzO3N0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IGtmZW5jZV9tZXRhZGF0YSAqbWV0YSA9IGFkZHJfdG9fbWV0YWRhdGEoKHVuc2lnbmVkIGxvbmcpYWRkcik7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO21ldGEtJmd0O2xsbm9kZTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCAqa2ZlbmNlX2xsbm9kZV90b19vYmooc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrZmVuY2VfbWV0YWRhdGEgKm1ldGEgPSBjb250YWluZXJfb2YobGxub2RlLCBzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhLCBsbG5vZGUpOwomIzQzOwomIzQzOwlyZXR1cm4gKHZvaWQgKiltZXRhLSZndDthZGRyOwomIzQzO30KJiM0MzsKIGJvb2wga2ZlbmNlX2hhbmRsZV9wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBpc193cml0ZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJY29uc3QgaW50IHBhZ2VfaW5kZXggPSAoYWRkciAtICh1bnNpZ25lZCBsb25nKV9fa2ZlbmNlX3Bvb2wpIC8gUEFHRV9TSVpFOwpkaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZS5oIGIvbW0va2ZlbmNlL2tmZW5jZS5oCmluZGV4IDFmNjE4ZjliMGQxMmQuLjBmY2ExZGMyYzc5NDEgMTAwNjQ0Ci0tLSBhL21tL2tmZW5jZS9rZmVuY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9rZmVuY2Uva2ZlbmNlLmgKQEAgLTU4LDcgJiM0Mzs1OCwxMCBAQCBzdHJ1Y3Qga2ZlbmNlX3RyYWNrIHsKIC8qIEtGRU5DRSBtZXRhZGF0YSBwZXIgZ3VhcmRlZCBhbGxvY2F0aW9uLiAqLwogc3RydWN0IGtmZW5jZV9tZXRhZGF0YSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0IF9fZ3VhcmRlZF9ieSgmYW1wO2tmZW5jZV9mcmVlbGlzdF9sb2NrKTsJLyogRnJlZWxpc3Qgbm9kZS4gKi8KLQlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CS8qIEZvciBkZWxheWVkIGZyZWVpbmcuICovCiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsJLyogRm9yIGRlbGF5ZWQgZnJlZWluZy4gKi8KJiM0MzsJCXN0cnVjdCBsbGlzdF9ub2RlIGxsbm9kZTsJLyogRm9yIGtmcmVlX25vbG9jaygpLiAqLwomIzQzOwl9OwogCiAJLyoKIAkgKiBMb2NrIHByb3RlY3RpbmcgYmVsb3cgZGF0YTsgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IG9mIHRoZSBiZWxvdyBkYXRhLApkaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmMKaW5kZXggN2M3YmExN2NlN2FmMC4uZTM1NjBjZTgyNjMyNiAxMDA2NDQKLS0tIGEvbW0va21lbWxlYWsuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9rbWVtbGVhay5jCkBAIC0xMTY4LDYgJiM0MzsxMTY4LDQ4IEBAIHZvaWQgX19yZWYga21lbWxlYWtfZnJlZShjb25zdCB2b2lkICpwdHIpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrbWVtbGVha19mcmVlKTsKIAomIzQzOy8qKgomIzQzOyAqIGttZW1sZWFrX21heV9uZWVkX2ZyZWUgLSBjaGVjayBpZiBvYmplY3QgaXMgcmVnaXN0ZXJlZAomIzQzOyAqIEBwdHI6CXBvaW50ZXIgdG8gYmVnaW5uaW5nIG9mIHRoZSBvYmplY3QKJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGtlcm5lbCBhbGxvY2F0b3Igd2hlbiBhbiBvYmplY3Qgc2hvdWxkIGJlCiYjNDM7ICogZnJlZWQgYnV0IHRoZSBjYWxsZXIgY29udGV4dCBtaWdodCBiZSB1bnNhZmUgdG8gc3BpbiBvbiB0aGUgaW50ZXJuYWwgbG9ja3MuCiYjNDM7ICoKJiM0MzsgKiBJdCB3aWxsIHRoZXJlZm9yZSBvbmx5IHVzZSB0cnlsb2NrIGFuZCB0aHVzIG1pZ2h0IHJldHVybiBhIGZhbHNlIHBvc2l0aXZlCiYjNDM7ICogaWYgdGhlIHRyeWxvY2sgZmFpbHMgYW5kIHRoZSBzdGF0dXMgY2Fubm90IGJlIGRldGVybWluZWQuCiYjNDM7ICoKJiM0MzsgKiBGb3Igb2JqZWN0cyB0aGF0IChtaWdodCkgbmVlZCBmcmVlLCB0aGUgYWxsb2NhdG9yIGhhcyB0byBkZWZlciB0aGUgYWN0dWFsCiYjNDM7ICogZnJlZWluZyB0byBhIHNhZmUgY29udGV4dC4KJiM0MzsgKgomIzQzOyAqIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgbW9zdCBvYmplY3RzIGZyZWVkIGZyb20gdGhlIHVuc2FmZSBjb250ZXh0IGFyZSBhbHNvCiYjNDM7ICogYWxsb2NhdGVkIGluIHN1Y2ggY29udGV4dCBhbmQgdGh1cyBhcmUgbm90IHJlZ2lzdGVyZWQgaW4ga21lbWxlYWssIHNvIGl0JiMzOTtzCiYjNDM7ICogdW5saWtlbHkgdGhlIGRlZmVyZWQgZnJlZWluZyB3aWxsIGJlIG5lY2Vzc2FyeSBqdXN0IGJlY2F1c2Uga21lbWxlYWsgaXMKJiM0MzsgKiBlbmFibGVkLgomIzQzOyAqLwomIzQzO2Jvb2wgX19yZWYga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3Q7CiYjNDM7CiYjNDM7CXByX2RlYnVnKCYjMzQ7JXMoMHglcHgpXG4mIzM0OywgX19mdW5jX18sIHB0cik7CiYjNDM7CiYjNDM7CWlmICgha21lbWxlYWtfZnJlZV9lbmFibGVkIHx8ICFwdHIgfHwgSVNfRVJSKHB0cikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIE9uIFVQLCByYXdfc3Bpbl90cnlsb2NrKCkgYWx3YXlzIHN1Y2NlZWRzIGV2ZW4gd2hlbiBpdCBpcyBsb2NrZWQgKi8KJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19TTVApICZhbXA7JmFtcDsgaW5fbm1pKCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKCFyYXdfc3Bpbl90cnlsb2NrX2lycXNhdmUoJmFtcDtrbWVtbGVha19sb2NrLCBmbGFncykpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJb2JqZWN0ID0gX19sb29rdXBfb2JqZWN0KCh1bnNpZ25lZCBsb25nKXB0ciwgMCwgMCk7CiYjNDM7CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7a21lbWxlYWtfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gISFvYmplY3Q7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBrbWVtbGVha19mcmVlX3BhcnQgLSBwYXJ0aWFsbHkgdW5yZWdpc3RlciBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBvYmplY3QKICAqIEBwdHI6CXBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvciBpbnNpZGUgdGhlIG9iamVjdC4gVGhpcyBhbHNvCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggYjlhZWIwMmE4ODBmMS4uM2JlOThmYWE5ZjBkZSAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsdWIuYwpAQCAtNDA1MCw2ICYjNDM7NDA1MCw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX2FsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcykKIAogc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrIHsKIAlzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzOwomIzQzOwlzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzX2tmZW5jZTsKJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0c19sYXJnZV9rbWFsbG9jOwogCXN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHNfYnlfcmN1OwogCXN0cnVjdCBsbGlzdF9oZWFkIHJjdV9zaGVhdmVzOwogCXN0cnVjdCBpcnFfd29yayB3b3JrOwpAQCAtNDA1OSw2ICYjNDM7NDA2MSw4IEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yayk7CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmssIGRlZmVycmVkX3BlcmNwdV93b3JrKSA9IHsKIAkub2JqZWN0cyA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzKSwKJiM0MzsJLm9iamVjdHNfa2ZlbmNlID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHNfa2ZlbmNlKSwKJiM0MzsJLm9iamVjdHNfbGFyZ2Vfa21hbGxvYyA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzX2xhcmdlX2ttYWxsb2MpLAogCS5vYmplY3RzX2J5X3JjdSA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzX2J5X3JjdSksCiAJLnJjdV9zaGVhdmVzID0gTExJU1RfSEVBRF9JTklUKHJjdV9zaGVhdmVzKSwKIAkud29yayA9IElSUV9XT1JLX0lOSVQoZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4pLApAQCAtNjM2Myw2ICYjNDM7NjM2NywyMSBAQCBzdGF0aWMgdm9pZCBmcmVlX3RvX3Bjc19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApCiAJfQogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkCiYjNDM7X19mcmVlX2xhcmdlX2ttYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihwYWdlKTsKJiM0MzsKJiM0MzsJbW9kX2xydXZlY19wYWdlX3N0YXRlKHBhZ2UsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CLAomIzQzOwkJCSAgICAgIC0oUEFHRV9TSVpFICZsdDsmbHQ7IG9yZGVyKSk7CiYjNDM7CV9fQ2xlYXJQYWdlTGFyZ2VLbWFsbG9jKHBhZ2UpOwomIzQzOwomIzQzOwlpZiAoZnJlZV9mbGFncyAmYW1wOyBTTEFCX0ZSRUVfTk9MT0NLKQomIzQzOwkJZnJlZV9mcm96ZW5fcGFnZXNfbm9sb2NrKHBhZ2UsIG9yZGVyKTsKJiM0MzsJZWxzZQomIzQzOwkJZnJlZV9mcm96ZW5fcGFnZXMocGFnZSwgb3JkZXIpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBJbiBQUkVFTVBUX1JUIGlycV93b3JrIHJ1bnMgaW4gcGVyLWNwdSBrdGhyZWFkLCBzbyBpdCYjMzk7cyBzYWZlCiAgKiB0byB0YWtlIHNsZWVwaW5nIHNwaW5fbG9ja3MgZnJvbSBfX3NsYWJfZnJlZSgpLgpAQCAtNjM3MSwxNiAmIzQzOzYzOTAsMTIgQEAgc3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKQogc3RhdGljIHZvaWQgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3b3JrKQogewogCXN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3OwotCXN0cnVjdCBsbGlzdF9oZWFkICpvYmpzLCAqb2Jqc19ieV9yY3UsICpyY3Vfc2hlYXZlczsKIAlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCAqcG9zLCAqdDsKIAlzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsICpuZXh0OwogCiAJZHB3ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yaywgd29yayk7Ci0JcmN1X3NoZWF2ZXMgPSAmYW1wO2Rwdy0mZ3Q7cmN1X3NoZWF2ZXM7Ci0Jb2JqcyA9ICZhbXA7ZHB3LSZndDtvYmplY3RzOwotCW9ianNfYnlfcmN1ID0gJmFtcDtkcHctJmd0O29iamVjdHNfYnlfcmN1OwogCi0JbGxub2RlID0gbGxpc3RfZGVsX2FsbChvYmpzKTsKJiM0MzsJbGxub2RlID0gbGxpc3RfZGVsX2FsbCgmYW1wO2Rwdy0mZ3Q7b2JqZWN0cyk7CiAJbGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHQsIGxsbm9kZSkgewogCQlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIAkJc3RydWN0IHNsYWIgKnNsYWI7CkBAIC02MzkyLDYgJiM0Mzs2NDA3LDggQEAgc3RhdGljIHZvaWQgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3b3JrKQogCQkvKiBQb2ludCAmIzM5O3gmIzM5OyBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgb2YgYWxsb2NhdGVkIG9iamVjdCAqLwogCQl4IC09IHMtJmd0O29mZnNldDsKIAomIzQzOwkJa21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoeCwgcy0mZ3Q7ZmxhZ3MpOwomIzQzOwogCQkvKgogCQkgKiBXZSB1c2VkIGZyZWVwb2ludGVyIGluICYjMzk7eCYjMzk7IHRvIGxpbmsgJiMzOTt4JiMzOTsgaW50byBkZi0mZ3Q7b2JqZWN0cy4KIAkJICogQ2xlYXIgaXQgdG8gTlVMTCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZSBkZXRlY3Rpb24KQEAgLTY0MDMsNyAmIzQzOzY0MjAsMzAgQEAgc3RhdGljIHZvaWQgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3b3JrKQogCQlzdGF0KHMsIEZSRUVfU0xPV1BBVEgpOwogCX0KIAotCWxsbm9kZSA9IGxsaXN0X2RlbF9hbGwob2Jqc19ieV9yY3UpOwomIzQzOwlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7ZHB3LSZndDtvYmplY3RzX2tmZW5jZSk7CiYjNDM7CWxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHsKJiM0MzsJCXN0cnVjdCBrbWVtX2NhY2hlICpzOwomIzQzOwkJc3RydWN0IHNsYWIgKnNsYWI7CiYjNDM7CQl2b2lkICpvYmogPSBrZmVuY2VfbGxub2RlX3RvX29iaihwb3MpOwomIzQzOwomIzQzOwkJc2xhYiA9IHZpcnRfdG9fc2xhYihvYmopOwomIzQzOwkJcyA9IHNsYWItJmd0O3NsYWJfY2FjaGU7CiYjNDM7CiYjNDM7CQlrbWVtbGVha19mcmVlX3JlY3Vyc2l2ZShvYmosIHMtJmd0O2ZsYWdzKTsKJiM0MzsKJiM0MzsJCV9fa2ZlbmNlX2ZyZWUob2JqKTsKJiM0MzsJfQomIzQzOwomIzQzOwlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7ZHB3LSZndDtvYmplY3RzX2xhcmdlX2ttYWxsb2MpOwomIzQzOwlsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7CiYjNDM7CQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZpcnRfdG9fcGFnZShwb3MpOwomIzQzOwomIzQzOwkJa21lbWxlYWtfZnJlZShwb3MpOwomIzQzOwomIzQzOwkJX19mcmVlX2xhcmdlX2ttYWxsb2NfcGFnZShwYWdlLCBTTEFCX0ZSRUVfREVGQVVMVCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGxub2RlID0gbGxpc3RfZGVsX2FsbCgmYW1wO2Rwdy0mZ3Q7b2JqZWN0c19ieV9yY3UpOwogCWxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHsKIAkJdm9pZCAqaGVhZCA9IHBvczsKIAkJdm9pZCAqb2JqcCA9IGt2bWFsbG9jX29ial9zdGFydF9hZGRyKGhlYWQpOwpAQCAtNjQxMSwyMSAmIzQzOzY0NTEsNjAgQEAgc3RhdGljIHZvaWQgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3b3JrKQogCQlrdmZyZWVfY2FsbF9yY3UoaGVhZCwgb2JqcCk7CiAJfQogCi0JbGxub2RlID0gbGxpc3RfZGVsX2FsbChyY3Vfc2hlYXZlcyk7CiYjNDM7CWxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtkcHctJmd0O3JjdV9zaGVhdmVzKTsKIAlsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNoZWFmLCBuZXh0LCBsbG5vZGUsIGxsbm9kZSkKIAkJY2FsbF9yY3UoJmFtcDtzaGVhZi0mZ3Q7cmN1X2hlYWQsIHJjdV9mcmVlX3NoZWFmKTsKIH0KIAotc3RhdGljIHZvaWQgZGVmZXJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqaGVhZCkKJiM0MztzdGF0aWMgdm9pZCBkZWZlcl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopCiB7CiAJc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFBsYWNlIHRoZSBsbGlzdCBub2RlIHdoZXJlIHRoZSBmcmVlcG9pbnRlciB3b3VsZCBiZSBpZiB3ZSBmcmVlZCB0aGUKJiM0MzsJICogb2JqZWN0IGltbWVkaWF0ZWx5LiBUaGF0IG1lYW5zIHdlIGNhbiB3cml0ZSB0aGVyZSBzYWZlbHksIG9ubHkgbmVlZAomIzQzOwkgKiB0byByZW1vdmUga2FzYW4gdGFnIGZpcnN0LgomIzQzOwkgKi8KJiM0MzsJbGxub2RlID0ga2FzYW5fcmVzZXRfdGFnKG9iaikgJiM0Mzsgcy0mZ3Q7b2Zmc2V0OwogCiAJZ3VhcmQocHJlZW1wdCkoKTsKIAotCWhlYWQgPSBrYXNhbl9yZXNldF90YWcoaGVhZCk7CiYjNDM7CWRwdyA9IHRoaXNfY3B1X3B0cigmYW1wO2RlZmVycmVkX3BlcmNwdV93b3JrKTsKJiM0MzsJaWYgKGxsaXN0X2FkZChsbG5vZGUsICZhbXA7ZHB3LSZndDtvYmplY3RzKSkKJiM0MzsJCWlycV93b3JrX3F1ZXVlKCZhbXA7ZHB3LSZndDt3b3JrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGVmZXJfZnJlZV9rZmVuY2Uodm9pZCAqb2JqKQomIzQzO3sKJiM0MzsJc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7CiYjNDM7CiYjNDM7CS8qIGthc2FuX3Jlc2V0X3RhZygpIGlzIG5vdCBuZWNlc3NhcnksIGtmZW5jZSBvYmplY3RzIGFyZSBub3QgdGFnZ2VkICovCiYjNDM7CWxsbm9kZSA9IGtmZW5jZV9vYmpfdG9fbGxub2RlKG9iaik7CiYjNDM7CiYjNDM7CWd1YXJkKHByZWVtcHQpKCk7CiYjNDM7CiYjNDM7CWRwdyA9IHRoaXNfY3B1X3B0cigmYW1wO2RlZmVycmVkX3BlcmNwdV93b3JrKTsKJiM0MzsJaWYgKGxsaXN0X2FkZChsbG5vZGUsICZhbXA7ZHB3LSZndDtvYmplY3RzX2tmZW5jZSkpCiYjNDM7CQlpcnFfd29ya19xdWV1ZSgmYW1wO2Rwdy0mZ3Q7d29yayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRlZmVyX2ZyZWVfbGFyZ2Vfa21hbGxvYyh2b2lkICpvYmopCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdzsKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogd2UgY2FuIHNpbXBseSB1c2UgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxhcmdlIGttYWxsb2Mgb2JqZWN0CiYjNDM7CSAqIGZvciB0aGUgbGxub2RlLCBhcyB0aGVyZSYjMzk7cyBubyBjdG9yIG9yIFRZUEVTQUZFX0JZX1JDVQomIzQzOwkgKi8KJiM0MzsJbGxub2RlID0ga2FzYW5fcmVzZXRfdGFnKG9iaik7CiYjNDM7CiYjNDM7CWd1YXJkKHByZWVtcHQpKCk7CiAKIAlkcHcgPSB0aGlzX2NwdV9wdHIoJmFtcDtkZWZlcnJlZF9wZXJjcHVfd29yayk7Ci0JaWYgKGxsaXN0X2FkZChoZWFkICYjNDM7IHMtJmd0O29mZnNldCwgJmFtcDtkcHctJmd0O29iamVjdHMpKQomIzQzOwlpZiAobGxpc3RfYWRkKGxsbm9kZSwgJmFtcDtkcHctJmd0O29iamVjdHNfbGFyZ2Vfa21hbGxvYykpCiAJCWlycV93b3JrX3F1ZXVlKCZhbXA7ZHB3LSZndDt3b3JrKTsKIH0KIApAQCAtNjY3Nyw5ICYjNDM7Njc1NiwxMSBAQCBzaXplX3Qga3NpemUoY29uc3Qgdm9pZCAqb2JqcCkKIH0KIEVYUE9SVF9TWU1CT0woa3NpemUpOwogCi1zdGF0aWMgdm9pZCBmcmVlX2xhcmdlX2ttYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKm9iamVjdCkKJiM0MztzdGF0aWMgdm9pZCBmcmVlX2xhcmdlX2ttYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKm9iamVjdCwKJiM0MzsJCQkgICAgICAgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpCiB7CiAJdW5zaWduZWQgaW50IG9yZGVyID0gY29tcG91bmRfb3JkZXIocGFnZSk7CiYjNDM7CWJvb2wgbm9sb2NrID0gZnJlZV9mbGFncyAmYW1wOyBTTEFCX0ZSRUVfTk9MT0NLOwogCiAJaWYgKFdBUk5fT05fT05DRSghUGFnZUxhcmdlS21hbGxvYyhwYWdlKSkpIHsKIAkJZHVtcF9wYWdlKHBhZ2UsICYjMzQ7Tm90IGEga21hbGxvYyBhbGxvY2F0aW9uJiMzNDspOwpAQCAtNjY4OSwxNCAmIzQzOzY3NzAsMTYgQEAgc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpCiAJaWYgKFdBUk5fT05fT05DRShvcmRlciA9PSAwKSkKIAkJcHJfd2Fybl9vbmNlKCYjMzQ7b2JqZWN0IHBvaW50ZXI6IDB4JXBcbiYjMzQ7LCBvYmplY3QpOwogCi0Ja21lbWxlYWtfZnJlZShvYmplY3QpOwomIzQzOwlpZiAoIW5vbG9jaykKJiM0MzsJCWttZW1sZWFrX2ZyZWUob2JqZWN0KTsKJiM0MzsKIAlrYXNhbl9rZnJlZV9sYXJnZShvYmplY3QpOwogCWttc2FuX2tmcmVlX2xhcmdlKG9iamVjdCk7CiAKLQltb2RfbHJ1dmVjX3BhZ2Vfc3RhdGUocGFnZSwgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0IsCi0JCQkgICAgICAtKFBBR0VfU0laRSAmbHQ7Jmx0OyBvcmRlcikpOwotCV9fQ2xlYXJQYWdlTGFyZ2VLbWFsbG9jKHBhZ2UpOwotCWZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyKTsKJiM0MzsJaWYgKHVubGlrZWx5KG5vbG9jayAmYW1wOyZhbXA7IGttZW1sZWFrX21heV9uZWVkX2ZyZWUob2JqZWN0KSkpCiYjNDM7CQlkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2Mob2JqZWN0KTsKJiM0MzsJZWxzZQomIzQzOwkJX19mcmVlX2xhcmdlX2ttYWxsb2NfcGFnZShwYWdlLCBmcmVlX2ZsYWdzKTsKIH0KIAogLyoKQEAgLTY3MTgsNyAmIzQzOzY4MDEsNyBAQCB2b2lkIGt2ZnJlZV9yY3VfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKQogCQlpZiAoc2xhYikKIAkJCXNsYWJfZnJlZShzbGFiLSZndDtzbGFiX2NhY2hlLCBzbGFiLCBvYmosIF9SRVRfSVBfKTsKIAkJZWxzZQotCQkJZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iaik7CiYjNDM7CQkJZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iaiwgU0xBQl9GUkVFX0RFRkFVTFQpOwogCX0KIH0KIApAQCAtNjc0NCw3ICYjNDM7NjgyNyw3IEBAIHZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqb2JqZWN0KQogCXNsYWIgPSBwYWdlX3NsYWIocGFnZSk7CiAJaWYgKCFzbGFiKSB7CiAJCS8qIGttYWxsb2Nfbm9sb2NrKCkgZG9lc24mIzM5O3Qgc3VwcG9ydCBsYXJnZSBrbWFsbG9jICovCi0JCWZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCAodm9pZCAqKW9iamVjdCk7CiYjNDM7CQlmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgKHZvaWQgKilvYmplY3QsIFNMQUJfRlJFRV9ERUZBVUxUKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNjc1NSwxNSAmIzQzOzY4MzgsMTQgQEAgRVhQT1JUX1NZTUJPTChrZnJlZSk7CiAKIC8qCiAgKiBDYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgcmF3X3NwaW5sb2NrX3Qgb3IgZnJvbSBJUlEgYW5kIE5NSSwKLSAqIGJ1dCBPTkxZIGZvciBvYmplY3RzIGFsbG9jYXRlZCBieSBrbWFsbG9jX25vbG9jaygpLgotICogRGVidWcgY2hlY2tzIChsaWtlIGttZW1sZWFrIGFuZCBrZmVuY2UpIHdlcmUgc2tpcHBlZCBvbiBhbGxvY2F0aW9uLAotICogaGVuY2UKLSAqIG9iaiA9IGttYWxsb2MoKTsga2ZyZWVfbm9sb2NrKG9iaik7Ci0gKiB3aWxsIG1pc3Mga21lbWxlYWsva2ZlbmNlIGJvb2sga2VlcGluZyBhbmQgd2lsbCBjYXVzZSBmYWxzZSBwb3NpdGl2ZXMuCi0gKiBsYXJnZV9rbWFsbG9jIGlzIG5vdCBzdXBwb3J0ZWQgZWl0aGVyLgomIzQzOyAqIGJ1dCBtYXkgZGVmZXIgZnJlZWluZyB0byBpcnFfd29yaygpIGluIHNvbWUgY2FzZXMuCiYjNDM7ICoKJiM0MzsgKiBJbnRlbmRlZCBtYWlubHkgZm9yIG9iamVjdHMgYWxsb2NhdGVkIGZyb20ga21hbGxvY19ub2xvY2soKSwgYnV0IGNhbiBoYW5kbGUKJiM0MzsgKiBhbHNvIGttZW1fY2FjaGVfYWxsb2MoKSBhbmQga21hbGxvYygpIG9iamVjdHMsIGluY2x1ZGluZyBsYXJnZV9rbWFsbG9jLgogICovCiB2b2lkIGtmcmVlX25vbG9jayhjb25zdCB2b2lkICpvYmplY3QpCiB7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlOwogCXN0cnVjdCBzbGFiICpzbGFiOwogCXN0cnVjdCBrbWVtX2NhY2hlICpzOwogCXZvaWQgKnggPSAodm9pZCAqKW9iamVjdDsKQEAgLTY3NzEsOSAmIzQzOzY4NTMsMTAgQEAgdm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KQogCWlmICh1bmxpa2VseShaRVJPX09SX05VTExfUFRSKG9iamVjdCkpKQogCQlyZXR1cm47CiAKLQlzbGFiID0gdmlydF90b19zbGFiKG9iamVjdCk7CiYjNDM7CXBhZ2UgPSB2aXJ0X3RvX3BhZ2Uob2JqZWN0KTsKJiM0MzsJc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTsKIAlpZiAodW5saWtlbHkoIXNsYWIpKSB7Ci0JCVdBUk5fT05DRSgxLCAmIzM0O2xhcmdlX2ttYWxsb2MgaXMgbm90IHN1cHBvcnRlZCBieSBrZnJlZV9ub2xvY2soKSYjMzQ7KTsKJiM0MzsJCWZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCAodm9pZCAqKW9iamVjdCwgU0xBQl9GUkVFX05PTE9DSyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTY3OTEsNiAmIzQzOzY4NzQsMTIgQEAgdm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KQogCSAqIHNpbmNlIHRoZXkgdGFrZSBzcGlubG9ja3Mgb3Igbm90IHNhZmUgZnJvbSBhbnkgY29udGV4dC4KIAkgKi8KIAlrbXNhbl9zbGFiX2ZyZWUocywgeCk7CiYjNDM7CiYjNDM7CWlmIChpc19rZmVuY2VfYWRkcmVzcyh4KSkgewomIzQzOwkJZGVmZXJfZnJlZV9rZmVuY2UoeCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAkvKgogCSAqIElmIEtBU0FOIGZpbmRzIGEga2VybmVsIGJ1ZyBpdCB3aWxsIGRvIGthc2FuX3JlcG9ydF9pbnZhbGlkX2ZyZWUoKQogCSAqIHdoaWNoIHdpbGwgY2FsbCByYXdfc3Bpbl9sb2NrX2lycXNhdmUoKSB3aGljaCBpcyB0ZWNobmljYWxseQpAQCAtNjgwOSw5ICYjNDM7Njg5OCwyMyBAQCB2b2lkIGtmcmVlX25vbG9jayhjb25zdCB2b2lkICpvYmplY3QpCiAJICovCiAJa2FzYW5fc2xhYl9mcmVlKHMsIHgsIGZhbHNlLCBmYWxzZSwgLyogc2tpcCBxdWFyYW50aW5lICovdHJ1ZSk7CiAKJiM0MzsJLyoKJiM0MzsJICogd2l0aCBrZnJlZSgpIHRoZSBrbWVtbGVhayBoYW5kbGluZyBoYXBwZW5zIG11Y2ggc29vbmVyLCBidXQgZm9yCiYjNDM7CSAqIGRlZmVyaW5nIHdlIG5lZWQgdG8gd3JpdGUgbGxub2RlIHRvIHRoZSBvYmplY3QmIzM5O3MgZnJlZXBvaW50ZXIgc28KJiM0MzsJICogd2Ugc2hvdWxkIGhhdmUgaXQgaW4gdGhlIHN0YXRlIHdoZW4gaXQmIzM5O3Mgbm8gbG9uZ2VyIHRyZWF0ZWQgYXMKJiM0MzsJICogYWxsb2NhdGVkIGJ5IGthc2FuIGV0Yy4KJiM0MzsJICoKJiM0MzsJICogZGVmZXJfZnJlZSB3aWxsIGFsc28gcmVzZXQgdGhlIHBvaW50ZXIgdGFnLCBidXQgaXQmIzM5O3Mgb2sgdG8gZG8gYQomIzQzOwkgKiBkZWZlcnJlZCBrbWVtbGVha19mcmVlKCkgdXNpbmcgdGhlIHVudGFnZ2VkIHBvaW50ZXIsIGJlY2F1c2UKJiM0MzsJICogX19sb29rdXBfb2JqZWN0KCkgcmVzZXRzIHRoZSB0YWcgYW55d2F5CiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkoa21lbWxlYWtfbWF5X25lZWRfZnJlZV9yZWN1cnNpdmUoeCwgcy0mZ3Q7ZmxhZ3MpKSkKJiM0MzsJCWdvdG8gZGVmZXI7CiYjNDM7CiAJaWYgKGxpa2VseShjYW5fZnJlZV90b19wY3Moc2xhYikpICZhbXA7JmFtcDsgbGlrZWx5KGZyZWVfdG9fcGNzKHMsIHgsIGZhbHNlKSkpCiAJCXJldHVybjsKIAomIzQzO2RlZmVyOgogCS8qCiAJICogX19zbGFiX2ZyZWUoKSBjYW4gbG9ja2xlc3NseSBjbXB4Y2hnMTYgaW50byBhIHNsYWIsIGJ1dCB0aGVuIGl0IG1pZ2h0CiAJICogbmVlZCB0byB0YWtlIHNwaW5fbG9jayBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgpAQCAtNzExNCw3ICYjNDM7NzIxNyw3IEBAIGludCBidWlsZF9kZXRhY2hlZF9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsCiAJaWYgKCFzKSB7CiAJCS8qIEhhbmRsZSBrYWxsb2MmIzM5O2VkIG9iamVjdHMgKi8KIAkJaWYgKCFzbGFiKSB7Ci0JCQlmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgb2JqZWN0KTsKJiM0MzsJCQlmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgb2JqZWN0LCBTTEFCX0ZSRUVfREVGQVVMVCk7CiAJCQlkZi0mZ3Q7c2xhYiA9IE5VTEw7CiAJCQlyZXR1cm4gc2l6ZTsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQxNwoJCQkJCQkJb3V0cHV0OiAyNDEKCQkJCQkJCXRob3VnaHRzOiAxMDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIFJpc2sgQXNzZXNzbWVudCBvZiBNZW1vcnkgRnJlZWluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4sIGFzIHdpdGggYW55IG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSwgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGNlbnRlcnMgYXJvdW5kIG1vZGlmeWluZyBga2ZyZWVfbm9sb2NrKClgIGFuZCBpdHMgcmVsYXRlZCBmdW5jdGlvbnMgdG8gaGFuZGxlIG9iamVjdCBmcmVlaW5nLCBlc3BlY2lhbGx5IHRob3NlIGFsbG9jYXRlZCBieSBga21hbGxvYygpYCBhbmQgYGttZW1fY2FjaGVfYWxsb2MoKWAsIGluY2x1ZGluZyBsYXJnZSBrbWFsbG9jcyBhbmQgS0ZFTkNFIG9iamVjdHMuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBkZWZlcnJhbCB0byBgaXJxX3dvcmtgIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMsIGxpa2UgaWYgYGttZW1sZWFrX21heV9uZWVkX2ZyZWUoKWAgaXMgdHJ1ZSwgaWYgaXQmIzM5O3MgYSBLRkVOQ0Ugb2JqZWN0LCBvciBhIGxhcmdlIGttYWxsb2Mgb2JqZWN0IHRyaWdnZXJpbmcga21lbWxlYWsgZnJlZWluZy4gSXQgYWxzbyBsb29rcyBsaWtlIGEgY2hhbmdlIHRvIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKClgIHRvIHVzZSBga2ZyZWVfbm9sb2NrKClgIGluc3RlYWQgb2YgYGtmcmVlX3JjdSgpYC4KCk15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEVzc2VudGlhbGx5LCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGxvY2tsZXNzIGZyZWVpbmcgKGBrZnJlZV9ub2xvY2tgKSwgYW5kIHRoZSBwYXRjaCB1dGlsaXplcyB0aGUgb2JqZWN0JiMzOTtzIG1lbW9yeSBmb3IgYW4gYGxsaXN0X25vZGVgIHRvIGhhbmRsZSB0aGUgZGVmZXJyZWQgZnJlZWluZy4gRm9yIGBkZWZlcl9mcmVlKClgLCBpdCB1c2VzIGBsbG5vZGUgPSBrYXNhbl9yZXNldF90YWcob2JqKSAmIzQzOyBzLSZndDtvZmZzZXQ7YCwgd2hpY2ggc2VlbXMgZmluZS4gVGhlIGBkZWZlcl9mcmVlX2tmZW5jZSgpYCB1c2VzIGBsbG5vZGUgPSBrZmVuY2Vfb2JqX3RvX2xsbm9kZShvYmopO2AgKHVzaW5nIGAmYW1wO21ldGEtJmd0O2xsbm9kZWApLCBhbHNvIHNlZW1zIGNvcnJlY3QsIGFzIHRoZSBLRkVOQ0UgbWV0YWRhdGEgaXMgY2xlYXJseSBkZWZpbmVkLiBCdXQgdGhlIGBkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2MoKWAgdXNlcyBgbGxub2RlID0ga2FzYW5fcmVzZXRfdGFnKG9iaik7YCwgd2hpY2ggaXMgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxhcmdlIGttYWxsb2Mgb2JqZWN0LgoKVGhlIGNvbmNlcm4gd2l0aCBgZGVmZXJfZnJlZV9sYXJnZV9rbWFsbG9jKClgIGlzIHRoYXQgYnkgb3ZlcndyaXRpbmcgdGhlIGZpcnN0IDggYnl0ZXMgb2YgdGhlIG9iamVjdCwgYW0gSSBpbmFkdmVydGVudGx5IGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhpcyBpcyBub3QgdGhlIGNhc2UgYmVjYXVzZSB0aGUgb2JqZWN0IGlzICpiZWluZyBmcmVlZCouIFRoZSBgbGxub2RlYCBpcyBwdXJlbHkgZm9yIGludGVybmFsIGxpbmtpbmcgd2l0aGluIHRoZSBTTFVCIGFsbG9jYXRvciYjMzk7cyBkZWZlcnJlZCBmcmVlIGxpc3QuIE9uY2UgdGhlIGBpcnFfd29ya2AgcnVucywgdGhlIG9iamVjdCBpcyByZW1vdmVkIGZyb20gdGhlIGxpc3QgYW5kIGFjdHVhbGx5IGZyZWVkLiBUaHVzLCBhbnkgY29udGVudCBpbiB0aGUgb2JqZWN0IGlzIGlycmVsZXZhbnQgYXQgdGhpcyBwb2ludCBhbmQgdGhlcmUgc2hvdWxkIGJlIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC4KClRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIG1vZGlmaWNhdGlvbnMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucywgYW5kIG5vIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhpcyBpcyBhbGwgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBmcmVlaW5nIHBhdGhzLiBDb25zZXF1ZW50bHksIHRoZSBsaWtlbHkgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIFRoZXNlIGFyZSAqcHJlY2lzZWx5KiB0aGUga2luZHMgb2YgaXNzdWVzIEtBU0FOIGFuZCBzdGFuZGFyZCBTTFVCIGRlYnVnZ2luZyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoYXQgYGRlZmVyX2ZyZWVfbGFyZ2Vfa21hbGxvYygpYCBjb2RlIGJsb2NrOgpgYGBjCnN0YXRpYyB2b2lkIGRlZmVyX2ZyZWVfbGFyZ2Vfa21hbGxvYyh2b2lkICpvYmopCnsKCXN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3OwoJc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTsKCgkvKgoJICogd2UgY2FuIHNpbXBseSB1c2UgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxhcmdlIGttYWxsb2Mgb2JqZWN0CgkgKiBmb3IgdGhlIGxsbm9kZSwgYXMgdGhlcmUmIzM5O3Mgbm8gY3RvciBvciBUWVBFU0FGRV9CWV9SQ1UKCSAqLwoJbGxub2RlID0ga2FzYW5fcmVzZXRfdGFnKG9iaik7CgoJZ3VhcmQocHJlZW1wdCkoKTsKCglkcHcgPSB0aGlzX2NwdV9wdHIoJmFtcDtkZWZlcnJlZF9wZXJjcHVfd29yayk7CglpZiAobGxpc3RfYWRkKGxsbm9kZSwgJmFtcDtkcHctJmd0O29iamVjdHNfbGFyZ2Vfa21hbGxvYykpCgkJaXJxX3dvcmtfcXVldWUoJmFtcDtkcHctJmd0O3dvcmspOwp9CmBgYApZZWFoLCBleGFjdGx5IGFzIEkgZXhwZWN0ZWQuIEl0IG92ZXJ3cml0ZXMgdGhlIGZpcnN0IDggYnl0ZXMgb2YgdGhlIG9iamVjdCB0byBiZSBmcmVlZC4gU2luY2UgdGhlIG9iamVjdCBpcyBhbHJlYWR5IHNjaGVkdWxlZCB0byBiZSBmcmVlZCwgaXQgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBieSB1c2VyIHNwYWNlIGFueSBsb25nZXIuIElmIGl0ICppcyogYWNjZXNzZWQsIHRoYXQmIzM5O3MgYSB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggS0FTQU4gKndpbGwqIGNhdGNoLgoKTm93LCBsZXQmIzM5O3MgYnJpZWZseSBsb29rIGF0IHRoZSBjaGFuZ2UgaW4gYHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKWA6CmBgYGMKLQlrZnJlZV9yY3UoKHVuaW9uIGNwdW1hc2tfcmN1aGVhZCAqKWFjLnVzZXJfbWFzaywgcmN1KTsKJiM0MzsJa2ZyZWVfbm9sb2NrKGFjLnVzZXJfbWFzayk7CmBgYApJdCYjMzk7cyBqdXN0IHJlcGxhY2luZyBga2ZyZWVfcmN1YCB3aXRoIGBrZnJlZV9ub2xvY2tgLiBUaGUgYGFjLnVzZXJfbWFza2Agd2FzIGFsbG9jYXRlZCB3aXRoIGBhbGxvY191c2VyX2NwdXNfcHRyYC4KYGBgYwogc3RhdGljIGlubGluZSBjcHVtYXNrX3QgKmFsbG9jX3VzZXJfY3B1c19wdHIoaW50IG5vZGUpCiB7Ci0JLyoKLQkgKiBTZWUgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpIGFib3ZlIGZvciB0aGUgcmN1X2hlYWQgdXNhZ2UuCi0JICovCi0JaW50IHNpemUgPSBtYXhfdChpbnQsIGNwdW1hc2tfc2l6ZQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBmcmVlaW5nIHBhdGhzLCBzcGVjaWZpY2FsbHkgZXh0ZW5kaW5nIGBrZnJlZV9ub2xvY2soKWAgdG8gaGFuZGxlIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgIGFuZCBga21lbV9jYWNoZV9hbGxvYygpYCwgaW5jbHVkaW5nIGxhcmdlIGttYWxsb2NzIGFuZCBLRkVOQ0Ugb2JqZWN0cy4gSXQgZGVmZXJzIGZyZWVpbmcgdG8gYW4gYGlycV93b3JrYCB1c2luZyBhIGxvY2tsZXNzIGxpc3QgKGBsbGlzdGApIHdoZW4gbmVjZXNzYXJ5LiBUaGUgY2hhbmdlcyBpbnZvbHZlIG92ZXJ3cml0aW5nIHBhcnRzIG9mIHRoZSBmcmVlZCBvYmplY3RzIChsaWtlIHRoZSBmcmVlcG9pbnRlciBvciB0aGUgZmlyc3Qgd29yZCBvZiBhIGxhcmdlIGttYWxsb2Mgb2JqZWN0KSB0byBzdG9yZSB0aGUgYGxsaXN0X25vZGVgLiBTaW5jZSB0aGVzZSBvYmplY3RzIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBmcmVlZCwgYW55IGFjY2VzcyB0byB0aGVtIHdvdWxkIGNvbnN0aXR1dGUgYSB1c2UtYWZ0ZXItZnJlZSBidWcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYyBvZiBhY3RpdmUgb2JqZWN0cy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24pIHdpbGwgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBTTFVCIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgZXhwb3NlZCBoZXJlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBmcmVlaW5nIHBhdGhzLCBzcGVjaWZpY2FsbHkgZXh0ZW5kaW5nIGBrZnJlZV9ub2xvY2soKWAgdG8gaGFuZGxlIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgIGFuZCBga21lbV9jYWNoZV9hbGxvYygpYCwgaW5jbHVkaW5nIGxhcmdlIGttYWxsb2NzIGFuZCBLRkVOQ0Ugb2JqZWN0cy4gSXQgZGVmZXJzIGZyZWVpbmcgdG8gYW4gYGlycV93b3JrYCB1c2luZyBhIGxvY2tsZXNzIGxpc3QgKGBsbGlzdGApIHdoZW4gbmVjZXNzYXJ5LiBUaGUgY2hhbmdlcyBpbnZvbHZlIG92ZXJ3cml0aW5nIHBhcnRzIG9mIHRoZSBmcmVlZCBvYmplY3RzIChsaWtlIHRoZSBmcmVlcG9pbnRlciBvciB0aGUgZmlyc3Qgd29yZCBvZiBhIGxhcmdlIGttYWxsb2Mgb2JqZWN0KSB0byBzdG9yZSB0aGUgYGxsaXN0X25vZGVgLiBTaW5jZSB0aGVzZSBvYmplY3RzIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBmcmVlZCwgYW55IGFjY2VzcyB0byB0aGVtIHdvdWxkIGNvbnN0aXR1dGUgYSB1c2UtYWZ0ZXItZnJlZSBidWcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYyBvZiBhY3RpdmUgb2JqZWN0cy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24pIHdpbGwgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBTTFVCIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgZXhwb3NlZCBoZXJlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTM6NDcuMjk0MzM2MDg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5ODg5Nzc3NjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX0tNRU1MRUFLXCIsXG4gICAgXCJLRkVOQ0VcIixcbiAgICBcIlBSRUVNUFRfUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrZnJlZV9ub2xvY2tcIixcbiAgICBcInNldF9jcHVzX2FsbG93ZWRfZm9yY2VcIixcbiAgICBcImttZW1sZWFrX21heV9uZWVkX2ZyZWVcIixcbiAgICBcImtmZW5jZV9vYmpfdG9fbGxub2RlXCIsXG4gICAgXCJrZmVuY2VfbGxub2RlX3RvX29ialwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGZyZWVpbmcgcGF0aHMsIHNwZWNpZmljYWxseSBleHRlbmRpbmcgYGtmcmVlX25vbG9jaygpYCB0byBoYW5kbGUgb2JqZWN0cyBhbGxvY2F0ZWQgYnkgYGttYWxsb2MoKWAgYW5kIGBrbWVtX2NhY2hlX2FsbG9jKClgLCBpbmNsdWRpbmcgbGFyZ2Uga21hbGxvY3MgYW5kIEtGRU5DRSBvYmplY3RzLiBJdCBkZWZlcnMgZnJlZWluZyB0byBhbiBgaXJxX3dvcmtgIHVzaW5nIGEgbG9ja2xlc3MgbGlzdCAoYGxsaXN0YCkgd2hlbiBuZWNlc3NhcnkuIFRoZSBjaGFuZ2VzIGludm9sdmUgb3ZlcndyaXRpbmcgcGFydHMgb2YgdGhlIGZyZWVkIG9iamVjdHMgKGxpa2UgdGhlIGZyZWVwb2ludGVyIG9yIHRoZSBmaXJzdCB3b3JkIG9mIGEgbGFyZ2Uga21hbGxvYyBvYmplY3QpIHRvIHN0b3JlIHRoZSBgbGxpc3Rfbm9kZWAuIFNpbmNlIHRoZXNlIG9iamVjdHMgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGZyZWVkLCBhbnkgYWNjZXNzIHRvIHRoZW0gd291bGQgY29uc3RpdHV0ZSBhIHVzZS1hZnRlci1mcmVlIGJ1Zy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljIG9mIGFjdGl2ZSBvYmplY3RzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBtZW1vcnkgY29ycnVwdGlvbikgd2lsbCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIFNMVUIgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBleHBvc2VkIGhlcmUgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBrZnJlZV9ub2xvY2soKWAgaW4gYG1tL3NsdWIuY2AgdG8gc3VwcG9ydCBmcmVlaW5nIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgLCBga21lbV9jYWNoZV9hbGxvYygpYCwgYW5kIGxhcmdlIGttYWxsb2NzLCBhcyB3ZWxsIGFzIEtGRU5DRSBvYmplY3RzLiBJdCBkZWZlcnMgZnJlZWluZyB0byBhbiBgaXJxX3dvcmtgIGlmIG5lY2Vzc2FyeSAoZS5nLiwgZm9yIGttZW1sZWFrIG9yIEtGRU5DRSkuIEl0IGFsc28gbW9kaWZpZXMgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKWAgaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgIHRvIHVzZSBga2ZyZWVfbm9sb2NrKClgIGluc3RlYWQgb2YgYGtmcmVlX3JjdSgpYC4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxlciBjaGFuZ2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTM6NDcuMjk0MzQzODQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTU5NjE1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlNWI4NmJkYzU5ODRiNmIwYmEzMWRlMDc5NTAxZGU2YjIxNjE5ODc0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTY6NTM6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZmVuY2UuaCBiL2luY2x1ZGUvbGludXgva2ZlbmNlLmhcXG5pbmRleCBlNTgyMmY2ZTdmMjc5Li4wMDcyMWM4NTI1OGRjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgva2ZlbmNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2tmZW5jZS5oXFxuQEAgLTE4OCw2ICsxODgsOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayBib29sIGtmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdHJ1Y3QgbGxpc3Rfbm9kZSAqa2ZlbmNlX29ial90b19sbG5vZGUodm9pZCAqYWRkcik7XFxuK3ZvaWQgKmtmZW5jZV9sbG5vZGVfdG9fb2JqKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpO1xcbitcXG4gLyoqXFxuICAqIGtmZW5jZV9oYW5kbGVfcGFnZV9mYXVsdCgpIC0gcGVyZm9ybSBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciBLRkVOQ0UgcGFnZXNcXG4gICogQGFkZHI6IGZhdWx0aW5nIGFkZHJlc3NcXG5AQCAtMjM1LDYgKzIzOCw4IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGtmZW5jZV9rc2l6ZShjb25zdCB2b2lkICphZGRyKSB7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCAqa2ZlbmNlX29iamVjdF9zdGFydChjb25zdCB2b2lkICphZGRyKSB7IHJldHVybiBOVUxMOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpIHsgfVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGtmZW5jZV9mcmVlKHZvaWQgKmFkZHIpIHsgcmV0dXJuIGZhbHNlOyB9XFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X25vZGUgKmtmZW5jZV9vYmpfdG9fbGxub2RlKHZvaWQgKmFkZHIpIHsgcmV0dXJuIE5VTEw7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkICprZmVuY2VfbGxub2RlX3RvX29iaihzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlKSB7IHJldHVybiBOVUxMOyB9XFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sga2ZlbmNlX2hhbmRsZV9wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBpc193cml0ZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21lbWxlYWsuaCBiL2luY2x1ZGUvbGludXgva21lbWxlYWsuaFxcbmluZGV4IGZiZDQyNGIyYWJiMTQuLjUyZjc1ZjEwYTljZTYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oXFxuQEAgLTIyLDYgKzIyLDcgQEAgZXh0ZXJuIHZvaWQga21lbWxlYWtfYWxsb2NfcGVyY3B1KGNvbnN0IHZvaWQgX19wZXJjcHUgKnB0ciwgc2l6ZV90IHNpemUsXFxuIGV4dGVybiB2b2lkIGttZW1sZWFrX3ZtYWxsb2MoY29uc3Qgc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgc2l6ZV90IHNpemUsXFxuIFxcdFxcdFxcdCAgICAgZ2ZwX3QgZ2ZwKSBfX3JlZjtcXG4gZXh0ZXJuIHZvaWQga21lbWxlYWtfZnJlZShjb25zdCB2b2lkICpwdHIpIF9fcmVmO1xcbitib29sIGttZW1sZWFrX21heV9uZWVkX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjtcXG4gZXh0ZXJuIHZvaWQga21lbWxlYWtfZnJlZV9wYXJ0KGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpIF9fcmVmO1xcbiBleHRlcm4gdm9pZCBrbWVtbGVha19mcmVlX3BlcmNwdShjb25zdCB2b2lkIF9fcGVyY3B1ICpwdHIpIF9fcmVmO1xcbiBleHRlcm4gdm9pZCBrbWVtbGVha191cGRhdGVfdHJhY2UoY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjtcXG5AQCAtNTAsNiArNTEsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKGNvbnN0IHZvaWQgKnB0ciwgc2xhYl9mbGFnc190IGZsYWdzKVxcbiBcXHRcXHRrbWVtbGVha19mcmVlKHB0cik7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncylcXG4re1xcbitcXHRpZiAoIShmbGFncyBcXHUwMDI2IFNMQUJfTk9MRUFLVFJBQ0UpKVxcbitcXHRcXHRyZXR1cm4ga21lbWxlYWtfbWF5X25lZWRfZnJlZShwdHIpO1xcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZXJhc2Uodm9pZCAqKnB0cilcXG4ge1xcbiBcXHQqcHRyID0gTlVMTDtcXG5AQCAtODYsNiArOTUsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2ZyZWVfcGFydChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplKVxcbiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXFxuIHtcXG4gfVxcbitzdGF0aWMgaW5saW5lIGJvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncylcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4gc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2ZyZWVfcGVyY3B1KGNvbnN0IHZvaWQgX19wZXJjcHUgKnB0cilcXG4ge1xcbiB9XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXFxuaW5kZXggOTYyMjY3MDdjMmY2MS4uZDI5MjllNGUyM2YxMyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jXFxuKysrIGIva2VybmVsL3NjaGVkL2NvcmUuY1xcbkBAIC0yODA3LDIwICsyODA3LDE1IEBAIHZvaWQgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpuZXdfbWFzXFxuIFxcdFxcdC51c2VyX21hc2sgPSBOVUxMLFxcbiBcXHRcXHQuZmxhZ3MgICAgID0gU0NBX1VTRVIsXFx0LyogY2xlYXIgdGhlIHVzZXIgcmVxdWVzdGVkIG1hc2sgKi9cXG4gXFx0fTtcXG4tXFx0dW5pb24gY3B1bWFza19yY3VoZWFkIHtcXG4tXFx0XFx0Y3B1bWFza190IGNwdW1hc2s7XFxuLVxcdFxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuLVxcdH07XFxuIFxcbiBcXHRzY29wZWRfZ3VhcmQgKF9fdGFza19ycV9sb2NrLCBwKVxcbiBcXHRcXHRkb19zZXRfY3B1c19hbGxvd2VkKHAsIFxcdTAwMjZhYyk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBCZWNhdXNlIHRoaXMgaXMgY2FsbGVkIHdpdGggcC1cXHUwMDNlcGlfbG9jayBoZWxkLCBpdCBpcyBub3QgcG9zc2libGVcXG4tXFx0ICogdG8gdXNlIGtmcmVlKCkgaGVyZSAod2hlbiBQUkVFTVBUX1JUPXkpLCB0aGVyZWZvcmUgcHVudCB0byB1c2luZ1xcbi1cXHQgKiBrZnJlZV9yY3UoKS5cXG4rXFx0ICogdG8gdXNlIGtmcmVlKCkgaGVyZSAod2hlbiBQUkVFTVBUX1JUPXkpLCB0aHVzIHVzZSBrZnJlZV9ub2xvY2soKVxcbiBcXHQgKi9cXG4tXFx0a2ZyZWVfcmN1KCh1bmlvbiBjcHVtYXNrX3JjdWhlYWQgKilhYy51c2VyX21hc2ssIHJjdSk7XFxuK1xcdGtmcmVlX25vbG9jayhhYy51c2VyX21hc2spO1xcbiB9XFxuIFxcbiBpbnQgZHVwX3VzZXJfY3B1c19wdHIoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvc2NoZWQuaCBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oXFxuaW5kZXggNTZhY2Y1MDJiYTI2MC4uNmE4ZDA1NzhlOTYzMyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvc2NoZWQvc2NoZWQuaFxcbisrKyBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oXFxuQEAgLTI4ODYsMTIgKzI4ODYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGFza19hbGxvd2VkX29uX2NwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjcHUpXFxuIFxcbiBzdGF0aWMgaW5saW5lIGNwdW1hc2tfdCAqYWxsb2NfdXNlcl9jcHVzX3B0cihpbnQgbm9kZSlcXG4ge1xcbi1cXHQvKlxcbi1cXHQgKiBTZWUgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpIGFib3ZlIGZvciB0aGUgcmN1X2hlYWQgdXNhZ2UuXFxuLVxcdCAqL1xcbi1cXHRpbnQgc2l6ZSA9IG1heF90KGludCwgY3B1bWFza19zaXplKCksIHNpemVvZihzdHJ1Y3QgcmN1X2hlYWQpKTtcXG4tXFxuLVxcdHJldHVybiBrbWFsbG9jX25vZGUoc2l6ZSwgR0ZQX0tFUk5FTCwgbm9kZSk7XFxuK1xcdHJldHVybiBrbWFsbG9jX25vZGUoY3B1bWFza19zaXplKCksIEdGUF9LRVJORUwsIG5vZGUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X3B1c2hfdGFzayhzdHJ1Y3QgcnEgKnJxKVxcbmRpZmYgLS1naXQgYS9tbS9rZmVuY2UvY29yZS5jIGIvbW0va2ZlbmNlL2NvcmUuY1xcbmluZGV4IDY1NzdiZDc2OTU0ZWIuLjQyNTE5ZDI0Njg3ZmYgMTAwNjQ0XFxuLS0tIGEvbW0va2ZlbmNlL2NvcmUuY1xcbisrKyBiL21tL2tmZW5jZS9jb3JlLmNcXG5AQCAtMTI3MSw2ICsxMjcxLDIwIEBAIHZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKVxcbit7XFxuK1xcdHN0cnVjdCBrZmVuY2VfbWV0YWRhdGEgKm1ldGEgPSBhZGRyX3RvX21ldGFkYXRhKCh1bnNpZ25lZCBsb25nKWFkZHIpO1xcbitcXG4rXFx0cmV0dXJuIFxcdTAwMjZtZXRhLVxcdTAwM2VsbG5vZGU7XFxuK31cXG4rXFxuK3ZvaWQgKmtmZW5jZV9sbG5vZGVfdG9fb2JqKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IGtmZW5jZV9tZXRhZGF0YSAqbWV0YSA9IGNvbnRhaW5lcl9vZihsbG5vZGUsIHN0cnVjdCBrZmVuY2VfbWV0YWRhdGEsIGxsbm9kZSk7XFxuK1xcbitcXHRyZXR1cm4gKHZvaWQgKiltZXRhLVxcdTAwM2VhZGRyO1xcbit9XFxuK1xcbiBib29sIGtmZW5jZV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiB7XFxuIFxcdGNvbnN0IGludCBwYWdlX2luZGV4ID0gKGFkZHIgLSAodW5zaWduZWQgbG9uZylfX2tmZW5jZV9wb29sKSAvIFBBR0VfU0laRTtcXG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZS5oIGIvbW0va2ZlbmNlL2tmZW5jZS5oXFxuaW5kZXggMWY2MThmOWIwZDEyZC4uMGZjYTFkYzJjNzk0MSAxMDA2NDRcXG4tLS0gYS9tbS9rZmVuY2Uva2ZlbmNlLmhcXG4rKysgYi9tbS9rZmVuY2Uva2ZlbmNlLmhcXG5AQCAtNTgsNyArNTgsMTAgQEAgc3RydWN0IGtmZW5jZV90cmFjayB7XFxuIC8qIEtGRU5DRSBtZXRhZGF0YSBwZXIgZ3VhcmRlZCBhbGxvY2F0aW9uLiAqL1xcbiBzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0IF9fZ3VhcmRlZF9ieShcXHUwMDI2a2ZlbmNlX2ZyZWVsaXN0X2xvY2spO1xcdC8qIEZyZWVsaXN0IG5vZGUuICovXFxuLVxcdHN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDtcXHQvKiBGb3IgZGVsYXllZCBmcmVlaW5nLiAqL1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDtcXHQvKiBGb3IgZGVsYXllZCBmcmVlaW5nLiAqL1xcbitcXHRcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBsbG5vZGU7XFx0LyogRm9yIGtmcmVlX25vbG9jaygpLiAqL1xcbitcXHR9O1xcbiBcXG4gXFx0LypcXG4gXFx0ICogTG9jayBwcm90ZWN0aW5nIGJlbG93IGRhdGE7IHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBvZiB0aGUgYmVsb3cgZGF0YSxcXG5kaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmNcXG5pbmRleCA3YzdiYTE3Y2U3YWYwLi5lMzU2MGNlODI2MzI2IDEwMDY0NFxcbi0tLSBhL21tL2ttZW1sZWFrLmNcXG4rKysgYi9tbS9rbWVtbGVhay5jXFxuQEAgLTExNjgsNiArMTE2OCw0OCBAQCB2b2lkIF9fcmVmIGttZW1sZWFrX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGttZW1sZWFrX2ZyZWUpO1xcbiBcXG4rLyoqXFxuKyAqIGttZW1sZWFrX21heV9uZWVkX2ZyZWUgLSBjaGVjayBpZiBvYmplY3QgaXMgcmVnaXN0ZXJlZFxcbisgKiBAcHRyOlxcdHBvaW50ZXIgdG8gYmVnaW5uaW5nIG9mIHRoZSBvYmplY3RcXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUga2VybmVsIGFsbG9jYXRvciB3aGVuIGFuIG9iamVjdCBzaG91bGQgYmVcXG4rICogZnJlZWQgYnV0IHRoZSBjYWxsZXIgY29udGV4dCBtaWdodCBiZSB1bnNhZmUgdG8gc3BpbiBvbiB0aGUgaW50ZXJuYWwgbG9ja3MuXFxuKyAqXFxuKyAqIEl0IHdpbGwgdGhlcmVmb3JlIG9ubHkgdXNlIHRyeWxvY2sgYW5kIHRodXMgbWlnaHQgcmV0dXJuIGEgZmFsc2UgcG9zaXRpdmVcXG4rICogaWYgdGhlIHRyeWxvY2sgZmFpbHMgYW5kIHRoZSBzdGF0dXMgY2Fubm90IGJlIGRldGVybWluZWQuXFxuKyAqXFxuKyAqIEZvciBvYmplY3RzIHRoYXQgKG1pZ2h0KSBuZWVkIGZyZWUsIHRoZSBhbGxvY2F0b3IgaGFzIHRvIGRlZmVyIHRoZSBhY3R1YWxcXG4rICogZnJlZWluZyB0byBhIHNhZmUgY29udGV4dC5cXG4rICpcXG4rICogVGhlIGFzc3VtcHRpb24gaXMgdGhhdCBtb3N0IG9iamVjdHMgZnJlZWQgZnJvbSB0aGUgdW5zYWZlIGNvbnRleHQgYXJlIGFsc29cXG4rICogYWxsb2NhdGVkIGluIHN1Y2ggY29udGV4dCBhbmQgdGh1cyBhcmUgbm90IHJlZ2lzdGVyZWQgaW4ga21lbWxlYWssIHNvIGl0J3NcXG4rICogdW5saWtlbHkgdGhlIGRlZmVyZWQgZnJlZWluZyB3aWxsIGJlIG5lY2Vzc2FyeSBqdXN0IGJlY2F1c2Uga21lbWxlYWsgaXNcXG4rICogZW5hYmxlZC5cXG4rICovXFxuK2Jvb2wgX19yZWYga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0c3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0O1xcbitcXG4rXFx0cHJfZGVidWcoXFxcIiVzKDB4JXB4KVxcXFxuXFxcIiwgX19mdW5jX18sIHB0cik7XFxuK1xcbitcXHRpZiAoIWttZW1sZWFrX2ZyZWVfZW5hYmxlZCB8fCAhcHRyIHx8IElTX0VSUihwdHIpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKiBPbiBVUCwgcmF3X3NwaW5fdHJ5bG9jaygpIGFsd2F5cyBzdWNjZWVkcyBldmVuIHdoZW4gaXQgaXMgbG9ja2VkICovXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfU01QKSBcXHUwMDI2XFx1MDAyNiBpbl9ubWkoKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRpZiAoIXJhd19zcGluX3RyeWxvY2tfaXJxc2F2ZShcXHUwMDI2a21lbWxlYWtfbG9jaywgZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdG9iamVjdCA9IF9fbG9va3VwX29iamVjdCgodW5zaWduZWQgbG9uZylwdHIsIDAsIDApO1xcbitcXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmttZW1sZWFrX2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdHJldHVybiAhIW9iamVjdDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGttZW1sZWFrX2ZyZWVfcGFydCAtIHBhcnRpYWxseSB1bnJlZ2lzdGVyIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIG9iamVjdFxcbiAgKiBAcHRyOlxcdHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvciBpbnNpZGUgdGhlIG9iamVjdC4gVGhpcyBhbHNvXFxuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xcbmluZGV4IGI5YWViMDJhODgwZjEuLjNiZTk4ZmFhOWYwZGUgMTAwNjQ0XFxuLS0tIGEvbW0vc2x1Yi5jXFxuKysrIGIvbW0vc2x1Yi5jXFxuQEAgLTQwNTAsNiArNDA1MCw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX2FsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4gXFxuIHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayB7XFxuIFxcdHN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHM7XFxuK1xcdHN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHNfa2ZlbmNlO1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzX2xhcmdlX2ttYWxsb2M7XFxuIFxcdHN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHNfYnlfcmN1O1xcbiBcXHRzdHJ1Y3QgbGxpc3RfaGVhZCByY3Vfc2hlYXZlcztcXG4gXFx0c3RydWN0IGlycV93b3JrIHdvcms7XFxuQEAgLTQwNTksNiArNDA2MSw4IEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yayk7XFxuIFxcbiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrLCBkZWZlcnJlZF9wZXJjcHVfd29yaykgPSB7XFxuIFxcdC5vYmplY3RzID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHMpLFxcbitcXHQub2JqZWN0c19rZmVuY2UgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0c19rZmVuY2UpLFxcbitcXHQub2JqZWN0c19sYXJnZV9rbWFsbG9jID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHNfbGFyZ2Vfa21hbGxvYyksXFxuIFxcdC5vYmplY3RzX2J5X3JjdSA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzX2J5X3JjdSksXFxuIFxcdC5yY3Vfc2hlYXZlcyA9IExMSVNUX0hFQURfSU5JVChyY3Vfc2hlYXZlcyksXFxuIFxcdC53b3JrID0gSVJRX1dPUktfSU5JVChkZWZlcnJlZF9wZXJjcHVfd29ya19mbiksXFxuQEAgLTYzNjMsNiArNjM2NywyMSBAQCBzdGF0aWMgdm9pZCBmcmVlX3RvX3Bjc19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkXFxuK19fZnJlZV9sYXJnZV9rbWFsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBvcmRlciA9IGNvbXBvdW5kX29yZGVyKHBhZ2UpO1xcbitcXG4rXFx0bW9kX2xydXZlY19wYWdlX3N0YXRlKHBhZ2UsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CLFxcbitcXHRcXHRcXHQgICAgICAtKFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcikpO1xcbitcXHRfX0NsZWFyUGFnZUxhcmdlS21hbGxvYyhwYWdlKTtcXG4rXFxuK1xcdGlmIChmcmVlX2ZsYWdzIFxcdTAwMjYgU0xBQl9GUkVFX05PTE9DSylcXG4rXFx0XFx0ZnJlZV9mcm96ZW5fcGFnZXNfbm9sb2NrKHBhZ2UsIG9yZGVyKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRmcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlcik7XFxuK31cXG4rXFxuIC8qXFxuICAqIEluIFBSRUVNUFRfUlQgaXJxX3dvcmsgcnVucyBpbiBwZXItY3B1IGt0aHJlYWQsIHNvIGl0J3Mgc2FmZVxcbiAgKiB0byB0YWtlIHNsZWVwaW5nIHNwaW5fbG9ja3MgZnJvbSBfX3NsYWJfZnJlZSgpLlxcbkBAIC02MzcxLDE2ICs2MzkwLDEyIEBAIHN0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcXG4gc3RhdGljIHZvaWQgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3O1xcbi1cXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqb2JqcywgKm9ianNfYnlfcmN1LCAqcmN1X3NoZWF2ZXM7XFxuIFxcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsICpwb3MsICp0O1xcbiBcXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsICpuZXh0O1xcbiBcXG4gXFx0ZHB3ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yaywgd29yayk7XFxuLVxcdHJjdV9zaGVhdmVzID0gXFx1MDAyNmRwdy1cXHUwMDNlcmN1X3NoZWF2ZXM7XFxuLVxcdG9ianMgPSBcXHUwMDI2ZHB3LVxcdTAwM2VvYmplY3RzO1xcbi1cXHRvYmpzX2J5X3JjdSA9IFxcdTAwMjZkcHctXFx1MDAzZW9iamVjdHNfYnlfcmN1O1xcbiBcXG4tXFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChvYmpzKTtcXG4rXFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2ZHB3LVxcdTAwM2VvYmplY3RzKTtcXG4gXFx0bGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHQsIGxsbm9kZSkge1xcbiBcXHRcXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcXG4gXFx0XFx0c3RydWN0IHNsYWIgKnNsYWI7XFxuQEAgLTYzOTIsNiArNjQwNyw4IEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcXG4gXFx0XFx0LyogUG9pbnQgJ3gnIGJhY2sgdG8gdGhlIGJlZ2lubmluZyBvZiBhbGxvY2F0ZWQgb2JqZWN0ICovXFxuIFxcdFxcdHggLT0gcy1cXHUwMDNlb2Zmc2V0O1xcbiBcXG4rXFx0XFx0a21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoeCwgcy1cXHUwMDNlZmxhZ3MpO1xcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogV2UgdXNlZCBmcmVlcG9pbnRlciBpbiAneCcgdG8gbGluayAneCcgaW50byBkZi1cXHUwMDNlb2JqZWN0cy5cXG4gXFx0XFx0ICogQ2xlYXIgaXQgdG8gTlVMTCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZSBkZXRlY3Rpb25cXG5AQCAtNjQwMyw3ICs2NDIwLDMwIEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcXG4gXFx0XFx0c3RhdChzLCBGUkVFX1NMT1dQQVRIKTtcXG4gXFx0fVxcbiBcXG4tXFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChvYmpzX2J5X3JjdSk7XFxuK1xcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNmRwdy1cXHUwMDNlb2JqZWN0c19rZmVuY2UpO1xcbitcXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XFxuK1xcdFxcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xcbitcXHRcXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcXG4rXFx0XFx0dm9pZCAqb2JqID0ga2ZlbmNlX2xsbm9kZV90b19vYmoocG9zKTtcXG4rXFxuK1xcdFxcdHNsYWIgPSB2aXJ0X3RvX3NsYWIob2JqKTtcXG4rXFx0XFx0cyA9IHNsYWItXFx1MDAzZXNsYWJfY2FjaGU7XFxuK1xcbitcXHRcXHRrbWVtbGVha19mcmVlX3JlY3Vyc2l2ZShvYmosIHMtXFx1MDAzZWZsYWdzKTtcXG4rXFxuK1xcdFxcdF9fa2ZlbmNlX2ZyZWUob2JqKTtcXG4rXFx0fVxcbitcXG4rXFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2ZHB3LVxcdTAwM2VvYmplY3RzX2xhcmdlX2ttYWxsb2MpO1xcbitcXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XFxuK1xcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKHBvcyk7XFxuK1xcbitcXHRcXHRrbWVtbGVha19mcmVlKHBvcyk7XFxuK1xcbitcXHRcXHRfX2ZyZWVfbGFyZ2Vfa21hbGxvY19wYWdlKHBhZ2UsIFNMQUJfRlJFRV9ERUZBVUxUKTtcXG4rXFx0fVxcbitcXG4rXFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2ZHB3LVxcdTAwM2VvYmplY3RzX2J5X3JjdSk7XFxuIFxcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHtcXG4gXFx0XFx0dm9pZCAqaGVhZCA9IHBvcztcXG4gXFx0XFx0dm9pZCAqb2JqcCA9IGt2bWFsbG9jX29ial9zdGFydF9hZGRyKGhlYWQpO1xcbkBAIC02NDExLDIxICs2NDUxLDYwIEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcXG4gXFx0XFx0a3ZmcmVlX2NhbGxfcmN1KGhlYWQsIG9ianApO1xcbiBcXHR9XFxuIFxcbi1cXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKHJjdV9zaGVhdmVzKTtcXG4rXFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2ZHB3LVxcdTAwM2VyY3Vfc2hlYXZlcyk7XFxuIFxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2hlYWYsIG5leHQsIGxsbm9kZSwgbGxub2RlKVxcbiBcXHRcXHRjYWxsX3JjdShcXHUwMDI2c2hlYWYtXFx1MDAzZXJjdV9oZWFkLCByY3VfZnJlZV9zaGVhZik7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGRlZmVyX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKmhlYWQpXFxuK3N0YXRpYyB2b2lkIGRlZmVyX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcXG4ge1xcbiBcXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFBsYWNlIHRoZSBsbGlzdCBub2RlIHdoZXJlIHRoZSBmcmVlcG9pbnRlciB3b3VsZCBiZSBpZiB3ZSBmcmVlZCB0aGVcXG4rXFx0ICogb2JqZWN0IGltbWVkaWF0ZWx5LiBUaGF0IG1lYW5zIHdlIGNhbiB3cml0ZSB0aGVyZSBzYWZlbHksIG9ubHkgbmVlZFxcbitcXHQgKiB0byByZW1vdmUga2FzYW4gdGFnIGZpcnN0LlxcbitcXHQgKi9cXG4rXFx0bGxub2RlID0ga2FzYW5fcmVzZXRfdGFnKG9iaikgKyBzLVxcdTAwM2VvZmZzZXQ7XFxuIFxcbiBcXHRndWFyZChwcmVlbXB0KSgpO1xcbiBcXG4tXFx0aGVhZCA9IGthc2FuX3Jlc2V0X3RhZyhoZWFkKTtcXG4rXFx0ZHB3ID0gdGhpc19jcHVfcHRyKFxcdTAwMjZkZWZlcnJlZF9wZXJjcHVfd29yayk7XFxuK1xcdGlmIChsbGlzdF9hZGQobGxub2RlLCBcXHUwMDI2ZHB3LVxcdTAwM2VvYmplY3RzKSlcXG4rXFx0XFx0aXJxX3dvcmtfcXVldWUoXFx1MDAyNmRwdy1cXHUwMDNld29yayk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRlZmVyX2ZyZWVfa2ZlbmNlKHZvaWQgKm9iailcXG4re1xcbitcXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcXG4rXFxuK1xcdC8qIGthc2FuX3Jlc2V0X3RhZygpIGlzIG5vdCBuZWNlc3NhcnksIGtmZW5jZSBvYmplY3RzIGFyZSBub3QgdGFnZ2VkICovXFxuK1xcdGxsbm9kZSA9IGtmZW5jZV9vYmpfdG9fbGxub2RlKG9iaik7XFxuK1xcbitcXHRndWFyZChwcmVlbXB0KSgpO1xcbitcXG4rXFx0ZHB3ID0gdGhpc19jcHVfcHRyKFxcdTAwMjZkZWZlcnJlZF9wZXJjcHVfd29yayk7XFxuK1xcdGlmIChsbGlzdF9hZGQobGxub2RlLCBcXHUwMDI2ZHB3LVxcdTAwM2VvYmplY3RzX2tmZW5jZSkpXFxuK1xcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZkcHctXFx1MDAzZXdvcmspO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2Modm9pZCAqb2JqKVxcbit7XFxuK1xcdHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3O1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogd2UgY2FuIHNpbXBseSB1c2UgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxhcmdlIGttYWxsb2Mgb2JqZWN0XFxuK1xcdCAqIGZvciB0aGUgbGxub2RlLCBhcyB0aGVyZSdzIG5vIGN0b3Igb3IgVFlQRVNBRkVfQllfUkNVXFxuK1xcdCAqL1xcbitcXHRsbG5vZGUgPSBrYXNhbl9yZXNldF90YWcob2JqKTtcXG4rXFxuK1xcdGd1YXJkKHByZWVtcHQpKCk7XFxuIFxcbiBcXHRkcHcgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNmRlZmVycmVkX3BlcmNwdV93b3JrKTtcXG4tXFx0aWYgKGxsaXN0X2FkZChoZWFkICsgcy1cXHUwMDNlb2Zmc2V0LCBcXHUwMDI2ZHB3LVxcdTAwM2VvYmplY3RzKSlcXG4rXFx0aWYgKGxsaXN0X2FkZChsbG5vZGUsIFxcdTAwMjZkcHctXFx1MDAzZW9iamVjdHNfbGFyZ2Vfa21hbGxvYykpXFxuIFxcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZkcHctXFx1MDAzZXdvcmspO1xcbiB9XFxuIFxcbkBAIC02Njc3LDkgKzY3NTYsMTEgQEAgc2l6ZV90IGtzaXplKGNvbnN0IHZvaWQgKm9ianApXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChrc2l6ZSk7XFxuIFxcbi1zdGF0aWMgdm9pZCBmcmVlX2xhcmdlX2ttYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKm9iamVjdClcXG4rc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QsXFxuK1xcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihwYWdlKTtcXG4rXFx0Ym9vbCBub2xvY2sgPSBmcmVlX2ZsYWdzIFxcdTAwMjYgU0xBQl9GUkVFX05PTE9DSztcXG4gXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoIVBhZ2VMYXJnZUttYWxsb2MocGFnZSkpKSB7XFxuIFxcdFxcdGR1bXBfcGFnZShwYWdlLCBcXFwiTm90IGEga21hbGxvYyBhbGxvY2F0aW9uXFxcIik7XFxuQEAgLTY2ODksMTQgKzY3NzAsMTYgQEAgc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpXFxuIFxcdGlmIChXQVJOX09OX09OQ0Uob3JkZXIgPT0gMCkpXFxuIFxcdFxcdHByX3dhcm5fb25jZShcXFwib2JqZWN0IHBvaW50ZXI6IDB4JXBcXFxcblxcXCIsIG9iamVjdCk7XFxuIFxcbi1cXHRrbWVtbGVha19mcmVlKG9iamVjdCk7XFxuK1xcdGlmICghbm9sb2NrKVxcbitcXHRcXHRrbWVtbGVha19mcmVlKG9iamVjdCk7XFxuK1xcbiBcXHRrYXNhbl9rZnJlZV9sYXJnZShvYmplY3QpO1xcbiBcXHRrbXNhbl9rZnJlZV9sYXJnZShvYmplY3QpO1xcbiBcXG4tXFx0bW9kX2xydXZlY19wYWdlX3N0YXRlKHBhZ2UsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CLFxcbi1cXHRcXHRcXHQgICAgICAtKFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcikpO1xcbi1cXHRfX0NsZWFyUGFnZUxhcmdlS21hbGxvYyhwYWdlKTtcXG4tXFx0ZnJlZV9mcm96ZW5fcGFnZXMocGFnZSwgb3JkZXIpO1xcbitcXHRpZiAodW5saWtlbHkobm9sb2NrIFxcdTAwMjZcXHUwMDI2IGttZW1sZWFrX21heV9uZWVkX2ZyZWUob2JqZWN0KSkpXFxuK1xcdFxcdGRlZmVyX2ZyZWVfbGFyZ2Vfa21hbGxvYyhvYmplY3QpO1xcbitcXHRlbHNlXFxuK1xcdFxcdF9fZnJlZV9sYXJnZV9rbWFsbG9jX3BhZ2UocGFnZSwgZnJlZV9mbGFncyk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTY3MTgsNyArNjgwMSw3IEBAIHZvaWQga3ZmcmVlX3JjdV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuIFxcdFxcdGlmIChzbGFiKVxcbiBcXHRcXHRcXHRzbGFiX2ZyZWUoc2xhYi1cXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgb2JqLCBfUkVUX0lQXyk7XFxuIFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iaik7XFxuK1xcdFxcdFxcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmosIFNMQUJfRlJFRV9ERUZBVUxUKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC02NzQ0LDcgKzY4MjcsNyBAQCB2b2lkIGtmcmVlKGNvbnN0IHZvaWQgKm9iamVjdClcXG4gXFx0c2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcXG4gXFx0aWYgKCFzbGFiKSB7XFxuIFxcdFxcdC8qIGttYWxsb2Nfbm9sb2NrKCkgZG9lc24ndCBzdXBwb3J0IGxhcmdlIGttYWxsb2MgKi9cXG4tXFx0XFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsICh2b2lkICopb2JqZWN0KTtcXG4rXFx0XFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsICh2b2lkICopb2JqZWN0LCBTTEFCX0ZSRUVfREVGQVVMVCk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG5AQCAtNjc1NSwxNSArNjgzOCwxNCBAQCBFWFBPUlRfU1lNQk9MKGtmcmVlKTtcXG4gXFxuIC8qXFxuICAqIENhbiBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyByYXdfc3BpbmxvY2tfdCBvciBmcm9tIElSUSBhbmQgTk1JLFxcbi0gKiBidXQgT05MWSBmb3Igb2JqZWN0cyBhbGxvY2F0ZWQgYnkga21hbGxvY19ub2xvY2soKS5cXG4tICogRGVidWcgY2hlY2tzIChsaWtlIGttZW1sZWFrIGFuZCBrZmVuY2UpIHdlcmUgc2tpcHBlZCBvbiBhbGxvY2F0aW9uLFxcbi0gKiBoZW5jZVxcbi0gKiBvYmogPSBrbWFsbG9jKCk7IGtmcmVlX25vbG9jayhvYmopO1xcbi0gKiB3aWxsIG1pc3Mga21lbWxlYWsva2ZlbmNlIGJvb2sga2VlcGluZyBhbmQgd2lsbCBjYXVzZSBmYWxzZSBwb3NpdGl2ZXMuXFxuLSAqIGxhcmdlX2ttYWxsb2MgaXMgbm90IHN1cHBvcnRlZCBlaXRoZXIuXFxuKyAqIGJ1dCBtYXkgZGVmZXIgZnJlZWluZyB0byBpcnFfd29yaygpIGluIHNvbWUgY2FzZXMuXFxuKyAqXFxuKyAqIEludGVuZGVkIG1haW5seSBmb3Igb2JqZWN0cyBhbGxvY2F0ZWQgZnJvbSBrbWFsbG9jX25vbG9jaygpLCBidXQgY2FuIGhhbmRsZVxcbisgKiBhbHNvIGttZW1fY2FjaGVfYWxsb2MoKSBhbmQga21hbGxvYygpIG9iamVjdHMsIGluY2x1ZGluZyBsYXJnZV9rbWFsbG9jLlxcbiAgKi9cXG4gdm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxcbiB7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcXG4gXFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XFxuIFxcdHZvaWQgKnggPSAodm9pZCAqKW9iamVjdDtcXG5AQCAtNjc3MSw5ICs2ODUzLDEwIEBAIHZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcXG4gXFx0aWYgKHVubGlrZWx5KFpFUk9fT1JfTlVMTF9QVFIob2JqZWN0KSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHNsYWIgPSB2aXJ0X3RvX3NsYWIob2JqZWN0KTtcXG4rXFx0cGFnZSA9IHZpcnRfdG9fcGFnZShvYmplY3QpO1xcbitcXHRzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xcbiBcXHRpZiAodW5saWtlbHkoIXNsYWIpKSB7XFxuLVxcdFxcdFdBUk5fT05DRSgxLCBcXFwibGFyZ2Vfa21hbGxvYyBpcyBub3Qgc3VwcG9ydGVkIGJ5IGtmcmVlX25vbG9jaygpXFxcIik7XFxuK1xcdFxcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCAodm9pZCAqKW9iamVjdCwgU0xBQl9GUkVFX05PTE9DSyk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG5AQCAtNjc5MSw2ICs2ODc0LDEyIEBAIHZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcXG4gXFx0ICogc2luY2UgdGhleSB0YWtlIHNwaW5sb2NrcyBvciBub3Qgc2FmZSBmcm9tIGFueSBjb250ZXh0LlxcbiBcXHQgKi9cXG4gXFx0a21zYW5fc2xhYl9mcmVlKHMsIHgpO1xcbitcXG4rXFx0aWYgKGlzX2tmZW5jZV9hZGRyZXNzKHgpKSB7XFxuK1xcdFxcdGRlZmVyX2ZyZWVfa2ZlbmNlKHgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuIFxcdCAqIElmIEtBU0FOIGZpbmRzIGEga2VybmVsIGJ1ZyBpdCB3aWxsIGRvIGthc2FuX3JlcG9ydF9pbnZhbGlkX2ZyZWUoKVxcbiBcXHQgKiB3aGljaCB3aWxsIGNhbGwgcmF3X3NwaW5fbG9ja19pcnFzYXZlKCkgd2hpY2ggaXMgdGVjaG5pY2FsbHlcXG5AQCAtNjgwOSw5ICs2ODk4LDIzIEBAIHZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcXG4gXFx0ICovXFxuIFxcdGthc2FuX3NsYWJfZnJlZShzLCB4LCBmYWxzZSwgZmFsc2UsIC8qIHNraXAgcXVhcmFudGluZSAqL3RydWUpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogd2l0aCBrZnJlZSgpIHRoZSBrbWVtbGVhayBoYW5kbGluZyBoYXBwZW5zIG11Y2ggc29vbmVyLCBidXQgZm9yXFxuK1xcdCAqIGRlZmVyaW5nIHdlIG5lZWQgdG8gd3JpdGUgbGxub2RlIHRvIHRoZSBvYmplY3QncyBmcmVlcG9pbnRlciBzb1xcbitcXHQgKiB3ZSBzaG91bGQgaGF2ZSBpdCBpbiB0aGUgc3RhdGUgd2hlbiBpdCdzIG5vIGxvbmdlciB0cmVhdGVkIGFzXFxuK1xcdCAqIGFsbG9jYXRlZCBieSBrYXNhbiBldGMuXFxuK1xcdCAqXFxuK1xcdCAqIGRlZmVyX2ZyZWUgd2lsbCBhbHNvIHJlc2V0IHRoZSBwb2ludGVyIHRhZywgYnV0IGl0J3Mgb2sgdG8gZG8gYVxcbitcXHQgKiBkZWZlcnJlZCBrbWVtbGVha19mcmVlKCkgdXNpbmcgdGhlIHVudGFnZ2VkIHBvaW50ZXIsIGJlY2F1c2VcXG4rXFx0ICogX19sb29rdXBfb2JqZWN0KCkgcmVzZXRzIHRoZSB0YWcgYW55d2F5XFxuK1xcdCAqL1xcbitcXHRpZiAodW5saWtlbHkoa21lbWxlYWtfbWF5X25lZWRfZnJlZV9yZWN1cnNpdmUoeCwgcy1cXHUwMDNlZmxhZ3MpKSlcXG4rXFx0XFx0Z290byBkZWZlcjtcXG4rXFxuIFxcdGlmIChsaWtlbHkoY2FuX2ZyZWVfdG9fcGNzKHNsYWIpKSBcXHUwMDI2XFx1MDAyNiBsaWtlbHkoZnJlZV90b19wY3MocywgeCwgZmFsc2UpKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rZGVmZXI6XFxuIFxcdC8qXFxuIFxcdCAqIF9fc2xhYl9mcmVlKCkgY2FuIGxvY2tsZXNzbHkgY21weGNoZzE2IGludG8gYSBzbGFiLCBidXQgdGhlbiBpdCBtaWdodFxcbiBcXHQgKiBuZWVkIHRvIHRha2Ugc3Bpbl9sb2NrIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXFxuQEAgLTcxMTQsNyArNzIxNyw3IEBAIGludCBidWlsZF9kZXRhY2hlZF9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsXFxuIFxcdGlmICghcykge1xcbiBcXHRcXHQvKiBIYW5kbGUga2FsbG9jJ2VkIG9iamVjdHMgKi9cXG4gXFx0XFx0aWYgKCFzbGFiKSB7XFxuLVxcdFxcdFxcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmplY3QpO1xcbitcXHRcXHRcXHRmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgb2JqZWN0LCBTTEFCX0ZSRUVfREVGQVVMVCk7XFxuIFxcdFxcdFxcdGRmLVxcdTAwM2VzbGFiID0gTlVMTDtcXG4gXFx0XFx0XFx0cmV0dXJuIHNpemU7XFxuIFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTM6NDcuODkxMDM2MDIyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTExODk3MDMwODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX0tNRU1MRUFLXCIsXG4gICAgXCJLRkVOQ0VcIixcbiAgICBcIlBSRUVNUFRfUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrZnJlZV9ub2xvY2tcIixcbiAgICBcInNldF9jcHVzX2FsbG93ZWRfZm9yY2VcIixcbiAgICBcImttZW1sZWFrX21heV9uZWVkX2ZyZWVcIixcbiAgICBcImtmZW5jZV9vYmpfdG9fbGxub2RlXCIsXG4gICAgXCJrZmVuY2VfbGxub2RlX3RvX29ialwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBrZnJlZV9ub2xvY2soKWAgaW4gYG1tL3NsdWIuY2AgdG8gc3VwcG9ydCBmcmVlaW5nIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgLCBga21lbV9jYWNoZV9hbGxvYygpYCwgYW5kIGxhcmdlIGttYWxsb2NzLCBhcyB3ZWxsIGFzIEtGRU5DRSBvYmplY3RzLiBJdCBkZWZlcnMgZnJlZWluZyB0byBhbiBgaXJxX3dvcmtgIGlmIG5lY2Vzc2FyeSAoZS5nLiwgZm9yIGttZW1sZWFrIG9yIEtGRU5DRSkuIEl0IGFsc28gbW9kaWZpZXMgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKWAgaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgIHRvIHVzZSBga2ZyZWVfbm9sb2NrKClgIGluc3RlYWQgb2YgYGtmcmVlX3JjdSgpYC4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxlciBjaGFuZ2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTViODZiZGM1OTg0YjZiMGJhMzFkZTA3OTUwMWRlNmIyMTYxOTg3NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTY6NTM6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tmZW5jZS5oIGIvaW5jbHVkZS9saW51eC9rZmVuY2UuaFxuaW5kZXggZTU4MjJmNmU3ZjI3OS4uMDA3MjFjODUyNThkYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva2ZlbmNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgva2ZlbmNlLmhcbkBAIC0xODgsNiArMTg4LDkgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX211c3RfY2hlY2sgYm9vbCBrZmVuY2VfZnJlZSh2b2lkICphZGRyKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKTtcbit2b2lkICprZmVuY2VfbGxub2RlX3RvX29iaihzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlKTtcbitcbiAvKipcbiAgKiBrZmVuY2VfaGFuZGxlX3BhZ2VfZmF1bHQoKSAtIHBlcmZvcm0gcGFnZSBmYXVsdCBoYW5kbGluZyBmb3IgS0ZFTkNFIHBhZ2VzXG4gICogQGFkZHI6IGZhdWx0aW5nIGFkZHJlc3NcbkBAIC0yMzUsNiArMjM4LDggQEAgc3RhdGljIGlubGluZSBzaXplX3Qga2ZlbmNlX2tzaXplKGNvbnN0IHZvaWQgKmFkZHIpIHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgKmtmZW5jZV9vYmplY3Rfc3RhcnQoY29uc3Qgdm9pZCAqYWRkcikgeyByZXR1cm4gTlVMTDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpIHsgfVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sga2ZlbmNlX2ZyZWUodm9pZCAqYWRkcikgeyByZXR1cm4gZmFsc2U7IH1cbitzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKSB7IHJldHVybiBOVUxMOyB9XG4rc3RhdGljIGlubGluZSB2b2lkICprZmVuY2VfbGxub2RlX3RvX29iaihzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlKSB7IHJldHVybiBOVUxMOyB9XG4gc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBrZmVuY2VfaGFuZGxlX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGlzX3dyaXRlLFxuIFx0XHRcdFx0XHRcdFx0IHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmggYi9pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmhcbmluZGV4IGZiZDQyNGIyYWJiMTQuLjUyZjc1ZjEwYTljZTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmhcbisrKyBiL2luY2x1ZGUvbGludXgva21lbWxlYWsuaFxuQEAgLTIyLDYgKzIyLDcgQEAgZXh0ZXJuIHZvaWQga21lbWxlYWtfYWxsb2NfcGVyY3B1KGNvbnN0IHZvaWQgX19wZXJjcHUgKnB0ciwgc2l6ZV90IHNpemUsXG4gZXh0ZXJuIHZvaWQga21lbWxlYWtfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBzaXplX3Qgc2l6ZSxcbiBcdFx0XHQgICAgIGdmcF90IGdmcCkgX19yZWY7XG4gZXh0ZXJuIHZvaWQga21lbWxlYWtfZnJlZShjb25zdCB2b2lkICpwdHIpIF9fcmVmO1xuK2Jvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpIF9fcmVmO1xuIGV4dGVybiB2b2lkIGttZW1sZWFrX2ZyZWVfcGFydChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplKSBfX3JlZjtcbiBleHRlcm4gdm9pZCBrbWVtbGVha19mcmVlX3BlcmNwdShjb25zdCB2b2lkIF9fcGVyY3B1ICpwdHIpIF9fcmVmO1xuIGV4dGVybiB2b2lkIGttZW1sZWFrX3VwZGF0ZV90cmFjZShjb25zdCB2b2lkICpwdHIpIF9fcmVmO1xuQEAgLTUwLDYgKzUxLDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncylcbiBcdFx0a21lbWxlYWtfZnJlZShwdHIpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXG4re1xuK1x0aWYgKCEoZmxhZ3MgXHUwMDI2IFNMQUJfTk9MRUFLVFJBQ0UpKVxuK1x0XHRyZXR1cm4ga21lbWxlYWtfbWF5X25lZWRfZnJlZShwdHIpO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZXJhc2Uodm9pZCAqKnB0cilcbiB7XG4gXHQqcHRyID0gTlVMTDtcbkBAIC04Niw2ICs5NSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9wYXJ0KGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXG4gc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKGNvbnN0IHZvaWQgKnB0ciwgc2xhYl9mbGFnc190IGZsYWdzKVxuIHtcbiB9XG4rc3RhdGljIGlubGluZSBib29sIGttZW1sZWFrX21heV9uZWVkX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rc3RhdGljIGlubGluZSBib29sIGttZW1sZWFrX21heV9uZWVkX2ZyZWVfcmVjdXJzaXZlKGNvbnN0IHZvaWQgKnB0ciwgc2xhYl9mbGFnc190IGZsYWdzKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4gc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2ZyZWVfcGVyY3B1KGNvbnN0IHZvaWQgX19wZXJjcHUgKnB0cilcbiB7XG4gfVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXG5pbmRleCA5NjIyNjcwN2MyZjYxLi5kMjkyOWU0ZTIzZjEzIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuY1xuKysrIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuQEAgLTI4MDcsMjAgKzI4MDcsMTUgQEAgdm9pZCBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld19tYXNcbiBcdFx0LnVzZXJfbWFzayA9IE5VTEwsXG4gXHRcdC5mbGFncyAgICAgPSBTQ0FfVVNFUixcdC8qIGNsZWFyIHRoZSB1c2VyIHJlcXVlc3RlZCBtYXNrICovXG4gXHR9O1xuLVx0dW5pb24gY3B1bWFza19yY3VoZWFkIHtcbi1cdFx0Y3B1bWFza190IGNwdW1hc2s7XG4tXHRcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4tXHR9O1xuIFxuIFx0c2NvcGVkX2d1YXJkIChfX3Rhc2tfcnFfbG9jaywgcClcbiBcdFx0ZG9fc2V0X2NwdXNfYWxsb3dlZChwLCBcdTAwMjZhYyk7XG4gXG4gXHQvKlxuIFx0ICogQmVjYXVzZSB0aGlzIGlzIGNhbGxlZCB3aXRoIHAtXHUwMDNlcGlfbG9jayBoZWxkLCBpdCBpcyBub3QgcG9zc2libGVcbi1cdCAqIHRvIHVzZSBrZnJlZSgpIGhlcmUgKHdoZW4gUFJFRU1QVF9SVD15KSwgdGhlcmVmb3JlIHB1bnQgdG8gdXNpbmdcbi1cdCAqIGtmcmVlX3JjdSgpLlxuK1x0ICogdG8gdXNlIGtmcmVlKCkgaGVyZSAod2hlbiBQUkVFTVBUX1JUPXkpLCB0aHVzIHVzZSBrZnJlZV9ub2xvY2soKVxuIFx0ICovXG4tXHRrZnJlZV9yY3UoKHVuaW9uIGNwdW1hc2tfcmN1aGVhZCAqKWFjLnVzZXJfbWFzaywgcmN1KTtcbitcdGtmcmVlX25vbG9jayhhYy51c2VyX21hc2spO1xuIH1cbiBcbiBpbnQgZHVwX3VzZXJfY3B1c19wdHIoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcbmluZGV4IDU2YWNmNTAyYmEyNjAuLjZhOGQwNTc4ZTk2MzMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvc2NoZWQuaFxuKysrIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcbkBAIC0yODg2LDEyICsyODg2LDcgQEAgc3RhdGljIGlubGluZSBib29sIHRhc2tfYWxsb3dlZF9vbl9jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY3B1KVxuIFxuIHN0YXRpYyBpbmxpbmUgY3B1bWFza190ICphbGxvY191c2VyX2NwdXNfcHRyKGludCBub2RlKVxuIHtcbi1cdC8qXG4tXHQgKiBTZWUgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpIGFib3ZlIGZvciB0aGUgcmN1X2hlYWQgdXNhZ2UuXG4tXHQgKi9cbi1cdGludCBzaXplID0gbWF4X3QoaW50LCBjcHVtYXNrX3NpemUoKSwgc2l6ZW9mKHN0cnVjdCByY3VfaGVhZCkpO1xuLVxuLVx0cmV0dXJuIGttYWxsb2Nfbm9kZShzaXplLCBHRlBfS0VSTkVMLCBub2RlKTtcbitcdHJldHVybiBrbWFsbG9jX25vZGUoY3B1bWFza19zaXplKCksIEdGUF9LRVJORUwsIG5vZGUpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X3B1c2hfdGFzayhzdHJ1Y3QgcnEgKnJxKVxuZGlmZiAtLWdpdCBhL21tL2tmZW5jZS9jb3JlLmMgYi9tbS9rZmVuY2UvY29yZS5jXG5pbmRleCA2NTc3YmQ3Njk1NGViLi40MjUxOWQyNDY4N2ZmIDEwMDY0NFxuLS0tIGEvbW0va2ZlbmNlL2NvcmUuY1xuKysrIGIvbW0va2ZlbmNlL2NvcmUuY1xuQEAgLTEyNzEsNiArMTI3MSwyMCBAQCB2b2lkIF9fa2ZlbmNlX2ZyZWUodm9pZCAqYWRkcilcbiBcdH1cbiB9XG4gXG4rc3RydWN0IGxsaXN0X25vZGUgKmtmZW5jZV9vYmpfdG9fbGxub2RlKHZvaWQgKmFkZHIpXG4re1xuK1x0c3RydWN0IGtmZW5jZV9tZXRhZGF0YSAqbWV0YSA9IGFkZHJfdG9fbWV0YWRhdGEoKHVuc2lnbmVkIGxvbmcpYWRkcik7XG4rXG4rXHRyZXR1cm4gXHUwMDI2bWV0YS1cdTAwM2VsbG5vZGU7XG4rfVxuK1xuK3ZvaWQgKmtmZW5jZV9sbG5vZGVfdG9fb2JqKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpXG4re1xuK1x0c3RydWN0IGtmZW5jZV9tZXRhZGF0YSAqbWV0YSA9IGNvbnRhaW5lcl9vZihsbG5vZGUsIHN0cnVjdCBrZmVuY2VfbWV0YWRhdGEsIGxsbm9kZSk7XG4rXG4rXHRyZXR1cm4gKHZvaWQgKiltZXRhLVx1MDAzZWFkZHI7XG4rfVxuK1xuIGJvb2wga2ZlbmNlX2hhbmRsZV9wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBpc193cml0ZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4ge1xuIFx0Y29uc3QgaW50IHBhZ2VfaW5kZXggPSAoYWRkciAtICh1bnNpZ25lZCBsb25nKV9fa2ZlbmNlX3Bvb2wpIC8gUEFHRV9TSVpFO1xuZGlmZiAtLWdpdCBhL21tL2tmZW5jZS9rZmVuY2UuaCBiL21tL2tmZW5jZS9rZmVuY2UuaFxuaW5kZXggMWY2MThmOWIwZDEyZC4uMGZjYTFkYzJjNzk0MSAxMDA2NDRcbi0tLSBhL21tL2tmZW5jZS9rZmVuY2UuaFxuKysrIGIvbW0va2ZlbmNlL2tmZW5jZS5oXG5AQCAtNTgsNyArNTgsMTAgQEAgc3RydWN0IGtmZW5jZV90cmFjayB7XG4gLyogS0ZFTkNFIG1ldGFkYXRhIHBlciBndWFyZGVkIGFsbG9jYXRpb24uICovXG4gc3RydWN0IGtmZW5jZV9tZXRhZGF0YSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3QgX19ndWFyZGVkX2J5KFx1MDAyNmtmZW5jZV9mcmVlbGlzdF9sb2NrKTtcdC8qIEZyZWVsaXN0IG5vZGUuICovXG4tXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7XHQvKiBGb3IgZGVsYXllZCBmcmVlaW5nLiAqL1xuK1x0dW5pb24ge1xuK1x0XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7XHQvKiBGb3IgZGVsYXllZCBmcmVlaW5nLiAqL1xuK1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSBsbG5vZGU7XHQvKiBGb3Iga2ZyZWVfbm9sb2NrKCkuICovXG4rXHR9O1xuIFxuIFx0LypcbiBcdCAqIExvY2sgcHJvdGVjdGluZyBiZWxvdyBkYXRhOyB0byBlbnN1cmUgY29uc2lzdGVuY3kgb2YgdGhlIGJlbG93IGRhdGEsXG5kaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmNcbmluZGV4IDdjN2JhMTdjZTdhZjAuLmUzNTYwY2U4MjYzMjYgMTAwNjQ0XG4tLS0gYS9tbS9rbWVtbGVhay5jXG4rKysgYi9tbS9rbWVtbGVhay5jXG5AQCAtMTE2OCw2ICsxMTY4LDQ4IEBAIHZvaWQgX19yZWYga21lbWxlYWtfZnJlZShjb25zdCB2b2lkICpwdHIpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGttZW1sZWFrX2ZyZWUpO1xuIFxuKy8qKlxuKyAqIGttZW1sZWFrX21heV9uZWVkX2ZyZWUgLSBjaGVjayBpZiBvYmplY3QgaXMgcmVnaXN0ZXJlZFxuKyAqIEBwdHI6XHRwb2ludGVyIHRvIGJlZ2lubmluZyBvZiB0aGUgb2JqZWN0XG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBrZXJuZWwgYWxsb2NhdG9yIHdoZW4gYW4gb2JqZWN0IHNob3VsZCBiZVxuKyAqIGZyZWVkIGJ1dCB0aGUgY2FsbGVyIGNvbnRleHQgbWlnaHQgYmUgdW5zYWZlIHRvIHNwaW4gb24gdGhlIGludGVybmFsIGxvY2tzLlxuKyAqXG4rICogSXQgd2lsbCB0aGVyZWZvcmUgb25seSB1c2UgdHJ5bG9jayBhbmQgdGh1cyBtaWdodCByZXR1cm4gYSBmYWxzZSBwb3NpdGl2ZVxuKyAqIGlmIHRoZSB0cnlsb2NrIGZhaWxzIGFuZCB0aGUgc3RhdHVzIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuKyAqXG4rICogRm9yIG9iamVjdHMgdGhhdCAobWlnaHQpIG5lZWQgZnJlZSwgdGhlIGFsbG9jYXRvciBoYXMgdG8gZGVmZXIgdGhlIGFjdHVhbFxuKyAqIGZyZWVpbmcgdG8gYSBzYWZlIGNvbnRleHQuXG4rICpcbisgKiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IG1vc3Qgb2JqZWN0cyBmcmVlZCBmcm9tIHRoZSB1bnNhZmUgY29udGV4dCBhcmUgYWxzb1xuKyAqIGFsbG9jYXRlZCBpbiBzdWNoIGNvbnRleHQgYW5kIHRodXMgYXJlIG5vdCByZWdpc3RlcmVkIGluIGttZW1sZWFrLCBzbyBpdCdzXG4rICogdW5saWtlbHkgdGhlIGRlZmVyZWQgZnJlZWluZyB3aWxsIGJlIG5lY2Vzc2FyeSBqdXN0IGJlY2F1c2Uga21lbWxlYWsgaXNcbisgKiBlbmFibGVkLlxuKyAqL1xuK2Jvb2wgX19yZWYga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdDtcbitcbitcdHByX2RlYnVnKFwiJXMoMHglcHgpXFxuXCIsIF9fZnVuY19fLCBwdHIpO1xuK1xuK1x0aWYgKCFrbWVtbGVha19mcmVlX2VuYWJsZWQgfHwgIXB0ciB8fCBJU19FUlIocHRyKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogT24gVVAsIHJhd19zcGluX3RyeWxvY2soKSBhbHdheXMgc3VjY2VlZHMgZXZlbiB3aGVuIGl0IGlzIGxvY2tlZCAqL1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19TTVApIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAoIXJhd19zcGluX3RyeWxvY2tfaXJxc2F2ZShcdTAwMjZrbWVtbGVha19sb2NrLCBmbGFncykpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0b2JqZWN0ID0gX19sb29rdXBfb2JqZWN0KCh1bnNpZ25lZCBsb25nKXB0ciwgMCwgMCk7XG4rXG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZrbWVtbGVha19sb2NrLCBmbGFncyk7XG4rXG4rXHRyZXR1cm4gISFvYmplY3Q7XG4rfVxuK1xuIC8qKlxuICAqIGttZW1sZWFrX2ZyZWVfcGFydCAtIHBhcnRpYWxseSB1bnJlZ2lzdGVyIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIG9iamVjdFxuICAqIEBwdHI6XHRwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb3IgaW5zaWRlIHRoZSBvYmplY3QuIFRoaXMgYWxzb1xuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggYjlhZWIwMmE4ODBmMS4uM2JlOThmYWE5ZjBkZSAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuKysrIGIvbW0vc2x1Yi5jXG5AQCAtNDA1MCw2ICs0MDUwLDggQEAgc3RhdGljIHZvaWQgZmx1c2hfYWxsKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIFxuIHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayB7XG4gXHRzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzO1xuK1x0c3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0c19rZmVuY2U7XG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzX2xhcmdlX2ttYWxsb2M7XG4gXHRzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzX2J5X3JjdTtcbiBcdHN0cnVjdCBsbGlzdF9oZWFkIHJjdV9zaGVhdmVzO1xuIFx0c3RydWN0IGlycV93b3JrIHdvcms7XG5AQCAtNDA1OSw2ICs0MDYxLDggQEAgc3RhdGljIHZvaWQgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3b3JrKTtcbiBcbiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrLCBkZWZlcnJlZF9wZXJjcHVfd29yaykgPSB7XG4gXHQub2JqZWN0cyA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzKSxcbitcdC5vYmplY3RzX2tmZW5jZSA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzX2tmZW5jZSksXG4rXHQub2JqZWN0c19sYXJnZV9rbWFsbG9jID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHNfbGFyZ2Vfa21hbGxvYyksXG4gXHQub2JqZWN0c19ieV9yY3UgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0c19ieV9yY3UpLFxuIFx0LnJjdV9zaGVhdmVzID0gTExJU1RfSEVBRF9JTklUKHJjdV9zaGVhdmVzKSxcbiBcdC53b3JrID0gSVJRX1dPUktfSU5JVChkZWZlcnJlZF9wZXJjcHVfd29ya19mbiksXG5AQCAtNjM2Myw2ICs2MzY3LDIxIEBAIHN0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkXG4rX19mcmVlX2xhcmdlX2ttYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpXG4re1xuK1x0dW5zaWduZWQgaW50IG9yZGVyID0gY29tcG91bmRfb3JkZXIocGFnZSk7XG4rXG4rXHRtb2RfbHJ1dmVjX3BhZ2Vfc3RhdGUocGFnZSwgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0IsXG4rXHRcdFx0ICAgICAgLShQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKSk7XG4rXHRfX0NsZWFyUGFnZUxhcmdlS21hbGxvYyhwYWdlKTtcbitcbitcdGlmIChmcmVlX2ZsYWdzIFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLKVxuK1x0XHRmcmVlX2Zyb3plbl9wYWdlc19ub2xvY2socGFnZSwgb3JkZXIpO1xuK1x0ZWxzZVxuK1x0XHRmcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlcik7XG4rfVxuK1xuIC8qXG4gICogSW4gUFJFRU1QVF9SVCBpcnFfd29yayBydW5zIGluIHBlci1jcHUga3RocmVhZCwgc28gaXQncyBzYWZlXG4gICogdG8gdGFrZSBzbGVlcGluZyBzcGluX2xvY2tzIGZyb20gX19zbGFiX2ZyZWUoKS5cbkBAIC02MzcxLDE2ICs2MzkwLDEyIEBAIHN0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbiBzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspXG4ge1xuIFx0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XG4tXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqb2JqcywgKm9ianNfYnlfcmN1LCAqcmN1X3NoZWF2ZXM7XG4gXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCAqcG9zLCAqdDtcbiBcdHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZiwgKm5leHQ7XG4gXG4gXHRkcHcgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrLCB3b3JrKTtcbi1cdHJjdV9zaGVhdmVzID0gXHUwMDI2ZHB3LVx1MDAzZXJjdV9zaGVhdmVzO1xuLVx0b2JqcyA9IFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzO1xuLVx0b2Jqc19ieV9yY3UgPSBcdTAwMjZkcHctXHUwMDNlb2JqZWN0c19ieV9yY3U7XG4gXG4tXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKG9ianMpO1xuK1x0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZkcHctXHUwMDNlb2JqZWN0cyk7XG4gXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XG4gXHRcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuIFx0XHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbkBAIC02MzkyLDYgKzY0MDcsOCBAQCBzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspXG4gXHRcdC8qIFBvaW50ICd4JyBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgb2YgYWxsb2NhdGVkIG9iamVjdCAqL1xuIFx0XHR4IC09IHMtXHUwMDNlb2Zmc2V0O1xuIFxuK1x0XHRrbWVtbGVha19mcmVlX3JlY3Vyc2l2ZSh4LCBzLVx1MDAzZWZsYWdzKTtcbitcbiBcdFx0LypcbiBcdFx0ICogV2UgdXNlZCBmcmVlcG9pbnRlciBpbiAneCcgdG8gbGluayAneCcgaW50byBkZi1cdTAwM2VvYmplY3RzLlxuIFx0XHQgKiBDbGVhciBpdCB0byBOVUxMIHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlIGRldGVjdGlvblxuQEAgLTY0MDMsNyArNjQyMCwzMCBAQCBzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspXG4gXHRcdHN0YXQocywgRlJFRV9TTE9XUEFUSCk7XG4gXHR9XG4gXG4tXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKG9ianNfYnlfcmN1KTtcbitcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHNfa2ZlbmNlKTtcbitcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHtcbitcdFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XG4rXHRcdHN0cnVjdCBzbGFiICpzbGFiO1xuK1x0XHR2b2lkICpvYmogPSBrZmVuY2VfbGxub2RlX3RvX29iaihwb3MpO1xuK1xuK1x0XHRzbGFiID0gdmlydF90b19zbGFiKG9iaik7XG4rXHRcdHMgPSBzbGFiLVx1MDAzZXNsYWJfY2FjaGU7XG4rXG4rXHRcdGttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKG9iaiwgcy1cdTAwM2VmbGFncyk7XG4rXG4rXHRcdF9fa2ZlbmNlX2ZyZWUob2JqKTtcbitcdH1cbitcbitcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHNfbGFyZ2Vfa21hbGxvYyk7XG4rXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKHBvcyk7XG4rXG4rXHRcdGttZW1sZWFrX2ZyZWUocG9zKTtcbitcbitcdFx0X19mcmVlX2xhcmdlX2ttYWxsb2NfcGFnZShwYWdlLCBTTEFCX0ZSRUVfREVGQVVMVCk7XG4rXHR9XG4rXG4rXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzX2J5X3JjdSk7XG4gXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XG4gXHRcdHZvaWQgKmhlYWQgPSBwb3M7XG4gXHRcdHZvaWQgKm9ianAgPSBrdm1hbGxvY19vYmpfc3RhcnRfYWRkcihoZWFkKTtcbkBAIC02NDExLDIxICs2NDUxLDYwIEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcbiBcdFx0a3ZmcmVlX2NhbGxfcmN1KGhlYWQsIG9ianApO1xuIFx0fVxuIFxuLVx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChyY3Vfc2hlYXZlcyk7XG4rXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNmRwdy1cdTAwM2VyY3Vfc2hlYXZlcyk7XG4gXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNoZWFmLCBuZXh0LCBsbG5vZGUsIGxsbm9kZSlcbiBcdFx0Y2FsbF9yY3UoXHUwMDI2c2hlYWYtXHUwMDNlcmN1X2hlYWQsIHJjdV9mcmVlX3NoZWFmKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZGVmZXJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqaGVhZClcbitzdGF0aWMgdm9pZCBkZWZlcl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopXG4ge1xuIFx0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xuK1xuK1x0LypcbitcdCAqIFBsYWNlIHRoZSBsbGlzdCBub2RlIHdoZXJlIHRoZSBmcmVlcG9pbnRlciB3b3VsZCBiZSBpZiB3ZSBmcmVlZCB0aGVcbitcdCAqIG9iamVjdCBpbW1lZGlhdGVseS4gVGhhdCBtZWFucyB3ZSBjYW4gd3JpdGUgdGhlcmUgc2FmZWx5LCBvbmx5IG5lZWRcbitcdCAqIHRvIHJlbW92ZSBrYXNhbiB0YWcgZmlyc3QuXG4rXHQgKi9cbitcdGxsbm9kZSA9IGthc2FuX3Jlc2V0X3RhZyhvYmopICsgcy1cdTAwM2VvZmZzZXQ7XG4gXG4gXHRndWFyZChwcmVlbXB0KSgpO1xuIFxuLVx0aGVhZCA9IGthc2FuX3Jlc2V0X3RhZyhoZWFkKTtcbitcdGRwdyA9IHRoaXNfY3B1X3B0cihcdTAwMjZkZWZlcnJlZF9wZXJjcHVfd29yayk7XG4rXHRpZiAobGxpc3RfYWRkKGxsbm9kZSwgXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHMpKVxuK1x0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZkcHctXHUwMDNld29yayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRlZmVyX2ZyZWVfa2ZlbmNlKHZvaWQgKm9iailcbit7XG4rXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4rXG4rXHQvKiBrYXNhbl9yZXNldF90YWcoKSBpcyBub3QgbmVjZXNzYXJ5LCBrZmVuY2Ugb2JqZWN0cyBhcmUgbm90IHRhZ2dlZCAqL1xuK1x0bGxub2RlID0ga2ZlbmNlX29ial90b19sbG5vZGUob2JqKTtcbitcbitcdGd1YXJkKHByZWVtcHQpKCk7XG4rXG4rXHRkcHcgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xuK1x0aWYgKGxsaXN0X2FkZChsbG5vZGUsIFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzX2tmZW5jZSkpXG4rXHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNmRwdy1cdTAwM2V3b3JrKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZGVmZXJfZnJlZV9sYXJnZV9rbWFsbG9jKHZvaWQgKm9iailcbit7XG4rXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4rXG4rXHQvKlxuK1x0ICogd2UgY2FuIHNpbXBseSB1c2UgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxhcmdlIGttYWxsb2Mgb2JqZWN0XG4rXHQgKiBmb3IgdGhlIGxsbm9kZSwgYXMgdGhlcmUncyBubyBjdG9yIG9yIFRZUEVTQUZFX0JZX1JDVVxuK1x0ICovXG4rXHRsbG5vZGUgPSBrYXNhbl9yZXNldF90YWcob2JqKTtcbitcbitcdGd1YXJkKHByZWVtcHQpKCk7XG4gXG4gXHRkcHcgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xuLVx0aWYgKGxsaXN0X2FkZChoZWFkICsgcy1cdTAwM2VvZmZzZXQsIFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzKSlcbitcdGlmIChsbGlzdF9hZGQobGxub2RlLCBcdTAwMjZkcHctXHUwMDNlb2JqZWN0c19sYXJnZV9rbWFsbG9jKSlcbiBcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2ZHB3LVx1MDAzZXdvcmspO1xuIH1cbiBcbkBAIC02Njc3LDkgKzY3NTYsMTEgQEAgc2l6ZV90IGtzaXplKGNvbnN0IHZvaWQgKm9ianApXG4gfVxuIEVYUE9SVF9TWU1CT0woa3NpemUpO1xuIFxuLXN0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0KVxuK3N0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0LFxuK1x0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcbiB7XG4gXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihwYWdlKTtcbitcdGJvb2wgbm9sb2NrID0gZnJlZV9mbGFncyBcdTAwMjYgU0xBQl9GUkVFX05PTE9DSztcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIVBhZ2VMYXJnZUttYWxsb2MocGFnZSkpKSB7XG4gXHRcdGR1bXBfcGFnZShwYWdlLCBcIk5vdCBhIGttYWxsb2MgYWxsb2NhdGlvblwiKTtcbkBAIC02Njg5LDE0ICs2NzcwLDE2IEBAIHN0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0KVxuIFx0aWYgKFdBUk5fT05fT05DRShvcmRlciA9PSAwKSlcbiBcdFx0cHJfd2Fybl9vbmNlKFwib2JqZWN0IHBvaW50ZXI6IDB4JXBcXG5cIiwgb2JqZWN0KTtcbiBcbi1cdGttZW1sZWFrX2ZyZWUob2JqZWN0KTtcbitcdGlmICghbm9sb2NrKVxuK1x0XHRrbWVtbGVha19mcmVlKG9iamVjdCk7XG4rXG4gXHRrYXNhbl9rZnJlZV9sYXJnZShvYmplY3QpO1xuIFx0a21zYW5fa2ZyZWVfbGFyZ2Uob2JqZWN0KTtcbiBcbi1cdG1vZF9scnV2ZWNfcGFnZV9zdGF0ZShwYWdlLCBOUl9TTEFCX1VOUkVDTEFJTUFCTEVfQixcbi1cdFx0XHQgICAgICAtKFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpKTtcbi1cdF9fQ2xlYXJQYWdlTGFyZ2VLbWFsbG9jKHBhZ2UpO1xuLVx0ZnJlZV9mcm96ZW5fcGFnZXMocGFnZSwgb3JkZXIpO1xuK1x0aWYgKHVubGlrZWx5KG5vbG9jayBcdTAwMjZcdTAwMjYga21lbWxlYWtfbWF5X25lZWRfZnJlZShvYmplY3QpKSlcbitcdFx0ZGVmZXJfZnJlZV9sYXJnZV9rbWFsbG9jKG9iamVjdCk7XG4rXHRlbHNlXG4rXHRcdF9fZnJlZV9sYXJnZV9rbWFsbG9jX3BhZ2UocGFnZSwgZnJlZV9mbGFncyk7XG4gfVxuIFxuIC8qXG5AQCAtNjcxOCw3ICs2ODAxLDcgQEAgdm9pZCBrdmZyZWVfcmN1X2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiBcdFx0aWYgKHNsYWIpXG4gXHRcdFx0c2xhYl9mcmVlKHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgb2JqLCBfUkVUX0lQXyk7XG4gXHRcdGVsc2Vcbi1cdFx0XHRmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgb2JqKTtcbitcdFx0XHRmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgb2JqLCBTTEFCX0ZSRUVfREVGQVVMVCk7XG4gXHR9XG4gfVxuIFxuQEAgLTY3NDQsNyArNjgyNyw3IEBAIHZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqb2JqZWN0KVxuIFx0c2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcbiBcdGlmICghc2xhYikge1xuIFx0XHQvKiBrbWFsbG9jX25vbG9jaygpIGRvZXNuJ3Qgc3VwcG9ydCBsYXJnZSBrbWFsbG9jICovXG4tXHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCAodm9pZCAqKW9iamVjdCk7XG4rXHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCAodm9pZCAqKW9iamVjdCwgU0xBQl9GUkVFX0RFRkFVTFQpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtNjc1NSwxNSArNjgzOCwxNCBAQCBFWFBPUlRfU1lNQk9MKGtmcmVlKTtcbiBcbiAvKlxuICAqIENhbiBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyByYXdfc3BpbmxvY2tfdCBvciBmcm9tIElSUSBhbmQgTk1JLFxuLSAqIGJ1dCBPTkxZIGZvciBvYmplY3RzIGFsbG9jYXRlZCBieSBrbWFsbG9jX25vbG9jaygpLlxuLSAqIERlYnVnIGNoZWNrcyAobGlrZSBrbWVtbGVhayBhbmQga2ZlbmNlKSB3ZXJlIHNraXBwZWQgb24gYWxsb2NhdGlvbixcbi0gKiBoZW5jZVxuLSAqIG9iaiA9IGttYWxsb2MoKTsga2ZyZWVfbm9sb2NrKG9iaik7XG4tICogd2lsbCBtaXNzIGttZW1sZWFrL2tmZW5jZSBib29rIGtlZXBpbmcgYW5kIHdpbGwgY2F1c2UgZmFsc2UgcG9zaXRpdmVzLlxuLSAqIGxhcmdlX2ttYWxsb2MgaXMgbm90IHN1cHBvcnRlZCBlaXRoZXIuXG4rICogYnV0IG1heSBkZWZlciBmcmVlaW5nIHRvIGlycV93b3JrKCkgaW4gc29tZSBjYXNlcy5cbisgKlxuKyAqIEludGVuZGVkIG1haW5seSBmb3Igb2JqZWN0cyBhbGxvY2F0ZWQgZnJvbSBrbWFsbG9jX25vbG9jaygpLCBidXQgY2FuIGhhbmRsZVxuKyAqIGFsc28ga21lbV9jYWNoZV9hbGxvYygpIGFuZCBrbWFsbG9jKCkgb2JqZWN0cywgaW5jbHVkaW5nIGxhcmdlX2ttYWxsb2MuXG4gICovXG4gdm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxuIHtcbitcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0c3RydWN0IHNsYWIgKnNsYWI7XG4gXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcbiBcdHZvaWQgKnggPSAodm9pZCAqKW9iamVjdDtcbkBAIC02NzcxLDkgKzY4NTMsMTAgQEAgdm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxuIFx0aWYgKHVubGlrZWx5KFpFUk9fT1JfTlVMTF9QVFIob2JqZWN0KSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdHNsYWIgPSB2aXJ0X3RvX3NsYWIob2JqZWN0KTtcbitcdHBhZ2UgPSB2aXJ0X3RvX3BhZ2Uob2JqZWN0KTtcbitcdHNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XG4gXHRpZiAodW5saWtlbHkoIXNsYWIpKSB7XG4tXHRcdFdBUk5fT05DRSgxLCBcImxhcmdlX2ttYWxsb2MgaXMgbm90IHN1cHBvcnRlZCBieSBrZnJlZV9ub2xvY2soKVwiKTtcbitcdFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsICh2b2lkICopb2JqZWN0LCBTTEFCX0ZSRUVfTk9MT0NLKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTY3OTEsNiArNjg3NCwxMiBAQCB2b2lkIGtmcmVlX25vbG9jayhjb25zdCB2b2lkICpvYmplY3QpXG4gXHQgKiBzaW5jZSB0aGV5IHRha2Ugc3BpbmxvY2tzIG9yIG5vdCBzYWZlIGZyb20gYW55IGNvbnRleHQuXG4gXHQgKi9cbiBcdGttc2FuX3NsYWJfZnJlZShzLCB4KTtcbitcbitcdGlmIChpc19rZmVuY2VfYWRkcmVzcyh4KSkge1xuK1x0XHRkZWZlcl9mcmVlX2tmZW5jZSh4KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0LypcbiBcdCAqIElmIEtBU0FOIGZpbmRzIGEga2VybmVsIGJ1ZyBpdCB3aWxsIGRvIGthc2FuX3JlcG9ydF9pbnZhbGlkX2ZyZWUoKVxuIFx0ICogd2hpY2ggd2lsbCBjYWxsIHJhd19zcGluX2xvY2tfaXJxc2F2ZSgpIHdoaWNoIGlzIHRlY2huaWNhbGx5XG5AQCAtNjgwOSw5ICs2ODk4LDIzIEBAIHZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcbiBcdCAqL1xuIFx0a2FzYW5fc2xhYl9mcmVlKHMsIHgsIGZhbHNlLCBmYWxzZSwgLyogc2tpcCBxdWFyYW50aW5lICovdHJ1ZSk7XG4gXG4rXHQvKlxuK1x0ICogd2l0aCBrZnJlZSgpIHRoZSBrbWVtbGVhayBoYW5kbGluZyBoYXBwZW5zIG11Y2ggc29vbmVyLCBidXQgZm9yXG4rXHQgKiBkZWZlcmluZyB3ZSBuZWVkIHRvIHdyaXRlIGxsbm9kZSB0byB0aGUgb2JqZWN0J3MgZnJlZXBvaW50ZXIgc29cbitcdCAqIHdlIHNob3VsZCBoYXZlIGl0IGluIHRoZSBzdGF0ZSB3aGVuIGl0J3Mgbm8gbG9uZ2VyIHRyZWF0ZWQgYXNcbitcdCAqIGFsbG9jYXRlZCBieSBrYXNhbiBldGMuXG4rXHQgKlxuK1x0ICogZGVmZXJfZnJlZSB3aWxsIGFsc28gcmVzZXQgdGhlIHBvaW50ZXIgdGFnLCBidXQgaXQncyBvayB0byBkbyBhXG4rXHQgKiBkZWZlcnJlZCBrbWVtbGVha19mcmVlKCkgdXNpbmcgdGhlIHVudGFnZ2VkIHBvaW50ZXIsIGJlY2F1c2VcbitcdCAqIF9fbG9va3VwX29iamVjdCgpIHJlc2V0cyB0aGUgdGFnIGFueXdheVxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkoa21lbWxlYWtfbWF5X25lZWRfZnJlZV9yZWN1cnNpdmUoeCwgcy1cdTAwM2VmbGFncykpKVxuK1x0XHRnb3RvIGRlZmVyO1xuK1xuIFx0aWYgKGxpa2VseShjYW5fZnJlZV90b19wY3Moc2xhYikpIFx1MDAyNlx1MDAyNiBsaWtlbHkoZnJlZV90b19wY3MocywgeCwgZmFsc2UpKSlcbiBcdFx0cmV0dXJuO1xuIFxuK2RlZmVyOlxuIFx0LypcbiBcdCAqIF9fc2xhYl9mcmVlKCkgY2FuIGxvY2tsZXNzbHkgY21weGNoZzE2IGludG8gYSBzbGFiLCBidXQgdGhlbiBpdCBtaWdodFxuIFx0ICogbmVlZCB0byB0YWtlIHNwaW5fbG9jayBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuQEAgLTcxMTQsNyArNzIxNyw3IEBAIGludCBidWlsZF9kZXRhY2hlZF9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsXG4gXHRpZiAoIXMpIHtcbiBcdFx0LyogSGFuZGxlIGthbGxvYydlZCBvYmplY3RzICovXG4gXHRcdGlmICghc2xhYikge1xuLVx0XHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmplY3QpO1xuK1x0XHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmplY3QsIFNMQUJfRlJFRV9ERUZBVUxUKTtcbiBcdFx0XHRkZi1cdTAwM2VzbGFiID0gTlVMTDtcbiBcdFx0XHRyZXR1cm4gc2l6ZTtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTM6NDcuODkxMDM3MjQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY0ODg0NjIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGtmcmVlX25vbG9jaygpIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgYWx0ZXJpbmcgYGtmcmVlX25vbG9jaygpYCB3aXRoaW4gYG1tL3NsdWIuY2Ag4oCTIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHBhcnRpY3VsYXJseSB0aGUgU0xVQiBhbGxvY2F0b3IuIFRoZSBrZXkgaXMgdGhhdCBpdCdzIGV4cGFuZGluZyB0aGUgc2NvcGUgb2YgYGtmcmVlX25vbG9jaygpYCB0byBoYW5kbGUgb2JqZWN0cyBiZXlvbmQgaXRzIG9yaWdpbmFsIGRlc2lnbiwgbm93IGluY2x1ZGluZyBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga21hbGxvYygpYCwgYGttZW1fY2FjaGVfYWxsb2MoKWAsIGFuZCBpbXBvcnRhbnRseSwgKmxhcmdlKiBga21hbGxvY2AgYWxsb2NhdGlvbnMsIGFzIHdlbGwgYXMgS0ZFTkNFIG9iamVjdHMuIFRoYXQncyBhIHNpZ25pZmljYW50IGNoYW5nZSwgaW1wbHlpbmcgbW9yZSBjb21wcmVoZW5zaXZlIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGF0IGZ1bmN0aW9uLlxuXG5UaGUgYWRkaXRpb24gb2YgYW4gYGlycV93b3JrYCBtZWNoYW5pc20gaGludHMgYXQgaGFuZGxpbmcgY2VydGFpbiBmcmVlaW5nIG9wZXJhdGlvbnMgYXN5bmNocm9ub3VzbHkuIFRoaXMgaXMgbGlrZWx5IGluIHJlc3BvbnNlIHRvIGlzc3VlcyB3aXRoIGBrbWVtbGVha2Agb3IgS0ZFTkNFIHRoYXQgd291bGQgaGF2ZSByZXF1aXJlZCB0aGUgZnJlZWluZyB0byBvY2N1ciBvdXRzaWRlIG9mIG5vcm1hbCBpbnRlcnJ1cHQgY29udGV4dC4gU28sIHBvdGVudGlhbGx5IHdlIGFyZSBkZWFsaW5nIHdpdGggZGVmZXJyZWQgZnJlZWluZyBpbiBjZXJ0YWluIGNvbmRpdGlvbnMsIHdoaWNoIGlzIGNvbW1vbiBpbiBhIG1vZGVybiBrZXJuZWwuXG5cbk5vdywgSSBzZWUgaXQncyBhbHNvIGltcGFjdGluZyBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpYCBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AsIHJlcGxhY2luZyBga2ZyZWVfcmN1KClgIHdpdGggYGtmcmVlX25vbG9jaygpYC4gVGhpcyBpcyBhbm90aGVyIGludGVyZXN0aW5nIHBvaW50LiBXaHkgdGhpcyBjaGFuZ2U/IERvZXMgdGhpcyBtZWFuIGBrZnJlZV9ub2xvY2soKWAgaXMgbm93IGNvbnNpZGVyZWQgbW9yZSBhcHByb3ByaWF0ZSBvciBlZmZpY2llbnQgaW4gdGhpcyBjb250ZXh0PyBMZXQncyBjaGVjay5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBga2ZyZWVfbm9sb2NrKClgIGl0c2VsZi4gSXQncyBhIGNvcmUga2VybmVsIGZ1bmN0aW9uLiBUaGUgcGF0Y2gncyBwcmltYXJ5IGNvbnRyaWJ1dGlvbiBpcyBzdXBwb3J0aW5nIHRoZXNlIG90aGVyIG1lbW9yeSBhbGxvY2F0aW9uIG1ldGhvZHMuIEVzc2VudGlhbGx5LCBpdCBhZGRzIHRoZSBjYXBhYmlsaXR5IG9mIGZyZWVpbmcgb2JqZWN0cyBhbGxvY2F0ZWQgYnkga21hbGxvYy9rbWVtX2NhY2hlX2FsbG9jIGV0Yy4uLiBhcyB3ZWxsIGFzIGRlZmVycmluZyBmcmVlaW5nIHRvIGBkZWZlcnJlZF9wZXJjcHVfd29ya19mbmAgd2hlbiBuZWNlc3NhcnkuXG5cblJpZ2h0LCBzbyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcywgSSBuZWVkIHRvIHN0YXJ0IHRyYWNpbmcgdGhlIHVzYWdlIG9mIGBrZnJlZV9ub2xvY2soKWAuIExldCdzIHNlZSB3aGVyZSB0aGlzIGlzIG5vdyBiZWluZyBjYWxsZWQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGNoYW5nZXMgdG8gaG93IGxhcmdlIGBrbWFsbG9jYCBhbmQgS0ZFTkNFIG9iamVjdHMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIG5vdyBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQyMCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjUzOjU0LjUzOTg4NjI1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU1ODYwNzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX25vbG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaD01OTI9dm9pZCBrZnJlZShjb25zdCB2b2lkICpvYmpwKTtcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo1OTM6dm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqcCk7XFxuaW5jbHVkZS9saW51eC9zbGFiLmgtNTk0LXZvaWQga2ZyZWVfc2Vuc2l0aXZlKGNvbnN0IHZvaWQgKm9ianApO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY1OT1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzU1LVxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjc1NjpcXHRrZnJlZV9ub2xvY2socGFnZXMpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03NTctXFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03Njktb3V0X2ZyZWVfcGFnZXM6XFxua2VybmVsL2JwZi9hcmVuYS5jOjc3MDpcXHRrZnJlZV9ub2xvY2socGFnZXMpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03NzEtXFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz05NjI9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwMTYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwMTc6XFx0XFx0a2ZyZWVfbm9sb2NrKHMpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDE4LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTEyNDI9c3RhdGljIHZvaWQgYnBmX2FzeW5jX2NiX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTI1Mi1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoxMjUzOlxcdGtmcmVlX25vbG9jayhjYik7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTI1NC19XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0xMzE3PXN0YXRpYyBpbnQgX19icGZfYXN5bmNfaW5pdChzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4gKmFzeW5jLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgZmxhZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xMzcyLVxcdFxcdC8qIExvc3QgdGhlIHJhY2UgdG8gaW5pdGlhbGl6ZSB0aGlzIGJwZl9hc3luY19rZXJuLCBkcm9wIHRoZSBhbGxvY2F0ZWQgb2JqZWN0ICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MTM3MzpcXHRcXHRrZnJlZV9ub2xvY2soY2IpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTEzNzQtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTE2NjI9c3RhdGljIHZvaWQgYnBmX2FzeW5jX2lycV93b3JrZXIoc3RydWN0IGlycV93b3JrICp3b3JrKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTY3Ny1cXHRcXHRicGZfYXN5bmNfcHJvY2Vzc19vcChjYiwgY21kLVxcdTAwM2VvcCwgY21kLVxcdTAwM2Vuc2VjLCBjbWQtXFx1MDAzZW1vZGUpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjE2Nzg6XFx0XFx0a2ZyZWVfbm9sb2NrKGNtZCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTY3OS1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00NTIwPXN0YXRpYyBzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmJwZl90YXNrX3dvcmtfZmV0Y2hfY3R4KHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1NDMtXFx0XFx0ICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDU0NDpcXHRcXHRrZnJlZV9ub2xvY2soY3R4KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTQ1LVxcdFxcdHJldHVybiBvbGRfY3R4O1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDcxMD1fX2JwZl9rZnVuYyBpbnQgYnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoc3RydWN0IGJwZl9keW5wdHIgKmR5bnB0cilcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ3MTgtXFx0ZnJlYWRlcl9jbGVhbnVwKFxcdTAwMjZkZi1cXHUwMDNlZnJlYWRlcik7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDcxOTpcXHRrZnJlZV9ub2xvY2soZGYpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ3MjAtXFx0YnBmX2R5bnB0cl9zZXRfbnVsbChwdHIpO1xcbi0tXFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmM9MTM2PWludCByYW5nZV90cmVlX2NsZWFyKHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMTcyLVxcdFxcdFxcdHJhbmdlX2l0X3JlbW92ZShybiwgcnQpO1xcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjE3MzpcXHRcXHRcXHRrZnJlZV9ub2xvY2socm4pO1xcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTE3NC1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYz0xOTM9aW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMjI1LVxcdFxcdHJhbmdlX2l0X2luc2VydChsZWZ0LCBydCk7XFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmM6MjI2OlxcdFxcdGtmcmVlX25vbG9jayhyaWdodCk7XFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMjI3LVxcdH0gZWxzZSBpZiAobGVmdCkge1xcbi0tXFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmM9MjQ4PXZvaWQgcmFuZ2VfdHJlZV9kZXN0cm95KHN0cnVjdCByYW5nZV90cmVlICpydClcXG4tLVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTI1My1cXHRcXHRyYW5nZV9pdF9yZW1vdmUocm4sIHJ0KTtcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoyNTQ6XFx0XFx0a2ZyZWVfbm9sb2NrKHJuKTtcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0yNTUtXFx0fVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYz05Mj1zdGF0aWMgdm9pZCBicGZfc3RyZWFtX2ZyZWVfZWxlbShzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICplbGVtKVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtOTMte1xcbmtlcm5lbC9icGYvc3RyZWFtLmM6OTQ6XFx0a2ZyZWVfbm9sb2NrKGVsZW0pO1xcbmtlcm5lbC9icGYvc3RyZWFtLmMtOTUtfVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz0yODAzPXZvaWQgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpuZXdfbWFzaylcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjgxNS1cXHQgKiBCZWNhdXNlIHRoaXMgaXMgY2FsbGVkIHdpdGggcC1cXHUwMDNlcGlfbG9jayBoZWxkLCBpdCBpcyBub3QgcG9zc2libGVcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjI4MTY6XFx0ICogdG8gdXNlIGtmcmVlKCkgaGVyZSAod2hlbiBQUkVFTVBUX1JUPXkpLCB0aHVzIHVzZSBrZnJlZV9ub2xvY2soKVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjgxNy1cXHQgKi9cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjI4MTg6XFx0a2ZyZWVfbm9sb2NrKGFjLnVzZXJfbWFzayk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy0yODE5LX1cXG4tLVxcbmxpYi90ZXN0cy9zbHViX2t1bml0LmM9MzQ0PXN0YXRpYyB2b2lkIHRlc3Rfbm9sb2NrKHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0ICpjdHgpXFxuLS1cXG5saWIvdGVzdHMvc2x1Yl9rdW5pdC5jLTM2MS1cXHRlbHNlXFxubGliL3Rlc3RzL3NsdWJfa3VuaXQuYzozNjI6XFx0XFx0a2ZyZWVfbm9sb2NrKG9ianApO1xcbmxpYi90ZXN0cy9zbHViX2t1bml0LmMtMzYzLVxcbi0tXFxubW0va2ZlbmNlL2tmZW5jZS5oPTU5PXN0cnVjdCBrZmVuY2VfbWV0YWRhdGEge1xcbi0tXFxubW0va2ZlbmNlL2tmZW5jZS5oLTYyLVxcdFxcdHN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDtcXHQvKiBGb3IgZGVsYXllZCBmcmVlaW5nLiAqL1xcbm1tL2tmZW5jZS9rZmVuY2UuaDo2MzpcXHRcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBsbG5vZGU7XFx0LyogRm9yIGtmcmVlX25vbG9jaygpLiAqL1xcbm1tL2tmZW5jZS9rZmVuY2UuaC02NC1cXHR9O1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz01Mjc9dm9pZCBrbWVtX2NhY2hlX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTU1Mi1cXG5tbS9zbGFiX2NvbW1vbi5jOjU1MzpcXHQvKiBXYWl0IGZvciBkZWZlcnJlZCB3b3JrIGZyb20ga21hbGxvYy9rZnJlZV9ub2xvY2soKSAqL1xcbm1tL3NsYWJfY29tbW9uLmMtNTU0LVxcdGRlZmVycmVkX3dvcmtfYmFycmllcigpO1xcbi0tXFxubW0vc2x1Yi5jLTE2MC0gKiAgIFByZWVtcHRpb24gaXMgZGlzYWJsZWQgYXMgcGFydCBvZiBsb2NhbF90cnlsb2NrIG9wZXJhdGlvbnMuXFxubW0vc2x1Yi5jOjE2MTogKiAgIGttYWxsb2Nfbm9sb2NrKCkgYW5kIGtmcmVlX25vbG9jaygpIGFyZSBzYWZlIGluIE5NSSBjb250ZXh0IGJ1dCBzZWVcXG5tbS9zbHViLmMtMTYyLSAqICAgdGhlaXIgbGltaXRhdGlvbnMuXFxuLS1cXG5tbS9zbHViLmM9MjE0Nj1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjIyMS1cXHRcXHRpZiAodW5saWtlbHkoIWFsbG93X3NwaW4pKVxcbm1tL3NsdWIuYzoyMjIyOlxcdFxcdFxcdGtmcmVlX25vbG9jayh2ZWMpO1xcbm1tL3NsdWIuYy0yMjIzLVxcdFxcdGVsc2VcXG4tLVxcbm1tL3NsdWIuYz0yMjM2PXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3BpbilcXG4tLVxcbm1tL3NsdWIuYy0yMjU4LVxcdGVsc2VcXG5tbS9zbHViLmM6MjI1OTpcXHRcXHRrZnJlZV9ub2xvY2sob2JqX2V4dHMpO1xcbm1tL3NsdWIuYy0yMjYwLVxcdHNsYWItXFx1MDAzZW9ial9leHRzID0gMDtcXG4tLVxcbm1tL3NsdWIuYz0yNzk0PXN0YXRpYyB2b2lkIF9fZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLFxcbi0tXFxubW0vc2x1Yi5jLTI4MDgtXFx0aWYgKHVubGlrZWx5KGZyZWVfZmxhZ3MgXFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLKSlcXG5tbS9zbHViLmM6MjgwOTpcXHRcXHRrZnJlZV9ub2xvY2soc2hlYWYpO1xcbm1tL3NsdWIuYy0yODEwLVxcdGVsc2VcXG4tLVxcbm1tL3NsdWIuYz02ODM3PUVYUE9SVF9TWU1CT0woa2ZyZWUpO1xcbi0tXFxubW0vc2x1Yi5jLTY4NDUtICovXFxubW0vc2x1Yi5jOjY4NDY6dm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxcbm1tL3NsdWIuYy02ODQ3LXtcXG4tLVxcbm1tL3NsdWIuYy02ODg4LVxcdCAqIGthc2FuX3JlcG9ydF9pbnZhbGlkX2ZyZWUoKSAtXFx1MDAzZSByYXdfc3Bpbl9sb2NrX2lycXNhdmUoKSAtXFx1MDAzZSBOTUlcXG5tbS9zbHViLmM6Njg4OTpcXHQgKiAgLVxcdTAwM2Uga2ZyZWVfbm9sb2NrKCkgLVxcdTAwM2Uga2FzYW5fcmVwb3J0X2ludmFsaWRfZnJlZSgpIG9uIHRoZSBzYW1lIENQVVxcbm1tL3NsdWIuYy02ODkwLVxcdCAqIGlzIGRvdWJsZSBidWdneSBhbmQgZGVzZXJ2ZXMgdG8gZGVhZGxvY2suXFxuLS1cXG5tbS9zbHViLmMtNjkyNC19XFxubW0vc2x1Yi5jOjY5MjU6RVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfbm9sb2NrKTtcXG5tbS9zbHViLmMtNjkyNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTM6NTcuMTk1NzUxMTk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ4MTUyMDA3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBga2ZyZWVfbm9sb2NrYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtmcmVlX25vbG9ja2AsIHdoaWNoIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGZ1bmN0aW9uLiBJIGtub3cgaXQncyBleHBvcnRlZCBhbmQgdXNlZCBpbiBCUEYsIHRoZSBzY2hlZHVsZXIsIGFuZCBldmVuIHRoZSBTTFVCIGFsbG9jYXRvciBpdHNlbGYg4oCTIHRoYXQgbWFrZXMgaXQgYSBjcml0aWNhbCBwaWVjZS4gVGhlIGZpcnN0IGNoYW5nZSwgc3dhcHBpbmcgb3V0IGBrZnJlZV9yY3VgIGZvciBga2ZyZWVfbm9sb2NrYCB3aXRoaW4gYHNldF9jcHVzX2FsbG93ZWRfZm9yY2VgIGluIGBrZXJuZWwvc2NoZWQvY29yZS5jYCwgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBga2ZyZWVfcmN1YCBpcyBhIHdheSB0byBzYWZlbHkgZnJlZSBtZW1vcnkgdGhhdCBtaWdodCBzdGlsbCBiZSBpbiB1c2UgYnkgb3RoZXIgQ1BVcywgcmlnaHQ/IFNvLCB0aGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiDigJMgb3IgYSBzaWduaWZpY2FudCByaXNrLCBkZXBlbmRpbmcgb24gdGhlIGltcGxpY2F0aW9ucy5cblxuVGhlIHNlY29uZCBwYXJ0IG1lbnRpb25zIHN1cHBvcnRpbmcgbGFyZ2UgYGttYWxsb2NgIGFuZCBLRkVOQ0Ugd2l0aGluIGBrZnJlZV9ub2xvY2tgLiBUaGF0IGNvdWxkIGJlIGEgY29tcGF0aWJpbGl0eSBvciBlZmZpY2llbmN5IGNoYW5nZS5cblxuTm93LCB3YWl0IGEgbWludXRlLi4uIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlYC4uLiB0aGF0J3MgYSAqY29yZSogc2NoZWR1bGVyIGZ1bmN0aW9uLiBUaGUgaW1wbGljYXRpb25zIG9mIGdldHRpbmcgdGhpcyB3cm9uZyBhcmUgc3Vic3RhbnRpYWwsIHRvdWNoaW5nIHNjaGVkdWxpbmcgaXMgYSB2ZXJ5IHNlbnNpdGl2ZSBhcmVhLiBUaGlzIG1lYW5zIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY2FsbCBjaGFpbiBpbiBkZXRhaWwuIE15IGZpcnN0IGluc3RpbmN0IGhlcmUgaXMgdG8gdHJhY2Ugd2hlcmUgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2VgIGlzICphY3R1YWxseSogY2FsbGVkIGFuZCBmdWxseSB1bmRlcnN0YW5kIGl0cyB1c2FnZSBtb2RlbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGZsb3cgb2YgZGF0YSBoZXJlIGFuZCBlbnN1cmUgdGhpcyByZXBsYWNlbWVudCBpcyBhY3R1YWxseSBzYWZlLiBJJ2xsIG5lZWQgdG8gZG8gc29tZSBjb2RlIGRpdmluZyB0byBtYWtlIHN1cmUgdGhpcyBpcyBhY3R1YWxseSByZWFjaGFibGUsIGdpdmVuIGl0cyBzaWduaWZpY2FuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU0OjEyLjAxMDk1NDQ5NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgxOTQ1NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9jcHVzX2FsbG93ZWRfZm9yY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zY2hlZC5oPTE5MTA9ZXh0ZXJuIHZvaWQgZGxfYndfZnJlZShpbnQgY3B1LCB1NjQgZGxfYncpO1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xOTExLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxOTEyOi8qIHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKSAtIGNvbnNpZGVyIHVzaW5nIHNldF9jcHVzX2FsbG93ZWRfcHRyKCkgaW5zdGVhZCAqL1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxOTEzOmV4dGVybiB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZm9yY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbmV3X21hc2spO1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xOTE0LVxcbi0tXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYz00MDkzPWJvb2wgY3B1c2V0X2NwdXNfYWxsb3dlZF9mYWxsYmFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtNDEwMS1cXHRpZiAoaXNfaW5fdjJfbW9kZSgpIFxcdTAwMjZcXHUwMDI2IGNwdW1hc2tfc3Vic2V0KGNzX21hc2ssIHBvc3NpYmxlX21hc2spKSB7XFxua2VybmVsL2Nncm91cC9jcHVzZXQuYzo0MTAyOlxcdFxcdHNldF9jcHVzX2FsbG93ZWRfZm9yY2UodHNrLCBjc19tYXNrKTtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTQxMDMtXFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuLS1cXG5rZXJuZWwva3RocmVhZC5jPTU2Nj1zdGF0aWMgdm9pZCBfX2t0aHJlYWRfYmluZF9tYXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzdGF0ZSlcXG4tLVxcbmtlcm5lbC9rdGhyZWFkLmMtNTczLVxcdHNjb3BlZF9ndWFyZCAocmF3X3NwaW5sb2NrX2lycXNhdmUsIFxcdTAwMjZwLVxcdTAwM2VwaV9sb2NrKVxcbmtlcm5lbC9rdGhyZWFkLmM6NTc0OlxcdFxcdHNldF9jcHVzX2FsbG93ZWRfZm9yY2UocCwgbWFzayk7XFxua2VybmVsL2t0aHJlYWQuYy01NzUtXFxuLS1cXG5rZXJuZWwva3RocmVhZC5jPTgzOT1pbnQga3RocmVhZF9hZmZpbmVfcHJlZmVycmVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spXFxuLS1cXG5rZXJuZWwva3RocmVhZC5jLTg2Ny1cXHRzY29wZWRfZ3VhcmQgKHJhd19zcGlubG9ja19pcnFzYXZlLCBcXHUwMDI2cC1cXHUwMDNlcGlfbG9jaylcXG5rZXJuZWwva3RocmVhZC5jOjg2ODpcXHRcXHRzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHAsIGFmZmluaXR5KTtcXG5rZXJuZWwva3RocmVhZC5jLTg2OS1cXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9Mjc5Mz1kb19zZXRfY3B1c19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGFmZmluaXR5X2NvbnRleHQgKmN0eClcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjgwMi0gKi9cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjI4MDM6dm9pZCBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld19tYXNrKVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjgwNC17XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTI4MjE9aW50IGR1cF91c2VyX2NwdXNfcHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjg0OC1cXHQgKiBUaG91Z2ggdW5saWtlbHksIHVzZXJfY3B1c19wdHIgY2FuIGJlIHJlc2V0IHRvIE5VTEwgYnkgYSBjb25jdXJyZW50XFxua2VybmVsL3NjaGVkL2NvcmUuYzoyODQ5OlxcdCAqIHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKS5cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI4NTAtXFx0ICovXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTM1NDA9c3RhdGljIGludCBzZWxlY3RfZmFsbGJhY2tfcnEoaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0zNTc5LVxcdFxcdGNhc2UgcG9zc2libGU6XFxua2VybmVsL3NjaGVkL2NvcmUuYzozNTgwOlxcdFxcdFxcdHNldF9jcHVzX2FsbG93ZWRfZm9yY2UocCwgdGFza19jcHVfZmFsbGJhY2tfbWFzayhwKSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy0zNTgxLVxcdFxcdFxcdHN0YXRlID0gZmFpbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTQ6MTQuMzkyOTA0MTM1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE3NzM3MjgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQ6IFByb21pc2luZyBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2VgIGlzIGRlZmluaXRlbHkgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcuIEl0J3MgY2xlYXJseSByZWFjaGFibGUuIEJleW9uZCB0aGF0LCBJIHNlZSBga2ZyZWVfbm9sb2NrYCBiZWluZyB1c2VkIHdpdGhpbiB0aGUgQlBGIGFyZW5hIGFuZCByYW5nZSB0cmVlLCB3aGljaCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbiBhcyBhIHBvdGVudGlhbCBhcmVhIHRvIGV4cGxvcmUuXG5cbkknbSBzZWVpbmcgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzIGluIGBtbS9zbHViLmNgIGFuZCBgbW0va21lbWxlYWsuY2AuIFNwZWNpZmljYWxseSwgdGhlIGludHJvZHVjdGlvbiBvZiBga21lbWxlYWtfbWF5X25lZWRfZnJlZWAgYW5kIHRoZSBkZWZlcnJhbCBvZiBmcmVlaW5nIG9wZXJhdGlvbnMgdG8gYGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuYCBhcmUgbWFqb3IgcmVkIGZsYWdzLCBlc3NlbnRpYWxseSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMuIEkgbmVlZCB0byBkaWcgaW50byB0aG9zZSBmdW5jdGlvbnMgaW4gYG1tL3NsdWIuY2AgbmV4dC5cblxuQWxyaWdodCwgbG9va2luZyBhdCBgbW0vc2x1Yi5jYCwgSSBzZWUgYGRlZmVyX2ZyZWVfa2ZlbmNlYCBhbmQgYGRlZmVyX2ZyZWVfbGFyZ2Vfa21hbGxvY2AgaGF2ZSBiZWVuIGFkZGVkLCBhbmQgdGhleSBhcmUgZGVmZXJyaW5nIGZyZWVpbmcgdG8gYGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuYC4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byBjb25maXJtIGBkZWZlcnJlZF9wZXJjcHVfd29ya19mbmAgaXMgcmVhY2hhYmxlLlxuXG5ZZXAsIGBkZWZlcnJlZF9wZXJjcHVfd29ya19mbmAgaXMgcmVhY2hhYmxlIHRocm91Z2ggYW4gYGlycV93b3JrYCBxdWV1ZWQgYnkgYGRlZmVyX2ZyZWVgLCBgZGVmZXJfZnJlZV9rZmVuY2VgLCBhbmQgYGRlZmVyX2ZyZWVfbGFyZ2Vfa21hbGxvY2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHNwb3Qgd29ydGggc3BlbmRpbmcgc29tZSB0aW1lIG9uIHdpdGggdGhlIGZ1enplci5cblxuT2theSwgbGV0J3MgbmFpbCBkb3duIHNvbWUgZm9jdXMgc3ltYm9scy4gYHNldF9jcHVzX2FsbG93ZWRfZm9yY2VgLCBga2ZyZWVfbm9sb2NrYCwgYGttZW1sZWFrX21heV9uZWVkX2ZyZWVgLCBgZGVmZXJfZnJlZV9rZmVuY2VgICh3aGljaCBsb29rcyB0byBiZSBzdGF0aWMpLCBgZGVmZXJfZnJlZV9sYXJnZV9rbWFsbG9jYCAoYWxzbyBzdGF0aWMpLCBgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm5gIChzdGF0aWMpLCBgZnJlZV9sYXJnZV9rbWFsbG9jYCAoc3RhdGljKSwgYW5kIGZpbmFsbHkgYGtmZW5jZV9vYmpfdG9fbGxub2RlYCBhbmQgYGtmZW5jZV9sbG5vZGVfdG9fb2JqYC4gVGhvc2UgbGFzdCB0d28gbG9vayBsaWtlIHRoZXkgY291bGQgYmUgaW50ZXJlc3RpbmcuXG5cbkhvbGQgb24gYSBtaW51dGXigKYgRm9jdXNpbmcgaW4gb24gYGtmcmVlX25vbG9ja2AsIHRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlYCBpcyBnb29kIHRvby4gQW5kIGBrbWVtbGVha19tYXlfbmVlZF9mcmVlYCBpcyBhbHNvIGEgcHJpbWUgY2FuZGlkYXRlLiBMZXQgbWUgY2hlY2sgdGhlIGtlcm5lbCBzb3VyY2UgdG8gc2VlIGlmIGBrZmVuY2Vfb2JqX3RvX2xsbm9kZWAgYW5kIGBrZmVuY2VfbGxub2RlX3RvX29iamAgYXJlIGV4cG9ydGVkLiBUaGV5J3JlIGluIGBtbS9rZmVuY2UvY29yZS5jYC4gTGV0IG1lIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTIyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU0OjIyLjU3MDI3OTgyOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDIxMjM4OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmZW5jZV9vYmpfdG9fbGxub2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2ZlbmNlLmg9MTgzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19tdXN0X2NoZWNrIGJvb2wga2ZlbmNlX2ZyZWUodm9pZCAqYWRkcilcXG4tLVxcbmluY2x1ZGUvbGludXgva2ZlbmNlLmgtMTkwLVxcbmluY2x1ZGUvbGludXgva2ZlbmNlLmg6MTkxOnN0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKTtcXG5pbmNsdWRlL2xpbnV4L2tmZW5jZS5oLTE5Mi12b2lkICprZmVuY2VfbGxub2RlX3RvX29iaihzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2ZlbmNlLmg9MjQwPXN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sga2ZlbmNlX2ZyZWUodm9pZCAqYWRkcikgeyByZXR1cm4gZmFsc2U7IH1cXG5pbmNsdWRlL2xpbnV4L2tmZW5jZS5oOjI0MTpzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKSB7IHJldHVybiBOVUxMOyB9XFxuaW5jbHVkZS9saW51eC9rZmVuY2UuaC0yNDItc3RhdGljIGlubGluZSB2b2lkICprZmVuY2VfbGxub2RlX3RvX29iaihzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlKSB7IHJldHVybiBOVUxMOyB9XFxuLS1cXG5tbS9rZmVuY2UvY29yZS5jPTEyNDc9dm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXFxuLS1cXG5tbS9rZmVuY2UvY29yZS5jLTEyNzMtXFxubW0va2ZlbmNlL2NvcmUuYzoxMjc0OnN0cnVjdCBsbGlzdF9ub2RlICprZmVuY2Vfb2JqX3RvX2xsbm9kZSh2b2lkICphZGRyKVxcbm1tL2tmZW5jZS9jb3JlLmMtMTI3NS17XFxuLS1cXG5tbS9zbHViLmM9NjQ3OD1zdGF0aWMgdm9pZCBkZWZlcl9mcmVlX2tmZW5jZSh2b2lkICpvYmopXFxuLS1cXG5tbS9zbHViLmMtNjQ4My1cXHQvKiBrYXNhbl9yZXNldF90YWcoKSBpcyBub3QgbmVjZXNzYXJ5LCBrZmVuY2Ugb2JqZWN0cyBhcmUgbm90IHRhZ2dlZCAqL1xcbm1tL3NsdWIuYzo2NDg0OlxcdGxsbm9kZSA9IGtmZW5jZV9vYmpfdG9fbGxub2RlKG9iaik7XFxubW0vc2x1Yi5jLTY0ODUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU0OjI0LjU5MTUyMzcxN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDI3MTQ4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQWRkaW5nIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gaW50ZWdyYXRlIHRoZXNlIGZ1bmN0aW9uczogYGtmcmVlX25vbG9ja2AsIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlYCwgYGttZW1sZWFrX21heV9uZWVkX2ZyZWVgLCBga2ZlbmNlX29ial90b19sbG5vZGVgLCBhbmQgYGtmZW5jZV9sbG5vZGVfdG9fb2JqYC4gTm93LCBiZWZvcmUgSSBqdXN0IHN0YXJ0IHRocm93aW5nIGNvZGUgYXJvdW5kLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUuLi4gSSdtIHByZXR0eSBzdXJlIGBrZmVuY2Vfb2JqX3RvX2xsbm9kZWAgcmVxdWlyZXMgYENPTkZJR19LRkVOQ0VgLiBBbmQgYGttZW1sZWFrX21heV9uZWVkX2ZyZWVgIGRlZmluaXRlbHkgaGluZ2VzIG9uIGBDT05GSUdfREVCVUdfS01FTUxFQUtgLiBJJ2xsIGNvbmZpcm0gdGhhdCBieSByZWZlcmVuY2luZyB0aGUgc291cmNlIGNvZGUgZGlyZWN0bHkuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYG1tL2ttZW1sZWFrLmNgIHRvIGJlIHN1cmUgYWJvdXQgYGttZW1sZWFrX21heV9uZWVkX2ZyZWVgIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBUaGF04oCZcyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGJlIHN1cmUgZXZlcnl0aGluZyBpcyBpbnRlZ3JhdGVkIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MzMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTQ6MjguMzM0MjQ4NTQ1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDExMjc4MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1sZWFrX21heV9uZWVkX2ZyZWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rbWVtbGVhay5oPTI0PWV4dGVybiB2b2lkIGttZW1sZWFrX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjtcXG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmg6MjU6Ym9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7XFxuaW5jbHVkZS9saW51eC9rbWVtbGVhay5oLTI2LWV4dGVybiB2b2lkIGttZW1sZWFrX2ZyZWVfcGFydChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplKSBfX3JlZjtcXG4tLVxcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaD00OD1zdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgtNTMtXFxuaW5jbHVkZS9saW51eC9rbWVtbGVhay5oOjU0OnN0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncylcXG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgtNTUte1xcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaC01Ni1cXHRpZiAoIShmbGFncyBcXHUwMDI2IFNMQUJfTk9MRUFLVFJBQ0UpKVxcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaDo1NzpcXHRcXHRyZXR1cm4ga21lbWxlYWtfbWF5X25lZWRfZnJlZShwdHIpO1xcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaC01OC1cXG4tLVxcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaD05NT1zdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgtOTctfVxcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaDo5ODpzdGF0aWMgaW5saW5lIGJvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpXFxuaW5jbHVkZS9saW51eC9rbWVtbGVhay5oLTk5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaC0xMDEtfVxcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaDoxMDI6c3RhdGljIGlubGluZSBib29sIGttZW1sZWFrX21heV9uZWVkX2ZyZWVfcmVjdXJzaXZlKGNvbnN0IHZvaWQgKnB0ciwgc2xhYl9mbGFnc190IGZsYWdzKVxcbmluY2x1ZGUvbGludXgva21lbWxlYWsuaC0xMDMte1xcbi0tXFxubW0va21lbWxlYWsuYz0xMTY5PUVYUE9SVF9TWU1CT0xfR1BMKGttZW1sZWFrX2ZyZWUpO1xcbi0tXFxubW0va21lbWxlYWsuYy0xMTcxLS8qKlxcbm1tL2ttZW1sZWFrLmM6MTE3MjogKiBrbWVtbGVha19tYXlfbmVlZF9mcmVlIC0gY2hlY2sgaWYgb2JqZWN0IGlzIHJlZ2lzdGVyZWRcXG5tbS9rbWVtbGVhay5jLTExNzMtICogQHB0cjpcXHRwb2ludGVyIHRvIGJlZ2lubmluZyBvZiB0aGUgb2JqZWN0XFxuLS1cXG5tbS9rbWVtbGVhay5jLTExODgtICovXFxubW0va21lbWxlYWsuYzoxMTg5OmJvb2wgX19yZWYga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpXFxubW0va21lbWxlYWsuYy0xMTkwLXtcXG4tLVxcbm1tL3NsdWIuYz02NzU5PXN0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0LFxcbi0tXFxubW0vc2x1Yi5jLTY3NzgtXFxubW0vc2x1Yi5jOjY3Nzk6XFx0aWYgKHVubGlrZWx5KG5vbG9jayBcXHUwMDI2XFx1MDAyNiBrbWVtbGVha19tYXlfbmVlZF9mcmVlKG9iamVjdCkpKVxcbm1tL3NsdWIuYy02NzgwLVxcdFxcdGRlZmVyX2ZyZWVfbGFyZ2Vfa21hbGxvYyhvYmplY3QpO1xcbi0tXFxubW0vc2x1Yi5jPTY4NDY9dm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxcbi0tXFxubW0vc2x1Yi5jLTY5MTAtXFx0ICovXFxubW0vc2x1Yi5jOjY5MTE6XFx0aWYgKHVubGlrZWx5KGttZW1sZWFrX21heV9uZWVkX2ZyZWVfcmVjdXJzaXZlKHgsIHMtXFx1MDAzZWZsYWdzKSkpXFxubW0vc2x1Yi5jLTY5MTItXFx0XFx0Z290byBkZWZlcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTQ6MzAuNzQ1NTM1MzMyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MzAwNjY5NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBMZWFrIERldGVjdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBtZW1vcnkgbGVhayBkZXRlY3Rpb24sIGFuZCBJJ3ZlIGdvdCBgQ09ORklHX0RFQlVHX0tNRU1MRUFLYCBhbmQgYENPTkZJR19LRkVOQ0VgIGluIG1pbmQuIENsYXNzaWMgY2hvaWNlcy4gQnV0IGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBjb21wYXJpbmcgdGhlbSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhleSBhcmUgc3VwcG9ydGVkIGluIHRoZSBrZXJuZWwncyBzY2hlZHVsZXIgY29kZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgaG93IGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlYCBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AgaGFuZGxlcyB0aGVzZSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoYXQgZnVuY3Rpb24ncyBiZWhhdmlvciBpcyBjb25kaXRpb25hbCBvbiBlaXRoZXIgb2YgdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGJlaW5nIGVuYWJsZWQuIElmIHNvLCB0aGVuIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSB3YXkgbWVtb3J5IGlzIGhhbmRsZWQgYW5kIHByb3ZpZGUgaW5zaWdodCB0byB3aGVyZSBhbnkgbGVhayBtYXkgYmUgaGFwcGVuaW5nLiBUaGlzIGlzIGFsd2F5cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIG1lbW9yeS1yZWxhdGVkIGlzc3VlcyBpbiBzY2hlZHVsaW5nLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGRlZmluZXMgc2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTYyNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU0OjU4LjA0NjIwOTAxM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzNjUwNTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9jcHVzX2FsbG93ZWRfZm9yY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3NjaGVkL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvc2NoZWQvY29yZS5jPTI3OTM9ZG9fc2V0X2NwdXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBhZmZpbml0eV9jb250ZXh0ICpjdHgpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI4MDItICovXFxua2VybmVsL3NjaGVkL2NvcmUuYzoyODAzOnZvaWQgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpuZXdfbWFzaylcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI4MDQte1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz0yODIxPWludCBkdXBfdXNlcl9jcHVzX3B0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMsXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI4NDgtXFx0ICogVGhvdWdoIHVubGlrZWx5LCB1c2VyX2NwdXNfcHRyIGNhbiBiZSByZXNldCB0byBOVUxMIGJ5IGEgY29uY3VycmVudFxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Mjg0OTpcXHQgKiBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKCkuXFxua2VybmVsL3NjaGVkL2NvcmUuYy0yODUwLVxcdCAqL1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz0zNTQwPXN0YXRpYyBpbnQgc2VsZWN0X2ZhbGxiYWNrX3JxKGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMzU3OS1cXHRcXHRjYXNlIHBvc3NpYmxlOlxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MzU4MDpcXHRcXHRcXHRzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKHAsIHRhc2tfY3B1X2ZhbGxiYWNrX21hc2socCkpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMzU4MS1cXHRcXHRcXHRzdGF0ZSA9IGZhaWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU0OjU4LjQ3OTg2NDcyOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzgxNDE5NDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBMZWFrIERldGVjdGlvbiBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbGVha3MsIHdoaWNoLCBhcyB3ZSBrbm93LCBjYW4gYmUgYSByZWFsIHBhaW4uIFRoZSBrZXJuZWwncyBkZXNpZ24gbWVhbnMgZGVidWdnaW5nIHRvb2xzIGFyZSBhbG1vc3QgYWx3YXlzIGVuYWJsZWQgdmlhIGNvbmZpZ3VyYXRpb24gZmxhZ3MuIEkgbmVlZCB0byByZW1lbWJlciB0aGUgc3BlY2lmaWMgb25lcyBmb3IgbWVtb3J5IGxlYWsgZGV0ZWN0aW9uLCBzbyBgQ09ORklHX0RFQlVHX0tNRU1MRUFLYCBhbmQgYENPTkZJR19LRkVOQ0VgIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UgYXJlIGluIGZhY3Qgd2hhdCBlbmFibGUgdGhlIHRvb2xzIEknbSBsb29raW5nIGZvci5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgc3BlY2lmaWNzIG9mIGEgcG9zc2libGUgbGVhay4gSSdsbCB3YW50IHRvIHRyYWNlIGhvdyBga2ZyZWVfbm9sb2NrYCBvcGVyYXRlcywgYW5kIHRoYXQncyBpbiBgbW0vc2x1Yi5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGUgbG9naWMgbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCwgZGVwZW5kZW50IG9uIHNvbWUgY29uZmlnLiBOZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGF0J3MgdGhlIGNhc2UuIFRpbWUgdG8gY2hlY2sgaWYgYGtmcmVlX25vbG9ja2AgaGFzIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhcm91bmQgaXQsIGNoZWNraW5nIHdoaWNoIGNvbmZpZ3MgYXJlIHJlbGV2YW50IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI1MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU1OjAzLjg2MTMwMjYwNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MjU2ODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX25vbG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jLTE2MC0gKiAgIFByZWVtcHRpb24gaXMgZGlzYWJsZWQgYXMgcGFydCBvZiBsb2NhbF90cnlsb2NrIG9wZXJhdGlvbnMuXFxubW0vc2x1Yi5jOjE2MTogKiAgIGttYWxsb2Nfbm9sb2NrKCkgYW5kIGtmcmVlX25vbG9jaygpIGFyZSBzYWZlIGluIE5NSSBjb250ZXh0IGJ1dCBzZWVcXG5tbS9zbHViLmMtMTYyLSAqICAgdGhlaXIgbGltaXRhdGlvbnMuXFxuLS1cXG5tbS9zbHViLmM9MjE0Nj1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjIyMS1cXHRcXHRpZiAodW5saWtlbHkoIWFsbG93X3NwaW4pKVxcbm1tL3NsdWIuYzoyMjIyOlxcdFxcdFxcdGtmcmVlX25vbG9jayh2ZWMpO1xcbm1tL3NsdWIuYy0yMjIzLVxcdFxcdGVsc2VcXG4tLVxcbm1tL3NsdWIuYz0yMjM2PXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3BpbilcXG4tLVxcbm1tL3NsdWIuYy0yMjU4LVxcdGVsc2VcXG5tbS9zbHViLmM6MjI1OTpcXHRcXHRrZnJlZV9ub2xvY2sob2JqX2V4dHMpO1xcbm1tL3NsdWIuYy0yMjYwLVxcdHNsYWItXFx1MDAzZW9ial9leHRzID0gMDtcXG4tLVxcbm1tL3NsdWIuYz0yNzk0PXN0YXRpYyB2b2lkIF9fZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLFxcbi0tXFxubW0vc2x1Yi5jLTI4MDgtXFx0aWYgKHVubGlrZWx5KGZyZWVfZmxhZ3MgXFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLKSlcXG5tbS9zbHViLmM6MjgwOTpcXHRcXHRrZnJlZV9ub2xvY2soc2hlYWYpO1xcbm1tL3NsdWIuYy0yODEwLVxcdGVsc2VcXG4tLVxcbm1tL3NsdWIuYz02ODM3PUVYUE9SVF9TWU1CT0woa2ZyZWUpO1xcbi0tXFxubW0vc2x1Yi5jLTY4NDUtICovXFxubW0vc2x1Yi5jOjY4NDY6dm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxcbm1tL3NsdWIuYy02ODQ3LXtcXG4tLVxcbm1tL3NsdWIuYy02ODg4LVxcdCAqIGthc2FuX3JlcG9ydF9pbnZhbGlkX2ZyZWUoKSAtXFx1MDAzZSByYXdfc3Bpbl9sb2NrX2lycXNhdmUoKSAtXFx1MDAzZSBOTUlcXG5tbS9zbHViLmM6Njg4OTpcXHQgKiAgLVxcdTAwM2Uga2ZyZWVfbm9sb2NrKCkgLVxcdTAwM2Uga2FzYW5fcmVwb3J0X2ludmFsaWRfZnJlZSgpIG9uIHRoZSBzYW1lIENQVVxcbm1tL3NsdWIuYy02ODkwLVxcdCAqIGlzIGRvdWJsZSBidWdneSBhbmQgZGVzZXJ2ZXMgdG8gZGVhZGxvY2suXFxuLS1cXG5tbS9zbHViLmMtNjkyNC19XFxubW0vc2x1Yi5jOjY5MjU6RVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfbm9sb2NrKTtcXG5tbS9zbHViLmMtNjkyNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTU6MDMuOTg1NTY0NTExWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTUxOTM0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbXBpbGF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBpdCdzIGNvbXBpbGVkLCB0aGF0IG11Y2ggaXMgb2J2aW91cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGtleSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSd2ZSBnb3QgYSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgdG8gd29yayB3aXRoLCBga2ZyZWVfbm9sb2NrYCwgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2VgLCBga21lbWxlYWtfbWF5X25lZWRfZnJlZWAsIGBrZmVuY2Vfb2JqX3RvX2xsbm9kZWAsIGFuZCBga2ZlbmNlX2xsbm9kZV90b19vYmpgLiBUaG9zZSBhcmUgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHJlcXVpcmVtZW50cy5cblxuTm93LCBsZXQncyBsb29rIGZvciBhIHBvdGVudGlhbCBrZXkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIFRoZSBjb21taXQgbWVzc2FnZSBtZW50aW9ucyBgUFJFRU1QVF9SVD15YCBpbiByZWxhdGlvbiB0byBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZWAsIHNvIHRoYXQncyBpbW1lZGlhdGVseSBvbiBteSByYWRhci4gQ2hlY2tpbmcgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2VgLi4uIEFoLCB0aGUgY29tbWVudCBoZXJlIGlzIGNydWNpYWwuIEl0IG5vdGVzIHRoYXQgYGtmcmVlX25vbG9ja2AgaXMgdXNlZCBiZWNhdXNlIG9mIHRoZSBgcC1cdTAwM2VwaV9sb2NrYCBhbmQgdGhlIHBvdGVudGlhbCBjb25mbGljdCB3aXRoIGBrZnJlZWAgd2hlbiBgUFJFRU1QVF9SVGAgaXMgZW5hYmxlZC4gSG93ZXZlciwgdGhlIGNvbW1lbnQgZG9lcyAqbm90KiBzYXkgdGhhdCBga2ZyZWVfbm9sb2NrYCBpcyAqb25seSogY2FsbGVkIHdpdGggYFBSRUVNUFRfUlRgLiBTbyBpdCBsb29rcyBsaWtlIGBrZnJlZV9ub2xvY2tgIGlzIGNhbGxlZCBpbiBhbnkgY2FzZSwgZXZlbiBpZiBgUFJFRU1QVF9SVGAgaXMgbm90IGVuYWJsZWQsIHRob3VnaCB0aGlzIHNwZWNpZmljIGNhbGwgd2l0aCBhIGxvY2sgbWlnaHQgYmUgdGhlIHJlYXNvbiBmb3IgaW5jbHVkaW5nIGl0LiBcblxuSSdsbCBpbmNsdWRlIGBQUkVFTVBUX1JUYCBpbiBgRW5hYmxlQ29uZmlnc2AganVzdCB0byBiZSBzYWZlLCBqdXN0IGluIGNhc2UgdGhhdCdzIHdoeSB0aGlzIGlzIGNhbGxlZCwgYnV0IGl0IGRvZXNuJ3QgbG9vayB0byBiZSBzdHJpY3RseSBuZWNlc3NhcnkgZm9yIHRoZSBjb2RlIHRvIGNvbXBpbGUuIExldCdzIG1ha2Ugc3VyZSB0aGF0IHRoYXQgY29uZmlnIGFjdHVhbGx5IGV4aXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMDIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTU6MDkuNDQwNzYyODdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTYyMzY5OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBSRUVNUFRfUlRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL0tjb25maWcucHJlZW1wdD05MD1lbmRjaG9pY2VcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTkxLVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6OTI6Y29uZmlnIFBSRUVNUFRfUlRcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTkzLVxcdGJvb2wgXFxcIkZ1bGx5IFByZWVtcHRpYmxlIEtlcm5lbCAoUmVhbC1UaW1lKVxcXCJcXG4tLVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTA4LVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6MTA5OmNvbmZpZyBQUkVFTVBUX1JUX05FRURTX0JIX0xPQ0tcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTExMC1cXHRib29sIFxcXCJFbmZvcmNlIHNvZnRpcnEgc3luY2hyb25pc2F0aW9uIG9uIFBSRUVNUFRfUlRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU1OjExLjY1NzAwODQ3OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzIzMDM3OTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBSRUVNUFRfUlQgYW5kIFJlbGF0ZWQgU3ltYm9scyoqXG5cbk9rYXksIHNvIGBQUkVFTVBUX1JUYCBpcyBkZWZpbml0ZWx5IGEgZmFjdG9yIGhlcmUuIExldCdzIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgcmVsZXZhbnQgdG8gdGhpcyBhbmFseXNpcy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBjb3JlIHN5bWJvbHMgdGhhdCBJJ20gZGVhbGluZyB3aXRoLiBJIHNlZSB0aGVzZSBhcyBrZXk6IGBrZnJlZV9ub2xvY2tgLCBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZWAsIGBrbWVtbGVha19tYXlfbmVlZF9mcmVlYCwgYGtmZW5jZV9vYmpfdG9fbGxub2RlYCwgYW5kIGBrZmVuY2VfbGxub2RlX3RvX29iamAuIFRob3NlIGFyZSB0aGUgb25lcyBJJ20gdHJhY2tpbmcsIGluIHJlbGF0aW9uIHRvIGBQUkVFTVBUX1JUYC5cblxuTm93LCBmb3IgdGhlIGNvbmZpZ3VyYXRpb25zIHRoZW1zZWx2ZXMsIEkndmUgZ290IGBERUJVR19LTUVNTEVBS2AsIGBLRkVOQ0VgLCBhbmQgb2YgY291cnNlLCBgUFJFRU1QVF9SVGAuIFRoZXNlIHNlZW0gY2VudHJhbCB0byB0aGUgcHJvYmxlbS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCBtZSBxdWlja2x5IHZlcmlmeSB0aGUgbG9jYXRpb24gb2YgYGtmZW5jZV9vYmpfdG9fbGxub2RlYCBhbmQgYGtmZW5jZV9sbG5vZGVfdG9fb2JqYC4gQWgsIHllcywgdGhleSdyZSBpbiBgbW0va2ZlbmNlL2NvcmUuY2AuIEdvb2QsIHRoYXQgc29saWRpZmllcyBteSBtZW50YWwgbWFwIG9mIHdoZXJlIHRoZSBLRkVOQ0UgbG9naWMgcmVzaWRlcy4gSSdtIG5vdyByZWFkeSB0byBwcm9jZWVkLCBhcm1lZCB3aXRoIGEgY29uZmlybWVkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMjYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTU6MTcuOTgwMDUwNjI1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODU1ODc4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZmVuY2Vfb2JqX3RvX2xsbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9rZmVuY2UvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2tmZW5jZS9jb3JlLmM9MTI0Nz12b2lkIF9fa2ZlbmNlX2ZyZWUodm9pZCAqYWRkcilcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtMTI3My1cXG5tbS9rZmVuY2UvY29yZS5jOjEyNzQ6c3RydWN0IGxsaXN0X25vZGUgKmtmZW5jZV9vYmpfdG9fbGxub2RlKHZvaWQgKmFkZHIpXFxubW0va2ZlbmNlL2NvcmUuYy0xMjc1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTU6MTguMDQ4NjE3MjA4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1OTEwMjIxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4ga2VybmVsIGludGVybmFsczpcblxuKipDb25maXJtaW5nIHRoZSBTY29wZSBhbmQgRHJpbGxpbmcgRG93bioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggZ2xvYmFsIGZ1bmN0aW9ucywgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZC4gVGhlIGNvbnRleHQgc3VnZ2VzdHMgd2UncmUgbGlrZWx5IGluIHRoZSByZWFsbSBvZiBtZW1vcnkgbWFuYWdlbWVudCwgbGlrZWx5IGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudC4gSG1tLCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmUgYSBmaXJtIGdyYXNwIG9mIHRoZSBzaXR1YXRpb24gaGVyZSwgbGV0IG1lIGdvIGFoZWFkIGFuZCBkb3VibGUgY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgYGttZW1sZWFrX21heV9uZWVkX2ZyZWVgIGZ1bmN0aW9uLiBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgcmVjYWxsIGl0cyBwdXJwb3NlLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gYW55IHN1YnRsZXRpZXMuIFRoYXQgZnVuY3Rpb24gY291bGQgYmUgY2VudHJhbCB0byB3aGF0ZXZlciBpc3N1ZSB3ZSdyZSBleGFtaW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTU6MjIuNjM5NjQyNjA4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjE0NDYxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbWVtbGVha19tYXlfbmVlZF9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2ttZW1sZWFrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va21lbWxlYWsuYz0xMTY5PUVYUE9SVF9TWU1CT0xfR1BMKGttZW1sZWFrX2ZyZWUpO1xcbi0tXFxubW0va21lbWxlYWsuYy0xMTcxLS8qKlxcbm1tL2ttZW1sZWFrLmM6MTE3MjogKiBrbWVtbGVha19tYXlfbmVlZF9mcmVlIC0gY2hlY2sgaWYgb2JqZWN0IGlzIHJlZ2lzdGVyZWRcXG5tbS9rbWVtbGVhay5jLTExNzMtICogQHB0cjpcXHRwb2ludGVyIHRvIGJlZ2lubmluZyBvZiB0aGUgb2JqZWN0XFxuLS1cXG5tbS9rbWVtbGVhay5jLTExODgtICovXFxubW0va21lbWxlYWsuYzoxMTg5OmJvb2wgX19yZWYga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpXFxubW0va21lbWxlYWsuYy0xMTkwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTU6MjIuNjk1NzkxNjAyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2OTU3MTY1MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgKmdsb2JhbCBmdW5jdGlvbiosIHNwZWNpZmljYWxseSBga2ZyZWVfbm9sb2NrKClgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgY29uZmlybXMgdGhpcyDigJMgeWVzLCBpdCdzIGEgZ2xvYmFsIGZ1bmN0aW9uIHRoYXQncyBiZWluZyBtb2RpZmllZC4gVGhhdCBtZWFucyBpdOKAmXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgcmVhY2ggb2YgdGhpcyBjaGFuZ2UuXG5cbk5vdywgdGhlIGNvcmUgb2YgaXQgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBga2ZyZWVfbm9sb2NrKClgIHdpdGhpbiBgbW0vc2x1Yi5jYC4gSXQncyBkZXNpZ25lZCB0byBtYWtlIGBrZnJlZV9ub2xvY2soKWAgaGFuZGxlIGEgd2lkZXIgcmFuZ2Ugb2Ygb2JqZWN0czogdGhvc2UgYWxsb2NhdGVkIHZpYSBga21hbGxvYygpYCwgYGttZW1fY2FjaGVfYWxsb2MoKWAsIGFuZCBldmVuIHRoZSBsYXJnZXIgYGttYWxsb2NgIGFsbG9jYXRpb25zLCBub3QgdG8gbWVudGlvbiBLRkVOQ0Ugb2JqZWN0cy4gVGhlIGxvZ2ljIG9mIGRlZmVycmluZyB0aGUgYWN0dWFsIGZyZWVpbmcgdXNpbmcgYGlycV93b3JrYCB3aGVuIG5lY2Vzc2FyeSAobGlrZSB3aGVuIGRlYWxpbmcgd2l0aCBga21lbWxlYWtgIG9yIGBLRkVOQ0VgKSBpcyBjbGV2ZXIgYW5kIHNlZW1zIHN0cmF0ZWdpY2FsbHkgc291bmQsIGEgY29tbW9uIGFwcHJvYWNoIGluIHRoZSBrZXJuZWwuIEJ1dCBpdCBkb2VzIGludHJvZHVjZSBhIG5ldyBwYXRoLCBhIHN1YnRsZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGRpZmZlcmVudCBzY2hlZHVsaW5nIHBhdGhzLiBJdCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuXG5cbkludGVyZXN0aW5nbHksIGl0IGFsc28gdG91Y2hlcyBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpYCBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AsIHNoaWZ0aW5nIGl0cyB1c2UgZnJvbSBga2ZyZWVfcmN1KClgIHRvIGBrZnJlZV9ub2xvY2soKWAuIFRoZSBzaGlmdCBpbiBmdW5jdGlvbiBpcyBub3RhYmxlOyBga2ZyZWVfbm9sb2NrKClgIGlzIGxlc3MgY29uc2VydmF0aXZlIHRoYW4gYGtmcmVlX3JjdSgpYCBpbiB0ZXJtcyBvZiBzeW5jaHJvbml6YXRpb24uIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzY2hlZHVsZXIgY2hhbmdlcyBhbmQgYXJlICpoaWdobHkqIHJlYWNoYWJsZS4gVGhpcyBzaWduaWZpY2FudGx5IGluY3JlYXNlcyB0aGUgZnV6emluZyBzdXJmYWNlIGFuZCBoaWdobGlnaHRzIHRoZWlyIGluaGVyZW50IHZ1bG5lcmFiaWxpdHkuIFRoZSBjb21iaW5hdGlvbiBvZiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2NoZWR1bGVyIGNoYW5nZXMgbWVhbnMgaXQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gZXhwb3NlIHRyaWNreSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMuIFRoaXMgaXMgdGhlIHBsYWNlIHRvIGNvbmNlbnRyYXRlIHRoZSBmdXp6aW5nIGVmZm9ydHMuXG5cbkknbSBjb25maWRlbnQgaW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NzYsIk91dHB1dFRva2VucyI6MjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU1OjM5LjY1Mjk1OTkzNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTEwMzY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVCVUdfS01FTUxFQUtcIixcbiAgICBcIktGRU5DRVwiLFxuICAgIFwiUFJFRU1QVF9SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImtmcmVlX25vbG9ja1wiLFxuICAgIFwic2V0X2NwdXNfYWxsb3dlZF9mb3JjZVwiLFxuICAgIFwia21lbWxlYWtfbWF5X25lZWRfZnJlZVwiLFxuICAgIFwia2ZlbmNlX29ial90b19sbG5vZGVcIixcbiAgICBcImtmZW5jZV9sbG5vZGVfdG9fb2JqXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGtmcmVlX25vbG9jaygpYCBpbiBgbW0vc2x1Yi5jYCB0byBzdXBwb3J0IGZyZWVpbmcgb2JqZWN0cyBhbGxvY2F0ZWQgYnkgYGttYWxsb2MoKWAsIGBrbWVtX2NhY2hlX2FsbG9jKClgLCBhbmQgbGFyZ2Uga21hbGxvY3MsIGFzIHdlbGwgYXMgS0ZFTkNFIG9iamVjdHMuIEl0IGRlZmVycyBmcmVlaW5nIHRvIGFuIGBpcnFfd29ya2AgaWYgbmVjZXNzYXJ5IChlLmcuLCBmb3Iga21lbWxlYWsgb3IgS0ZFTkNFKS4gSXQgYWxzbyBtb2RpZmllcyBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpYCBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AgdG8gdXNlIGBrZnJlZV9ub2xvY2soKWAgaW5zdGVhZCBvZiBga2ZyZWVfcmN1KClgLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2NoZWR1bGVyIGNoYW5nZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX0tNRU1MRUFLXCIsXG4gICAgXCJLRkVOQ0VcIixcbiAgICBcIlBSRUVNUFRfUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrZnJlZV9ub2xvY2tcIixcbiAgICBcInNldF9jcHVzX2FsbG93ZWRfZm9yY2VcIixcbiAgICBcImttZW1sZWFrX21heV9uZWVkX2ZyZWVcIixcbiAgICBcImtmZW5jZV9vYmpfdG9fbGxub2RlXCIsXG4gICAgXCJrZmVuY2VfbGxub2RlX3RvX29ialwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBrZnJlZV9ub2xvY2soKWAgaW4gYG1tL3NsdWIuY2AgdG8gc3VwcG9ydCBmcmVlaW5nIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgLCBga21lbV9jYWNoZV9hbGxvYygpYCwgYW5kIGxhcmdlIGttYWxsb2NzLCBhcyB3ZWxsIGFzIEtGRU5DRSBvYmplY3RzLiBJdCBkZWZlcnMgZnJlZWluZyB0byBhbiBgaXJxX3dvcmtgIGlmIG5lY2Vzc2FyeSAoZS5nLiwgZm9yIGttZW1sZWFrIG9yIEtGRU5DRSkuIEl0IGFsc28gbW9kaWZpZXMgYHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKWAgaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgIHRvIHVzZSBga2ZyZWVfbm9sb2NrKClgIGluc3RlYWQgb2YgYGtmcmVlX3JjdSgpYC4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxlciBjaGFuZ2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTU6MzkuNzg4MDcxNDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mzk2MDMyNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTU6MzkuNzg4NzE3ODhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTczOTUzODEzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBmcmVlaW5nIHBhdGhzLCBzcGVjaWZpY2FsbHkgZXh0ZW5kaW5nIGBrZnJlZV9ub2xvY2soKWAgdG8gaGFuZGxlIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgIGFuZCBga21lbV9jYWNoZV9hbGxvYygpYCwgaW5jbHVkaW5nIGxhcmdlIGttYWxsb2NzIGFuZCBLRkVOQ0Ugb2JqZWN0cy4gSXQgZGVmZXJzIGZyZWVpbmcgdG8gYW4gYGlycV93b3JrYCB1c2luZyBhIGxvY2tsZXNzIGxpc3QgKGBsbGlzdGApIHdoZW4gbmVjZXNzYXJ5LiBUaGUgY2hhbmdlcyBpbnZvbHZlIG92ZXJ3cml0aW5nIHBhcnRzIG9mIHRoZSBmcmVlZCBvYmplY3RzIChsaWtlIHRoZSBmcmVlcG9pbnRlciBvciB0aGUgZmlyc3Qgd29yZCBvZiBhIGxhcmdlIGttYWxsb2Mgb2JqZWN0KSB0byBzdG9yZSB0aGUgYGxsaXN0X25vZGVgLiBTaW5jZSB0aGVzZSBvYmplY3RzIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBmcmVlZCwgYW55IGFjY2VzcyB0byB0aGVtIHdvdWxkIGNvbnN0aXR1dGUgYSB1c2UtYWZ0ZXItZnJlZSBidWcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYyBvZiBhY3RpdmUgb2JqZWN0cy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24pIHdpbGwgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBTTFVCIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgZXhwb3NlZCBoZXJlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNWI4NmJkYzU5ODRiNmIwYmEzMWRlMDc5NTAxZGU2YjIxNjE5ODc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNjo1Mzo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2ZlbmNlLmggYi9pbmNsdWRlL2xpbnV4L2tmZW5jZS5oXG5pbmRleCBlNTgyMmY2ZTdmMjc5Li4wMDcyMWM4NTI1OGRjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rZmVuY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rZmVuY2UuaFxuQEAgLTE4OCw2ICsxODgsOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayBib29sIGtmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RydWN0IGxsaXN0X25vZGUgKmtmZW5jZV9vYmpfdG9fbGxub2RlKHZvaWQgKmFkZHIpO1xuK3ZvaWQgKmtmZW5jZV9sbG5vZGVfdG9fb2JqKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpO1xuK1xuIC8qKlxuICAqIGtmZW5jZV9oYW5kbGVfcGFnZV9mYXVsdCgpIC0gcGVyZm9ybSBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciBLRkVOQ0UgcGFnZXNcbiAgKiBAYWRkcjogZmF1bHRpbmcgYWRkcmVzc1xuQEAgLTIzNSw2ICsyMzgsOCBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBrZmVuY2Vfa3NpemUoY29uc3Qgdm9pZCAqYWRkcikgeyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCAqa2ZlbmNlX29iamVjdF9zdGFydChjb25zdCB2b2lkICphZGRyKSB7IHJldHVybiBOVUxMOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIF9fa2ZlbmNlX2ZyZWUodm9pZCAqYWRkcikgeyB9XG4gc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBrZmVuY2VfZnJlZSh2b2lkICphZGRyKSB7IHJldHVybiBmYWxzZTsgfVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X25vZGUgKmtmZW5jZV9vYmpfdG9fbGxub2RlKHZvaWQgKmFkZHIpIHsgcmV0dXJuIE5VTEw7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgKmtmZW5jZV9sbG5vZGVfdG9fb2JqKHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUpIHsgcmV0dXJuIE5VTEw7IH1cbiBzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGtmZW5jZV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsXG4gXHRcdFx0XHRcdFx0XHQgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21lbWxlYWsuaCBiL2luY2x1ZGUvbGludXgva21lbWxlYWsuaFxuaW5kZXggZmJkNDI0YjJhYmIxNC4uNTJmNzVmMTBhOWNlNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva21lbWxlYWsuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oXG5AQCAtMjIsNiArMjIsNyBAQCBleHRlcm4gdm9pZCBrbWVtbGVha19hbGxvY19wZXJjcHUoY29uc3Qgdm9pZCBfX3BlcmNwdSAqcHRyLCBzaXplX3Qgc2l6ZSxcbiBleHRlcm4gdm9pZCBrbWVtbGVha192bWFsbG9jKGNvbnN0IHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIHNpemVfdCBzaXplLFxuIFx0XHRcdCAgICAgZ2ZwX3QgZ2ZwKSBfX3JlZjtcbiBleHRlcm4gdm9pZCBrbWVtbGVha19mcmVlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7XG4rYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7XG4gZXh0ZXJuIHZvaWQga21lbWxlYWtfZnJlZV9wYXJ0KGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpIF9fcmVmO1xuIGV4dGVybiB2b2lkIGttZW1sZWFrX2ZyZWVfcGVyY3B1KGNvbnN0IHZvaWQgX19wZXJjcHUgKnB0cikgX19yZWY7XG4gZXh0ZXJuIHZvaWQga21lbWxlYWtfdXBkYXRlX3RyYWNlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7XG5AQCAtNTAsNiArNTEsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKGNvbnN0IHZvaWQgKnB0ciwgc2xhYl9mbGFnc190IGZsYWdzKVxuIFx0XHRrbWVtbGVha19mcmVlKHB0cik7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNsYWJfZmxhZ3NfdCBmbGFncylcbit7XG4rXHRpZiAoIShmbGFncyBcdTAwMjYgU0xBQl9OT0xFQUtUUkFDRSkpXG4rXHRcdHJldHVybiBrbWVtbGVha19tYXlfbmVlZF9mcmVlKHB0cik7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19lcmFzZSh2b2lkICoqcHRyKVxuIHtcbiBcdCpwdHIgPSBOVUxMO1xuQEAgLTg2LDYgKzk1LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19mcmVlX3BhcnQoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSlcbiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXG4ge1xuIH1cbitzdGF0aWMgaW5saW5lIGJvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZShjb25zdCB2b2lkICpwdHIpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitzdGF0aWMgaW5saW5lIGJvb2wga21lbWxlYWtfbWF5X25lZWRfZnJlZV9yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzbGFiX2ZsYWdzX3QgZmxhZ3MpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZnJlZV9wZXJjcHUoY29uc3Qgdm9pZCBfX3BlcmNwdSAqcHRyKVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NvcmUuYyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbmluZGV4IDk2MjI2NzA3YzJmNjEuLmQyOTI5ZTRlMjNmMTMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jXG4rKysgYi9rZXJuZWwvc2NoZWQvY29yZS5jXG5AQCAtMjgwNywyMCArMjgwNywxNSBAQCB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZm9yY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbmV3X21hc1xuIFx0XHQudXNlcl9tYXNrID0gTlVMTCxcbiBcdFx0LmZsYWdzICAgICA9IFNDQV9VU0VSLFx0LyogY2xlYXIgdGhlIHVzZXIgcmVxdWVzdGVkIG1hc2sgKi9cbiBcdH07XG4tXHR1bmlvbiBjcHVtYXNrX3JjdWhlYWQge1xuLVx0XHRjcHVtYXNrX3QgY3B1bWFzaztcbi1cdFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbi1cdH07XG4gXG4gXHRzY29wZWRfZ3VhcmQgKF9fdGFza19ycV9sb2NrLCBwKVxuIFx0XHRkb19zZXRfY3B1c19hbGxvd2VkKHAsIFx1MDAyNmFjKTtcbiBcbiBcdC8qXG4gXHQgKiBCZWNhdXNlIHRoaXMgaXMgY2FsbGVkIHdpdGggcC1cdTAwM2VwaV9sb2NrIGhlbGQsIGl0IGlzIG5vdCBwb3NzaWJsZVxuLVx0ICogdG8gdXNlIGtmcmVlKCkgaGVyZSAod2hlbiBQUkVFTVBUX1JUPXkpLCB0aGVyZWZvcmUgcHVudCB0byB1c2luZ1xuLVx0ICoga2ZyZWVfcmN1KCkuXG4rXHQgKiB0byB1c2Uga2ZyZWUoKSBoZXJlICh3aGVuIFBSRUVNUFRfUlQ9eSksIHRodXMgdXNlIGtmcmVlX25vbG9jaygpXG4gXHQgKi9cbi1cdGtmcmVlX3JjdSgodW5pb24gY3B1bWFza19yY3VoZWFkICopYWMudXNlcl9tYXNrLCByY3UpO1xuK1x0a2ZyZWVfbm9sb2NrKGFjLnVzZXJfbWFzayk7XG4gfVxuIFxuIGludCBkdXBfdXNlcl9jcHVzX3B0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMsXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL3NjaGVkLmggYi9rZXJuZWwvc2NoZWQvc2NoZWQuaFxuaW5kZXggNTZhY2Y1MDJiYTI2MC4uNmE4ZDA1NzhlOTYzMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oXG4rKysgYi9rZXJuZWwvc2NoZWQvc2NoZWQuaFxuQEAgLTI4ODYsMTIgKzI4ODYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGFza19hbGxvd2VkX29uX2NwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjcHUpXG4gXG4gc3RhdGljIGlubGluZSBjcHVtYXNrX3QgKmFsbG9jX3VzZXJfY3B1c19wdHIoaW50IG5vZGUpXG4ge1xuLVx0Lypcbi1cdCAqIFNlZSBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKCkgYWJvdmUgZm9yIHRoZSByY3VfaGVhZCB1c2FnZS5cbi1cdCAqL1xuLVx0aW50IHNpemUgPSBtYXhfdChpbnQsIGNwdW1hc2tfc2l6ZSgpLCBzaXplb2Yoc3RydWN0IHJjdV9oZWFkKSk7XG4tXG4tXHRyZXR1cm4ga21hbGxvY19ub2RlKHNpemUsIEdGUF9LRVJORUwsIG5vZGUpO1xuK1x0cmV0dXJuIGttYWxsb2Nfbm9kZShjcHVtYXNrX3NpemUoKSwgR0ZQX0tFUk5FTCwgbm9kZSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpnZXRfcHVzaF90YXNrKHN0cnVjdCBycSAqcnEpXG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2NvcmUuYyBiL21tL2tmZW5jZS9jb3JlLmNcbmluZGV4IDY1NzdiZDc2OTU0ZWIuLjQyNTE5ZDI0Njg3ZmYgMTAwNjQ0XG4tLS0gYS9tbS9rZmVuY2UvY29yZS5jXG4rKysgYi9tbS9rZmVuY2UvY29yZS5jXG5AQCAtMTI3MSw2ICsxMjcxLDIwIEBAIHZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKVxuIFx0fVxuIH1cbiBcbitzdHJ1Y3QgbGxpc3Rfbm9kZSAqa2ZlbmNlX29ial90b19sbG5vZGUodm9pZCAqYWRkcilcbit7XG4rXHRzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhICptZXRhID0gYWRkcl90b19tZXRhZGF0YSgodW5zaWduZWQgbG9uZylhZGRyKTtcbitcbitcdHJldHVybiBcdTAwMjZtZXRhLVx1MDAzZWxsbm9kZTtcbit9XG4rXG4rdm9pZCAqa2ZlbmNlX2xsbm9kZV90b19vYmooc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSlcbit7XG4rXHRzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhICptZXRhID0gY29udGFpbmVyX29mKGxsbm9kZSwgc3RydWN0IGtmZW5jZV9tZXRhZGF0YSwgbGxub2RlKTtcbitcbitcdHJldHVybiAodm9pZCAqKW1ldGEtXHUwMDNlYWRkcjtcbit9XG4rXG4gYm9vbCBrZmVuY2VfaGFuZGxlX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGlzX3dyaXRlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB7XG4gXHRjb25zdCBpbnQgcGFnZV9pbmRleCA9IChhZGRyIC0gKHVuc2lnbmVkIGxvbmcpX19rZmVuY2VfcG9vbCkgLyBQQUdFX1NJWkU7XG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZS5oIGIvbW0va2ZlbmNlL2tmZW5jZS5oXG5pbmRleCAxZjYxOGY5YjBkMTJkLi4wZmNhMWRjMmM3OTQxIDEwMDY0NFxuLS0tIGEvbW0va2ZlbmNlL2tmZW5jZS5oXG4rKysgYi9tbS9rZmVuY2Uva2ZlbmNlLmhcbkBAIC01OCw3ICs1OCwxMCBAQCBzdHJ1Y3Qga2ZlbmNlX3RyYWNrIHtcbiAvKiBLRkVOQ0UgbWV0YWRhdGEgcGVyIGd1YXJkZWQgYWxsb2NhdGlvbi4gKi9cbiBzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdCBfX2d1YXJkZWRfYnkoXHUwMDI2a2ZlbmNlX2ZyZWVsaXN0X2xvY2spO1x0LyogRnJlZWxpc3Qgbm9kZS4gKi9cbi1cdHN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDtcdC8qIEZvciBkZWxheWVkIGZyZWVpbmcuICovXG4rXHR1bmlvbiB7XG4rXHRcdHN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDtcdC8qIEZvciBkZWxheWVkIGZyZWVpbmcuICovXG4rXHRcdHN0cnVjdCBsbGlzdF9ub2RlIGxsbm9kZTtcdC8qIEZvciBrZnJlZV9ub2xvY2soKS4gKi9cbitcdH07XG4gXG4gXHQvKlxuIFx0ICogTG9jayBwcm90ZWN0aW5nIGJlbG93IGRhdGE7IHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBvZiB0aGUgYmVsb3cgZGF0YSxcbmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuY1xuaW5kZXggN2M3YmExN2NlN2FmMC4uZTM1NjBjZTgyNjMyNiAxMDA2NDRcbi0tLSBhL21tL2ttZW1sZWFrLmNcbisrKyBiL21tL2ttZW1sZWFrLmNcbkBAIC0xMTY4LDYgKzExNjgsNDggQEAgdm9pZCBfX3JlZiBrbWVtbGVha19mcmVlKGNvbnN0IHZvaWQgKnB0cilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoa21lbWxlYWtfZnJlZSk7XG4gXG4rLyoqXG4rICoga21lbWxlYWtfbWF5X25lZWRfZnJlZSAtIGNoZWNrIGlmIG9iamVjdCBpcyByZWdpc3RlcmVkXG4rICogQHB0cjpcdHBvaW50ZXIgdG8gYmVnaW5uaW5nIG9mIHRoZSBvYmplY3RcbisgKlxuKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGtlcm5lbCBhbGxvY2F0b3Igd2hlbiBhbiBvYmplY3Qgc2hvdWxkIGJlXG4rICogZnJlZWQgYnV0IHRoZSBjYWxsZXIgY29udGV4dCBtaWdodCBiZSB1bnNhZmUgdG8gc3BpbiBvbiB0aGUgaW50ZXJuYWwgbG9ja3MuXG4rICpcbisgKiBJdCB3aWxsIHRoZXJlZm9yZSBvbmx5IHVzZSB0cnlsb2NrIGFuZCB0aHVzIG1pZ2h0IHJldHVybiBhIGZhbHNlIHBvc2l0aXZlXG4rICogaWYgdGhlIHRyeWxvY2sgZmFpbHMgYW5kIHRoZSBzdGF0dXMgY2Fubm90IGJlIGRldGVybWluZWQuXG4rICpcbisgKiBGb3Igb2JqZWN0cyB0aGF0IChtaWdodCkgbmVlZCBmcmVlLCB0aGUgYWxsb2NhdG9yIGhhcyB0byBkZWZlciB0aGUgYWN0dWFsXG4rICogZnJlZWluZyB0byBhIHNhZmUgY29udGV4dC5cbisgKlxuKyAqIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgbW9zdCBvYmplY3RzIGZyZWVkIGZyb20gdGhlIHVuc2FmZSBjb250ZXh0IGFyZSBhbHNvXG4rICogYWxsb2NhdGVkIGluIHN1Y2ggY29udGV4dCBhbmQgdGh1cyBhcmUgbm90IHJlZ2lzdGVyZWQgaW4ga21lbWxlYWssIHNvIGl0J3NcbisgKiB1bmxpa2VseSB0aGUgZGVmZXJlZCBmcmVlaW5nIHdpbGwgYmUgbmVjZXNzYXJ5IGp1c3QgYmVjYXVzZSBrbWVtbGVhayBpc1xuKyAqIGVuYWJsZWQuXG4rICovXG4rYm9vbCBfX3JlZiBrbWVtbGVha19tYXlfbmVlZF9mcmVlKGNvbnN0IHZvaWQgKnB0cilcbit7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0c3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0O1xuK1xuK1x0cHJfZGVidWcoXCIlcygweCVweClcXG5cIiwgX19mdW5jX18sIHB0cik7XG4rXG4rXHRpZiAoIWttZW1sZWFrX2ZyZWVfZW5hYmxlZCB8fCAhcHRyIHx8IElTX0VSUihwdHIpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBPbiBVUCwgcmF3X3NwaW5fdHJ5bG9jaygpIGFsd2F5cyBzdWNjZWVkcyBldmVuIHdoZW4gaXQgaXMgbG9ja2VkICovXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1NNUCkgXHUwMDI2XHUwMDI2IGluX25taSgpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGlmICghcmF3X3NwaW5fdHJ5bG9ja19pcnFzYXZlKFx1MDAyNmttZW1sZWFrX2xvY2ssIGZsYWdzKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRvYmplY3QgPSBfX2xvb2t1cF9vYmplY3QoKHVuc2lnbmVkIGxvbmcpcHRyLCAwLCAwKTtcbitcbitcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmttZW1sZWFrX2xvY2ssIGZsYWdzKTtcbitcbitcdHJldHVybiAhIW9iamVjdDtcbit9XG4rXG4gLyoqXG4gICoga21lbWxlYWtfZnJlZV9wYXJ0IC0gcGFydGlhbGx5IHVucmVnaXN0ZXIgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgb2JqZWN0XG4gICogQHB0cjpcdHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvciBpbnNpZGUgdGhlIG9iamVjdC4gVGhpcyBhbHNvXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCBiOWFlYjAyYTg4MGYxLi4zYmU5OGZhYTlmMGRlIDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4rKysgYi9tbS9zbHViLmNcbkBAIC00MDUwLDYgKzQwNTAsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9hbGwoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXG4gc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrIHtcbiBcdHN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHM7XG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzX2tmZW5jZTtcbitcdHN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHNfbGFyZ2Vfa21hbGxvYztcbiBcdHN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHNfYnlfcmN1O1xuIFx0c3RydWN0IGxsaXN0X2hlYWQgcmN1X3NoZWF2ZXM7XG4gXHRzdHJ1Y3QgaXJxX3dvcmsgd29yaztcbkBAIC00MDU5LDYgKzQwNjEsOCBAQCBzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspO1xuIFxuIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmssIGRlZmVycmVkX3BlcmNwdV93b3JrKSA9IHtcbiBcdC5vYmplY3RzID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHMpLFxuK1x0Lm9iamVjdHNfa2ZlbmNlID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHNfa2ZlbmNlKSxcbitcdC5vYmplY3RzX2xhcmdlX2ttYWxsb2MgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0c19sYXJnZV9rbWFsbG9jKSxcbiBcdC5vYmplY3RzX2J5X3JjdSA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzX2J5X3JjdSksXG4gXHQucmN1X3NoZWF2ZXMgPSBMTElTVF9IRUFEX0lOSVQocmN1X3NoZWF2ZXMpLFxuIFx0LndvcmsgPSBJUlFfV09SS19JTklUKGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKSxcbkBAIC02MzYzLDYgKzYzNjcsMjEgQEAgc3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWRcbitfX2ZyZWVfbGFyZ2Vfa21hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcbit7XG4rXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihwYWdlKTtcbitcbitcdG1vZF9scnV2ZWNfcGFnZV9zdGF0ZShwYWdlLCBOUl9TTEFCX1VOUkVDTEFJTUFCTEVfQixcbitcdFx0XHQgICAgICAtKFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpKTtcbitcdF9fQ2xlYXJQYWdlTGFyZ2VLbWFsbG9jKHBhZ2UpO1xuK1xuK1x0aWYgKGZyZWVfZmxhZ3MgXHUwMDI2IFNMQUJfRlJFRV9OT0xPQ0spXG4rXHRcdGZyZWVfZnJvemVuX3BhZ2VzX25vbG9jayhwYWdlLCBvcmRlcik7XG4rXHRlbHNlXG4rXHRcdGZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyKTtcbit9XG4rXG4gLypcbiAgKiBJbiBQUkVFTVBUX1JUIGlycV93b3JrIHJ1bnMgaW4gcGVyLWNwdSBrdGhyZWFkLCBzbyBpdCdzIHNhZmVcbiAgKiB0byB0YWtlIHNsZWVwaW5nIHNwaW5fbG9ja3MgZnJvbSBfX3NsYWJfZnJlZSgpLlxuQEAgLTYzNzEsMTYgKzYzOTAsMTIgQEAgc3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxuIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcbi1cdHN0cnVjdCBsbGlzdF9oZWFkICpvYmpzLCAqb2Jqc19ieV9yY3UsICpyY3Vfc2hlYXZlcztcbiBcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsICpwb3MsICp0O1xuIFx0c3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLCAqbmV4dDtcbiBcbiBcdGRwdyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmssIHdvcmspO1xuLVx0cmN1X3NoZWF2ZXMgPSBcdTAwMjZkcHctXHUwMDNlcmN1X3NoZWF2ZXM7XG4tXHRvYmpzID0gXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHM7XG4tXHRvYmpzX2J5X3JjdSA9IFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzX2J5X3JjdTtcbiBcbi1cdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwob2Jqcyk7XG4rXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzKTtcbiBcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHtcbiBcdFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XG4gXHRcdHN0cnVjdCBzbGFiICpzbGFiO1xuQEAgLTYzOTIsNiArNjQwNyw4IEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcbiBcdFx0LyogUG9pbnQgJ3gnIGJhY2sgdG8gdGhlIGJlZ2lubmluZyBvZiBhbGxvY2F0ZWQgb2JqZWN0ICovXG4gXHRcdHggLT0gcy1cdTAwM2VvZmZzZXQ7XG4gXG4rXHRcdGttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKHgsIHMtXHUwMDNlZmxhZ3MpO1xuK1xuIFx0XHQvKlxuIFx0XHQgKiBXZSB1c2VkIGZyZWVwb2ludGVyIGluICd4JyB0byBsaW5rICd4JyBpbnRvIGRmLVx1MDAzZW9iamVjdHMuXG4gXHRcdCAqIENsZWFyIGl0IHRvIE5VTEwgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmUgZGV0ZWN0aW9uXG5AQCAtNjQwMyw3ICs2NDIwLDMwIEBAIHN0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcbiBcdFx0c3RhdChzLCBGUkVFX1NMT1dQQVRIKTtcbiBcdH1cbiBcbi1cdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwob2Jqc19ieV9yY3UpO1xuK1x0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZkcHctXHUwMDNlb2JqZWN0c19rZmVuY2UpO1xuK1x0bGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHQsIGxsbm9kZSkge1xuK1x0XHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcbitcdFx0c3RydWN0IHNsYWIgKnNsYWI7XG4rXHRcdHZvaWQgKm9iaiA9IGtmZW5jZV9sbG5vZGVfdG9fb2JqKHBvcyk7XG4rXG4rXHRcdHNsYWIgPSB2aXJ0X3RvX3NsYWIob2JqKTtcbitcdFx0cyA9IHNsYWItXHUwMDNlc2xhYl9jYWNoZTtcbitcbitcdFx0a21lbWxlYWtfZnJlZV9yZWN1cnNpdmUob2JqLCBzLVx1MDAzZWZsYWdzKTtcbitcbitcdFx0X19rZmVuY2VfZnJlZShvYmopO1xuK1x0fVxuK1xuK1x0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZkcHctXHUwMDNlb2JqZWN0c19sYXJnZV9rbWFsbG9jKTtcbitcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHtcbitcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UocG9zKTtcbitcbitcdFx0a21lbWxlYWtfZnJlZShwb3MpO1xuK1xuK1x0XHRfX2ZyZWVfbGFyZ2Vfa21hbGxvY19wYWdlKHBhZ2UsIFNMQUJfRlJFRV9ERUZBVUxUKTtcbitcdH1cbitcbitcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHNfYnlfcmN1KTtcbiBcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHtcbiBcdFx0dm9pZCAqaGVhZCA9IHBvcztcbiBcdFx0dm9pZCAqb2JqcCA9IGt2bWFsbG9jX29ial9zdGFydF9hZGRyKGhlYWQpO1xuQEAgLTY0MTEsMjEgKzY0NTEsNjAgQEAgc3RhdGljIHZvaWQgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3b3JrKVxuIFx0XHRrdmZyZWVfY2FsbF9yY3UoaGVhZCwgb2JqcCk7XG4gXHR9XG4gXG4tXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKHJjdV9zaGVhdmVzKTtcbitcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2ZHB3LVx1MDAzZXJjdV9zaGVhdmVzKTtcbiBcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2hlYWYsIG5leHQsIGxsbm9kZSwgbGxub2RlKVxuIFx0XHRjYWxsX3JjdShcdTAwMjZzaGVhZi1cdTAwM2VyY3VfaGVhZCwgcmN1X2ZyZWVfc2hlYWYpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBkZWZlcl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpoZWFkKVxuK3N0YXRpYyB2b2lkIGRlZmVyX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcbiB7XG4gXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4rXG4rXHQvKlxuK1x0ICogUGxhY2UgdGhlIGxsaXN0IG5vZGUgd2hlcmUgdGhlIGZyZWVwb2ludGVyIHdvdWxkIGJlIGlmIHdlIGZyZWVkIHRoZVxuK1x0ICogb2JqZWN0IGltbWVkaWF0ZWx5LiBUaGF0IG1lYW5zIHdlIGNhbiB3cml0ZSB0aGVyZSBzYWZlbHksIG9ubHkgbmVlZFxuK1x0ICogdG8gcmVtb3ZlIGthc2FuIHRhZyBmaXJzdC5cbitcdCAqL1xuK1x0bGxub2RlID0ga2FzYW5fcmVzZXRfdGFnKG9iaikgKyBzLVx1MDAzZW9mZnNldDtcbiBcbiBcdGd1YXJkKHByZWVtcHQpKCk7XG4gXG4tXHRoZWFkID0ga2FzYW5fcmVzZXRfdGFnKGhlYWQpO1xuK1x0ZHB3ID0gdGhpc19jcHVfcHRyKFx1MDAyNmRlZmVycmVkX3BlcmNwdV93b3JrKTtcbitcdGlmIChsbGlzdF9hZGQobGxub2RlLCBcdTAwMjZkcHctXHUwMDNlb2JqZWN0cykpXG4rXHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNmRwdy1cdTAwM2V3b3JrKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZGVmZXJfZnJlZV9rZmVuY2Uodm9pZCAqb2JqKVxuK3tcbitcdHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3O1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcbitcbitcdC8qIGthc2FuX3Jlc2V0X3RhZygpIGlzIG5vdCBuZWNlc3NhcnksIGtmZW5jZSBvYmplY3RzIGFyZSBub3QgdGFnZ2VkICovXG4rXHRsbG5vZGUgPSBrZmVuY2Vfb2JqX3RvX2xsbm9kZShvYmopO1xuK1xuK1x0Z3VhcmQocHJlZW1wdCkoKTtcbitcbitcdGRwdyA9IHRoaXNfY3B1X3B0cihcdTAwMjZkZWZlcnJlZF9wZXJjcHVfd29yayk7XG4rXHRpZiAobGxpc3RfYWRkKGxsbm9kZSwgXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHNfa2ZlbmNlKSlcbitcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2ZHB3LVx1MDAzZXdvcmspO1xuK31cbitcbitzdGF0aWMgdm9pZCBkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2Modm9pZCAqb2JqKVxuK3tcbitcdHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3O1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZTtcbitcbitcdC8qXG4rXHQgKiB3ZSBjYW4gc2ltcGx5IHVzZSB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGFyZ2Uga21hbGxvYyBvYmplY3RcbitcdCAqIGZvciB0aGUgbGxub2RlLCBhcyB0aGVyZSdzIG5vIGN0b3Igb3IgVFlQRVNBRkVfQllfUkNVXG4rXHQgKi9cbitcdGxsbm9kZSA9IGthc2FuX3Jlc2V0X3RhZyhvYmopO1xuK1xuK1x0Z3VhcmQocHJlZW1wdCkoKTtcbiBcbiBcdGRwdyA9IHRoaXNfY3B1X3B0cihcdTAwMjZkZWZlcnJlZF9wZXJjcHVfd29yayk7XG4tXHRpZiAobGxpc3RfYWRkKGhlYWQgKyBzLVx1MDAzZW9mZnNldCwgXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHMpKVxuK1x0aWYgKGxsaXN0X2FkZChsbG5vZGUsIFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzX2xhcmdlX2ttYWxsb2MpKVxuIFx0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZkcHctXHUwMDNld29yayk7XG4gfVxuIFxuQEAgLTY2NzcsOSArNjc1NiwxMSBAQCBzaXplX3Qga3NpemUoY29uc3Qgdm9pZCAqb2JqcClcbiB9XG4gRVhQT1JUX1NZTUJPTChrc2l6ZSk7XG4gXG4tc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpXG4rc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QsXG4rXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGludCBvcmRlciA9IGNvbXBvdW5kX29yZGVyKHBhZ2UpO1xuK1x0Ym9vbCBub2xvY2sgPSBmcmVlX2ZsYWdzIFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghUGFnZUxhcmdlS21hbGxvYyhwYWdlKSkpIHtcbiBcdFx0ZHVtcF9wYWdlKHBhZ2UsIFwiTm90IGEga21hbGxvYyBhbGxvY2F0aW9uXCIpO1xuQEAgLTY2ODksMTQgKzY3NzAsMTYgQEAgc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpXG4gXHRpZiAoV0FSTl9PTl9PTkNFKG9yZGVyID09IDApKVxuIFx0XHRwcl93YXJuX29uY2UoXCJvYmplY3QgcG9pbnRlcjogMHglcFxcblwiLCBvYmplY3QpO1xuIFxuLVx0a21lbWxlYWtfZnJlZShvYmplY3QpO1xuK1x0aWYgKCFub2xvY2spXG4rXHRcdGttZW1sZWFrX2ZyZWUob2JqZWN0KTtcbitcbiBcdGthc2FuX2tmcmVlX2xhcmdlKG9iamVjdCk7XG4gXHRrbXNhbl9rZnJlZV9sYXJnZShvYmplY3QpO1xuIFxuLVx0bW9kX2xydXZlY19wYWdlX3N0YXRlKHBhZ2UsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CLFxuLVx0XHRcdCAgICAgIC0oUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlcikpO1xuLVx0X19DbGVhclBhZ2VMYXJnZUttYWxsb2MocGFnZSk7XG4tXHRmcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlcik7XG4rXHRpZiAodW5saWtlbHkobm9sb2NrIFx1MDAyNlx1MDAyNiBrbWVtbGVha19tYXlfbmVlZF9mcmVlKG9iamVjdCkpKVxuK1x0XHRkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2Mob2JqZWN0KTtcbitcdGVsc2VcbitcdFx0X19mcmVlX2xhcmdlX2ttYWxsb2NfcGFnZShwYWdlLCBmcmVlX2ZsYWdzKTtcbiB9XG4gXG4gLypcbkBAIC02NzE4LDcgKzY4MDEsNyBAQCB2b2lkIGt2ZnJlZV9yY3VfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIFx0XHRpZiAoc2xhYilcbiBcdFx0XHRzbGFiX2ZyZWUoc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBzbGFiLCBvYmosIF9SRVRfSVBfKTtcbiBcdFx0ZWxzZVxuLVx0XHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmopO1xuK1x0XHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmosIFNMQUJfRlJFRV9ERUZBVUxUKTtcbiBcdH1cbiB9XG4gXG5AQCAtNjc0NCw3ICs2ODI3LDcgQEAgdm9pZCBrZnJlZShjb25zdCB2b2lkICpvYmplY3QpXG4gXHRzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xuIFx0aWYgKCFzbGFiKSB7XG4gXHRcdC8qIGttYWxsb2Nfbm9sb2NrKCkgZG9lc24ndCBzdXBwb3J0IGxhcmdlIGttYWxsb2MgKi9cbi1cdFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsICh2b2lkICopb2JqZWN0KTtcbitcdFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsICh2b2lkICopb2JqZWN0LCBTTEFCX0ZSRUVfREVGQVVMVCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC02NzU1LDE1ICs2ODM4LDE0IEBAIEVYUE9SVF9TWU1CT0woa2ZyZWUpO1xuIFxuIC8qXG4gICogQ2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIHJhd19zcGlubG9ja190IG9yIGZyb20gSVJRIGFuZCBOTUksXG4tICogYnV0IE9OTFkgZm9yIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGttYWxsb2Nfbm9sb2NrKCkuXG4tICogRGVidWcgY2hlY2tzIChsaWtlIGttZW1sZWFrIGFuZCBrZmVuY2UpIHdlcmUgc2tpcHBlZCBvbiBhbGxvY2F0aW9uLFxuLSAqIGhlbmNlXG4tICogb2JqID0ga21hbGxvYygpOyBrZnJlZV9ub2xvY2sob2JqKTtcbi0gKiB3aWxsIG1pc3Mga21lbWxlYWsva2ZlbmNlIGJvb2sga2VlcGluZyBhbmQgd2lsbCBjYXVzZSBmYWxzZSBwb3NpdGl2ZXMuXG4tICogbGFyZ2Vfa21hbGxvYyBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlci5cbisgKiBidXQgbWF5IGRlZmVyIGZyZWVpbmcgdG8gaXJxX3dvcmsoKSBpbiBzb21lIGNhc2VzLlxuKyAqXG4rICogSW50ZW5kZWQgbWFpbmx5IGZvciBvYmplY3RzIGFsbG9jYXRlZCBmcm9tIGttYWxsb2Nfbm9sb2NrKCksIGJ1dCBjYW4gaGFuZGxlXG4rICogYWxzbyBrbWVtX2NhY2hlX2FsbG9jKCkgYW5kIGttYWxsb2MoKSBvYmplY3RzLCBpbmNsdWRpbmcgbGFyZ2Vfa21hbGxvYy5cbiAgKi9cbiB2b2lkIGtmcmVlX25vbG9jayhjb25zdCB2b2lkICpvYmplY3QpXG4ge1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbiBcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuIFx0dm9pZCAqeCA9ICh2b2lkICopb2JqZWN0O1xuQEAgLTY3NzEsOSArNjg1MywxMCBAQCB2b2lkIGtmcmVlX25vbG9jayhjb25zdCB2b2lkICpvYmplY3QpXG4gXHRpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihvYmplY3QpKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0c2xhYiA9IHZpcnRfdG9fc2xhYihvYmplY3QpO1xuK1x0cGFnZSA9IHZpcnRfdG9fcGFnZShvYmplY3QpO1xuK1x0c2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcbiBcdGlmICh1bmxpa2VseSghc2xhYikpIHtcbi1cdFx0V0FSTl9PTkNFKDEsIFwibGFyZ2Vfa21hbGxvYyBpcyBub3Qgc3VwcG9ydGVkIGJ5IGtmcmVlX25vbG9jaygpXCIpO1xuK1x0XHRmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgKHZvaWQgKilvYmplY3QsIFNMQUJfRlJFRV9OT0xPQ0spO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtNjc5MSw2ICs2ODc0LDEyIEBAIHZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcbiBcdCAqIHNpbmNlIHRoZXkgdGFrZSBzcGlubG9ja3Mgb3Igbm90IHNhZmUgZnJvbSBhbnkgY29udGV4dC5cbiBcdCAqL1xuIFx0a21zYW5fc2xhYl9mcmVlKHMsIHgpO1xuK1xuK1x0aWYgKGlzX2tmZW5jZV9hZGRyZXNzKHgpKSB7XG4rXHRcdGRlZmVyX2ZyZWVfa2ZlbmNlKHgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogSWYgS0FTQU4gZmluZHMgYSBrZXJuZWwgYnVnIGl0IHdpbGwgZG8ga2FzYW5fcmVwb3J0X2ludmFsaWRfZnJlZSgpXG4gXHQgKiB3aGljaCB3aWxsIGNhbGwgcmF3X3NwaW5fbG9ja19pcnFzYXZlKCkgd2hpY2ggaXMgdGVjaG5pY2FsbHlcbkBAIC02ODA5LDkgKzY4OTgsMjMgQEAgdm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxuIFx0ICovXG4gXHRrYXNhbl9zbGFiX2ZyZWUocywgeCwgZmFsc2UsIGZhbHNlLCAvKiBza2lwIHF1YXJhbnRpbmUgKi90cnVlKTtcbiBcbitcdC8qXG4rXHQgKiB3aXRoIGtmcmVlKCkgdGhlIGttZW1sZWFrIGhhbmRsaW5nIGhhcHBlbnMgbXVjaCBzb29uZXIsIGJ1dCBmb3JcbitcdCAqIGRlZmVyaW5nIHdlIG5lZWQgdG8gd3JpdGUgbGxub2RlIHRvIHRoZSBvYmplY3QncyBmcmVlcG9pbnRlciBzb1xuK1x0ICogd2Ugc2hvdWxkIGhhdmUgaXQgaW4gdGhlIHN0YXRlIHdoZW4gaXQncyBubyBsb25nZXIgdHJlYXRlZCBhc1xuK1x0ICogYWxsb2NhdGVkIGJ5IGthc2FuIGV0Yy5cbitcdCAqXG4rXHQgKiBkZWZlcl9mcmVlIHdpbGwgYWxzbyByZXNldCB0aGUgcG9pbnRlciB0YWcsIGJ1dCBpdCdzIG9rIHRvIGRvIGFcbitcdCAqIGRlZmVycmVkIGttZW1sZWFrX2ZyZWUoKSB1c2luZyB0aGUgdW50YWdnZWQgcG9pbnRlciwgYmVjYXVzZVxuK1x0ICogX19sb29rdXBfb2JqZWN0KCkgcmVzZXRzIHRoZSB0YWcgYW55d2F5XG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShrbWVtbGVha19tYXlfbmVlZF9mcmVlX3JlY3Vyc2l2ZSh4LCBzLVx1MDAzZWZsYWdzKSkpXG4rXHRcdGdvdG8gZGVmZXI7XG4rXG4gXHRpZiAobGlrZWx5KGNhbl9mcmVlX3RvX3BjcyhzbGFiKSkgXHUwMDI2XHUwMDI2IGxpa2VseShmcmVlX3RvX3BjcyhzLCB4LCBmYWxzZSkpKVxuIFx0XHRyZXR1cm47XG4gXG4rZGVmZXI6XG4gXHQvKlxuIFx0ICogX19zbGFiX2ZyZWUoKSBjYW4gbG9ja2xlc3NseSBjbXB4Y2hnMTYgaW50byBhIHNsYWIsIGJ1dCB0aGVuIGl0IG1pZ2h0XG4gXHQgKiBuZWVkIHRvIHRha2Ugc3Bpbl9sb2NrIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXG5AQCAtNzExNCw3ICs3MjE3LDcgQEAgaW50IGJ1aWxkX2RldGFjaGVkX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSxcbiBcdGlmICghcykge1xuIFx0XHQvKiBIYW5kbGUga2FsbG9jJ2VkIG9iamVjdHMgKi9cbiBcdFx0aWYgKCFzbGFiKSB7XG4tXHRcdFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iamVjdCk7XG4rXHRcdFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iamVjdCwgU0xBQl9GUkVFX0RFRkFVTFQpO1xuIFx0XHRcdGRmLVx1MDAzZXNsYWIgPSBOVUxMO1xuIFx0XHRcdHJldHVybiBzaXplO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjo1NTozOS43ODg3MTkyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3Mzk1MzU1OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIFJpc2sgQXNzZXNzbWVudCBvZiBNZW1vcnkgRnJlZWluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuLCBhcyB3aXRoIGFueSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2UsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBjZW50ZXJzIGFyb3VuZCBtb2RpZnlpbmcgYGtmcmVlX25vbG9jaygpYCBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGhhbmRsZSBvYmplY3QgZnJlZWluZywgZXNwZWNpYWxseSB0aG9zZSBhbGxvY2F0ZWQgYnkgYGttYWxsb2MoKWAgYW5kIGBrbWVtX2NhY2hlX2FsbG9jKClgLCBpbmNsdWRpbmcgbGFyZ2Uga21hbGxvY3MgYW5kIEtGRU5DRSBvYmplY3RzLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgZGVmZXJyYWwgdG8gYGlycV93b3JrYCB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zLCBsaWtlIGlmIGBrbWVtbGVha19tYXlfbmVlZF9mcmVlKClgIGlzIHRydWUsIGlmIGl0J3MgYSBLRkVOQ0Ugb2JqZWN0LCBvciBhIGxhcmdlIGttYWxsb2Mgb2JqZWN0IHRyaWdnZXJpbmcga21lbWxlYWsgZnJlZWluZy4gSXQgYWxzbyBsb29rcyBsaWtlIGEgY2hhbmdlIHRvIGBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKClgIHRvIHVzZSBga2ZyZWVfbm9sb2NrKClgIGluc3RlYWQgb2YgYGtmcmVlX3JjdSgpYC5cblxuTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRXNzZW50aWFsbHksIHdlJ3JlIGRlYWxpbmcgd2l0aCBsb2NrbGVzcyBmcmVlaW5nIChga2ZyZWVfbm9sb2NrYCksIGFuZCB0aGUgcGF0Y2ggdXRpbGl6ZXMgdGhlIG9iamVjdCdzIG1lbW9yeSBmb3IgYW4gYGxsaXN0X25vZGVgIHRvIGhhbmRsZSB0aGUgZGVmZXJyZWQgZnJlZWluZy4gRm9yIGBkZWZlcl9mcmVlKClgLCBpdCB1c2VzIGBsbG5vZGUgPSBrYXNhbl9yZXNldF90YWcob2JqKSArIHMtXHUwMDNlb2Zmc2V0O2AsIHdoaWNoIHNlZW1zIGZpbmUuIFRoZSBgZGVmZXJfZnJlZV9rZmVuY2UoKWAgdXNlcyBgbGxub2RlID0ga2ZlbmNlX29ial90b19sbG5vZGUob2JqKTtgICh1c2luZyBgXHUwMDI2bWV0YS1cdTAwM2VsbG5vZGVgKSwgYWxzbyBzZWVtcyBjb3JyZWN0LCBhcyB0aGUgS0ZFTkNFIG1ldGFkYXRhIGlzIGNsZWFybHkgZGVmaW5lZC4gQnV0IHRoZSBgZGVmZXJfZnJlZV9sYXJnZV9rbWFsbG9jKClgIHVzZXMgYGxsbm9kZSA9IGthc2FuX3Jlc2V0X3RhZyhvYmopO2AsIHdoaWNoIGlzIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsYXJnZSBrbWFsbG9jIG9iamVjdC5cblxuVGhlIGNvbmNlcm4gd2l0aCBgZGVmZXJfZnJlZV9sYXJnZV9rbWFsbG9jKClgIGlzIHRoYXQgYnkgb3ZlcndyaXRpbmcgdGhlIGZpcnN0IDggYnl0ZXMgb2YgdGhlIG9iamVjdCwgYW0gSSBpbmFkdmVydGVudGx5IGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhpcyBpcyBub3QgdGhlIGNhc2UgYmVjYXVzZSB0aGUgb2JqZWN0IGlzICpiZWluZyBmcmVlZCouIFRoZSBgbGxub2RlYCBpcyBwdXJlbHkgZm9yIGludGVybmFsIGxpbmtpbmcgd2l0aGluIHRoZSBTTFVCIGFsbG9jYXRvcidzIGRlZmVycmVkIGZyZWUgbGlzdC4gT25jZSB0aGUgYGlycV93b3JrYCBydW5zLCB0aGUgb2JqZWN0IGlzIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBhbmQgYWN0dWFsbHkgZnJlZWQuIFRodXMsIGFueSBjb250ZW50IGluIHRoZSBvYmplY3QgaXMgaXJyZWxldmFudCBhdCB0aGlzIHBvaW50IGFuZCB0aGVyZSBzaG91bGQgYmUgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLlxuXG5UaGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIG1vZGlmaWNhdGlvbnMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucywgYW5kIG5vIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhpcyBpcyBhbGwgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBmcmVlaW5nIHBhdGhzLiBDb25zZXF1ZW50bHksIHRoZSBsaWtlbHkgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIFRoZXNlIGFyZSAqcHJlY2lzZWx5KiB0aGUga2luZHMgb2YgaXNzdWVzIEtBU0FOIGFuZCBzdGFuZGFyZCBTTFVCIGRlYnVnZ2luZyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGF0IGBkZWZlcl9mcmVlX2xhcmdlX2ttYWxsb2MoKWAgY29kZSBibG9jazpcbmBgYGNcbnN0YXRpYyB2b2lkIGRlZmVyX2ZyZWVfbGFyZ2Vfa21hbGxvYyh2b2lkICpvYmopXG57XG5cdHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3O1xuXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xuXG5cdC8qXG5cdCAqIHdlIGNhbiBzaW1wbHkgdXNlIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsYXJnZSBrbWFsbG9jIG9iamVjdFxuXHQgKiBmb3IgdGhlIGxsbm9kZSwgYXMgdGhlcmUncyBubyBjdG9yIG9yIFRZUEVTQUZFX0JZX1JDVVxuXHQgKi9cblx0bGxub2RlID0ga2FzYW5fcmVzZXRfdGFnKG9iaik7XG5cblx0Z3VhcmQocHJlZW1wdCkoKTtcblxuXHRkcHcgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xuXHRpZiAobGxpc3RfYWRkKGxsbm9kZSwgXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHNfbGFyZ2Vfa21hbGxvYykpXG5cdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2ZHB3LVx1MDAzZXdvcmspO1xufVxuYGBgXG5ZZWFoLCBleGFjdGx5IGFzIEkgZXhwZWN0ZWQuIEl0IG92ZXJ3cml0ZXMgdGhlIGZpcnN0IDggYnl0ZXMgb2YgdGhlIG9iamVjdCB0byBiZSBmcmVlZC4gU2luY2UgdGhlIG9iamVjdCBpcyBhbHJlYWR5IHNjaGVkdWxlZCB0byBiZSBmcmVlZCwgaXQgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBieSB1c2VyIHNwYWNlIGFueSBsb25nZXIuIElmIGl0ICppcyogYWNjZXNzZWQsIHRoYXQncyBhIHVzZS1hZnRlci1mcmVlLCB3aGljaCBLQVNBTiAqd2lsbCogY2F0Y2guXG5cbk5vdywgbGV0J3MgYnJpZWZseSBsb29rIGF0IHRoZSBjaGFuZ2UgaW4gYHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKWA6XG5gYGBjXG4tXHRrZnJlZV9yY3UoKHVuaW9uIGNwdW1hc2tfcmN1aGVhZCAqKWFjLnVzZXJfbWFzaywgcmN1KTtcbitcdGtmcmVlX25vbG9jayhhYy51c2VyX21hc2spO1xuYGBgXG5JdCdzIGp1c3QgcmVwbGFjaW5nIGBrZnJlZV9yY3VgIHdpdGggYGtmcmVlX25vbG9ja2AuIFRoZSBgYWMudXNlcl9tYXNrYCB3YXMgYWxsb2NhdGVkIHdpdGggYGFsbG9jX3VzZXJfY3B1c19wdHJgLlxuYGBgY1xuIHN0YXRpYyBpbmxpbmUgY3B1bWFza190ICphbGxvY191c2VyX2NwdXNfcHRyKGludCBub2RlKVxuIHtcbi1cdC8qXG4tXHQgKiBTZWUgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpIGFib3ZlIGZvciB0aGUgcmN1X2hlYWQgdXNhZ2UuXG4tXHQgKi9cbi1cdGludCBzaXplID0gbWF4X3QoaW50LCBjcHVtYXNrX3NpemVcblxuIiwiSW5wdXRUb2tlbnMiOjg0MTcsIk91dHB1dFRva2VucyI6MjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU1OjU3LjE4NDA3OTU2OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGZyZWVpbmcgcGF0aHMsIHNwZWNpZmljYWxseSBleHRlbmRpbmcgYGtmcmVlX25vbG9jaygpYCB0byBoYW5kbGUgb2JqZWN0cyBhbGxvY2F0ZWQgYnkgYGttYWxsb2MoKWAgYW5kIGBrbWVtX2NhY2hlX2FsbG9jKClgLCBpbmNsdWRpbmcgbGFyZ2Uga21hbGxvY3MgYW5kIEtGRU5DRSBvYmplY3RzLiBJdCBkZWZlcnMgZnJlZWluZyB0byBhbiBgaXJxX3dvcmtgIHVzaW5nIGEgbG9ja2xlc3MgbGlzdCAoYGxsaXN0YCkgd2hlbiBuZWNlc3NhcnkuIFRoZSBjaGFuZ2VzIGludm9sdmUgb3ZlcndyaXRpbmcgcGFydHMgb2YgdGhlIGZyZWVkIG9iamVjdHMgKGxpa2UgdGhlIGZyZWVwb2ludGVyIG9yIHRoZSBmaXJzdCB3b3JkIG9mIGEgbGFyZ2Uga21hbGxvYyBvYmplY3QpIHRvIHN0b3JlIHRoZSBgbGxpc3Rfbm9kZWAuIFNpbmNlIHRoZXNlIG9iamVjdHMgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGZyZWVkLCBhbnkgYWNjZXNzIHRvIHRoZW0gd291bGQgY29uc3RpdHV0ZSBhIHVzZS1hZnRlci1mcmVlIGJ1Zy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljIG9mIGFjdGl2ZSBvYmplY3RzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBtZW1vcnkgY29ycnVwdGlvbikgd2lsbCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIFNMVUIgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBleHBvc2VkIGhlcmUgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBmcmVlaW5nIHBhdGhzLCBzcGVjaWZpY2FsbHkgZXh0ZW5kaW5nIGBrZnJlZV9ub2xvY2soKWAgdG8gaGFuZGxlIG9iamVjdHMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jKClgIGFuZCBga21lbV9jYWNoZV9hbGxvYygpYCwgaW5jbHVkaW5nIGxhcmdlIGttYWxsb2NzIGFuZCBLRkVOQ0Ugb2JqZWN0cy4gSXQgZGVmZXJzIGZyZWVpbmcgdG8gYW4gYGlycV93b3JrYCB1c2luZyBhIGxvY2tsZXNzIGxpc3QgKGBsbGlzdGApIHdoZW4gbmVjZXNzYXJ5LiBUaGUgY2hhbmdlcyBpbnZvbHZlIG92ZXJ3cml0aW5nIHBhcnRzIG9mIHRoZSBmcmVlZCBvYmplY3RzIChsaWtlIHRoZSBmcmVlcG9pbnRlciBvciB0aGUgZmlyc3Qgd29yZCBvZiBhIGxhcmdlIGttYWxsb2Mgb2JqZWN0KSB0byBzdG9yZSB0aGUgYGxsaXN0X25vZGVgLiBTaW5jZSB0aGVzZSBvYmplY3RzIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBmcmVlZCwgYW55IGFjY2VzcyB0byB0aGVtIHdvdWxkIGNvbnN0aXR1dGUgYSB1c2UtYWZ0ZXItZnJlZSBidWcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYyBvZiBhY3RpdmUgb2JqZWN0cy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24pIHdpbGwgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBTTFVCIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgZXhwb3NlZCBoZXJlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow29tm9[1] Phase: Succeeded StartedAt: 2026-08-07 16:56:08 +0000 UTC FinishedAt: 2026-08-07 16:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 16:56:08 +0000 UTC FinishedAt: 2026-08-07 16:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2] Phase: Succeeded StartedAt: 2026-08-07 16:56:08 +0000 UTC FinishedAt: 2026-08-07 20:37:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 16:56:08 +0000 UTC FinishedAt: 2026-08-07 20:37:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 16:56:08 +0000 UTC FinishedAt: 2026-08-07 16:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 16:56:08 +0000 UTC FinishedAt: 2026-08-07 16:56:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow29tm9/series-workflow29tm9-convert-artifact-653364201/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 16:56:18 +0000 UTC FinishedAt: 2026-08-07 17:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 16:56:18 +0000 UTC FinishedAt: 2026-08-07 17:12:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e277b7d9-33c8-4928-9b32-5525bfb3e603,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-workflow29tm9/series-workflow29tm9-convert-artifact-653364201/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": "57da707e-8e61-4757-ba08-68c7f87d98d2", "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-workflow29tm9/series-workflow29tm9-build-action-3352649543/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 16:56:18 +0000 UTC FinishedAt: 2026-08-07 17:12:23 +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:*e277b7d9-33c8-4928-9b32-5525bfb3e603,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-workflow29tm9/series-workflow29tm9-convert-artifact-653364201/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": "57da707e-8e61-4757-ba08-68c7f87d98d2", "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-workflow29tm9/series-workflow29tm9-build-action-3352649543/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 17:12:33 +0000 UTC FinishedAt: 2026-08-07 17:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 17:12:33 +0000 UTC FinishedAt: 2026-08-07 17:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 17:12:33 +0000 UTC FinishedAt: 2026-08-07 17:12:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 17:12:33 +0000 UTC FinishedAt: 2026-08-07 17:12:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow29tm9/series-workflow29tm9-convert-artifact-3963823228/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 17:12:43 +0000 UTC FinishedAt: 2026-08-07 17:15:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 17:12:43 +0000 UTC FinishedAt: 2026-08-07 17:15:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*57da707e-8e61-4757-ba08-68c7f87d98d2,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-workflow29tm9/series-workflow29tm9-build-action-3352649543/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-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 17:15:38 +0000 UTC FinishedAt: 2026-08-07 17:15:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 17:15:38 +0000 UTC FinishedAt: 2026-08-07 17:15:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 17:15:38 +0000 UTC FinishedAt: 2026-08-07 17:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 17:15:38 +0000 UTC FinishedAt: 2026-08-07 17:31:38 +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:*e277b7d9-33c8-4928-9b32-5525bfb3e603,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-workflow29tm9/series-workflow29tm9-convert-artifact-3963823228/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": "7172cec2-1d55-4036-9bdd-10660baf750e", "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-workflow29tm9/series-workflow29tm9-build-action-977903832/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 17:15:38 +0000 UTC FinishedAt: 2026-08-07 17:31:28 +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:*e277b7d9-33c8-4928-9b32-5525bfb3e603,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-workflow29tm9/series-workflow29tm9-convert-artifact-3963823228/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": "7172cec2-1d55-4036-9bdd-10660baf750e", "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-workflow29tm9/series-workflow29tm9-build-action-977903832/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 17:31:38 +0000 UTC FinishedAt: 2026-08-07 17:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 17:31:38 +0000 UTC FinishedAt: 2026-08-07 17:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 17:31:38 +0000 UTC FinishedAt: 2026-08-07 17:34:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 17:31:38 +0000 UTC FinishedAt: 2026-08-07 17:34:17 +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:*7172cec2-1d55-4036-9bdd-10660baf750e,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-workflow29tm9/series-workflow29tm9-build-action-977903832/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-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 17:34:26 +0000 UTC FinishedAt: 2026-08-07 20:37:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 17:34:26 +0000 UTC FinishedAt: 2026-08-07 20:37:00 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"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:*57da707e-8e61-4757-ba08-68c7f87d98d2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7172cec2-1d55-4036-9bdd-10660baf750e,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-workflow29tm9/series-workflow29tm9-build-action-3352649543/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-workflow29tm9/series-workflow29tm9-build-action-977903832/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 17:34:26 +0000 UTC FinishedAt: 2026-08-07 17:34:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 17:34:26 +0000 UTC FinishedAt: 2026-08-07 17:34:31 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"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-workflow29tm9/series-workflow29tm9-convert-artifact-667662405/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 17:34:26 +0000 UTC FinishedAt: 2026-08-07 17:34:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 17:34:26 +0000 UTC FinishedAt: 2026-08-07 17:34:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 17:34:26 +0000 UTC FinishedAt: 2026-08-07 17:34:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 17:34:37 +0000 UTC FinishedAt: 2026-08-07 20:37:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29tm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_nolock","set_cpus_allowed_force","kmemleak_may_need_free","kfence_obj_to_llnode","kfence_llnode_to_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"648294a02bfcd0eddae51877e3b30f8bbb2d4bb6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_KMEMLEAK","KFENCE","PREEMPT_RT"],"series_id":"ea037589-5080-48fa-8ecc-bcbc0dca616f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 17:34:37 +0000 UTC FinishedAt: 2026-08-07 20:36:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*57da707e-8e61-4757-ba08-68c7f87d98d2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7172cec2-1d55-4036-9bdd-10660baf750e,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-workflow29tm9/series-workflow29tm9-build-action-3352649543/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-workflow29tm9/series-workflow29tm9-build-action-977903832/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-workflow29tm9/series-workflow29tm9-convert-artifact-667662405/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,}