Name: series-workflowpr5sr Phase: Succeeded StartedAt: 2026-09-11 11:02:44 +0000 UTC FinishedAt: 2026-09-11 14:58:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[0] Phase: Succeeded StartedAt: 2026-09-11 11:02:44 +0000 UTC FinishedAt: 2026-09-11 11:19:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 11:02:44 +0000 UTC FinishedAt: 2026-09-11 11:19:47 +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": "3628c3df6cd2797b34714d23113cd44cb30801e7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP" ], "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": "3628c3df6cd2797b34714d23113cd44cb30801e7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP" ], "series_id": "7b3229dc-2160-454a-ab22-189e701e34c7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_folio_is_writeback_buffer", "zswap_lookup_and_clear_shadows", "zswap_writeback_entry", "zswap_store", "workingset_refault_lru_managed", "__swap_cache_alloc_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyYjMzQ7LAogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZW50cnkmIzM0OywKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkJiMzNDssCiAgICAmIzM0O19fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0vIChzd2FwIGNhY2hlLCB6c3dhcCB3cml0ZWJhY2ssIGFuZCB3b3JraW5nc2V0IHJlZmF1bHQgdHJhY2tpbmcgZm9yIExSVS1tYW5hZ2VkIGZvbGlvcykuIEl0IGFkanVzdHMgaG93IHNoYWRvdyBlbnRyaWVzIGFyZSBwYXJrZWQgaW4gdGhlIHpzd2FwIHRyZWUgZHVyaW5nIHdyaXRlYmFjayBhbmQgcmVzdG9yZWQvcmVmYXVsdGVkIGR1cmluZyBzd2FwaW4uXG5cbjEuIE5vIGtlcm5lbC10by11c2VyIGluZm8tbGVhayByaXNrOiBObyBkYXRhIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGxzLCBvciBCUEYgYnVmZmVycykuXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogQWxsIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBzaGFkb3dgLCBgc2hhZG93X3BhcmtlZGAsIGFuZCBsb29wIGluZGljZXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgYXNzaWduZWQgYnkgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHBvaW50ZXJzL3ZhbHVlcy5cbjMuIEJ1ZyBhcHBsaWNhYmlsaXR5OiBQb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGludm9sdmUgcGFnZSBsb2NraW5nLCByYWNlIGNvbmRpdGlvbnMgaW4gc3dhcGNhY2hlL0xSVSBtYW5pcHVsYXRpb24sIHJlZmNvdW50aW5nLCBvciBpbnZhbGlkIHhhcnJheSBvcGVyYXRpb25zLiBUaGVzZSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgKEtBU0FOLCBMT0NLREVQLCBWTV9XQVJOL1ZNX0JVRyBhc3NlcnRpb25zKSwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB6c3dhcCBzdWJzeXN0ZW0gbG9naWMsIHNwZWNpZmljYWxseSByZWZhdWx0IHRyYWNraW5nIGFuZCBzaGFkb3cgZW50cnkgcHJlc2VydmF0aW9uIGFjcm9zcyB6c3dhcCB3cml0ZWJhY2sgYW5kIHN3YXAtaW4gcGF0aHMuIEl0IGludHJvZHVjZXMgbmV3IGhlbHBlcnMgKHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIsIHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cywgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKSBhbmQgbW9kaWZpZXMgc3dhcCBjYWNoZSBhbGxvY2F0aW9uIGFuZCB3cml0ZWJhY2sgaGFuZGxpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgd2FycmFudCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTE6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MDVlYzZiODg5YzlkYTA5YTliZDg4NzI0ZmY5YzMyMTdkMTg1YjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTE6MTg6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXG5pbmRleCAzMGMxOTNhMTIwN2UxLi5kZmI3MTUzMjM2ZjVjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbkBAIC0zNSw2ICYjNDM7MzUsOCBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG4gdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcbiYjNDM7Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0Mzt2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2Vsc2VcbiBcbiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9O1xuQEAgLTY5LDYgJiM0Mzs3MSwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIF9MSU5VWF9aU1dBUF9IICovXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDhiZTNkMjhkOWMzZDguLmQxOTk0N2EzYzMzODUgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMzEsNiAmIzQzOzMxLDcgQEAgdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xuIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XG4mIzQzO3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XG4gdm9pZCB3b3JraW5nc2V0X2FjdGl2YXRpb24oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4gLyogbW0vZm9saW8uYyAqL1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGEyYTYzYWUwOTY3YzEuLjAwNDNhOTIzN2E4ZGQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmNcbkBAIC00ODU3LDYgJiM0Mzs0ODU3LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xuIFx0cHRlX3QgKnB0ZXA7XG4mIzQzO1x0dm9pZCAqc2hhZG93O1xuIFxuIFx0aWYgKCFwdGVfdW5tYXBfc2FtZSh2bWYpKVxuIFx0XHRnb3RvIG91dDtcbkBAIC00OTg0LDYgJiM0Mzs0OTg1LDEwIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0XHRnb3RvIG91dF9wYWdlO1xuIFx0fVxuIFxuJiM0MztcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4mIzQzO1x0aWYgKHNoYWRvdylcbiYjNDM7XHRcdHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChmb2xpbywgc2hhZG93KTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogS1NNIHNvbWV0aW1lcyBoYXMgdG8gY29weSBvbiByZWFkIGZhdWx0cywgZm9yIGV4YW1wbGUsIGlmXG4gXHQgKiBmb2xpby1cdTAwM2VpbmRleCBvZiBub24ta3NtIGZvbGlvcyB3b3VsZCBiZSBub25saW5lYXIgaW5zaWRlIHRoZVxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCBjMzIxMmZkZWNlOWI0Li41M2Y1N2FkMTk0YTM5IDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTI0NjUsNiAmIzQzOzI0NjUsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XG4gXHRpbnQgZXJyb3IsIG5yX3BhZ2VzLCBvcmRlcjtcbiBcdHBnb2ZmX3Qgb2Zmc2V0O1xuJiM0MztcdHZvaWQgKnNoYWRvdztcbiBcbiBcdFZNX0JVR19PTighKmZvbGlvcCB8fCAheGFfaXNfdmFsdWUoKmZvbGlvcCkpO1xuIFx0aW5kZXhfZW50cnkgPSByYWRpeF90b19zd3BfZW50cnkoKmZvbGlvcCk7XG5AQCAtMjU3Niw2ICYjNDM7MjU3NywxMCBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0ICovXG4gXHRhcmNoX3N3YXBfcmVzdG9yZShmb2xpb19zd2FwKHN3YXAsIGZvbGlvKSwgZm9saW8pO1xuIFxuJiM0MztcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4mIzQzO1x0aWYgKHNoYWRvdylcbiYjNDM7XHRcdHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChmb2xpbywgc2hhZG93KTtcbiYjNDM7XG4gXHRpZiAoc2htZW1fc2hvdWxkX3JlcGxhY2VfZm9saW8oZm9saW8sIGdmcCkpIHtcbiBcdFx0ZXJyb3IgPSBzaG1lbV9yZXBsYWNlX2ZvbGlvKFx1MDAyNmZvbGlvLCBnZnAsIGluZm8sIGluZGV4LCB2bWEpO1xuIFx0XHRpZiAoZXJyb3IpXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCAwYjVkNTA3NzM5YmNiLi5kZGQxMDhiNDFkMzNhIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmhcbkBAIC0zMTIsOSAmIzQzOzMxMiwxMCBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcbiBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfZ2V0X2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xuJiM0MztzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuJiM0MztcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LFxuJiM0MztcdFx0XHRcdCAgICAgICB2b2lkICoqc2hhZG93cCk7XG4gLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCAzMDU4NzdlMWY0ZDdiLi5lODBhNjk0ZGRkYjQ3IDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0yNCw2ICYjNDM7MjQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXBfb3BzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzd2FwX3RhYmxlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzd2FwLmhcJiMzNDtcbkBAIC0yNjMsMTIgJiM0MzsyNjQsMjEgQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0dW5zaWduZWQgaW50IGNpX3N0YXJ0LCBjaV9vZmYsIGNpX2VuZDtcbiBcdGJvb2wgZm9saW9fc3dhcHBlZCA9IGZhbHNlLCBuZWVkX2ZyZWUgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4mIzQzO1x0dm9pZCAqc2hhZG93X3BhcmtlZDtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShfX3N3YXBfZW50cnlfdG9fY2x1c3RlcihlbnRyeSkgIT0gY2kpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgcGFya2VkIHRoZSBzbG90JiMzOTtzIG9yaWdpbmFsIHNoYWRvdyBpbiB0aGVcbiYjNDM7XHQgKiB6c3dhcCB0cmVlOiByZXN0b3JlIGl0IGludG8gdGhlIHNsb3QgZm9yIGxhdGVyIHN3YXAtaW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0c2hhZG93X3BhcmtlZCA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4mIzQzO1x0aWYgKHNoYWRvd19wYXJrZWQpXG4mIzQzO1x0XHRzaGFkb3cgPSBzaGFkb3dfcGFya2VkO1xuJiM0MztcbiBcdHNpID0gX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpO1xuIFx0Y2lfc3RhcnQgPSBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpO1xuIFx0Y2lfZW5kID0gY2lfc3RhcnQgJiM0MzsgbnJfcGFnZXM7XG5AQCAtNDA5LDcgJiM0Mzs0MTksOCBAQCB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0XHRcdHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcbiYjNDM7XHRcdFx0XHRcdHZvaWQgKipzaGFkb3dwKVxuIHtcbiBcdGludCBlcnI7XG4gXHRzd3BfZW50cnlfdCBlbnRyeTtcbkBAIC00ODMsMzcgJiM0Mzs0OTQsNDIgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXG4gXHQvKiBtZW1zdyB1bmNoYXJnZXMgc3dhcCB3aGVuIGZvbGlvIGlzIGFkZGVkIHRvIHN3YXAgY2FjaGUgKi9cbiBcdG1lbWNnMV9zd2FwaW4oZm9saW8pO1xuLVx0aWYgKHNoYWRvdylcbi1cdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuIFxuIFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpO1xuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTtcbiBcbi1cdC8qIENhbGxlciB3aWxsIGluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgbmV3X2ZvbGlvICovXG4tXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiYjNDM7XHRpZiAoc2hhZG93cClcbiYjNDM7XHRcdCpzaGFkb3dwID0gc2hhZG93O1xuJiM0MztcbiBcdHJldHVybiBmb2xpbztcbiB9XG4gXG4gLyoqXG4tICogc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG4mIzQzOyAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG4gICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcbiAgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnc1xuICAqIEBvcmRlcnM6IGFsbG9jYXRpb24gb3JkZXJzLCBtdXN0IGJlIG5vbiB6ZXJvXG4gICogQHZtZjogZmF1bHQgaW5mb3JtYXRpb25cbiAgKiBAbXBvbDogTlVNQSBtZW1vcnkgYWxsb2NhdGlvbiBwb2xpY3kgdG8gYmUgYXBwbGllZFxuICAqIEBpbHg6IE5VTUEgaW50ZXJsZWF2ZSBpbmRleCwgZm9yIHVzZSBvbmx5IHdoZW4gTVBPTF9JTlRFUkxFQVZFXG4mIzQzOyAqIEBzaGFkb3dwOiBSZXR1cm5zIHRoZSBzaGFkb3cgdGhlIGFsbG9jYXRpb24gZGlzcGxhY2VkLCBOVUxMIHRvIGlnbm9yZVxuICAqXG4gICogQWxsb2NhdGUgYSBmb2xpbyBpbiB0aGUgc3dhcCBjYWNoZSBmb3Igb25lIHN3YXAgc2xvdCwgdHlwaWNhbGx5IGJlZm9yZVxuICAqIGRvaW5nIElPIChlLmcuIHN3YXAgaW4gb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIHN3YXAgc2xvdCBpbmRpY2F0ZWQgYnlcbiAgKiBAdGFyZ19lbnRyeSBtdXN0IGhhdmUgYSBub24temVybyBzd2FwIGNvdW50IChzd2FwcGVkIG91dCkuXG4gICpcbiYjNDM7ICogVGhlIHJldHVybmVkIGZvbGlvIGlzIGxvY2tlZCBhbmQgaXMgTk9UIG9uIHRoZSBMUlUuIFRoZSBjYWxsZXIgbXVzdCBlaXRoZXJcbiYjNDM7ICogYWRkIGl0IHRvIHRoZSBMUlUgd2l0aCBmb2xpb19hZGRfbHJ1KCkgc28gcGFnZSByZWNsYWltIGNhbiBmaW5kIGl0LCBvciBmcmVlXG4mIzQzOyAqIGl0IGRpcmVjdGx5IG9uY2UgZG9uZTsgYSBmb2xpbyBsZWZ0IG9mZiB0aGUgTFJVIGlzIHVucmVjbGFpbWFibGUgYW5kIGxlYWtzLlxuJiM0MzsgKlxuICAqIENvbnRleHQ6IENhbGxlciBtdXN0IHByb3RlY3QgdGhlIHN3YXAgZGV2aWNlIHdpdGggcmVmZXJlbmNlIGNvdW50IG9yIGxvY2tzLlxuICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwXG4gICogY2FjaGUuIFJldHVybnMgZXJyb3IgY29kZSBpZiBmYWlsZWQgZHVlIHRvIHJhY2UsIE9PTSBvciBpbnZhbGlkIGFyZ3VtZW50cy5cbiAgKi9cbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuJiM0MztzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHZvaWQgKipzaGFkb3dwKVxuIHtcbiBcdGludCBvcmRlciwgZXJyO1xuIFx0c3RydWN0IGZvbGlvICpyZXQ7XG5AQCAtNTI4LDcgJiM0Mzs1NDQsNyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuIFxuIFx0ZG8ge1xuIFx0XHRyZXQgPSBfX3N3YXBfY2FjaGVfYWxsb2MoY2ksIHRhcmdfZW50cnksIGdmcCwgb3JkZXIsXG4tXHRcdFx0XHRcdCB2bWYsIG1wb2wsIGlseCk7XG4mIzQzO1x0XHRcdFx0XHQgdm1mLCBtcG9sLCBpbHgsIHNoYWRvd3ApO1xuIFx0XHRpZiAoIUlTX0VSUihyZXQpKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRlcnIgPSBQVFJfRVJSKHJldCk7XG5AQCAtNjQ0LDE3ICYjNDM7NjYwLDIzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCxcbiBcdFx0cGdvZmZfdCBpbHgsIGJvb2wgcmVhZGFoZWFkKVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4mIzQzO1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbiBcbiBcdGRvIHtcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4tXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4mIzQzO1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4mIzQzO1x0XHRcdFx0XHRcdCBpbHgsIFx1MDAyNnNoYWRvdyk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuJiM0MztcdGlmIChzaGFkb3cpXG4mIzQzO1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4mIzQzO1xuJiM0MztcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFx0c3dhcF9yZWFkX2ZvbGlvKGN0eCwgZm9saW8pO1xuIFx0aWYgKHJlYWRhaGVhZCkge1xuIFx0XHRmb2xpb19zZXRfcmVhZGFoZWFkKGZvbGlvKTtcbkBAIC02ODUsMTcgJiM0Mzs3MDcsMjMgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbiB7XG4gXHRzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4mIzQzO1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCxcbiYjNDM7XHRcdFx0XHRcdFx0IGlseCwgXHUwMDI2c2hhZG93KTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUihmb2xpbykpXG4gXHRcdHJldHVybiBmb2xpbztcbiBcbiYjNDM7XHRpZiAoc2hhZG93KVxuJiM0MztcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuJiM0MztcbiYjNDM7XHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9mb2xpbyhcdTAwMjZjdHgsIGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9zdWJtaXQoXHUwMDI2Y3R4KTtcbiBcdHJldHVybiBmb2xpbztcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggNDhkM2NkNDBkZWZkYi4uNjEwMWY5MGU5MWQyYSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xODg1LDcgJiM0MzsxODg1LDcgQEAgdm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiAgKiAgIENQVTFcdFx0XHRcdENQVTJcbiAgKiAgIGRvX3N3YXBfcGFnZSgpXG4gICogICAgIC4uLlx0XHRcdFx0c3dhcG9mZiYjNDM7c3dhcG9uXG4tICogICAgIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oKVxuJiM0MzsgKiAgICAgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKClcbiAgKiAgICAgICAvLyBjaGVjayBzd2FwX21hcFxuICAqICAgICAvLyB2ZXJpZnkgUFRFIG5vdCBjaGFuZ2VkXG4gICpcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA0MGQzZjFiNDhhNzRjLi4xY2E2NDg5ZTUwMTIyIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDgsNiAmIzQzOzQ4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVmZXRjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kYXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC96c3dhcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdld2Fsay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2htZW1fZnMuaFx1MDAzZVxuQEAgLTc1Myw3ICYjNDM7NzU0LDggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbi1cdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbiYjNDM7XHRcdGlmIChyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIXpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKVxuIFx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG4gXHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbiBcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdyk7XG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCA4NDEyZjQ4NDBhZTM1Li44ZTQ1YjBiYWViMzZkIDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmNcbkBAIC01MzYsMTYgJiM0Mzs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4gXHRyZXR1cm4gcmVmYXVsdF9kaXN0YW5jZSBcdTAwM2M9IHdvcmtpbmdzZXRfc2l6ZTtcbiB9XG4gXG4tLyoqXG4tICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXG4tICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uXG4tICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxuLSAqXG4tICogQ2FsY3VsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSByZWZhdWx0IGRpc3RhbmNlIG9mIHRoZSBwcmV2aW91c2x5XG4tICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxuLSAqIHByZXNzdXJlIGNhdXNlZCB0aGUgZXZpY3Rpb24uXG4tICovXG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuJiM0MztzdGF0aWMgdm9pZCBfX3dvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3csXG4mIzQzO1x0XHRcdFx0IGJvb2wgbHJ1X21hbmFnZWQpXG4ge1xuIFx0Ym9vbCBmaWxlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuQEAgLTU3Nyw3ICYjNDM7NTY5LDE2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdGlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsIFx1MDAyNndvcmtpbmdzZXQsIHRydWUpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQW4gTFJVLW1hbmFnZWQgZm9saW8gbWF5IHNpdCBpbiBhIHBlci1DUFUgYmF0Y2gsIHdoaWNoIGNhbm5vdCBiZVxuJiM0MztcdCAqIGRldGVybWluZWQgaGVyZTogc2V0dGluZyB0aGUgZmxhZyB3b3VsZCByYWNlIHRoZSBkcmFpbiBhbmQgbGVhdmUgaXRcbiYjNDM7XHQgKiBkaXNhZ3JlZWluZyB3aXRoIHRoZSBsaXN0LiBmb2xpb19hY3RpdmF0ZSgpIGlzIHNhZmUsIGJ1dCBtaXNzZXMgdGhlXG4mIzQzO1x0ICogYWN0aXZhdGlvbiBmb3Igc3VjaCBhIGZvbGlvLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChscnVfbWFuYWdlZClcbiYjNDM7XHRcdGZvbGlvX2FjdGl2YXRlKGZvbGlvKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbiBcdHdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KGxydXZlYywgbnIpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQkFTRSAmIzQzOyBmaWxlLCBucik7XG4gXG5AQCAtNTkwLDYgJiM0Mzs1OTEsNDMgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuIFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxuJiM0MzsgKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbiYjNDM7ICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHlcbiYjNDM7ICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxuJiM0MzsgKiBwcmVzc3VyZSBjYXVzZWQgdGhlIGV2aWN0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBAZm9saW8gbXVzdCBiZSBsb2NrZWQgYW5kIG5vdCBvbiB0aGUgTFJVIHlldCwgdGhlIGNhbGxlciBhZGRzXG4mIzQzOyAqIGl0IHdpdGggZm9saW9fYWRkX2xydSgpIGFmdGVyd2FyZHMuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4mIzQzO3tcbiYjNDM7XHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHlcbiYjNDM7ICogZXZpY3RlZCBmb2xpbyB0aGF0IGlzIGFscmVhZHkgb24gdGhlIExSVS5cbiYjNDM7ICogQGZvbGlvOiBUaGUgZm9saW8gdGhlIGV2aWN0aW9uIGlzIHJlZmF1bHRlZCBpbnRvLlxuJiM0MzsgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXG4mIzQzOyAqXG4mIzQzOyAqIExpa2Ugd29ya2luZ3NldF9yZWZhdWx0KCksIGJ1dCBmb3IgYSBmb2xpbyB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGFkZGVkXG4mIzQzOyAqIHRvIHRoZSBMUlUsIHdoaWNoIGhhcyB0byBiZSBhY3RpdmF0ZWQgYnkgbW92aW5nIGl0IGJldHdlZW4gdGhlIGxpc3RzXG4mIzQzOyAqIHJhdGhlciB0aGFuIGJ5IHNldHRpbmcgUEdfYWN0aXZlLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgYWN0aXZhdGlvbiBpcyBiZXN0IGVmZm9ydDogYSBmb2xpbyBzdGlsbCBzaXR0aW5nIGluIGEgcGVyLUNQVSBMUlVcbiYjNDM7ICogYmF0Y2ggY2Fubm90IGJlIG1vdmVkIHlldCBhbmQgaXMgbGVmdCBpbmFjdGl2ZS5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQGZvbGlvIG11c3QgYmUgbG9ja2VkIGFuZCBhbHJlYWR5IGFkZGVkIHRvIHRoZSBMUlUuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4mIzQzO3tcbiYjNDM7XHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB3b3JraW5nc2V0X2FjdGl2YXRpb24gLSBub3RlIGEgcGFnZSBhY3RpdmF0aW9uXG4gICogQGZvbGlvOiBGb2xpbyB0aGF0IGlzIGJlaW5nIGFjdGl2YXRlZC5cbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggYzI3ZTIyZDA2N2UzZS4uOTA0ODIxZGI0MDFmMyAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmNcbkBAIC05NjEsNiAmIzQzOzk2MSw3OSBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogd3JpdGViYWNrIGNvZGVcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XIHhhX21rX3ZhbHVlKDApXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciAtIGlzIEBmb2xpbyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXI/XG4mIzQzOyAqIEBmb2xpbzogdGhlIGZvbGlvIGJlaW5nIGV4YW1pbmVkICh0eXBpY2FsbHkgYSBzd2FwIGNhY2hlIGZvbGlvIHVuZGVyIHJlY2xhaW0pXG4mIzQzOyAqXG4mIzQzOyAqIEEgZm9saW8gaXMgYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHdoZW4gZXZlcnkgb25lIG9mIGl0cyBzd2FwIG9mZnNldHMgaG9sZHNcbiYjNDM7ICogYSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvdyAoYSByZWFsIHNoYWRvdyBvciB0aGUgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPV1xuJiM0MzsgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgQGZvbGlvIGlzIGEgd3JpdGViYWNrIGJ1ZmZlciwgaW4gd2hpY2ggY2FzZSB0aGUgcmVjbGFpbSBwYXRoXG4mIzQzOyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuXG4mIzQzOyAqL1xuJiM0Mztib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiYjNDM7XHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4mIzQzO1xuJiM0MztcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCF4YV9pc192YWx1ZSh4YV9sb2FkKHN3YXBfenN3YXBfdHJlZShlKSwgb2Zmc2V0ICYjNDM7IGkpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MgLSByZXRyaWV2ZSBhbmQgY2xlYXIgQGZvbGlvJiMzOTtzIHBhcmtlZCBzaGFkb3cocylcbiYjNDM7ICogQGZvbGlvOiB0aGUgd3JpdGViYWNrIGJ1ZmZlciBmb2xpbyAob3IgdGhlIHN3YXBpbiBmb2xpbyB0aGF0IGNvbnN1bWVkIGl0KVxuJiM0MzsgKlxuJiM0MzsgKiBSZW1vdmUgYW55IHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93cyBmb3IgQGZvbGlvJiMzOTtzIHN3YXAgb2Zmc2V0KHMpIGZyb20gdGhlXG4mIzQzOyAqIHpzd2FwIHRyZWUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdGhlIHByZXNlcnZlZCB3b3JraW5nc2V0IHNoYWRvdywgb3IgTlVMTCBpZiB0aGUgc2xvdChzKSBoYWQgbm8gc2hhZG93XG4mIzQzOyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkXG4mIzQzOyAqIHNoYWRvdyBpbnRvIHRoZSBzd2FwIHNsb3QgKGJ1ZmZlciBkcm9wcGVkKSBvciBmZWVkcyBpdCB0b1xuJiM0MzsgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoKSAoYnVmZmVyIGNvbnN1bWVkIGJ5IGEgc3dhcGluKTsgY2xlYXJpbmdcbiYjNDM7ICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LlxuJiM0MzsgKi9cbiYjNDM7dm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRzd3BfZW50cnlfdCBzd3AgPSBmb2xpby1cdTAwM2Vzd2FwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4mIzQzO1x0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7XG4mIzQzO1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4mIzQzO1xuJiM0MztcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCAmIzQzOyBpKTtcbiYjNDM7XHRcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoZSk7XG4mIzQzO1x0XHR2b2lkICpwYXJrZWQgPSB4YV9sb2FkKHRyZWUsIG9mZnNldCAmIzQzOyBpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0ICYjNDM7IGkpO1xuJiM0MztcdFx0aWYgKHBhcmtlZCAhPSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XKVxuJiM0MztcdFx0XHRzaGFkb3cgPSBwYXJrZWQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2hhZG93O1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQXR0ZW1wdHMgdG8gZnJlZSBhbiBlbnRyeSBieSBhZGRpbmcgYSBmb2xpbyB0byB0aGUgc3dhcCBjYWNoZSxcbiAgKiBkZWNvbXByZXNzaW5nIHRoZSBlbnRyeSBkYXRhIGludG8gdGhlIGZvbGlvLCBhbmQgaXNzdWluZyBhXG5AQCAtOTc2LDEyICYjNDM7MTA0OSwxNCBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbiB7XG4mIzQzO1x0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbiBcdHN0cnVjdCB4YXJyYXkgKnRyZWU7XG4gXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwZW50cnkpO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XG4gXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XG4gXHRzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307XG4mIzQzO1x0dm9pZCAqc2hhZG93O1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHQvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqL1xuQEAgLTk5MCw4ICYjNDM7MTA2NSw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuIFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbi1cdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxuLVx0XHRcdFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xuJiM0MztcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4mIzQzO1x0XHRcdFx0XHQgTk9fSU5URVJMRUFWRV9JTkRFWCwgXHUwMDI2c2hhZG93KTtcbiBcdHB1dF9zd2FwX2RldmljZShzaSk7XG4gXG4gXHQvKlxuQEAgLTEwMDMsNiAmIzQzOzEwNzgsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0ICovXG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xuJiM0MztcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFxuIFx0LypcbiBcdCAqIGZvbGlvIGlzIGxvY2tlZCwgYW5kIHRoZSBzd2FwY2FjaGUgaXMgbm93IHNlY3VyZWQgYWdhaW5zdFxuQEAgLTEwMjQsNyAmIzQzOzExMDAsMTIgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBzbG90IHdpdGggbm8gc2hhZG93IGFscmVhZHkgcmVhZHMgYmFjayBhcyBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XOlxuJiM0MztcdCAqIHRoZSBzd2FwIHRhYmxlIG1hcmtzIGEgc3dhcHBlZCBvdXQgc2xvdCB3aXRoIHhhX21rX3ZhbHVlKDApIGFuZCBob2xkc1xuJiM0MztcdCAqIHRoZSBzaGFkb3csIHdoZW4gdGhlcmUgaXMgb25lLCBpbiB0aGF0IHNhbWUgdmFsdWUuXG4mIzQzO1x0ICovXG4mIzQzO1x0eGFfc3RvcmUodHJlZSwgb2Zmc2V0LCBzaGFkb3csIEdGUF9LRVJORUwpO1xuIFxuIFx0Y291bnRfdm1fZXZlbnQoWlNXUFdCKTtcbiBcdGlmIChlbnRyeS1cdTAwM2VvYmpjZylcbkBAIC0xMDQ0LDcgJiM0MzsxMTI1LDE1IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gb3V0OlxuIFx0aWYgKHJldCkge1xuLVx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIGFsbG9jYXRpb24gYWJvdmUgb3Zlcndyb3RlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBhbmQgbm90aGluZ1xuJiM0MztcdFx0ICogaGFzIGJlZW4gcGFya2VkIGZvciBpdCB5ZXQsIHNvIHJlc3RvcmUgaXQgYXMgdGhlIGZvbGlvIGxlYXZlc1xuJiM0MztcdFx0ICogdGhlIHN3YXAgY2FjaGUsIG9yIHRoZSBldmljdGlvbiBpdCByZWNvcmRzIGlzIGxvc3QuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oc3dwZW50cnkpLCBvZmZzZXQpO1xuJiM0MztcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3cGVudHJ5LCBzaGFkb3cpO1xuJiM0MztcdFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4mIzQzO1x0XHRmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0fVxuIFx0Zm9saW9fcHV0KGZvbGlvKTtcbkBAIC0xNDg3LDYgJiM0MzsxNTc2LDE3IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcbiBcdFZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgd3JpdGViYWNrIGJ1ZmZlciB3aG9zZSBJTyBmYWlsZWQgaXMgcmVkaXJ0aWVkIGFuZCBsZWZ0IGluIHRoZVxuJiM0MztcdCAqIHN3YXAgY2FjaGUsIHNvIHJlY2xhaW0gd3JpdGVzIGl0IG91dCBhZ2Fpbi4gV3JpdGViYWNrIGFscmVhZHlcbiYjNDM7XHQgKiBkZWNpZGVkIHRoaXMgZGF0YSBiZWxvbmdzIG9uIGRpc2ssIHNvIHNlbmQgaXQgdGhlcmUgaW5zdGVhZCBvZlxuJiM0MztcdCAqIGNvbXByZXNzaW5nIGl0IGJhY2sgaW50byB6c3dhcC4gVGhpcyBhbHNvIGxlYXZlcyB0aGUgc2hhZG93XG4mIzQzO1x0ICogcGFya2VkIGZvciB0aGUgYnVmZmVyIGluIHBsYWNlLCBzbyBpdCBpcyBzdGlsbCByZXN0b3JlZCBpbnRvXG4mIzQzO1x0ICogdGhlIHNsb3Qgb25jZSB0aGUgZm9saW8gbGVhdmVzIHRoZSBzd2FwIGNhY2hlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4gXHRpZiAoIXpzd2FwX2VuYWJsZWQpXG4gXHRcdGdvdG8gY2hlY2tfb2xkO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyYjMzQ7LAogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZW50cnkmIzM0OywKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkJiMzNDssCiAgICAmIzM0O19fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB6c3dhcCBzdWJzeXN0ZW0gbG9naWMsIHNwZWNpZmljYWxseSByZWZhdWx0IHRyYWNraW5nIGFuZCBzaGFkb3cgZW50cnkgcHJlc2VydmF0aW9uIGFjcm9zcyB6c3dhcCB3cml0ZWJhY2sgYW5kIHN3YXAtaW4gcGF0aHMuIEl0IGludHJvZHVjZXMgbmV3IGhlbHBlcnMgKHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIsIHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cywgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKSBhbmQgbW9kaWZpZXMgc3dhcCBjYWNoZSBhbGxvY2F0aW9uIGFuZCB3cml0ZWJhY2sgaGFuZGxpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgd2FycmFudCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MDVlYzZiODg5YzlkYTA5YTliZDg4NzI0ZmY5YzMyMTdkMTg1YjhlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTE6MTg6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmgKaW5kZXggMzBjMTkzYTEyMDdlMS4uZGZiNzE1MzIzNmY1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvenN3YXAuaApAQCAtMzUsNiAmIzQzOzM1LDggQEAgdm9pZCB6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpOwogdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7CiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7CiBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCk7CiYjNDM7Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKICNlbHNlCiAKIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307CkBAIC02OSw2ICYjNDM7NzEsMTYgQEAgc3RhdGljIGlubGluZSBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9aU1dBUF9IICovCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCA4YmUzZDI4ZDljM2Q4Li5kMTk5NDdhM2MzMzg1IDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTMxLDYgJiM0MzszMSw3IEBAIHZvaWQgd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIHZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbywKIAkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7CiB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpOwomIzQzO3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7CiB2b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIAogLyogbW0vZm9saW8uYyAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBhMmE2M2FlMDk2N2MxLi4wMDQzYTkyMzdhOGRkIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtNDg1Nyw2ICYjNDM7NDg1Nyw3IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCXVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwogCXB0ZV90ICpwdGVwOwomIzQzOwl2b2lkICpzaGFkb3c7CiAKIAlpZiAoIXB0ZV91bm1hcF9zYW1lKHZtZikpCiAJCWdvdG8gb3V0OwpAQCAtNDk4NCw2ICYjNDM7NDk4NSwxMCBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAkJZ290byBvdXRfcGFnZTsKIAl9CiAKJiM0MzsJc2hhZG93ID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTsKJiM0MzsJaWYgKHNoYWRvdykKJiM0MzsJCXdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChmb2xpbywgc2hhZG93KTsKJiM0MzsKIAkvKgogCSAqIEtTTSBzb21ldGltZXMgaGFzIHRvIGNvcHkgb24gcmVhZCBmYXVsdHMsIGZvciBleGFtcGxlLCBpZgogCSAqIGZvbGlvLSZndDtpbmRleCBvZiBub24ta3NtIGZvbGlvcyB3b3VsZCBiZSBub25saW5lYXIgaW5zaWRlIHRoZQpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggYzMyMTJmZGVjZTliNC4uNTNmNTdhZDE5NGEzOSAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0yNDY1LDYgJiM0MzsyNDY1LDcgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDsKIAlpbnQgZXJyb3IsIG5yX3BhZ2VzLCBvcmRlcjsKIAlwZ29mZl90IG9mZnNldDsKJiM0MzsJdm9pZCAqc2hhZG93OwogCiAJVk1fQlVHX09OKCEqZm9saW9wIHx8ICF4YV9pc192YWx1ZSgqZm9saW9wKSk7CiAJaW5kZXhfZW50cnkgPSByYWRpeF90b19zd3BfZW50cnkoKmZvbGlvcCk7CkBAIC0yNTc2LDYgJiM0MzsyNTc3LDEwIEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiAJICovCiAJYXJjaF9zd2FwX3Jlc3RvcmUoZm9saW9fc3dhcChzd2FwLCBmb2xpbyksIGZvbGlvKTsKIAomIzQzOwlzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pOwomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKGZvbGlvLCBzaGFkb3cpOwomIzQzOwogCWlmIChzaG1lbV9zaG91bGRfcmVwbGFjZV9mb2xpbyhmb2xpbywgZ2ZwKSkgewogCQllcnJvciA9IHNobWVtX3JlcGxhY2VfZm9saW8oJmFtcDtmb2xpbywgZ2ZwLCBpbmZvLCBpbmRleCwgdm1hKTsKIAkJaWYgKGVycm9yKQpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oCmluZGV4IDBiNWQ1MDc3MzliY2IuLmRkZDEwOGI0MWQzM2EgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmgKQEAgLTMxMiw5ICYjNDM7MzEyLDEwIEBAIGJvb2wgc3dhcF9jYWNoZV9oYXNfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpOwogc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7CiB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpOwogdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAotCQkJCSAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpOwomIzQzO3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssCiYjNDM7CQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCwKJiM0MzsJCQkJICAgICAgIHZvaWQgKipzaGFkb3dwKTsKIC8qIEJlbG93IGhlbHBlcnMgcmVxdWlyZSB0aGUgY2FsbGVyIHRvIGxvY2sgYW5kIHBhc3MgaW4gdGhlIHN3YXAgY2x1c3Rlci4gKi8KIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTsKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCAzMDU4NzdlMWY0ZDdiLi5lODBhNjk0ZGRkYjQ3IDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC0yNCw2ICYjNDM7MjQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NobWVtX2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3lzY3RsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3dhcF9vcHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvenN3YXAuaCZndDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3N3YXBfdGFibGUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3N3YXAuaCYjMzQ7CkBAIC0yNjMsMTIgJiM0MzsyNjQsMjEgQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCXVuc2lnbmVkIGludCBjaV9zdGFydCwgY2lfb2ZmLCBjaV9lbmQ7CiAJYm9vbCBmb2xpb19zd2FwcGVkID0gZmFsc2UsIG5lZWRfZnJlZSA9IGZhbHNlOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CXZvaWQgKnNoYWRvd19wYXJrZWQ7CiAKIAlWTV9XQVJOX09OX09OQ0UoX19zd2FwX2VudHJ5X3RvX2NsdXN0ZXIoZW50cnkpICE9IGNpKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pOwogCiYjNDM7CS8qCiYjNDM7CSAqIEEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlciBwYXJrZWQgdGhlIHNsb3QmIzM5O3Mgb3JpZ2luYWwgc2hhZG93IGluIHRoZQomIzQzOwkgKiB6c3dhcCB0cmVlOiByZXN0b3JlIGl0IGludG8gdGhlIHNsb3QgZm9yIGxhdGVyIHN3YXAtaW4uCiYjNDM7CSAqLwomIzQzOwlzaGFkb3dfcGFya2VkID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTsKJiM0MzsJaWYgKHNoYWRvd19wYXJrZWQpCiYjNDM7CQlzaGFkb3cgPSBzaGFkb3dfcGFya2VkOwomIzQzOwogCXNpID0gX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpOwogCWNpX3N0YXJ0ID0gc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KTsKIAljaV9lbmQgPSBjaV9zdGFydCAmIzQzOyBucl9wYWdlczsKQEAgLTQwOSw3ICYjNDM7NDE5LDggQEAgdm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJCQkJCXN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCwKIAkJCQkJdW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKLQkJCQkJc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiYjNDM7CQkJCQlzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCwKJiM0MzsJCQkJCXZvaWQgKipzaGFkb3dwKQogewogCWludCBlcnI7CiAJc3dwX2VudHJ5X3QgZW50cnk7CkBAIC00ODMsMzcgJiM0Mzs0OTQsNDIgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAKIAkvKiBtZW1zdyB1bmNoYXJnZXMgc3dhcCB3aGVuIGZvbGlvIGlzIGFkZGVkIHRvIHN3YXAgY2FjaGUgKi8KIAltZW1jZzFfc3dhcGluKGZvbGlvKTsKLQlpZiAoc2hhZG93KQotCQl3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7CiAKIAlub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCBucl9wYWdlcyk7CiAJbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTsKIAotCS8qIENhbGxlciB3aWxsIGluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgbmV3X2ZvbGlvICovCi0JZm9saW9fYWRkX2xydShmb2xpbyk7CiYjNDM7CWlmIChzaGFkb3dwKQomIzQzOwkJKnNoYWRvd3AgPSBzaGFkb3c7CiYjNDM7CiAJcmV0dXJuIGZvbGlvOwogfQogCiAvKioKLSAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLgomIzQzOyAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuCiAgKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdAogICogQGdmcDogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MKICAqIEBvcmRlcnM6IGFsbG9jYXRpb24gb3JkZXJzLCBtdXN0IGJlIG5vbiB6ZXJvCiAgKiBAdm1mOiBmYXVsdCBpbmZvcm1hdGlvbgogICogQG1wb2w6IE5VTUEgbWVtb3J5IGFsbG9jYXRpb24gcG9saWN5IHRvIGJlIGFwcGxpZWQKICAqIEBpbHg6IE5VTUEgaW50ZXJsZWF2ZSBpbmRleCwgZm9yIHVzZSBvbmx5IHdoZW4gTVBPTF9JTlRFUkxFQVZFCiYjNDM7ICogQHNoYWRvd3A6IFJldHVybnMgdGhlIHNoYWRvdyB0aGUgYWxsb2NhdGlvbiBkaXNwbGFjZWQsIE5VTEwgdG8gaWdub3JlCiAgKgogICogQWxsb2NhdGUgYSBmb2xpbyBpbiB0aGUgc3dhcCBjYWNoZSBmb3Igb25lIHN3YXAgc2xvdCwgdHlwaWNhbGx5IGJlZm9yZQogICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieQogICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLgogICoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgZm9saW8gaXMgbG9ja2VkIGFuZCBpcyBOT1Qgb24gdGhlIExSVS4gVGhlIGNhbGxlciBtdXN0IGVpdGhlcgomIzQzOyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZQomIzQzOyAqIGl0IGRpcmVjdGx5IG9uY2UgZG9uZTsgYSBmb2xpbyBsZWZ0IG9mZiB0aGUgTFJVIGlzIHVucmVjbGFpbWFibGUgYW5kIGxlYWtzLgomIzQzOyAqCiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy4KICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwCiAgKiBjYWNoZS4gUmV0dXJucyBlcnJvciBjb2RlIGlmIGZhaWxlZCBkdWUgdG8gcmFjZSwgT09NIG9yIGludmFsaWQgYXJndW1lbnRzLgogICovCi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAotCQkJCSAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsCiYjNDM7CQkJCSAgICAgICB2b2lkICoqc2hhZG93cCkKIHsKIAlpbnQgb3JkZXIsIGVycjsKIAlzdHJ1Y3QgZm9saW8gKnJldDsKQEAgLTUyOCw3ICYjNDM7NTQ0LDcgQEAgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCwKIAogCWRvIHsKIAkJcmV0ID0gX19zd2FwX2NhY2hlX2FsbG9jKGNpLCB0YXJnX2VudHJ5LCBnZnAsIG9yZGVyLAotCQkJCQkgdm1mLCBtcG9sLCBpbHgpOwomIzQzOwkJCQkJIHZtZiwgbXBvbCwgaWx4LCBzaGFkb3dwKTsKIAkJaWYgKCFJU19FUlIocmV0KSkKIAkJCWJyZWFrOwogCQllcnIgPSBQVFJfRVJSKHJldCk7CkBAIC02NDQsMTcgJiM0Mzs2NjAsMjMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LAogCQlwZ29mZl90IGlseCwgYm9vbCByZWFkYWhlYWQpCiB7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJdm9pZCAqc2hhZG93ID0gTlVMTDsKIAogCWRvIHsKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJCWlmIChmb2xpbykKIAkJCXJldHVybiBmb2xpbzsKLQkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTsKJiM0MzsJCWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwKJiM0MzsJCQkJCQkgaWx4LCAmYW1wO3NoYWRvdyk7CiAJfSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7CiAKIAlpZiAoSVNfRVJSX09SX05VTEwoZm9saW8pKQogCQlyZXR1cm4gTlVMTDsKIAomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwomIzQzOwomIzQzOwlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKIAlzd2FwX3JlYWRfZm9saW8oY3R4LCBmb2xpbyk7CiAJaWYgKHJlYWRhaGVhZCkgewogCQlmb2xpb19zZXRfcmVhZGFoZWFkKGZvbGlvKTsKQEAgLTY4NSwxNyAmIzQzOzcwNywyMyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLAogewogCXN0cnVjdCBzd2FwX2lvX2N0eCBjdHggPSB7fTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwl2b2lkICpzaGFkb3cgPSBOVUxMOwogCiAJZG8gewogCQlmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTsKIAkJaWYgKGZvbGlvKQogCQkJcmV0dXJuIGZvbGlvOwotCQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7CiYjNDM7CQlmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwKJiM0MzsJCQkJCQkgaWx4LCAmYW1wO3NoYWRvdyk7CiAJfSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7CiAKIAlpZiAoSVNfRVJSKGZvbGlvKSkKIAkJcmV0dXJuIGZvbGlvOwogCiYjNDM7CWlmIChzaGFkb3cpCiYjNDM7CQl3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7CiYjNDM7CiYjNDM7CWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXN3YXBfcmVhZF9mb2xpbygmYW1wO2N0eCwgZm9saW8pOwogCXN3YXBfcmVhZF9zdWJtaXQoJmFtcDtjdHgpOwogCXJldHVybiBmb2xpbzsKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDQ4ZDNjZDQwZGVmZGIuLjYxMDFmOTBlOTFkMmEgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtMTg4NSw3ICYjNDM7MTg4NSw3IEBAIHZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpCiAgKiAgIENQVTEJCQkJQ1BVMgogICogICBkb19zd2FwX3BhZ2UoKQogICogICAgIC4uLgkJCQlzd2Fwb2ZmJiM0Mztzd2Fwb24KLSAqICAgICBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKCkKJiM0MzsgKiAgICAgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKCkKICAqICAgICAgIC8vIGNoZWNrIHN3YXBfbWFwCiAgKiAgICAgLy8gdmVyaWZ5IFBURSBub3QgY2hhbmdlZAogICoKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNDBkM2YxYjQ4YTc0Yy4uMWNhNjQ4OWU1MDEyMiAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTQ4LDYgJiM0Mzs0OCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcHJlZmV0Y2guaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcmludGsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kYXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvenN3YXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wc2kuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdld2Fsay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NobWVtX2ZzLmgmZ3Q7CkBAIC03NTMsNyAmIzQzOzc1NCw4IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7CiAJCXN3cF9lbnRyeV90IHN3YXAgPSBmb2xpby0mZ3Q7c3dhcDsKIAotCQlpZiAocmVjbGFpbWVkICZhbXA7JmFtcDsgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSkKJiM0MzsJCWlmIChyZWNsYWltZWQgJmFtcDsmYW1wOyAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihmb2xpbykpCiAJCQlzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpOwogCQlfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7CiAJCV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpOwpkaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jCmluZGV4IDg0MTJmNDg0MGFlMzUuLjhlNDViMGJhZWIzNmQgMTAwNjQ0Ci0tLSBhL21tL3dvcmtpbmdzZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmMKQEAgLTUzNiwxNiAmIzQzOzUzNiw4IEBAIGJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCwKIAlyZXR1cm4gcmVmYXVsdF9kaXN0YW5jZSAmbHQ7PSB3b3JraW5nc2V0X3NpemU7CiB9CiAKLS8qKgotICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uCi0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby4KLSAqIEBzaGFkb3c6IFNoYWRvdyBlbnRyeSBvZiB0aGUgZXZpY3RlZCBmb2xpby4KLSAqCi0gKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHkKLSAqIGV2aWN0ZWQgZm9saW8gaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5vZGUgYW5kIHRoZSBtZW1jZyB3aG9zZSBtZW1vcnkKLSAqIHByZXNzdXJlIGNhdXNlZCB0aGUgZXZpY3Rpb24uCi0gKi8KLXZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKJiM0MztzdGF0aWMgdm9pZCBfX3dvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3csCiYjNDM7CQkJCSBib29sIGxydV9tYW5hZ2VkKQogewogCWJvb2wgZmlsZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CkBAIC01NzcsNyAmIzQzOzU2OSwxNiBAQCB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCiAJaWYgKCF3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHNoYWRvdywgZmlsZSwgJmFtcDt3b3JraW5nc2V0LCB0cnVlKSkKIAkJZ290byBvdXQ7CiAKLQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKJiM0MzsJLyoKJiM0MzsJICogQW4gTFJVLW1hbmFnZWQgZm9saW8gbWF5IHNpdCBpbiBhIHBlci1DUFUgYmF0Y2gsIHdoaWNoIGNhbm5vdCBiZQomIzQzOwkgKiBkZXRlcm1pbmVkIGhlcmU6IHNldHRpbmcgdGhlIGZsYWcgd291bGQgcmFjZSB0aGUgZHJhaW4gYW5kIGxlYXZlIGl0CiYjNDM7CSAqIGRpc2FncmVlaW5nIHdpdGggdGhlIGxpc3QuIGZvbGlvX2FjdGl2YXRlKCkgaXMgc2FmZSwgYnV0IG1pc3NlcyB0aGUKJiM0MzsJICogYWN0aXZhdGlvbiBmb3Igc3VjaCBhIGZvbGlvLgomIzQzOwkgKi8KJiM0MzsJaWYgKGxydV9tYW5hZ2VkKQomIzQzOwkJZm9saW9fYWN0aXZhdGUoZm9saW8pOwomIzQzOwllbHNlCiYjNDM7CQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKIAl3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChscnV2ZWMsIG5yKTsKIAltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9CQVNFICYjNDM7IGZpbGUsIG5yKTsKIApAQCAtNTkwLDYgJiM0Mzs1OTEsNDMgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQogCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLgomIzQzOyAqIEBmb2xpbzogVGhlIGZyZXNobHkgYWxsb2NhdGVkIHJlcGxhY2VtZW50IGZvbGlvLgomIzQzOyAqIEBzaGFkb3c6IFNoYWRvdyBlbnRyeSBvZiB0aGUgZXZpY3RlZCBmb2xpby4KJiM0MzsgKgomIzQzOyAqIENhbGN1bGF0ZXMgYW5kIGV2YWx1YXRlcyB0aGUgcmVmYXVsdCBkaXN0YW5jZSBvZiB0aGUgcHJldmlvdXNseQomIzQzOyAqIGV2aWN0ZWQgZm9saW8gaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5vZGUgYW5kIHRoZSBtZW1jZyB3aG9zZSBtZW1vcnkKJiM0MzsgKiBwcmVzc3VyZSBjYXVzZWQgdGhlIGV2aWN0aW9uLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQGZvbGlvIG11c3QgYmUgbG9ja2VkIGFuZCBub3Qgb24gdGhlIExSVSB5ZXQsIHRoZSBjYWxsZXIgYWRkcwomIzQzOyAqIGl0IHdpdGggZm9saW9fYWRkX2xydSgpIGFmdGVyd2FyZHMuCiYjNDM7ICovCiYjNDM7dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQomIzQzO3sKJiM0MzsJX193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkKJiM0MzsgKiBldmljdGVkIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgTFJVLgomIzQzOyAqIEBmb2xpbzogVGhlIGZvbGlvIHRoZSBldmljdGlvbiBpcyByZWZhdWx0ZWQgaW50by4KJiM0MzsgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uCiYjNDM7ICoKJiM0MzsgKiBMaWtlIHdvcmtpbmdzZXRfcmVmYXVsdCgpLCBidXQgZm9yIGEgZm9saW8gdGhlIGNhbGxlciBoYXMgYWxyZWFkeSBhZGRlZAomIzQzOyAqIHRvIHRoZSBMUlUsIHdoaWNoIGhhcyB0byBiZSBhY3RpdmF0ZWQgYnkgbW92aW5nIGl0IGJldHdlZW4gdGhlIGxpc3RzCiYjNDM7ICogcmF0aGVyIHRoYW4gYnkgc2V0dGluZyBQR19hY3RpdmUuCiYjNDM7ICoKJiM0MzsgKiBUaGUgYWN0aXZhdGlvbiBpcyBiZXN0IGVmZm9ydDogYSBmb2xpbyBzdGlsbCBzaXR0aW5nIGluIGEgcGVyLUNQVSBMUlUKJiM0MzsgKiBiYXRjaCBjYW5ub3QgYmUgbW92ZWQgeWV0IGFuZCBpcyBsZWZ0IGluYWN0aXZlLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQGZvbGlvIG11c3QgYmUgbG9ja2VkIGFuZCBhbHJlYWR5IGFkZGVkIHRvIHRoZSBMUlUuCiYjNDM7ICovCiYjNDM7dm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQomIzQzO3sKJiM0MzsJX193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgdHJ1ZSk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB3b3JraW5nc2V0X2FjdGl2YXRpb24gLSBub3RlIGEgcGFnZSBhY3RpdmF0aW9uCiAgKiBAZm9saW86IEZvbGlvIHRoYXQgaXMgYmVpbmcgYWN0aXZhdGVkLgpkaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmMKaW5kZXggYzI3ZTIyZDA2N2UzZS4uOTA0ODIxZGI0MDFmMyAxMDA2NDQKLS0tIGEvbW0venN3YXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jCkBAIC05NjEsNiAmIzQzOzk2MSw3OSBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIHdyaXRlYmFjayBjb2RlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwomIzQzOwomIzQzOyNkZWZpbmUgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVyB4YV9ta192YWx1ZSgwKQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIgLSBpcyBAZm9saW8gYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyPwomIzQzOyAqIEBmb2xpbzogdGhlIGZvbGlvIGJlaW5nIGV4YW1pbmVkICh0eXBpY2FsbHkgYSBzd2FwIGNhY2hlIGZvbGlvIHVuZGVyIHJlY2xhaW0pCiYjNDM7ICoKJiM0MzsgKiBBIGZvbGlvIGlzIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlciB3aGVuIGV2ZXJ5IG9uZSBvZiBpdHMgc3dhcCBvZmZzZXRzIGhvbGRzCiYjNDM7ICogYSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvdyAoYSByZWFsIHNoYWRvdyBvciB0aGUgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVwomIzQzOyAqIHNlbnRpbmVsKSBpbiB0aGUgenN3YXAgdHJlZSByYXRoZXIgdGhhbiBhIGxpdmUgenN3YXAgZW50cnkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgQGZvbGlvIGlzIGEgd3JpdGViYWNrIGJ1ZmZlciwgaW4gd2hpY2ggY2FzZSB0aGUgcmVjbGFpbSBwYXRoCiYjNDM7ICogbXVzdCBub3QgbWludCBhIGZyZXNoIHdvcmtpbmdzZXQgc2hhZG93IGZvciBpdC4KJiM0MzsgKi8KJiM0Mztib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLSZndDtzd2FwOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwomIzQzOwlwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwomIzQzOwomIzQzOwlpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCAmIzQzOyBpKTsKJiM0MzsKJiM0MzsJCWlmICgheGFfaXNfdmFsdWUoeGFfbG9hZChzd2FwX3pzd2FwX3RyZWUoZSksIG9mZnNldCAmIzQzOyBpKSkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MgLSByZXRyaWV2ZSBhbmQgY2xlYXIgQGZvbGlvJiMzOTtzIHBhcmtlZCBzaGFkb3cocykKJiM0MzsgKiBAZm9saW86IHRoZSB3cml0ZWJhY2sgYnVmZmVyIGZvbGlvIChvciB0aGUgc3dhcGluIGZvbGlvIHRoYXQgY29uc3VtZWQgaXQpCiYjNDM7ICoKJiM0MzsgKiBSZW1vdmUgYW55IHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93cyBmb3IgQGZvbGlvJiMzOTtzIHN3YXAgb2Zmc2V0KHMpIGZyb20gdGhlCiYjNDM7ICogenN3YXAgdHJlZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdGhlIHByZXNlcnZlZCB3b3JraW5nc2V0IHNoYWRvdywgb3IgTlVMTCBpZiB0aGUgc2xvdChzKSBoYWQgbm8gc2hhZG93CiYjNDM7ICogKHNlbnRpbmVsIG9ubHkpIG9yIG5vdGhpbmcgcGFya2VkLiBUaGUgY2FsbGVyIGVpdGhlciByZXN0b3JlcyB0aGUgcmV0dXJuZWQKJiM0MzsgKiBzaGFkb3cgaW50byB0aGUgc3dhcCBzbG90IChidWZmZXIgZHJvcHBlZCkgb3IgZmVlZHMgaXQgdG8KJiM0MzsgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoKSAoYnVmZmVyIGNvbnN1bWVkIGJ5IGEgc3dhcGluKTsgY2xlYXJpbmcKJiM0MzsgKiBoZXJlIGVuc3VyZXMgdGhlIHR3byBwYXRocyBuZXZlciBkb3VibGUtY291bnQuCiYjNDM7ICovCiYjNDM7dm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzd3BfZW50cnlfdCBzd3AgPSBmb2xpby0mZ3Q7c3dhcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7CiYjNDM7CXZvaWQgKnNoYWRvdyA9IE5VTEw7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJaWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCAmIzQzOyBpKTsKJiM0MzsJCXN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoZSk7CiYjNDM7CQl2b2lkICpwYXJrZWQgPSB4YV9sb2FkKHRyZWUsIG9mZnNldCAmIzQzOyBpKTsKJiM0MzsKJiM0MzsJCWlmICgheGFfaXNfdmFsdWUocGFya2VkKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXhhX2VyYXNlKHRyZWUsIG9mZnNldCAmIzQzOyBpKTsKJiM0MzsJCWlmIChwYXJrZWQgIT0gWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVykKJiM0MzsJCQlzaGFkb3cgPSBwYXJrZWQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHNoYWRvdzsKJiM0Mzt9CiYjNDM7CiAvKgogICogQXR0ZW1wdHMgdG8gZnJlZSBhbiBlbnRyeSBieSBhZGRpbmcgYSBmb2xpbyB0byB0aGUgc3dhcCBjYWNoZSwKICAqIGRlY29tcHJlc3NpbmcgdGhlIGVudHJ5IGRhdGEgaW50byB0aGUgZm9saW8sIGFuZCBpc3N1aW5nIGEKQEAgLTk3NiwxMiAmIzQzOzEwNDksMTQgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAkJCQkgc3dwX2VudHJ5X3Qgc3dwZW50cnkpCiB7CiYjNDM7CXN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7CiAJc3RydWN0IHhhcnJheSAqdHJlZTsKIAlwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwZW50cnkpOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IG1lbXBvbGljeSAqbXBvbDsKIAlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7CiAJc3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9OwomIzQzOwl2b2lkICpzaGFkb3c7CiAJaW50IHJldCA9IDA7CiAKIAkvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqLwpAQCAtOTkwLDggJiM0MzsxMDY1LDggQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAkJcmV0dXJuIC1FRVhJU1Q7CiAKIAltcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpOwotCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLAotCQkJCSAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTsKJiM0MzsJZm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCwKJiM0MzsJCQkJCSBOT19JTlRFUkxFQVZFX0lOREVYLCAmYW1wO3NoYWRvdyk7CiAJcHV0X3N3YXBfZGV2aWNlKHNpKTsKIAogCS8qCkBAIC0xMDAzLDYgJiM0MzsxMDc4LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAkgKi8KIAlpZiAoSVNfRVJSKGZvbGlvKSkKIAkJcmV0dXJuIFBUUl9FUlIoZm9saW8pOwomIzQzOwlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKIAogCS8qCiAJICogZm9saW8gaXMgbG9ja2VkLCBhbmQgdGhlIHN3YXBjYWNoZSBpcyBub3cgc2VjdXJlZCBhZ2FpbnN0CkBAIC0xMDI0LDcgJiM0MzsxMTAwLDEyIEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJCWdvdG8gb3V0OwogCX0KIAotCXhhX2VyYXNlKHRyZWUsIG9mZnNldCk7CiYjNDM7CS8qCiYjNDM7CSAqIEEgc2xvdCB3aXRoIG5vIHNoYWRvdyBhbHJlYWR5IHJlYWRzIGJhY2sgYXMgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVzoKJiM0MzsJICogdGhlIHN3YXAgdGFibGUgbWFya3MgYSBzd2FwcGVkIG91dCBzbG90IHdpdGggeGFfbWtfdmFsdWUoMCkgYW5kIGhvbGRzCiYjNDM7CSAqIHRoZSBzaGFkb3csIHdoZW4gdGhlcmUgaXMgb25lLCBpbiB0aGF0IHNhbWUgdmFsdWUuCiYjNDM7CSAqLwomIzQzOwl4YV9zdG9yZSh0cmVlLCBvZmZzZXQsIHNoYWRvdywgR0ZQX0tFUk5FTCk7CiAKIAljb3VudF92bV9ldmVudChaU1dQV0IpOwogCWlmIChlbnRyeS0mZ3Q7b2JqY2cpCkBAIC0xMDQ0LDcgJiM0MzsxMTI1LDE1IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAKIG91dDoKIAlpZiAocmV0KSB7Ci0JCXN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgYWxsb2NhdGlvbiBhYm92ZSBvdmVyd3JvdGUgdGhlIHNsb3QmIzM5O3Mgc2hhZG93IGFuZCBub3RoaW5nCiYjNDM7CQkgKiBoYXMgYmVlbiBwYXJrZWQgZm9yIGl0IHlldCwgc28gcmVzdG9yZSBpdCBhcyB0aGUgZm9saW8gbGVhdmVzCiYjNDM7CQkgKiB0aGUgc3dhcCBjYWNoZSwgb3IgdGhlIGV2aWN0aW9uIGl0IHJlY29yZHMgaXMgbG9zdC4KJiM0MzsJCSAqLwomIzQzOwkJY2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhzd3BlbnRyeSksIG9mZnNldCk7CiYjNDM7CQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dwZW50cnksIHNoYWRvdyk7CiYjNDM7CQlzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTsKJiM0MzsJCWZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7CiAJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAJfQogCWZvbGlvX3B1dChmb2xpbyk7CkBAIC0xNDg3LDYgJiM0MzsxNTc2LDE3IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbykKIAlWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7CiAJVk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpOwogCiYjNDM7CS8qCiYjNDM7CSAqIEEgd3JpdGViYWNrIGJ1ZmZlciB3aG9zZSBJTyBmYWlsZWQgaXMgcmVkaXJ0aWVkIGFuZCBsZWZ0IGluIHRoZQomIzQzOwkgKiBzd2FwIGNhY2hlLCBzbyByZWNsYWltIHdyaXRlcyBpdCBvdXQgYWdhaW4uIFdyaXRlYmFjayBhbHJlYWR5CiYjNDM7CSAqIGRlY2lkZWQgdGhpcyBkYXRhIGJlbG9uZ3Mgb24gZGlzaywgc28gc2VuZCBpdCB0aGVyZSBpbnN0ZWFkIG9mCiYjNDM7CSAqIGNvbXByZXNzaW5nIGl0IGJhY2sgaW50byB6c3dhcC4gVGhpcyBhbHNvIGxlYXZlcyB0aGUgc2hhZG93CiYjNDM7CSAqIHBhcmtlZCBmb3IgdGhlIGJ1ZmZlciBpbiBwbGFjZSwgc28gaXQgaXMgc3RpbGwgcmVzdG9yZWQgaW50bwomIzQzOwkgKiB0aGUgc2xvdCBvbmNlIHRoZSBmb2xpbyBsZWF2ZXMgdGhlIHN3YXAgY2FjaGUuCiYjNDM7CSAqLwomIzQzOwlpZiAoenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihmb2xpbykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJaWYgKCF6c3dhcF9lbmFibGVkKQogCQlnb3RvIGNoZWNrX29sZDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODQyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCwgZ2l2ZW4gaXRzIHRvdWNoIHBvaW50cyB3aXRoaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtbS8pLCBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGZ1bmRhbWVudGFsIGNoYW5nZXMgaGVyZSwgc28gd2UgbmVlZCB0byBiZSB0aG9yb3VnaC4KCkZpcnN0LCBJIHNlZSB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2Yga2V5IGZpbGVzOiBgaW5jbHVkZS9saW51eC96c3dhcC5oYCwgYG1tL2ludGVybmFsLmhgLCBgbW0vbWVtb3J5LmNgLCBgbW0vc2htZW0uY2AsIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBmaWxlLmNgLCBgbW0vdm1zY2FuLmNgLCBgbW0vd29ya2luZ3NldC5jYCwgYW5kIGBtbS96c3dhcC5jYC4gQSBzaWduaWZpY2FudCBvdmVybGFwIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzcGFjZSBtZWFucyB0aGlzIHBhdGNoIGlzIGludGVyZXN0aW5nIGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nICp3aGF0KiBzcGVjaWZpY2FsbHkgaGFzIGNoYW5nZWQuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIHpzd2FwLCBzd2FwIGNhY2hlIGJlaGF2aW9yLCB3b3JraW5nc2V0IHJlZmF1bHQgdHJhY2tpbmcsIGFuZCBzd2FwLWluIGxvZ2ljIHdpdGhpbiBgZG9fc3dhcF9wYWdlYCBhbmQgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGFuZCB0aGUgd3JpdGViYWNrIGluIHpzd2FwLiBUaGVzZSBhcmUgYWxsIGNvcmUgZnVuY3Rpb25hbGl0aWVzLCBhbmQgYW55IHN1YnRsZSBjaGFuZ2UgaW4gdGhlc2UgYXJlYXMgY291bGQgYmUgYSBwb3RlbnRpYWwgYnVnIHdhaXRpbmcgdG8gYmUgZm91bmQuCgpOb3csIGxldCYjMzk7cyBleGFtaW5lIHRoZSBtb2RpZmllZCBsb2dpYyBpbiBkZXRhaWw6IFRoZSBpbnRyb2R1Y2VkL21vZGlmaWVkIGZ1bmN0aW9ucywgbGlrZSBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCwgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCwgYF9fcmVtb3ZlX21hcHBpbmdgLCB0aGUgaGFuZGxpbmcgb2Ygc2hhZG93cywgd3JpdGViYWNrIGNoYW5nZXMuIFRoaXMgY2xlYXJseSBzaG93cyBzdWJzdGFudGlhbCBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGVyZSYjMzk7cyBhIGxvdCBvZiBwb3RlbnRpYWwgZm9yIHN5emthbGxlciB0byB1bmNvdmVyIHVuZXhwZWN0ZWQgc3RhdGVzIG9yIGludGVyYWN0aW9ucyBoZXJlLgoKUmVnYXJkaW5nICYjMzQ7cnVsZXMsJiMzNDsgSSBzZWUgdGhhdCB0aGlzIHBhdGNoIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGV4ZWN1dGlvbi4gVGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgZmxhZyBpcyBzZXQgdG8gVFJVRSwgYXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgY29yZSBzdWJzeXN0ZW1zIHdpdGggbG9naWMgbW9kaWZpY2F0aW9ucyBpbiB0aGUgd29ya2luZ3NldCBsaWZlY3ljbGUgYW5kIHpzd2FwIHdyaXRlYmFjayBoYW5kbGluZy4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuCgpOZXh0IHN0ZXA6IEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoYXQgc3BlY2lmaWMgS2NvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZCB0byBlbmFibGUgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHksIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBaU1dBUC4gSSYjMzk7bGwgdXNlIGdyZXBwZXIgb3IgZmlsZSByZWFkaW5nIHRvIGxvb2sgZm9yIFpTV0FQIGFuZCByZWxhdGVkIGNvbmZpZ3MgdG8gZW5zdXJlIHN5emthbGxlciBjYW4gcmVhY2ggYWxsIGFmZmVjdGVkIGNvZGUgcGF0aHMuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBkZWZpbmUgdGhlIGNvbmZpZ3VyYXRpb25zIG5lY2Vzc2FyeSB0byBhY2N1cmF0ZWx5IGZ1enogdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxuLS1cbm1tL0tjb25maWctMjEtXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxubW0vS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMzQtXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctNDQtXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTc2LVxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcbm1tL0tjb25maWctNzgtXHRib29sIFwmIzM0O0RlZmxhdGVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgyLVxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xubW0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7TFpPXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OC1cbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcbm1tL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQtXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XG5tbS9LY29uZmlnLTk2LVx0Ym9vbCBcJiMzNDtMWjRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwMC1cbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcbm1tL0tjb25maWctMTAyLVx0Ym9vbCBcJiMzNDtMWjRIQ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTA2LVxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXG5tbS9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxubW0vS2NvbmZpZy0xMTMtXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MDkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBaU1dBUCBEZXBlbmRlbmNpZXMgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgWlNXQVBgIGNvbmZpZ3VyYXRpb24gYW5kIGl0cyBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgYG1tL0tjb25maWdgIGZpbGUuIEkmIzM5O2xsIGp1bXAgcmlnaHQgdG8gYXJvdW5kIGxpbmUgMjAsIGFzIHRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudC1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRlbmQgdG8gYmUgZ3JvdXBlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3Igb3B0aW9ucyAqbXVzdCogYmUgZW5hYmxlZCBvciBhcmUgcmVxdWlyZWQgYmVmb3JlIGBaU1dBUGAgaXMgZXZlbiBwcmVzZW50ZWQgYXMgYSB2YWxpZCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyB3aWxsIHNhdmUgbWUgdGltZSBkZWJ1Z2dpbmcgZG93biB0aGUgbGluZTsgdGhlcmUmIzM5O3Mgbm8gcG9pbnQgY2hlY2tpbmcgKndoeSogWlNXQVAgaXMgZGlzYWJsZWQgd2l0aG91dCB2ZXJpZnlpbmcgaXRzIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBsb29raW5nIGZvciBkaXJlY3QgZGVwZW5kZW5jaWVzLCBsaWtlIGBFWFBFUklNRU5UQUxgLCBvciBwb3RlbnRpYWxseSBpbmRpcmVjdCBvbmVzIHRocm91Z2ggb3RoZXIgZmVhdHVyZSBvcHRpb25zIHRoYXQgbXVzdCBiZSBhY3RpdmUgYmVmb3JlIHRoZSBgWlNXQVBgIG9wdGlvbiBpcyBwcmVzZW50LiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgaW52b2x2ZSBgYm9vbGAgb3IgYHRyaXN0YXRlYCBvcHRpb25zIGFuZCBzb21lIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdG1lbnUgXCYjMzQ7TWVtb3J5IE1hbmFnZW1lbnQgb3B0aW9uc1wmIzM0O1xuICAgNDpcdFxuICAgNTpcdCNcbiAgIDY6XHQjIEZvciBzb21lIHJlYXNvbiBtaWNyb2JsYXplIGFuZCBuaW9zMiBoYXJkIGNvZGUgU1dBUD1uLiAgSG9wZWZ1bGx5IHdlIGNhblxuICAgNzpcdCMgYWRkIHByb3BlciBTV0FQIHN1cHBvcnQgdG8gdGhlbSwgaW4gd2hpY2ggY2FzZSB0aGlzIGNhbiBiZSByZW1vdmUuXG4gICA4Olx0I1xuICAgOTpcdGNvbmZpZyBBUkNIX05PX1NXQVBcbiAgMTA6XHRcdGJvb2xcbiAgMTE6XHRcbiAgMTI6XHRtZW51Y29uZmlnIFNXQVBcbiAgMTM6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXCYjMzQ7XG4gIDE0Olx0XHRkZXBlbmRzIG9uIE1NVSBcdTAwMjZcdTAwMjYgQkxPQ0sgXHUwMDI2XHUwMDI2ICFBUkNIX05PX1NXQVBcbiAgMTU6XHRcdGRlZmF1bHQgeVxuICAxNjpcdFx0aGVscFxuICAxNzpcdFx0ICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNob29zZSB3aGV0aGVyIHlvdSB3YW50IHRvIGhhdmUgc3VwcG9ydFxuICAxODpcdFx0ICBmb3Igc28gY2FsbGVkIHN3YXAgZGV2aWNlcyBvciBzd2FwIGZpbGVzIGluIHlvdXIga2VybmVsIHRoYXQgYXJlXG4gIDE5Olx0XHQgIHVzZWQgdG8gcHJvdmlkZSBtb3JlIHZpcnR1YWwgbWVtb3J5IHRoYW4gdGhlIGFjdHVhbCBSQU0gcHJlc2VudFxuICAyMDpcdFx0ICBpbiB5b3VyIGNvbXB1dGVyLiAgSWYgdW5zdXJlIHNheSBZLlxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBaU1dBUFxuICAyMzpcdFx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIFNXQVBcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9cbiAgMjY6XHRcdHNlbGVjdCBaU01BTExPQ1xuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBBIGxpZ2h0d2VpZ2h0IGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMuICBJdCB0YWtlc1xuICAyOTpcdFx0ICBwYWdlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG9cbiAgMzA6XHRcdCAgY29tcHJlc3MgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFJBTS1iYXNlZCBtZW1vcnkgcG9vbC5cbiAgMzE6XHRcdCAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvbiBzd2FwIGRldmljZSBhbmQsXG4gIDMyOlx0XHQgIGluIHRoZSBjYXNlIHdoZXJlIGRlY29tcHJlc3NpbmcgZnJvbSBSQU0gaXMgZmFzdGVyIHRoYW4gc3dhcCBkZXZpY2VcbiAgMzM6XHRcdCAgcmVhZHMsIGNhbiBhbHNvIGltcHJvdmUgd29ya2xvYWQgcGVyZm9ybWFuY2UuXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbiAgMzY6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gWlNXQVBcbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgSWYgc2VsZWN0ZWQsIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIHdpbGwgYmUgZW5hYmxlZFxuICA0MDpcdFx0ICBhdCBib290LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBkaXNhYmxlZC5cbiAgNDE6XHRcbiAgNDI6XHRcdCAgVGhlIHNlbGVjdGlvbiBtYWRlIGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIGtlcm5lbFxuICA0MzpcdFx0ICBjb21tYW5kIGxpbmUgJiMzOTt6c3dhcC5lbmFibGVkPSYjMzk7IG9wdGlvbi5cbiAgNDQ6XHRcbiAgNDU6XHRjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxuICA0NjpcdFx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4gIDQ3Olx0XHRkZXBlbmRzIG9uIFpTV0FQXG4gIDQ4Olx0XHRkZWZhdWx0IG5cbiAgNDk6XHRcdGhlbHBcbiAgNTA6XHRcdCAgSWYgc2VsZWN0ZWQsIHRoZSB6c3dhcCBzaHJpbmtlciB3aWxsIGJlIGVuYWJsZWQsIGFuZCB0aGUgcGFnZXNcbiAgNTE6XHRcdCAgc3RvcmVkIGluIHRoZSB6c3dhcCBwb29sIHdpbGwgYmVjb21lIGF2YWlsYWJsZSBmb3IgcmVjbGFpbSAoaS5lXG4gIDUyOlx0XHQgIHdyaXR0ZW4gYmFjayB0byB0aGUgYmFja2luZyBzd2FwIGRldmljZSkgb24gbWVtb3J5IHByZXNzdXJlLlxuICA1MzpcdFxuICA1NDpcdFx0ICBUaGlzIG1lYW5zIHRoYXQgenN3YXAgd3JpdGViYWNrIGNvdWxkIGhhcHBlbiBldmVuIGlmIHRoZSBwb29sIGlzXG4gIDU1Olx0XHQgIG5vdCB5ZXQgZnVsbCwgb3IgdGhlIGNncm91cCB6c3dhcCBsaW1pdCBoYXMgbm90IGJlZW4gcmVhY2hlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY1NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIFN3YXAgQ29uZmlndXJhdGlvbiBmb3IgT3B0aW1pemF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHN3YXAgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIGBDT05GSUdfU1dBUGAgYW5kIGBDT05GSUdfWlNXQVBgIGFyZSB0aGUgYmlnIG9uZXMuIE5hdHVyYWxseSwgSSBzaG91bGQgY2hlY2sgd2hldGhlciBgQ09ORklHX1pTV0FQX0RFRkFVTFRfT05gIG9yIGBDT05GSUdfWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAgYXJlIHJlbGV2YW50IGZsYWdzIGhlcmUsIGFsdGhvdWdoIHRoZSBjb3JlIG9mIGl0IHdpbGwgYWx3YXlzIGNlbnRlciBhcm91bmQgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGBaU1dBUGAgYW5kIGBTV0FQYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IG1peCBoZXJlLgoKTm93LCBJIGFsc28gbmVlZCB0byBiZSBtaW5kZnVsIG9mIG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHN3YXAgYmVoYXZpb3IuIEl0JiMzOTtzIHRpbWUgdG8gY29uc2lkZXIgdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwczsgZG9lcyBgTUVNQ0dgLCBgTUVNQ0dfVjFgLCBvciBgTUVNQ0dfU1dBUGAgaGF2ZSBhIHJvbGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24/IEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhlc2UgaW50ZXJhY3QuCgpBbmQgbGFzdGx5LCBJIHNob3VsZCBsb29rIGRpcmVjdGx5IGF0IHRoZSBpbXBsZW1lbnRhdGlvbjsgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBtbS9zd2FwX3N0YXRlLmNgIGZpbGUgYW5kIHBvdGVudGlhbGx5IG90aGVyIGFyZWFzIGZvciBob3cgYG1lbWNnMV9zd2FwaW5gIGlzIGhhbmRsZWQuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19aU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03OT1vYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlOjgwOm9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG5tbS9NYWtlZmlsZS04MS1vYmotJChDT05GSUdfSEFTX0RNQSlcdCYjNDM7PSBkbWFwb29sLm9cbi0tXG5tbS9tZW1jb250cm9sLmM9NTk5PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy02MTUtI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NjE2OiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy02MTctXHRaU1dQSU4sXG4tLVxubW0vbWVtY29udHJvbC5jPTE1OTc9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTYwNy1cdHsgXCYjMzQ7c2htZW1cJiMzNDssXHRcdFx0TlJfU0hNRU1cdFx0XHR9LFxubW0vbWVtY29udHJvbC5jOjE2MDg6I2lmZGVmIENPTkZJR19aU1dBUFxubW0vbWVtY29udHJvbC5jLTE2MDktXHR7IFwmIzM0O3pzd2FwXCYjMzQ7LFx0XHRcdE1FTUNHX1pTV0FQX0JcdFx0XHR9LFxuLS1cbm1tL21lbWNvbnRyb2wuYz00MjY2PW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00Mjc4LVx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgUEFHRV9DT1VOVEVSX01BWCk7XG5tbS9tZW1jb250cm9sLmM6NDI3OTojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS9tZW1jb250cm9sLmMtNDI4MC1cdG1lbWNnLVx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ0Njg9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDQ3NC1cdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlb29tX2dyb3VwLCBmYWxzZSk7XG5tbS9tZW1jb250cm9sLmM6NDQ3NTojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS9tZW1jb250cm9sLmMtNDQ3Ni1cdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlenN3YXBfbWF4LCBQQUdFX0NPVU5URVJfTUFYKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTc0Nj1zdGF0aWMgdm9pZCBfX2luaXQgbWVtY2dfc3RydWN0X2NoZWNrKHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTU3OTktXHRcdFx0XHQgICAgICB2bXN0YXRzKTtcbm1tL21lbWNvbnRyb2wuYzo1ODAwOiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy01ODAxLVx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IG1lbV9jZ3JvdXAsIG1lbWNnX3JlYWRfbW9zdGx5LFxuLS1cbm1tL21lbWNvbnRyb2wuYz02MTE5PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNjE1My1cbm1tL21lbWNvbnRyb2wuYzo2MTU0OiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy02MTU1LS8qKlxuLS1cbm1tL21lbWNvbnRyb2wuYz02MzMxPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHpzd2FwX2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTYzNDktfTtcbm1tL21lbWNvbnRyb2wuYzo2MzUwOiNlbmRpZiAvKiBDT05GSUdfWlNXQVAgKi9cbm1tL21lbWNvbnRyb2wuYy02MzUxLVxubW0vbWVtY29udHJvbC5jPTYzNTI9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNjM2MC0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo2MzYxOiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy02MzYyLVx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgenN3YXBfZmlsZXMpKTtcbi0tXG5tbS92bXN0YXQuYz0xMTk5PWNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xuLS1cbm1tL3Ztc3RhdC5jLTE0NjQtI2VuZGlmXG5tbS92bXN0YXQuYzoxNDY1OiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL3Ztc3RhdC5jLTE0NjYtXHRbSShaU1dQSU4pXVx0XHRcdFx0PSBcJiMzNDt6c3dwaW5cJiMzNDssXG4tLVxubW0venN3YXAuYz04Nj1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpO1xuLS1cbm1tL3pzd2FwLmMtODgtLyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cbm1tL3pzd2FwLmM6ODk6c3RhdGljIERFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19aU1dBUF9ERUZBVUxUX09OLCB6c3dhcF9ldmVyX2VuYWJsZWQpO1xubW0venN3YXAuYzo5MDpzdGF0aWMgYm9vbCB6c3dhcF9lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfWlNXQVBfREVGQVVMVF9PTik7XG5tbS96c3dhcC5jLTkxLXN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxuLS1cbm1tL3pzd2FwLmM9OTc9bW9kdWxlX3BhcmFtX2NiKGVuYWJsZWQsIFx1MDAyNnpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzLCBcdTAwMjZ6c3dhcF9lbmFibGVkLCAwNjQ0KTtcbi0tXG5tbS96c3dhcC5jLTk5LS8qIENyeXB0byBjb21wcmVzc29yIHRvIHVzZSAqL1xubW0venN3YXAuYzoxMDA6c3RhdGljIGNoYXIgKnpzd2FwX2NvbXByZXNzb3IgPSBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUO1xubW0venN3YXAuYy0xMDEtc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICosXG4tLVxubW0venN3YXAuYz0xMjE9c3RhdGljIGJvb2wgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCA9IElTX0VOQUJMRUQoXG5tbS96c3dhcC5jOjEyMjpcdFx0Q09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04pO1xubW0venN3YXAuYy0xMjMtbW9kdWxlX3BhcmFtX25hbWVkKHNocmlua2VyX2VuYWJsZWQsIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQsIGJvb2wsIDA2NDQpO1xuLS1cbm1tL3pzd2FwLmM9MTMwPWJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxubW0venN3YXAuYy0xMzEte1xubW0venN3YXAuYzoxMzI6XHRyZXR1cm4gIXN0YXRpY19icmFuY2hfbWF5YmUoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04sIFx1MDAyNnpzd2FwX2V2ZXJfZW5hYmxlZCk7XG5tbS96c3dhcC5jLTEzMy19XG4tLVxubW0venN3YXAuYz0zNDQ9c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXG4tLVxubW0venN3YXAuYy0zNDYtXHRpZiAoIWNyeXB0b19oYXNfYWNvbXAoenN3YXBfY29tcHJlc3NvciwgMCwgMCkgXHUwMDI2XHUwMDI2XG5tbS96c3dhcC5jOjM0NzpcdCAgICBzdHJjbXAoenN3YXBfY29tcHJlc3NvciwgQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVCkpIHtcbm1tL3pzd2FwLmMtMzQ4LVx0XHRwcl9lcnIoXCYjMzQ7Y29tcHJlc3NvciAlcyBub3QgYXZhaWxhYmxlLCB1c2luZyBkZWZhdWx0ICVzXFxuXCYjMzQ7LFxubW0venN3YXAuYzozNDk6XHRcdCAgICAgICB6c3dhcF9jb21wcmVzc29yLCBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUKTtcbm1tL3pzd2FwLmMtMzUwLVx0XHRwYXJhbV9mcmVlX2NoYXJwKFx1MDAyNnpzd2FwX2NvbXByZXNzb3IpO1xubW0venN3YXAuYzozNTE6XHRcdHpzd2FwX2NvbXByZXNzb3IgPSBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUO1xubW0venN3YXAuYy0zNTItXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MDgKCQkJCQkJCW91dHB1dDogMTAyCgkJCQkJCQl0aG91Z2h0czogMTA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgd2UgbmVlZCB0byBmb2N1cyBvbiBmb3IgZnV6emluZyBhbmQgdGVzdGluZy4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGVpdGhlciBuZXcgb3IgbW9kaWZpZWQuIEkmIzM5O3ZlIGdvdCBhIGxpc3QgaGVyZToKCjEuICBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmA6IEEgbmV3IGZ1bmN0aW9uIHdpdGhpbiBgbW0venN3YXAuY2AgdGhhdCBjaGVja3MgaWYgYSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIuIFNvdW5kcyBzcGVjaWZpYyB0byB6c3dhcCBsb2dpYy4KMi4gIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgOiBBbm90aGVyIG5ldyB6c3dhcCBmdW5jdGlvbiBpbiBgbW0venN3YXAuY2AsIGhhbmRsaW5nIHRoZSByZXRyaWV2YWwgYW5kIGNsZWFyaW5nIG9mIHBhcmtlZCBzaGFkb3dzLiBEZWZpbml0ZWx5IHpzd2FwLXNwZWNpZmljLgozLiAgYHpzd2FwX3dyaXRlYmFja19lbnRyeWA6IEEgKm1vZGlmaWVkKiBzdGF0aWMgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBob3cgaXQmIzM5O3MgY2hhbmdlZCwgYnV0IHRoZSB6c3dhcCBjb250ZXh0IGlzIGNsZWFyLiBUaGUga2V5IGlzIGluIHRoZSBwYXJraW5nIG9mIHRoZSBzaGFkb3dzIGFuZCBlcnJvciBoYW5kbGluZy4KNC4gIGB6c3dhcF9zdG9yZWA6ICBUaGlzIGZ1bmN0aW9uIGluIGBtbS96c3dhcC5jYCBoYXMgYmVlbiBtb2RpZmllZCB0byBpbmNsdWRlIGEgY2hlY2sgdXNpbmcgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgLCBzdWdnZXN0aW5nIGEgY2hhbmdlIGluIGl0cyBjb3JlIGxvZ2ljIGNvbmNlcm5pbmcgenN3YXAmIzM5O3Mgd3JpdGViYWNrIGJlaGF2aW9yLgo1LiAgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGA6IEEgbmV3IGZ1bmN0aW9uIHdpdGhpbiBgbW0vd29ya2luZ3NldC5jYC4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHJlZmF1bHRpbmcgb2YgZm9saW9zIGFscmVhZHkgbWFuYWdlZCBieSB0aGUgTFJVLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhcyBJIGtub3cgdGhpcyBsb2dpYy4KNi4gIGB3b3JraW5nc2V0X3JlZmF1bHRgOiBNb2RpZmllZCBpbiBgbW0vd29ya2luZ3NldC5jYCwgYnV0IGl0IGRlbGVnYXRlcyB0byBhIG5ldyBmdW5jdGlvbi4KNy4gIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gOiBUaGlzIG9uZSBoYXMgYSBtb2RpZmllZCBzaWduYXR1cmUsIHNwZWNpZmljYWxseSBpbiBgbW0vc3dhcF9zdGF0ZS5jYCwgd2hpY2gsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN3YXAgY2FjaGUsIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBmb3IgaG93IGZvbGlvcyBnZXQgYWxsb2NhdGVkLgo4LiAgYHN3YXBpbl9zeW5jYDogVGhpcyBmdW5jdGlvbiBsb29rcyBwZXJ0aW5lbnQgdG8gdGhlIG92ZXJhbGwgZmVhdHVyZSBsb2dpYy4KCkkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggYGRvX3N3YXBfcGFnZWAuIEl0JiMzOTtzIGEgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBzd2FwIGVudHJpZXMsIGFuZCB3aGlsZSBpdCYjMzk7cyBtb2RpZmllZCwgaXQmIzM5O3MgYSAqdmVyeSogZ2VuZXJpYyBmdW5jdGlvbi4gV2UgbmVlZCB0byBhdm9pZCBsaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCBieSBuZWFybHkgZXZlcnkgcHJvZ3JhbS4gTGlzdGluZyBpdCB3b3VsZCBkaWx1dGUgdGhlIGZ1enppbmcgZWZmb3J0LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgdGhlc2Ugb3RoZXIgZnVuY3Rpb25zIChgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgYHpzd2FwX3N0b3JlYCwgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAsIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gKSBhcmUgYmV0dGVyIGNob2ljZXMgYXMgZm9jdXMgc3ltYm9scy4gVGhleSBhcHBlYXIgbW9yZSBzcGVjaWZpYyB0byB0aGUgYWx0ZXJlZCBmZWF0dXJlIGxvZ2ljLgoKU28sIGxldCYjMzk7cyBzb2xpZGlmeSB0aGUgY2FuZGlkYXRlIGZvY3VzIHN5bWJvbHMuIEkgdGhpbmsgdGhlIGtleSBvbmVzIGFyZToKCiogICBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAKKiAgIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgCiogICBgenN3YXBfd3JpdGViYWNrX2VudHJ5YAoqICAgYHpzd2FwX3N0b3JlYAoqICAgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAKKiAgIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gCiogICBgc3dhcGluX3N5bmNgCiogICBgc2htZW1fc3dhcGluX2ZvbGlvYAoKTm93LCBsZXQmIzM5O3MgdXNlIGBncmVwcGVyYCAob3Igc29tZSBvdGhlciB0b29sKSB0byBlbnN1cmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBkZWZpbmVkIGluIHRoZSBrZXJuZWwgYW5kIGFyZW4mIzM5O3QganVzdCBzdGF0aWMtaW5saW5lZCwgc28gdGhleSBhcmUgc3VpdGFibGUgc3ltYm9scyBmb3IgZm9jdXNlZCBmdXp6aW5nIGFuZCB0ZXN0aW5nLiBJIHdpbGwgY2hlY2sgdGhlIGRlZmluaXRpb25zIG9mIGVhY2ggc3ltYm9sIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xihib29sfHZvaWR8aW50fHN0cnVjdCBmb2xpbyBcXCopID9cXCo/KHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJ8enN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzfHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZHx6c3dhcF93cml0ZWJhY2tfZW50cnl8enN3YXBfc3RvcmV8X19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvfHNobWVtX3N3YXBpbl9mb2xpbykmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD0zMz12b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpO1xubW0vaW50ZXJuYWwuaDozNDp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpO1xubW0vaW50ZXJuYWwuaC0zNS12b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi0tXG5tbS9zd2FwLmg9MzE0PXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9zd2FwLmg6MzE1OnN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9zd2FwLmgtMzE2LVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NDE5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy01MjgtICovXG5tbS9zd2FwX3N0YXRlLmM6NTI5OnN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbm1tL3N3YXBfc3RhdGUuYy01MzAtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL3dvcmtpbmdzZXQuYz02MDY9dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuLS1cbm1tL3dvcmtpbmdzZXQuYy02MjUtICovXG5tbS93b3JraW5nc2V0LmM6NjI2OnZvaWQgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbm1tL3dvcmtpbmdzZXQuYy02Mjcte1xuLS1cbm1tL3pzd2FwLmM9OTEzPXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTk3Ny0gKi9cbm1tL3pzd2FwLmM6OTc4OmJvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy05Nzkte1xuLS1cbm1tL3pzd2FwLmMtMTAxMC0gKi9cbm1tL3pzd2FwLmM6MTAxMTp2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3pzd2FwLmMtMTAxMi17XG4tLVxubW0venN3YXAuYz0xNDg2PXN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgbG9uZyBpbmRleCxcbi0tXG5tbS96c3dhcC5jLTE1NjUtXG5tbS96c3dhcC5jOjE1NjY6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNTY3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyOTYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOgoKKipBbmFseXppbmcgWnN3YXAgYW5kIFNoYXJlZCBNZW1vcnkgU3dhcCBPcGVyYXRpb25zKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGtlcm5lbCBjb2RlIHJlbGF0ZWQgdG8genN3YXAgYW5kIHNoYXJlZCBtZW1vcnkgc3dhcCBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBhbmQgYHNobWVtX3N3YXBpbl9mb2xpb2AuIFRoZXNlIGZ1bmN0aW9ucyByZXNpZGUgaW4gYG1tL3pzd2FwLmNgIGFuZCBgbW0vc2htZW0uY2AgcmVzcGVjdGl2ZWx5LiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHpzd2FwIGhhbmRsZXMgdGhlIHdyaXRpbmcgYmFjayBvZiBjb21wcmVzc2VkIGRhdGEgYW5kIGhvdyBzaGFyZWQgbWVtb3J5IHBhZ2VzIGFyZSBzd2FwcGVkIGluLiBUaGlzIHdpbGwgbGlrZWx5IGludm9sdmUgdHJhY2luZyB0aGVpciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBwYWdlIGNhY2hlLCBzd2FwIGNhY2hlLCBhbmQgdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlcy4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB3aGVyZSBvcHRpbWl6YXRpb24gbWlnaHQgYmUgcG9zc2libGUsIGFuZCBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrIHVuZGVyIGRpZmZlcmVudCBtZW1vcnkgcHJlc3N1cmUgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF93cml0ZWJhY2tfZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz0xMDExPXZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtMTA0OC0gKi9cbm1tL3pzd2FwLmM6MTA0OTpzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxubW0venN3YXAuYy0xMDUwLVx0XHRcdFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxuLS1cbm1tL3pzd2FwLmM9MTE2OD1zdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxuLS1cbm1tL3pzd2FwLmMtMTE5MS1cdCAqIDEuIFdlIGV4dHJhY3QgdGhlIHN3cF9lbnRyeV90IHRvIHRoZSBzdGFjaywgYWxsb3dpbmdcbm1tL3pzd2FwLmM6MTE5MjpcdCAqICAgIHpzd2FwX3dyaXRlYmFja19lbnRyeSgpIHRvIHBpbiB0aGUgc3dhcCBlbnRyeSBhbmRcbm1tL3pzd2FwLmMtMTE5My1cdCAqICAgIHRoZW4gdmFsaWRhdGUgdGhlIHpzd2FwIGVudHJ5IGFnYWluc3QgdGhhdCBzd2FwIGVudHJ5JiMzOTtzXG4tLVxubW0venN3YXAuYy0xMjI2LVxubW0venN3YXAuYzoxMjI3Olx0d3JpdGViYWNrX3Jlc3VsdCA9IHpzd2FwX3dyaXRlYmFja19lbnRyeShlbnRyeSwgc3dwZW50cnkpO1xubW0venN3YXAuYy0xMjI4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg3NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNobWVtX3N3YXBpbl9mb2xpb2AqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGBzaG1lbV9zd2FwaW5fZm9saW9gLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBjcnVjaWFsIGZvciB0aGUgU2hhcmVkIE1lbW9yeSAoU0hNRU0pIHN1YnN5c3RlbS4gSSYjMzk7bSBndWVzc2luZyBpdCBoYW5kbGVzIHRoZSBwcm9jZXNzIG9mIGJyaW5naW5nIGEgZm9saW8gKGEgcGFnZSBvciBncm91cCBvZiBwYWdlcywgbGlrZWx5KSBiYWNrIGludG8gcGh5c2ljYWwgbWVtb3J5IGZyb20gc3dhcC4gQ29uc2lkZXJpbmcgaXRzIG5hbWUsICYjMzQ7c3dhcGluJiMzNDsgaXMgYSBwcmV0dHkgZ29vZCBjbHVlLCBhcyBpcyAmIzM0O2ZvbGlvJiMzNDsuCgpJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYW5kIHRoZSAqaG93Ki4gV2h5IGlzIHRoaXMgZm9saW8gYmVpbmcgc3dhcHBlZCBpbj8gSXMgaXQgZHVlIHRvIGEgcGFnZSBmYXVsdCwgYSBwcm9jZXNzIHJlc3VtaW5nIGFmdGVyIGJlaW5nIHN3YXBwZWQgb3V0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNvbnRleHQgb2YgaXRzIGludm9jYXRpb24gaXMgZ29pbmcgdG8gYmUgaW5jcmVkaWJseSBpbXBvcnRhbnQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBzZWUgdGhlIGNhbGxpbmcgcGF0aHMuCgpBbmQgdGhlICYjMzQ7aG93JiMzNDsgaW52b2x2ZXMgYSBzZXJpZXMgb2YgcXVlc3Rpb25zOiBXaGF0IHJlc291cmNlcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQ/IElzIGl0IGxvY2tpbmcgY3JpdGljYWwgc2VjdGlvbnM/IEhvdyBpcyB0aGUgZm9saW8mIzM5O3Mgc3RhdGUgbWFuYWdlZCBkdXJpbmcgdGhlIHN3YXAtaW4gcHJvY2Vzcz8gV2hhdCBhYm91dCBlcnJvciBoYW5kbGluZz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yPyBJIHN1c3BlY3QgaXQgbWF5IGJlIGludGVyYWN0aW5nIHdpdGggdGhlIHBhZ2UgY2FjaGUsIHRoZSBzd2FwIGNhY2hlLCBhbmQgdGhlIHBoeXNpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMuIEkgYW50aWNpcGF0ZSBhIGxvdCBvZiBwb2ludGVyIGNoYXNpbmcgYW5kIHN0YXRlIHRyYW5zaXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBmb3IgYW55IGNhbGxzIHRvIGZ1bmN0aW9ucyBsaWtlIGBzd2FwX3JlYWRwYWdlKClgLCBgZm9saW9fbWlncmF0ZSgpYCwgYGZvbGlvX3B1dGJhY2soKWAsIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeSByZWNsYWltIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVtb3J5IGJhcnJpZXJzIHVzZWQgdG8gZW5zdXJlIHByb3BlciBvcmRlcmluZywgZXNwZWNpYWxseSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG11bHRpcGxlIENQVXMgYWNjZXNzaW5nIHRoZSBzYW1lIG1lbW9yeSByZWdpb24uIExldCYjMzk7cyBzZWUgaG93IG11Y2ggb2YgdGhpcyBwbGF5cyBvdXQgaW4gdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX3N3YXBpbl9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTE1Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV9kZWZhdWx0X21heF9pbm9kZXModm9pZClcbi0tXG5tbS9zaG1lbS5jLTE2MC1cbm1tL3NobWVtLmM6MTYxOnN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG5tbS9zaG1lbS5jLTE2Mi1cdFx0XHRzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGVudW0gc2dwX3R5cGUgc2dwLCBnZnBfdCBnZnAsXG4tLVxubW0vc2htZW0uYz0xNjk1PXN0YXRpYyBpbnQgc2htZW1fdW51c2Vfc3dhcF9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vc2htZW0uYy0xNzA1LVxubW0vc2htZW0uYzoxNzA2Olx0XHRlcnJvciA9IHNobWVtX3N3YXBpbl9mb2xpbyhpbm9kZSwgaW5kaWNlc1tpXSwgXHUwMDI2Zm9saW8sIFNHUF9DQUNIRSxcbm1tL3NobWVtLmMtMTcwNy1cdFx0XHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSwgTlVMTCwgTlVMTCk7XG4tLVxubW0vc2htZW0uYz0yMzc1PXN0YXRpYyBpbnQgc2htZW1fc3BsaXRfbGFyZ2VfZW50cnkoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTI0NTItICovXG5tbS9zaG1lbS5jOjI0NTM6c3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbm1tL3NobWVtLmMtMjQ1NC1cdFx0XHQgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgZW51bSBzZ3BfdHlwZSBzZ3AsXG4tLVxubW0vc2htZW0uYz0yNjMyPXN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtMjY2NC1cdGlmICh4YV9pc192YWx1ZShmb2xpbykpIHtcbm1tL3NobWVtLmM6MjY2NTpcdFx0ZXJyb3IgPSBzaG1lbV9zd2FwaW5fZm9saW8oaW5vZGUsIGluZGV4LCBcdTAwMjZmb2xpbyxcbm1tL3NobWVtLmMtMjY2Ni1cdFx0XHRcdFx0ICAgc2dwLCBnZnAsIHZtZiwgZmF1bHRfdHlwZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzUyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGZvY3VzaW5nIG9uIGBzd2FwaW5fc3luY2AgYW5kIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gOgoKKipJbml0aWFsIERpdmUgaW50byBTd2FwIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUgY29yZSBzd2FwIG1lY2hhbmlzbS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgc3dhcGluX3N5bmNgIGFuZCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gVGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGZ1bmRhbWVudGFsIHRvIHRoZSBwcm9jZXNzIG9mIGJyaW5naW5nIGRhdGEgYmFjayBpbnRvIFJBTSBmcm9tIHRoZSBzd2FwIHBhcnRpdGlvbi4KCk15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGxpa2VseSBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIG9mIGZvbGlvIHN0cnVjdHVyZXMgYW5kIHByb2JhYmx5IGludGVyYWN0cyB3aXRoIHRoZSBzd2FwIGNhY2hlLiBJJiMzOTttIGd1ZXNzaW5nIGl0IG1pZ2h0IGludm9sdmUgdGhpbmdzIGxpa2UgdHJhY2tpbmcgcGFnZSBtZXRhZGF0YSwgYW5kIG1hbmFnaW5nIHRoZSBtYXBwaW5nIG9mIHN3YXAgZW50cmllcyB0byBwaHlzaWNhbCBtZW1vcnkuIGBzd2FwaW5fc3luY2Agb24gdGhlIG90aGVyIGhhbmQsIHNob3VsZCBiZSByZXNwb25zaWJsZSBmb3Igc3luY2hyb25pemluZyB0aGUgZGF0YSBiZWluZyByZWFkIGluIGZyb20gc3dhcC4gSSB3aWxsIHByb2JhYmx5IGZpbmQgaXQgaGFuZGxpbmcgdGhpbmdzIGxpa2UgbG9ja2luZywgcmVhZGluZyBmcm9tIHRoZSBkaXNrLCBhbmQgdXBkYXRpbmcgcGFnZSB0YWJsZXMuCkkmIzM5O2xsIGJldCBJJiMzOTtsbCBmaW5kIGEgcmFjZSBjb25kaXRpb24gb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVjayB3aXRoIGBzd2FwaW5fc3luY2AgaWYgdGhlcmUgaXMgY29udGVudGlvbiBhY2Nlc3NpbmcgdGhlIHN3YXAgcGFydGl0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwaW5fc3luYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz00ODQ0PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ5MzYtXHRcdGlmIChkYXRhX3JhY2Uoc2ktXHUwMDNlZmxhZ3MgXHUwMDI2IFNXUF9TWU5DSFJPTk9VU19JTykpXG5tbS9tZW1vcnkuYzo0OTM3Olx0XHRcdGZvbGlvID0gc3dhcGluX3N5bmMoZW50cnksIEdGUF9ISUdIVVNFUl9NT1ZBQkxFLFxubW0vbWVtb3J5LmMtNDkzOC1cdFx0XHRcdFx0ICAgIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHZtZikgfCBCSVQoMCksXG4tLVxubW0vc2htZW0uYz0yMjQyPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBfYWxsb2NfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9zaG1lbS5jLTIyNTYtXHRtcG9sID0gc2htZW1fZ2V0X3Bnb2ZmX3BvbGljeShpbmZvLCBpbmRleCwgb3JkZXIsIFx1MDAyNmlseCk7XG5tbS9zaG1lbS5jOjIyNTc6XHRmb2xpbyA9IHN3YXBpbl9zeW5jKGVudHJ5LCBnZnAsIEJJVChvcmRlciksIHZtZiwgbXBvbCwgaWx4KTtcbm1tL3NobWVtLmMtMjI1OC1cdG1wb2xfY29uZF9wdXQobXBvbCk7XG4tLVxubW0vc3dhcC5oPTMzMj1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsXG5tbS9zd2FwLmgtMzMzLVx0XHRzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5tbS9zd2FwLmg6MzM0OnN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxubW0vc3dhcC5oLTMzNS1cdFx0XHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xuLS1cbm1tL3N3YXAuaD00MDg9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3Qgc3dwLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9zd2FwLmgtNDEzLVxubW0vc3dhcC5oOjQxNDpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoXG5tbS9zd2FwLmgtNDE1LVx0c3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxuLS1cbm1tL3N3YXBfc3RhdGUuYz02NTg9c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LFxuLS1cbm1tL3N3YXBfc3RhdGUuYy02ODktLyoqXG5tbS9zd2FwX3N0YXRlLmM6NjkwOiAqIHN3YXBpbl9zeW5jIC0gc3dhcC1pbiBvbmUgb3IgbXVsdGlwbGUgZW50cmllcyBza2lwcGluZyByZWFkYWhlYWQuXG5tbS9zd2FwX3N0YXRlLmMtNjkxLSAqIEBlbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxuLS1cbm1tL3N3YXBfc3RhdGUuYy03MDQtICovXG5tbS9zd2FwX3N0YXRlLmM6NzA1OnN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG5tbS9zd2FwX3N0YXRlLmMtNzA2LVx0XHRcdCAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTE6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3NDUKCQkJCQkJCW91dHB1dDogMjEwCgkJCQkJCQl0aG91Z2h0czogMzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgZnV6emluZyB0YXJnZXRzIGZvciB0aGlzIHBhdGNoLiBJJiMzOTt2ZSBwaW5wb2ludGVkIGEgc29saWQgc2V0IG9mIGZvY3VzIHN5bWJvbHM6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCBgenN3YXBfc3RvcmVgLCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCwgYW5kIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBJIGFsc28gbmVlZCB0byBrZWVwIGBzd2FwaW5fc3luY2AgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgIGluIG1pbmQsIGFsdGhvdWdoIGB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRgIHNlZW1zIHRvIGJlIHRoZSBtb3JlIHNwZWNpZmljIGZ1bmN0aW9uIGhlcmUuIFRoZSBjb25maWd1cmF0aW9ucyBJJiMzOTttIHdvcmtpbmcgd2l0aCBhcmUgYFNXQVBgIGFuZCBgWlNXQVBgLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgY2xlYXIgdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGRlZXAgaW50byBtZW1vcnkgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IHRoZSB3b3JraW5nc2V0IHJlZmF1bHQgdHJhY2tpbmcgYW5kIGhvdyB6c3dhcCB3cml0ZWJhY2sgYW5kIHN3YXAtaW4gb3BlcmF0aW9ucyBoYW5kbGUgdGhlc2Ugc2hhZG93IHBhZ2VzLiBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIG5ldyBoZWxwZXIgZnVuY3Rpb25zLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIGZsYWcsIGFuZCB0aGUgY2hhbmdlcyB0byBzd2FwIGNhY2hlIGFsbG9jYXRpb24gYW5kIHdyaXRlYmFjayBwYXRocyBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBUaGlzIHRvdWNoZXMgY29yZSBtbSwgd2hpY2ggbWVhbnMgdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHJhY2VzLCBsZWFrcywgb3IgZXZlbiBhc3NlcnRpb24gZmFpbHVyZXMgaXMgdGhlcmUuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIHdhcnJhbnQgaW50ZW5zaXZlIGZ1enppbmcuIFNlZW1zIGxpa2UgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IGNvcnJlY3RseS4gTGV0JiMzOTtzIGdldCB0aGUgdG9vbCBjYWxsIGdvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXImIzM0OywKICAgICYjMzQ7enN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzJiMzNDssCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19lbnRyeSYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQmIzM0OywKICAgICYjMzQ7X19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHpzd2FwIHN1YnN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IHJlZmF1bHQgdHJhY2tpbmcgYW5kIHNoYWRvdyBlbnRyeSBwcmVzZXJ2YXRpb24gYWNyb3NzIHpzd2FwIHdyaXRlYmFjayBhbmQgc3dhcC1pbiBwYXRocy4gSXQgaW50cm9kdWNlcyBuZXcgaGVscGVycyAoenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciwgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzLCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQpIGFuZCBtb2RpZmllcyBzd2FwIGNhY2hlIGFsbG9jYXRpb24gYW5kIHdyaXRlYmFjayBoYW5kbGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gZGV0ZWN0IHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXImIzM0OywKICAgICYjMzQ7enN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzJiMzNDssCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19lbnRyeSYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQmIzM0OywKICAgICYjMzQ7X19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHpzd2FwIHN1YnN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IHJlZmF1bHQgdHJhY2tpbmcgYW5kIHNoYWRvdyBlbnRyeSBwcmVzZXJ2YXRpb24gYWNyb3NzIHpzd2FwIHdyaXRlYmFjayBhbmQgc3dhcC1pbiBwYXRocy4gSXQgaW50cm9kdWNlcyBuZXcgaGVscGVycyAoenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciwgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzLCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQpIGFuZCBtb2RpZmllcyBzd2FwIGNhY2hlIGFsbG9jYXRpb24gYW5kIHdyaXRlYmFjayBoYW5kbGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gZGV0ZWN0IHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTE6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMToxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0vIChzd2FwIGNhY2hlLCB6c3dhcCB3cml0ZWJhY2ssIGFuZCB3b3JraW5nc2V0IHJlZmF1bHQgdHJhY2tpbmcgZm9yIExSVS1tYW5hZ2VkIGZvbGlvcykuIEl0IGFkanVzdHMgaG93IHNoYWRvdyBlbnRyaWVzIGFyZSBwYXJrZWQgaW4gdGhlIHpzd2FwIHRyZWUgZHVyaW5nIHdyaXRlYmFjayBhbmQgcmVzdG9yZWQvcmVmYXVsdGVkIGR1cmluZyBzd2FwaW4uXG5cbjEuIE5vIGtlcm5lbC10by11c2VyIGluZm8tbGVhayByaXNrOiBObyBkYXRhIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGxzLCBvciBCUEYgYnVmZmVycykuXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogQWxsIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBzaGFkb3dgLCBgc2hhZG93X3BhcmtlZGAsIGFuZCBsb29wIGluZGljZXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgYXNzaWduZWQgYnkgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHBvaW50ZXJzL3ZhbHVlcy5cbjMuIEJ1ZyBhcHBsaWNhYmlsaXR5OiBQb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGludm9sdmUgcGFnZSBsb2NraW5nLCByYWNlIGNvbmRpdGlvbnMgaW4gc3dhcGNhY2hlL0xSVSBtYW5pcHVsYXRpb24sIHJlZmNvdW50aW5nLCBvciBpbnZhbGlkIHhhcnJheSBvcGVyYXRpb25zLiBUaGVzZSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgKEtBU0FOLCBMT0NLREVQLCBWTV9XQVJOL1ZNX0JVRyBhc3NlcnRpb25zKSwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjA1ZWM2Yjg4OWM5ZGEwOWE5YmQ4ODcyNGZmOWMzMjE3ZDE4NWI4ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDExOjE4OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oCmluZGV4IDMwYzE5M2ExMjA3ZTEuLmRmYjcxNTMyMzZmNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmgKQEAgLTM1LDYgJiM0MzszNSw4IEBAIHZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTsKIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpOwogYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpOwomIzQzO2Jvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0Mzt2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7CiAjZWxzZQogCiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9OwpAQCAtNjksNiAmIzQzOzcxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwogI2VuZGlmCiAKICNlbmRpZiAvKiBfTElOVVhfWlNXQVBfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggOGJlM2QyOGQ5YzNkOC4uZDE5OTQ3YTNjMzM4NSAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC0zMSw2ICYjNDM7MzEsNyBAQCB2b2lkIHdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CiB2b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQkgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpOwogdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTsKJiM0Mzt2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpOwogdm9pZCB3b3JraW5nc2V0X2FjdGl2YXRpb24oc3RydWN0IGZvbGlvICpmb2xpbyk7CiAKIC8qIG1tL2ZvbGlvLmMgKi8KZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggYTJhNjNhZTA5NjdjMS4uMDA0M2E5MjM3YThkZCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTQ4NTcsNiAmIzQzOzQ4NTcsNyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAl1bnNpZ25lZCBsb25nIHBhZ2VfaWR4OwogCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKIAlwdGVfdCAqcHRlcDsKJiM0MzsJdm9pZCAqc2hhZG93OwogCiAJaWYgKCFwdGVfdW5tYXBfc2FtZSh2bWYpKQogCQlnb3RvIG91dDsKQEAgLTQ5ODQsNiAmIzQzOzQ5ODUsMTAgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJCWdvdG8gb3V0X3BhZ2U7CiAJfQogCiYjNDM7CXNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7CiYjNDM7CWlmIChzaGFkb3cpCiYjNDM7CQl3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7CiYjNDM7CiAJLyoKIAkgKiBLU00gc29tZXRpbWVzIGhhcyB0byBjb3B5IG9uIHJlYWQgZmF1bHRzLCBmb3IgZXhhbXBsZSwgaWYKIAkgKiBmb2xpby0mZ3Q7aW5kZXggb2Ygbm9uLWtzbSBmb2xpb3Mgd291bGQgYmUgbm9ubGluZWFyIGluc2lkZSB0aGUKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IGMzMjEyZmRlY2U5YjQuLjUzZjU3YWQxOTRhMzkgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMjQ2NSw2ICYjNDM7MjQ2NSw3IEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiAJc3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7CiAJaW50IGVycm9yLCBucl9wYWdlcywgb3JkZXI7CiAJcGdvZmZfdCBvZmZzZXQ7CiYjNDM7CXZvaWQgKnNoYWRvdzsKIAogCVZNX0JVR19PTighKmZvbGlvcCB8fCAheGFfaXNfdmFsdWUoKmZvbGlvcCkpOwogCWluZGV4X2VudHJ5ID0gcmFkaXhfdG9fc3dwX2VudHJ5KCpmb2xpb3ApOwpAQCAtMjU3Niw2ICYjNDM7MjU3NywxMCBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCSAqLwogCWFyY2hfc3dhcF9yZXN0b3JlKGZvbGlvX3N3YXAoc3dhcCwgZm9saW8pLCBmb2xpbyk7CiAKJiM0MzsJc2hhZG93ID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTsKJiM0MzsJaWYgKHNoYWRvdykKJiM0MzsJCXdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChmb2xpbywgc2hhZG93KTsKJiM0MzsKIAlpZiAoc2htZW1fc2hvdWxkX3JlcGxhY2VfZm9saW8oZm9saW8sIGdmcCkpIHsKIAkJZXJyb3IgPSBzaG1lbV9yZXBsYWNlX2ZvbGlvKCZhbXA7Zm9saW8sIGdmcCwgaW5mbywgaW5kZXgsIHZtYSk7CiAJCWlmIChlcnJvcikKZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaAppbmRleCAwYjVkNTA3NzM5YmNiLi5kZGQxMDhiNDFkMzNhIDEwMDY0NAotLS0gYS9tbS9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcC5oCkBAIC0zMTIsOSAmIzQzOzMxMiwxMCBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTsKIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9nZXRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpOwogdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTsKIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKLQkJCQkgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTsKJiM0MztzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsCiYjNDM7CQkJCSAgICAgICB2b2lkICoqc2hhZG93cCk7CiAvKiBCZWxvdyBoZWxwZXJzIHJlcXVpcmUgdGhlIGNhbGxlciB0byBsb2NrIGFuZCBwYXNzIGluIHRoZSBzd2FwIGNsdXN0ZXIuICovCiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAkJCSAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7CmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggMzA1ODc3ZTFmNGQ3Yi4uZTgwYTY5NGRkZGI0NyAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMjQsNiAmIzQzOzI0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zaG1lbV9mcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N5c2N0bC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N3YXBfb3BzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3pzd2FwLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwX3RhYmxlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwLmgmIzM0OwpAQCAtMjYzLDEyICYjNDM7MjY0LDIxIEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAl1bnNpZ25lZCBpbnQgY2lfc3RhcnQsIGNpX29mZiwgY2lfZW5kOwogCWJvb2wgZm9saW9fc3dhcHBlZCA9IGZhbHNlLCBuZWVkX2ZyZWUgPSBmYWxzZTsKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwomIzQzOwl2b2lkICpzaGFkb3dfcGFya2VkOwogCiAJVk1fV0FSTl9PTl9PTkNFKF9fc3dhcF9lbnRyeV90b19jbHVzdGVyKGVudHJ5KSAhPSBjaSk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTsKIAomIzQzOwkvKgomIzQzOwkgKiBBIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgcGFya2VkIHRoZSBzbG90JiMzOTtzIG9yaWdpbmFsIHNoYWRvdyBpbiB0aGUKJiM0MzsJICogenN3YXAgdHJlZTogcmVzdG9yZSBpdCBpbnRvIHRoZSBzbG90IGZvciBsYXRlciBzd2FwLWluLgomIzQzOwkgKi8KJiM0MzsJc2hhZG93X3BhcmtlZCA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7CiYjNDM7CWlmIChzaGFkb3dfcGFya2VkKQomIzQzOwkJc2hhZG93ID0gc2hhZG93X3BhcmtlZDsKJiM0MzsKIAlzaSA9IF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KTsKIAljaV9zdGFydCA9IHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSk7CiAJY2lfZW5kID0gY2lfc3RhcnQgJiM0MzsgbnJfcGFnZXM7CkBAIC00MDksNyAmIzQzOzQxOSw4IEBAIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJCQlzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsCiAJCQkJCXVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCi0JCQkJCXN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KQomIzQzOwkJCQkJc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsCiYjNDM7CQkJCQl2b2lkICoqc2hhZG93cCkKIHsKIAlpbnQgZXJyOwogCXN3cF9lbnRyeV90IGVudHJ5OwpAQCAtNDgzLDM3ICYjNDM7NDk0LDQyIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCiAJLyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovCiAJbWVtY2cxX3N3YXBpbihmb2xpbyk7Ci0JaWYgKHNoYWRvdykKLQkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwogCiAJbm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpOwogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7CiAKLQkvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqLwotCWZvbGlvX2FkZF9scnUoZm9saW8pOwomIzQzOwlpZiAoc2hhZG93cCkKJiM0MzsJCSpzaGFkb3dwID0gc2hhZG93OwomIzQzOwogCXJldHVybiBmb2xpbzsKIH0KIAogLyoqCi0gKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS4KJiM0MzsgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLgogICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3QKICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCiAgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVybwogICogQHZtZjogZmF1bHQgaW5mb3JtYXRpb24KICAqIEBtcG9sOiBOVU1BIG1lbW9yeSBhbGxvY2F0aW9uIHBvbGljeSB0byBiZSBhcHBsaWVkCiAgKiBAaWx4OiBOVU1BIGludGVybGVhdmUgaW5kZXgsIGZvciB1c2Ugb25seSB3aGVuIE1QT0xfSU5URVJMRUFWRQomIzQzOyAqIEBzaGFkb3dwOiBSZXR1cm5zIHRoZSBzaGFkb3cgdGhlIGFsbG9jYXRpb24gZGlzcGxhY2VkLCBOVUxMIHRvIGlnbm9yZQogICoKICAqIEFsbG9jYXRlIGEgZm9saW8gaW4gdGhlIHN3YXAgY2FjaGUgZm9yIG9uZSBzd2FwIHNsb3QsIHR5cGljYWxseSBiZWZvcmUKICAqIGRvaW5nIElPIChlLmcuIHN3YXAgaW4gb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIHN3YXAgc2xvdCBpbmRpY2F0ZWQgYnkKICAqIEB0YXJnX2VudHJ5IG11c3QgaGF2ZSBhIG5vbi16ZXJvIHN3YXAgY291bnQgKHN3YXBwZWQgb3V0KS4KICAqCiYjNDM7ICogVGhlIHJldHVybmVkIGZvbGlvIGlzIGxvY2tlZCBhbmQgaXMgTk9UIG9uIHRoZSBMUlUuIFRoZSBjYWxsZXIgbXVzdCBlaXRoZXIKJiM0MzsgKiBhZGQgaXQgdG8gdGhlIExSVSB3aXRoIGZvbGlvX2FkZF9scnUoKSBzbyBwYWdlIHJlY2xhaW0gY2FuIGZpbmQgaXQsIG9yIGZyZWUKJiM0MzsgKiBpdCBkaXJlY3RseSBvbmNlIGRvbmU7IGEgZm9saW8gbGVmdCBvZmYgdGhlIExSVSBpcyB1bnJlY2xhaW1hYmxlIGFuZCBsZWFrcy4KJiM0MzsgKgogICogQ29udGV4dDogQ2FsbGVyIG11c3QgcHJvdGVjdCB0aGUgc3dhcCBkZXZpY2Ugd2l0aCByZWZlcmVuY2UgY291bnQgb3IgbG9ja3MuCiAgKiBSZXR1cm46IFJldHVybnMgdGhlIGZvbGlvIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkIGFuZCBmb2xpbyBpcyBpbiB0aGUgc3dhcAogICogY2FjaGUuIFJldHVybnMgZXJyb3IgY29kZSBpZiBmYWlsZWQgZHVlIHRvIHJhY2UsIE9PTSBvciBpbnZhbGlkIGFyZ3VtZW50cy4KICAqLwotc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKLQkJCQkgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KQomIzQzO3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCwKJiM0MzsJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LAomIzQzOwkJCQkgICAgICAgdm9pZCAqKnNoYWRvd3ApCiB7CiAJaW50IG9yZGVyLCBlcnI7CiAJc3RydWN0IGZvbGlvICpyZXQ7CkBAIC01MjgsNyAmIzQzOzU0NCw3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsCiAKIAlkbyB7CiAJCXJldCA9IF9fc3dhcF9jYWNoZV9hbGxvYyhjaSwgdGFyZ19lbnRyeSwgZ2ZwLCBvcmRlciwKLQkJCQkJIHZtZiwgbXBvbCwgaWx4KTsKJiM0MzsJCQkJCSB2bWYsIG1wb2wsIGlseCwgc2hhZG93cCk7CiAJCWlmICghSVNfRVJSKHJldCkpCiAJCQlicmVhazsKIAkJZXJyID0gUFRSX0VSUihyZXQpOwpAQCAtNjQ0LDE3ICYjNDM7NjYwLDIzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwKIAkJcGdvZmZfdCBpbHgsIGJvb2wgcmVhZGFoZWFkKQogewogCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CXZvaWQgKnNoYWRvdyA9IE5VTEw7CiAKIAlkbyB7CiAJCWZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpOwogCQlpZiAoZm9saW8pCiAJCQlyZXR1cm4gZm9saW87Ci0JCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7CiYjNDM7CQlmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsCiYjNDM7CQkJCQkJIGlseCwgJmFtcDtzaGFkb3cpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSkKIAkJcmV0dXJuIE5VTEw7CiAKJiM0MzsJaWYgKHNoYWRvdykKJiM0MzsJCXdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTsKJiM0MzsKJiM0MzsJZm9saW9fYWRkX2xydShmb2xpbyk7CiAJc3dhcF9yZWFkX2ZvbGlvKGN0eCwgZm9saW8pOwogCWlmIChyZWFkYWhlYWQpIHsKIAkJZm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7CkBAIC02ODUsMTcgJiM0Mzs3MDcsMjMgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycywKIHsKIAlzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJdm9pZCAqc2hhZG93ID0gTlVMTDsKIAogCWRvIHsKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJCWlmIChmb2xpbykKIAkJCXJldHVybiBmb2xpbzsKLQkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpOwomIzQzOwkJZm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsCiYjNDM7CQkJCQkJIGlseCwgJmFtcDtzaGFkb3cpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBmb2xpbzsKIAomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwomIzQzOwomIzQzOwlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKIAlzd2FwX3JlYWRfZm9saW8oJmFtcDtjdHgsIGZvbGlvKTsKIAlzd2FwX3JlYWRfc3VibWl0KCZhbXA7Y3R4KTsKIAlyZXR1cm4gZm9saW87CmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCA0OGQzY2Q0MGRlZmRiLi42MTAxZjkwZTkxZDJhIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmMKQEAgLTE4ODUsNyAmIzQzOzE4ODUsNyBAQCB2b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKQogICogICBDUFUxCQkJCUNQVTIKICAqICAgZG9fc3dhcF9wYWdlKCkKICAqICAgICAuLi4JCQkJc3dhcG9mZiYjNDM7c3dhcG9uCi0gKiAgICAgc3dhcF9jYWNoZV9hbGxvY19mb2xpbygpCiYjNDM7ICogICAgIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbygpCiAgKiAgICAgICAvLyBjaGVjayBzd2FwX21hcAogICogICAgIC8vIHZlcmlmeSBQVEUgbm90IGNoYW5nZWQKICAqCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDQwZDNmMWI0OGE3NGMuLjFjYTY0ODllNTAxMjIgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC00OCw2ICYjNDM7NDgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWZldGNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJpbnRrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3pzd2FwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZXdhbGsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zaG1lbV9mcy5oJmd0OwpAQCAtNzUzLDcgJiM0Mzs3NTQsOCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJaWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkgewogCQlzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tJmd0O3N3YXA7CiAKLQkJaWYgKHJlY2xhaW1lZCAmYW1wOyZhbXA7ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpCiYjNDM7CQlpZiAocmVjbGFpbWVkICZhbXA7JmFtcDsgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKQogCQkJc2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTsKIAkJX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpOwogCQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTsKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwppbmRleCA4NDEyZjQ4NDBhZTM1Li44ZTQ1YjBiYWViMzZkIDEwMDY0NAotLS0gYS9tbS93b3JraW5nc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jCkBAIC01MzYsMTYgJiM0Mzs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsCiAJcmV0dXJuIHJlZmF1bHRfZGlzdGFuY2UgJmx0Oz0gd29ya2luZ3NldF9zaXplOwogfQogCi0vKioKLSAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLgotICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uCi0gKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uCi0gKgotICogQ2FsY3VsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSByZWZhdWx0IGRpc3RhbmNlIG9mIHRoZSBwcmV2aW91c2x5Ci0gKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5Ci0gKiBwcmVzc3VyZSBjYXVzZWQgdGhlIGV2aWN0aW9uLgotICovCi12b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCiYjNDM7c3RhdGljIHZvaWQgX193b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93LAomIzQzOwkJCQkgYm9vbCBscnVfbWFuYWdlZCkKIHsKIAlib29sIGZpbGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwpAQCAtNTc3LDcgJiM0Mzs1NjksMTYgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQogCWlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsICZhbXA7d29ya2luZ3NldCwgdHJ1ZSkpCiAJCWdvdG8gb3V0OwogCi0JZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiYjNDM7CS8qCiYjNDM7CSAqIEFuIExSVS1tYW5hZ2VkIGZvbGlvIG1heSBzaXQgaW4gYSBwZXItQ1BVIGJhdGNoLCB3aGljaCBjYW5ub3QgYmUKJiM0MzsJICogZGV0ZXJtaW5lZCBoZXJlOiBzZXR0aW5nIHRoZSBmbGFnIHdvdWxkIHJhY2UgdGhlIGRyYWluIGFuZCBsZWF2ZSBpdAomIzQzOwkgKiBkaXNhZ3JlZWluZyB3aXRoIHRoZSBsaXN0LiBmb2xpb19hY3RpdmF0ZSgpIGlzIHNhZmUsIGJ1dCBtaXNzZXMgdGhlCiYjNDM7CSAqIGFjdGl2YXRpb24gZm9yIHN1Y2ggYSBmb2xpby4KJiM0MzsJICovCiYjNDM7CWlmIChscnVfbWFuYWdlZCkKJiM0MzsJCWZvbGlvX2FjdGl2YXRlKGZvbGlvKTsKJiM0MzsJZWxzZQomIzQzOwkJZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiAJd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7CiAJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQkFTRSAmIzQzOyBmaWxlLCBucik7CiAKQEAgLTU5MCw2ICYjNDM7NTkxLDQzIEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKIAltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby4KJiM0MzsgKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby4KJiM0MzsgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uCiYjNDM7ICoKJiM0MzsgKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHkKJiM0MzsgKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5CiYjNDM7ICogcHJlc3N1cmUgY2F1c2VkIHRoZSBldmljdGlvbi4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgbm90IG9uIHRoZSBMUlUgeWV0LCB0aGUgY2FsbGVyIGFkZHMKJiM0MzsgKiBpdCB3aXRoIGZvbGlvX2FkZF9scnUoKSBhZnRlcndhcmRzLgomIzQzOyAqLwomIzQzO3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKJiM0Mzt7CiYjNDM7CV9fd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3csIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkIC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5CiYjNDM7ICogZXZpY3RlZCBmb2xpbyB0aGF0IGlzIGFscmVhZHkgb24gdGhlIExSVS4KJiM0MzsgKiBAZm9saW86IFRoZSBmb2xpbyB0aGUgZXZpY3Rpb24gaXMgcmVmYXVsdGVkIGludG8uCiYjNDM7ICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLgomIzQzOyAqCiYjNDM7ICogTGlrZSB3b3JraW5nc2V0X3JlZmF1bHQoKSwgYnV0IGZvciBhIGZvbGlvIHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgYWRkZWQKJiM0MzsgKiB0byB0aGUgTFJVLCB3aGljaCBoYXMgdG8gYmUgYWN0aXZhdGVkIGJ5IG1vdmluZyBpdCBiZXR3ZWVuIHRoZSBsaXN0cwomIzQzOyAqIHJhdGhlciB0aGFuIGJ5IHNldHRpbmcgUEdfYWN0aXZlLgomIzQzOyAqCiYjNDM7ICogVGhlIGFjdGl2YXRpb24gaXMgYmVzdCBlZmZvcnQ6IGEgZm9saW8gc3RpbGwgc2l0dGluZyBpbiBhIHBlci1DUFUgTFJVCiYjNDM7ICogYmF0Y2ggY2Fubm90IGJlIG1vdmVkIHlldCBhbmQgaXMgbGVmdCBpbmFjdGl2ZS4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgYWxyZWFkeSBhZGRlZCB0byB0aGUgTFJVLgomIzQzOyAqLwomIzQzO3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKJiM0Mzt7CiYjNDM7CV9fd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3csIHRydWUpOwomIzQzO30KJiM0MzsKIC8qKgogICogd29ya2luZ3NldF9hY3RpdmF0aW9uIC0gbm90ZSBhIHBhZ2UgYWN0aXZhdGlvbgogICogQGZvbGlvOiBGb2xpbyB0aGF0IGlzIGJlaW5nIGFjdGl2YXRlZC4KZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IGMyN2UyMmQwNjdlM2UuLjkwNDgyMWRiNDAxZjMgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtOTYxLDYgJiM0Mzs5NjEsNzkgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiB3cml0ZWJhY2sgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KJiM0MzsKJiM0MzsjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMCkKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj8KJiM0MzsgKiBAZm9saW86IHRoZSBmb2xpbyBiZWluZyBleGFtaW5lZCAodHlwaWNhbGx5IGEgc3dhcCBjYWNoZSBmb2xpbyB1bmRlciByZWNsYWltKQomIzQzOyAqCiYjNDM7ICogQSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgd2hlbiBldmVyeSBvbmUgb2YgaXRzIHN3YXAgb2Zmc2V0cyBob2xkcwomIzQzOyAqIGEgcGFya2VkIHdyaXRlYmFjayBzaGFkb3cgKGEgcmVhbCBzaGFkb3cgb3IgdGhlIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cKJiM0MzsgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIEBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIsIGluIHdoaWNoIGNhc2UgdGhlIHJlY2xhaW0gcGF0aAomIzQzOyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuCiYjNDM7ICovCiYjNDM7Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzd3BfZW50cnlfdCBzd3AgPSBmb2xpby0mZ3Q7c3dhcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJaWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXhhX2lzX3ZhbHVlKHhhX2xvYWQoc3dhcF96c3dhcF90cmVlKGUpLCBvZmZzZXQgJiM0MzsgaSkpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzIC0gcmV0cmlldmUgYW5kIGNsZWFyIEBmb2xpbyYjMzk7cyBwYXJrZWQgc2hhZG93KHMpCiYjNDM7ICogQGZvbGlvOiB0aGUgd3JpdGViYWNrIGJ1ZmZlciBmb2xpbyAob3IgdGhlIHN3YXBpbiBmb2xpbyB0aGF0IGNvbnN1bWVkIGl0KQomIzQzOyAqCiYjNDM7ICogUmVtb3ZlIGFueSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvd3MgZm9yIEBmb2xpbyYjMzk7cyBzd2FwIG9mZnNldChzKSBmcm9tIHRoZQomIzQzOyAqIHpzd2FwIHRyZWUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRoZSBwcmVzZXJ2ZWQgd29ya2luZ3NldCBzaGFkb3csIG9yIE5VTEwgaWYgdGhlIHNsb3QocykgaGFkIG5vIHNoYWRvdwomIzQzOyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkCiYjNDM7ICogc2hhZG93IGludG8gdGhlIHN3YXAgc2xvdCAoYnVmZmVyIGRyb3BwZWQpIG9yIGZlZWRzIGl0IHRvCiYjNDM7ICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKCkgKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nCiYjNDM7ICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LgomIzQzOyAqLwomIzQzO3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tJmd0O3N3YXA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CXBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApOwomIzQzOwl2b2lkICpzaGFkb3cgPSBOVUxMOwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CWlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CQlzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKGUpOwomIzQzOwkJdm9pZCAqcGFya2VkID0geGFfbG9hZCh0cmVlLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl4YV9lcmFzZSh0cmVlLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CQlpZiAocGFya2VkICE9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cpCiYjNDM7CQkJc2hhZG93ID0gcGFya2VkOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzaGFkb3c7CiYjNDM7fQomIzQzOwogLyoKICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsCiAgKiBkZWNvbXByZXNzaW5nIHRoZSBlbnRyeSBkYXRhIGludG8gdGhlIGZvbGlvLCBhbmQgaXNzdWluZyBhCkBAIC05NzYsMTIgJiM0MzsxMDQ5LDE0IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbykKIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJCQkJIHN3cF9lbnRyeV90IHN3cGVudHJ5KQogewomIzQzOwlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwogCXN0cnVjdCB4YXJyYXkgKnRyZWU7CiAJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cGVudHJ5KTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCXN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7CiAJc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpOwogCXN0cnVjdCBzd2FwX2lvX2N0eCBjdHggPSB7fTsKJiM0MzsJdm9pZCAqc2hhZG93OwogCWludCByZXQgPSAwOwogCiAJLyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi8KQEAgLTk5MCw4ICYjNDM7MTA2NSw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJCXJldHVybiAtRUVYSVNUOwogCiAJbXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTsKLQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCwKLQkJCQkgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7CiYjNDM7CWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsCiYjNDM7CQkJCQkgTk9fSU5URVJMRUFWRV9JTkRFWCwgJmFtcDtzaGFkb3cpOwogCXB1dF9zd2FwX2RldmljZShzaSk7CiAKIAkvKgpAQCAtMTAwMyw2ICYjNDM7MTA3OCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJICovCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBQVFJfRVJSKGZvbGlvKTsKJiM0MzsJZm9saW9fYWRkX2xydShmb2xpbyk7CiAKIAkvKgogCSAqIGZvbGlvIGlzIGxvY2tlZCwgYW5kIHRoZSBzd2FwY2FjaGUgaXMgbm93IHNlY3VyZWQgYWdhaW5zdApAQCAtMTAyNCw3ICYjNDM7MTEwMCwxMiBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCQlnb3RvIG91dDsKIAl9CiAKLQl4YV9lcmFzZSh0cmVlLCBvZmZzZXQpOwomIzQzOwkvKgomIzQzOwkgKiBBIHNsb3Qgd2l0aCBubyBzaGFkb3cgYWxyZWFkeSByZWFkcyBiYWNrIGFzIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c6CiYjNDM7CSAqIHRoZSBzd2FwIHRhYmxlIG1hcmtzIGEgc3dhcHBlZCBvdXQgc2xvdCB3aXRoIHhhX21rX3ZhbHVlKDApIGFuZCBob2xkcwomIzQzOwkgKiB0aGUgc2hhZG93LCB3aGVuIHRoZXJlIGlzIG9uZSwgaW4gdGhhdCBzYW1lIHZhbHVlLgomIzQzOwkgKi8KJiM0MzsJeGFfc3RvcmUodHJlZSwgb2Zmc2V0LCBzaGFkb3csIEdGUF9LRVJORUwpOwogCiAJY291bnRfdm1fZXZlbnQoWlNXUFdCKTsKIAlpZiAoZW50cnktJmd0O29iamNnKQpAQCAtMTA0NCw3ICYjNDM7MTEyNSwxNSBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCiBvdXQ6CiAJaWYgKHJldCkgewotCQlzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGFsbG9jYXRpb24gYWJvdmUgb3Zlcndyb3RlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBhbmQgbm90aGluZwomIzQzOwkJICogaGFzIGJlZW4gcGFya2VkIGZvciBpdCB5ZXQsIHNvIHJlc3RvcmUgaXQgYXMgdGhlIGZvbGlvIGxlYXZlcwomIzQzOwkJICogdGhlIHN3YXAgY2FjaGUsIG9yIHRoZSBldmljdGlvbiBpdCByZWNvcmRzIGlzIGxvc3QuCiYjNDM7CQkgKi8KJiM0MzsJCWNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oc3dwZW50cnkpLCBvZmZzZXQpOwomIzQzOwkJX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3cGVudHJ5LCBzaGFkb3cpOwomIzQzOwkJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiYjNDM7CQlmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpOwogCQlmb2xpb191bmxvY2soZm9saW8pOwogCX0KIAlmb2xpb19wdXQoZm9saW8pOwpAQCAtMTQ4Nyw2ICYjNDM7MTU3NiwxNyBAQCBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJVk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpOwogCVZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKTsKIAomIzQzOwkvKgomIzQzOwkgKiBBIHdyaXRlYmFjayBidWZmZXIgd2hvc2UgSU8gZmFpbGVkIGlzIHJlZGlydGllZCBhbmQgbGVmdCBpbiB0aGUKJiM0MzsJICogc3dhcCBjYWNoZSwgc28gcmVjbGFpbSB3cml0ZXMgaXQgb3V0IGFnYWluLiBXcml0ZWJhY2sgYWxyZWFkeQomIzQzOwkgKiBkZWNpZGVkIHRoaXMgZGF0YSBiZWxvbmdzIG9uIGRpc2ssIHNvIHNlbmQgaXQgdGhlcmUgaW5zdGVhZCBvZgomIzQzOwkgKiBjb21wcmVzc2luZyBpdCBiYWNrIGludG8genN3YXAuIFRoaXMgYWxzbyBsZWF2ZXMgdGhlIHNoYWRvdwomIzQzOwkgKiBwYXJrZWQgZm9yIHRoZSBidWZmZXIgaW4gcGxhY2UsIHNvIGl0IGlzIHN0aWxsIHJlc3RvcmVkIGludG8KJiM0MzsJICogdGhlIHNsb3Qgb25jZSB0aGUgZm9saW8gbGVhdmVzIHRoZSBzd2FwIGNhY2hlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCWlmICghenN3YXBfZW5hYmxlZCkKIAkJZ290byBjaGVja19vbGQ7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIE1lbW9yeSBTYWZldHkgRXZhbHVhdGlvbjogWnN3YXAgU2hhZG93IEVudHJ5IEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBvciBoaWdobGlnaHRzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQmIzM5O3MgYSBrZXJuZWwgcGF0Y2ggdG91Y2hpbmcgc2V2ZXJhbCBtZW1vcnkgbWFuYWdlbWVudCBhcmVhcy4KCkZpcnN0LCBJIHNlZSB0aGUgYWZmZWN0ZWQgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L3pzd2FwLmhgLCBgbW0vaW50ZXJuYWwuaGAsIGBtbS9tZW1vcnkuY2AsIGBtbS9zaG1lbS5jYCwgYG1tL3N3YXAuaGAsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vc3dhcGZpbGUuY2AsIGBtbS92bXNjYW4uY2AsIGBtbS93b3JraW5nc2V0LmNgLCBhbmQgYG1tL3pzd2FwLmNgLiBUaGVzZSBhbGwgcG9pbnQgdG93YXJkcyB3b3JraW5nc2V0IHNoYWRvdyBlbnRyaWVzIGFuZCB6c3dhcCB3cml0ZWJhY2suCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgaG93IHRoZSB3b3JraW5nc2V0IHNoYWRvdyBlbnRyaWVzIGFyZSBoYW5kbGVkIHdoZW4gZm9saW9zIGFyZSBzd2FwcGVkIGluIGFuZCBvdXQgdmlhIHpzd2FwIHdyaXRlYmFjay4gU3BlY2lmaWNhbGx5LCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBub3cgdGFrZXMgYSBgdm9pZCAqKnNoYWRvd3BgIHBhcmFtZXRlci4gIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgY2FsbGluZyBgd29ya2luZ3NldF9yZWZhdWx0YCBpbiBgX19zd2FwX2NhY2hlX2FsbG9jYCwgaXQmIzM5O3Mgbm93IHJldHVybmluZyB0aGUgYHNoYWRvd2AgdmFsdWUgdmlhIGBzaGFkb3dwYCAoaWYgaXQmIzM5O3Mgbm90IE5VTEwpLiBDYWxsZXJzIGxpa2UgYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AgYW5kIGBzd2FwaW5fc3luY2AgdGhlbiBoYW5kbGUgdGhlIGB3b3JraW5nc2V0X3JlZmF1bHRgIGNhbGwgKmFmdGVyKiBnZXR0aW5nIHRoZSBgc2hhZG93YCB2YWx1ZSBiYWNrLiBBbmQsIGBkb19zd2FwX3BhZ2VgIGFuZCBgc2htZW1fc3dhcGluX2ZvbGlvYCBhcmUgdXNpbmcgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AuIEkgc2VlIHNpbWlsYXIgbG9naWMgaW4gYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIHdpdGggdGhlIHNoYWRvdyBiZWluZyByZXRyaWV2ZWQgdmlhIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGFuZCBzdG9yZWQgaW4gYW4gYHhhX3N0b3JlYCBjYWxsLiAgSWYgdGhlcmUmIzM5O3MgYW4gZXJyb3IsIGl0JiMzOTtzIGJlaW5nIHJlc3RvcmVkIGluIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYC4KCk15IG5leHQgc3RlcCBpcyB0byBzZWUgaWYgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgZXhpc3RzLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgY2FsbHNpdGVzIHdoZXJlIGBzaGFkb3dgIGlzIGJlaW5nIHVzZWQgdG8gc2VlIGhvdyBpdCBpcyBpbml0aWFsbHkgYXNzaWduZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBhdGhzIHdoZXJlIGl0IGNvdWxkIGJlIHJlYWQgYmVmb3JlIGJlaW5nIGFzc2lnbmVkIGEgdmFsaWQgdmFsdWUuCgpMZXQmIzM5O3MgbG9vayBhdCBgc3dhcF9jYWNoZV9yZWFkX2ZvbGlvYDogVGhlIGBzaGFkb3dgIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIHRvIGBOVUxMYC4gVGhlIGNvZGUgY2FsbHMgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIElmIHRoYXQgc3VjY2VlZHMsIHRoZSBhbGxvY2F0ZWQgc2hhZG93IHZhbHVlIGlzIHJldHVybmVkIGFuZCB0aGUgY2FsbGVyIHdpbGwgcnVuIGB3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdylgLiBUaGUgYF9fc3dhcF9jYWNoZV9hbGxvY2AgYXNzaWducyBgc2hhZG93YCBmcm9tIGVpdGhlciBhIHZhbHVlIGZyb20gdGhlIGBzd2FwX2NhY2hlYCwgb3IgZnJvbSB3aGF0IHdhcyBqdXN0IGFsbG9jYXRlZC4gTGV0JiMzOTtzIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiBkaXJlY3RseSB0byBjb25maXJtIHRoZSBhc3NpZ25tZW50IGFuZCBzZWUgd2hhdCBpcyBhY3R1YWxseSBoYXBwZW5pbmcuIEkgd2lsbCB1c2UgdGhlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBjb21tYW5kIHRvIGludmVzdGlnYXRlIHRoZSByZWxldmFudCBsaW5lcyBpbiBgbW0vc3dhcF9zdGF0ZS5jYCBhcm91bmQgbGluZXMgNDA5LTUwMC4gVGhlbiBJJiMzOTtsbCByZS1ldmFsdWF0ZSB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3N3YXBfc3RhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0XHRzcGluX2xvY2soXHUwMDI2Y2ktXHUwMDNlbG9jayk7XG4gNDYxOlx0XHRlcnIgPSBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKGNpLCB0YXJnX2VudHJ5LCBucl9wYWdlcywgXHUwMDI2c2hhZG93LCBcdTAwMjZtZW1jZ19pZCk7XG4gNDYyOlx0XHRpZiAodW5saWtlbHkoZXJyKSkge1xuIDQ2MzpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbiA0NjQ6XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiA0NjU6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiA0NjY6XHRcdH1cbiA0Njc6XHRcbiA0Njg6XHRcdF9fZm9saW9fc2V0X2xvY2tlZChmb2xpbyk7XG4gNDY5Olx0XHRfX2ZvbGlvX3NldF9zd2FwYmFja2VkKGZvbGlvKTtcbiA0NzA6XHRcdF9fc3dhcF9jYWNoZV9kb19hZGRfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSk7XG4gNDcxOlx0XHRzcGluX3VubG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbiA0NzI6XHRcbiA0NzM6XHRcdGlmIChtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oZm9saW8sIG1lbWNnX2lkLFxuIDQ3NDpcdFx0XHRcdFx0XHQgICB2bWYgPyB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX21tIDogTlVMTCwgZ2ZwKSkge1xuIDQ3NTpcdFx0XHRzcGluX2xvY2soXHUwMDI2Y2ktXHUwMDNlbG9jayk7XG4gNDc2Olx0XHRcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcbiA0Nzc6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y2ktXHUwMDNlbG9jayk7XG4gNDc4Olx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gNDc5Olx0XHRcdC8qIG5yX3BhZ2VzIHJlZnMgZnJvbSBzd2FwIGNhY2hlLCAxIGZyb20gYWxsb2NhdGlvbiAqL1xuIDQ4MDpcdFx0XHRmb2xpb19wdXRfcmVmcyhmb2xpbywgbnJfcGFnZXMgJiM0MzsgMSk7XG4gNDgxOlx0XHRcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX1NXUElOX0ZBTExCQUNLX0NIQVJHRSk7XG4gNDgyOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIDQ4MzpcdFx0fVxuIDQ4NDpcdFxuIDQ4NTpcdFx0aWYgKG9yZGVyIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChmb2xpbykpIHtcbiA0ODY6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmNpLVx1MDAzZWxvY2spO1xuIDQ4NzpcdFx0XHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XG4gNDg4Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmNpLVx1MDAzZWxvY2spO1xuIDQ4OTpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIDQ5MDpcdFx0XHQvKiBucl9wYWdlcyByZWZzIGZyb20gc3dhcCBjYWNoZSwgMSBmcm9tIGFsbG9jYXRpb24gKi9cbiA0OTE6XHRcdFx0Zm9saW9fcHV0X3JlZnMoZm9saW8sIG5yX3BhZ2VzICYjNDM7IDEpO1xuIDQ5MjpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiA0OTM6XHRcdH1cbiA0OTQ6XHRcbiA0OTU6XHRcdC8qIG1lbXN3IHVuY2hhcmdlcyBzd2FwIHdoZW4gZm9saW8gaXMgYWRkZWQgdG8gc3dhcCBjYWNoZSAqL1xuIDQ5NjpcdFx0bWVtY2cxX3N3YXBpbihmb2xpbyk7XG4gNDk3Olx0XG4gNDk4Olx0XHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCBucl9wYWdlcyk7XG4gNDk5Olx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpO1xuIDUwMDpcdFxuIDUwMTpcdFx0aWYgKHNoYWRvd3ApXG4gNTAyOlx0XHRcdCpzaGFkb3dwID0gc2hhZG93O1xuIDUwMzpcdFxuIDUwNDpcdFx0cmV0dXJuIGZvbGlvO1xuIDUwNTpcdH1cbiA1MDY6XHRcbiA1MDc6XHQvKipcbiA1MDg6XHQgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuIDUwOTpcdCAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XG4gNTEwOlx0ICogQGdmcDogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3NcbiA1MTE6XHQgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVyb1xuIDUxMjpcdCAqIEB2bWY6IGZhdWx0IGluZm9ybWF0aW9uXG4gNTEzOlx0ICogQG1wb2w6IE5VTUEgbWVtb3J5IGFsbG9jYXRpb24gcG9saWN5IHRvIGJlIGFwcGxpZWRcbiA1MTQ6XHQgKiBAaWx4OiBOVU1BIGludGVybGVhdmUgaW5kZXgsIGZvciB1c2Ugb25seSB3aGVuIE1QT0xfSU5URVJMRUFWRVxuIDUxNTpcdCAqIEBzaGFkb3dwOiBSZXR1cm5zIHRoZSBzaGFkb3cgdGhlIGFsbG9jYXRpb24gZGlzcGxhY2VkLCBOVUxMIHRvIGlnbm9yZVxuIDUxNjpcdCAqXG4gNTE3Olx0ICogQWxsb2NhdGUgYSBmb2xpbyBpbiB0aGUgc3dhcCBjYWNoZSBmb3Igb25lIHN3YXAgc2xvdCwgdHlwaWNhbGx5IGJlZm9yZVxuIDUxODpcdCAqIGRvaW5nIElPIChlLmcuIHN3YXAgaW4gb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIHN3YXAgc2xvdCBpbmRpY2F0ZWQgYnlcbiA1MTk6XHQgKiBAdGFyZ19lbnRyeSBtdXN0IGhhdmUgYSBub24temVybyBzd2FwIGNvdW50IChzd2FwcGVkIG91dCkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjAxCgkJCQkJCQlvdXRwdXQ6IDI1MgoJCQkJCQkJdGhvdWdodHM6IDE5NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogWnN3YXAgYW5kIFN3YXAgQ2FjaGUgUmVmYWN0b3JpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBjaGVjay4gR2l2ZW4gbXkgZXhwZXJ0aXNlIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBJJiMzOTtsbCBhc3Nlc3MgdGhpcyBzeXN0ZW1hdGljYWxseS4KCkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBjb3JlIGZ1bmN0aW9uczogYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGBzd2FwaW5fc3luY2AsIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCwgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgLCBhbmQgYF9fd29ya2luZ3NldF9yZWZhdWx0YC4gSeKAmW0gbG9va2luZyBmb3IgYW55IGluZGljYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGVzcGVjaWFsbHkgc2luY2UgdGhpcyBpbnZvbHZlcyBmb2xpb3MsIHN3YXAgY2FjaGUgaW50ZXJhY3Rpb25zLCBhbmQgdGhlIHdvcmtpbmdzZXQsIGFsbCBvZiB3aGljaCBhcmUgY3JpdGljYWwgYXJlYXMuIFRoZSBgc2hhZG93YCB2YXJpYWJsZSwgaW4gcGFydGljdWxhciwgY2F1Z2h0IG15IGV5ZSwgYXMgaXQmIzM5O3MgcGFzc2VkIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnMuCgpNeSBvYnNlcnZhdGlvbnMgYXJlIHRoYXQgaW4gYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGBzaGFkb3dgIG1pZ2h0IGJlIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgZnVuY3Rpb24gYnkgYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgLCB3aGljaCBpcyBjYWxsZWQgaW5zaWRlIHRoZSBmdW5jdGlvbiwgb3IgYnkgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AgaW4gc2V2ZXJhbCBwbGFjZXMgd2hlcmUgYHNoYWRvd2AgaXMgdXNlZCwgbGlrZSBpbiBgc3dhcGluX3N5bmNgLCBgZG9fc3dhcF9wYWdlYCwgYW5kIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYC4gVGhlIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGJlY2F1c2UgaXQgY2xlYXJzIGBzaGFkb3dgIGZyb20gYW4geGFycmF5LCBhbmQgdGhlIHZhbHVlIHJldHJpZXZlZCBtYXkgY29udGFpbiBhIHBvaW50ZXIuICBJIHZlcmlmaWVkIHRoYXQgaW4gYHN3YXBpbl9zeW5jYCwgYHNoYWRvd2AgY2FuIGJlIGBOVUxMYCBidXQgaXMgY2hlY2tlZC4gVGhlIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIGFsd2F5cyByZXR1cm5zIHRoZSB2YWx1ZSwgZXZlbiBgTlVMTGAsIHNvIHRoZSBwb2ludGVyIHdpbGwgbmV2ZXIgYmVjb21lIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQuCgpJIGR1ZyBpbnRvIHRoZSBjb2RlIGFuZCBjb25maXJtZWQgdGhhdCBldmVyeSB0aW1lIGBzaGFkb3dgIG9yIHNpbWlsYXIgdmFyaWFibGVzIChgc2hhZG93X3BhcmtlZGApIGFyZSB1c2VkLCB0aGV5IGFyZSBlaXRoZXIgaW5pdGlhbGl6ZWQgdG8gYE5VTExgIGV4cGxpY2l0bHkgb3IgYXNzaWduZWQgYSB2YWx1ZSBiZWZvcmUgYmVpbmcgcmVhZC4gU3BlY2lmaWNhbGx5LCBsb29raW5nIGF0IGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCB0aGUgdmFsdWUgb2YgYHNoYWRvd2AgY29tZXMgZnJvbSB0aGUgYHhhX2xvYWRgIG9mIHRoZSBgc3dhcF96c3dhcF90cmVlYCB4YXJyYXksIGVuc3VyaW5nIHRoZSB2YWx1ZXMgYXJlIGtub3duLiBUaGUgb3RoZXIgdXNhZ2VzLCBzdWNoIGFzIGBzd2FwaW5fc3luY2AgYW5kIGBkb19zd2FwX3BhZ2VgLCBlbnN1cmUgYHNoYWRvd2AgaXMgbm90IHVzZWQgdW5pbml0aWFsaXplZC4KClRoZSBpbXBvcnRhbnQgcG9pbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyBzcGVjaWZpY2FsbHkgYWRkcmVzc2VkIGJ5IEtNU0FOLiBJIGNoZWNrZWQgdGhhdCB0aGlzIGNvZGUgZG9lc24mIzM5O3Q6IGNvcHkgZGF0YSB0byB1c2VyLXNwYWNlLCByZWFkIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjaGFuZ2UgYnVmZmVyIGJvdW5kcywgb3IgYWxsb3cgcmVhZGluZyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LiBUaGUgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCBWTSBkZWJ1Z2dpbmcgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoZSBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkZWFkbG9ja3MsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2VzcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIG1pZ2h0IGludHJvZHVjZS4KCkluIGxpZ2h0IG9mIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGUgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlIHN1YnN5c3RlbSB3aWxsIGJlIGZvdW5kIGJ5IG90aGVyIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0vIChzd2FwIGNhY2hlLCB6c3dhcCB3cml0ZWJhY2ssIGFuZCB3b3JraW5nc2V0IHJlZmF1bHQgdHJhY2tpbmcgZm9yIExSVS1tYW5hZ2VkIGZvbGlvcykuIEl0IGFkanVzdHMgaG93IHNoYWRvdyBlbnRyaWVzIGFyZSBwYXJrZWQgaW4gdGhlIHpzd2FwIHRyZWUgZHVyaW5nIHdyaXRlYmFjayBhbmQgcmVzdG9yZWQvcmVmYXVsdGVkIGR1cmluZyBzd2FwaW4uXG5cbjEuIE5vIGtlcm5lbC10by11c2VyIGluZm8tbGVhayByaXNrOiBObyBkYXRhIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGxzLCBvciBCUEYgYnVmZmVycykuXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogQWxsIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBzaGFkb3dgLCBgc2hhZG93X3BhcmtlZGAsIGFuZCBsb29wIGluZGljZXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgYXNzaWduZWQgYnkgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHBvaW50ZXJzL3ZhbHVlcy5cbjMuIEJ1ZyBhcHBsaWNhYmlsaXR5OiBQb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGludm9sdmUgcGFnZSBsb2NraW5nLCByYWNlIGNvbmRpdGlvbnMgaW4gc3dhcGNhY2hlL0xSVSBtYW5pcHVsYXRpb24sIHJlZmNvdW50aW5nLCBvciBpbnZhbGlkIHhhcnJheSBvcGVyYXRpb25zLiBUaGVzZSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgKEtBU0FOLCBMT0NLREVQLCBWTV9XQVJOL1ZNX0JVRyBhc3NlcnRpb25zKSwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS8gKHN3YXAgY2FjaGUsIHpzd2FwIHdyaXRlYmFjaywgYW5kIHdvcmtpbmdzZXQgcmVmYXVsdCB0cmFja2luZyBmb3IgTFJVLW1hbmFnZWQgZm9saW9zKS4gSXQgYWRqdXN0cyBob3cgc2hhZG93IGVudHJpZXMgYXJlIHBhcmtlZCBpbiB0aGUgenN3YXAgdHJlZSBkdXJpbmcgd3JpdGViYWNrIGFuZCByZXN0b3JlZC9yZWZhdWx0ZWQgZHVyaW5nIHN3YXBpbi5cblxuMS4gTm8ga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrIHJpc2s6IE5vIGRhdGEgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bHMsIG9yIEJQRiBidWZmZXJzKS5cbjIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOiBBbGwgbmV3bHkgaW50cm9kdWNlZCBvciBtb2RpZmllZCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYHNoYWRvd2AsIGBzaGFkb3dfcGFya2VkYCwgYW5kIGxvb3AgaW5kaWNlcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBhc3NpZ25lZCBieSBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcG9pbnRlcnMvdmFsdWVzLlxuMy4gQnVnIGFwcGxpY2FiaWxpdHk6IFBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgaW52b2x2ZSBwYWdlIGxvY2tpbmcsIHJhY2UgY29uZGl0aW9ucyBpbiBzd2FwY2FjaGUvTFJVIG1hbmlwdWxhdGlvbiwgcmVmY291bnRpbmcsIG9yIGludmFsaWQgeGFycmF5IG9wZXJhdGlvbnMuIFRoZXNlIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyAoS0FTQU4sIExPQ0tERVAsIFZNX1dBUk4vVk1fQlVHIGFzc2VydGlvbnMpLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDExOjE4OjM0LjgxNTA1NzY0MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxOTQwMDcxNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlclwiLFxuICAgIFwienN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzXCIsXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIixcbiAgICBcInpzd2FwX3N0b3JlXCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRcIixcbiAgICBcIl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS8gKHN3YXAgY2FjaGUsIHpzd2FwIHdyaXRlYmFjaywgYW5kIHdvcmtpbmdzZXQgcmVmYXVsdCB0cmFja2luZyBmb3IgTFJVLW1hbmFnZWQgZm9saW9zKS4gSXQgYWRqdXN0cyBob3cgc2hhZG93IGVudHJpZXMgYXJlIHBhcmtlZCBpbiB0aGUgenN3YXAgdHJlZSBkdXJpbmcgd3JpdGViYWNrIGFuZCByZXN0b3JlZC9yZWZhdWx0ZWQgZHVyaW5nIHN3YXBpbi5cXG5cXG4xLiBObyBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgcmlzazogTm8gZGF0YSBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3Rscywgb3IgQlBGIGJ1ZmZlcnMpLlxcbjIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOiBBbGwgbmV3bHkgaW50cm9kdWNlZCBvciBtb2RpZmllZCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYHNoYWRvd2AsIGBzaGFkb3dfcGFya2VkYCwgYW5kIGxvb3AgaW5kaWNlcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBhc3NpZ25lZCBieSBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcG9pbnRlcnMvdmFsdWVzLlxcbjMuIEJ1ZyBhcHBsaWNhYmlsaXR5OiBQb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGludm9sdmUgcGFnZSBsb2NraW5nLCByYWNlIGNvbmRpdGlvbnMgaW4gc3dhcGNhY2hlL0xSVSBtYW5pcHVsYXRpb24sIHJlZmNvdW50aW5nLCBvciBpbnZhbGlkIHhhcnJheSBvcGVyYXRpb25zLiBUaGVzZSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgKEtBU0FOLCBMT0NLREVQLCBWTV9XQVJOL1ZNX0JVRyBhc3NlcnRpb25zKSwgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgenN3YXAgc3Vic3lzdGVtIGxvZ2ljLCBzcGVjaWZpY2FsbHkgcmVmYXVsdCB0cmFja2luZyBhbmQgc2hhZG93IGVudHJ5IHByZXNlcnZhdGlvbiBhY3Jvc3MgenN3YXAgd3JpdGViYWNrIGFuZCBzd2FwLWluIHBhdGhzLiBJdCBpbnRyb2R1Y2VzIG5ldyBoZWxwZXJzICh6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyLCB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MsIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZCkgYW5kIG1vZGlmaWVzIHN3YXAgY2FjaGUgYWxsb2NhdGlvbiBhbmQgd3JpdGViYWNrIGhhbmRsaW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIHdhcnJhbnQgZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMsIG1lbW9yeSBsZWFrcywgb3IgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMToxODozNC44MTUwNjQxOTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Mjc3Mjg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYwNWVjNmI4ODljOWRhMDlhOWJkODg3MjRmZjljMzIxN2QxODViOGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTE6MTg6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXFxuaW5kZXggMzBjMTkzYTEyMDdlMS4uZGZiNzE1MzIzNmY1YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG5AQCAtMzUsNiArMzUsOCBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XFxuIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XFxuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcXG4rYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbit2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuICNlbHNlXFxuIFxcbiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9O1xcbkBAIC02OSw2ICs3MSwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmIC8qIF9MSU5VWF9aU1dBUF9IICovXFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXFxuaW5kZXggOGJlM2QyOGQ5YzNkOC4uZDE5OTQ3YTNjMzM4NSAxMDA2NDRcXG4tLS0gYS9tbS9pbnRlcm5hbC5oXFxuKysrIGIvbW0vaW50ZXJuYWwuaFxcbkBAIC0zMSw2ICszMSw3IEBAIHZvaWQgd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4gdm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xcbiB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpO1xcbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpO1xcbiB2b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gXFxuIC8qIG1tL2ZvbGlvLmMgKi9cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xcbmluZGV4IGEyYTYzYWUwOTY3YzEuLjAwNDNhOTIzN2E4ZGQgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC00ODU3LDYgKzQ4NTcsNyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xcbiBcXHRwdGVfdCAqcHRlcDtcXG4rXFx0dm9pZCAqc2hhZG93O1xcbiBcXG4gXFx0aWYgKCFwdGVfdW5tYXBfc2FtZSh2bWYpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtNDk4NCw2ICs0OTg1LDEwIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiBcXHRcXHRnb3RvIG91dF9wYWdlO1xcbiBcXHR9XFxuIFxcbitcXHRzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xcbitcXHRpZiAoc2hhZG93KVxcbitcXHRcXHR3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBLU00gc29tZXRpbWVzIGhhcyB0byBjb3B5IG9uIHJlYWQgZmF1bHRzLCBmb3IgZXhhbXBsZSwgaWZcXG4gXFx0ICogZm9saW8tXFx1MDAzZWluZGV4IG9mIG5vbi1rc20gZm9saW9zIHdvdWxkIGJlIG5vbmxpbmVhciBpbnNpZGUgdGhlXFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXFxuaW5kZXggYzMyMTJmZGVjZTliNC4uNTNmNTdhZDE5NGEzOSAxMDA2NDRcXG4tLS0gYS9tbS9zaG1lbS5jXFxuKysrIGIvbW0vc2htZW0uY1xcbkBAIC0yNDY1LDYgKzI0NjUsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcXG4gXFx0aW50IGVycm9yLCBucl9wYWdlcywgb3JkZXI7XFxuIFxcdHBnb2ZmX3Qgb2Zmc2V0O1xcbitcXHR2b2lkICpzaGFkb3c7XFxuIFxcbiBcXHRWTV9CVUdfT04oISpmb2xpb3AgfHwgIXhhX2lzX3ZhbHVlKCpmb2xpb3ApKTtcXG4gXFx0aW5kZXhfZW50cnkgPSByYWRpeF90b19zd3BfZW50cnkoKmZvbGlvcCk7XFxuQEAgLTI1NzYsNiArMjU3NywxMCBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbiBcXHQgKi9cXG4gXFx0YXJjaF9zd2FwX3Jlc3RvcmUoZm9saW9fc3dhcChzd2FwLCBmb2xpbyksIGZvbGlvKTtcXG4gXFxuK1xcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XFxuK1xcdGlmIChzaGFkb3cpXFxuK1xcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChmb2xpbywgc2hhZG93KTtcXG4rXFxuIFxcdGlmIChzaG1lbV9zaG91bGRfcmVwbGFjZV9mb2xpbyhmb2xpbywgZ2ZwKSkge1xcbiBcXHRcXHRlcnJvciA9IHNobWVtX3JlcGxhY2VfZm9saW8oXFx1MDAyNmZvbGlvLCBnZnAsIGluZm8sIGluZGV4LCB2bWEpO1xcbiBcXHRcXHRpZiAoZXJyb3IpXFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxcbmluZGV4IDBiNWQ1MDc3MzliY2IuLmRkZDEwOGI0MWQzM2EgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcC5oXFxuKysrIGIvbW0vc3dhcC5oXFxuQEAgLTMxMiw5ICszMTIsMTAgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XFxuIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9nZXRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpO1xcbiB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpO1xcbiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB2b2lkICoqc2hhZG93cCk7XFxuIC8qIEJlbG93IGhlbHBlcnMgcmVxdWlyZSB0aGUgY2FsbGVyIHRvIGxvY2sgYW5kIHBhc3MgaW4gdGhlIHN3YXAgY2x1c3Rlci4gKi9cXG4gdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XFxuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xcbmluZGV4IDMwNTg3N2UxZjRkN2IuLmU4MGE2OTRkZGRiNDcgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXFxuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXFxuQEAgLTI0LDYgKzI0LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNjdGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXBfb3BzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC96c3dhcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInN3YXBfdGFibGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInN3YXAuaFxcXCJcXG5AQCAtMjYzLDEyICsyNjQsMjEgQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiBcXHR1bnNpZ25lZCBpbnQgY2lfc3RhcnQsIGNpX29mZiwgY2lfZW5kO1xcbiBcXHRib29sIGZvbGlvX3N3YXBwZWQgPSBmYWxzZSwgbmVlZF9mcmVlID0gZmFsc2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdHZvaWQgKnNoYWRvd19wYXJrZWQ7XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0UoX19zd2FwX2VudHJ5X3RvX2NsdXN0ZXIoZW50cnkpICE9IGNpKTtcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogQSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHBhcmtlZCB0aGUgc2xvdCdzIG9yaWdpbmFsIHNoYWRvdyBpbiB0aGVcXG4rXFx0ICogenN3YXAgdHJlZTogcmVzdG9yZSBpdCBpbnRvIHRoZSBzbG90IGZvciBsYXRlciBzd2FwLWluLlxcbitcXHQgKi9cXG4rXFx0c2hhZG93X3BhcmtlZCA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XFxuK1xcdGlmIChzaGFkb3dfcGFya2VkKVxcbitcXHRcXHRzaGFkb3cgPSBzaGFkb3dfcGFya2VkO1xcbitcXG4gXFx0c2kgPSBfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSk7XFxuIFxcdGNpX3N0YXJ0ID0gc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KTtcXG4gXFx0Y2lfZW5kID0gY2lfc3RhcnQgKyBucl9wYWdlcztcXG5AQCAtNDA5LDcgKzQxOSw4IEBAIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuIFxcdFxcdFxcdFxcdFxcdHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcXG4gXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LFxcbitcXHRcXHRcXHRcXHRcXHR2b2lkICoqc2hhZG93cClcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXHRzd3BfZW50cnlfdCBlbnRyeTtcXG5AQCAtNDgzLDM3ICs0OTQsNDIgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuIFxcbiBcXHQvKiBtZW1zdyB1bmNoYXJnZXMgc3dhcCB3aGVuIGZvbGlvIGlzIGFkZGVkIHRvIHN3YXAgY2FjaGUgKi9cXG4gXFx0bWVtY2cxX3N3YXBpbihmb2xpbyk7XFxuLVxcdGlmIChzaGFkb3cpXFxuLVxcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcXG4gXFxuIFxcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcXG4gXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTtcXG4gXFxuLVxcdC8qIENhbGxlciB3aWxsIGluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgbmV3X2ZvbGlvICovXFxuLVxcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xcbitcXHRpZiAoc2hhZG93cClcXG4rXFx0XFx0KnNoYWRvd3AgPSBzaGFkb3c7XFxuK1xcbiBcXHRyZXR1cm4gZm9saW87XFxuIH1cXG4gXFxuIC8qKlxcbi0gKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cXG4rICogX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cXG4gICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcXG4gICogQGdmcDogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3NcXG4gICogQG9yZGVyczogYWxsb2NhdGlvbiBvcmRlcnMsIG11c3QgYmUgbm9uIHplcm9cXG4gICogQHZtZjogZmF1bHQgaW5mb3JtYXRpb25cXG4gICogQG1wb2w6IE5VTUEgbWVtb3J5IGFsbG9jYXRpb24gcG9saWN5IHRvIGJlIGFwcGxpZWRcXG4gICogQGlseDogTlVNQSBpbnRlcmxlYXZlIGluZGV4LCBmb3IgdXNlIG9ubHkgd2hlbiBNUE9MX0lOVEVSTEVBVkVcXG4rICogQHNoYWRvd3A6IFJldHVybnMgdGhlIHNoYWRvdyB0aGUgYWxsb2NhdGlvbiBkaXNwbGFjZWQsIE5VTEwgdG8gaWdub3JlXFxuICAqXFxuICAqIEFsbG9jYXRlIGEgZm9saW8gaW4gdGhlIHN3YXAgY2FjaGUgZm9yIG9uZSBzd2FwIHNsb3QsIHR5cGljYWxseSBiZWZvcmVcXG4gICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieVxcbiAgKiBAdGFyZ19lbnRyeSBtdXN0IGhhdmUgYSBub24temVybyBzd2FwIGNvdW50IChzd2FwcGVkIG91dCkuXFxuICAqXFxuKyAqIFRoZSByZXR1cm5lZCBmb2xpbyBpcyBsb2NrZWQgYW5kIGlzIE5PVCBvbiB0aGUgTFJVLiBUaGUgY2FsbGVyIG11c3QgZWl0aGVyXFxuKyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZVxcbisgKiBpdCBkaXJlY3RseSBvbmNlIGRvbmU7IGEgZm9saW8gbGVmdCBvZmYgdGhlIExSVSBpcyB1bnJlY2xhaW1hYmxlIGFuZCBsZWFrcy5cXG4rICpcXG4gICogQ29udGV4dDogQ2FsbGVyIG11c3QgcHJvdGVjdCB0aGUgc3dhcCBkZXZpY2Ugd2l0aCByZWZlcmVuY2UgY291bnQgb3IgbG9ja3MuXFxuICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwXFxuICAqIGNhY2hlLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYgZmFpbGVkIGR1ZSB0byByYWNlLCBPT00gb3IgaW52YWxpZCBhcmd1bWVudHMuXFxuICAqL1xcbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbi1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcXG4rc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB2b2lkICoqc2hhZG93cClcXG4ge1xcbiBcXHRpbnQgb3JkZXIsIGVycjtcXG4gXFx0c3RydWN0IGZvbGlvICpyZXQ7XFxuQEAgLTUyOCw3ICs1NDQsNyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRyZXQgPSBfX3N3YXBfY2FjaGVfYWxsb2MoY2ksIHRhcmdfZW50cnksIGdmcCwgb3JkZXIsXFxuLVxcdFxcdFxcdFxcdFxcdCB2bWYsIG1wb2wsIGlseCk7XFxuK1xcdFxcdFxcdFxcdFxcdCB2bWYsIG1wb2wsIGlseCwgc2hhZG93cCk7XFxuIFxcdFxcdGlmICghSVNfRVJSKHJldCkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRlcnIgPSBQVFJfRVJSKHJldCk7XFxuQEAgLTY0NCwxNyArNjYwLDIzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCxcXG4gXFx0XFx0cGdvZmZfdCBpbHgsIGJvb2wgcmVhZGFoZWFkKVxcbiB7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XFxuIFxcbiBcXHRkbyB7XFxuIFxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xcbiBcXHRcXHRpZiAoZm9saW8pXFxuIFxcdFxcdFxcdHJldHVybiBmb2xpbztcXG4tXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcXG4rXFx0XFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgaWx4LCBcXHUwMDI2c2hhZG93KTtcXG4gXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuIFxcbiBcXHRpZiAoSVNfRVJSX09SX05VTEwoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuK1xcdGlmIChzaGFkb3cpXFxuK1xcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcXG4rXFxuK1xcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xcbiBcXHRzd2FwX3JlYWRfZm9saW8oY3R4LCBmb2xpbyk7XFxuIFxcdGlmIChyZWFkYWhlYWQpIHtcXG4gXFx0XFx0Zm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7XFxuQEAgLTY4NSwxNyArNzA3LDIzIEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxuIHtcXG4gXFx0c3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9O1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbitcXHR2b2lkICpzaGFkb3cgPSBOVUxMO1xcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcXG4gXFx0XFx0aWYgKGZvbGlvKVxcbiBcXHRcXHRcXHRyZXR1cm4gZm9saW87XFxuLVxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcXG4rXFx0XFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBpbHgsIFxcdTAwMjZzaGFkb3cpO1xcbiBcXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcXG4gXFxuIFxcdGlmIChJU19FUlIoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm4gZm9saW87XFxuIFxcbitcXHRpZiAoc2hhZG93KVxcbitcXHRcXHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XFxuK1xcbitcXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcXG4gXFx0c3dhcF9yZWFkX2ZvbGlvKFxcdTAwMjZjdHgsIGZvbGlvKTtcXG4gXFx0c3dhcF9yZWFkX3N1Ym1pdChcXHUwMDI2Y3R4KTtcXG4gXFx0cmV0dXJuIGZvbGlvO1xcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xcbmluZGV4IDQ4ZDNjZDQwZGVmZGIuLjYxMDFmOTBlOTFkMmEgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xcbisrKyBiL21tL3N3YXBmaWxlLmNcXG5AQCAtMTg4NSw3ICsxODg1LDcgQEAgdm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gICogICBDUFUxXFx0XFx0XFx0XFx0Q1BVMlxcbiAgKiAgIGRvX3N3YXBfcGFnZSgpXFxuICAqICAgICAuLi5cXHRcXHRcXHRcXHRzd2Fwb2ZmK3N3YXBvblxcbi0gKiAgICAgc3dhcF9jYWNoZV9hbGxvY19mb2xpbygpXFxuKyAqICAgICBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oKVxcbiAgKiAgICAgICAvLyBjaGVjayBzd2FwX21hcFxcbiAgKiAgICAgLy8gdmVyaWZ5IFBURSBub3QgY2hhbmdlZFxcbiAgKlxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggNDBkM2YxYjQ4YTc0Yy4uMWNhNjQ4OWU1MDEyMiAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTQ4LDYgKzQ4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmludGsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RheC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvenN3YXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BzaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZXdhbGsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcXHUwMDNlXFxuQEAgLTc1Myw3ICs3NTQsOCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcXG4gXFx0XFx0c3dwX2VudHJ5X3Qgc3dhcCA9IGZvbGlvLVxcdTAwM2Vzd2FwO1xcbiBcXG4tXFx0XFx0aWYgKHJlY2xhaW1lZCBcXHUwMDI2XFx1MDAyNiAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKVxcbitcXHRcXHRpZiAocmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICF6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcXG4gXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG4gXFx0XFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xcbiBcXHRcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTtcXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXFxuaW5kZXggODQxMmY0ODQwYWUzNS4uOGU0NWIwYmFlYjM2ZCAxMDA2NDRcXG4tLS0gYS9tbS93b3JraW5nc2V0LmNcXG4rKysgYi9tbS93b3JraW5nc2V0LmNcXG5AQCAtNTM2LDE2ICs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxuIFxcdHJldHVybiByZWZhdWx0X2Rpc3RhbmNlIFxcdTAwM2M9IHdvcmtpbmdzZXRfc2l6ZTtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxcbi0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cXG4tICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxcbi0gKlxcbi0gKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHlcXG4tICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxcbi0gKiBwcmVzc3VyZSBjYXVzZWQgdGhlIGV2aWN0aW9uLlxcbi0gKi9cXG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbitzdGF0aWMgdm9pZCBfX3dvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3csXFxuK1xcdFxcdFxcdFxcdCBib29sIGxydV9tYW5hZ2VkKVxcbiB7XFxuIFxcdGJvb2wgZmlsZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbkBAIC01NzcsNyArNTY5LDE2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4gXFx0aWYgKCF3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHNoYWRvdywgZmlsZSwgXFx1MDAyNndvcmtpbmdzZXQsIHRydWUpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xcbitcXHQvKlxcbitcXHQgKiBBbiBMUlUtbWFuYWdlZCBmb2xpbyBtYXkgc2l0IGluIGEgcGVyLUNQVSBiYXRjaCwgd2hpY2ggY2Fubm90IGJlXFxuK1xcdCAqIGRldGVybWluZWQgaGVyZTogc2V0dGluZyB0aGUgZmxhZyB3b3VsZCByYWNlIHRoZSBkcmFpbiBhbmQgbGVhdmUgaXRcXG4rXFx0ICogZGlzYWdyZWVpbmcgd2l0aCB0aGUgbGlzdC4gZm9saW9fYWN0aXZhdGUoKSBpcyBzYWZlLCBidXQgbWlzc2VzIHRoZVxcbitcXHQgKiBhY3RpdmF0aW9uIGZvciBzdWNoIGEgZm9saW8uXFxuK1xcdCAqL1xcbitcXHRpZiAobHJ1X21hbmFnZWQpXFxuK1xcdFxcdGZvbGlvX2FjdGl2YXRlKGZvbGlvKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcXG4gXFx0d29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7XFxuIFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBXT1JLSU5HU0VUX0FDVElWQVRFX0JBU0UgKyBmaWxlLCBucik7XFxuIFxcbkBAIC01OTAsNiArNTkxLDQzIEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4gXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiB9XFxuIFxcbisvKipcXG4rICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXFxuKyAqIEBmb2xpbzogVGhlIGZyZXNobHkgYWxsb2NhdGVkIHJlcGxhY2VtZW50IGZvbGlvLlxcbisgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXFxuKyAqXFxuKyAqIENhbGN1bGF0ZXMgYW5kIGV2YWx1YXRlcyB0aGUgcmVmYXVsdCBkaXN0YW5jZSBvZiB0aGUgcHJldmlvdXNseVxcbisgKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5XFxuKyAqIHByZXNzdXJlIGNhdXNlZCB0aGUgZXZpY3Rpb24uXFxuKyAqXFxuKyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgbm90IG9uIHRoZSBMUlUgeWV0LCB0aGUgY2FsbGVyIGFkZHNcXG4rICogaXQgd2l0aCBmb2xpb19hZGRfbHJ1KCkgYWZ0ZXJ3YXJkcy5cXG4rICovXFxuK3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4re1xcbitcXHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCBmYWxzZSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHlcXG4rICogZXZpY3RlZCBmb2xpbyB0aGF0IGlzIGFscmVhZHkgb24gdGhlIExSVS5cXG4rICogQGZvbGlvOiBUaGUgZm9saW8gdGhlIGV2aWN0aW9uIGlzIHJlZmF1bHRlZCBpbnRvLlxcbisgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXFxuKyAqXFxuKyAqIExpa2Ugd29ya2luZ3NldF9yZWZhdWx0KCksIGJ1dCBmb3IgYSBmb2xpbyB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGFkZGVkXFxuKyAqIHRvIHRoZSBMUlUsIHdoaWNoIGhhcyB0byBiZSBhY3RpdmF0ZWQgYnkgbW92aW5nIGl0IGJldHdlZW4gdGhlIGxpc3RzXFxuKyAqIHJhdGhlciB0aGFuIGJ5IHNldHRpbmcgUEdfYWN0aXZlLlxcbisgKlxcbisgKiBUaGUgYWN0aXZhdGlvbiBpcyBiZXN0IGVmZm9ydDogYSBmb2xpbyBzdGlsbCBzaXR0aW5nIGluIGEgcGVyLUNQVSBMUlVcXG4rICogYmF0Y2ggY2Fubm90IGJlIG1vdmVkIHlldCBhbmQgaXMgbGVmdCBpbmFjdGl2ZS5cXG4rICpcXG4rICogQ29udGV4dDogQGZvbGlvIG11c3QgYmUgbG9ja2VkIGFuZCBhbHJlYWR5IGFkZGVkIHRvIHRoZSBMUlUuXFxuKyAqL1xcbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuK3tcXG4rXFx0X193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgdHJ1ZSk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB3b3JraW5nc2V0X2FjdGl2YXRpb24gLSBub3RlIGEgcGFnZSBhY3RpdmF0aW9uXFxuICAqIEBmb2xpbzogRm9saW8gdGhhdCBpcyBiZWluZyBhY3RpdmF0ZWQuXFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXFxuaW5kZXggYzI3ZTIyZDA2N2UzZS4uOTA0ODIxZGI0MDFmMyAxMDA2NDRcXG4tLS0gYS9tbS96c3dhcC5jXFxuKysrIGIvbW0venN3YXAuY1xcbkBAIC05NjEsNiArOTYxLDc5IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAqIHdyaXRlYmFjayBjb2RlXFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuK1xcbisjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMClcXG4rXFxuKy8qKlxcbisgKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj9cXG4rICogQGZvbGlvOiB0aGUgZm9saW8gYmVpbmcgZXhhbWluZWQgKHR5cGljYWxseSBhIHN3YXAgY2FjaGUgZm9saW8gdW5kZXIgcmVjbGFpbSlcXG4rICpcXG4rICogQSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgd2hlbiBldmVyeSBvbmUgb2YgaXRzIHN3YXAgb2Zmc2V0cyBob2xkc1xcbisgKiBhIHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93IChhIHJlYWwgc2hhZG93IG9yIHRoZSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XXFxuKyAqIHNlbnRpbmVsKSBpbiB0aGUgenN3YXAgdHJlZSByYXRoZXIgdGhhbiBhIGxpdmUgenN3YXAgZW50cnkuXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiBAZm9saW8gaXMgYSB3cml0ZWJhY2sgYnVmZmVyLCBpbiB3aGljaCBjYXNlIHRoZSByZWNsYWltIHBhdGhcXG4rICogbXVzdCBub3QgbWludCBhIGZyZXNoIHdvcmtpbmdzZXQgc2hhZG93IGZvciBpdC5cXG4rICovXFxuK2Jvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVxcdTAwM2Vzd2FwO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbitcXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXG4rXFx0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcXG4rXFx0XFx0c3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgKyBpKTtcXG4rXFxuK1xcdFxcdGlmICgheGFfaXNfdmFsdWUoeGFfbG9hZChzd2FwX3pzd2FwX3RyZWUoZSksIG9mZnNldCArIGkpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyAtIHJldHJpZXZlIGFuZCBjbGVhciBAZm9saW8ncyBwYXJrZWQgc2hhZG93KHMpXFxuKyAqIEBmb2xpbzogdGhlIHdyaXRlYmFjayBidWZmZXIgZm9saW8gKG9yIHRoZSBzd2FwaW4gZm9saW8gdGhhdCBjb25zdW1lZCBpdClcXG4rICpcXG4rICogUmVtb3ZlIGFueSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvd3MgZm9yIEBmb2xpbydzIHN3YXAgb2Zmc2V0KHMpIGZyb20gdGhlXFxuKyAqIHpzd2FwIHRyZWUuXFxuKyAqXFxuKyAqIFJldHVybjogdGhlIHByZXNlcnZlZCB3b3JraW5nc2V0IHNoYWRvdywgb3IgTlVMTCBpZiB0aGUgc2xvdChzKSBoYWQgbm8gc2hhZG93XFxuKyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkXFxuKyAqIHNoYWRvdyBpbnRvIHRoZSBzd2FwIHNsb3QgKGJ1ZmZlciBkcm9wcGVkKSBvciBmZWVkcyBpdCB0b1xcbisgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoKSAoYnVmZmVyIGNvbnN1bWVkIGJ5IGEgc3dhcGluKTsgY2xlYXJpbmdcXG4rICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LlxcbisgKi9cXG4rdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0c3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xcbitcXHR2b2lkICpzaGFkb3cgPSBOVUxMO1xcbitcXHR1bnNpZ25lZCBsb25nIGk7XFxuK1xcbitcXHRpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XFxuK1xcdFxcdHN3cF9lbnRyeV90IGUgPSBzd3BfZW50cnkoc3dwX3R5cGUoc3dwKSwgb2Zmc2V0ICsgaSk7XFxuK1xcdFxcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoZSk7XFxuK1xcdFxcdHZvaWQgKnBhcmtlZCA9IHhhX2xvYWQodHJlZSwgb2Zmc2V0ICsgaSk7XFxuK1xcbitcXHRcXHRpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQgKyBpKTtcXG4rXFx0XFx0aWYgKHBhcmtlZCAhPSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XKVxcbitcXHRcXHRcXHRzaGFkb3cgPSBwYXJrZWQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBzaGFkb3c7XFxuK31cXG4rXFxuIC8qXFxuICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsXFxuICAqIGRlY29tcHJlc3NpbmcgdGhlIGVudHJ5IGRhdGEgaW50byB0aGUgZm9saW8sIGFuZCBpc3N1aW5nIGFcXG5AQCAtOTc2LDEyICsxMDQ5LDE0IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFx0XFx0XFx0XFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxcbiB7XFxuK1xcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XFxuIFxcdHN0cnVjdCB4YXJyYXkgKnRyZWU7XFxuIFxcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3BlbnRyeSk7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XFxuIFxcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcXG4gXFx0c3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9O1xcbitcXHR2b2lkICpzaGFkb3c7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cXG5AQCAtOTkwLDggKzEwNjUsOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbiBcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gXFxuIFxcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XFxuLVxcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XFxuK1xcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXFxuK1xcdFxcdFxcdFxcdFxcdCBOT19JTlRFUkxFQVZFX0lOREVYLCBcXHUwMDI2c2hhZG93KTtcXG4gXFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcXG4gXFxuIFxcdC8qXFxuQEAgLTEwMDMsNiArMTA3OCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuIFxcdCAqL1xcbiBcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xcbitcXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIGZvbGlvIGlzIGxvY2tlZCwgYW5kIHRoZSBzd2FwY2FjaGUgaXMgbm93IHNlY3VyZWQgYWdhaW5zdFxcbkBAIC0xMDI0LDcgKzExMDAsMTIgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHhhX2VyYXNlKHRyZWUsIG9mZnNldCk7XFxuK1xcdC8qXFxuK1xcdCAqIEEgc2xvdCB3aXRoIG5vIHNoYWRvdyBhbHJlYWR5IHJlYWRzIGJhY2sgYXMgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVzpcXG4rXFx0ICogdGhlIHN3YXAgdGFibGUgbWFya3MgYSBzd2FwcGVkIG91dCBzbG90IHdpdGggeGFfbWtfdmFsdWUoMCkgYW5kIGhvbGRzXFxuK1xcdCAqIHRoZSBzaGFkb3csIHdoZW4gdGhlcmUgaXMgb25lLCBpbiB0aGF0IHNhbWUgdmFsdWUuXFxuK1xcdCAqL1xcbitcXHR4YV9zdG9yZSh0cmVlLCBvZmZzZXQsIHNoYWRvdywgR0ZQX0tFUk5FTCk7XFxuIFxcbiBcXHRjb3VudF92bV9ldmVudChaU1dQV0IpO1xcbiBcXHRpZiAoZW50cnktXFx1MDAzZW9iamNnKVxcbkBAIC0xMDQ0LDcgKzExMjUsMTUgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFxuIG91dDpcXG4gXFx0aWYgKHJldCkge1xcbi1cXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBhbGxvY2F0aW9uIGFib3ZlIG92ZXJ3cm90ZSB0aGUgc2xvdCdzIHNoYWRvdyBhbmQgbm90aGluZ1xcbitcXHRcXHQgKiBoYXMgYmVlbiBwYXJrZWQgZm9yIGl0IHlldCwgc28gcmVzdG9yZSBpdCBhcyB0aGUgZm9saW8gbGVhdmVzXFxuK1xcdFxcdCAqIHRoZSBzd2FwIGNhY2hlLCBvciB0aGUgZXZpY3Rpb24gaXQgcmVjb3JkcyBpcyBsb3N0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhzd3BlbnRyeSksIG9mZnNldCk7XFxuK1xcdFxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd3BlbnRyeSwgc2hhZG93KTtcXG4rXFx0XFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuK1xcdFxcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuIFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIFxcdH1cXG4gXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG5AQCAtMTQ4Nyw2ICsxNTc2LDE3IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpO1xcbiBcXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBBIHdyaXRlYmFjayBidWZmZXIgd2hvc2UgSU8gZmFpbGVkIGlzIHJlZGlydGllZCBhbmQgbGVmdCBpbiB0aGVcXG4rXFx0ICogc3dhcCBjYWNoZSwgc28gcmVjbGFpbSB3cml0ZXMgaXQgb3V0IGFnYWluLiBXcml0ZWJhY2sgYWxyZWFkeVxcbitcXHQgKiBkZWNpZGVkIHRoaXMgZGF0YSBiZWxvbmdzIG9uIGRpc2ssIHNvIHNlbmQgaXQgdGhlcmUgaW5zdGVhZCBvZlxcbitcXHQgKiBjb21wcmVzc2luZyBpdCBiYWNrIGludG8genN3YXAuIFRoaXMgYWxzbyBsZWF2ZXMgdGhlIHNoYWRvd1xcbitcXHQgKiBwYXJrZWQgZm9yIHRoZSBidWZmZXIgaW4gcGxhY2UsIHNvIGl0IGlzIHN0aWxsIHJlc3RvcmVkIGludG9cXG4rXFx0ICogdGhlIHNsb3Qgb25jZSB0aGUgZm9saW8gbGVhdmVzIHRoZSBzd2FwIGNhY2hlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRpZiAoIXpzd2FwX2VuYWJsZWQpXFxuIFxcdFxcdGdvdG8gY2hlY2tfb2xkO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTE6MTg6MzUuMjg4NDc0NDUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MjgxMjM2NTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJcIixcbiAgICBcInpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c1wiLFxuICAgIFwienN3YXBfd3JpdGViYWNrX2VudHJ5XCIsXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkXCIsXG4gICAgXCJfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB6c3dhcCBzdWJzeXN0ZW0gbG9naWMsIHNwZWNpZmljYWxseSByZWZhdWx0IHRyYWNraW5nIGFuZCBzaGFkb3cgZW50cnkgcHJlc2VydmF0aW9uIGFjcm9zcyB6c3dhcCB3cml0ZWJhY2sgYW5kIHN3YXAtaW4gcGF0aHMuIEl0IGludHJvZHVjZXMgbmV3IGhlbHBlcnMgKHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIsIHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cywgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKSBhbmQgbW9kaWZpZXMgc3dhcCBjYWNoZSBhbGxvY2F0aW9uIGFuZCB3cml0ZWJhY2sgaGFuZGxpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgd2FycmFudCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjA1ZWM2Yjg4OWM5ZGEwOWE5YmQ4ODcyNGZmOWMzMjE3ZDE4NWI4ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDExOjE4OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXG5pbmRleCAzMGMxOTNhMTIwN2UxLi5kZmI3MTUzMjM2ZjVjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbkBAIC0zNSw2ICszNSw4IEBAIHZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcbiB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XG4gYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xuK2Jvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbit2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2Vsc2VcbiBcbiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9O1xuQEAgLTY5LDYgKzcxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfTElOVVhfWlNXQVBfSCAqL1xuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCA4YmUzZDI4ZDljM2Q4Li5kMTk5NDdhM2MzMzg1IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTMxLDYgKzMxLDcgQEAgdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xuIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XG4rdm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcbiB2b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiAvKiBtbS9mb2xpby5jICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggYTJhNjNhZTA5NjdjMS4uMDA0M2E5MjM3YThkZCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTQ4NTcsNiArNDg1Nyw3IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcztcbiBcdHB0ZV90ICpwdGVwO1xuK1x0dm9pZCAqc2hhZG93O1xuIFxuIFx0aWYgKCFwdGVfdW5tYXBfc2FtZSh2bWYpKVxuIFx0XHRnb3RvIG91dDtcbkBAIC00OTg0LDYgKzQ5ODUsMTAgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdGdvdG8gb3V0X3BhZ2U7XG4gXHR9XG4gXG4rXHRzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xuK1x0aWYgKHNoYWRvdylcbitcdFx0d29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKGZvbGlvLCBzaGFkb3cpO1xuK1xuIFx0LypcbiBcdCAqIEtTTSBzb21ldGltZXMgaGFzIHRvIGNvcHkgb24gcmVhZCBmYXVsdHMsIGZvciBleGFtcGxlLCBpZlxuIFx0ICogZm9saW8tXHUwMDNlaW5kZXggb2Ygbm9uLWtzbSBmb2xpb3Mgd291bGQgYmUgbm9ubGluZWFyIGluc2lkZSB0aGVcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggYzMyMTJmZGVjZTliNC4uNTNmNTdhZDE5NGEzOSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0yNDY1LDYgKzI0NjUsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XG4gXHRpbnQgZXJyb3IsIG5yX3BhZ2VzLCBvcmRlcjtcbiBcdHBnb2ZmX3Qgb2Zmc2V0O1xuK1x0dm9pZCAqc2hhZG93O1xuIFxuIFx0Vk1fQlVHX09OKCEqZm9saW9wIHx8ICF4YV9pc192YWx1ZSgqZm9saW9wKSk7XG4gXHRpbmRleF9lbnRyeSA9IHJhZGl4X3RvX3N3cF9lbnRyeSgqZm9saW9wKTtcbkBAIC0yNTc2LDYgKzI1NzcsMTAgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdCAqL1xuIFx0YXJjaF9zd2FwX3Jlc3RvcmUoZm9saW9fc3dhcChzd2FwLCBmb2xpbyksIGZvbGlvKTtcbiBcbitcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7XG4rXG4gXHRpZiAoc2htZW1fc2hvdWxkX3JlcGxhY2VfZm9saW8oZm9saW8sIGdmcCkpIHtcbiBcdFx0ZXJyb3IgPSBzaG1lbV9yZXBsYWNlX2ZvbGlvKFx1MDAyNmZvbGlvLCBnZnAsIGluZm8sIGluZGV4LCB2bWEpO1xuIFx0XHRpZiAoZXJyb3IpXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCAwYjVkNTA3NzM5YmNiLi5kZGQxMDhiNDFkMzNhIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4rKysgYi9tbS9zd2FwLmhcbkBAIC0zMTIsOSArMzEyLDEwIEBAIGJvb2wgc3dhcF9jYWNoZV9oYXNfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpO1xuIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9nZXRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XG4rc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsXG4rXHRcdFx0XHQgICAgICAgdm9pZCAqKnNoYWRvd3ApO1xuIC8qIEJlbG93IGhlbHBlcnMgcmVxdWlyZSB0aGUgY2FsbGVyIHRvIGxvY2sgYW5kIHBhc3MgaW4gdGhlIHN3YXAgY2x1c3Rlci4gKi9cbiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggMzA1ODc3ZTFmNGQ3Yi4uZTgwYTY5NGRkZGI0NyAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtMjQsNiArMjQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXBfb3BzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC96c3dhcC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbiAjaW5jbHVkZSBcInN3YXBfdGFibGUuaFwiXG4gI2luY2x1ZGUgXCJzd2FwLmhcIlxuQEAgLTI2MywxMiArMjY0LDIxIEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdHVuc2lnbmVkIGludCBjaV9zdGFydCwgY2lfb2ZmLCBjaV9lbmQ7XG4gXHRib29sIGZvbGlvX3N3YXBwZWQgPSBmYWxzZSwgbmVlZF9mcmVlID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1x0dm9pZCAqc2hhZG93X3BhcmtlZDtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShfX3N3YXBfZW50cnlfdG9fY2x1c3RlcihlbnRyeSkgIT0gY2kpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG4gXG4rXHQvKlxuK1x0ICogQSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHBhcmtlZCB0aGUgc2xvdCdzIG9yaWdpbmFsIHNoYWRvdyBpbiB0aGVcbitcdCAqIHpzd2FwIHRyZWU6IHJlc3RvcmUgaXQgaW50byB0aGUgc2xvdCBmb3IgbGF0ZXIgc3dhcC1pbi5cbitcdCAqL1xuK1x0c2hhZG93X3BhcmtlZCA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4rXHRpZiAoc2hhZG93X3BhcmtlZClcbitcdFx0c2hhZG93ID0gc2hhZG93X3BhcmtlZDtcbitcbiBcdHNpID0gX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpO1xuIFx0Y2lfc3RhcnQgPSBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpO1xuIFx0Y2lfZW5kID0gY2lfc3RhcnQgKyBucl9wYWdlcztcbkBAIC00MDksNyArNDE5LDggQEAgdm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdFx0XHRzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHRcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuK1x0XHRcdFx0XHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcbitcdFx0XHRcdFx0dm9pZCAqKnNoYWRvd3ApXG4ge1xuIFx0aW50IGVycjtcbiBcdHN3cF9lbnRyeV90IGVudHJ5O1xuQEAgLTQ4MywzNyArNDk0LDQyIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFxuIFx0LyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovXG4gXHRtZW1jZzFfc3dhcGluKGZvbGlvKTtcbi1cdGlmIChzaGFkb3cpXG4tXHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbiBcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XG4gXG4tXHQvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqL1xuLVx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4rXHRpZiAoc2hhZG93cClcbitcdFx0KnNoYWRvd3AgPSBzaGFkb3c7XG4rXG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuIC8qKlxuLSAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuKyAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG4gICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcbiAgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnc1xuICAqIEBvcmRlcnM6IGFsbG9jYXRpb24gb3JkZXJzLCBtdXN0IGJlIG5vbiB6ZXJvXG4gICogQHZtZjogZmF1bHQgaW5mb3JtYXRpb25cbiAgKiBAbXBvbDogTlVNQSBtZW1vcnkgYWxsb2NhdGlvbiBwb2xpY3kgdG8gYmUgYXBwbGllZFxuICAqIEBpbHg6IE5VTUEgaW50ZXJsZWF2ZSBpbmRleCwgZm9yIHVzZSBvbmx5IHdoZW4gTVBPTF9JTlRFUkxFQVZFXG4rICogQHNoYWRvd3A6IFJldHVybnMgdGhlIHNoYWRvdyB0aGUgYWxsb2NhdGlvbiBkaXNwbGFjZWQsIE5VTEwgdG8gaWdub3JlXG4gICpcbiAgKiBBbGxvY2F0ZSBhIGZvbGlvIGluIHRoZSBzd2FwIGNhY2hlIGZvciBvbmUgc3dhcCBzbG90LCB0eXBpY2FsbHkgYmVmb3JlXG4gICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieVxuICAqIEB0YXJnX2VudHJ5IG11c3QgaGF2ZSBhIG5vbi16ZXJvIHN3YXAgY291bnQgKHN3YXBwZWQgb3V0KS5cbiAgKlxuKyAqIFRoZSByZXR1cm5lZCBmb2xpbyBpcyBsb2NrZWQgYW5kIGlzIE5PVCBvbiB0aGUgTFJVLiBUaGUgY2FsbGVyIG11c3QgZWl0aGVyXG4rICogYWRkIGl0IHRvIHRoZSBMUlUgd2l0aCBmb2xpb19hZGRfbHJ1KCkgc28gcGFnZSByZWNsYWltIGNhbiBmaW5kIGl0LCBvciBmcmVlXG4rICogaXQgZGlyZWN0bHkgb25jZSBkb25lOyBhIGZvbGlvIGxlZnQgb2ZmIHRoZSBMUlUgaXMgdW5yZWNsYWltYWJsZSBhbmQgbGVha3MuXG4rICpcbiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy5cbiAgKiBSZXR1cm46IFJldHVybnMgdGhlIGZvbGlvIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkIGFuZCBmb2xpbyBpcyBpbiB0aGUgc3dhcFxuICAqIGNhY2hlLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYgZmFpbGVkIGR1ZSB0byByYWNlLCBPT00gb3IgaW52YWxpZCBhcmd1bWVudHMuXG4gICovXG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LFxuK1x0XHRcdFx0ICAgICAgIHZvaWQgKipzaGFkb3dwKVxuIHtcbiBcdGludCBvcmRlciwgZXJyO1xuIFx0c3RydWN0IGZvbGlvICpyZXQ7XG5AQCAtNTI4LDcgKzU0NCw3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4gXG4gXHRkbyB7XG4gXHRcdHJldCA9IF9fc3dhcF9jYWNoZV9hbGxvYyhjaSwgdGFyZ19lbnRyeSwgZ2ZwLCBvcmRlcixcbi1cdFx0XHRcdFx0IHZtZiwgbXBvbCwgaWx4KTtcbitcdFx0XHRcdFx0IHZtZiwgbXBvbCwgaWx4LCBzaGFkb3dwKTtcbiBcdFx0aWYgKCFJU19FUlIocmV0KSlcbiBcdFx0XHRicmVhaztcbiBcdFx0ZXJyID0gUFRSX0VSUihyZXQpO1xuQEAgLTY0NCwxNyArNjYwLDIzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCxcbiBcdFx0cGdvZmZfdCBpbHgsIGJvb2wgcmVhZGFoZWFkKVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHR2b2lkICpzaGFkb3cgPSBOVUxMO1xuIFxuIFx0ZG8ge1xuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdFx0aWYgKGZvbGlvKVxuIFx0XHRcdHJldHVybiBmb2xpbztcbi1cdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbitcdFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLFxuK1x0XHRcdFx0XHRcdCBpbHgsIFx1MDAyNnNoYWRvdyk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0aWYgKHNoYWRvdylcbitcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuK1xuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRzd2FwX3JlYWRfZm9saW8oY3R4LCBmb2xpbyk7XG4gXHRpZiAocmVhZGFoZWFkKSB7XG4gXHRcdGZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pO1xuQEAgLTY4NSwxNyArNzA3LDIzIEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4ge1xuIFx0c3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4rXHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLFxuK1x0XHRcdFx0XHRcdCBpbHgsIFx1MDAyNnNoYWRvdyk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIFx0XHRyZXR1cm4gZm9saW87XG4gXG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4rXG4rXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9mb2xpbyhcdTAwMjZjdHgsIGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9zdWJtaXQoXHUwMDI2Y3R4KTtcbiBcdHJldHVybiBmb2xpbztcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggNDhkM2NkNDBkZWZkYi4uNjEwMWY5MGU5MWQyYSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xODg1LDcgKzE4ODUsNyBAQCB2b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuICAqICAgQ1BVMVx0XHRcdFx0Q1BVMlxuICAqICAgZG9fc3dhcF9wYWdlKClcbiAgKiAgICAgLi4uXHRcdFx0XHRzd2Fwb2ZmK3N3YXBvblxuLSAqICAgICBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKClcbisgKiAgICAgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKClcbiAgKiAgICAgICAvLyBjaGVjayBzd2FwX21hcFxuICAqICAgICAvLyB2ZXJpZnkgUFRFIG5vdCBjaGFuZ2VkXG4gICpcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA0MGQzZjFiNDhhNzRjLi4xY2E2NDg5ZTUwMTIyIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDgsNiArNDgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbkBAIC03NTMsNyArNzU0LDggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbi1cdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbitcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICF6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcbiBcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuIFx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4gXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggODQxMmY0ODQwYWUzNS4uOGU0NWIwYmFlYjM2ZCAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuKysrIGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNTM2LDE2ICs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4gXHRyZXR1cm4gcmVmYXVsdF9kaXN0YW5jZSBcdTAwM2M9IHdvcmtpbmdzZXRfc2l6ZTtcbiB9XG4gXG4tLyoqXG4tICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXG4tICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uXG4tICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxuLSAqXG4tICogQ2FsY3VsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSByZWZhdWx0IGRpc3RhbmNlIG9mIHRoZSBwcmV2aW91c2x5XG4tICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxuLSAqIHByZXNzdXJlIGNhdXNlZCB0aGUgZXZpY3Rpb24uXG4tICovXG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuK3N0YXRpYyB2b2lkIF9fd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyxcbitcdFx0XHRcdCBib29sIGxydV9tYW5hZ2VkKVxuIHtcbiBcdGJvb2wgZmlsZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbkBAIC01NzcsNyArNTY5LDE2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdGlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsIFx1MDAyNndvcmtpbmdzZXQsIHRydWUpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuK1x0LypcbitcdCAqIEFuIExSVS1tYW5hZ2VkIGZvbGlvIG1heSBzaXQgaW4gYSBwZXItQ1BVIGJhdGNoLCB3aGljaCBjYW5ub3QgYmVcbitcdCAqIGRldGVybWluZWQgaGVyZTogc2V0dGluZyB0aGUgZmxhZyB3b3VsZCByYWNlIHRoZSBkcmFpbiBhbmQgbGVhdmUgaXRcbitcdCAqIGRpc2FncmVlaW5nIHdpdGggdGhlIGxpc3QuIGZvbGlvX2FjdGl2YXRlKCkgaXMgc2FmZSwgYnV0IG1pc3NlcyB0aGVcbitcdCAqIGFjdGl2YXRpb24gZm9yIHN1Y2ggYSBmb2xpby5cbitcdCAqL1xuK1x0aWYgKGxydV9tYW5hZ2VkKVxuK1x0XHRmb2xpb19hY3RpdmF0ZShmb2xpbyk7XG4rXHRlbHNlXG4rXHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuIFx0d29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9CQVNFICsgZmlsZSwgbnIpO1xuIFxuQEAgLTU5MCw2ICs1OTEsNDMgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuIFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIH1cbiBcbisvKipcbisgKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby5cbisgKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbisgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXG4rICpcbisgKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHlcbisgKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5XG4rICogcHJlc3N1cmUgY2F1c2VkIHRoZSBldmljdGlvbi5cbisgKlxuKyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgbm90IG9uIHRoZSBMUlUgeWV0LCB0aGUgY2FsbGVyIGFkZHNcbisgKiBpdCB3aXRoIGZvbGlvX2FkZF9scnUoKSBhZnRlcndhcmRzLlxuKyAqL1xuK3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbit7XG4rXHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCBmYWxzZSk7XG4rfVxuK1xuKy8qKlxuKyAqIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseVxuKyAqIGV2aWN0ZWQgZm9saW8gdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBMUlUuXG4rICogQGZvbGlvOiBUaGUgZm9saW8gdGhlIGV2aWN0aW9uIGlzIHJlZmF1bHRlZCBpbnRvLlxuKyAqIEBzaGFkb3c6IFNoYWRvdyBlbnRyeSBvZiB0aGUgZXZpY3RlZCBmb2xpby5cbisgKlxuKyAqIExpa2Ugd29ya2luZ3NldF9yZWZhdWx0KCksIGJ1dCBmb3IgYSBmb2xpbyB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGFkZGVkXG4rICogdG8gdGhlIExSVSwgd2hpY2ggaGFzIHRvIGJlIGFjdGl2YXRlZCBieSBtb3ZpbmcgaXQgYmV0d2VlbiB0aGUgbGlzdHNcbisgKiByYXRoZXIgdGhhbiBieSBzZXR0aW5nIFBHX2FjdGl2ZS5cbisgKlxuKyAqIFRoZSBhY3RpdmF0aW9uIGlzIGJlc3QgZWZmb3J0OiBhIGZvbGlvIHN0aWxsIHNpdHRpbmcgaW4gYSBwZXItQ1BVIExSVVxuKyAqIGJhdGNoIGNhbm5vdCBiZSBtb3ZlZCB5ZXQgYW5kIGlzIGxlZnQgaW5hY3RpdmUuXG4rICpcbisgKiBDb250ZXh0OiBAZm9saW8gbXVzdCBiZSBsb2NrZWQgYW5kIGFscmVhZHkgYWRkZWQgdG8gdGhlIExSVS5cbisgKi9cbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4re1xuK1x0X193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgdHJ1ZSk7XG4rfVxuK1xuIC8qKlxuICAqIHdvcmtpbmdzZXRfYWN0aXZhdGlvbiAtIG5vdGUgYSBwYWdlIGFjdGl2YXRpb25cbiAgKiBAZm9saW86IEZvbGlvIHRoYXQgaXMgYmVpbmcgYWN0aXZhdGVkLlxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBjMjdlMjJkMDY3ZTNlLi45MDQ4MjFkYjQwMWYzIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTk2MSw2ICs5NjEsNzkgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIHdyaXRlYmFjayBjb2RlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbitcbisjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMClcbitcbisvKipcbisgKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj9cbisgKiBAZm9saW86IHRoZSBmb2xpbyBiZWluZyBleGFtaW5lZCAodHlwaWNhbGx5IGEgc3dhcCBjYWNoZSBmb2xpbyB1bmRlciByZWNsYWltKVxuKyAqXG4rICogQSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgd2hlbiBldmVyeSBvbmUgb2YgaXRzIHN3YXAgb2Zmc2V0cyBob2xkc1xuKyAqIGEgcGFya2VkIHdyaXRlYmFjayBzaGFkb3cgKGEgcmVhbCBzaGFkb3cgb3IgdGhlIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1dcbisgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIEBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIsIGluIHdoaWNoIGNhc2UgdGhlIHJlY2xhaW0gcGF0aFxuKyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuXG4rICovXG4rYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0c3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tXHUwMDNlc3dhcDtcbitcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcbitcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcbitcdFx0c3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgKyBpKTtcbitcbitcdFx0aWYgKCF4YV9pc192YWx1ZSh4YV9sb2FkKHN3YXBfenN3YXBfdHJlZShlKSwgb2Zmc2V0ICsgaSkpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKipcbisgKiB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MgLSByZXRyaWV2ZSBhbmQgY2xlYXIgQGZvbGlvJ3MgcGFya2VkIHNoYWRvdyhzKVxuKyAqIEBmb2xpbzogdGhlIHdyaXRlYmFjayBidWZmZXIgZm9saW8gKG9yIHRoZSBzd2FwaW4gZm9saW8gdGhhdCBjb25zdW1lZCBpdClcbisgKlxuKyAqIFJlbW92ZSBhbnkgcGFya2VkIHdyaXRlYmFjayBzaGFkb3dzIGZvciBAZm9saW8ncyBzd2FwIG9mZnNldChzKSBmcm9tIHRoZVxuKyAqIHpzd2FwIHRyZWUuXG4rICpcbisgKiBSZXR1cm46IHRoZSBwcmVzZXJ2ZWQgd29ya2luZ3NldCBzaGFkb3csIG9yIE5VTEwgaWYgdGhlIHNsb3QocykgaGFkIG5vIHNoYWRvd1xuKyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkXG4rICogc2hhZG93IGludG8gdGhlIHN3YXAgc2xvdCAoYnVmZmVyIGRyb3BwZWQpIG9yIGZlZWRzIGl0IHRvXG4rICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKCkgKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nXG4rICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LlxuKyAqL1xuK3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1x0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7XG4rXHR2b2lkICpzaGFkb3cgPSBOVUxMO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1xuK1x0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XG4rXHRcdHN3cF9lbnRyeV90IGUgPSBzd3BfZW50cnkoc3dwX3R5cGUoc3dwKSwgb2Zmc2V0ICsgaSk7XG4rXHRcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoZSk7XG4rXHRcdHZvaWQgKnBhcmtlZCA9IHhhX2xvYWQodHJlZSwgb2Zmc2V0ICsgaSk7XG4rXG4rXHRcdGlmICgheGFfaXNfdmFsdWUocGFya2VkKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0ICsgaSk7XG4rXHRcdGlmIChwYXJrZWQgIT0gWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVylcbitcdFx0XHRzaGFkb3cgPSBwYXJrZWQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gc2hhZG93O1xuK31cbitcbiAvKlxuICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsXG4gICogZGVjb21wcmVzc2luZyB0aGUgZW50cnkgZGF0YSBpbnRvIHRoZSBmb2xpbywgYW5kIGlzc3VpbmcgYVxuQEAgLTk3NiwxMiArMTA0OSwxNCBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbiB7XG4rXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuIFx0c3RydWN0IHhhcnJheSAqdHJlZTtcbiBcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3BlbnRyeSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcbiBcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcbiBcdHN0cnVjdCBzd2FwX2lvX2N0eCBjdHggPSB7fTtcbitcdHZvaWQgKnNoYWRvdztcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbkBAIC05OTAsOCArMTA2NSw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuIFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbi1cdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxuLVx0XHRcdFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xuK1x0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbitcdFx0XHRcdFx0IE5PX0lOVEVSTEVBVkVfSU5ERVgsIFx1MDAyNnNoYWRvdyk7XG4gXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFxuIFx0LypcbkBAIC0xMDAzLDYgKzEwNzgsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0ICovXG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXG4gXHQvKlxuIFx0ICogZm9saW8gaXMgbG9ja2VkLCBhbmQgdGhlIHN3YXBjYWNoZSBpcyBub3cgc2VjdXJlZCBhZ2FpbnN0XG5AQCAtMTAyNCw3ICsxMTAwLDEyIEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcbitcdC8qXG4rXHQgKiBBIHNsb3Qgd2l0aCBubyBzaGFkb3cgYWxyZWFkeSByZWFkcyBiYWNrIGFzIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c6XG4rXHQgKiB0aGUgc3dhcCB0YWJsZSBtYXJrcyBhIHN3YXBwZWQgb3V0IHNsb3Qgd2l0aCB4YV9ta192YWx1ZSgwKSBhbmQgaG9sZHNcbitcdCAqIHRoZSBzaGFkb3csIHdoZW4gdGhlcmUgaXMgb25lLCBpbiB0aGF0IHNhbWUgdmFsdWUuXG4rXHQgKi9cbitcdHhhX3N0b3JlKHRyZWUsIG9mZnNldCwgc2hhZG93LCBHRlBfS0VSTkVMKTtcbiBcbiBcdGNvdW50X3ZtX2V2ZW50KFpTV1BXQik7XG4gXHRpZiAoZW50cnktXHUwMDNlb2JqY2cpXG5AQCAtMTA0NCw3ICsxMTI1LDE1IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gb3V0OlxuIFx0aWYgKHJldCkge1xuLVx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBhbGxvY2F0aW9uIGFib3ZlIG92ZXJ3cm90ZSB0aGUgc2xvdCdzIHNoYWRvdyBhbmQgbm90aGluZ1xuK1x0XHQgKiBoYXMgYmVlbiBwYXJrZWQgZm9yIGl0IHlldCwgc28gcmVzdG9yZSBpdCBhcyB0aGUgZm9saW8gbGVhdmVzXG4rXHRcdCAqIHRoZSBzd2FwIGNhY2hlLCBvciB0aGUgZXZpY3Rpb24gaXQgcmVjb3JkcyBpcyBsb3N0LlxuK1x0XHQgKi9cbitcdFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhzd3BlbnRyeSksIG9mZnNldCk7XG4rXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd3BlbnRyeSwgc2hhZG93KTtcbitcdFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4rXHRcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHR9XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuQEAgLTE0ODcsNiArMTU3NiwxNyBAQCBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XG4gXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSk7XG4gXG4rXHQvKlxuK1x0ICogQSB3cml0ZWJhY2sgYnVmZmVyIHdob3NlIElPIGZhaWxlZCBpcyByZWRpcnRpZWQgYW5kIGxlZnQgaW4gdGhlXG4rXHQgKiBzd2FwIGNhY2hlLCBzbyByZWNsYWltIHdyaXRlcyBpdCBvdXQgYWdhaW4uIFdyaXRlYmFjayBhbHJlYWR5XG4rXHQgKiBkZWNpZGVkIHRoaXMgZGF0YSBiZWxvbmdzIG9uIGRpc2ssIHNvIHNlbmQgaXQgdGhlcmUgaW5zdGVhZCBvZlxuK1x0ICogY29tcHJlc3NpbmcgaXQgYmFjayBpbnRvIHpzd2FwLiBUaGlzIGFsc28gbGVhdmVzIHRoZSBzaGFkb3dcbitcdCAqIHBhcmtlZCBmb3IgdGhlIGJ1ZmZlciBpbiBwbGFjZSwgc28gaXQgaXMgc3RpbGwgcmVzdG9yZWQgaW50b1xuK1x0ICogdGhlIHNsb3Qgb25jZSB0aGUgZm9saW8gbGVhdmVzIHRoZSBzd2FwIGNhY2hlLlxuK1x0ICovXG4rXHRpZiAoenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihmb2xpbykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGlmICghenN3YXBfZW5hYmxlZClcbiBcdFx0Z290byBjaGVja19vbGQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMToxODozNS4yODg0NzU2OTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzgxNDUwMzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIGdpdmVuIGl0cyB0b3VjaCBwb2ludHMgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAobW0vKSwgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBXZSdyZSB0YWxraW5nIGFib3V0IGZ1bmRhbWVudGFsIGNoYW5nZXMgaGVyZSwgc28gd2UgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuRmlyc3QsIEkgc2VlIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgYSBidW5jaCBvZiBrZXkgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L3pzd2FwLmhgLCBgbW0vaW50ZXJuYWwuaGAsIGBtbS9tZW1vcnkuY2AsIGBtbS9zaG1lbS5jYCwgYG1tL3N3YXAuaGAsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vc3dhcGZpbGUuY2AsIGBtbS92bXNjYW4uY2AsIGBtbS93b3JraW5nc2V0LmNgLCBhbmQgYG1tL3pzd2FwLmNgLiBBIHNpZ25pZmljYW50IG92ZXJsYXAgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNwYWNlIG1lYW5zIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyAqd2hhdCogc3BlY2lmaWNhbGx5IGhhcyBjaGFuZ2VkLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIHpzd2FwLCBzd2FwIGNhY2hlIGJlaGF2aW9yLCB3b3JraW5nc2V0IHJlZmF1bHQgdHJhY2tpbmcsIGFuZCBzd2FwLWluIGxvZ2ljIHdpdGhpbiBgZG9fc3dhcF9wYWdlYCBhbmQgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGFuZCB0aGUgd3JpdGViYWNrIGluIHpzd2FwLiBUaGVzZSBhcmUgYWxsIGNvcmUgZnVuY3Rpb25hbGl0aWVzLCBhbmQgYW55IHN1YnRsZSBjaGFuZ2UgaW4gdGhlc2UgYXJlYXMgY291bGQgYmUgYSBwb3RlbnRpYWwgYnVnIHdhaXRpbmcgdG8gYmUgZm91bmQuXG5cbk5vdywgbGV0J3MgZXhhbWluZSB0aGUgbW9kaWZpZWQgbG9naWMgaW4gZGV0YWlsOiBUaGUgaW50cm9kdWNlZC9tb2RpZmllZCBmdW5jdGlvbnMsIGxpa2UgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgLCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCwgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAsIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2AsIGBfX3JlbW92ZV9tYXBwaW5nYCwgdGhlIGhhbmRsaW5nIG9mIHNoYWRvd3MsIHdyaXRlYmFjayBjaGFuZ2VzLiBUaGlzIGNsZWFybHkgc2hvd3Mgc3Vic3RhbnRpYWwgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudC4gVGhlcmUncyBhIGxvdCBvZiBwb3RlbnRpYWwgZm9yIHN5emthbGxlciB0byB1bmNvdmVyIHVuZXhwZWN0ZWQgc3RhdGVzIG9yIGludGVyYWN0aW9ucyBoZXJlLlxuXG5SZWdhcmRpbmcgXCJydWxlcyxcIiBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgZXhlY3V0aW9uLiBUaGUgXCJXb3J0aEZ1enppbmdcIiBmbGFnIGlzIHNldCB0byBUUlVFLCBhcyB3ZSdyZSBsb29raW5nIGF0IGNvcmUgc3Vic3lzdGVtcyB3aXRoIGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHdvcmtpbmdzZXQgbGlmZWN5Y2xlIGFuZCB6c3dhcCB3cml0ZWJhY2sgaGFuZGxpbmcuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LlxuXG5OZXh0IHN0ZXA6IEknbSBnb2luZyB0byBkZXRlcm1pbmUgd2hhdCBzcGVjaWZpYyBLY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSwgZXNwZWNpYWxseSB0aG9zZSByZWxhdGVkIHRvIFpTV0FQLiBJJ2xsIHVzZSBncmVwcGVyIG9yIGZpbGUgcmVhZGluZyB0byBsb29rIGZvciBaU1dBUCBhbmQgcmVsYXRlZCBjb25maWdzIHRvIGVuc3VyZSBzeXprYWxsZXIgY2FuIHJlYWNoIGFsbCBhZmZlY3RlZCBjb2RlIHBhdGhzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gZGVmaW5lIHRoZSBjb25maWd1cmF0aW9ucyBuZWNlc3NhcnkgdG8gYWNjdXJhdGVseSBmdXp6IHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg0MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDExOjE4OjQxLjA2OTkyNzg3NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTA0MTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXFxuLS1cXG5tbS9LY29uZmlnLTIxLVxcbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXFxubW0vS2NvbmZpZy0yMy1cXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0zNC1cXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctNDQtXFxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbm1tL0tjb25maWctNDYtXFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9NTk9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTc2LVxcbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXFxubW0vS2NvbmZpZy03OC1cXHRib29sIFxcXCJEZWZsYXRlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04Mi1cXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXFxubW0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJMWk9cXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg4LVxcbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcXG5tbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQtXFxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxcbm1tL0tjb25maWctOTYtXFx0Ym9vbCBcXFwiTFo0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDAtXFxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xcbm1tL0tjb25maWctMTAyLVxcdGJvb2wgXFxcIkxaNEhDXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDYtXFxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXFxubW0vS2NvbmZpZy0xMDgtXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxcbm1tL0tjb25maWctMTEzLVxcbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDExOjE4OjQxLjEyMDk3NzEzNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3MzE3NDQxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIFpTV0FQIERlcGVuZGVuY2llcyBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYFpTV0FQYCBjb25maWd1cmF0aW9uIGFuZCBpdHMgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJJ2xsIGp1bXAgcmlnaHQgdG8gYXJvdW5kIGxpbmUgMjAsIGFzIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50LXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGVuZCB0byBiZSBncm91cGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBvcHRpb25zICptdXN0KiBiZSBlbmFibGVkIG9yIGFyZSByZXF1aXJlZCBiZWZvcmUgYFpTV0FQYCBpcyBldmVuIHByZXNlbnRlZCBhcyBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIHdpbGwgc2F2ZSBtZSB0aW1lIGRlYnVnZ2luZyBkb3duIHRoZSBsaW5lOyB0aGVyZSdzIG5vIHBvaW50IGNoZWNraW5nICp3aHkqIFpTV0FQIGlzIGRpc2FibGVkIHdpdGhvdXQgdmVyaWZ5aW5nIGl0cyBkZXBlbmRlbmNpZXMuIEknbSBsb29raW5nIGZvciBkaXJlY3QgZGVwZW5kZW5jaWVzLCBsaWtlIGBFWFBFUklNRU5UQUxgLCBvciBwb3RlbnRpYWxseSBpbmRpcmVjdCBvbmVzIHRocm91Z2ggb3RoZXIgZmVhdHVyZSBvcHRpb25zIHRoYXQgbXVzdCBiZSBhY3RpdmUgYmVmb3JlIHRoZSBgWlNXQVBgIG9wdGlvbiBpcyBwcmVzZW50LiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBpbnZvbHZlIGBib29sYCBvciBgdHJpc3RhdGVgIG9wdGlvbnMgYW5kIHNvbWUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTE6MTg6NDQuODUyNzIzMTY5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0bWVudSBcXFwiTWVtb3J5IE1hbmFnZW1lbnQgb3B0aW9uc1xcXCJcXG4gICA0OlxcdFxcbiAgIDU6XFx0I1xcbiAgIDY6XFx0IyBGb3Igc29tZSByZWFzb24gbWljcm9ibGF6ZSBhbmQgbmlvczIgaGFyZCBjb2RlIFNXQVA9bi4gIEhvcGVmdWxseSB3ZSBjYW5cXG4gICA3OlxcdCMgYWRkIHByb3BlciBTV0FQIHN1cHBvcnQgdG8gdGhlbSwgaW4gd2hpY2ggY2FzZSB0aGlzIGNhbiBiZSByZW1vdmUuXFxuICAgODpcXHQjXFxuICAgOTpcXHRjb25maWcgQVJDSF9OT19TV0FQXFxuICAxMDpcXHRcXHRib29sXFxuICAxMTpcXHRcXG4gIDEyOlxcdG1lbnVjb25maWcgU1dBUFxcbiAgMTM6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXFxcIlxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBNTVUgXFx1MDAyNlxcdTAwMjYgQkxPQ0sgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfTk9fU1dBUFxcbiAgMTU6XFx0XFx0ZGVmYXVsdCB5XFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XFxuICAxODpcXHRcXHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcXG4gIDE5OlxcdFxcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XFxuICAyMDpcXHRcXHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBaU1dBUFxcbiAgMjM6XFx0XFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gU1dBUFxcbiAgMjU6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgMjY6XFx0XFx0c2VsZWN0IFpTTUFMTE9DXFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXFxuICAyOTpcXHRcXHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xcbiAgMzA6XFx0XFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxcbiAgMzE6XFx0XFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcXG4gIDMyOlxcdFxcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxcbiAgMzM6XFx0XFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG4gIDM2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXFxuICA0MDpcXHRcXHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHQgIFRoZSBzZWxlY3Rpb24gbWFkZSBoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSBrZXJuZWxcXG4gIDQzOlxcdFxcdCAgY29tbWFuZCBsaW5lICd6c3dhcC5lbmFibGVkPScgb3B0aW9uLlxcbiAgNDQ6XFx0XFxuICA0NTpcXHRjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbiAgNDY6XFx0XFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4gIDQ3OlxcdFxcdGRlcGVuZHMgb24gWlNXQVBcXG4gIDQ4OlxcdFxcdGRlZmF1bHQgblxcbiAgNDk6XFx0XFx0aGVscFxcbiAgNTA6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIHpzd2FwIHNocmlua2VyIHdpbGwgYmUgZW5hYmxlZCwgYW5kIHRoZSBwYWdlc1xcbiAgNTE6XFx0XFx0ICBzdG9yZWQgaW4gdGhlIHpzd2FwIHBvb2wgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIGZvciByZWNsYWltIChpLmVcXG4gIDUyOlxcdFxcdCAgd3JpdHRlbiBiYWNrIHRvIHRoZSBiYWNraW5nIHN3YXAgZGV2aWNlKSBvbiBtZW1vcnkgcHJlc3N1cmUuXFxuICA1MzpcXHRcXG4gIDU0OlxcdFxcdCAgVGhpcyBtZWFucyB0aGF0IHpzd2FwIHdyaXRlYmFjayBjb3VsZCBoYXBwZW4gZXZlbiBpZiB0aGUgcG9vbCBpc1xcbiAgNTU6XFx0XFx0ICBub3QgeWV0IGZ1bGwsIG9yIHRoZSBjZ3JvdXAgenN3YXAgbGltaXQgaGFzIG5vdCBiZWVuIHJlYWNoZWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDExOjE4OjQ0Ljg1Mjg4MDY0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyMTIyMDMzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgU3dhcCBDb25maWd1cmF0aW9uIGZvciBPcHRpbWl6YXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHN3YXAgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIGBDT05GSUdfU1dBUGAgYW5kIGBDT05GSUdfWlNXQVBgIGFyZSB0aGUgYmlnIG9uZXMuIE5hdHVyYWxseSwgSSBzaG91bGQgY2hlY2sgd2hldGhlciBgQ09ORklHX1pTV0FQX0RFRkFVTFRfT05gIG9yIGBDT05GSUdfWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAgYXJlIHJlbGV2YW50IGZsYWdzIGhlcmUsIGFsdGhvdWdoIHRoZSBjb3JlIG9mIGl0IHdpbGwgYWx3YXlzIGNlbnRlciBhcm91bmQgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGBaU1dBUGAgYW5kIGBTV0FQYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IG1peCBoZXJlLlxuXG5Ob3csIEkgYWxzbyBuZWVkIHRvIGJlIG1pbmRmdWwgb2Ygb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2Ugc3dhcCBiZWhhdmlvci4gSXQncyB0aW1lIHRvIGNvbnNpZGVyIHRoZSBtZW1vcnkgY29udHJvbCBncm91cHM7IGRvZXMgYE1FTUNHYCwgYE1FTUNHX1YxYCwgb3IgYE1FTUNHX1NXQVBgIGhhdmUgYSByb2xlIGluIHRoZSBjb25maWd1cmF0aW9uPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoZXNlIGludGVyYWN0LlxuXG5BbmQgbGFzdGx5LCBJIHNob3VsZCBsb29rIGRpcmVjdGx5IGF0IHRoZSBpbXBsZW1lbnRhdGlvbjsgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvZGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYG1tL3N3YXBfc3RhdGUuY2AgZmlsZSBhbmQgcG90ZW50aWFsbHkgb3RoZXIgYXJlYXMgZm9yIGhvdyBgbWVtY2cxX3N3YXBpbmAgaXMgaGFuZGxlZC4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjU3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTE6MTg6NDkuMDY1MDg2MjEyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwOTk0NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19aU1dBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Nzk9b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxubW0vTWFrZWZpbGU6ODA6b2JqLSQoQ09ORklHX1pTV0FQKVxcdCs9IHpzd2FwLm9cXG5tbS9NYWtlZmlsZS04MS1vYmotJChDT05GSUdfSEFTX0RNQSlcXHQrPSBkbWFwb29sLm9cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01OTk9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjE1LSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo2MTY6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy02MTctXFx0WlNXUElOLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1OTc9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjA3LVxcdHsgXFxcInNobWVtXFxcIixcXHRcXHRcXHROUl9TSE1FTVxcdFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE2MDg6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy0xNjA5LVxcdHsgXFxcInpzd2FwXFxcIixcXHRcXHRcXHRNRU1DR19aU1dBUF9CXFx0XFx0XFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MjY2PW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQyNzgtXFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LCBQQUdFX0NPVU5URVJfTUFYKTtcXG5tbS9tZW1jb250cm9sLmM6NDI3OTojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTQyODAtXFx0bWVtY2ctXFx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDQ2OD1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZXNldChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ0NzQtXFx0V1JJVEVfT05DRShtZW1jZy1cXHUwMDNlb29tX2dyb3VwLCBmYWxzZSk7XFxubW0vbWVtY29udHJvbC5jOjQ0NzU6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy00NDc2LVxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZXpzd2FwX21heCwgUEFHRV9DT1VOVEVSX01BWCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTc0Nj1zdGF0aWMgdm9pZCBfX2luaXQgbWVtY2dfc3RydWN0X2NoZWNrKHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc5OS1cXHRcXHRcXHRcXHQgICAgICB2bXN0YXRzKTtcXG5tbS9tZW1jb250cm9sLmM6NTgwMDojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTU4MDEtXFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IG1lbV9jZ3JvdXAsIG1lbWNnX3JlYWRfbW9zdGx5LFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTYxMTk9c3RhdGljIHN0cnVjdCBjZnR5cGUgc3dhcF9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTYxNTMtXFxubW0vbWVtY29udHJvbC5jOjYxNTQ6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy02MTU1LS8qKlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTYzMzE9c3RhdGljIHN0cnVjdCBjZnR5cGUgenN3YXBfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MzQ5LX07XFxubW0vbWVtY29udHJvbC5jOjYzNTA6I2VuZGlmIC8qIENPTkZJR19aU1dBUCAqL1xcbm1tL21lbWNvbnRyb2wuYy02MzUxLVxcbm1tL21lbWNvbnRyb2wuYz02MzUyPXN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjM2MC0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NjM2MTojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTYzNjItXFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHpzd2FwX2ZpbGVzKSk7XFxuLS1cXG5tbS92bXN0YXQuYz0xMTk5PWNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xcbi0tXFxubW0vdm1zdGF0LmMtMTQ2NC0jZW5kaWZcXG5tbS92bXN0YXQuYzoxNDY1OiNpZmRlZiBDT05GSUdfWlNXQVBcXG5tbS92bXN0YXQuYy0xNDY2LVxcdFtJKFpTV1BJTildXFx0XFx0XFx0XFx0PSBcXFwienN3cGluXFxcIixcXG4tLVxcbm1tL3pzd2FwLmM9ODY9c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKTtcXG4tLVxcbm1tL3pzd2FwLmMtODgtLyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cXG5tbS96c3dhcC5jOjg5OnN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgenN3YXBfZXZlcl9lbmFibGVkKTtcXG5tbS96c3dhcC5jOjkwOnN0YXRpYyBib29sIHpzd2FwX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9ERUZBVUxUX09OKTtcXG5tbS96c3dhcC5jLTkxLXN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxcbi0tXFxubW0venN3YXAuYz05Nz1tb2R1bGVfcGFyYW1fY2IoZW5hYmxlZCwgXFx1MDAyNnpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzLCBcXHUwMDI2enN3YXBfZW5hYmxlZCwgMDY0NCk7XFxuLS1cXG5tbS96c3dhcC5jLTk5LS8qIENyeXB0byBjb21wcmVzc29yIHRvIHVzZSAqL1xcbm1tL3pzd2FwLmM6MTAwOnN0YXRpYyBjaGFyICp6c3dhcF9jb21wcmVzc29yID0gQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVDtcXG5tbS96c3dhcC5jLTEwMS1zdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKixcXG4tLVxcbm1tL3pzd2FwLmM9MTIxPXN0YXRpYyBib29sIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQgPSBJU19FTkFCTEVEKFxcbm1tL3pzd2FwLmM6MTIyOlxcdFxcdENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OKTtcXG5tbS96c3dhcC5jLTEyMy1tb2R1bGVfcGFyYW1fbmFtZWQoc2hyaW5rZXJfZW5hYmxlZCwgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCwgYm9vbCwgMDY0NCk7XFxuLS1cXG5tbS96c3dhcC5jPTEzMD1ib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZClcXG5tbS96c3dhcC5jLTEzMS17XFxubW0venN3YXAuYzoxMzI6XFx0cmV0dXJuICFzdGF0aWNfYnJhbmNoX21heWJlKENPTkZJR19aU1dBUF9ERUZBVUxUX09OLCBcXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcXG5tbS96c3dhcC5jLTEzMy19XFxuLS1cXG5tbS96c3dhcC5jPTM0ND1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2sodm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtMzQ2LVxcdGlmICghY3J5cHRvX2hhc19hY29tcCh6c3dhcF9jb21wcmVzc29yLCAwLCAwKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3pzd2FwLmM6MzQ3OlxcdCAgICBzdHJjbXAoenN3YXBfY29tcHJlc3NvciwgQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVCkpIHtcXG5tbS96c3dhcC5jLTM0OC1cXHRcXHRwcl9lcnIoXFxcImNvbXByZXNzb3IgJXMgbm90IGF2YWlsYWJsZSwgdXNpbmcgZGVmYXVsdCAlc1xcXFxuXFxcIixcXG5tbS96c3dhcC5jOjM0OTpcXHRcXHQgICAgICAgenN3YXBfY29tcHJlc3NvciwgQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVCk7XFxubW0venN3YXAuYy0zNTAtXFx0XFx0cGFyYW1fZnJlZV9jaGFycChcXHUwMDI2enN3YXBfY29tcHJlc3Nvcik7XFxubW0venN3YXAuYzozNTE6XFx0XFx0enN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XFxubW0venN3YXAuYy0zNTItXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMToxODo0OS4xMTYwODQ1NzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NzU5MjQwOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gncyBGb2N1cyBTeW1ib2xzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nIGFuZCB0ZXN0aW5nLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZWl0aGVyIG5ldyBvciBtb2RpZmllZC4gSSd2ZSBnb3QgYSBsaXN0IGhlcmU6XG5cbjEuICBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmA6IEEgbmV3IGZ1bmN0aW9uIHdpdGhpbiBgbW0venN3YXAuY2AgdGhhdCBjaGVja3MgaWYgYSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIuIFNvdW5kcyBzcGVjaWZpYyB0byB6c3dhcCBsb2dpYy5cbjIuICBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYDogQW5vdGhlciBuZXcgenN3YXAgZnVuY3Rpb24gaW4gYG1tL3pzd2FwLmNgLCBoYW5kbGluZyB0aGUgcmV0cmlldmFsIGFuZCBjbGVhcmluZyBvZiBwYXJrZWQgc2hhZG93cy4gRGVmaW5pdGVseSB6c3dhcC1zcGVjaWZpYy5cbjMuICBgenN3YXBfd3JpdGViYWNrX2VudHJ5YDogQSAqbW9kaWZpZWQqIHN0YXRpYyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgaG93IGl0J3MgY2hhbmdlZCwgYnV0IHRoZSB6c3dhcCBjb250ZXh0IGlzIGNsZWFyLiBUaGUga2V5IGlzIGluIHRoZSBwYXJraW5nIG9mIHRoZSBzaGFkb3dzIGFuZCBlcnJvciBoYW5kbGluZy5cbjQuICBgenN3YXBfc3RvcmVgOiAgVGhpcyBmdW5jdGlvbiBpbiBgbW0venN3YXAuY2AgaGFzIGJlZW4gbW9kaWZpZWQgdG8gaW5jbHVkZSBhIGNoZWNrIHVzaW5nIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgc3VnZ2VzdGluZyBhIGNoYW5nZSBpbiBpdHMgY29yZSBsb2dpYyBjb25jZXJuaW5nIHpzd2FwJ3Mgd3JpdGViYWNrIGJlaGF2aW9yLlxuNS4gIGB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRgOiBBIG5ldyBmdW5jdGlvbiB3aXRoaW4gYG1tL3dvcmtpbmdzZXQuY2AuIFRoaXMgaXMgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCByZWZhdWx0aW5nIG9mIGZvbGlvcyBhbHJlYWR5IG1hbmFnZWQgYnkgdGhlIExSVS4gVGhpcyBpcyBpbnRlcmVzdGluZywgYXMgSSBrbm93IHRoaXMgbG9naWMuXG42LiAgYHdvcmtpbmdzZXRfcmVmYXVsdGA6IE1vZGlmaWVkIGluIGBtbS93b3JraW5nc2V0LmNgLCBidXQgaXQgZGVsZWdhdGVzIHRvIGEgbmV3IGZ1bmN0aW9uLlxuNy4gIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gOiBUaGlzIG9uZSBoYXMgYSBtb2RpZmllZCBzaWduYXR1cmUsIHNwZWNpZmljYWxseSBpbiBgbW0vc3dhcF9zdGF0ZS5jYCwgd2hpY2gsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN3YXAgY2FjaGUsIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBmb3IgaG93IGZvbGlvcyBnZXQgYWxsb2NhdGVkLlxuOC4gIGBzd2FwaW5fc3luY2A6IFRoaXMgZnVuY3Rpb24gbG9va3MgcGVydGluZW50IHRvIHRoZSBvdmVyYWxsIGZlYXR1cmUgbG9naWMuXG5cbkkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggYGRvX3N3YXBfcGFnZWAuIEl0J3MgYSBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIHN3YXAgZW50cmllcywgYW5kIHdoaWxlIGl0J3MgbW9kaWZpZWQsIGl0J3MgYSAqdmVyeSogZ2VuZXJpYyBmdW5jdGlvbi4gV2UgbmVlZCB0byBhdm9pZCBsaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCBieSBuZWFybHkgZXZlcnkgcHJvZ3JhbS4gTGlzdGluZyBpdCB3b3VsZCBkaWx1dGUgdGhlIGZ1enppbmcgZWZmb3J0LiBMZXQncyBtYWtlIHN1cmUgdGhhdCB0aGVzZSBvdGhlciBmdW5jdGlvbnMgKGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCBgenN3YXBfc3RvcmVgLCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCwgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2ApIGFyZSBiZXR0ZXIgY2hvaWNlcyBhcyBmb2N1cyBzeW1ib2xzLiBUaGV5IGFwcGVhciBtb3JlIHNwZWNpZmljIHRvIHRoZSBhbHRlcmVkIGZlYXR1cmUgbG9naWMuXG5cblNvLCBsZXQncyBzb2xpZGlmeSB0aGUgY2FuZGlkYXRlIGZvY3VzIHN5bWJvbHMuIEkgdGhpbmsgdGhlIGtleSBvbmVzIGFyZTpcblxuKiAgIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYFxuKiAgIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgXG4qICAgYHpzd2FwX3dyaXRlYmFja19lbnRyeWBcbiogICBgenN3YXBfc3RvcmVgXG4qICAgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGBcbiogICBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYFxuKiAgIGBzd2FwaW5fc3luY2BcbiogICBgc2htZW1fc3dhcGluX2ZvbGlvYFxuXG5Ob3csIGxldCdzIHVzZSBgZ3JlcHBlcmAgKG9yIHNvbWUgb3RoZXIgdG9vbCkgdG8gZW5zdXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgZGVmaW5lZCBpbiB0aGUga2VybmVsIGFuZCBhcmVuJ3QganVzdCBzdGF0aWMtaW5saW5lZCwgc28gdGhleSBhcmUgc3VpdGFibGUgc3ltYm9scyBmb3IgZm9jdXNlZCBmdXp6aW5nIGFuZCB0ZXN0aW5nLiBJIHdpbGwgY2hlY2sgdGhlIGRlZmluaXRpb25zIG9mIGVhY2ggc3ltYm9sIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MDgsIk91dHB1dFRva2VucyI6MTAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMToxODo1Ni44NzUzMjc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODk0MDg2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGJvb2x8dm9pZHxpbnR8c3RydWN0IGZvbGlvIFxcXFwqKSA/XFxcXCo/KHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJ8enN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzfHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZHx6c3dhcF93cml0ZWJhY2tfZW50cnl8enN3YXBfc3RvcmV8X19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvfHNobWVtX3N3YXBpbl9mb2xpbylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9MzM9dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcXG5tbS9pbnRlcm5hbC5oOjM0OnZvaWQgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XFxubW0vaW50ZXJuYWwuaC0zNS12b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbm1tL3N3YXAuaD0zMTQ9dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9zd2FwLmg6MzE1OnN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vc3dhcC5oLTMxNi1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTQxOT1zdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy01MjgtICovXFxubW0vc3dhcF9zdGF0ZS5jOjUyOTpzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxubW0vc3dhcF9zdGF0ZS5jLTUzMC1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vd29ya2luZ3NldC5jPTYwNj12b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNjI1LSAqL1xcbm1tL3dvcmtpbmdzZXQuYzo2MjY6dm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbm1tL3dvcmtpbmdzZXQuYy02Mjcte1xcbi0tXFxubW0venN3YXAuYz05MTM9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy05NzctICovXFxubW0venN3YXAuYzo5Nzg6Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy05Nzkte1xcbi0tXFxubW0venN3YXAuYy0xMDEwLSAqL1xcbm1tL3pzd2FwLmM6MTAxMTp2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS96c3dhcC5jLTEwMTIte1xcbi0tXFxubW0venN3YXAuYz0xNDg2PXN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgbG9uZyBpbmRleCxcXG4tLVxcbm1tL3pzd2FwLmMtMTU2NS1cXG5tbS96c3dhcC5jOjE1NjY6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3pzd2FwLmMtMTU2Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDExOjE4OjU2Ljk0NDI3MjYwN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTY4MTg5MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkFuYWx5emluZyBac3dhcCBhbmQgU2hhcmVkIE1lbW9yeSBTd2FwIE9wZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGtlcm5lbCBjb2RlIHJlbGF0ZWQgdG8genN3YXAgYW5kIHNoYXJlZCBtZW1vcnkgc3dhcCBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBhbmQgYHNobWVtX3N3YXBpbl9mb2xpb2AuIFRoZXNlIGZ1bmN0aW9ucyByZXNpZGUgaW4gYG1tL3pzd2FwLmNgIGFuZCBgbW0vc2htZW0uY2AgcmVzcGVjdGl2ZWx5LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgenN3YXAgaGFuZGxlcyB0aGUgd3JpdGluZyBiYWNrIG9mIGNvbXByZXNzZWQgZGF0YSBhbmQgaG93IHNoYXJlZCBtZW1vcnkgcGFnZXMgYXJlIHN3YXBwZWQgaW4uIFRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSB0cmFjaW5nIHRoZWlyIGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2UgY2FjaGUsIHN3YXAgY2FjaGUsIGFuZCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2VzLiBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIG9wdGltaXphdGlvbiBtaWdodCBiZSBwb3NzaWJsZSwgYW5kIEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBob3cgdGhlc2UgZnVuY3Rpb25zIHdvcmsgdW5kZXIgZGlmZmVyZW50IG1lbW9yeSBwcmVzc3VyZSBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mjk2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTE6MTk6MDAuMTEyNDYzNjQzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTUyOTA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmM9MTAxMT12b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtMTA0OC0gKi9cXG5tbS96c3dhcC5jOjEwNDk6c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG5tbS96c3dhcC5jLTEwNTAtXFx0XFx0XFx0XFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxcbi0tXFxubW0venN3YXAuYz0xMTY4PXN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxuLS1cXG5tbS96c3dhcC5jLTExOTEtXFx0ICogMS4gV2UgZXh0cmFjdCB0aGUgc3dwX2VudHJ5X3QgdG8gdGhlIHN0YWNrLCBhbGxvd2luZ1xcbm1tL3pzd2FwLmM6MTE5MjpcXHQgKiAgICB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSB0byBwaW4gdGhlIHN3YXAgZW50cnkgYW5kXFxubW0venN3YXAuYy0xMTkzLVxcdCAqICAgIHRoZW4gdmFsaWRhdGUgdGhlIHpzd2FwIGVudHJ5IGFnYWluc3QgdGhhdCBzd2FwIGVudHJ5J3NcXG4tLVxcbm1tL3pzd2FwLmMtMTIyNi1cXG5tbS96c3dhcC5jOjEyMjc6XFx0d3JpdGViYWNrX3Jlc3VsdCA9IHpzd2FwX3dyaXRlYmFja19lbnRyeShlbnRyeSwgc3dwZW50cnkpO1xcbm1tL3pzd2FwLmMtMTIyOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTE6MTk6MDAuMTYxOTk4MDkyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1MzA5NzgxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHNobWVtX3N3YXBpbl9mb2xpb2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgYHNobWVtX3N3YXBpbl9mb2xpb2AuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGNydWNpYWwgZm9yIHRoZSBTaGFyZWQgTWVtb3J5IChTSE1FTSkgc3Vic3lzdGVtLiBJJ20gZ3Vlc3NpbmcgaXQgaGFuZGxlcyB0aGUgcHJvY2VzcyBvZiBicmluZ2luZyBhIGZvbGlvIChhIHBhZ2Ugb3IgZ3JvdXAgb2YgcGFnZXMsIGxpa2VseSkgYmFjayBpbnRvIHBoeXNpY2FsIG1lbW9yeSBmcm9tIHN3YXAuIENvbnNpZGVyaW5nIGl0cyBuYW1lLCBcInN3YXBpblwiIGlzIGEgcHJldHR5IGdvb2QgY2x1ZSwgYXMgaXMgXCJmb2xpb1wiLlxuXG5JIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYW5kIHRoZSAqaG93Ki4gV2h5IGlzIHRoaXMgZm9saW8gYmVpbmcgc3dhcHBlZCBpbj8gSXMgaXQgZHVlIHRvIGEgcGFnZSBmYXVsdCwgYSBwcm9jZXNzIHJlc3VtaW5nIGFmdGVyIGJlaW5nIHN3YXBwZWQgb3V0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNvbnRleHQgb2YgaXRzIGludm9jYXRpb24gaXMgZ29pbmcgdG8gYmUgaW5jcmVkaWJseSBpbXBvcnRhbnQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBzZWUgdGhlIGNhbGxpbmcgcGF0aHMuXG5cbkFuZCB0aGUgXCJob3dcIiBpbnZvbHZlcyBhIHNlcmllcyBvZiBxdWVzdGlvbnM6IFdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBtYW5pcHVsYXRlZD8gSXMgaXQgbG9ja2luZyBjcml0aWNhbCBzZWN0aW9ucz8gSG93IGlzIHRoZSBmb2xpbydzIHN0YXRlIG1hbmFnZWQgZHVyaW5nIHRoZSBzd2FwLWluIHByb2Nlc3M/IFdoYXQgYWJvdXQgZXJyb3IgaGFuZGxpbmc/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvcj8gSSBzdXNwZWN0IGl0IG1heSBiZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBwYWdlIGNhY2hlLCB0aGUgc3dhcCBjYWNoZSwgYW5kIHRoZSBwaHlzaWNhbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLiBJIGFudGljaXBhdGUgYSBsb3Qgb2YgcG9pbnRlciBjaGFzaW5nIGFuZCBzdGF0ZSB0cmFuc2l0aW9ucy4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBmb3IgYW55IGNhbGxzIHRvIGZ1bmN0aW9ucyBsaWtlIGBzd2FwX3JlYWRwYWdlKClgLCBgZm9saW9fbWlncmF0ZSgpYCwgYGZvbGlvX3B1dGJhY2soKWAsIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeSByZWNsYWltIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtZW1vcnkgYmFycmllcnMgdXNlZCB0byBlbnN1cmUgcHJvcGVyIG9yZGVyaW5nLCBlc3BlY2lhbGx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBDUFVzIGFjY2Vzc2luZyB0aGUgc2FtZSBtZW1vcnkgcmVnaW9uLiBMZXQncyBzZWUgaG93IG11Y2ggb2YgdGhpcyBwbGF5cyBvdXQgaW4gdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODc2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTE6MTk6MDQuNjkyOTc4NTc1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDg5NDAzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaG1lbV9zd2FwaW5fZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9MTUyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX2RlZmF1bHRfbWF4X2lub2Rlcyh2b2lkKVxcbi0tXFxubW0vc2htZW0uYy0xNjAtXFxubW0vc2htZW0uYzoxNjE6c3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG5tbS9zaG1lbS5jLTE2Mi1cXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGVudW0gc2dwX3R5cGUgc2dwLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zaG1lbS5jPTE2OTU9c3RhdGljIGludCBzaG1lbV91bnVzZV9zd2FwX2VudHJpZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbm1tL3NobWVtLmMtMTcwNS1cXG5tbS9zaG1lbS5jOjE3MDY6XFx0XFx0ZXJyb3IgPSBzaG1lbV9zd2FwaW5fZm9saW8oaW5vZGUsIGluZGljZXNbaV0sIFxcdTAwMjZmb2xpbywgU0dQX0NBQ0hFLFxcbm1tL3NobWVtLmMtMTcwNy1cXHRcXHRcXHRcXHRcXHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpLCBOVUxMLCBOVUxMKTtcXG4tLVxcbm1tL3NobWVtLmM9MjM3NT1zdGF0aWMgaW50IHNobWVtX3NwbGl0X2xhcmdlX2VudHJ5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5tbS9zaG1lbS5jLTI0NTItICovXFxubW0vc2htZW0uYzoyNDUzOnN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxubW0vc2htZW0uYy0yNDU0LVxcdFxcdFxcdCAgICAgc3RydWN0IGZvbGlvICoqZm9saW9wLCBlbnVtIHNncF90eXBlIHNncCxcXG4tLVxcbm1tL3NobWVtLmM9MjYzMj1zdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtMjY2NC1cXHRpZiAoeGFfaXNfdmFsdWUoZm9saW8pKSB7XFxubW0vc2htZW0uYzoyNjY1OlxcdFxcdGVycm9yID0gc2htZW1fc3dhcGluX2ZvbGlvKGlub2RlLCBpbmRleCwgXFx1MDAyNmZvbGlvLFxcbm1tL3NobWVtLmMtMjY2Ni1cXHRcXHRcXHRcXHRcXHQgICBzZ3AsIGdmcCwgdm1mLCBmYXVsdF90eXBlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTE6MTk6MDQuNzQ3ODc3MTg4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3Mzk2MDUyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gYHN3YXBpbl9zeW5jYCBhbmQgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2A6XG5cbioqSW5pdGlhbCBEaXZlIGludG8gU3dhcCBPcGVyYXRpb25zKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nLCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIGNvcmUgc3dhcCBtZWNoYW5pc20uIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYHN3YXBpbl9zeW5jYCBhbmQgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIGxpa2VseSBmdW5kYW1lbnRhbCB0byB0aGUgcHJvY2VzcyBvZiBicmluZ2luZyBkYXRhIGJhY2sgaW50byBSQU0gZnJvbSB0aGUgc3dhcCBwYXJ0aXRpb24uXG5cbk15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGxpa2VseSBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIG9mIGZvbGlvIHN0cnVjdHVyZXMgYW5kIHByb2JhYmx5IGludGVyYWN0cyB3aXRoIHRoZSBzd2FwIGNhY2hlLiBJJ20gZ3Vlc3NpbmcgaXQgbWlnaHQgaW52b2x2ZSB0aGluZ3MgbGlrZSB0cmFja2luZyBwYWdlIG1ldGFkYXRhLCBhbmQgbWFuYWdpbmcgdGhlIG1hcHBpbmcgb2Ygc3dhcCBlbnRyaWVzIHRvIHBoeXNpY2FsIG1lbW9yeS4gYHN3YXBpbl9zeW5jYCBvbiB0aGUgb3RoZXIgaGFuZCwgc2hvdWxkIGJlIHJlc3BvbnNpYmxlIGZvciBzeW5jaHJvbml6aW5nIHRoZSBkYXRhIGJlaW5nIHJlYWQgaW4gZnJvbSBzd2FwLiBJIHdpbGwgcHJvYmFibHkgZmluZCBpdCBoYW5kbGluZyB0aGluZ3MgbGlrZSBsb2NraW5nLCByZWFkaW5nIGZyb20gdGhlIGRpc2ssIGFuZCB1cGRhdGluZyBwYWdlIHRhYmxlcy5cbkknbGwgYmV0IEknbGwgZmluZCBhIHJhY2UgY29uZGl0aW9uIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgd2l0aCBgc3dhcGluX3N5bmNgIGlmIHRoZXJlIGlzIGNvbnRlbnRpb24gYWNjZXNzaW5nIHRoZSBzd2FwIHBhcnRpdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NTIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMToxOTowOC40ODc0ODU1OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA3NDI5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcGluX3N5bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS5jPTQ4NDQ9dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00OTM2LVxcdFxcdGlmIChkYXRhX3JhY2Uoc2ktXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1dQX1NZTkNIUk9OT1VTX0lPKSlcXG5tbS9tZW1vcnkuYzo0OTM3OlxcdFxcdFxcdGZvbGlvID0gc3dhcGluX3N5bmMoZW50cnksIEdGUF9ISUdIVVNFUl9NT1ZBQkxFLFxcbm1tL21lbW9yeS5jLTQ5MzgtXFx0XFx0XFx0XFx0XFx0ICAgIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHZtZikgfCBCSVQoMCksXFxuLS1cXG5tbS9zaG1lbS5jPTIyNDI9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcF9hbGxvY19mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vc2htZW0uYy0yMjU2LVxcdG1wb2wgPSBzaG1lbV9nZXRfcGdvZmZfcG9saWN5KGluZm8sIGluZGV4LCBvcmRlciwgXFx1MDAyNmlseCk7XFxubW0vc2htZW0uYzoyMjU3OlxcdGZvbGlvID0gc3dhcGluX3N5bmMoZW50cnksIGdmcCwgQklUKG9yZGVyKSwgdm1mLCBtcG9sLCBpbHgpO1xcbm1tL3NobWVtLmMtMjI1OC1cXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xcbi0tXFxubW0vc3dhcC5oPTMzMj1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsXFxubW0vc3dhcC5oLTMzMy1cXHRcXHRzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxubW0vc3dhcC5oOjMzNDpzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBmbGFnLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcXG5tbS9zd2FwLmgtMzM1LVxcdFxcdFxcdCAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XFxuLS1cXG5tbS9zd2FwLmg9NDA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpzd2FwaW5fcmVhZGFoZWFkKHN3cF9lbnRyeV90IHN3cCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9zd2FwLmgtNDEzLVxcbm1tL3N3YXAuaDo0MTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKFxcbm1tL3N3YXAuaC00MTUtXFx0c3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTY1OD1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNjg5LS8qKlxcbm1tL3N3YXBfc3RhdGUuYzo2OTA6ICogc3dhcGluX3N5bmMgLSBzd2FwLWluIG9uZSBvciBtdWx0aXBsZSBlbnRyaWVzIHNraXBwaW5nIHJlYWRhaGVhZC5cXG5tbS9zd2FwX3N0YXRlLmMtNjkxLSAqIEBlbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTcwNC0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6NzA1OnN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxubW0vc3dhcF9zdGF0ZS5jLTcwNi1cXHRcXHRcXHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDExOjE5OjA4LjUzODIzMzU0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk0ODIyOTIxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgbmFpbCBkb3duIHRoZSBmdXp6aW5nIHRhcmdldHMgZm9yIHRoaXMgcGF0Y2guIEkndmUgcGlucG9pbnRlZCBhIHNvbGlkIHNldCBvZiBmb2N1cyBzeW1ib2xzOiBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgYHpzd2FwX3N0b3JlYCwgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAsIGFuZCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gSSBhbHNvIG5lZWQgdG8ga2VlcCBgc3dhcGluX3N5bmNgIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YCBpbiBtaW5kLCBhbHRob3VnaCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCBzZWVtcyB0byBiZSB0aGUgbW9yZSBzcGVjaWZpYyBmdW5jdGlvbiBoZXJlLiBUaGUgY29uZmlndXJhdGlvbnMgSSdtIHdvcmtpbmcgd2l0aCBhcmUgYFNXQVBgIGFuZCBgWlNXQVBgLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCdzIGNsZWFyIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBkZWVwIGludG8gbWVtb3J5IG1hbmFnZW1lbnQsIHBhcnRpY3VsYXJseSB0aGUgd29ya2luZ3NldCByZWZhdWx0IHRyYWNraW5nIGFuZCBob3cgenN3YXAgd3JpdGViYWNrIGFuZCBzd2FwLWluIG9wZXJhdGlvbnMgaGFuZGxlIHRoZXNlIHNoYWRvdyBwYWdlcy4gSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBuZXcgaGVscGVyIGZ1bmN0aW9ucywgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCBmbGFnLCBhbmQgdGhlIGNoYW5nZXMgdG8gc3dhcCBjYWNoZSBhbGxvY2F0aW9uIGFuZCB3cml0ZWJhY2sgcGF0aHMgYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gVGhpcyB0b3VjaGVzIGNvcmUgbW0sIHdoaWNoIG1lYW5zIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBjb3JydXB0aW9uLCByYWNlcywgbGVha3MsIG9yIGV2ZW4gYXNzZXJ0aW9uIGZhaWx1cmVzIGlzIHRoZXJlLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCB3YXJyYW50IGludGVuc2l2ZSBmdXp6aW5nLiBTZWVtcyBsaWtlIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCBjb3JyZWN0bHkuIExldCdzIGdldCB0aGUgdG9vbCBjYWxsIGdvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc0NSwiT3V0cHV0VG9rZW5zIjoyMTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTE6MTk6MTguMDIwNTI4NjE1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAzMDc3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlclwiLFxuICAgIFwienN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzXCIsXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIixcbiAgICBcInpzd2FwX3N0b3JlXCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRcIixcbiAgICBcIl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHpzd2FwIHN1YnN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IHJlZmF1bHQgdHJhY2tpbmcgYW5kIHNoYWRvdyBlbnRyeSBwcmVzZXJ2YXRpb24gYWNyb3NzIHpzd2FwIHdyaXRlYmFjayBhbmQgc3dhcC1pbiBwYXRocy4gSXQgaW50cm9kdWNlcyBuZXcgaGVscGVycyAoenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciwgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzLCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQpIGFuZCBtb2RpZmllcyBzd2FwIGNhY2hlIGFsbG9jYXRpb24gYW5kIHdyaXRlYmFjayBoYW5kbGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gZGV0ZWN0IHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJcIixcbiAgICBcInpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c1wiLFxuICAgIFwienN3YXBfd3JpdGViYWNrX2VudHJ5XCIsXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkXCIsXG4gICAgXCJfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB6c3dhcCBzdWJzeXN0ZW0gbG9naWMsIHNwZWNpZmljYWxseSByZWZhdWx0IHRyYWNraW5nIGFuZCBzaGFkb3cgZW50cnkgcHJlc2VydmF0aW9uIGFjcm9zcyB6c3dhcCB3cml0ZWJhY2sgYW5kIHN3YXAtaW4gcGF0aHMuIEl0IGludHJvZHVjZXMgbmV3IGhlbHBlcnMgKHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIsIHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cywgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKSBhbmQgbW9kaWZpZXMgc3dhcCBjYWNoZSBhbGxvY2F0aW9uIGFuZCB3cml0ZWJhY2sgaGFuZGxpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgd2FycmFudCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDExOjE5OjE4LjEwMDg0NDUwNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NTQyNzU1NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMToxOToxOC4xMDE1NjkxMjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxODY1MzU0NjQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS8gKHN3YXAgY2FjaGUsIHpzd2FwIHdyaXRlYmFjaywgYW5kIHdvcmtpbmdzZXQgcmVmYXVsdCB0cmFja2luZyBmb3IgTFJVLW1hbmFnZWQgZm9saW9zKS4gSXQgYWRqdXN0cyBob3cgc2hhZG93IGVudHJpZXMgYXJlIHBhcmtlZCBpbiB0aGUgenN3YXAgdHJlZSBkdXJpbmcgd3JpdGViYWNrIGFuZCByZXN0b3JlZC9yZWZhdWx0ZWQgZHVyaW5nIHN3YXBpbi5cXG5cXG4xLiBObyBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgcmlzazogTm8gZGF0YSBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3Rscywgb3IgQlBGIGJ1ZmZlcnMpLlxcbjIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOiBBbGwgbmV3bHkgaW50cm9kdWNlZCBvciBtb2RpZmllZCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYHNoYWRvd2AsIGBzaGFkb3dfcGFya2VkYCwgYW5kIGxvb3AgaW5kaWNlcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBhc3NpZ25lZCBieSBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcG9pbnRlcnMvdmFsdWVzLlxcbjMuIEJ1ZyBhcHBsaWNhYmlsaXR5OiBQb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGludm9sdmUgcGFnZSBsb2NraW5nLCByYWNlIGNvbmRpdGlvbnMgaW4gc3dhcGNhY2hlL0xSVSBtYW5pcHVsYXRpb24sIHJlZmNvdW50aW5nLCBvciBpbnZhbGlkIHhhcnJheSBvcGVyYXRpb25zLiBUaGVzZSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgKEtBU0FOLCBMT0NLREVQLCBWTV9XQVJOL1ZNX0JVRyBhc3NlcnRpb25zKSwgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjA1ZWM2Yjg4OWM5ZGEwOWE5YmQ4ODcyNGZmOWMzMjE3ZDE4NWI4ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDExOjE4OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXG5pbmRleCAzMGMxOTNhMTIwN2UxLi5kZmI3MTUzMjM2ZjVjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbkBAIC0zNSw2ICszNSw4IEBAIHZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcbiB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XG4gYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xuK2Jvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbit2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2Vsc2VcbiBcbiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9O1xuQEAgLTY5LDYgKzcxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfTElOVVhfWlNXQVBfSCAqL1xuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCA4YmUzZDI4ZDljM2Q4Li5kMTk5NDdhM2MzMzg1IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTMxLDYgKzMxLDcgQEAgdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xuIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XG4rdm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcbiB2b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiAvKiBtbS9mb2xpby5jICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggYTJhNjNhZTA5NjdjMS4uMDA0M2E5MjM3YThkZCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTQ4NTcsNiArNDg1Nyw3IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcztcbiBcdHB0ZV90ICpwdGVwO1xuK1x0dm9pZCAqc2hhZG93O1xuIFxuIFx0aWYgKCFwdGVfdW5tYXBfc2FtZSh2bWYpKVxuIFx0XHRnb3RvIG91dDtcbkBAIC00OTg0LDYgKzQ5ODUsMTAgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdGdvdG8gb3V0X3BhZ2U7XG4gXHR9XG4gXG4rXHRzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xuK1x0aWYgKHNoYWRvdylcbitcdFx0d29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKGZvbGlvLCBzaGFkb3cpO1xuK1xuIFx0LypcbiBcdCAqIEtTTSBzb21ldGltZXMgaGFzIHRvIGNvcHkgb24gcmVhZCBmYXVsdHMsIGZvciBleGFtcGxlLCBpZlxuIFx0ICogZm9saW8tXHUwMDNlaW5kZXggb2Ygbm9uLWtzbSBmb2xpb3Mgd291bGQgYmUgbm9ubGluZWFyIGluc2lkZSB0aGVcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggYzMyMTJmZGVjZTliNC4uNTNmNTdhZDE5NGEzOSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0yNDY1LDYgKzI0NjUsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XG4gXHRpbnQgZXJyb3IsIG5yX3BhZ2VzLCBvcmRlcjtcbiBcdHBnb2ZmX3Qgb2Zmc2V0O1xuK1x0dm9pZCAqc2hhZG93O1xuIFxuIFx0Vk1fQlVHX09OKCEqZm9saW9wIHx8ICF4YV9pc192YWx1ZSgqZm9saW9wKSk7XG4gXHRpbmRleF9lbnRyeSA9IHJhZGl4X3RvX3N3cF9lbnRyeSgqZm9saW9wKTtcbkBAIC0yNTc2LDYgKzI1NzcsMTAgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdCAqL1xuIFx0YXJjaF9zd2FwX3Jlc3RvcmUoZm9saW9fc3dhcChzd2FwLCBmb2xpbyksIGZvbGlvKTtcbiBcbitcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7XG4rXG4gXHRpZiAoc2htZW1fc2hvdWxkX3JlcGxhY2VfZm9saW8oZm9saW8sIGdmcCkpIHtcbiBcdFx0ZXJyb3IgPSBzaG1lbV9yZXBsYWNlX2ZvbGlvKFx1MDAyNmZvbGlvLCBnZnAsIGluZm8sIGluZGV4LCB2bWEpO1xuIFx0XHRpZiAoZXJyb3IpXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCAwYjVkNTA3NzM5YmNiLi5kZGQxMDhiNDFkMzNhIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4rKysgYi9tbS9zd2FwLmhcbkBAIC0zMTIsOSArMzEyLDEwIEBAIGJvb2wgc3dhcF9jYWNoZV9oYXNfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpO1xuIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9nZXRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XG4rc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsXG4rXHRcdFx0XHQgICAgICAgdm9pZCAqKnNoYWRvd3ApO1xuIC8qIEJlbG93IGhlbHBlcnMgcmVxdWlyZSB0aGUgY2FsbGVyIHRvIGxvY2sgYW5kIHBhc3MgaW4gdGhlIHN3YXAgY2x1c3Rlci4gKi9cbiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggMzA1ODc3ZTFmNGQ3Yi4uZTgwYTY5NGRkZGI0NyAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtMjQsNiArMjQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXBfb3BzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC96c3dhcC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbiAjaW5jbHVkZSBcInN3YXBfdGFibGUuaFwiXG4gI2luY2x1ZGUgXCJzd2FwLmhcIlxuQEAgLTI2MywxMiArMjY0LDIxIEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdHVuc2lnbmVkIGludCBjaV9zdGFydCwgY2lfb2ZmLCBjaV9lbmQ7XG4gXHRib29sIGZvbGlvX3N3YXBwZWQgPSBmYWxzZSwgbmVlZF9mcmVlID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1x0dm9pZCAqc2hhZG93X3BhcmtlZDtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShfX3N3YXBfZW50cnlfdG9fY2x1c3RlcihlbnRyeSkgIT0gY2kpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG4gXG4rXHQvKlxuK1x0ICogQSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHBhcmtlZCB0aGUgc2xvdCdzIG9yaWdpbmFsIHNoYWRvdyBpbiB0aGVcbitcdCAqIHpzd2FwIHRyZWU6IHJlc3RvcmUgaXQgaW50byB0aGUgc2xvdCBmb3IgbGF0ZXIgc3dhcC1pbi5cbitcdCAqL1xuK1x0c2hhZG93X3BhcmtlZCA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4rXHRpZiAoc2hhZG93X3BhcmtlZClcbitcdFx0c2hhZG93ID0gc2hhZG93X3BhcmtlZDtcbitcbiBcdHNpID0gX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpO1xuIFx0Y2lfc3RhcnQgPSBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpO1xuIFx0Y2lfZW5kID0gY2lfc3RhcnQgKyBucl9wYWdlcztcbkBAIC00MDksNyArNDE5LDggQEAgdm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdFx0XHRzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHRcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuK1x0XHRcdFx0XHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcbitcdFx0XHRcdFx0dm9pZCAqKnNoYWRvd3ApXG4ge1xuIFx0aW50IGVycjtcbiBcdHN3cF9lbnRyeV90IGVudHJ5O1xuQEAgLTQ4MywzNyArNDk0LDQyIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFxuIFx0LyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovXG4gXHRtZW1jZzFfc3dhcGluKGZvbGlvKTtcbi1cdGlmIChzaGFkb3cpXG4tXHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbiBcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XG4gXG4tXHQvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqL1xuLVx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4rXHRpZiAoc2hhZG93cClcbitcdFx0KnNoYWRvd3AgPSBzaGFkb3c7XG4rXG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuIC8qKlxuLSAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuKyAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG4gICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcbiAgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnc1xuICAqIEBvcmRlcnM6IGFsbG9jYXRpb24gb3JkZXJzLCBtdXN0IGJlIG5vbiB6ZXJvXG4gICogQHZtZjogZmF1bHQgaW5mb3JtYXRpb25cbiAgKiBAbXBvbDogTlVNQSBtZW1vcnkgYWxsb2NhdGlvbiBwb2xpY3kgdG8gYmUgYXBwbGllZFxuICAqIEBpbHg6IE5VTUEgaW50ZXJsZWF2ZSBpbmRleCwgZm9yIHVzZSBvbmx5IHdoZW4gTVBPTF9JTlRFUkxFQVZFXG4rICogQHNoYWRvd3A6IFJldHVybnMgdGhlIHNoYWRvdyB0aGUgYWxsb2NhdGlvbiBkaXNwbGFjZWQsIE5VTEwgdG8gaWdub3JlXG4gICpcbiAgKiBBbGxvY2F0ZSBhIGZvbGlvIGluIHRoZSBzd2FwIGNhY2hlIGZvciBvbmUgc3dhcCBzbG90LCB0eXBpY2FsbHkgYmVmb3JlXG4gICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieVxuICAqIEB0YXJnX2VudHJ5IG11c3QgaGF2ZSBhIG5vbi16ZXJvIHN3YXAgY291bnQgKHN3YXBwZWQgb3V0KS5cbiAgKlxuKyAqIFRoZSByZXR1cm5lZCBmb2xpbyBpcyBsb2NrZWQgYW5kIGlzIE5PVCBvbiB0aGUgTFJVLiBUaGUgY2FsbGVyIG11c3QgZWl0aGVyXG4rICogYWRkIGl0IHRvIHRoZSBMUlUgd2l0aCBmb2xpb19hZGRfbHJ1KCkgc28gcGFnZSByZWNsYWltIGNhbiBmaW5kIGl0LCBvciBmcmVlXG4rICogaXQgZGlyZWN0bHkgb25jZSBkb25lOyBhIGZvbGlvIGxlZnQgb2ZmIHRoZSBMUlUgaXMgdW5yZWNsYWltYWJsZSBhbmQgbGVha3MuXG4rICpcbiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy5cbiAgKiBSZXR1cm46IFJldHVybnMgdGhlIGZvbGlvIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkIGFuZCBmb2xpbyBpcyBpbiB0aGUgc3dhcFxuICAqIGNhY2hlLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYgZmFpbGVkIGR1ZSB0byByYWNlLCBPT00gb3IgaW52YWxpZCBhcmd1bWVudHMuXG4gICovXG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LFxuK1x0XHRcdFx0ICAgICAgIHZvaWQgKipzaGFkb3dwKVxuIHtcbiBcdGludCBvcmRlciwgZXJyO1xuIFx0c3RydWN0IGZvbGlvICpyZXQ7XG5AQCAtNTI4LDcgKzU0NCw3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4gXG4gXHRkbyB7XG4gXHRcdHJldCA9IF9fc3dhcF9jYWNoZV9hbGxvYyhjaSwgdGFyZ19lbnRyeSwgZ2ZwLCBvcmRlcixcbi1cdFx0XHRcdFx0IHZtZiwgbXBvbCwgaWx4KTtcbitcdFx0XHRcdFx0IHZtZiwgbXBvbCwgaWx4LCBzaGFkb3dwKTtcbiBcdFx0aWYgKCFJU19FUlIocmV0KSlcbiBcdFx0XHRicmVhaztcbiBcdFx0ZXJyID0gUFRSX0VSUihyZXQpO1xuQEAgLTY0NCwxNyArNjYwLDIzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCxcbiBcdFx0cGdvZmZfdCBpbHgsIGJvb2wgcmVhZGFoZWFkKVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHR2b2lkICpzaGFkb3cgPSBOVUxMO1xuIFxuIFx0ZG8ge1xuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdFx0aWYgKGZvbGlvKVxuIFx0XHRcdHJldHVybiBmb2xpbztcbi1cdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbitcdFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLFxuK1x0XHRcdFx0XHRcdCBpbHgsIFx1MDAyNnNoYWRvdyk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0aWYgKHNoYWRvdylcbitcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuK1xuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRzd2FwX3JlYWRfZm9saW8oY3R4LCBmb2xpbyk7XG4gXHRpZiAocmVhZGFoZWFkKSB7XG4gXHRcdGZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pO1xuQEAgLTY4NSwxNyArNzA3LDIzIEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4ge1xuIFx0c3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4rXHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLFxuK1x0XHRcdFx0XHRcdCBpbHgsIFx1MDAyNnNoYWRvdyk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIFx0XHRyZXR1cm4gZm9saW87XG4gXG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4rXG4rXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9mb2xpbyhcdTAwMjZjdHgsIGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9zdWJtaXQoXHUwMDI2Y3R4KTtcbiBcdHJldHVybiBmb2xpbztcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggNDhkM2NkNDBkZWZkYi4uNjEwMWY5MGU5MWQyYSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xODg1LDcgKzE4ODUsNyBAQCB2b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuICAqICAgQ1BVMVx0XHRcdFx0Q1BVMlxuICAqICAgZG9fc3dhcF9wYWdlKClcbiAgKiAgICAgLi4uXHRcdFx0XHRzd2Fwb2ZmK3N3YXBvblxuLSAqICAgICBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKClcbisgKiAgICAgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKClcbiAgKiAgICAgICAvLyBjaGVjayBzd2FwX21hcFxuICAqICAgICAvLyB2ZXJpZnkgUFRFIG5vdCBjaGFuZ2VkXG4gICpcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA0MGQzZjFiNDhhNzRjLi4xY2E2NDg5ZTUwMTIyIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDgsNiArNDgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbkBAIC03NTMsNyArNzU0LDggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbi1cdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbitcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICF6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcbiBcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuIFx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4gXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggODQxMmY0ODQwYWUzNS4uOGU0NWIwYmFlYjM2ZCAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuKysrIGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNTM2LDE2ICs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4gXHRyZXR1cm4gcmVmYXVsdF9kaXN0YW5jZSBcdTAwM2M9IHdvcmtpbmdzZXRfc2l6ZTtcbiB9XG4gXG4tLyoqXG4tICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXG4tICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uXG4tICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxuLSAqXG4tICogQ2FsY3VsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSByZWZhdWx0IGRpc3RhbmNlIG9mIHRoZSBwcmV2aW91c2x5XG4tICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxuLSAqIHByZXNzdXJlIGNhdXNlZCB0aGUgZXZpY3Rpb24uXG4tICovXG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuK3N0YXRpYyB2b2lkIF9fd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyxcbitcdFx0XHRcdCBib29sIGxydV9tYW5hZ2VkKVxuIHtcbiBcdGJvb2wgZmlsZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbkBAIC01NzcsNyArNTY5LDE2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdGlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsIFx1MDAyNndvcmtpbmdzZXQsIHRydWUpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuK1x0LypcbitcdCAqIEFuIExSVS1tYW5hZ2VkIGZvbGlvIG1heSBzaXQgaW4gYSBwZXItQ1BVIGJhdGNoLCB3aGljaCBjYW5ub3QgYmVcbitcdCAqIGRldGVybWluZWQgaGVyZTogc2V0dGluZyB0aGUgZmxhZyB3b3VsZCByYWNlIHRoZSBkcmFpbiBhbmQgbGVhdmUgaXRcbitcdCAqIGRpc2FncmVlaW5nIHdpdGggdGhlIGxpc3QuIGZvbGlvX2FjdGl2YXRlKCkgaXMgc2FmZSwgYnV0IG1pc3NlcyB0aGVcbitcdCAqIGFjdGl2YXRpb24gZm9yIHN1Y2ggYSBmb2xpby5cbitcdCAqL1xuK1x0aWYgKGxydV9tYW5hZ2VkKVxuK1x0XHRmb2xpb19hY3RpdmF0ZShmb2xpbyk7XG4rXHRlbHNlXG4rXHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuIFx0d29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9CQVNFICsgZmlsZSwgbnIpO1xuIFxuQEAgLTU5MCw2ICs1OTEsNDMgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuIFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIH1cbiBcbisvKipcbisgKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby5cbisgKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbisgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXG4rICpcbisgKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHlcbisgKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5XG4rICogcHJlc3N1cmUgY2F1c2VkIHRoZSBldmljdGlvbi5cbisgKlxuKyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgbm90IG9uIHRoZSBMUlUgeWV0LCB0aGUgY2FsbGVyIGFkZHNcbisgKiBpdCB3aXRoIGZvbGlvX2FkZF9scnUoKSBhZnRlcndhcmRzLlxuKyAqL1xuK3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbit7XG4rXHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCBmYWxzZSk7XG4rfVxuK1xuKy8qKlxuKyAqIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseVxuKyAqIGV2aWN0ZWQgZm9saW8gdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBMUlUuXG4rICogQGZvbGlvOiBUaGUgZm9saW8gdGhlIGV2aWN0aW9uIGlzIHJlZmF1bHRlZCBpbnRvLlxuKyAqIEBzaGFkb3c6IFNoYWRvdyBlbnRyeSBvZiB0aGUgZXZpY3RlZCBmb2xpby5cbisgKlxuKyAqIExpa2Ugd29ya2luZ3NldF9yZWZhdWx0KCksIGJ1dCBmb3IgYSBmb2xpbyB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGFkZGVkXG4rICogdG8gdGhlIExSVSwgd2hpY2ggaGFzIHRvIGJlIGFjdGl2YXRlZCBieSBtb3ZpbmcgaXQgYmV0d2VlbiB0aGUgbGlzdHNcbisgKiByYXRoZXIgdGhhbiBieSBzZXR0aW5nIFBHX2FjdGl2ZS5cbisgKlxuKyAqIFRoZSBhY3RpdmF0aW9uIGlzIGJlc3QgZWZmb3J0OiBhIGZvbGlvIHN0aWxsIHNpdHRpbmcgaW4gYSBwZXItQ1BVIExSVVxuKyAqIGJhdGNoIGNhbm5vdCBiZSBtb3ZlZCB5ZXQgYW5kIGlzIGxlZnQgaW5hY3RpdmUuXG4rICpcbisgKiBDb250ZXh0OiBAZm9saW8gbXVzdCBiZSBsb2NrZWQgYW5kIGFscmVhZHkgYWRkZWQgdG8gdGhlIExSVS5cbisgKi9cbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4re1xuK1x0X193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgdHJ1ZSk7XG4rfVxuK1xuIC8qKlxuICAqIHdvcmtpbmdzZXRfYWN0aXZhdGlvbiAtIG5vdGUgYSBwYWdlIGFjdGl2YXRpb25cbiAgKiBAZm9saW86IEZvbGlvIHRoYXQgaXMgYmVpbmcgYWN0aXZhdGVkLlxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBjMjdlMjJkMDY3ZTNlLi45MDQ4MjFkYjQwMWYzIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTk2MSw2ICs5NjEsNzkgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIHdyaXRlYmFjayBjb2RlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbitcbisjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMClcbitcbisvKipcbisgKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj9cbisgKiBAZm9saW86IHRoZSBmb2xpbyBiZWluZyBleGFtaW5lZCAodHlwaWNhbGx5IGEgc3dhcCBjYWNoZSBmb2xpbyB1bmRlciByZWNsYWltKVxuKyAqXG4rICogQSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgd2hlbiBldmVyeSBvbmUgb2YgaXRzIHN3YXAgb2Zmc2V0cyBob2xkc1xuKyAqIGEgcGFya2VkIHdyaXRlYmFjayBzaGFkb3cgKGEgcmVhbCBzaGFkb3cgb3IgdGhlIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1dcbisgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIEBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIsIGluIHdoaWNoIGNhc2UgdGhlIHJlY2xhaW0gcGF0aFxuKyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuXG4rICovXG4rYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0c3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tXHUwMDNlc3dhcDtcbitcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcbitcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcbitcdFx0c3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgKyBpKTtcbitcbitcdFx0aWYgKCF4YV9pc192YWx1ZSh4YV9sb2FkKHN3YXBfenN3YXBfdHJlZShlKSwgb2Zmc2V0ICsgaSkpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKipcbisgKiB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MgLSByZXRyaWV2ZSBhbmQgY2xlYXIgQGZvbGlvJ3MgcGFya2VkIHNoYWRvdyhzKVxuKyAqIEBmb2xpbzogdGhlIHdyaXRlYmFjayBidWZmZXIgZm9saW8gKG9yIHRoZSBzd2FwaW4gZm9saW8gdGhhdCBjb25zdW1lZCBpdClcbisgKlxuKyAqIFJlbW92ZSBhbnkgcGFya2VkIHdyaXRlYmFjayBzaGFkb3dzIGZvciBAZm9saW8ncyBzd2FwIG9mZnNldChzKSBmcm9tIHRoZVxuKyAqIHpzd2FwIHRyZWUuXG4rICpcbisgKiBSZXR1cm46IHRoZSBwcmVzZXJ2ZWQgd29ya2luZ3NldCBzaGFkb3csIG9yIE5VTEwgaWYgdGhlIHNsb3QocykgaGFkIG5vIHNoYWRvd1xuKyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkXG4rICogc2hhZG93IGludG8gdGhlIHN3YXAgc2xvdCAoYnVmZmVyIGRyb3BwZWQpIG9yIGZlZWRzIGl0IHRvXG4rICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKCkgKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nXG4rICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LlxuKyAqL1xuK3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1x0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7XG4rXHR2b2lkICpzaGFkb3cgPSBOVUxMO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1xuK1x0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XG4rXHRcdHN3cF9lbnRyeV90IGUgPSBzd3BfZW50cnkoc3dwX3R5cGUoc3dwKSwgb2Zmc2V0ICsgaSk7XG4rXHRcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoZSk7XG4rXHRcdHZvaWQgKnBhcmtlZCA9IHhhX2xvYWQodHJlZSwgb2Zmc2V0ICsgaSk7XG4rXG4rXHRcdGlmICgheGFfaXNfdmFsdWUocGFya2VkKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0ICsgaSk7XG4rXHRcdGlmIChwYXJrZWQgIT0gWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVylcbitcdFx0XHRzaGFkb3cgPSBwYXJrZWQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gc2hhZG93O1xuK31cbitcbiAvKlxuICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsXG4gICogZGVjb21wcmVzc2luZyB0aGUgZW50cnkgZGF0YSBpbnRvIHRoZSBmb2xpbywgYW5kIGlzc3VpbmcgYVxuQEAgLTk3NiwxMiArMTA0OSwxNCBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbiB7XG4rXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuIFx0c3RydWN0IHhhcnJheSAqdHJlZTtcbiBcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3BlbnRyeSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcbiBcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcbiBcdHN0cnVjdCBzd2FwX2lvX2N0eCBjdHggPSB7fTtcbitcdHZvaWQgKnNoYWRvdztcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbkBAIC05OTAsOCArMTA2NSw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuIFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbi1cdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxuLVx0XHRcdFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xuK1x0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbitcdFx0XHRcdFx0IE5PX0lOVEVSTEVBVkVfSU5ERVgsIFx1MDAyNnNoYWRvdyk7XG4gXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFxuIFx0LypcbkBAIC0xMDAzLDYgKzEwNzgsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0ICovXG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXG4gXHQvKlxuIFx0ICogZm9saW8gaXMgbG9ja2VkLCBhbmQgdGhlIHN3YXBjYWNoZSBpcyBub3cgc2VjdXJlZCBhZ2FpbnN0XG5AQCAtMTAyNCw3ICsxMTAwLDEyIEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcbitcdC8qXG4rXHQgKiBBIHNsb3Qgd2l0aCBubyBzaGFkb3cgYWxyZWFkeSByZWFkcyBiYWNrIGFzIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c6XG4rXHQgKiB0aGUgc3dhcCB0YWJsZSBtYXJrcyBhIHN3YXBwZWQgb3V0IHNsb3Qgd2l0aCB4YV9ta192YWx1ZSgwKSBhbmQgaG9sZHNcbitcdCAqIHRoZSBzaGFkb3csIHdoZW4gdGhlcmUgaXMgb25lLCBpbiB0aGF0IHNhbWUgdmFsdWUuXG4rXHQgKi9cbitcdHhhX3N0b3JlKHRyZWUsIG9mZnNldCwgc2hhZG93LCBHRlBfS0VSTkVMKTtcbiBcbiBcdGNvdW50X3ZtX2V2ZW50KFpTV1BXQik7XG4gXHRpZiAoZW50cnktXHUwMDNlb2JqY2cpXG5AQCAtMTA0NCw3ICsxMTI1LDE1IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gb3V0OlxuIFx0aWYgKHJldCkge1xuLVx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBhbGxvY2F0aW9uIGFib3ZlIG92ZXJ3cm90ZSB0aGUgc2xvdCdzIHNoYWRvdyBhbmQgbm90aGluZ1xuK1x0XHQgKiBoYXMgYmVlbiBwYXJrZWQgZm9yIGl0IHlldCwgc28gcmVzdG9yZSBpdCBhcyB0aGUgZm9saW8gbGVhdmVzXG4rXHRcdCAqIHRoZSBzd2FwIGNhY2hlLCBvciB0aGUgZXZpY3Rpb24gaXQgcmVjb3JkcyBpcyBsb3N0LlxuK1x0XHQgKi9cbitcdFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhzd3BlbnRyeSksIG9mZnNldCk7XG4rXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd3BlbnRyeSwgc2hhZG93KTtcbitcdFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4rXHRcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHR9XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuQEAgLTE0ODcsNiArMTU3NiwxNyBAQCBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XG4gXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSk7XG4gXG4rXHQvKlxuK1x0ICogQSB3cml0ZWJhY2sgYnVmZmVyIHdob3NlIElPIGZhaWxlZCBpcyByZWRpcnRpZWQgYW5kIGxlZnQgaW4gdGhlXG4rXHQgKiBzd2FwIGNhY2hlLCBzbyByZWNsYWltIHdyaXRlcyBpdCBvdXQgYWdhaW4uIFdyaXRlYmFjayBhbHJlYWR5XG4rXHQgKiBkZWNpZGVkIHRoaXMgZGF0YSBiZWxvbmdzIG9uIGRpc2ssIHNvIHNlbmQgaXQgdGhlcmUgaW5zdGVhZCBvZlxuK1x0ICogY29tcHJlc3NpbmcgaXQgYmFjayBpbnRvIHpzd2FwLiBUaGlzIGFsc28gbGVhdmVzIHRoZSBzaGFkb3dcbitcdCAqIHBhcmtlZCBmb3IgdGhlIGJ1ZmZlciBpbiBwbGFjZSwgc28gaXQgaXMgc3RpbGwgcmVzdG9yZWQgaW50b1xuK1x0ICogdGhlIHNsb3Qgb25jZSB0aGUgZm9saW8gbGVhdmVzIHRoZSBzd2FwIGNhY2hlLlxuK1x0ICovXG4rXHRpZiAoenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihmb2xpbykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGlmICghenN3YXBfZW5hYmxlZClcbiBcdFx0Z290byBjaGVja19vbGQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMToxOToxOC4xMDE1NzU3NTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU3NTQ5MzIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgTWVtb3J5IFNhZmV0eSBFdmFsdWF0aW9uOiBac3dhcCBTaGFkb3cgRW50cnkgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBvciBoaWdobGlnaHRzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQncyBhIGtlcm5lbCBwYXRjaCB0b3VjaGluZyBzZXZlcmFsIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGFmZmVjdGVkIGZpbGVzOiBgaW5jbHVkZS9saW51eC96c3dhcC5oYCwgYG1tL2ludGVybmFsLmhgLCBgbW0vbWVtb3J5LmNgLCBgbW0vc2htZW0uY2AsIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBmaWxlLmNgLCBgbW0vdm1zY2FuLmNgLCBgbW0vd29ya2luZ3NldC5jYCwgYW5kIGBtbS96c3dhcC5jYC4gVGhlc2UgYWxsIHBvaW50IHRvd2FyZHMgd29ya2luZ3NldCBzaGFkb3cgZW50cmllcyBhbmQgenN3YXAgd3JpdGViYWNrLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgaG93IHRoZSB3b3JraW5nc2V0IHNoYWRvdyBlbnRyaWVzIGFyZSBoYW5kbGVkIHdoZW4gZm9saW9zIGFyZSBzd2FwcGVkIGluIGFuZCBvdXQgdmlhIHpzd2FwIHdyaXRlYmFjay4gU3BlY2lmaWNhbGx5LCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBub3cgdGFrZXMgYSBgdm9pZCAqKnNoYWRvd3BgIHBhcmFtZXRlci4gIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgY2FsbGluZyBgd29ya2luZ3NldF9yZWZhdWx0YCBpbiBgX19zd2FwX2NhY2hlX2FsbG9jYCwgaXQncyBub3cgcmV0dXJuaW5nIHRoZSBgc2hhZG93YCB2YWx1ZSB2aWEgYHNoYWRvd3BgIChpZiBpdCdzIG5vdCBOVUxMKS4gQ2FsbGVycyBsaWtlIGBzd2FwX2NhY2hlX3JlYWRfZm9saW9gIGFuZCBgc3dhcGluX3N5bmNgIHRoZW4gaGFuZGxlIHRoZSBgd29ya2luZ3NldF9yZWZhdWx0YCBjYWxsICphZnRlciogZ2V0dGluZyB0aGUgYHNoYWRvd2AgdmFsdWUgYmFjay4gQW5kLCBgZG9fc3dhcF9wYWdlYCBhbmQgYHNobWVtX3N3YXBpbl9mb2xpb2AgYXJlIHVzaW5nIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLiBJIHNlZSBzaW1pbGFyIGxvZ2ljIGluIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCB3aXRoIHRoZSBzaGFkb3cgYmVpbmcgcmV0cmlldmVkIHZpYSBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBhbmQgc3RvcmVkIGluIGFuIGB4YV9zdG9yZWAgY2FsbC4gIElmIHRoZXJlJ3MgYW4gZXJyb3IsIGl0J3MgYmVpbmcgcmVzdG9yZWQgaW4gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGV4aXN0cy4gSSdsbCBmb2N1cyBvbiB0aGUgY2FsbHNpdGVzIHdoZXJlIGBzaGFkb3dgIGlzIGJlaW5nIHVzZWQgdG8gc2VlIGhvdyBpdCBpcyBpbml0aWFsbHkgYXNzaWduZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBhdGhzIHdoZXJlIGl0IGNvdWxkIGJlIHJlYWQgYmVmb3JlIGJlaW5nIGFzc2lnbmVkIGEgdmFsaWQgdmFsdWUuXG5cbkxldCdzIGxvb2sgYXQgYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2A6IFRoZSBgc2hhZG93YCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB0byBgTlVMTGAuIFRoZSBjb2RlIGNhbGxzIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBJZiB0aGF0IHN1Y2NlZWRzLCB0aGUgYWxsb2NhdGVkIHNoYWRvdyB2YWx1ZSBpcyByZXR1cm5lZCBhbmQgdGhlIGNhbGxlciB3aWxsIHJ1biBgd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpYC4gVGhlIGBfX3N3YXBfY2FjaGVfYWxsb2NgIGFzc2lnbnMgYHNoYWRvd2AgZnJvbSBlaXRoZXIgYSB2YWx1ZSBmcm9tIHRoZSBgc3dhcF9jYWNoZWAsIG9yIGZyb20gd2hhdCB3YXMganVzdCBhbGxvY2F0ZWQuIExldCdzIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiBkaXJlY3RseSB0byBjb25maXJtIHRoZSBhc3NpZ25tZW50IGFuZCBzZWUgd2hhdCBpcyBhY3R1YWxseSBoYXBwZW5pbmcuIEkgd2lsbCB1c2UgdGhlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBjb21tYW5kIHRvIGludmVzdGlnYXRlIHRoZSByZWxldmFudCBsaW5lcyBpbiBgbW0vc3dhcF9zdGF0ZS5jYCBhcm91bmQgbGluZXMgNDA5LTUwMC4gVGhlbiBJJ2xsIHJlLWV2YWx1YXRlIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMToxOToyNS42NzcwNzI2MDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc3dhcF9zdGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2MDpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmNpLVxcdTAwM2Vsb2NrKTtcXG4gNDYxOlxcdFxcdGVyciA9IF9fc3dhcF9jYWNoZV9hZGRfY2hlY2soY2ksIHRhcmdfZW50cnksIG5yX3BhZ2VzLCBcXHUwMDI2c2hhZG93LCBcXHUwMDI2bWVtY2dfaWQpO1xcbiA0NjI6XFx0XFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG4gNDYzOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjaS1cXHUwMDNlbG9jayk7XFxuIDQ2NDpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiA0NjU6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gNDY2OlxcdFxcdH1cXG4gNDY3OlxcdFxcbiA0Njg6XFx0XFx0X19mb2xpb19zZXRfbG9ja2VkKGZvbGlvKTtcXG4gNDY5OlxcdFxcdF9fZm9saW9fc2V0X3N3YXBiYWNrZWQoZm9saW8pO1xcbiA0NzA6XFx0XFx0X19zd2FwX2NhY2hlX2RvX2FkZF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5KTtcXG4gNDcxOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjaS1cXHUwMDNlbG9jayk7XFxuIDQ3MjpcXHRcXG4gNDczOlxcdFxcdGlmIChtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oZm9saW8sIG1lbWNnX2lkLFxcbiA0NzQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgdm1mID8gdm1mLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tIDogTlVMTCwgZ2ZwKSkge1xcbiA0NzU6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZjaS1cXHUwMDNlbG9jayk7XFxuIDQ3NjpcXHRcXHRcXHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XFxuIDQ3NzpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y2ktXFx1MDAzZWxvY2spO1xcbiA0Nzg6XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gNDc5OlxcdFxcdFxcdC8qIG5yX3BhZ2VzIHJlZnMgZnJvbSBzd2FwIGNhY2hlLCAxIGZyb20gYWxsb2NhdGlvbiAqL1xcbiA0ODA6XFx0XFx0XFx0Zm9saW9fcHV0X3JlZnMoZm9saW8sIG5yX3BhZ2VzICsgMSk7XFxuIDQ4MTpcXHRcXHRcXHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9TV1BJTl9GQUxMQkFDS19DSEFSR0UpO1xcbiA0ODI6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIDQ4MzpcXHRcXHR9XFxuIDQ4NDpcXHRcXG4gNDg1OlxcdFxcdGlmIChvcmRlciBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7XFxuIDQ4NjpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNmNpLVxcdTAwM2Vsb2NrKTtcXG4gNDg3OlxcdFxcdFxcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcXG4gNDg4OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjaS1cXHUwMDNlbG9jayk7XFxuIDQ4OTpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiA0OTA6XFx0XFx0XFx0LyogbnJfcGFnZXMgcmVmcyBmcm9tIHN3YXAgY2FjaGUsIDEgZnJvbSBhbGxvY2F0aW9uICovXFxuIDQ5MTpcXHRcXHRcXHRmb2xpb19wdXRfcmVmcyhmb2xpbywgbnJfcGFnZXMgKyAxKTtcXG4gNDkyOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiA0OTM6XFx0XFx0fVxcbiA0OTQ6XFx0XFxuIDQ5NTpcXHRcXHQvKiBtZW1zdyB1bmNoYXJnZXMgc3dhcCB3aGVuIGZvbGlvIGlzIGFkZGVkIHRvIHN3YXAgY2FjaGUgKi9cXG4gNDk2OlxcdFxcdG1lbWNnMV9zd2FwaW4oZm9saW8pO1xcbiA0OTc6XFx0XFxuIDQ5ODpcXHRcXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCBucl9wYWdlcyk7XFxuIDQ5OTpcXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpO1xcbiA1MDA6XFx0XFxuIDUwMTpcXHRcXHRpZiAoc2hhZG93cClcXG4gNTAyOlxcdFxcdFxcdCpzaGFkb3dwID0gc2hhZG93O1xcbiA1MDM6XFx0XFxuIDUwNDpcXHRcXHRyZXR1cm4gZm9saW87XFxuIDUwNTpcXHR9XFxuIDUwNjpcXHRcXG4gNTA3OlxcdC8qKlxcbiA1MDg6XFx0ICogX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cXG4gNTA5OlxcdCAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XFxuIDUxMDpcXHQgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnc1xcbiA1MTE6XFx0ICogQG9yZGVyczogYWxsb2NhdGlvbiBvcmRlcnMsIG11c3QgYmUgbm9uIHplcm9cXG4gNTEyOlxcdCAqIEB2bWY6IGZhdWx0IGluZm9ybWF0aW9uXFxuIDUxMzpcXHQgKiBAbXBvbDogTlVNQSBtZW1vcnkgYWxsb2NhdGlvbiBwb2xpY3kgdG8gYmUgYXBwbGllZFxcbiA1MTQ6XFx0ICogQGlseDogTlVNQSBpbnRlcmxlYXZlIGluZGV4LCBmb3IgdXNlIG9ubHkgd2hlbiBNUE9MX0lOVEVSTEVBVkVcXG4gNTE1OlxcdCAqIEBzaGFkb3dwOiBSZXR1cm5zIHRoZSBzaGFkb3cgdGhlIGFsbG9jYXRpb24gZGlzcGxhY2VkLCBOVUxMIHRvIGlnbm9yZVxcbiA1MTY6XFx0ICpcXG4gNTE3OlxcdCAqIEFsbG9jYXRlIGEgZm9saW8gaW4gdGhlIHN3YXAgY2FjaGUgZm9yIG9uZSBzd2FwIHNsb3QsIHR5cGljYWxseSBiZWZvcmVcXG4gNTE4OlxcdCAqIGRvaW5nIElPIChlLmcuIHN3YXAgaW4gb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIHN3YXAgc2xvdCBpbmRpY2F0ZWQgYnlcXG4gNTE5OlxcdCAqIEB0YXJnX2VudHJ5IG11c3QgaGF2ZSBhIG5vbi16ZXJvIHN3YXAgY291bnQgKHN3YXBwZWQgb3V0KS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTE6MTk6MjUuNjc3MTY5OTUzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMDc3OTI4Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFpzd2FwIGFuZCBTd2FwIENhY2hlIFJlZmFjdG9yaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBuZWNlc3NpdGF0ZXMgYSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGNoZWNrLiBHaXZlbiBteSBleHBlcnRpc2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIEknbGwgYXNzZXNzIHRoaXMgc3lzdGVtYXRpY2FsbHkuXG5cbkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBjb3JlIGZ1bmN0aW9uczogYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGBzd2FwaW5fc3luY2AsIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCwgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgLCBhbmQgYF9fd29ya2luZ3NldF9yZWZhdWx0YC4gSeKAmW0gbG9va2luZyBmb3IgYW55IGluZGljYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGVzcGVjaWFsbHkgc2luY2UgdGhpcyBpbnZvbHZlcyBmb2xpb3MsIHN3YXAgY2FjaGUgaW50ZXJhY3Rpb25zLCBhbmQgdGhlIHdvcmtpbmdzZXQsIGFsbCBvZiB3aGljaCBhcmUgY3JpdGljYWwgYXJlYXMuIFRoZSBgc2hhZG93YCB2YXJpYWJsZSwgaW4gcGFydGljdWxhciwgY2F1Z2h0IG15IGV5ZSwgYXMgaXQncyBwYXNzZWQgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucy5cblxuTXkgb2JzZXJ2YXRpb25zIGFyZSB0aGF0IGluIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgc2hhZG93YCBtaWdodCBiZSBpbml0aWFsaXplZCB3aXRoaW4gdGhlIGZ1bmN0aW9uIGJ5IGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYCwgd2hpY2ggaXMgY2FsbGVkIGluc2lkZSB0aGUgZnVuY3Rpb24sIG9yIGJ5IGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIGluIHNldmVyYWwgcGxhY2VzIHdoZXJlIGBzaGFkb3dgIGlzIHVzZWQsIGxpa2UgaW4gYHN3YXBpbl9zeW5jYCwgYGRvX3N3YXBfcGFnZWAsIGFuZCBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2AuIFRoZSBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBiZWNhdXNlIGl0IGNsZWFycyBgc2hhZG93YCBmcm9tIGFuIHhhcnJheSwgYW5kIHRoZSB2YWx1ZSByZXRyaWV2ZWQgbWF5IGNvbnRhaW4gYSBwb2ludGVyLiAgSSB2ZXJpZmllZCB0aGF0IGluIGBzd2FwaW5fc3luY2AsIGBzaGFkb3dgIGNhbiBiZSBgTlVMTGAgYnV0IGlzIGNoZWNrZWQuIFRoZSBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCBhbHdheXMgcmV0dXJucyB0aGUgdmFsdWUsIGV2ZW4gYE5VTExgLCBzbyB0aGUgcG9pbnRlciB3aWxsIG5ldmVyIGJlY29tZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLlxuXG5JIGR1ZyBpbnRvIHRoZSBjb2RlIGFuZCBjb25maXJtZWQgdGhhdCBldmVyeSB0aW1lIGBzaGFkb3dgIG9yIHNpbWlsYXIgdmFyaWFibGVzIChgc2hhZG93X3BhcmtlZGApIGFyZSB1c2VkLCB0aGV5IGFyZSBlaXRoZXIgaW5pdGlhbGl6ZWQgdG8gYE5VTExgIGV4cGxpY2l0bHkgb3IgYXNzaWduZWQgYSB2YWx1ZSBiZWZvcmUgYmVpbmcgcmVhZC4gU3BlY2lmaWNhbGx5LCBsb29raW5nIGF0IGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCB0aGUgdmFsdWUgb2YgYHNoYWRvd2AgY29tZXMgZnJvbSB0aGUgYHhhX2xvYWRgIG9mIHRoZSBgc3dhcF96c3dhcF90cmVlYCB4YXJyYXksIGVuc3VyaW5nIHRoZSB2YWx1ZXMgYXJlIGtub3duLiBUaGUgb3RoZXIgdXNhZ2VzLCBzdWNoIGFzIGBzd2FwaW5fc3luY2AgYW5kIGBkb19zd2FwX3BhZ2VgLCBlbnN1cmUgYHNoYWRvd2AgaXMgbm90IHVzZWQgdW5pbml0aWFsaXplZC5cblxuVGhlIGltcG9ydGFudCBwb2ludCBpcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3Mgc3BlY2lmaWNhbGx5IGFkZHJlc3NlZCBieSBLTVNBTi4gSSBjaGVja2VkIHRoYXQgdGhpcyBjb2RlIGRvZXNuJ3Q6IGNvcHkgZGF0YSB0byB1c2VyLXNwYWNlLCByZWFkIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjaGFuZ2UgYnVmZmVyIGJvdW5kcywgb3IgYWxsb3cgcmVhZGluZyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LiBUaGUgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCBWTSBkZWJ1Z2dpbmcgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoZSBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkZWFkbG9ja3MsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2VzcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIG1pZ2h0IGludHJvZHVjZS5cblxuSW4gbGlnaHQgb2YgdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCB0aGF0IEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlIHN1YnN5c3RlbSB3aWxsIGJlIGZvdW5kIGJ5IG90aGVyIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjAxLCJPdXRwdXRUb2tlbnMiOjI1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMToxOTozNi43NTUxMDEyNzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0vIChzd2FwIGNhY2hlLCB6c3dhcCB3cml0ZWJhY2ssIGFuZCB3b3JraW5nc2V0IHJlZmF1bHQgdHJhY2tpbmcgZm9yIExSVS1tYW5hZ2VkIGZvbGlvcykuIEl0IGFkanVzdHMgaG93IHNoYWRvdyBlbnRyaWVzIGFyZSBwYXJrZWQgaW4gdGhlIHpzd2FwIHRyZWUgZHVyaW5nIHdyaXRlYmFjayBhbmQgcmVzdG9yZWQvcmVmYXVsdGVkIGR1cmluZyBzd2FwaW4uXFxuXFxuMS4gTm8ga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrIHJpc2s6IE5vIGRhdGEgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bHMsIG9yIEJQRiBidWZmZXJzKS5cXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogQWxsIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBzaGFkb3dgLCBgc2hhZG93X3BhcmtlZGAsIGFuZCBsb29wIGluZGljZXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgYXNzaWduZWQgYnkgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHBvaW50ZXJzL3ZhbHVlcy5cXG4zLiBCdWcgYXBwbGljYWJpbGl0eTogUG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIHBhZ2UgbG9ja2luZywgcmFjZSBjb25kaXRpb25zIGluIHN3YXBjYWNoZS9MUlUgbWFuaXB1bGF0aW9uLCByZWZjb3VudGluZywgb3IgaW52YWxpZCB4YXJyYXkgb3BlcmF0aW9ucy4gVGhlc2UgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIChLQVNBTiwgTE9DS0RFUCwgVk1fV0FSTi9WTV9CVUcgYXNzZXJ0aW9ucyksIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0vIChzd2FwIGNhY2hlLCB6c3dhcCB3cml0ZWJhY2ssIGFuZCB3b3JraW5nc2V0IHJlZmF1bHQgdHJhY2tpbmcgZm9yIExSVS1tYW5hZ2VkIGZvbGlvcykuIEl0IGFkanVzdHMgaG93IHNoYWRvdyBlbnRyaWVzIGFyZSBwYXJrZWQgaW4gdGhlIHpzd2FwIHRyZWUgZHVyaW5nIHdyaXRlYmFjayBhbmQgcmVzdG9yZWQvcmVmYXVsdGVkIGR1cmluZyBzd2FwaW4uXFxuXFxuMS4gTm8ga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrIHJpc2s6IE5vIGRhdGEgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bHMsIG9yIEJQRiBidWZmZXJzKS5cXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogQWxsIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBzaGFkb3dgLCBgc2hhZG93X3BhcmtlZGAsIGFuZCBsb29wIGluZGljZXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgYXNzaWduZWQgYnkgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHBvaW50ZXJzL3ZhbHVlcy5cXG4zLiBCdWcgYXBwbGljYWJpbGl0eTogUG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIHBhZ2UgbG9ja2luZywgcmFjZSBjb25kaXRpb25zIGluIHN3YXBjYWNoZS9MUlUgbWFuaXB1bGF0aW9uLCByZWZjb3VudGluZywgb3IgaW52YWxpZCB4YXJyYXkgb3BlcmF0aW9ucy4gVGhlc2UgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIChLQVNBTiwgTE9DS0RFUCwgVk1fV0FSTi9WTV9CVUcgYXNzZXJ0aW9ucyksIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpr5sr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 11:02:44 +0000 UTC FinishedAt: 2026-09-11 11:19:37 +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": "3628c3df6cd2797b34714d23113cd44cb30801e7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP" ], "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": "3628c3df6cd2797b34714d23113cd44cb30801e7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP" ], "series_id": "7b3229dc-2160-454a-ab22-189e701e34c7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_folio_is_writeback_buffer", "zswap_lookup_and_clear_shadows", "zswap_writeback_entry", "zswap_store", "workingset_refault_lru_managed", "__swap_cache_alloc_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyYjMzQ7LAogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZW50cnkmIzM0OywKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkJiMzNDssCiAgICAmIzM0O19fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0vIChzd2FwIGNhY2hlLCB6c3dhcCB3cml0ZWJhY2ssIGFuZCB3b3JraW5nc2V0IHJlZmF1bHQgdHJhY2tpbmcgZm9yIExSVS1tYW5hZ2VkIGZvbGlvcykuIEl0IGFkanVzdHMgaG93IHNoYWRvdyBlbnRyaWVzIGFyZSBwYXJrZWQgaW4gdGhlIHpzd2FwIHRyZWUgZHVyaW5nIHdyaXRlYmFjayBhbmQgcmVzdG9yZWQvcmVmYXVsdGVkIGR1cmluZyBzd2FwaW4uXG5cbjEuIE5vIGtlcm5lbC10by11c2VyIGluZm8tbGVhayByaXNrOiBObyBkYXRhIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGxzLCBvciBCUEYgYnVmZmVycykuXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogQWxsIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBzaGFkb3dgLCBgc2hhZG93X3BhcmtlZGAsIGFuZCBsb29wIGluZGljZXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgYXNzaWduZWQgYnkgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHBvaW50ZXJzL3ZhbHVlcy5cbjMuIEJ1ZyBhcHBsaWNhYmlsaXR5OiBQb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGludm9sdmUgcGFnZSBsb2NraW5nLCByYWNlIGNvbmRpdGlvbnMgaW4gc3dhcGNhY2hlL0xSVSBtYW5pcHVsYXRpb24sIHJlZmNvdW50aW5nLCBvciBpbnZhbGlkIHhhcnJheSBvcGVyYXRpb25zLiBUaGVzZSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgKEtBU0FOLCBMT0NLREVQLCBWTV9XQVJOL1ZNX0JVRyBhc3NlcnRpb25zKSwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB6c3dhcCBzdWJzeXN0ZW0gbG9naWMsIHNwZWNpZmljYWxseSByZWZhdWx0IHRyYWNraW5nIGFuZCBzaGFkb3cgZW50cnkgcHJlc2VydmF0aW9uIGFjcm9zcyB6c3dhcCB3cml0ZWJhY2sgYW5kIHN3YXAtaW4gcGF0aHMuIEl0IGludHJvZHVjZXMgbmV3IGhlbHBlcnMgKHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIsIHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cywgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKSBhbmQgbW9kaWZpZXMgc3dhcCBjYWNoZSBhbGxvY2F0aW9uIGFuZCB3cml0ZWJhY2sgaGFuZGxpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgd2FycmFudCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTE6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MDVlYzZiODg5YzlkYTA5YTliZDg4NzI0ZmY5YzMyMTdkMTg1YjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTE6MTg6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXG5pbmRleCAzMGMxOTNhMTIwN2UxLi5kZmI3MTUzMjM2ZjVjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbkBAIC0zNSw2ICYjNDM7MzUsOCBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG4gdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcbiYjNDM7Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0Mzt2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2Vsc2VcbiBcbiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9O1xuQEAgLTY5LDYgJiM0Mzs3MSwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIF9MSU5VWF9aU1dBUF9IICovXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDhiZTNkMjhkOWMzZDguLmQxOTk0N2EzYzMzODUgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMzEsNiAmIzQzOzMxLDcgQEAgdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xuIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XG4mIzQzO3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XG4gdm9pZCB3b3JraW5nc2V0X2FjdGl2YXRpb24oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4gLyogbW0vZm9saW8uYyAqL1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGEyYTYzYWUwOTY3YzEuLjAwNDNhOTIzN2E4ZGQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmNcbkBAIC00ODU3LDYgJiM0Mzs0ODU3LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xuIFx0cHRlX3QgKnB0ZXA7XG4mIzQzO1x0dm9pZCAqc2hhZG93O1xuIFxuIFx0aWYgKCFwdGVfdW5tYXBfc2FtZSh2bWYpKVxuIFx0XHRnb3RvIG91dDtcbkBAIC00OTg0LDYgJiM0Mzs0OTg1LDEwIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0XHRnb3RvIG91dF9wYWdlO1xuIFx0fVxuIFxuJiM0MztcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4mIzQzO1x0aWYgKHNoYWRvdylcbiYjNDM7XHRcdHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChmb2xpbywgc2hhZG93KTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogS1NNIHNvbWV0aW1lcyBoYXMgdG8gY29weSBvbiByZWFkIGZhdWx0cywgZm9yIGV4YW1wbGUsIGlmXG4gXHQgKiBmb2xpby1cdTAwM2VpbmRleCBvZiBub24ta3NtIGZvbGlvcyB3b3VsZCBiZSBub25saW5lYXIgaW5zaWRlIHRoZVxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCBjMzIxMmZkZWNlOWI0Li41M2Y1N2FkMTk0YTM5IDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTI0NjUsNiAmIzQzOzI0NjUsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XG4gXHRpbnQgZXJyb3IsIG5yX3BhZ2VzLCBvcmRlcjtcbiBcdHBnb2ZmX3Qgb2Zmc2V0O1xuJiM0MztcdHZvaWQgKnNoYWRvdztcbiBcbiBcdFZNX0JVR19PTighKmZvbGlvcCB8fCAheGFfaXNfdmFsdWUoKmZvbGlvcCkpO1xuIFx0aW5kZXhfZW50cnkgPSByYWRpeF90b19zd3BfZW50cnkoKmZvbGlvcCk7XG5AQCAtMjU3Niw2ICYjNDM7MjU3NywxMCBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0ICovXG4gXHRhcmNoX3N3YXBfcmVzdG9yZShmb2xpb19zd2FwKHN3YXAsIGZvbGlvKSwgZm9saW8pO1xuIFxuJiM0MztcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4mIzQzO1x0aWYgKHNoYWRvdylcbiYjNDM7XHRcdHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChmb2xpbywgc2hhZG93KTtcbiYjNDM7XG4gXHRpZiAoc2htZW1fc2hvdWxkX3JlcGxhY2VfZm9saW8oZm9saW8sIGdmcCkpIHtcbiBcdFx0ZXJyb3IgPSBzaG1lbV9yZXBsYWNlX2ZvbGlvKFx1MDAyNmZvbGlvLCBnZnAsIGluZm8sIGluZGV4LCB2bWEpO1xuIFx0XHRpZiAoZXJyb3IpXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCAwYjVkNTA3NzM5YmNiLi5kZGQxMDhiNDFkMzNhIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmhcbkBAIC0zMTIsOSAmIzQzOzMxMiwxMCBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcbiBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfZ2V0X2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xuJiM0MztzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuJiM0MztcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LFxuJiM0MztcdFx0XHRcdCAgICAgICB2b2lkICoqc2hhZG93cCk7XG4gLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCAzMDU4NzdlMWY0ZDdiLi5lODBhNjk0ZGRkYjQ3IDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0yNCw2ICYjNDM7MjQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXBfb3BzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzd2FwX3RhYmxlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzd2FwLmhcJiMzNDtcbkBAIC0yNjMsMTIgJiM0MzsyNjQsMjEgQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0dW5zaWduZWQgaW50IGNpX3N0YXJ0LCBjaV9vZmYsIGNpX2VuZDtcbiBcdGJvb2wgZm9saW9fc3dhcHBlZCA9IGZhbHNlLCBuZWVkX2ZyZWUgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4mIzQzO1x0dm9pZCAqc2hhZG93X3BhcmtlZDtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShfX3N3YXBfZW50cnlfdG9fY2x1c3RlcihlbnRyeSkgIT0gY2kpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgcGFya2VkIHRoZSBzbG90JiMzOTtzIG9yaWdpbmFsIHNoYWRvdyBpbiB0aGVcbiYjNDM7XHQgKiB6c3dhcCB0cmVlOiByZXN0b3JlIGl0IGludG8gdGhlIHNsb3QgZm9yIGxhdGVyIHN3YXAtaW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0c2hhZG93X3BhcmtlZCA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4mIzQzO1x0aWYgKHNoYWRvd19wYXJrZWQpXG4mIzQzO1x0XHRzaGFkb3cgPSBzaGFkb3dfcGFya2VkO1xuJiM0MztcbiBcdHNpID0gX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpO1xuIFx0Y2lfc3RhcnQgPSBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpO1xuIFx0Y2lfZW5kID0gY2lfc3RhcnQgJiM0MzsgbnJfcGFnZXM7XG5AQCAtNDA5LDcgJiM0Mzs0MTksOCBAQCB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0XHRcdHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcbiYjNDM7XHRcdFx0XHRcdHZvaWQgKipzaGFkb3dwKVxuIHtcbiBcdGludCBlcnI7XG4gXHRzd3BfZW50cnlfdCBlbnRyeTtcbkBAIC00ODMsMzcgJiM0Mzs0OTQsNDIgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXG4gXHQvKiBtZW1zdyB1bmNoYXJnZXMgc3dhcCB3aGVuIGZvbGlvIGlzIGFkZGVkIHRvIHN3YXAgY2FjaGUgKi9cbiBcdG1lbWNnMV9zd2FwaW4oZm9saW8pO1xuLVx0aWYgKHNoYWRvdylcbi1cdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuIFxuIFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpO1xuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTtcbiBcbi1cdC8qIENhbGxlciB3aWxsIGluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgbmV3X2ZvbGlvICovXG4tXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiYjNDM7XHRpZiAoc2hhZG93cClcbiYjNDM7XHRcdCpzaGFkb3dwID0gc2hhZG93O1xuJiM0MztcbiBcdHJldHVybiBmb2xpbztcbiB9XG4gXG4gLyoqXG4tICogc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG4mIzQzOyAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG4gICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcbiAgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnc1xuICAqIEBvcmRlcnM6IGFsbG9jYXRpb24gb3JkZXJzLCBtdXN0IGJlIG5vbiB6ZXJvXG4gICogQHZtZjogZmF1bHQgaW5mb3JtYXRpb25cbiAgKiBAbXBvbDogTlVNQSBtZW1vcnkgYWxsb2NhdGlvbiBwb2xpY3kgdG8gYmUgYXBwbGllZFxuICAqIEBpbHg6IE5VTUEgaW50ZXJsZWF2ZSBpbmRleCwgZm9yIHVzZSBvbmx5IHdoZW4gTVBPTF9JTlRFUkxFQVZFXG4mIzQzOyAqIEBzaGFkb3dwOiBSZXR1cm5zIHRoZSBzaGFkb3cgdGhlIGFsbG9jYXRpb24gZGlzcGxhY2VkLCBOVUxMIHRvIGlnbm9yZVxuICAqXG4gICogQWxsb2NhdGUgYSBmb2xpbyBpbiB0aGUgc3dhcCBjYWNoZSBmb3Igb25lIHN3YXAgc2xvdCwgdHlwaWNhbGx5IGJlZm9yZVxuICAqIGRvaW5nIElPIChlLmcuIHN3YXAgaW4gb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIHN3YXAgc2xvdCBpbmRpY2F0ZWQgYnlcbiAgKiBAdGFyZ19lbnRyeSBtdXN0IGhhdmUgYSBub24temVybyBzd2FwIGNvdW50IChzd2FwcGVkIG91dCkuXG4gICpcbiYjNDM7ICogVGhlIHJldHVybmVkIGZvbGlvIGlzIGxvY2tlZCBhbmQgaXMgTk9UIG9uIHRoZSBMUlUuIFRoZSBjYWxsZXIgbXVzdCBlaXRoZXJcbiYjNDM7ICogYWRkIGl0IHRvIHRoZSBMUlUgd2l0aCBmb2xpb19hZGRfbHJ1KCkgc28gcGFnZSByZWNsYWltIGNhbiBmaW5kIGl0LCBvciBmcmVlXG4mIzQzOyAqIGl0IGRpcmVjdGx5IG9uY2UgZG9uZTsgYSBmb2xpbyBsZWZ0IG9mZiB0aGUgTFJVIGlzIHVucmVjbGFpbWFibGUgYW5kIGxlYWtzLlxuJiM0MzsgKlxuICAqIENvbnRleHQ6IENhbGxlciBtdXN0IHByb3RlY3QgdGhlIHN3YXAgZGV2aWNlIHdpdGggcmVmZXJlbmNlIGNvdW50IG9yIGxvY2tzLlxuICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwXG4gICogY2FjaGUuIFJldHVybnMgZXJyb3IgY29kZSBpZiBmYWlsZWQgZHVlIHRvIHJhY2UsIE9PTSBvciBpbnZhbGlkIGFyZ3VtZW50cy5cbiAgKi9cbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuJiM0MztzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHZvaWQgKipzaGFkb3dwKVxuIHtcbiBcdGludCBvcmRlciwgZXJyO1xuIFx0c3RydWN0IGZvbGlvICpyZXQ7XG5AQCAtNTI4LDcgJiM0Mzs1NDQsNyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuIFxuIFx0ZG8ge1xuIFx0XHRyZXQgPSBfX3N3YXBfY2FjaGVfYWxsb2MoY2ksIHRhcmdfZW50cnksIGdmcCwgb3JkZXIsXG4tXHRcdFx0XHRcdCB2bWYsIG1wb2wsIGlseCk7XG4mIzQzO1x0XHRcdFx0XHQgdm1mLCBtcG9sLCBpbHgsIHNoYWRvd3ApO1xuIFx0XHRpZiAoIUlTX0VSUihyZXQpKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRlcnIgPSBQVFJfRVJSKHJldCk7XG5AQCAtNjQ0LDE3ICYjNDM7NjYwLDIzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCxcbiBcdFx0cGdvZmZfdCBpbHgsIGJvb2wgcmVhZGFoZWFkKVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4mIzQzO1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbiBcbiBcdGRvIHtcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4tXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4mIzQzO1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4mIzQzO1x0XHRcdFx0XHRcdCBpbHgsIFx1MDAyNnNoYWRvdyk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuJiM0MztcdGlmIChzaGFkb3cpXG4mIzQzO1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4mIzQzO1xuJiM0MztcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFx0c3dhcF9yZWFkX2ZvbGlvKGN0eCwgZm9saW8pO1xuIFx0aWYgKHJlYWRhaGVhZCkge1xuIFx0XHRmb2xpb19zZXRfcmVhZGFoZWFkKGZvbGlvKTtcbkBAIC02ODUsMTcgJiM0Mzs3MDcsMjMgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbiB7XG4gXHRzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4mIzQzO1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCxcbiYjNDM7XHRcdFx0XHRcdFx0IGlseCwgXHUwMDI2c2hhZG93KTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUihmb2xpbykpXG4gXHRcdHJldHVybiBmb2xpbztcbiBcbiYjNDM7XHRpZiAoc2hhZG93KVxuJiM0MztcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuJiM0MztcbiYjNDM7XHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9mb2xpbyhcdTAwMjZjdHgsIGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9zdWJtaXQoXHUwMDI2Y3R4KTtcbiBcdHJldHVybiBmb2xpbztcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggNDhkM2NkNDBkZWZkYi4uNjEwMWY5MGU5MWQyYSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xODg1LDcgJiM0MzsxODg1LDcgQEAgdm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiAgKiAgIENQVTFcdFx0XHRcdENQVTJcbiAgKiAgIGRvX3N3YXBfcGFnZSgpXG4gICogICAgIC4uLlx0XHRcdFx0c3dhcG9mZiYjNDM7c3dhcG9uXG4tICogICAgIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oKVxuJiM0MzsgKiAgICAgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKClcbiAgKiAgICAgICAvLyBjaGVjayBzd2FwX21hcFxuICAqICAgICAvLyB2ZXJpZnkgUFRFIG5vdCBjaGFuZ2VkXG4gICpcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA0MGQzZjFiNDhhNzRjLi4xY2E2NDg5ZTUwMTIyIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDgsNiAmIzQzOzQ4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVmZXRjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kYXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC96c3dhcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdld2Fsay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2htZW1fZnMuaFx1MDAzZVxuQEAgLTc1Myw3ICYjNDM7NzU0LDggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbi1cdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbiYjNDM7XHRcdGlmIChyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIXpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKVxuIFx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG4gXHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbiBcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdyk7XG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCA4NDEyZjQ4NDBhZTM1Li44ZTQ1YjBiYWViMzZkIDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmNcbkBAIC01MzYsMTYgJiM0Mzs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4gXHRyZXR1cm4gcmVmYXVsdF9kaXN0YW5jZSBcdTAwM2M9IHdvcmtpbmdzZXRfc2l6ZTtcbiB9XG4gXG4tLyoqXG4tICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXG4tICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uXG4tICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxuLSAqXG4tICogQ2FsY3VsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSByZWZhdWx0IGRpc3RhbmNlIG9mIHRoZSBwcmV2aW91c2x5XG4tICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxuLSAqIHByZXNzdXJlIGNhdXNlZCB0aGUgZXZpY3Rpb24uXG4tICovXG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuJiM0MztzdGF0aWMgdm9pZCBfX3dvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3csXG4mIzQzO1x0XHRcdFx0IGJvb2wgbHJ1X21hbmFnZWQpXG4ge1xuIFx0Ym9vbCBmaWxlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuQEAgLTU3Nyw3ICYjNDM7NTY5LDE2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdGlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsIFx1MDAyNndvcmtpbmdzZXQsIHRydWUpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQW4gTFJVLW1hbmFnZWQgZm9saW8gbWF5IHNpdCBpbiBhIHBlci1DUFUgYmF0Y2gsIHdoaWNoIGNhbm5vdCBiZVxuJiM0MztcdCAqIGRldGVybWluZWQgaGVyZTogc2V0dGluZyB0aGUgZmxhZyB3b3VsZCByYWNlIHRoZSBkcmFpbiBhbmQgbGVhdmUgaXRcbiYjNDM7XHQgKiBkaXNhZ3JlZWluZyB3aXRoIHRoZSBsaXN0LiBmb2xpb19hY3RpdmF0ZSgpIGlzIHNhZmUsIGJ1dCBtaXNzZXMgdGhlXG4mIzQzO1x0ICogYWN0aXZhdGlvbiBmb3Igc3VjaCBhIGZvbGlvLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChscnVfbWFuYWdlZClcbiYjNDM7XHRcdGZvbGlvX2FjdGl2YXRlKGZvbGlvKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbiBcdHdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KGxydXZlYywgbnIpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQkFTRSAmIzQzOyBmaWxlLCBucik7XG4gXG5AQCAtNTkwLDYgJiM0Mzs1OTEsNDMgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuIFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxuJiM0MzsgKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbiYjNDM7ICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHlcbiYjNDM7ICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxuJiM0MzsgKiBwcmVzc3VyZSBjYXVzZWQgdGhlIGV2aWN0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBAZm9saW8gbXVzdCBiZSBsb2NrZWQgYW5kIG5vdCBvbiB0aGUgTFJVIHlldCwgdGhlIGNhbGxlciBhZGRzXG4mIzQzOyAqIGl0IHdpdGggZm9saW9fYWRkX2xydSgpIGFmdGVyd2FyZHMuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4mIzQzO3tcbiYjNDM7XHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHlcbiYjNDM7ICogZXZpY3RlZCBmb2xpbyB0aGF0IGlzIGFscmVhZHkgb24gdGhlIExSVS5cbiYjNDM7ICogQGZvbGlvOiBUaGUgZm9saW8gdGhlIGV2aWN0aW9uIGlzIHJlZmF1bHRlZCBpbnRvLlxuJiM0MzsgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXG4mIzQzOyAqXG4mIzQzOyAqIExpa2Ugd29ya2luZ3NldF9yZWZhdWx0KCksIGJ1dCBmb3IgYSBmb2xpbyB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGFkZGVkXG4mIzQzOyAqIHRvIHRoZSBMUlUsIHdoaWNoIGhhcyB0byBiZSBhY3RpdmF0ZWQgYnkgbW92aW5nIGl0IGJldHdlZW4gdGhlIGxpc3RzXG4mIzQzOyAqIHJhdGhlciB0aGFuIGJ5IHNldHRpbmcgUEdfYWN0aXZlLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgYWN0aXZhdGlvbiBpcyBiZXN0IGVmZm9ydDogYSBmb2xpbyBzdGlsbCBzaXR0aW5nIGluIGEgcGVyLUNQVSBMUlVcbiYjNDM7ICogYmF0Y2ggY2Fubm90IGJlIG1vdmVkIHlldCBhbmQgaXMgbGVmdCBpbmFjdGl2ZS5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQGZvbGlvIG11c3QgYmUgbG9ja2VkIGFuZCBhbHJlYWR5IGFkZGVkIHRvIHRoZSBMUlUuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4mIzQzO3tcbiYjNDM7XHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB3b3JraW5nc2V0X2FjdGl2YXRpb24gLSBub3RlIGEgcGFnZSBhY3RpdmF0aW9uXG4gICogQGZvbGlvOiBGb2xpbyB0aGF0IGlzIGJlaW5nIGFjdGl2YXRlZC5cbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggYzI3ZTIyZDA2N2UzZS4uOTA0ODIxZGI0MDFmMyAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmNcbkBAIC05NjEsNiAmIzQzOzk2MSw3OSBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogd3JpdGViYWNrIGNvZGVcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XIHhhX21rX3ZhbHVlKDApXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciAtIGlzIEBmb2xpbyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXI/XG4mIzQzOyAqIEBmb2xpbzogdGhlIGZvbGlvIGJlaW5nIGV4YW1pbmVkICh0eXBpY2FsbHkgYSBzd2FwIGNhY2hlIGZvbGlvIHVuZGVyIHJlY2xhaW0pXG4mIzQzOyAqXG4mIzQzOyAqIEEgZm9saW8gaXMgYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHdoZW4gZXZlcnkgb25lIG9mIGl0cyBzd2FwIG9mZnNldHMgaG9sZHNcbiYjNDM7ICogYSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvdyAoYSByZWFsIHNoYWRvdyBvciB0aGUgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPV1xuJiM0MzsgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgQGZvbGlvIGlzIGEgd3JpdGViYWNrIGJ1ZmZlciwgaW4gd2hpY2ggY2FzZSB0aGUgcmVjbGFpbSBwYXRoXG4mIzQzOyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuXG4mIzQzOyAqL1xuJiM0Mztib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiYjNDM7XHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4mIzQzO1xuJiM0MztcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCF4YV9pc192YWx1ZSh4YV9sb2FkKHN3YXBfenN3YXBfdHJlZShlKSwgb2Zmc2V0ICYjNDM7IGkpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MgLSByZXRyaWV2ZSBhbmQgY2xlYXIgQGZvbGlvJiMzOTtzIHBhcmtlZCBzaGFkb3cocylcbiYjNDM7ICogQGZvbGlvOiB0aGUgd3JpdGViYWNrIGJ1ZmZlciBmb2xpbyAob3IgdGhlIHN3YXBpbiBmb2xpbyB0aGF0IGNvbnN1bWVkIGl0KVxuJiM0MzsgKlxuJiM0MzsgKiBSZW1vdmUgYW55IHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93cyBmb3IgQGZvbGlvJiMzOTtzIHN3YXAgb2Zmc2V0KHMpIGZyb20gdGhlXG4mIzQzOyAqIHpzd2FwIHRyZWUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdGhlIHByZXNlcnZlZCB3b3JraW5nc2V0IHNoYWRvdywgb3IgTlVMTCBpZiB0aGUgc2xvdChzKSBoYWQgbm8gc2hhZG93XG4mIzQzOyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkXG4mIzQzOyAqIHNoYWRvdyBpbnRvIHRoZSBzd2FwIHNsb3QgKGJ1ZmZlciBkcm9wcGVkKSBvciBmZWVkcyBpdCB0b1xuJiM0MzsgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoKSAoYnVmZmVyIGNvbnN1bWVkIGJ5IGEgc3dhcGluKTsgY2xlYXJpbmdcbiYjNDM7ICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LlxuJiM0MzsgKi9cbiYjNDM7dm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRzd3BfZW50cnlfdCBzd3AgPSBmb2xpby1cdTAwM2Vzd2FwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4mIzQzO1x0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7XG4mIzQzO1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4mIzQzO1xuJiM0MztcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCAmIzQzOyBpKTtcbiYjNDM7XHRcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoZSk7XG4mIzQzO1x0XHR2b2lkICpwYXJrZWQgPSB4YV9sb2FkKHRyZWUsIG9mZnNldCAmIzQzOyBpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0ICYjNDM7IGkpO1xuJiM0MztcdFx0aWYgKHBhcmtlZCAhPSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XKVxuJiM0MztcdFx0XHRzaGFkb3cgPSBwYXJrZWQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2hhZG93O1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQXR0ZW1wdHMgdG8gZnJlZSBhbiBlbnRyeSBieSBhZGRpbmcgYSBmb2xpbyB0byB0aGUgc3dhcCBjYWNoZSxcbiAgKiBkZWNvbXByZXNzaW5nIHRoZSBlbnRyeSBkYXRhIGludG8gdGhlIGZvbGlvLCBhbmQgaXNzdWluZyBhXG5AQCAtOTc2LDEyICYjNDM7MTA0OSwxNCBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbiB7XG4mIzQzO1x0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbiBcdHN0cnVjdCB4YXJyYXkgKnRyZWU7XG4gXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwZW50cnkpO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XG4gXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XG4gXHRzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307XG4mIzQzO1x0dm9pZCAqc2hhZG93O1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHQvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqL1xuQEAgLTk5MCw4ICYjNDM7MTA2NSw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuIFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbi1cdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxuLVx0XHRcdFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xuJiM0MztcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4mIzQzO1x0XHRcdFx0XHQgTk9fSU5URVJMRUFWRV9JTkRFWCwgXHUwMDI2c2hhZG93KTtcbiBcdHB1dF9zd2FwX2RldmljZShzaSk7XG4gXG4gXHQvKlxuQEAgLTEwMDMsNiAmIzQzOzEwNzgsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0ICovXG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xuJiM0MztcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFxuIFx0LypcbiBcdCAqIGZvbGlvIGlzIGxvY2tlZCwgYW5kIHRoZSBzd2FwY2FjaGUgaXMgbm93IHNlY3VyZWQgYWdhaW5zdFxuQEAgLTEwMjQsNyAmIzQzOzExMDAsMTIgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBzbG90IHdpdGggbm8gc2hhZG93IGFscmVhZHkgcmVhZHMgYmFjayBhcyBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XOlxuJiM0MztcdCAqIHRoZSBzd2FwIHRhYmxlIG1hcmtzIGEgc3dhcHBlZCBvdXQgc2xvdCB3aXRoIHhhX21rX3ZhbHVlKDApIGFuZCBob2xkc1xuJiM0MztcdCAqIHRoZSBzaGFkb3csIHdoZW4gdGhlcmUgaXMgb25lLCBpbiB0aGF0IHNhbWUgdmFsdWUuXG4mIzQzO1x0ICovXG4mIzQzO1x0eGFfc3RvcmUodHJlZSwgb2Zmc2V0LCBzaGFkb3csIEdGUF9LRVJORUwpO1xuIFxuIFx0Y291bnRfdm1fZXZlbnQoWlNXUFdCKTtcbiBcdGlmIChlbnRyeS1cdTAwM2VvYmpjZylcbkBAIC0xMDQ0LDcgJiM0MzsxMTI1LDE1IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gb3V0OlxuIFx0aWYgKHJldCkge1xuLVx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIGFsbG9jYXRpb24gYWJvdmUgb3Zlcndyb3RlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBhbmQgbm90aGluZ1xuJiM0MztcdFx0ICogaGFzIGJlZW4gcGFya2VkIGZvciBpdCB5ZXQsIHNvIHJlc3RvcmUgaXQgYXMgdGhlIGZvbGlvIGxlYXZlc1xuJiM0MztcdFx0ICogdGhlIHN3YXAgY2FjaGUsIG9yIHRoZSBldmljdGlvbiBpdCByZWNvcmRzIGlzIGxvc3QuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oc3dwZW50cnkpLCBvZmZzZXQpO1xuJiM0MztcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3cGVudHJ5LCBzaGFkb3cpO1xuJiM0MztcdFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4mIzQzO1x0XHRmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0fVxuIFx0Zm9saW9fcHV0KGZvbGlvKTtcbkBAIC0xNDg3LDYgJiM0MzsxNTc2LDE3IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcbiBcdFZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgd3JpdGViYWNrIGJ1ZmZlciB3aG9zZSBJTyBmYWlsZWQgaXMgcmVkaXJ0aWVkIGFuZCBsZWZ0IGluIHRoZVxuJiM0MztcdCAqIHN3YXAgY2FjaGUsIHNvIHJlY2xhaW0gd3JpdGVzIGl0IG91dCBhZ2Fpbi4gV3JpdGViYWNrIGFscmVhZHlcbiYjNDM7XHQgKiBkZWNpZGVkIHRoaXMgZGF0YSBiZWxvbmdzIG9uIGRpc2ssIHNvIHNlbmQgaXQgdGhlcmUgaW5zdGVhZCBvZlxuJiM0MztcdCAqIGNvbXByZXNzaW5nIGl0IGJhY2sgaW50byB6c3dhcC4gVGhpcyBhbHNvIGxlYXZlcyB0aGUgc2hhZG93XG4mIzQzO1x0ICogcGFya2VkIGZvciB0aGUgYnVmZmVyIGluIHBsYWNlLCBzbyBpdCBpcyBzdGlsbCByZXN0b3JlZCBpbnRvXG4mIzQzO1x0ICogdGhlIHNsb3Qgb25jZSB0aGUgZm9saW8gbGVhdmVzIHRoZSBzd2FwIGNhY2hlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4gXHRpZiAoIXpzd2FwX2VuYWJsZWQpXG4gXHRcdGdvdG8gY2hlY2tfb2xkO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyYjMzQ7LAogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZW50cnkmIzM0OywKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkJiMzNDssCiAgICAmIzM0O19fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB6c3dhcCBzdWJzeXN0ZW0gbG9naWMsIHNwZWNpZmljYWxseSByZWZhdWx0IHRyYWNraW5nIGFuZCBzaGFkb3cgZW50cnkgcHJlc2VydmF0aW9uIGFjcm9zcyB6c3dhcCB3cml0ZWJhY2sgYW5kIHN3YXAtaW4gcGF0aHMuIEl0IGludHJvZHVjZXMgbmV3IGhlbHBlcnMgKHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIsIHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cywgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKSBhbmQgbW9kaWZpZXMgc3dhcCBjYWNoZSBhbGxvY2F0aW9uIGFuZCB3cml0ZWJhY2sgaGFuZGxpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgd2FycmFudCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MDVlYzZiODg5YzlkYTA5YTliZDg4NzI0ZmY5YzMyMTdkMTg1YjhlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTE6MTg6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmgKaW5kZXggMzBjMTkzYTEyMDdlMS4uZGZiNzE1MzIzNmY1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvenN3YXAuaApAQCAtMzUsNiAmIzQzOzM1LDggQEAgdm9pZCB6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpOwogdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7CiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7CiBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCk7CiYjNDM7Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKICNlbHNlCiAKIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307CkBAIC02OSw2ICYjNDM7NzEsMTYgQEAgc3RhdGljIGlubGluZSBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9aU1dBUF9IICovCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCA4YmUzZDI4ZDljM2Q4Li5kMTk5NDdhM2MzMzg1IDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTMxLDYgJiM0MzszMSw3IEBAIHZvaWQgd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIHZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbywKIAkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7CiB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpOwomIzQzO3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7CiB2b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIAogLyogbW0vZm9saW8uYyAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBhMmE2M2FlMDk2N2MxLi4wMDQzYTkyMzdhOGRkIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtNDg1Nyw2ICYjNDM7NDg1Nyw3IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCXVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwogCXB0ZV90ICpwdGVwOwomIzQzOwl2b2lkICpzaGFkb3c7CiAKIAlpZiAoIXB0ZV91bm1hcF9zYW1lKHZtZikpCiAJCWdvdG8gb3V0OwpAQCAtNDk4NCw2ICYjNDM7NDk4NSwxMCBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAkJZ290byBvdXRfcGFnZTsKIAl9CiAKJiM0MzsJc2hhZG93ID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTsKJiM0MzsJaWYgKHNoYWRvdykKJiM0MzsJCXdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChmb2xpbywgc2hhZG93KTsKJiM0MzsKIAkvKgogCSAqIEtTTSBzb21ldGltZXMgaGFzIHRvIGNvcHkgb24gcmVhZCBmYXVsdHMsIGZvciBleGFtcGxlLCBpZgogCSAqIGZvbGlvLSZndDtpbmRleCBvZiBub24ta3NtIGZvbGlvcyB3b3VsZCBiZSBub25saW5lYXIgaW5zaWRlIHRoZQpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggYzMyMTJmZGVjZTliNC4uNTNmNTdhZDE5NGEzOSAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0yNDY1LDYgJiM0MzsyNDY1LDcgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDsKIAlpbnQgZXJyb3IsIG5yX3BhZ2VzLCBvcmRlcjsKIAlwZ29mZl90IG9mZnNldDsKJiM0MzsJdm9pZCAqc2hhZG93OwogCiAJVk1fQlVHX09OKCEqZm9saW9wIHx8ICF4YV9pc192YWx1ZSgqZm9saW9wKSk7CiAJaW5kZXhfZW50cnkgPSByYWRpeF90b19zd3BfZW50cnkoKmZvbGlvcCk7CkBAIC0yNTc2LDYgJiM0MzsyNTc3LDEwIEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiAJICovCiAJYXJjaF9zd2FwX3Jlc3RvcmUoZm9saW9fc3dhcChzd2FwLCBmb2xpbyksIGZvbGlvKTsKIAomIzQzOwlzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pOwomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKGZvbGlvLCBzaGFkb3cpOwomIzQzOwogCWlmIChzaG1lbV9zaG91bGRfcmVwbGFjZV9mb2xpbyhmb2xpbywgZ2ZwKSkgewogCQllcnJvciA9IHNobWVtX3JlcGxhY2VfZm9saW8oJmFtcDtmb2xpbywgZ2ZwLCBpbmZvLCBpbmRleCwgdm1hKTsKIAkJaWYgKGVycm9yKQpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oCmluZGV4IDBiNWQ1MDc3MzliY2IuLmRkZDEwOGI0MWQzM2EgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmgKQEAgLTMxMiw5ICYjNDM7MzEyLDEwIEBAIGJvb2wgc3dhcF9jYWNoZV9oYXNfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpOwogc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7CiB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpOwogdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAotCQkJCSAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpOwomIzQzO3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssCiYjNDM7CQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCwKJiM0MzsJCQkJICAgICAgIHZvaWQgKipzaGFkb3dwKTsKIC8qIEJlbG93IGhlbHBlcnMgcmVxdWlyZSB0aGUgY2FsbGVyIHRvIGxvY2sgYW5kIHBhc3MgaW4gdGhlIHN3YXAgY2x1c3Rlci4gKi8KIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTsKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCAzMDU4NzdlMWY0ZDdiLi5lODBhNjk0ZGRkYjQ3IDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC0yNCw2ICYjNDM7MjQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NobWVtX2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3lzY3RsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3dhcF9vcHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvenN3YXAuaCZndDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3N3YXBfdGFibGUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3N3YXAuaCYjMzQ7CkBAIC0yNjMsMTIgJiM0MzsyNjQsMjEgQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCXVuc2lnbmVkIGludCBjaV9zdGFydCwgY2lfb2ZmLCBjaV9lbmQ7CiAJYm9vbCBmb2xpb19zd2FwcGVkID0gZmFsc2UsIG5lZWRfZnJlZSA9IGZhbHNlOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CXZvaWQgKnNoYWRvd19wYXJrZWQ7CiAKIAlWTV9XQVJOX09OX09OQ0UoX19zd2FwX2VudHJ5X3RvX2NsdXN0ZXIoZW50cnkpICE9IGNpKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pOwogCiYjNDM7CS8qCiYjNDM7CSAqIEEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlciBwYXJrZWQgdGhlIHNsb3QmIzM5O3Mgb3JpZ2luYWwgc2hhZG93IGluIHRoZQomIzQzOwkgKiB6c3dhcCB0cmVlOiByZXN0b3JlIGl0IGludG8gdGhlIHNsb3QgZm9yIGxhdGVyIHN3YXAtaW4uCiYjNDM7CSAqLwomIzQzOwlzaGFkb3dfcGFya2VkID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTsKJiM0MzsJaWYgKHNoYWRvd19wYXJrZWQpCiYjNDM7CQlzaGFkb3cgPSBzaGFkb3dfcGFya2VkOwomIzQzOwogCXNpID0gX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpOwogCWNpX3N0YXJ0ID0gc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KTsKIAljaV9lbmQgPSBjaV9zdGFydCAmIzQzOyBucl9wYWdlczsKQEAgLTQwOSw3ICYjNDM7NDE5LDggQEAgdm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJCQkJCXN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCwKIAkJCQkJdW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKLQkJCQkJc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiYjNDM7CQkJCQlzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCwKJiM0MzsJCQkJCXZvaWQgKipzaGFkb3dwKQogewogCWludCBlcnI7CiAJc3dwX2VudHJ5X3QgZW50cnk7CkBAIC00ODMsMzcgJiM0Mzs0OTQsNDIgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAKIAkvKiBtZW1zdyB1bmNoYXJnZXMgc3dhcCB3aGVuIGZvbGlvIGlzIGFkZGVkIHRvIHN3YXAgY2FjaGUgKi8KIAltZW1jZzFfc3dhcGluKGZvbGlvKTsKLQlpZiAoc2hhZG93KQotCQl3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7CiAKIAlub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCBucl9wYWdlcyk7CiAJbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTsKIAotCS8qIENhbGxlciB3aWxsIGluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgbmV3X2ZvbGlvICovCi0JZm9saW9fYWRkX2xydShmb2xpbyk7CiYjNDM7CWlmIChzaGFkb3dwKQomIzQzOwkJKnNoYWRvd3AgPSBzaGFkb3c7CiYjNDM7CiAJcmV0dXJuIGZvbGlvOwogfQogCiAvKioKLSAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLgomIzQzOyAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuCiAgKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdAogICogQGdmcDogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MKICAqIEBvcmRlcnM6IGFsbG9jYXRpb24gb3JkZXJzLCBtdXN0IGJlIG5vbiB6ZXJvCiAgKiBAdm1mOiBmYXVsdCBpbmZvcm1hdGlvbgogICogQG1wb2w6IE5VTUEgbWVtb3J5IGFsbG9jYXRpb24gcG9saWN5IHRvIGJlIGFwcGxpZWQKICAqIEBpbHg6IE5VTUEgaW50ZXJsZWF2ZSBpbmRleCwgZm9yIHVzZSBvbmx5IHdoZW4gTVBPTF9JTlRFUkxFQVZFCiYjNDM7ICogQHNoYWRvd3A6IFJldHVybnMgdGhlIHNoYWRvdyB0aGUgYWxsb2NhdGlvbiBkaXNwbGFjZWQsIE5VTEwgdG8gaWdub3JlCiAgKgogICogQWxsb2NhdGUgYSBmb2xpbyBpbiB0aGUgc3dhcCBjYWNoZSBmb3Igb25lIHN3YXAgc2xvdCwgdHlwaWNhbGx5IGJlZm9yZQogICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieQogICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLgogICoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgZm9saW8gaXMgbG9ja2VkIGFuZCBpcyBOT1Qgb24gdGhlIExSVS4gVGhlIGNhbGxlciBtdXN0IGVpdGhlcgomIzQzOyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZQomIzQzOyAqIGl0IGRpcmVjdGx5IG9uY2UgZG9uZTsgYSBmb2xpbyBsZWZ0IG9mZiB0aGUgTFJVIGlzIHVucmVjbGFpbWFibGUgYW5kIGxlYWtzLgomIzQzOyAqCiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy4KICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwCiAgKiBjYWNoZS4gUmV0dXJucyBlcnJvciBjb2RlIGlmIGZhaWxlZCBkdWUgdG8gcmFjZSwgT09NIG9yIGludmFsaWQgYXJndW1lbnRzLgogICovCi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAotCQkJCSAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsCiYjNDM7CQkJCSAgICAgICB2b2lkICoqc2hhZG93cCkKIHsKIAlpbnQgb3JkZXIsIGVycjsKIAlzdHJ1Y3QgZm9saW8gKnJldDsKQEAgLTUyOCw3ICYjNDM7NTQ0LDcgQEAgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCwKIAogCWRvIHsKIAkJcmV0ID0gX19zd2FwX2NhY2hlX2FsbG9jKGNpLCB0YXJnX2VudHJ5LCBnZnAsIG9yZGVyLAotCQkJCQkgdm1mLCBtcG9sLCBpbHgpOwomIzQzOwkJCQkJIHZtZiwgbXBvbCwgaWx4LCBzaGFkb3dwKTsKIAkJaWYgKCFJU19FUlIocmV0KSkKIAkJCWJyZWFrOwogCQllcnIgPSBQVFJfRVJSKHJldCk7CkBAIC02NDQsMTcgJiM0Mzs2NjAsMjMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LAogCQlwZ29mZl90IGlseCwgYm9vbCByZWFkYWhlYWQpCiB7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJdm9pZCAqc2hhZG93ID0gTlVMTDsKIAogCWRvIHsKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJCWlmIChmb2xpbykKIAkJCXJldHVybiBmb2xpbzsKLQkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTsKJiM0MzsJCWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwKJiM0MzsJCQkJCQkgaWx4LCAmYW1wO3NoYWRvdyk7CiAJfSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7CiAKIAlpZiAoSVNfRVJSX09SX05VTEwoZm9saW8pKQogCQlyZXR1cm4gTlVMTDsKIAomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwomIzQzOwomIzQzOwlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKIAlzd2FwX3JlYWRfZm9saW8oY3R4LCBmb2xpbyk7CiAJaWYgKHJlYWRhaGVhZCkgewogCQlmb2xpb19zZXRfcmVhZGFoZWFkKGZvbGlvKTsKQEAgLTY4NSwxNyAmIzQzOzcwNywyMyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLAogewogCXN0cnVjdCBzd2FwX2lvX2N0eCBjdHggPSB7fTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwl2b2lkICpzaGFkb3cgPSBOVUxMOwogCiAJZG8gewogCQlmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTsKIAkJaWYgKGZvbGlvKQogCQkJcmV0dXJuIGZvbGlvOwotCQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7CiYjNDM7CQlmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwKJiM0MzsJCQkJCQkgaWx4LCAmYW1wO3NoYWRvdyk7CiAJfSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7CiAKIAlpZiAoSVNfRVJSKGZvbGlvKSkKIAkJcmV0dXJuIGZvbGlvOwogCiYjNDM7CWlmIChzaGFkb3cpCiYjNDM7CQl3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7CiYjNDM7CiYjNDM7CWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXN3YXBfcmVhZF9mb2xpbygmYW1wO2N0eCwgZm9saW8pOwogCXN3YXBfcmVhZF9zdWJtaXQoJmFtcDtjdHgpOwogCXJldHVybiBmb2xpbzsKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDQ4ZDNjZDQwZGVmZGIuLjYxMDFmOTBlOTFkMmEgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtMTg4NSw3ICYjNDM7MTg4NSw3IEBAIHZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpCiAgKiAgIENQVTEJCQkJQ1BVMgogICogICBkb19zd2FwX3BhZ2UoKQogICogICAgIC4uLgkJCQlzd2Fwb2ZmJiM0Mztzd2Fwb24KLSAqICAgICBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKCkKJiM0MzsgKiAgICAgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKCkKICAqICAgICAgIC8vIGNoZWNrIHN3YXBfbWFwCiAgKiAgICAgLy8gdmVyaWZ5IFBURSBub3QgY2hhbmdlZAogICoKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNDBkM2YxYjQ4YTc0Yy4uMWNhNjQ4OWU1MDEyMiAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTQ4LDYgJiM0Mzs0OCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcHJlZmV0Y2guaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcmludGsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kYXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvenN3YXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wc2kuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdld2Fsay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NobWVtX2ZzLmgmZ3Q7CkBAIC03NTMsNyAmIzQzOzc1NCw4IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7CiAJCXN3cF9lbnRyeV90IHN3YXAgPSBmb2xpby0mZ3Q7c3dhcDsKIAotCQlpZiAocmVjbGFpbWVkICZhbXA7JmFtcDsgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSkKJiM0MzsJCWlmIChyZWNsYWltZWQgJmFtcDsmYW1wOyAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihmb2xpbykpCiAJCQlzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpOwogCQlfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7CiAJCV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpOwpkaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jCmluZGV4IDg0MTJmNDg0MGFlMzUuLjhlNDViMGJhZWIzNmQgMTAwNjQ0Ci0tLSBhL21tL3dvcmtpbmdzZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmMKQEAgLTUzNiwxNiAmIzQzOzUzNiw4IEBAIGJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCwKIAlyZXR1cm4gcmVmYXVsdF9kaXN0YW5jZSAmbHQ7PSB3b3JraW5nc2V0X3NpemU7CiB9CiAKLS8qKgotICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uCi0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby4KLSAqIEBzaGFkb3c6IFNoYWRvdyBlbnRyeSBvZiB0aGUgZXZpY3RlZCBmb2xpby4KLSAqCi0gKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHkKLSAqIGV2aWN0ZWQgZm9saW8gaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5vZGUgYW5kIHRoZSBtZW1jZyB3aG9zZSBtZW1vcnkKLSAqIHByZXNzdXJlIGNhdXNlZCB0aGUgZXZpY3Rpb24uCi0gKi8KLXZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKJiM0MztzdGF0aWMgdm9pZCBfX3dvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3csCiYjNDM7CQkJCSBib29sIGxydV9tYW5hZ2VkKQogewogCWJvb2wgZmlsZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CkBAIC01NzcsNyAmIzQzOzU2OSwxNiBAQCB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCiAJaWYgKCF3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHNoYWRvdywgZmlsZSwgJmFtcDt3b3JraW5nc2V0LCB0cnVlKSkKIAkJZ290byBvdXQ7CiAKLQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKJiM0MzsJLyoKJiM0MzsJICogQW4gTFJVLW1hbmFnZWQgZm9saW8gbWF5IHNpdCBpbiBhIHBlci1DUFUgYmF0Y2gsIHdoaWNoIGNhbm5vdCBiZQomIzQzOwkgKiBkZXRlcm1pbmVkIGhlcmU6IHNldHRpbmcgdGhlIGZsYWcgd291bGQgcmFjZSB0aGUgZHJhaW4gYW5kIGxlYXZlIGl0CiYjNDM7CSAqIGRpc2FncmVlaW5nIHdpdGggdGhlIGxpc3QuIGZvbGlvX2FjdGl2YXRlKCkgaXMgc2FmZSwgYnV0IG1pc3NlcyB0aGUKJiM0MzsJICogYWN0aXZhdGlvbiBmb3Igc3VjaCBhIGZvbGlvLgomIzQzOwkgKi8KJiM0MzsJaWYgKGxydV9tYW5hZ2VkKQomIzQzOwkJZm9saW9fYWN0aXZhdGUoZm9saW8pOwomIzQzOwllbHNlCiYjNDM7CQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKIAl3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChscnV2ZWMsIG5yKTsKIAltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9CQVNFICYjNDM7IGZpbGUsIG5yKTsKIApAQCAtNTkwLDYgJiM0Mzs1OTEsNDMgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQogCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLgomIzQzOyAqIEBmb2xpbzogVGhlIGZyZXNobHkgYWxsb2NhdGVkIHJlcGxhY2VtZW50IGZvbGlvLgomIzQzOyAqIEBzaGFkb3c6IFNoYWRvdyBlbnRyeSBvZiB0aGUgZXZpY3RlZCBmb2xpby4KJiM0MzsgKgomIzQzOyAqIENhbGN1bGF0ZXMgYW5kIGV2YWx1YXRlcyB0aGUgcmVmYXVsdCBkaXN0YW5jZSBvZiB0aGUgcHJldmlvdXNseQomIzQzOyAqIGV2aWN0ZWQgZm9saW8gaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5vZGUgYW5kIHRoZSBtZW1jZyB3aG9zZSBtZW1vcnkKJiM0MzsgKiBwcmVzc3VyZSBjYXVzZWQgdGhlIGV2aWN0aW9uLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQGZvbGlvIG11c3QgYmUgbG9ja2VkIGFuZCBub3Qgb24gdGhlIExSVSB5ZXQsIHRoZSBjYWxsZXIgYWRkcwomIzQzOyAqIGl0IHdpdGggZm9saW9fYWRkX2xydSgpIGFmdGVyd2FyZHMuCiYjNDM7ICovCiYjNDM7dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQomIzQzO3sKJiM0MzsJX193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkKJiM0MzsgKiBldmljdGVkIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgTFJVLgomIzQzOyAqIEBmb2xpbzogVGhlIGZvbGlvIHRoZSBldmljdGlvbiBpcyByZWZhdWx0ZWQgaW50by4KJiM0MzsgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uCiYjNDM7ICoKJiM0MzsgKiBMaWtlIHdvcmtpbmdzZXRfcmVmYXVsdCgpLCBidXQgZm9yIGEgZm9saW8gdGhlIGNhbGxlciBoYXMgYWxyZWFkeSBhZGRlZAomIzQzOyAqIHRvIHRoZSBMUlUsIHdoaWNoIGhhcyB0byBiZSBhY3RpdmF0ZWQgYnkgbW92aW5nIGl0IGJldHdlZW4gdGhlIGxpc3RzCiYjNDM7ICogcmF0aGVyIHRoYW4gYnkgc2V0dGluZyBQR19hY3RpdmUuCiYjNDM7ICoKJiM0MzsgKiBUaGUgYWN0aXZhdGlvbiBpcyBiZXN0IGVmZm9ydDogYSBmb2xpbyBzdGlsbCBzaXR0aW5nIGluIGEgcGVyLUNQVSBMUlUKJiM0MzsgKiBiYXRjaCBjYW5ub3QgYmUgbW92ZWQgeWV0IGFuZCBpcyBsZWZ0IGluYWN0aXZlLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQGZvbGlvIG11c3QgYmUgbG9ja2VkIGFuZCBhbHJlYWR5IGFkZGVkIHRvIHRoZSBMUlUuCiYjNDM7ICovCiYjNDM7dm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQomIzQzO3sKJiM0MzsJX193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgdHJ1ZSk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB3b3JraW5nc2V0X2FjdGl2YXRpb24gLSBub3RlIGEgcGFnZSBhY3RpdmF0aW9uCiAgKiBAZm9saW86IEZvbGlvIHRoYXQgaXMgYmVpbmcgYWN0aXZhdGVkLgpkaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmMKaW5kZXggYzI3ZTIyZDA2N2UzZS4uOTA0ODIxZGI0MDFmMyAxMDA2NDQKLS0tIGEvbW0venN3YXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jCkBAIC05NjEsNiAmIzQzOzk2MSw3OSBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIHdyaXRlYmFjayBjb2RlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwomIzQzOwomIzQzOyNkZWZpbmUgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVyB4YV9ta192YWx1ZSgwKQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIgLSBpcyBAZm9saW8gYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyPwomIzQzOyAqIEBmb2xpbzogdGhlIGZvbGlvIGJlaW5nIGV4YW1pbmVkICh0eXBpY2FsbHkgYSBzd2FwIGNhY2hlIGZvbGlvIHVuZGVyIHJlY2xhaW0pCiYjNDM7ICoKJiM0MzsgKiBBIGZvbGlvIGlzIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlciB3aGVuIGV2ZXJ5IG9uZSBvZiBpdHMgc3dhcCBvZmZzZXRzIGhvbGRzCiYjNDM7ICogYSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvdyAoYSByZWFsIHNoYWRvdyBvciB0aGUgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVwomIzQzOyAqIHNlbnRpbmVsKSBpbiB0aGUgenN3YXAgdHJlZSByYXRoZXIgdGhhbiBhIGxpdmUgenN3YXAgZW50cnkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgQGZvbGlvIGlzIGEgd3JpdGViYWNrIGJ1ZmZlciwgaW4gd2hpY2ggY2FzZSB0aGUgcmVjbGFpbSBwYXRoCiYjNDM7ICogbXVzdCBub3QgbWludCBhIGZyZXNoIHdvcmtpbmdzZXQgc2hhZG93IGZvciBpdC4KJiM0MzsgKi8KJiM0Mztib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLSZndDtzd2FwOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwomIzQzOwlwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwomIzQzOwomIzQzOwlpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCAmIzQzOyBpKTsKJiM0MzsKJiM0MzsJCWlmICgheGFfaXNfdmFsdWUoeGFfbG9hZChzd2FwX3pzd2FwX3RyZWUoZSksIG9mZnNldCAmIzQzOyBpKSkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MgLSByZXRyaWV2ZSBhbmQgY2xlYXIgQGZvbGlvJiMzOTtzIHBhcmtlZCBzaGFkb3cocykKJiM0MzsgKiBAZm9saW86IHRoZSB3cml0ZWJhY2sgYnVmZmVyIGZvbGlvIChvciB0aGUgc3dhcGluIGZvbGlvIHRoYXQgY29uc3VtZWQgaXQpCiYjNDM7ICoKJiM0MzsgKiBSZW1vdmUgYW55IHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93cyBmb3IgQGZvbGlvJiMzOTtzIHN3YXAgb2Zmc2V0KHMpIGZyb20gdGhlCiYjNDM7ICogenN3YXAgdHJlZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdGhlIHByZXNlcnZlZCB3b3JraW5nc2V0IHNoYWRvdywgb3IgTlVMTCBpZiB0aGUgc2xvdChzKSBoYWQgbm8gc2hhZG93CiYjNDM7ICogKHNlbnRpbmVsIG9ubHkpIG9yIG5vdGhpbmcgcGFya2VkLiBUaGUgY2FsbGVyIGVpdGhlciByZXN0b3JlcyB0aGUgcmV0dXJuZWQKJiM0MzsgKiBzaGFkb3cgaW50byB0aGUgc3dhcCBzbG90IChidWZmZXIgZHJvcHBlZCkgb3IgZmVlZHMgaXQgdG8KJiM0MzsgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoKSAoYnVmZmVyIGNvbnN1bWVkIGJ5IGEgc3dhcGluKTsgY2xlYXJpbmcKJiM0MzsgKiBoZXJlIGVuc3VyZXMgdGhlIHR3byBwYXRocyBuZXZlciBkb3VibGUtY291bnQuCiYjNDM7ICovCiYjNDM7dm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzd3BfZW50cnlfdCBzd3AgPSBmb2xpby0mZ3Q7c3dhcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7CiYjNDM7CXZvaWQgKnNoYWRvdyA9IE5VTEw7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJaWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCAmIzQzOyBpKTsKJiM0MzsJCXN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoZSk7CiYjNDM7CQl2b2lkICpwYXJrZWQgPSB4YV9sb2FkKHRyZWUsIG9mZnNldCAmIzQzOyBpKTsKJiM0MzsKJiM0MzsJCWlmICgheGFfaXNfdmFsdWUocGFya2VkKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXhhX2VyYXNlKHRyZWUsIG9mZnNldCAmIzQzOyBpKTsKJiM0MzsJCWlmIChwYXJrZWQgIT0gWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVykKJiM0MzsJCQlzaGFkb3cgPSBwYXJrZWQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHNoYWRvdzsKJiM0Mzt9CiYjNDM7CiAvKgogICogQXR0ZW1wdHMgdG8gZnJlZSBhbiBlbnRyeSBieSBhZGRpbmcgYSBmb2xpbyB0byB0aGUgc3dhcCBjYWNoZSwKICAqIGRlY29tcHJlc3NpbmcgdGhlIGVudHJ5IGRhdGEgaW50byB0aGUgZm9saW8sIGFuZCBpc3N1aW5nIGEKQEAgLTk3NiwxMiAmIzQzOzEwNDksMTQgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAkJCQkgc3dwX2VudHJ5X3Qgc3dwZW50cnkpCiB7CiYjNDM7CXN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7CiAJc3RydWN0IHhhcnJheSAqdHJlZTsKIAlwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwZW50cnkpOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IG1lbXBvbGljeSAqbXBvbDsKIAlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7CiAJc3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9OwomIzQzOwl2b2lkICpzaGFkb3c7CiAJaW50IHJldCA9IDA7CiAKIAkvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqLwpAQCAtOTkwLDggJiM0MzsxMDY1LDggQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAkJcmV0dXJuIC1FRVhJU1Q7CiAKIAltcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpOwotCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLAotCQkJCSAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTsKJiM0MzsJZm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCwKJiM0MzsJCQkJCSBOT19JTlRFUkxFQVZFX0lOREVYLCAmYW1wO3NoYWRvdyk7CiAJcHV0X3N3YXBfZGV2aWNlKHNpKTsKIAogCS8qCkBAIC0xMDAzLDYgJiM0MzsxMDc4LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAkgKi8KIAlpZiAoSVNfRVJSKGZvbGlvKSkKIAkJcmV0dXJuIFBUUl9FUlIoZm9saW8pOwomIzQzOwlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKIAogCS8qCiAJICogZm9saW8gaXMgbG9ja2VkLCBhbmQgdGhlIHN3YXBjYWNoZSBpcyBub3cgc2VjdXJlZCBhZ2FpbnN0CkBAIC0xMDI0LDcgJiM0MzsxMTAwLDEyIEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJCWdvdG8gb3V0OwogCX0KIAotCXhhX2VyYXNlKHRyZWUsIG9mZnNldCk7CiYjNDM7CS8qCiYjNDM7CSAqIEEgc2xvdCB3aXRoIG5vIHNoYWRvdyBhbHJlYWR5IHJlYWRzIGJhY2sgYXMgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVzoKJiM0MzsJICogdGhlIHN3YXAgdGFibGUgbWFya3MgYSBzd2FwcGVkIG91dCBzbG90IHdpdGggeGFfbWtfdmFsdWUoMCkgYW5kIGhvbGRzCiYjNDM7CSAqIHRoZSBzaGFkb3csIHdoZW4gdGhlcmUgaXMgb25lLCBpbiB0aGF0IHNhbWUgdmFsdWUuCiYjNDM7CSAqLwomIzQzOwl4YV9zdG9yZSh0cmVlLCBvZmZzZXQsIHNoYWRvdywgR0ZQX0tFUk5FTCk7CiAKIAljb3VudF92bV9ldmVudChaU1dQV0IpOwogCWlmIChlbnRyeS0mZ3Q7b2JqY2cpCkBAIC0xMDQ0LDcgJiM0MzsxMTI1LDE1IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAKIG91dDoKIAlpZiAocmV0KSB7Ci0JCXN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgYWxsb2NhdGlvbiBhYm92ZSBvdmVyd3JvdGUgdGhlIHNsb3QmIzM5O3Mgc2hhZG93IGFuZCBub3RoaW5nCiYjNDM7CQkgKiBoYXMgYmVlbiBwYXJrZWQgZm9yIGl0IHlldCwgc28gcmVzdG9yZSBpdCBhcyB0aGUgZm9saW8gbGVhdmVzCiYjNDM7CQkgKiB0aGUgc3dhcCBjYWNoZSwgb3IgdGhlIGV2aWN0aW9uIGl0IHJlY29yZHMgaXMgbG9zdC4KJiM0MzsJCSAqLwomIzQzOwkJY2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhzd3BlbnRyeSksIG9mZnNldCk7CiYjNDM7CQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dwZW50cnksIHNoYWRvdyk7CiYjNDM7CQlzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTsKJiM0MzsJCWZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7CiAJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAJfQogCWZvbGlvX3B1dChmb2xpbyk7CkBAIC0xNDg3LDYgJiM0MzsxNTc2LDE3IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbykKIAlWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7CiAJVk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpOwogCiYjNDM7CS8qCiYjNDM7CSAqIEEgd3JpdGViYWNrIGJ1ZmZlciB3aG9zZSBJTyBmYWlsZWQgaXMgcmVkaXJ0aWVkIGFuZCBsZWZ0IGluIHRoZQomIzQzOwkgKiBzd2FwIGNhY2hlLCBzbyByZWNsYWltIHdyaXRlcyBpdCBvdXQgYWdhaW4uIFdyaXRlYmFjayBhbHJlYWR5CiYjNDM7CSAqIGRlY2lkZWQgdGhpcyBkYXRhIGJlbG9uZ3Mgb24gZGlzaywgc28gc2VuZCBpdCB0aGVyZSBpbnN0ZWFkIG9mCiYjNDM7CSAqIGNvbXByZXNzaW5nIGl0IGJhY2sgaW50byB6c3dhcC4gVGhpcyBhbHNvIGxlYXZlcyB0aGUgc2hhZG93CiYjNDM7CSAqIHBhcmtlZCBmb3IgdGhlIGJ1ZmZlciBpbiBwbGFjZSwgc28gaXQgaXMgc3RpbGwgcmVzdG9yZWQgaW50bwomIzQzOwkgKiB0aGUgc2xvdCBvbmNlIHRoZSBmb2xpbyBsZWF2ZXMgdGhlIHN3YXAgY2FjaGUuCiYjNDM7CSAqLwomIzQzOwlpZiAoenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihmb2xpbykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJaWYgKCF6c3dhcF9lbmFibGVkKQogCQlnb3RvIGNoZWNrX29sZDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODQyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCwgZ2l2ZW4gaXRzIHRvdWNoIHBvaW50cyB3aXRoaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtbS8pLCBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGZ1bmRhbWVudGFsIGNoYW5nZXMgaGVyZSwgc28gd2UgbmVlZCB0byBiZSB0aG9yb3VnaC4KCkZpcnN0LCBJIHNlZSB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2Yga2V5IGZpbGVzOiBgaW5jbHVkZS9saW51eC96c3dhcC5oYCwgYG1tL2ludGVybmFsLmhgLCBgbW0vbWVtb3J5LmNgLCBgbW0vc2htZW0uY2AsIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBmaWxlLmNgLCBgbW0vdm1zY2FuLmNgLCBgbW0vd29ya2luZ3NldC5jYCwgYW5kIGBtbS96c3dhcC5jYC4gQSBzaWduaWZpY2FudCBvdmVybGFwIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzcGFjZSBtZWFucyB0aGlzIHBhdGNoIGlzIGludGVyZXN0aW5nIGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nICp3aGF0KiBzcGVjaWZpY2FsbHkgaGFzIGNoYW5nZWQuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIHpzd2FwLCBzd2FwIGNhY2hlIGJlaGF2aW9yLCB3b3JraW5nc2V0IHJlZmF1bHQgdHJhY2tpbmcsIGFuZCBzd2FwLWluIGxvZ2ljIHdpdGhpbiBgZG9fc3dhcF9wYWdlYCBhbmQgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGFuZCB0aGUgd3JpdGViYWNrIGluIHpzd2FwLiBUaGVzZSBhcmUgYWxsIGNvcmUgZnVuY3Rpb25hbGl0aWVzLCBhbmQgYW55IHN1YnRsZSBjaGFuZ2UgaW4gdGhlc2UgYXJlYXMgY291bGQgYmUgYSBwb3RlbnRpYWwgYnVnIHdhaXRpbmcgdG8gYmUgZm91bmQuCgpOb3csIGxldCYjMzk7cyBleGFtaW5lIHRoZSBtb2RpZmllZCBsb2dpYyBpbiBkZXRhaWw6IFRoZSBpbnRyb2R1Y2VkL21vZGlmaWVkIGZ1bmN0aW9ucywgbGlrZSBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCwgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCwgYF9fcmVtb3ZlX21hcHBpbmdgLCB0aGUgaGFuZGxpbmcgb2Ygc2hhZG93cywgd3JpdGViYWNrIGNoYW5nZXMuIFRoaXMgY2xlYXJseSBzaG93cyBzdWJzdGFudGlhbCBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGVyZSYjMzk7cyBhIGxvdCBvZiBwb3RlbnRpYWwgZm9yIHN5emthbGxlciB0byB1bmNvdmVyIHVuZXhwZWN0ZWQgc3RhdGVzIG9yIGludGVyYWN0aW9ucyBoZXJlLgoKUmVnYXJkaW5nICYjMzQ7cnVsZXMsJiMzNDsgSSBzZWUgdGhhdCB0aGlzIHBhdGNoIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGV4ZWN1dGlvbi4gVGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgZmxhZyBpcyBzZXQgdG8gVFJVRSwgYXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgY29yZSBzdWJzeXN0ZW1zIHdpdGggbG9naWMgbW9kaWZpY2F0aW9ucyBpbiB0aGUgd29ya2luZ3NldCBsaWZlY3ljbGUgYW5kIHpzd2FwIHdyaXRlYmFjayBoYW5kbGluZy4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuCgpOZXh0IHN0ZXA6IEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoYXQgc3BlY2lmaWMgS2NvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZCB0byBlbmFibGUgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHksIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBaU1dBUC4gSSYjMzk7bGwgdXNlIGdyZXBwZXIgb3IgZmlsZSByZWFkaW5nIHRvIGxvb2sgZm9yIFpTV0FQIGFuZCByZWxhdGVkIGNvbmZpZ3MgdG8gZW5zdXJlIHN5emthbGxlciBjYW4gcmVhY2ggYWxsIGFmZmVjdGVkIGNvZGUgcGF0aHMuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBkZWZpbmUgdGhlIGNvbmZpZ3VyYXRpb25zIG5lY2Vzc2FyeSB0byBhY2N1cmF0ZWx5IGZ1enogdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxuLS1cbm1tL0tjb25maWctMjEtXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxubW0vS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMzQtXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctNDQtXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTc2LVxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcbm1tL0tjb25maWctNzgtXHRib29sIFwmIzM0O0RlZmxhdGVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgyLVxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xubW0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7TFpPXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OC1cbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcbm1tL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQtXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XG5tbS9LY29uZmlnLTk2LVx0Ym9vbCBcJiMzNDtMWjRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwMC1cbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcbm1tL0tjb25maWctMTAyLVx0Ym9vbCBcJiMzNDtMWjRIQ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTA2LVxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXG5tbS9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxubW0vS2NvbmZpZy0xMTMtXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MDkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBaU1dBUCBEZXBlbmRlbmNpZXMgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgWlNXQVBgIGNvbmZpZ3VyYXRpb24gYW5kIGl0cyBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgYG1tL0tjb25maWdgIGZpbGUuIEkmIzM5O2xsIGp1bXAgcmlnaHQgdG8gYXJvdW5kIGxpbmUgMjAsIGFzIHRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudC1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRlbmQgdG8gYmUgZ3JvdXBlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3Igb3B0aW9ucyAqbXVzdCogYmUgZW5hYmxlZCBvciBhcmUgcmVxdWlyZWQgYmVmb3JlIGBaU1dBUGAgaXMgZXZlbiBwcmVzZW50ZWQgYXMgYSB2YWxpZCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyB3aWxsIHNhdmUgbWUgdGltZSBkZWJ1Z2dpbmcgZG93biB0aGUgbGluZTsgdGhlcmUmIzM5O3Mgbm8gcG9pbnQgY2hlY2tpbmcgKndoeSogWlNXQVAgaXMgZGlzYWJsZWQgd2l0aG91dCB2ZXJpZnlpbmcgaXRzIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBsb29raW5nIGZvciBkaXJlY3QgZGVwZW5kZW5jaWVzLCBsaWtlIGBFWFBFUklNRU5UQUxgLCBvciBwb3RlbnRpYWxseSBpbmRpcmVjdCBvbmVzIHRocm91Z2ggb3RoZXIgZmVhdHVyZSBvcHRpb25zIHRoYXQgbXVzdCBiZSBhY3RpdmUgYmVmb3JlIHRoZSBgWlNXQVBgIG9wdGlvbiBpcyBwcmVzZW50LiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgaW52b2x2ZSBgYm9vbGAgb3IgYHRyaXN0YXRlYCBvcHRpb25zIGFuZCBzb21lIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdG1lbnUgXCYjMzQ7TWVtb3J5IE1hbmFnZW1lbnQgb3B0aW9uc1wmIzM0O1xuICAgNDpcdFxuICAgNTpcdCNcbiAgIDY6XHQjIEZvciBzb21lIHJlYXNvbiBtaWNyb2JsYXplIGFuZCBuaW9zMiBoYXJkIGNvZGUgU1dBUD1uLiAgSG9wZWZ1bGx5IHdlIGNhblxuICAgNzpcdCMgYWRkIHByb3BlciBTV0FQIHN1cHBvcnQgdG8gdGhlbSwgaW4gd2hpY2ggY2FzZSB0aGlzIGNhbiBiZSByZW1vdmUuXG4gICA4Olx0I1xuICAgOTpcdGNvbmZpZyBBUkNIX05PX1NXQVBcbiAgMTA6XHRcdGJvb2xcbiAgMTE6XHRcbiAgMTI6XHRtZW51Y29uZmlnIFNXQVBcbiAgMTM6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXCYjMzQ7XG4gIDE0Olx0XHRkZXBlbmRzIG9uIE1NVSBcdTAwMjZcdTAwMjYgQkxPQ0sgXHUwMDI2XHUwMDI2ICFBUkNIX05PX1NXQVBcbiAgMTU6XHRcdGRlZmF1bHQgeVxuICAxNjpcdFx0aGVscFxuICAxNzpcdFx0ICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNob29zZSB3aGV0aGVyIHlvdSB3YW50IHRvIGhhdmUgc3VwcG9ydFxuICAxODpcdFx0ICBmb3Igc28gY2FsbGVkIHN3YXAgZGV2aWNlcyBvciBzd2FwIGZpbGVzIGluIHlvdXIga2VybmVsIHRoYXQgYXJlXG4gIDE5Olx0XHQgIHVzZWQgdG8gcHJvdmlkZSBtb3JlIHZpcnR1YWwgbWVtb3J5IHRoYW4gdGhlIGFjdHVhbCBSQU0gcHJlc2VudFxuICAyMDpcdFx0ICBpbiB5b3VyIGNvbXB1dGVyLiAgSWYgdW5zdXJlIHNheSBZLlxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBaU1dBUFxuICAyMzpcdFx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIFNXQVBcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9cbiAgMjY6XHRcdHNlbGVjdCBaU01BTExPQ1xuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBBIGxpZ2h0d2VpZ2h0IGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMuICBJdCB0YWtlc1xuICAyOTpcdFx0ICBwYWdlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG9cbiAgMzA6XHRcdCAgY29tcHJlc3MgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFJBTS1iYXNlZCBtZW1vcnkgcG9vbC5cbiAgMzE6XHRcdCAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvbiBzd2FwIGRldmljZSBhbmQsXG4gIDMyOlx0XHQgIGluIHRoZSBjYXNlIHdoZXJlIGRlY29tcHJlc3NpbmcgZnJvbSBSQU0gaXMgZmFzdGVyIHRoYW4gc3dhcCBkZXZpY2VcbiAgMzM6XHRcdCAgcmVhZHMsIGNhbiBhbHNvIGltcHJvdmUgd29ya2xvYWQgcGVyZm9ybWFuY2UuXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbiAgMzY6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gWlNXQVBcbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgSWYgc2VsZWN0ZWQsIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIHdpbGwgYmUgZW5hYmxlZFxuICA0MDpcdFx0ICBhdCBib290LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBkaXNhYmxlZC5cbiAgNDE6XHRcbiAgNDI6XHRcdCAgVGhlIHNlbGVjdGlvbiBtYWRlIGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIGtlcm5lbFxuICA0MzpcdFx0ICBjb21tYW5kIGxpbmUgJiMzOTt6c3dhcC5lbmFibGVkPSYjMzk7IG9wdGlvbi5cbiAgNDQ6XHRcbiAgNDU6XHRjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxuICA0NjpcdFx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4gIDQ3Olx0XHRkZXBlbmRzIG9uIFpTV0FQXG4gIDQ4Olx0XHRkZWZhdWx0IG5cbiAgNDk6XHRcdGhlbHBcbiAgNTA6XHRcdCAgSWYgc2VsZWN0ZWQsIHRoZSB6c3dhcCBzaHJpbmtlciB3aWxsIGJlIGVuYWJsZWQsIGFuZCB0aGUgcGFnZXNcbiAgNTE6XHRcdCAgc3RvcmVkIGluIHRoZSB6c3dhcCBwb29sIHdpbGwgYmVjb21lIGF2YWlsYWJsZSBmb3IgcmVjbGFpbSAoaS5lXG4gIDUyOlx0XHQgIHdyaXR0ZW4gYmFjayB0byB0aGUgYmFja2luZyBzd2FwIGRldmljZSkgb24gbWVtb3J5IHByZXNzdXJlLlxuICA1MzpcdFxuICA1NDpcdFx0ICBUaGlzIG1lYW5zIHRoYXQgenN3YXAgd3JpdGViYWNrIGNvdWxkIGhhcHBlbiBldmVuIGlmIHRoZSBwb29sIGlzXG4gIDU1Olx0XHQgIG5vdCB5ZXQgZnVsbCwgb3IgdGhlIGNncm91cCB6c3dhcCBsaW1pdCBoYXMgbm90IGJlZW4gcmVhY2hlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY1NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIFN3YXAgQ29uZmlndXJhdGlvbiBmb3IgT3B0aW1pemF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHN3YXAgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIGBDT05GSUdfU1dBUGAgYW5kIGBDT05GSUdfWlNXQVBgIGFyZSB0aGUgYmlnIG9uZXMuIE5hdHVyYWxseSwgSSBzaG91bGQgY2hlY2sgd2hldGhlciBgQ09ORklHX1pTV0FQX0RFRkFVTFRfT05gIG9yIGBDT05GSUdfWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAgYXJlIHJlbGV2YW50IGZsYWdzIGhlcmUsIGFsdGhvdWdoIHRoZSBjb3JlIG9mIGl0IHdpbGwgYWx3YXlzIGNlbnRlciBhcm91bmQgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGBaU1dBUGAgYW5kIGBTV0FQYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IG1peCBoZXJlLgoKTm93LCBJIGFsc28gbmVlZCB0byBiZSBtaW5kZnVsIG9mIG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHN3YXAgYmVoYXZpb3IuIEl0JiMzOTtzIHRpbWUgdG8gY29uc2lkZXIgdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwczsgZG9lcyBgTUVNQ0dgLCBgTUVNQ0dfVjFgLCBvciBgTUVNQ0dfU1dBUGAgaGF2ZSBhIHJvbGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24/IEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhlc2UgaW50ZXJhY3QuCgpBbmQgbGFzdGx5LCBJIHNob3VsZCBsb29rIGRpcmVjdGx5IGF0IHRoZSBpbXBsZW1lbnRhdGlvbjsgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBtbS9zd2FwX3N0YXRlLmNgIGZpbGUgYW5kIHBvdGVudGlhbGx5IG90aGVyIGFyZWFzIGZvciBob3cgYG1lbWNnMV9zd2FwaW5gIGlzIGhhbmRsZWQuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19aU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03OT1vYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlOjgwOm9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG5tbS9NYWtlZmlsZS04MS1vYmotJChDT05GSUdfSEFTX0RNQSlcdCYjNDM7PSBkbWFwb29sLm9cbi0tXG5tbS9tZW1jb250cm9sLmM9NTk5PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy02MTUtI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NjE2OiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy02MTctXHRaU1dQSU4sXG4tLVxubW0vbWVtY29udHJvbC5jPTE1OTc9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTYwNy1cdHsgXCYjMzQ7c2htZW1cJiMzNDssXHRcdFx0TlJfU0hNRU1cdFx0XHR9LFxubW0vbWVtY29udHJvbC5jOjE2MDg6I2lmZGVmIENPTkZJR19aU1dBUFxubW0vbWVtY29udHJvbC5jLTE2MDktXHR7IFwmIzM0O3pzd2FwXCYjMzQ7LFx0XHRcdE1FTUNHX1pTV0FQX0JcdFx0XHR9LFxuLS1cbm1tL21lbWNvbnRyb2wuYz00MjY2PW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00Mjc4LVx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgUEFHRV9DT1VOVEVSX01BWCk7XG5tbS9tZW1jb250cm9sLmM6NDI3OTojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS9tZW1jb250cm9sLmMtNDI4MC1cdG1lbWNnLVx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ0Njg9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDQ3NC1cdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlb29tX2dyb3VwLCBmYWxzZSk7XG5tbS9tZW1jb250cm9sLmM6NDQ3NTojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS9tZW1jb250cm9sLmMtNDQ3Ni1cdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlenN3YXBfbWF4LCBQQUdFX0NPVU5URVJfTUFYKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTc0Nj1zdGF0aWMgdm9pZCBfX2luaXQgbWVtY2dfc3RydWN0X2NoZWNrKHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTU3OTktXHRcdFx0XHQgICAgICB2bXN0YXRzKTtcbm1tL21lbWNvbnRyb2wuYzo1ODAwOiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy01ODAxLVx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IG1lbV9jZ3JvdXAsIG1lbWNnX3JlYWRfbW9zdGx5LFxuLS1cbm1tL21lbWNvbnRyb2wuYz02MTE5PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNjE1My1cbm1tL21lbWNvbnRyb2wuYzo2MTU0OiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy02MTU1LS8qKlxuLS1cbm1tL21lbWNvbnRyb2wuYz02MzMxPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHpzd2FwX2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTYzNDktfTtcbm1tL21lbWNvbnRyb2wuYzo2MzUwOiNlbmRpZiAvKiBDT05GSUdfWlNXQVAgKi9cbm1tL21lbWNvbnRyb2wuYy02MzUxLVxubW0vbWVtY29udHJvbC5jPTYzNTI9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNjM2MC0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo2MzYxOiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy02MzYyLVx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgenN3YXBfZmlsZXMpKTtcbi0tXG5tbS92bXN0YXQuYz0xMTk5PWNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xuLS1cbm1tL3Ztc3RhdC5jLTE0NjQtI2VuZGlmXG5tbS92bXN0YXQuYzoxNDY1OiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL3Ztc3RhdC5jLTE0NjYtXHRbSShaU1dQSU4pXVx0XHRcdFx0PSBcJiMzNDt6c3dwaW5cJiMzNDssXG4tLVxubW0venN3YXAuYz04Nj1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpO1xuLS1cbm1tL3pzd2FwLmMtODgtLyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cbm1tL3pzd2FwLmM6ODk6c3RhdGljIERFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19aU1dBUF9ERUZBVUxUX09OLCB6c3dhcF9ldmVyX2VuYWJsZWQpO1xubW0venN3YXAuYzo5MDpzdGF0aWMgYm9vbCB6c3dhcF9lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfWlNXQVBfREVGQVVMVF9PTik7XG5tbS96c3dhcC5jLTkxLXN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxuLS1cbm1tL3pzd2FwLmM9OTc9bW9kdWxlX3BhcmFtX2NiKGVuYWJsZWQsIFx1MDAyNnpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzLCBcdTAwMjZ6c3dhcF9lbmFibGVkLCAwNjQ0KTtcbi0tXG5tbS96c3dhcC5jLTk5LS8qIENyeXB0byBjb21wcmVzc29yIHRvIHVzZSAqL1xubW0venN3YXAuYzoxMDA6c3RhdGljIGNoYXIgKnpzd2FwX2NvbXByZXNzb3IgPSBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUO1xubW0venN3YXAuYy0xMDEtc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICosXG4tLVxubW0venN3YXAuYz0xMjE9c3RhdGljIGJvb2wgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCA9IElTX0VOQUJMRUQoXG5tbS96c3dhcC5jOjEyMjpcdFx0Q09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04pO1xubW0venN3YXAuYy0xMjMtbW9kdWxlX3BhcmFtX25hbWVkKHNocmlua2VyX2VuYWJsZWQsIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQsIGJvb2wsIDA2NDQpO1xuLS1cbm1tL3pzd2FwLmM9MTMwPWJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxubW0venN3YXAuYy0xMzEte1xubW0venN3YXAuYzoxMzI6XHRyZXR1cm4gIXN0YXRpY19icmFuY2hfbWF5YmUoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04sIFx1MDAyNnpzd2FwX2V2ZXJfZW5hYmxlZCk7XG5tbS96c3dhcC5jLTEzMy19XG4tLVxubW0venN3YXAuYz0zNDQ9c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXG4tLVxubW0venN3YXAuYy0zNDYtXHRpZiAoIWNyeXB0b19oYXNfYWNvbXAoenN3YXBfY29tcHJlc3NvciwgMCwgMCkgXHUwMDI2XHUwMDI2XG5tbS96c3dhcC5jOjM0NzpcdCAgICBzdHJjbXAoenN3YXBfY29tcHJlc3NvciwgQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVCkpIHtcbm1tL3pzd2FwLmMtMzQ4LVx0XHRwcl9lcnIoXCYjMzQ7Y29tcHJlc3NvciAlcyBub3QgYXZhaWxhYmxlLCB1c2luZyBkZWZhdWx0ICVzXFxuXCYjMzQ7LFxubW0venN3YXAuYzozNDk6XHRcdCAgICAgICB6c3dhcF9jb21wcmVzc29yLCBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUKTtcbm1tL3pzd2FwLmMtMzUwLVx0XHRwYXJhbV9mcmVlX2NoYXJwKFx1MDAyNnpzd2FwX2NvbXByZXNzb3IpO1xubW0venN3YXAuYzozNTE6XHRcdHpzd2FwX2NvbXByZXNzb3IgPSBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUO1xubW0venN3YXAuYy0zNTItXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MDgKCQkJCQkJCW91dHB1dDogMTAyCgkJCQkJCQl0aG91Z2h0czogMTA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgd2UgbmVlZCB0byBmb2N1cyBvbiBmb3IgZnV6emluZyBhbmQgdGVzdGluZy4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGVpdGhlciBuZXcgb3IgbW9kaWZpZWQuIEkmIzM5O3ZlIGdvdCBhIGxpc3QgaGVyZToKCjEuICBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmA6IEEgbmV3IGZ1bmN0aW9uIHdpdGhpbiBgbW0venN3YXAuY2AgdGhhdCBjaGVja3MgaWYgYSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIuIFNvdW5kcyBzcGVjaWZpYyB0byB6c3dhcCBsb2dpYy4KMi4gIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgOiBBbm90aGVyIG5ldyB6c3dhcCBmdW5jdGlvbiBpbiBgbW0venN3YXAuY2AsIGhhbmRsaW5nIHRoZSByZXRyaWV2YWwgYW5kIGNsZWFyaW5nIG9mIHBhcmtlZCBzaGFkb3dzLiBEZWZpbml0ZWx5IHpzd2FwLXNwZWNpZmljLgozLiAgYHpzd2FwX3dyaXRlYmFja19lbnRyeWA6IEEgKm1vZGlmaWVkKiBzdGF0aWMgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBob3cgaXQmIzM5O3MgY2hhbmdlZCwgYnV0IHRoZSB6c3dhcCBjb250ZXh0IGlzIGNsZWFyLiBUaGUga2V5IGlzIGluIHRoZSBwYXJraW5nIG9mIHRoZSBzaGFkb3dzIGFuZCBlcnJvciBoYW5kbGluZy4KNC4gIGB6c3dhcF9zdG9yZWA6ICBUaGlzIGZ1bmN0aW9uIGluIGBtbS96c3dhcC5jYCBoYXMgYmVlbiBtb2RpZmllZCB0byBpbmNsdWRlIGEgY2hlY2sgdXNpbmcgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgLCBzdWdnZXN0aW5nIGEgY2hhbmdlIGluIGl0cyBjb3JlIGxvZ2ljIGNvbmNlcm5pbmcgenN3YXAmIzM5O3Mgd3JpdGViYWNrIGJlaGF2aW9yLgo1LiAgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGA6IEEgbmV3IGZ1bmN0aW9uIHdpdGhpbiBgbW0vd29ya2luZ3NldC5jYC4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHJlZmF1bHRpbmcgb2YgZm9saW9zIGFscmVhZHkgbWFuYWdlZCBieSB0aGUgTFJVLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhcyBJIGtub3cgdGhpcyBsb2dpYy4KNi4gIGB3b3JraW5nc2V0X3JlZmF1bHRgOiBNb2RpZmllZCBpbiBgbW0vd29ya2luZ3NldC5jYCwgYnV0IGl0IGRlbGVnYXRlcyB0byBhIG5ldyBmdW5jdGlvbi4KNy4gIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gOiBUaGlzIG9uZSBoYXMgYSBtb2RpZmllZCBzaWduYXR1cmUsIHNwZWNpZmljYWxseSBpbiBgbW0vc3dhcF9zdGF0ZS5jYCwgd2hpY2gsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN3YXAgY2FjaGUsIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBmb3IgaG93IGZvbGlvcyBnZXQgYWxsb2NhdGVkLgo4LiAgYHN3YXBpbl9zeW5jYDogVGhpcyBmdW5jdGlvbiBsb29rcyBwZXJ0aW5lbnQgdG8gdGhlIG92ZXJhbGwgZmVhdHVyZSBsb2dpYy4KCkkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggYGRvX3N3YXBfcGFnZWAuIEl0JiMzOTtzIGEgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBzd2FwIGVudHJpZXMsIGFuZCB3aGlsZSBpdCYjMzk7cyBtb2RpZmllZCwgaXQmIzM5O3MgYSAqdmVyeSogZ2VuZXJpYyBmdW5jdGlvbi4gV2UgbmVlZCB0byBhdm9pZCBsaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCBieSBuZWFybHkgZXZlcnkgcHJvZ3JhbS4gTGlzdGluZyBpdCB3b3VsZCBkaWx1dGUgdGhlIGZ1enppbmcgZWZmb3J0LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgdGhlc2Ugb3RoZXIgZnVuY3Rpb25zIChgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgYHpzd2FwX3N0b3JlYCwgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAsIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gKSBhcmUgYmV0dGVyIGNob2ljZXMgYXMgZm9jdXMgc3ltYm9scy4gVGhleSBhcHBlYXIgbW9yZSBzcGVjaWZpYyB0byB0aGUgYWx0ZXJlZCBmZWF0dXJlIGxvZ2ljLgoKU28sIGxldCYjMzk7cyBzb2xpZGlmeSB0aGUgY2FuZGlkYXRlIGZvY3VzIHN5bWJvbHMuIEkgdGhpbmsgdGhlIGtleSBvbmVzIGFyZToKCiogICBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAKKiAgIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgCiogICBgenN3YXBfd3JpdGViYWNrX2VudHJ5YAoqICAgYHpzd2FwX3N0b3JlYAoqICAgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAKKiAgIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gCiogICBgc3dhcGluX3N5bmNgCiogICBgc2htZW1fc3dhcGluX2ZvbGlvYAoKTm93LCBsZXQmIzM5O3MgdXNlIGBncmVwcGVyYCAob3Igc29tZSBvdGhlciB0b29sKSB0byBlbnN1cmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBkZWZpbmVkIGluIHRoZSBrZXJuZWwgYW5kIGFyZW4mIzM5O3QganVzdCBzdGF0aWMtaW5saW5lZCwgc28gdGhleSBhcmUgc3VpdGFibGUgc3ltYm9scyBmb3IgZm9jdXNlZCBmdXp6aW5nIGFuZCB0ZXN0aW5nLiBJIHdpbGwgY2hlY2sgdGhlIGRlZmluaXRpb25zIG9mIGVhY2ggc3ltYm9sIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xihib29sfHZvaWR8aW50fHN0cnVjdCBmb2xpbyBcXCopID9cXCo/KHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJ8enN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzfHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZHx6c3dhcF93cml0ZWJhY2tfZW50cnl8enN3YXBfc3RvcmV8X19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvfHNobWVtX3N3YXBpbl9mb2xpbykmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD0zMz12b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpO1xubW0vaW50ZXJuYWwuaDozNDp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpO1xubW0vaW50ZXJuYWwuaC0zNS12b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi0tXG5tbS9zd2FwLmg9MzE0PXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9zd2FwLmg6MzE1OnN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9zd2FwLmgtMzE2LVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NDE5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy01MjgtICovXG5tbS9zd2FwX3N0YXRlLmM6NTI5OnN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbm1tL3N3YXBfc3RhdGUuYy01MzAtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL3dvcmtpbmdzZXQuYz02MDY9dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuLS1cbm1tL3dvcmtpbmdzZXQuYy02MjUtICovXG5tbS93b3JraW5nc2V0LmM6NjI2OnZvaWQgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbm1tL3dvcmtpbmdzZXQuYy02Mjcte1xuLS1cbm1tL3pzd2FwLmM9OTEzPXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTk3Ny0gKi9cbm1tL3pzd2FwLmM6OTc4OmJvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy05Nzkte1xuLS1cbm1tL3pzd2FwLmMtMTAxMC0gKi9cbm1tL3pzd2FwLmM6MTAxMTp2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3pzd2FwLmMtMTAxMi17XG4tLVxubW0venN3YXAuYz0xNDg2PXN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgbG9uZyBpbmRleCxcbi0tXG5tbS96c3dhcC5jLTE1NjUtXG5tbS96c3dhcC5jOjE1NjY6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNTY3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyOTYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOgoKKipBbmFseXppbmcgWnN3YXAgYW5kIFNoYXJlZCBNZW1vcnkgU3dhcCBPcGVyYXRpb25zKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGtlcm5lbCBjb2RlIHJlbGF0ZWQgdG8genN3YXAgYW5kIHNoYXJlZCBtZW1vcnkgc3dhcCBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBhbmQgYHNobWVtX3N3YXBpbl9mb2xpb2AuIFRoZXNlIGZ1bmN0aW9ucyByZXNpZGUgaW4gYG1tL3pzd2FwLmNgIGFuZCBgbW0vc2htZW0uY2AgcmVzcGVjdGl2ZWx5LiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHpzd2FwIGhhbmRsZXMgdGhlIHdyaXRpbmcgYmFjayBvZiBjb21wcmVzc2VkIGRhdGEgYW5kIGhvdyBzaGFyZWQgbWVtb3J5IHBhZ2VzIGFyZSBzd2FwcGVkIGluLiBUaGlzIHdpbGwgbGlrZWx5IGludm9sdmUgdHJhY2luZyB0aGVpciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBwYWdlIGNhY2hlLCBzd2FwIGNhY2hlLCBhbmQgdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlcy4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB3aGVyZSBvcHRpbWl6YXRpb24gbWlnaHQgYmUgcG9zc2libGUsIGFuZCBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrIHVuZGVyIGRpZmZlcmVudCBtZW1vcnkgcHJlc3N1cmUgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF93cml0ZWJhY2tfZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz0xMDExPXZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtMTA0OC0gKi9cbm1tL3pzd2FwLmM6MTA0OTpzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxubW0venN3YXAuYy0xMDUwLVx0XHRcdFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxuLS1cbm1tL3pzd2FwLmM9MTE2OD1zdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxuLS1cbm1tL3pzd2FwLmMtMTE5MS1cdCAqIDEuIFdlIGV4dHJhY3QgdGhlIHN3cF9lbnRyeV90IHRvIHRoZSBzdGFjaywgYWxsb3dpbmdcbm1tL3pzd2FwLmM6MTE5MjpcdCAqICAgIHpzd2FwX3dyaXRlYmFja19lbnRyeSgpIHRvIHBpbiB0aGUgc3dhcCBlbnRyeSBhbmRcbm1tL3pzd2FwLmMtMTE5My1cdCAqICAgIHRoZW4gdmFsaWRhdGUgdGhlIHpzd2FwIGVudHJ5IGFnYWluc3QgdGhhdCBzd2FwIGVudHJ5JiMzOTtzXG4tLVxubW0venN3YXAuYy0xMjI2LVxubW0venN3YXAuYzoxMjI3Olx0d3JpdGViYWNrX3Jlc3VsdCA9IHpzd2FwX3dyaXRlYmFja19lbnRyeShlbnRyeSwgc3dwZW50cnkpO1xubW0venN3YXAuYy0xMjI4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg3NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNobWVtX3N3YXBpbl9mb2xpb2AqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGBzaG1lbV9zd2FwaW5fZm9saW9gLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBjcnVjaWFsIGZvciB0aGUgU2hhcmVkIE1lbW9yeSAoU0hNRU0pIHN1YnN5c3RlbS4gSSYjMzk7bSBndWVzc2luZyBpdCBoYW5kbGVzIHRoZSBwcm9jZXNzIG9mIGJyaW5naW5nIGEgZm9saW8gKGEgcGFnZSBvciBncm91cCBvZiBwYWdlcywgbGlrZWx5KSBiYWNrIGludG8gcGh5c2ljYWwgbWVtb3J5IGZyb20gc3dhcC4gQ29uc2lkZXJpbmcgaXRzIG5hbWUsICYjMzQ7c3dhcGluJiMzNDsgaXMgYSBwcmV0dHkgZ29vZCBjbHVlLCBhcyBpcyAmIzM0O2ZvbGlvJiMzNDsuCgpJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYW5kIHRoZSAqaG93Ki4gV2h5IGlzIHRoaXMgZm9saW8gYmVpbmcgc3dhcHBlZCBpbj8gSXMgaXQgZHVlIHRvIGEgcGFnZSBmYXVsdCwgYSBwcm9jZXNzIHJlc3VtaW5nIGFmdGVyIGJlaW5nIHN3YXBwZWQgb3V0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNvbnRleHQgb2YgaXRzIGludm9jYXRpb24gaXMgZ29pbmcgdG8gYmUgaW5jcmVkaWJseSBpbXBvcnRhbnQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBzZWUgdGhlIGNhbGxpbmcgcGF0aHMuCgpBbmQgdGhlICYjMzQ7aG93JiMzNDsgaW52b2x2ZXMgYSBzZXJpZXMgb2YgcXVlc3Rpb25zOiBXaGF0IHJlc291cmNlcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQ/IElzIGl0IGxvY2tpbmcgY3JpdGljYWwgc2VjdGlvbnM/IEhvdyBpcyB0aGUgZm9saW8mIzM5O3Mgc3RhdGUgbWFuYWdlZCBkdXJpbmcgdGhlIHN3YXAtaW4gcHJvY2Vzcz8gV2hhdCBhYm91dCBlcnJvciBoYW5kbGluZz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yPyBJIHN1c3BlY3QgaXQgbWF5IGJlIGludGVyYWN0aW5nIHdpdGggdGhlIHBhZ2UgY2FjaGUsIHRoZSBzd2FwIGNhY2hlLCBhbmQgdGhlIHBoeXNpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMuIEkgYW50aWNpcGF0ZSBhIGxvdCBvZiBwb2ludGVyIGNoYXNpbmcgYW5kIHN0YXRlIHRyYW5zaXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBmb3IgYW55IGNhbGxzIHRvIGZ1bmN0aW9ucyBsaWtlIGBzd2FwX3JlYWRwYWdlKClgLCBgZm9saW9fbWlncmF0ZSgpYCwgYGZvbGlvX3B1dGJhY2soKWAsIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeSByZWNsYWltIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVtb3J5IGJhcnJpZXJzIHVzZWQgdG8gZW5zdXJlIHByb3BlciBvcmRlcmluZywgZXNwZWNpYWxseSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG11bHRpcGxlIENQVXMgYWNjZXNzaW5nIHRoZSBzYW1lIG1lbW9yeSByZWdpb24uIExldCYjMzk7cyBzZWUgaG93IG11Y2ggb2YgdGhpcyBwbGF5cyBvdXQgaW4gdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX3N3YXBpbl9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTE1Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV9kZWZhdWx0X21heF9pbm9kZXModm9pZClcbi0tXG5tbS9zaG1lbS5jLTE2MC1cbm1tL3NobWVtLmM6MTYxOnN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG5tbS9zaG1lbS5jLTE2Mi1cdFx0XHRzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGVudW0gc2dwX3R5cGUgc2dwLCBnZnBfdCBnZnAsXG4tLVxubW0vc2htZW0uYz0xNjk1PXN0YXRpYyBpbnQgc2htZW1fdW51c2Vfc3dhcF9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vc2htZW0uYy0xNzA1LVxubW0vc2htZW0uYzoxNzA2Olx0XHRlcnJvciA9IHNobWVtX3N3YXBpbl9mb2xpbyhpbm9kZSwgaW5kaWNlc1tpXSwgXHUwMDI2Zm9saW8sIFNHUF9DQUNIRSxcbm1tL3NobWVtLmMtMTcwNy1cdFx0XHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSwgTlVMTCwgTlVMTCk7XG4tLVxubW0vc2htZW0uYz0yMzc1PXN0YXRpYyBpbnQgc2htZW1fc3BsaXRfbGFyZ2VfZW50cnkoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTI0NTItICovXG5tbS9zaG1lbS5jOjI0NTM6c3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbm1tL3NobWVtLmMtMjQ1NC1cdFx0XHQgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgZW51bSBzZ3BfdHlwZSBzZ3AsXG4tLVxubW0vc2htZW0uYz0yNjMyPXN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtMjY2NC1cdGlmICh4YV9pc192YWx1ZShmb2xpbykpIHtcbm1tL3NobWVtLmM6MjY2NTpcdFx0ZXJyb3IgPSBzaG1lbV9zd2FwaW5fZm9saW8oaW5vZGUsIGluZGV4LCBcdTAwMjZmb2xpbyxcbm1tL3NobWVtLmMtMjY2Ni1cdFx0XHRcdFx0ICAgc2dwLCBnZnAsIHZtZiwgZmF1bHRfdHlwZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzUyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGZvY3VzaW5nIG9uIGBzd2FwaW5fc3luY2AgYW5kIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gOgoKKipJbml0aWFsIERpdmUgaW50byBTd2FwIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUgY29yZSBzd2FwIG1lY2hhbmlzbS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgc3dhcGluX3N5bmNgIGFuZCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gVGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGZ1bmRhbWVudGFsIHRvIHRoZSBwcm9jZXNzIG9mIGJyaW5naW5nIGRhdGEgYmFjayBpbnRvIFJBTSBmcm9tIHRoZSBzd2FwIHBhcnRpdGlvbi4KCk15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGxpa2VseSBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIG9mIGZvbGlvIHN0cnVjdHVyZXMgYW5kIHByb2JhYmx5IGludGVyYWN0cyB3aXRoIHRoZSBzd2FwIGNhY2hlLiBJJiMzOTttIGd1ZXNzaW5nIGl0IG1pZ2h0IGludm9sdmUgdGhpbmdzIGxpa2UgdHJhY2tpbmcgcGFnZSBtZXRhZGF0YSwgYW5kIG1hbmFnaW5nIHRoZSBtYXBwaW5nIG9mIHN3YXAgZW50cmllcyB0byBwaHlzaWNhbCBtZW1vcnkuIGBzd2FwaW5fc3luY2Agb24gdGhlIG90aGVyIGhhbmQsIHNob3VsZCBiZSByZXNwb25zaWJsZSBmb3Igc3luY2hyb25pemluZyB0aGUgZGF0YSBiZWluZyByZWFkIGluIGZyb20gc3dhcC4gSSB3aWxsIHByb2JhYmx5IGZpbmQgaXQgaGFuZGxpbmcgdGhpbmdzIGxpa2UgbG9ja2luZywgcmVhZGluZyBmcm9tIHRoZSBkaXNrLCBhbmQgdXBkYXRpbmcgcGFnZSB0YWJsZXMuCkkmIzM5O2xsIGJldCBJJiMzOTtsbCBmaW5kIGEgcmFjZSBjb25kaXRpb24gb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVjayB3aXRoIGBzd2FwaW5fc3luY2AgaWYgdGhlcmUgaXMgY29udGVudGlvbiBhY2Nlc3NpbmcgdGhlIHN3YXAgcGFydGl0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwaW5fc3luYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz00ODQ0PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ5MzYtXHRcdGlmIChkYXRhX3JhY2Uoc2ktXHUwMDNlZmxhZ3MgXHUwMDI2IFNXUF9TWU5DSFJPTk9VU19JTykpXG5tbS9tZW1vcnkuYzo0OTM3Olx0XHRcdGZvbGlvID0gc3dhcGluX3N5bmMoZW50cnksIEdGUF9ISUdIVVNFUl9NT1ZBQkxFLFxubW0vbWVtb3J5LmMtNDkzOC1cdFx0XHRcdFx0ICAgIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHZtZikgfCBCSVQoMCksXG4tLVxubW0vc2htZW0uYz0yMjQyPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBfYWxsb2NfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9zaG1lbS5jLTIyNTYtXHRtcG9sID0gc2htZW1fZ2V0X3Bnb2ZmX3BvbGljeShpbmZvLCBpbmRleCwgb3JkZXIsIFx1MDAyNmlseCk7XG5tbS9zaG1lbS5jOjIyNTc6XHRmb2xpbyA9IHN3YXBpbl9zeW5jKGVudHJ5LCBnZnAsIEJJVChvcmRlciksIHZtZiwgbXBvbCwgaWx4KTtcbm1tL3NobWVtLmMtMjI1OC1cdG1wb2xfY29uZF9wdXQobXBvbCk7XG4tLVxubW0vc3dhcC5oPTMzMj1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsXG5tbS9zd2FwLmgtMzMzLVx0XHRzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5tbS9zd2FwLmg6MzM0OnN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxubW0vc3dhcC5oLTMzNS1cdFx0XHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xuLS1cbm1tL3N3YXAuaD00MDg9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3Qgc3dwLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9zd2FwLmgtNDEzLVxubW0vc3dhcC5oOjQxNDpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoXG5tbS9zd2FwLmgtNDE1LVx0c3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxuLS1cbm1tL3N3YXBfc3RhdGUuYz02NTg9c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LFxuLS1cbm1tL3N3YXBfc3RhdGUuYy02ODktLyoqXG5tbS9zd2FwX3N0YXRlLmM6NjkwOiAqIHN3YXBpbl9zeW5jIC0gc3dhcC1pbiBvbmUgb3IgbXVsdGlwbGUgZW50cmllcyBza2lwcGluZyByZWFkYWhlYWQuXG5tbS9zd2FwX3N0YXRlLmMtNjkxLSAqIEBlbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxuLS1cbm1tL3N3YXBfc3RhdGUuYy03MDQtICovXG5tbS9zd2FwX3N0YXRlLmM6NzA1OnN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG5tbS9zd2FwX3N0YXRlLmMtNzA2LVx0XHRcdCAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTE6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3NDUKCQkJCQkJCW91dHB1dDogMjEwCgkJCQkJCQl0aG91Z2h0czogMzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgZnV6emluZyB0YXJnZXRzIGZvciB0aGlzIHBhdGNoLiBJJiMzOTt2ZSBwaW5wb2ludGVkIGEgc29saWQgc2V0IG9mIGZvY3VzIHN5bWJvbHM6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCBgenN3YXBfc3RvcmVgLCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCwgYW5kIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBJIGFsc28gbmVlZCB0byBrZWVwIGBzd2FwaW5fc3luY2AgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgIGluIG1pbmQsIGFsdGhvdWdoIGB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRgIHNlZW1zIHRvIGJlIHRoZSBtb3JlIHNwZWNpZmljIGZ1bmN0aW9uIGhlcmUuIFRoZSBjb25maWd1cmF0aW9ucyBJJiMzOTttIHdvcmtpbmcgd2l0aCBhcmUgYFNXQVBgIGFuZCBgWlNXQVBgLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgY2xlYXIgdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGRlZXAgaW50byBtZW1vcnkgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IHRoZSB3b3JraW5nc2V0IHJlZmF1bHQgdHJhY2tpbmcgYW5kIGhvdyB6c3dhcCB3cml0ZWJhY2sgYW5kIHN3YXAtaW4gb3BlcmF0aW9ucyBoYW5kbGUgdGhlc2Ugc2hhZG93IHBhZ2VzLiBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIG5ldyBoZWxwZXIgZnVuY3Rpb25zLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIGZsYWcsIGFuZCB0aGUgY2hhbmdlcyB0byBzd2FwIGNhY2hlIGFsbG9jYXRpb24gYW5kIHdyaXRlYmFjayBwYXRocyBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBUaGlzIHRvdWNoZXMgY29yZSBtbSwgd2hpY2ggbWVhbnMgdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHJhY2VzLCBsZWFrcywgb3IgZXZlbiBhc3NlcnRpb24gZmFpbHVyZXMgaXMgdGhlcmUuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIHdhcnJhbnQgaW50ZW5zaXZlIGZ1enppbmcuIFNlZW1zIGxpa2UgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IGNvcnJlY3RseS4gTGV0JiMzOTtzIGdldCB0aGUgdG9vbCBjYWxsIGdvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXImIzM0OywKICAgICYjMzQ7enN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzJiMzNDssCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19lbnRyeSYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQmIzM0OywKICAgICYjMzQ7X19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHpzd2FwIHN1YnN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IHJlZmF1bHQgdHJhY2tpbmcgYW5kIHNoYWRvdyBlbnRyeSBwcmVzZXJ2YXRpb24gYWNyb3NzIHpzd2FwIHdyaXRlYmFjayBhbmQgc3dhcC1pbiBwYXRocy4gSXQgaW50cm9kdWNlcyBuZXcgaGVscGVycyAoenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciwgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzLCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQpIGFuZCBtb2RpZmllcyBzd2FwIGNhY2hlIGFsbG9jYXRpb24gYW5kIHdyaXRlYmFjayBoYW5kbGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gZGV0ZWN0IHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXImIzM0OywKICAgICYjMzQ7enN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzJiMzNDssCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19lbnRyeSYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQmIzM0OywKICAgICYjMzQ7X19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHpzd2FwIHN1YnN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IHJlZmF1bHQgdHJhY2tpbmcgYW5kIHNoYWRvdyBlbnRyeSBwcmVzZXJ2YXRpb24gYWNyb3NzIHpzd2FwIHdyaXRlYmFjayBhbmQgc3dhcC1pbiBwYXRocy4gSXQgaW50cm9kdWNlcyBuZXcgaGVscGVycyAoenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciwgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzLCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQpIGFuZCBtb2RpZmllcyBzd2FwIGNhY2hlIGFsbG9jYXRpb24gYW5kIHdyaXRlYmFjayBoYW5kbGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gZGV0ZWN0IHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTE6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMToxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0vIChzd2FwIGNhY2hlLCB6c3dhcCB3cml0ZWJhY2ssIGFuZCB3b3JraW5nc2V0IHJlZmF1bHQgdHJhY2tpbmcgZm9yIExSVS1tYW5hZ2VkIGZvbGlvcykuIEl0IGFkanVzdHMgaG93IHNoYWRvdyBlbnRyaWVzIGFyZSBwYXJrZWQgaW4gdGhlIHpzd2FwIHRyZWUgZHVyaW5nIHdyaXRlYmFjayBhbmQgcmVzdG9yZWQvcmVmYXVsdGVkIGR1cmluZyBzd2FwaW4uXG5cbjEuIE5vIGtlcm5lbC10by11c2VyIGluZm8tbGVhayByaXNrOiBObyBkYXRhIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGxzLCBvciBCUEYgYnVmZmVycykuXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogQWxsIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBzaGFkb3dgLCBgc2hhZG93X3BhcmtlZGAsIGFuZCBsb29wIGluZGljZXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgYXNzaWduZWQgYnkgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHBvaW50ZXJzL3ZhbHVlcy5cbjMuIEJ1ZyBhcHBsaWNhYmlsaXR5OiBQb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGludm9sdmUgcGFnZSBsb2NraW5nLCByYWNlIGNvbmRpdGlvbnMgaW4gc3dhcGNhY2hlL0xSVSBtYW5pcHVsYXRpb24sIHJlZmNvdW50aW5nLCBvciBpbnZhbGlkIHhhcnJheSBvcGVyYXRpb25zLiBUaGVzZSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgKEtBU0FOLCBMT0NLREVQLCBWTV9XQVJOL1ZNX0JVRyBhc3NlcnRpb25zKSwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjA1ZWM2Yjg4OWM5ZGEwOWE5YmQ4ODcyNGZmOWMzMjE3ZDE4NWI4ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDExOjE4OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oCmluZGV4IDMwYzE5M2ExMjA3ZTEuLmRmYjcxNTMyMzZmNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmgKQEAgLTM1LDYgJiM0MzszNSw4IEBAIHZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTsKIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpOwogYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpOwomIzQzO2Jvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0Mzt2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7CiAjZWxzZQogCiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9OwpAQCAtNjksNiAmIzQzOzcxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwogI2VuZGlmCiAKICNlbmRpZiAvKiBfTElOVVhfWlNXQVBfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggOGJlM2QyOGQ5YzNkOC4uZDE5OTQ3YTNjMzM4NSAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC0zMSw2ICYjNDM7MzEsNyBAQCB2b2lkIHdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CiB2b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQkgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpOwogdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTsKJiM0Mzt2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpOwogdm9pZCB3b3JraW5nc2V0X2FjdGl2YXRpb24oc3RydWN0IGZvbGlvICpmb2xpbyk7CiAKIC8qIG1tL2ZvbGlvLmMgKi8KZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggYTJhNjNhZTA5NjdjMS4uMDA0M2E5MjM3YThkZCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTQ4NTcsNiAmIzQzOzQ4NTcsNyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAl1bnNpZ25lZCBsb25nIHBhZ2VfaWR4OwogCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKIAlwdGVfdCAqcHRlcDsKJiM0MzsJdm9pZCAqc2hhZG93OwogCiAJaWYgKCFwdGVfdW5tYXBfc2FtZSh2bWYpKQogCQlnb3RvIG91dDsKQEAgLTQ5ODQsNiAmIzQzOzQ5ODUsMTAgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJCWdvdG8gb3V0X3BhZ2U7CiAJfQogCiYjNDM7CXNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7CiYjNDM7CWlmIChzaGFkb3cpCiYjNDM7CQl3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7CiYjNDM7CiAJLyoKIAkgKiBLU00gc29tZXRpbWVzIGhhcyB0byBjb3B5IG9uIHJlYWQgZmF1bHRzLCBmb3IgZXhhbXBsZSwgaWYKIAkgKiBmb2xpby0mZ3Q7aW5kZXggb2Ygbm9uLWtzbSBmb2xpb3Mgd291bGQgYmUgbm9ubGluZWFyIGluc2lkZSB0aGUKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IGMzMjEyZmRlY2U5YjQuLjUzZjU3YWQxOTRhMzkgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMjQ2NSw2ICYjNDM7MjQ2NSw3IEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiAJc3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7CiAJaW50IGVycm9yLCBucl9wYWdlcywgb3JkZXI7CiAJcGdvZmZfdCBvZmZzZXQ7CiYjNDM7CXZvaWQgKnNoYWRvdzsKIAogCVZNX0JVR19PTighKmZvbGlvcCB8fCAheGFfaXNfdmFsdWUoKmZvbGlvcCkpOwogCWluZGV4X2VudHJ5ID0gcmFkaXhfdG9fc3dwX2VudHJ5KCpmb2xpb3ApOwpAQCAtMjU3Niw2ICYjNDM7MjU3NywxMCBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCSAqLwogCWFyY2hfc3dhcF9yZXN0b3JlKGZvbGlvX3N3YXAoc3dhcCwgZm9saW8pLCBmb2xpbyk7CiAKJiM0MzsJc2hhZG93ID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTsKJiM0MzsJaWYgKHNoYWRvdykKJiM0MzsJCXdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChmb2xpbywgc2hhZG93KTsKJiM0MzsKIAlpZiAoc2htZW1fc2hvdWxkX3JlcGxhY2VfZm9saW8oZm9saW8sIGdmcCkpIHsKIAkJZXJyb3IgPSBzaG1lbV9yZXBsYWNlX2ZvbGlvKCZhbXA7Zm9saW8sIGdmcCwgaW5mbywgaW5kZXgsIHZtYSk7CiAJCWlmIChlcnJvcikKZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaAppbmRleCAwYjVkNTA3NzM5YmNiLi5kZGQxMDhiNDFkMzNhIDEwMDY0NAotLS0gYS9tbS9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcC5oCkBAIC0zMTIsOSAmIzQzOzMxMiwxMCBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTsKIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9nZXRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpOwogdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTsKIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKLQkJCQkgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTsKJiM0MztzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsCiYjNDM7CQkJCSAgICAgICB2b2lkICoqc2hhZG93cCk7CiAvKiBCZWxvdyBoZWxwZXJzIHJlcXVpcmUgdGhlIGNhbGxlciB0byBsb2NrIGFuZCBwYXNzIGluIHRoZSBzd2FwIGNsdXN0ZXIuICovCiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAkJCSAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7CmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggMzA1ODc3ZTFmNGQ3Yi4uZTgwYTY5NGRkZGI0NyAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMjQsNiAmIzQzOzI0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zaG1lbV9mcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N5c2N0bC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N3YXBfb3BzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3pzd2FwLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwX3RhYmxlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwLmgmIzM0OwpAQCAtMjYzLDEyICYjNDM7MjY0LDIxIEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAl1bnNpZ25lZCBpbnQgY2lfc3RhcnQsIGNpX29mZiwgY2lfZW5kOwogCWJvb2wgZm9saW9fc3dhcHBlZCA9IGZhbHNlLCBuZWVkX2ZyZWUgPSBmYWxzZTsKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwomIzQzOwl2b2lkICpzaGFkb3dfcGFya2VkOwogCiAJVk1fV0FSTl9PTl9PTkNFKF9fc3dhcF9lbnRyeV90b19jbHVzdGVyKGVudHJ5KSAhPSBjaSk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTsKIAomIzQzOwkvKgomIzQzOwkgKiBBIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgcGFya2VkIHRoZSBzbG90JiMzOTtzIG9yaWdpbmFsIHNoYWRvdyBpbiB0aGUKJiM0MzsJICogenN3YXAgdHJlZTogcmVzdG9yZSBpdCBpbnRvIHRoZSBzbG90IGZvciBsYXRlciBzd2FwLWluLgomIzQzOwkgKi8KJiM0MzsJc2hhZG93X3BhcmtlZCA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7CiYjNDM7CWlmIChzaGFkb3dfcGFya2VkKQomIzQzOwkJc2hhZG93ID0gc2hhZG93X3BhcmtlZDsKJiM0MzsKIAlzaSA9IF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KTsKIAljaV9zdGFydCA9IHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSk7CiAJY2lfZW5kID0gY2lfc3RhcnQgJiM0MzsgbnJfcGFnZXM7CkBAIC00MDksNyAmIzQzOzQxOSw4IEBAIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJCQlzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsCiAJCQkJCXVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCi0JCQkJCXN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KQomIzQzOwkJCQkJc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsCiYjNDM7CQkJCQl2b2lkICoqc2hhZG93cCkKIHsKIAlpbnQgZXJyOwogCXN3cF9lbnRyeV90IGVudHJ5OwpAQCAtNDgzLDM3ICYjNDM7NDk0LDQyIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCiAJLyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovCiAJbWVtY2cxX3N3YXBpbihmb2xpbyk7Ci0JaWYgKHNoYWRvdykKLQkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwogCiAJbm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpOwogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7CiAKLQkvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqLwotCWZvbGlvX2FkZF9scnUoZm9saW8pOwomIzQzOwlpZiAoc2hhZG93cCkKJiM0MzsJCSpzaGFkb3dwID0gc2hhZG93OwomIzQzOwogCXJldHVybiBmb2xpbzsKIH0KIAogLyoqCi0gKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS4KJiM0MzsgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLgogICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3QKICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCiAgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVybwogICogQHZtZjogZmF1bHQgaW5mb3JtYXRpb24KICAqIEBtcG9sOiBOVU1BIG1lbW9yeSBhbGxvY2F0aW9uIHBvbGljeSB0byBiZSBhcHBsaWVkCiAgKiBAaWx4OiBOVU1BIGludGVybGVhdmUgaW5kZXgsIGZvciB1c2Ugb25seSB3aGVuIE1QT0xfSU5URVJMRUFWRQomIzQzOyAqIEBzaGFkb3dwOiBSZXR1cm5zIHRoZSBzaGFkb3cgdGhlIGFsbG9jYXRpb24gZGlzcGxhY2VkLCBOVUxMIHRvIGlnbm9yZQogICoKICAqIEFsbG9jYXRlIGEgZm9saW8gaW4gdGhlIHN3YXAgY2FjaGUgZm9yIG9uZSBzd2FwIHNsb3QsIHR5cGljYWxseSBiZWZvcmUKICAqIGRvaW5nIElPIChlLmcuIHN3YXAgaW4gb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIHN3YXAgc2xvdCBpbmRpY2F0ZWQgYnkKICAqIEB0YXJnX2VudHJ5IG11c3QgaGF2ZSBhIG5vbi16ZXJvIHN3YXAgY291bnQgKHN3YXBwZWQgb3V0KS4KICAqCiYjNDM7ICogVGhlIHJldHVybmVkIGZvbGlvIGlzIGxvY2tlZCBhbmQgaXMgTk9UIG9uIHRoZSBMUlUuIFRoZSBjYWxsZXIgbXVzdCBlaXRoZXIKJiM0MzsgKiBhZGQgaXQgdG8gdGhlIExSVSB3aXRoIGZvbGlvX2FkZF9scnUoKSBzbyBwYWdlIHJlY2xhaW0gY2FuIGZpbmQgaXQsIG9yIGZyZWUKJiM0MzsgKiBpdCBkaXJlY3RseSBvbmNlIGRvbmU7IGEgZm9saW8gbGVmdCBvZmYgdGhlIExSVSBpcyB1bnJlY2xhaW1hYmxlIGFuZCBsZWFrcy4KJiM0MzsgKgogICogQ29udGV4dDogQ2FsbGVyIG11c3QgcHJvdGVjdCB0aGUgc3dhcCBkZXZpY2Ugd2l0aCByZWZlcmVuY2UgY291bnQgb3IgbG9ja3MuCiAgKiBSZXR1cm46IFJldHVybnMgdGhlIGZvbGlvIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkIGFuZCBmb2xpbyBpcyBpbiB0aGUgc3dhcAogICogY2FjaGUuIFJldHVybnMgZXJyb3IgY29kZSBpZiBmYWlsZWQgZHVlIHRvIHJhY2UsIE9PTSBvciBpbnZhbGlkIGFyZ3VtZW50cy4KICAqLwotc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKLQkJCQkgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KQomIzQzO3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCwKJiM0MzsJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LAomIzQzOwkJCQkgICAgICAgdm9pZCAqKnNoYWRvd3ApCiB7CiAJaW50IG9yZGVyLCBlcnI7CiAJc3RydWN0IGZvbGlvICpyZXQ7CkBAIC01MjgsNyAmIzQzOzU0NCw3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsCiAKIAlkbyB7CiAJCXJldCA9IF9fc3dhcF9jYWNoZV9hbGxvYyhjaSwgdGFyZ19lbnRyeSwgZ2ZwLCBvcmRlciwKLQkJCQkJIHZtZiwgbXBvbCwgaWx4KTsKJiM0MzsJCQkJCSB2bWYsIG1wb2wsIGlseCwgc2hhZG93cCk7CiAJCWlmICghSVNfRVJSKHJldCkpCiAJCQlicmVhazsKIAkJZXJyID0gUFRSX0VSUihyZXQpOwpAQCAtNjQ0LDE3ICYjNDM7NjYwLDIzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwKIAkJcGdvZmZfdCBpbHgsIGJvb2wgcmVhZGFoZWFkKQogewogCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CXZvaWQgKnNoYWRvdyA9IE5VTEw7CiAKIAlkbyB7CiAJCWZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpOwogCQlpZiAoZm9saW8pCiAJCQlyZXR1cm4gZm9saW87Ci0JCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7CiYjNDM7CQlmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsCiYjNDM7CQkJCQkJIGlseCwgJmFtcDtzaGFkb3cpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSkKIAkJcmV0dXJuIE5VTEw7CiAKJiM0MzsJaWYgKHNoYWRvdykKJiM0MzsJCXdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTsKJiM0MzsKJiM0MzsJZm9saW9fYWRkX2xydShmb2xpbyk7CiAJc3dhcF9yZWFkX2ZvbGlvKGN0eCwgZm9saW8pOwogCWlmIChyZWFkYWhlYWQpIHsKIAkJZm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7CkBAIC02ODUsMTcgJiM0Mzs3MDcsMjMgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycywKIHsKIAlzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJdm9pZCAqc2hhZG93ID0gTlVMTDsKIAogCWRvIHsKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJCWlmIChmb2xpbykKIAkJCXJldHVybiBmb2xpbzsKLQkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpOwomIzQzOwkJZm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsCiYjNDM7CQkJCQkJIGlseCwgJmFtcDtzaGFkb3cpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBmb2xpbzsKIAomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwomIzQzOwomIzQzOwlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKIAlzd2FwX3JlYWRfZm9saW8oJmFtcDtjdHgsIGZvbGlvKTsKIAlzd2FwX3JlYWRfc3VibWl0KCZhbXA7Y3R4KTsKIAlyZXR1cm4gZm9saW87CmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCA0OGQzY2Q0MGRlZmRiLi42MTAxZjkwZTkxZDJhIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmMKQEAgLTE4ODUsNyAmIzQzOzE4ODUsNyBAQCB2b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKQogICogICBDUFUxCQkJCUNQVTIKICAqICAgZG9fc3dhcF9wYWdlKCkKICAqICAgICAuLi4JCQkJc3dhcG9mZiYjNDM7c3dhcG9uCi0gKiAgICAgc3dhcF9jYWNoZV9hbGxvY19mb2xpbygpCiYjNDM7ICogICAgIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbygpCiAgKiAgICAgICAvLyBjaGVjayBzd2FwX21hcAogICogICAgIC8vIHZlcmlmeSBQVEUgbm90IGNoYW5nZWQKICAqCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDQwZDNmMWI0OGE3NGMuLjFjYTY0ODllNTAxMjIgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC00OCw2ICYjNDM7NDgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWZldGNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJpbnRrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3pzd2FwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZXdhbGsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zaG1lbV9mcy5oJmd0OwpAQCAtNzUzLDcgJiM0Mzs3NTQsOCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJaWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkgewogCQlzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tJmd0O3N3YXA7CiAKLQkJaWYgKHJlY2xhaW1lZCAmYW1wOyZhbXA7ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpCiYjNDM7CQlpZiAocmVjbGFpbWVkICZhbXA7JmFtcDsgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKQogCQkJc2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTsKIAkJX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpOwogCQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTsKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwppbmRleCA4NDEyZjQ4NDBhZTM1Li44ZTQ1YjBiYWViMzZkIDEwMDY0NAotLS0gYS9tbS93b3JraW5nc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jCkBAIC01MzYsMTYgJiM0Mzs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsCiAJcmV0dXJuIHJlZmF1bHRfZGlzdGFuY2UgJmx0Oz0gd29ya2luZ3NldF9zaXplOwogfQogCi0vKioKLSAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLgotICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uCi0gKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uCi0gKgotICogQ2FsY3VsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSByZWZhdWx0IGRpc3RhbmNlIG9mIHRoZSBwcmV2aW91c2x5Ci0gKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5Ci0gKiBwcmVzc3VyZSBjYXVzZWQgdGhlIGV2aWN0aW9uLgotICovCi12b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCiYjNDM7c3RhdGljIHZvaWQgX193b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93LAomIzQzOwkJCQkgYm9vbCBscnVfbWFuYWdlZCkKIHsKIAlib29sIGZpbGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwpAQCAtNTc3LDcgJiM0Mzs1NjksMTYgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQogCWlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsICZhbXA7d29ya2luZ3NldCwgdHJ1ZSkpCiAJCWdvdG8gb3V0OwogCi0JZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiYjNDM7CS8qCiYjNDM7CSAqIEFuIExSVS1tYW5hZ2VkIGZvbGlvIG1heSBzaXQgaW4gYSBwZXItQ1BVIGJhdGNoLCB3aGljaCBjYW5ub3QgYmUKJiM0MzsJICogZGV0ZXJtaW5lZCBoZXJlOiBzZXR0aW5nIHRoZSBmbGFnIHdvdWxkIHJhY2UgdGhlIGRyYWluIGFuZCBsZWF2ZSBpdAomIzQzOwkgKiBkaXNhZ3JlZWluZyB3aXRoIHRoZSBsaXN0LiBmb2xpb19hY3RpdmF0ZSgpIGlzIHNhZmUsIGJ1dCBtaXNzZXMgdGhlCiYjNDM7CSAqIGFjdGl2YXRpb24gZm9yIHN1Y2ggYSBmb2xpby4KJiM0MzsJICovCiYjNDM7CWlmIChscnVfbWFuYWdlZCkKJiM0MzsJCWZvbGlvX2FjdGl2YXRlKGZvbGlvKTsKJiM0MzsJZWxzZQomIzQzOwkJZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiAJd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7CiAJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQkFTRSAmIzQzOyBmaWxlLCBucik7CiAKQEAgLTU5MCw2ICYjNDM7NTkxLDQzIEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKIAltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby4KJiM0MzsgKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby4KJiM0MzsgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uCiYjNDM7ICoKJiM0MzsgKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHkKJiM0MzsgKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5CiYjNDM7ICogcHJlc3N1cmUgY2F1c2VkIHRoZSBldmljdGlvbi4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgbm90IG9uIHRoZSBMUlUgeWV0LCB0aGUgY2FsbGVyIGFkZHMKJiM0MzsgKiBpdCB3aXRoIGZvbGlvX2FkZF9scnUoKSBhZnRlcndhcmRzLgomIzQzOyAqLwomIzQzO3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKJiM0Mzt7CiYjNDM7CV9fd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3csIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkIC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5CiYjNDM7ICogZXZpY3RlZCBmb2xpbyB0aGF0IGlzIGFscmVhZHkgb24gdGhlIExSVS4KJiM0MzsgKiBAZm9saW86IFRoZSBmb2xpbyB0aGUgZXZpY3Rpb24gaXMgcmVmYXVsdGVkIGludG8uCiYjNDM7ICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLgomIzQzOyAqCiYjNDM7ICogTGlrZSB3b3JraW5nc2V0X3JlZmF1bHQoKSwgYnV0IGZvciBhIGZvbGlvIHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgYWRkZWQKJiM0MzsgKiB0byB0aGUgTFJVLCB3aGljaCBoYXMgdG8gYmUgYWN0aXZhdGVkIGJ5IG1vdmluZyBpdCBiZXR3ZWVuIHRoZSBsaXN0cwomIzQzOyAqIHJhdGhlciB0aGFuIGJ5IHNldHRpbmcgUEdfYWN0aXZlLgomIzQzOyAqCiYjNDM7ICogVGhlIGFjdGl2YXRpb24gaXMgYmVzdCBlZmZvcnQ6IGEgZm9saW8gc3RpbGwgc2l0dGluZyBpbiBhIHBlci1DUFUgTFJVCiYjNDM7ICogYmF0Y2ggY2Fubm90IGJlIG1vdmVkIHlldCBhbmQgaXMgbGVmdCBpbmFjdGl2ZS4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgYWxyZWFkeSBhZGRlZCB0byB0aGUgTFJVLgomIzQzOyAqLwomIzQzO3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKJiM0Mzt7CiYjNDM7CV9fd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3csIHRydWUpOwomIzQzO30KJiM0MzsKIC8qKgogICogd29ya2luZ3NldF9hY3RpdmF0aW9uIC0gbm90ZSBhIHBhZ2UgYWN0aXZhdGlvbgogICogQGZvbGlvOiBGb2xpbyB0aGF0IGlzIGJlaW5nIGFjdGl2YXRlZC4KZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IGMyN2UyMmQwNjdlM2UuLjkwNDgyMWRiNDAxZjMgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtOTYxLDYgJiM0Mzs5NjEsNzkgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiB3cml0ZWJhY2sgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KJiM0MzsKJiM0MzsjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMCkKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj8KJiM0MzsgKiBAZm9saW86IHRoZSBmb2xpbyBiZWluZyBleGFtaW5lZCAodHlwaWNhbGx5IGEgc3dhcCBjYWNoZSBmb2xpbyB1bmRlciByZWNsYWltKQomIzQzOyAqCiYjNDM7ICogQSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgd2hlbiBldmVyeSBvbmUgb2YgaXRzIHN3YXAgb2Zmc2V0cyBob2xkcwomIzQzOyAqIGEgcGFya2VkIHdyaXRlYmFjayBzaGFkb3cgKGEgcmVhbCBzaGFkb3cgb3IgdGhlIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cKJiM0MzsgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIEBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIsIGluIHdoaWNoIGNhc2UgdGhlIHJlY2xhaW0gcGF0aAomIzQzOyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuCiYjNDM7ICovCiYjNDM7Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzd3BfZW50cnlfdCBzd3AgPSBmb2xpby0mZ3Q7c3dhcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJaWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXhhX2lzX3ZhbHVlKHhhX2xvYWQoc3dhcF96c3dhcF90cmVlKGUpLCBvZmZzZXQgJiM0MzsgaSkpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzIC0gcmV0cmlldmUgYW5kIGNsZWFyIEBmb2xpbyYjMzk7cyBwYXJrZWQgc2hhZG93KHMpCiYjNDM7ICogQGZvbGlvOiB0aGUgd3JpdGViYWNrIGJ1ZmZlciBmb2xpbyAob3IgdGhlIHN3YXBpbiBmb2xpbyB0aGF0IGNvbnN1bWVkIGl0KQomIzQzOyAqCiYjNDM7ICogUmVtb3ZlIGFueSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvd3MgZm9yIEBmb2xpbyYjMzk7cyBzd2FwIG9mZnNldChzKSBmcm9tIHRoZQomIzQzOyAqIHpzd2FwIHRyZWUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRoZSBwcmVzZXJ2ZWQgd29ya2luZ3NldCBzaGFkb3csIG9yIE5VTEwgaWYgdGhlIHNsb3QocykgaGFkIG5vIHNoYWRvdwomIzQzOyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkCiYjNDM7ICogc2hhZG93IGludG8gdGhlIHN3YXAgc2xvdCAoYnVmZmVyIGRyb3BwZWQpIG9yIGZlZWRzIGl0IHRvCiYjNDM7ICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKCkgKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nCiYjNDM7ICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LgomIzQzOyAqLwomIzQzO3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tJmd0O3N3YXA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CXBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApOwomIzQzOwl2b2lkICpzaGFkb3cgPSBOVUxMOwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CWlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CQlzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKGUpOwomIzQzOwkJdm9pZCAqcGFya2VkID0geGFfbG9hZCh0cmVlLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl4YV9lcmFzZSh0cmVlLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CQlpZiAocGFya2VkICE9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cpCiYjNDM7CQkJc2hhZG93ID0gcGFya2VkOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzaGFkb3c7CiYjNDM7fQomIzQzOwogLyoKICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsCiAgKiBkZWNvbXByZXNzaW5nIHRoZSBlbnRyeSBkYXRhIGludG8gdGhlIGZvbGlvLCBhbmQgaXNzdWluZyBhCkBAIC05NzYsMTIgJiM0MzsxMDQ5LDE0IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbykKIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJCQkJIHN3cF9lbnRyeV90IHN3cGVudHJ5KQogewomIzQzOwlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwogCXN0cnVjdCB4YXJyYXkgKnRyZWU7CiAJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cGVudHJ5KTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCXN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7CiAJc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpOwogCXN0cnVjdCBzd2FwX2lvX2N0eCBjdHggPSB7fTsKJiM0MzsJdm9pZCAqc2hhZG93OwogCWludCByZXQgPSAwOwogCiAJLyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi8KQEAgLTk5MCw4ICYjNDM7MTA2NSw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJCXJldHVybiAtRUVYSVNUOwogCiAJbXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTsKLQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCwKLQkJCQkgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7CiYjNDM7CWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsCiYjNDM7CQkJCQkgTk9fSU5URVJMRUFWRV9JTkRFWCwgJmFtcDtzaGFkb3cpOwogCXB1dF9zd2FwX2RldmljZShzaSk7CiAKIAkvKgpAQCAtMTAwMyw2ICYjNDM7MTA3OCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJICovCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBQVFJfRVJSKGZvbGlvKTsKJiM0MzsJZm9saW9fYWRkX2xydShmb2xpbyk7CiAKIAkvKgogCSAqIGZvbGlvIGlzIGxvY2tlZCwgYW5kIHRoZSBzd2FwY2FjaGUgaXMgbm93IHNlY3VyZWQgYWdhaW5zdApAQCAtMTAyNCw3ICYjNDM7MTEwMCwxMiBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCQlnb3RvIG91dDsKIAl9CiAKLQl4YV9lcmFzZSh0cmVlLCBvZmZzZXQpOwomIzQzOwkvKgomIzQzOwkgKiBBIHNsb3Qgd2l0aCBubyBzaGFkb3cgYWxyZWFkeSByZWFkcyBiYWNrIGFzIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c6CiYjNDM7CSAqIHRoZSBzd2FwIHRhYmxlIG1hcmtzIGEgc3dhcHBlZCBvdXQgc2xvdCB3aXRoIHhhX21rX3ZhbHVlKDApIGFuZCBob2xkcwomIzQzOwkgKiB0aGUgc2hhZG93LCB3aGVuIHRoZXJlIGlzIG9uZSwgaW4gdGhhdCBzYW1lIHZhbHVlLgomIzQzOwkgKi8KJiM0MzsJeGFfc3RvcmUodHJlZSwgb2Zmc2V0LCBzaGFkb3csIEdGUF9LRVJORUwpOwogCiAJY291bnRfdm1fZXZlbnQoWlNXUFdCKTsKIAlpZiAoZW50cnktJmd0O29iamNnKQpAQCAtMTA0NCw3ICYjNDM7MTEyNSwxNSBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCiBvdXQ6CiAJaWYgKHJldCkgewotCQlzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGFsbG9jYXRpb24gYWJvdmUgb3Zlcndyb3RlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBhbmQgbm90aGluZwomIzQzOwkJICogaGFzIGJlZW4gcGFya2VkIGZvciBpdCB5ZXQsIHNvIHJlc3RvcmUgaXQgYXMgdGhlIGZvbGlvIGxlYXZlcwomIzQzOwkJICogdGhlIHN3YXAgY2FjaGUsIG9yIHRoZSBldmljdGlvbiBpdCByZWNvcmRzIGlzIGxvc3QuCiYjNDM7CQkgKi8KJiM0MzsJCWNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oc3dwZW50cnkpLCBvZmZzZXQpOwomIzQzOwkJX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3cGVudHJ5LCBzaGFkb3cpOwomIzQzOwkJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiYjNDM7CQlmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpOwogCQlmb2xpb191bmxvY2soZm9saW8pOwogCX0KIAlmb2xpb19wdXQoZm9saW8pOwpAQCAtMTQ4Nyw2ICYjNDM7MTU3NiwxNyBAQCBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJVk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpOwogCVZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKTsKIAomIzQzOwkvKgomIzQzOwkgKiBBIHdyaXRlYmFjayBidWZmZXIgd2hvc2UgSU8gZmFpbGVkIGlzIHJlZGlydGllZCBhbmQgbGVmdCBpbiB0aGUKJiM0MzsJICogc3dhcCBjYWNoZSwgc28gcmVjbGFpbSB3cml0ZXMgaXQgb3V0IGFnYWluLiBXcml0ZWJhY2sgYWxyZWFkeQomIzQzOwkgKiBkZWNpZGVkIHRoaXMgZGF0YSBiZWxvbmdzIG9uIGRpc2ssIHNvIHNlbmQgaXQgdGhlcmUgaW5zdGVhZCBvZgomIzQzOwkgKiBjb21wcmVzc2luZyBpdCBiYWNrIGludG8genN3YXAuIFRoaXMgYWxzbyBsZWF2ZXMgdGhlIHNoYWRvdwomIzQzOwkgKiBwYXJrZWQgZm9yIHRoZSBidWZmZXIgaW4gcGxhY2UsIHNvIGl0IGlzIHN0aWxsIHJlc3RvcmVkIGludG8KJiM0MzsJICogdGhlIHNsb3Qgb25jZSB0aGUgZm9saW8gbGVhdmVzIHRoZSBzd2FwIGNhY2hlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCWlmICghenN3YXBfZW5hYmxlZCkKIAkJZ290byBjaGVja19vbGQ7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIE1lbW9yeSBTYWZldHkgRXZhbHVhdGlvbjogWnN3YXAgU2hhZG93IEVudHJ5IEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBvciBoaWdobGlnaHRzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQmIzM5O3MgYSBrZXJuZWwgcGF0Y2ggdG91Y2hpbmcgc2V2ZXJhbCBtZW1vcnkgbWFuYWdlbWVudCBhcmVhcy4KCkZpcnN0LCBJIHNlZSB0aGUgYWZmZWN0ZWQgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L3pzd2FwLmhgLCBgbW0vaW50ZXJuYWwuaGAsIGBtbS9tZW1vcnkuY2AsIGBtbS9zaG1lbS5jYCwgYG1tL3N3YXAuaGAsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vc3dhcGZpbGUuY2AsIGBtbS92bXNjYW4uY2AsIGBtbS93b3JraW5nc2V0LmNgLCBhbmQgYG1tL3pzd2FwLmNgLiBUaGVzZSBhbGwgcG9pbnQgdG93YXJkcyB3b3JraW5nc2V0IHNoYWRvdyBlbnRyaWVzIGFuZCB6c3dhcCB3cml0ZWJhY2suCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgaG93IHRoZSB3b3JraW5nc2V0IHNoYWRvdyBlbnRyaWVzIGFyZSBoYW5kbGVkIHdoZW4gZm9saW9zIGFyZSBzd2FwcGVkIGluIGFuZCBvdXQgdmlhIHpzd2FwIHdyaXRlYmFjay4gU3BlY2lmaWNhbGx5LCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBub3cgdGFrZXMgYSBgdm9pZCAqKnNoYWRvd3BgIHBhcmFtZXRlci4gIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgY2FsbGluZyBgd29ya2luZ3NldF9yZWZhdWx0YCBpbiBgX19zd2FwX2NhY2hlX2FsbG9jYCwgaXQmIzM5O3Mgbm93IHJldHVybmluZyB0aGUgYHNoYWRvd2AgdmFsdWUgdmlhIGBzaGFkb3dwYCAoaWYgaXQmIzM5O3Mgbm90IE5VTEwpLiBDYWxsZXJzIGxpa2UgYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AgYW5kIGBzd2FwaW5fc3luY2AgdGhlbiBoYW5kbGUgdGhlIGB3b3JraW5nc2V0X3JlZmF1bHRgIGNhbGwgKmFmdGVyKiBnZXR0aW5nIHRoZSBgc2hhZG93YCB2YWx1ZSBiYWNrLiBBbmQsIGBkb19zd2FwX3BhZ2VgIGFuZCBgc2htZW1fc3dhcGluX2ZvbGlvYCBhcmUgdXNpbmcgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AuIEkgc2VlIHNpbWlsYXIgbG9naWMgaW4gYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIHdpdGggdGhlIHNoYWRvdyBiZWluZyByZXRyaWV2ZWQgdmlhIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGFuZCBzdG9yZWQgaW4gYW4gYHhhX3N0b3JlYCBjYWxsLiAgSWYgdGhlcmUmIzM5O3MgYW4gZXJyb3IsIGl0JiMzOTtzIGJlaW5nIHJlc3RvcmVkIGluIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYC4KCk15IG5leHQgc3RlcCBpcyB0byBzZWUgaWYgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgZXhpc3RzLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgY2FsbHNpdGVzIHdoZXJlIGBzaGFkb3dgIGlzIGJlaW5nIHVzZWQgdG8gc2VlIGhvdyBpdCBpcyBpbml0aWFsbHkgYXNzaWduZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBhdGhzIHdoZXJlIGl0IGNvdWxkIGJlIHJlYWQgYmVmb3JlIGJlaW5nIGFzc2lnbmVkIGEgdmFsaWQgdmFsdWUuCgpMZXQmIzM5O3MgbG9vayBhdCBgc3dhcF9jYWNoZV9yZWFkX2ZvbGlvYDogVGhlIGBzaGFkb3dgIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIHRvIGBOVUxMYC4gVGhlIGNvZGUgY2FsbHMgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIElmIHRoYXQgc3VjY2VlZHMsIHRoZSBhbGxvY2F0ZWQgc2hhZG93IHZhbHVlIGlzIHJldHVybmVkIGFuZCB0aGUgY2FsbGVyIHdpbGwgcnVuIGB3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdylgLiBUaGUgYF9fc3dhcF9jYWNoZV9hbGxvY2AgYXNzaWducyBgc2hhZG93YCBmcm9tIGVpdGhlciBhIHZhbHVlIGZyb20gdGhlIGBzd2FwX2NhY2hlYCwgb3IgZnJvbSB3aGF0IHdhcyBqdXN0IGFsbG9jYXRlZC4gTGV0JiMzOTtzIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiBkaXJlY3RseSB0byBjb25maXJtIHRoZSBhc3NpZ25tZW50IGFuZCBzZWUgd2hhdCBpcyBhY3R1YWxseSBoYXBwZW5pbmcuIEkgd2lsbCB1c2UgdGhlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBjb21tYW5kIHRvIGludmVzdGlnYXRlIHRoZSByZWxldmFudCBsaW5lcyBpbiBgbW0vc3dhcF9zdGF0ZS5jYCBhcm91bmQgbGluZXMgNDA5LTUwMC4gVGhlbiBJJiMzOTtsbCByZS1ldmFsdWF0ZSB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3N3YXBfc3RhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0XHRzcGluX2xvY2soXHUwMDI2Y2ktXHUwMDNlbG9jayk7XG4gNDYxOlx0XHRlcnIgPSBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKGNpLCB0YXJnX2VudHJ5LCBucl9wYWdlcywgXHUwMDI2c2hhZG93LCBcdTAwMjZtZW1jZ19pZCk7XG4gNDYyOlx0XHRpZiAodW5saWtlbHkoZXJyKSkge1xuIDQ2MzpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbiA0NjQ6XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiA0NjU6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiA0NjY6XHRcdH1cbiA0Njc6XHRcbiA0Njg6XHRcdF9fZm9saW9fc2V0X2xvY2tlZChmb2xpbyk7XG4gNDY5Olx0XHRfX2ZvbGlvX3NldF9zd2FwYmFja2VkKGZvbGlvKTtcbiA0NzA6XHRcdF9fc3dhcF9jYWNoZV9kb19hZGRfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSk7XG4gNDcxOlx0XHRzcGluX3VubG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbiA0NzI6XHRcbiA0NzM6XHRcdGlmIChtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oZm9saW8sIG1lbWNnX2lkLFxuIDQ3NDpcdFx0XHRcdFx0XHQgICB2bWYgPyB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX21tIDogTlVMTCwgZ2ZwKSkge1xuIDQ3NTpcdFx0XHRzcGluX2xvY2soXHUwMDI2Y2ktXHUwMDNlbG9jayk7XG4gNDc2Olx0XHRcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcbiA0Nzc6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y2ktXHUwMDNlbG9jayk7XG4gNDc4Olx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gNDc5Olx0XHRcdC8qIG5yX3BhZ2VzIHJlZnMgZnJvbSBzd2FwIGNhY2hlLCAxIGZyb20gYWxsb2NhdGlvbiAqL1xuIDQ4MDpcdFx0XHRmb2xpb19wdXRfcmVmcyhmb2xpbywgbnJfcGFnZXMgJiM0MzsgMSk7XG4gNDgxOlx0XHRcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX1NXUElOX0ZBTExCQUNLX0NIQVJHRSk7XG4gNDgyOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIDQ4MzpcdFx0fVxuIDQ4NDpcdFxuIDQ4NTpcdFx0aWYgKG9yZGVyIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChmb2xpbykpIHtcbiA0ODY6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmNpLVx1MDAzZWxvY2spO1xuIDQ4NzpcdFx0XHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XG4gNDg4Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmNpLVx1MDAzZWxvY2spO1xuIDQ4OTpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIDQ5MDpcdFx0XHQvKiBucl9wYWdlcyByZWZzIGZyb20gc3dhcCBjYWNoZSwgMSBmcm9tIGFsbG9jYXRpb24gKi9cbiA0OTE6XHRcdFx0Zm9saW9fcHV0X3JlZnMoZm9saW8sIG5yX3BhZ2VzICYjNDM7IDEpO1xuIDQ5MjpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiA0OTM6XHRcdH1cbiA0OTQ6XHRcbiA0OTU6XHRcdC8qIG1lbXN3IHVuY2hhcmdlcyBzd2FwIHdoZW4gZm9saW8gaXMgYWRkZWQgdG8gc3dhcCBjYWNoZSAqL1xuIDQ5NjpcdFx0bWVtY2cxX3N3YXBpbihmb2xpbyk7XG4gNDk3Olx0XG4gNDk4Olx0XHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCBucl9wYWdlcyk7XG4gNDk5Olx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpO1xuIDUwMDpcdFxuIDUwMTpcdFx0aWYgKHNoYWRvd3ApXG4gNTAyOlx0XHRcdCpzaGFkb3dwID0gc2hhZG93O1xuIDUwMzpcdFxuIDUwNDpcdFx0cmV0dXJuIGZvbGlvO1xuIDUwNTpcdH1cbiA1MDY6XHRcbiA1MDc6XHQvKipcbiA1MDg6XHQgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuIDUwOTpcdCAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XG4gNTEwOlx0ICogQGdmcDogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3NcbiA1MTE6XHQgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVyb1xuIDUxMjpcdCAqIEB2bWY6IGZhdWx0IGluZm9ybWF0aW9uXG4gNTEzOlx0ICogQG1wb2w6IE5VTUEgbWVtb3J5IGFsbG9jYXRpb24gcG9saWN5IHRvIGJlIGFwcGxpZWRcbiA1MTQ6XHQgKiBAaWx4OiBOVU1BIGludGVybGVhdmUgaW5kZXgsIGZvciB1c2Ugb25seSB3aGVuIE1QT0xfSU5URVJMRUFWRVxuIDUxNTpcdCAqIEBzaGFkb3dwOiBSZXR1cm5zIHRoZSBzaGFkb3cgdGhlIGFsbG9jYXRpb24gZGlzcGxhY2VkLCBOVUxMIHRvIGlnbm9yZVxuIDUxNjpcdCAqXG4gNTE3Olx0ICogQWxsb2NhdGUgYSBmb2xpbyBpbiB0aGUgc3dhcCBjYWNoZSBmb3Igb25lIHN3YXAgc2xvdCwgdHlwaWNhbGx5IGJlZm9yZVxuIDUxODpcdCAqIGRvaW5nIElPIChlLmcuIHN3YXAgaW4gb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIHN3YXAgc2xvdCBpbmRpY2F0ZWQgYnlcbiA1MTk6XHQgKiBAdGFyZ19lbnRyeSBtdXN0IGhhdmUgYSBub24temVybyBzd2FwIGNvdW50IChzd2FwcGVkIG91dCkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjAxCgkJCQkJCQlvdXRwdXQ6IDI1MgoJCQkJCQkJdGhvdWdodHM6IDE5NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogWnN3YXAgYW5kIFN3YXAgQ2FjaGUgUmVmYWN0b3JpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBjaGVjay4gR2l2ZW4gbXkgZXhwZXJ0aXNlIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBJJiMzOTtsbCBhc3Nlc3MgdGhpcyBzeXN0ZW1hdGljYWxseS4KCkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBjb3JlIGZ1bmN0aW9uczogYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGBzd2FwaW5fc3luY2AsIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCwgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgLCBhbmQgYF9fd29ya2luZ3NldF9yZWZhdWx0YC4gSeKAmW0gbG9va2luZyBmb3IgYW55IGluZGljYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGVzcGVjaWFsbHkgc2luY2UgdGhpcyBpbnZvbHZlcyBmb2xpb3MsIHN3YXAgY2FjaGUgaW50ZXJhY3Rpb25zLCBhbmQgdGhlIHdvcmtpbmdzZXQsIGFsbCBvZiB3aGljaCBhcmUgY3JpdGljYWwgYXJlYXMuIFRoZSBgc2hhZG93YCB2YXJpYWJsZSwgaW4gcGFydGljdWxhciwgY2F1Z2h0IG15IGV5ZSwgYXMgaXQmIzM5O3MgcGFzc2VkIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnMuCgpNeSBvYnNlcnZhdGlvbnMgYXJlIHRoYXQgaW4gYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGBzaGFkb3dgIG1pZ2h0IGJlIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgZnVuY3Rpb24gYnkgYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgLCB3aGljaCBpcyBjYWxsZWQgaW5zaWRlIHRoZSBmdW5jdGlvbiwgb3IgYnkgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AgaW4gc2V2ZXJhbCBwbGFjZXMgd2hlcmUgYHNoYWRvd2AgaXMgdXNlZCwgbGlrZSBpbiBgc3dhcGluX3N5bmNgLCBgZG9fc3dhcF9wYWdlYCwgYW5kIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYC4gVGhlIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGJlY2F1c2UgaXQgY2xlYXJzIGBzaGFkb3dgIGZyb20gYW4geGFycmF5LCBhbmQgdGhlIHZhbHVlIHJldHJpZXZlZCBtYXkgY29udGFpbiBhIHBvaW50ZXIuICBJIHZlcmlmaWVkIHRoYXQgaW4gYHN3YXBpbl9zeW5jYCwgYHNoYWRvd2AgY2FuIGJlIGBOVUxMYCBidXQgaXMgY2hlY2tlZC4gVGhlIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIGFsd2F5cyByZXR1cm5zIHRoZSB2YWx1ZSwgZXZlbiBgTlVMTGAsIHNvIHRoZSBwb2ludGVyIHdpbGwgbmV2ZXIgYmVjb21lIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQuCgpJIGR1ZyBpbnRvIHRoZSBjb2RlIGFuZCBjb25maXJtZWQgdGhhdCBldmVyeSB0aW1lIGBzaGFkb3dgIG9yIHNpbWlsYXIgdmFyaWFibGVzIChgc2hhZG93X3BhcmtlZGApIGFyZSB1c2VkLCB0aGV5IGFyZSBlaXRoZXIgaW5pdGlhbGl6ZWQgdG8gYE5VTExgIGV4cGxpY2l0bHkgb3IgYXNzaWduZWQgYSB2YWx1ZSBiZWZvcmUgYmVpbmcgcmVhZC4gU3BlY2lmaWNhbGx5LCBsb29raW5nIGF0IGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCB0aGUgdmFsdWUgb2YgYHNoYWRvd2AgY29tZXMgZnJvbSB0aGUgYHhhX2xvYWRgIG9mIHRoZSBgc3dhcF96c3dhcF90cmVlYCB4YXJyYXksIGVuc3VyaW5nIHRoZSB2YWx1ZXMgYXJlIGtub3duLiBUaGUgb3RoZXIgdXNhZ2VzLCBzdWNoIGFzIGBzd2FwaW5fc3luY2AgYW5kIGBkb19zd2FwX3BhZ2VgLCBlbnN1cmUgYHNoYWRvd2AgaXMgbm90IHVzZWQgdW5pbml0aWFsaXplZC4KClRoZSBpbXBvcnRhbnQgcG9pbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyBzcGVjaWZpY2FsbHkgYWRkcmVzc2VkIGJ5IEtNU0FOLiBJIGNoZWNrZWQgdGhhdCB0aGlzIGNvZGUgZG9lc24mIzM5O3Q6IGNvcHkgZGF0YSB0byB1c2VyLXNwYWNlLCByZWFkIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjaGFuZ2UgYnVmZmVyIGJvdW5kcywgb3IgYWxsb3cgcmVhZGluZyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LiBUaGUgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCBWTSBkZWJ1Z2dpbmcgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoZSBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkZWFkbG9ja3MsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2VzcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIG1pZ2h0IGludHJvZHVjZS4KCkluIGxpZ2h0IG9mIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGUgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlIHN1YnN5c3RlbSB3aWxsIGJlIGZvdW5kIGJ5IG90aGVyIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDExOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0vIChzd2FwIGNhY2hlLCB6c3dhcCB3cml0ZWJhY2ssIGFuZCB3b3JraW5nc2V0IHJlZmF1bHQgdHJhY2tpbmcgZm9yIExSVS1tYW5hZ2VkIGZvbGlvcykuIEl0IGFkanVzdHMgaG93IHNoYWRvdyBlbnRyaWVzIGFyZSBwYXJrZWQgaW4gdGhlIHpzd2FwIHRyZWUgZHVyaW5nIHdyaXRlYmFjayBhbmQgcmVzdG9yZWQvcmVmYXVsdGVkIGR1cmluZyBzd2FwaW4uXG5cbjEuIE5vIGtlcm5lbC10by11c2VyIGluZm8tbGVhayByaXNrOiBObyBkYXRhIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGxzLCBvciBCUEYgYnVmZmVycykuXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogQWxsIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBzaGFkb3dgLCBgc2hhZG93X3BhcmtlZGAsIGFuZCBsb29wIGluZGljZXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgYXNzaWduZWQgYnkgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHBvaW50ZXJzL3ZhbHVlcy5cbjMuIEJ1ZyBhcHBsaWNhYmlsaXR5OiBQb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGludm9sdmUgcGFnZSBsb2NraW5nLCByYWNlIGNvbmRpdGlvbnMgaW4gc3dhcGNhY2hlL0xSVSBtYW5pcHVsYXRpb24sIHJlZmNvdW50aW5nLCBvciBpbnZhbGlkIHhhcnJheSBvcGVyYXRpb25zLiBUaGVzZSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgKEtBU0FOLCBMT0NLREVQLCBWTV9XQVJOL1ZNX0JVRyBhc3NlcnRpb25zKSwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS8gKHN3YXAgY2FjaGUsIHpzd2FwIHdyaXRlYmFjaywgYW5kIHdvcmtpbmdzZXQgcmVmYXVsdCB0cmFja2luZyBmb3IgTFJVLW1hbmFnZWQgZm9saW9zKS4gSXQgYWRqdXN0cyBob3cgc2hhZG93IGVudHJpZXMgYXJlIHBhcmtlZCBpbiB0aGUgenN3YXAgdHJlZSBkdXJpbmcgd3JpdGViYWNrIGFuZCByZXN0b3JlZC9yZWZhdWx0ZWQgZHVyaW5nIHN3YXBpbi5cblxuMS4gTm8ga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrIHJpc2s6IE5vIGRhdGEgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bHMsIG9yIEJQRiBidWZmZXJzKS5cbjIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOiBBbGwgbmV3bHkgaW50cm9kdWNlZCBvciBtb2RpZmllZCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYHNoYWRvd2AsIGBzaGFkb3dfcGFya2VkYCwgYW5kIGxvb3AgaW5kaWNlcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBhc3NpZ25lZCBieSBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcG9pbnRlcnMvdmFsdWVzLlxuMy4gQnVnIGFwcGxpY2FiaWxpdHk6IFBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgaW52b2x2ZSBwYWdlIGxvY2tpbmcsIHJhY2UgY29uZGl0aW9ucyBpbiBzd2FwY2FjaGUvTFJVIG1hbmlwdWxhdGlvbiwgcmVmY291bnRpbmcsIG9yIGludmFsaWQgeGFycmF5IG9wZXJhdGlvbnMuIFRoZXNlIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyAoS0FTQU4sIExPQ0tERVAsIFZNX1dBUk4vVk1fQlVHIGFzc2VydGlvbnMpLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDExOjE4OjM0LjgxNTA1NzY0MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxOTQwMDcxNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlclwiLFxuICAgIFwienN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzXCIsXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIixcbiAgICBcInpzd2FwX3N0b3JlXCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRcIixcbiAgICBcIl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS8gKHN3YXAgY2FjaGUsIHpzd2FwIHdyaXRlYmFjaywgYW5kIHdvcmtpbmdzZXQgcmVmYXVsdCB0cmFja2luZyBmb3IgTFJVLW1hbmFnZWQgZm9saW9zKS4gSXQgYWRqdXN0cyBob3cgc2hhZG93IGVudHJpZXMgYXJlIHBhcmtlZCBpbiB0aGUgenN3YXAgdHJlZSBkdXJpbmcgd3JpdGViYWNrIGFuZCByZXN0b3JlZC9yZWZhdWx0ZWQgZHVyaW5nIHN3YXBpbi5cXG5cXG4xLiBObyBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgcmlzazogTm8gZGF0YSBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3Rscywgb3IgQlBGIGJ1ZmZlcnMpLlxcbjIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOiBBbGwgbmV3bHkgaW50cm9kdWNlZCBvciBtb2RpZmllZCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYHNoYWRvd2AsIGBzaGFkb3dfcGFya2VkYCwgYW5kIGxvb3AgaW5kaWNlcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBhc3NpZ25lZCBieSBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcG9pbnRlcnMvdmFsdWVzLlxcbjMuIEJ1ZyBhcHBsaWNhYmlsaXR5OiBQb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGludm9sdmUgcGFnZSBsb2NraW5nLCByYWNlIGNvbmRpdGlvbnMgaW4gc3dhcGNhY2hlL0xSVSBtYW5pcHVsYXRpb24sIHJlZmNvdW50aW5nLCBvciBpbnZhbGlkIHhhcnJheSBvcGVyYXRpb25zLiBUaGVzZSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgKEtBU0FOLCBMT0NLREVQLCBWTV9XQVJOL1ZNX0JVRyBhc3NlcnRpb25zKSwgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgenN3YXAgc3Vic3lzdGVtIGxvZ2ljLCBzcGVjaWZpY2FsbHkgcmVmYXVsdCB0cmFja2luZyBhbmQgc2hhZG93IGVudHJ5IHByZXNlcnZhdGlvbiBhY3Jvc3MgenN3YXAgd3JpdGViYWNrIGFuZCBzd2FwLWluIHBhdGhzLiBJdCBpbnRyb2R1Y2VzIG5ldyBoZWxwZXJzICh6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyLCB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MsIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZCkgYW5kIG1vZGlmaWVzIHN3YXAgY2FjaGUgYWxsb2NhdGlvbiBhbmQgd3JpdGViYWNrIGhhbmRsaW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIHdhcnJhbnQgZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMsIG1lbW9yeSBsZWFrcywgb3IgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMToxODozNC44MTUwNjQxOTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Mjc3Mjg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYwNWVjNmI4ODljOWRhMDlhOWJkODg3MjRmZjljMzIxN2QxODViOGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTE6MTg6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXFxuaW5kZXggMzBjMTkzYTEyMDdlMS4uZGZiNzE1MzIzNmY1YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG5AQCAtMzUsNiArMzUsOCBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XFxuIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XFxuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcXG4rYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbit2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuICNlbHNlXFxuIFxcbiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9O1xcbkBAIC02OSw2ICs3MSwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmIC8qIF9MSU5VWF9aU1dBUF9IICovXFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXFxuaW5kZXggOGJlM2QyOGQ5YzNkOC4uZDE5OTQ3YTNjMzM4NSAxMDA2NDRcXG4tLS0gYS9tbS9pbnRlcm5hbC5oXFxuKysrIGIvbW0vaW50ZXJuYWwuaFxcbkBAIC0zMSw2ICszMSw3IEBAIHZvaWQgd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4gdm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xcbiB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpO1xcbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpO1xcbiB2b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gXFxuIC8qIG1tL2ZvbGlvLmMgKi9cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xcbmluZGV4IGEyYTYzYWUwOTY3YzEuLjAwNDNhOTIzN2E4ZGQgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC00ODU3LDYgKzQ4NTcsNyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xcbiBcXHRwdGVfdCAqcHRlcDtcXG4rXFx0dm9pZCAqc2hhZG93O1xcbiBcXG4gXFx0aWYgKCFwdGVfdW5tYXBfc2FtZSh2bWYpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtNDk4NCw2ICs0OTg1LDEwIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiBcXHRcXHRnb3RvIG91dF9wYWdlO1xcbiBcXHR9XFxuIFxcbitcXHRzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xcbitcXHRpZiAoc2hhZG93KVxcbitcXHRcXHR3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBLU00gc29tZXRpbWVzIGhhcyB0byBjb3B5IG9uIHJlYWQgZmF1bHRzLCBmb3IgZXhhbXBsZSwgaWZcXG4gXFx0ICogZm9saW8tXFx1MDAzZWluZGV4IG9mIG5vbi1rc20gZm9saW9zIHdvdWxkIGJlIG5vbmxpbmVhciBpbnNpZGUgdGhlXFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXFxuaW5kZXggYzMyMTJmZGVjZTliNC4uNTNmNTdhZDE5NGEzOSAxMDA2NDRcXG4tLS0gYS9tbS9zaG1lbS5jXFxuKysrIGIvbW0vc2htZW0uY1xcbkBAIC0yNDY1LDYgKzI0NjUsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcXG4gXFx0aW50IGVycm9yLCBucl9wYWdlcywgb3JkZXI7XFxuIFxcdHBnb2ZmX3Qgb2Zmc2V0O1xcbitcXHR2b2lkICpzaGFkb3c7XFxuIFxcbiBcXHRWTV9CVUdfT04oISpmb2xpb3AgfHwgIXhhX2lzX3ZhbHVlKCpmb2xpb3ApKTtcXG4gXFx0aW5kZXhfZW50cnkgPSByYWRpeF90b19zd3BfZW50cnkoKmZvbGlvcCk7XFxuQEAgLTI1NzYsNiArMjU3NywxMCBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbiBcXHQgKi9cXG4gXFx0YXJjaF9zd2FwX3Jlc3RvcmUoZm9saW9fc3dhcChzd2FwLCBmb2xpbyksIGZvbGlvKTtcXG4gXFxuK1xcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XFxuK1xcdGlmIChzaGFkb3cpXFxuK1xcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChmb2xpbywgc2hhZG93KTtcXG4rXFxuIFxcdGlmIChzaG1lbV9zaG91bGRfcmVwbGFjZV9mb2xpbyhmb2xpbywgZ2ZwKSkge1xcbiBcXHRcXHRlcnJvciA9IHNobWVtX3JlcGxhY2VfZm9saW8oXFx1MDAyNmZvbGlvLCBnZnAsIGluZm8sIGluZGV4LCB2bWEpO1xcbiBcXHRcXHRpZiAoZXJyb3IpXFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxcbmluZGV4IDBiNWQ1MDc3MzliY2IuLmRkZDEwOGI0MWQzM2EgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcC5oXFxuKysrIGIvbW0vc3dhcC5oXFxuQEAgLTMxMiw5ICszMTIsMTAgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XFxuIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9nZXRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpO1xcbiB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpO1xcbiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB2b2lkICoqc2hhZG93cCk7XFxuIC8qIEJlbG93IGhlbHBlcnMgcmVxdWlyZSB0aGUgY2FsbGVyIHRvIGxvY2sgYW5kIHBhc3MgaW4gdGhlIHN3YXAgY2x1c3Rlci4gKi9cXG4gdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XFxuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xcbmluZGV4IDMwNTg3N2UxZjRkN2IuLmU4MGE2OTRkZGRiNDcgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXFxuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXFxuQEAgLTI0LDYgKzI0LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNjdGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXBfb3BzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC96c3dhcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInN3YXBfdGFibGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInN3YXAuaFxcXCJcXG5AQCAtMjYzLDEyICsyNjQsMjEgQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiBcXHR1bnNpZ25lZCBpbnQgY2lfc3RhcnQsIGNpX29mZiwgY2lfZW5kO1xcbiBcXHRib29sIGZvbGlvX3N3YXBwZWQgPSBmYWxzZSwgbmVlZF9mcmVlID0gZmFsc2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdHZvaWQgKnNoYWRvd19wYXJrZWQ7XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0UoX19zd2FwX2VudHJ5X3RvX2NsdXN0ZXIoZW50cnkpICE9IGNpKTtcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogQSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHBhcmtlZCB0aGUgc2xvdCdzIG9yaWdpbmFsIHNoYWRvdyBpbiB0aGVcXG4rXFx0ICogenN3YXAgdHJlZTogcmVzdG9yZSBpdCBpbnRvIHRoZSBzbG90IGZvciBsYXRlciBzd2FwLWluLlxcbitcXHQgKi9cXG4rXFx0c2hhZG93X3BhcmtlZCA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XFxuK1xcdGlmIChzaGFkb3dfcGFya2VkKVxcbitcXHRcXHRzaGFkb3cgPSBzaGFkb3dfcGFya2VkO1xcbitcXG4gXFx0c2kgPSBfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSk7XFxuIFxcdGNpX3N0YXJ0ID0gc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KTtcXG4gXFx0Y2lfZW5kID0gY2lfc3RhcnQgKyBucl9wYWdlcztcXG5AQCAtNDA5LDcgKzQxOSw4IEBAIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuIFxcdFxcdFxcdFxcdFxcdHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcXG4gXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LFxcbitcXHRcXHRcXHRcXHRcXHR2b2lkICoqc2hhZG93cClcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXHRzd3BfZW50cnlfdCBlbnRyeTtcXG5AQCAtNDgzLDM3ICs0OTQsNDIgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuIFxcbiBcXHQvKiBtZW1zdyB1bmNoYXJnZXMgc3dhcCB3aGVuIGZvbGlvIGlzIGFkZGVkIHRvIHN3YXAgY2FjaGUgKi9cXG4gXFx0bWVtY2cxX3N3YXBpbihmb2xpbyk7XFxuLVxcdGlmIChzaGFkb3cpXFxuLVxcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcXG4gXFxuIFxcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcXG4gXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTtcXG4gXFxuLVxcdC8qIENhbGxlciB3aWxsIGluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgbmV3X2ZvbGlvICovXFxuLVxcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xcbitcXHRpZiAoc2hhZG93cClcXG4rXFx0XFx0KnNoYWRvd3AgPSBzaGFkb3c7XFxuK1xcbiBcXHRyZXR1cm4gZm9saW87XFxuIH1cXG4gXFxuIC8qKlxcbi0gKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cXG4rICogX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cXG4gICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcXG4gICogQGdmcDogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3NcXG4gICogQG9yZGVyczogYWxsb2NhdGlvbiBvcmRlcnMsIG11c3QgYmUgbm9uIHplcm9cXG4gICogQHZtZjogZmF1bHQgaW5mb3JtYXRpb25cXG4gICogQG1wb2w6IE5VTUEgbWVtb3J5IGFsbG9jYXRpb24gcG9saWN5IHRvIGJlIGFwcGxpZWRcXG4gICogQGlseDogTlVNQSBpbnRlcmxlYXZlIGluZGV4LCBmb3IgdXNlIG9ubHkgd2hlbiBNUE9MX0lOVEVSTEVBVkVcXG4rICogQHNoYWRvd3A6IFJldHVybnMgdGhlIHNoYWRvdyB0aGUgYWxsb2NhdGlvbiBkaXNwbGFjZWQsIE5VTEwgdG8gaWdub3JlXFxuICAqXFxuICAqIEFsbG9jYXRlIGEgZm9saW8gaW4gdGhlIHN3YXAgY2FjaGUgZm9yIG9uZSBzd2FwIHNsb3QsIHR5cGljYWxseSBiZWZvcmVcXG4gICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieVxcbiAgKiBAdGFyZ19lbnRyeSBtdXN0IGhhdmUgYSBub24temVybyBzd2FwIGNvdW50IChzd2FwcGVkIG91dCkuXFxuICAqXFxuKyAqIFRoZSByZXR1cm5lZCBmb2xpbyBpcyBsb2NrZWQgYW5kIGlzIE5PVCBvbiB0aGUgTFJVLiBUaGUgY2FsbGVyIG11c3QgZWl0aGVyXFxuKyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZVxcbisgKiBpdCBkaXJlY3RseSBvbmNlIGRvbmU7IGEgZm9saW8gbGVmdCBvZmYgdGhlIExSVSBpcyB1bnJlY2xhaW1hYmxlIGFuZCBsZWFrcy5cXG4rICpcXG4gICogQ29udGV4dDogQ2FsbGVyIG11c3QgcHJvdGVjdCB0aGUgc3dhcCBkZXZpY2Ugd2l0aCByZWZlcmVuY2UgY291bnQgb3IgbG9ja3MuXFxuICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwXFxuICAqIGNhY2hlLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYgZmFpbGVkIGR1ZSB0byByYWNlLCBPT00gb3IgaW52YWxpZCBhcmd1bWVudHMuXFxuICAqL1xcbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbi1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcXG4rc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB2b2lkICoqc2hhZG93cClcXG4ge1xcbiBcXHRpbnQgb3JkZXIsIGVycjtcXG4gXFx0c3RydWN0IGZvbGlvICpyZXQ7XFxuQEAgLTUyOCw3ICs1NDQsNyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRyZXQgPSBfX3N3YXBfY2FjaGVfYWxsb2MoY2ksIHRhcmdfZW50cnksIGdmcCwgb3JkZXIsXFxuLVxcdFxcdFxcdFxcdFxcdCB2bWYsIG1wb2wsIGlseCk7XFxuK1xcdFxcdFxcdFxcdFxcdCB2bWYsIG1wb2wsIGlseCwgc2hhZG93cCk7XFxuIFxcdFxcdGlmICghSVNfRVJSKHJldCkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRlcnIgPSBQVFJfRVJSKHJldCk7XFxuQEAgLTY0NCwxNyArNjYwLDIzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCxcXG4gXFx0XFx0cGdvZmZfdCBpbHgsIGJvb2wgcmVhZGFoZWFkKVxcbiB7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XFxuIFxcbiBcXHRkbyB7XFxuIFxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xcbiBcXHRcXHRpZiAoZm9saW8pXFxuIFxcdFxcdFxcdHJldHVybiBmb2xpbztcXG4tXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcXG4rXFx0XFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgaWx4LCBcXHUwMDI2c2hhZG93KTtcXG4gXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuIFxcbiBcXHRpZiAoSVNfRVJSX09SX05VTEwoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuK1xcdGlmIChzaGFkb3cpXFxuK1xcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcXG4rXFxuK1xcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xcbiBcXHRzd2FwX3JlYWRfZm9saW8oY3R4LCBmb2xpbyk7XFxuIFxcdGlmIChyZWFkYWhlYWQpIHtcXG4gXFx0XFx0Zm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7XFxuQEAgLTY4NSwxNyArNzA3LDIzIEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxuIHtcXG4gXFx0c3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9O1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbitcXHR2b2lkICpzaGFkb3cgPSBOVUxMO1xcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcXG4gXFx0XFx0aWYgKGZvbGlvKVxcbiBcXHRcXHRcXHRyZXR1cm4gZm9saW87XFxuLVxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcXG4rXFx0XFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBpbHgsIFxcdTAwMjZzaGFkb3cpO1xcbiBcXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcXG4gXFxuIFxcdGlmIChJU19FUlIoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm4gZm9saW87XFxuIFxcbitcXHRpZiAoc2hhZG93KVxcbitcXHRcXHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XFxuK1xcbitcXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcXG4gXFx0c3dhcF9yZWFkX2ZvbGlvKFxcdTAwMjZjdHgsIGZvbGlvKTtcXG4gXFx0c3dhcF9yZWFkX3N1Ym1pdChcXHUwMDI2Y3R4KTtcXG4gXFx0cmV0dXJuIGZvbGlvO1xcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xcbmluZGV4IDQ4ZDNjZDQwZGVmZGIuLjYxMDFmOTBlOTFkMmEgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xcbisrKyBiL21tL3N3YXBmaWxlLmNcXG5AQCAtMTg4NSw3ICsxODg1LDcgQEAgdm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gICogICBDUFUxXFx0XFx0XFx0XFx0Q1BVMlxcbiAgKiAgIGRvX3N3YXBfcGFnZSgpXFxuICAqICAgICAuLi5cXHRcXHRcXHRcXHRzd2Fwb2ZmK3N3YXBvblxcbi0gKiAgICAgc3dhcF9jYWNoZV9hbGxvY19mb2xpbygpXFxuKyAqICAgICBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oKVxcbiAgKiAgICAgICAvLyBjaGVjayBzd2FwX21hcFxcbiAgKiAgICAgLy8gdmVyaWZ5IFBURSBub3QgY2hhbmdlZFxcbiAgKlxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggNDBkM2YxYjQ4YTc0Yy4uMWNhNjQ4OWU1MDEyMiAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTQ4LDYgKzQ4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmludGsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RheC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvenN3YXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BzaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZXdhbGsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcXHUwMDNlXFxuQEAgLTc1Myw3ICs3NTQsOCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcXG4gXFx0XFx0c3dwX2VudHJ5X3Qgc3dhcCA9IGZvbGlvLVxcdTAwM2Vzd2FwO1xcbiBcXG4tXFx0XFx0aWYgKHJlY2xhaW1lZCBcXHUwMDI2XFx1MDAyNiAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKVxcbitcXHRcXHRpZiAocmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICF6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcXG4gXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG4gXFx0XFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xcbiBcXHRcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTtcXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXFxuaW5kZXggODQxMmY0ODQwYWUzNS4uOGU0NWIwYmFlYjM2ZCAxMDA2NDRcXG4tLS0gYS9tbS93b3JraW5nc2V0LmNcXG4rKysgYi9tbS93b3JraW5nc2V0LmNcXG5AQCAtNTM2LDE2ICs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxuIFxcdHJldHVybiByZWZhdWx0X2Rpc3RhbmNlIFxcdTAwM2M9IHdvcmtpbmdzZXRfc2l6ZTtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxcbi0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cXG4tICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxcbi0gKlxcbi0gKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHlcXG4tICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxcbi0gKiBwcmVzc3VyZSBjYXVzZWQgdGhlIGV2aWN0aW9uLlxcbi0gKi9cXG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbitzdGF0aWMgdm9pZCBfX3dvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3csXFxuK1xcdFxcdFxcdFxcdCBib29sIGxydV9tYW5hZ2VkKVxcbiB7XFxuIFxcdGJvb2wgZmlsZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbkBAIC01NzcsNyArNTY5LDE2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4gXFx0aWYgKCF3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHNoYWRvdywgZmlsZSwgXFx1MDAyNndvcmtpbmdzZXQsIHRydWUpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xcbitcXHQvKlxcbitcXHQgKiBBbiBMUlUtbWFuYWdlZCBmb2xpbyBtYXkgc2l0IGluIGEgcGVyLUNQVSBiYXRjaCwgd2hpY2ggY2Fubm90IGJlXFxuK1xcdCAqIGRldGVybWluZWQgaGVyZTogc2V0dGluZyB0aGUgZmxhZyB3b3VsZCByYWNlIHRoZSBkcmFpbiBhbmQgbGVhdmUgaXRcXG4rXFx0ICogZGlzYWdyZWVpbmcgd2l0aCB0aGUgbGlzdC4gZm9saW9fYWN0aXZhdGUoKSBpcyBzYWZlLCBidXQgbWlzc2VzIHRoZVxcbitcXHQgKiBhY3RpdmF0aW9uIGZvciBzdWNoIGEgZm9saW8uXFxuK1xcdCAqL1xcbitcXHRpZiAobHJ1X21hbmFnZWQpXFxuK1xcdFxcdGZvbGlvX2FjdGl2YXRlKGZvbGlvKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcXG4gXFx0d29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7XFxuIFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBXT1JLSU5HU0VUX0FDVElWQVRFX0JBU0UgKyBmaWxlLCBucik7XFxuIFxcbkBAIC01OTAsNiArNTkxLDQzIEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4gXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiB9XFxuIFxcbisvKipcXG4rICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXFxuKyAqIEBmb2xpbzogVGhlIGZyZXNobHkgYWxsb2NhdGVkIHJlcGxhY2VtZW50IGZvbGlvLlxcbisgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXFxuKyAqXFxuKyAqIENhbGN1bGF0ZXMgYW5kIGV2YWx1YXRlcyB0aGUgcmVmYXVsdCBkaXN0YW5jZSBvZiB0aGUgcHJldmlvdXNseVxcbisgKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5XFxuKyAqIHByZXNzdXJlIGNhdXNlZCB0aGUgZXZpY3Rpb24uXFxuKyAqXFxuKyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgbm90IG9uIHRoZSBMUlUgeWV0LCB0aGUgY2FsbGVyIGFkZHNcXG4rICogaXQgd2l0aCBmb2xpb19hZGRfbHJ1KCkgYWZ0ZXJ3YXJkcy5cXG4rICovXFxuK3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4re1xcbitcXHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCBmYWxzZSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHlcXG4rICogZXZpY3RlZCBmb2xpbyB0aGF0IGlzIGFscmVhZHkgb24gdGhlIExSVS5cXG4rICogQGZvbGlvOiBUaGUgZm9saW8gdGhlIGV2aWN0aW9uIGlzIHJlZmF1bHRlZCBpbnRvLlxcbisgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXFxuKyAqXFxuKyAqIExpa2Ugd29ya2luZ3NldF9yZWZhdWx0KCksIGJ1dCBmb3IgYSBmb2xpbyB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGFkZGVkXFxuKyAqIHRvIHRoZSBMUlUsIHdoaWNoIGhhcyB0byBiZSBhY3RpdmF0ZWQgYnkgbW92aW5nIGl0IGJldHdlZW4gdGhlIGxpc3RzXFxuKyAqIHJhdGhlciB0aGFuIGJ5IHNldHRpbmcgUEdfYWN0aXZlLlxcbisgKlxcbisgKiBUaGUgYWN0aXZhdGlvbiBpcyBiZXN0IGVmZm9ydDogYSBmb2xpbyBzdGlsbCBzaXR0aW5nIGluIGEgcGVyLUNQVSBMUlVcXG4rICogYmF0Y2ggY2Fubm90IGJlIG1vdmVkIHlldCBhbmQgaXMgbGVmdCBpbmFjdGl2ZS5cXG4rICpcXG4rICogQ29udGV4dDogQGZvbGlvIG11c3QgYmUgbG9ja2VkIGFuZCBhbHJlYWR5IGFkZGVkIHRvIHRoZSBMUlUuXFxuKyAqL1xcbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuK3tcXG4rXFx0X193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgdHJ1ZSk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB3b3JraW5nc2V0X2FjdGl2YXRpb24gLSBub3RlIGEgcGFnZSBhY3RpdmF0aW9uXFxuICAqIEBmb2xpbzogRm9saW8gdGhhdCBpcyBiZWluZyBhY3RpdmF0ZWQuXFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXFxuaW5kZXggYzI3ZTIyZDA2N2UzZS4uOTA0ODIxZGI0MDFmMyAxMDA2NDRcXG4tLS0gYS9tbS96c3dhcC5jXFxuKysrIGIvbW0venN3YXAuY1xcbkBAIC05NjEsNiArOTYxLDc5IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAqIHdyaXRlYmFjayBjb2RlXFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuK1xcbisjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMClcXG4rXFxuKy8qKlxcbisgKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj9cXG4rICogQGZvbGlvOiB0aGUgZm9saW8gYmVpbmcgZXhhbWluZWQgKHR5cGljYWxseSBhIHN3YXAgY2FjaGUgZm9saW8gdW5kZXIgcmVjbGFpbSlcXG4rICpcXG4rICogQSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgd2hlbiBldmVyeSBvbmUgb2YgaXRzIHN3YXAgb2Zmc2V0cyBob2xkc1xcbisgKiBhIHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93IChhIHJlYWwgc2hhZG93IG9yIHRoZSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XXFxuKyAqIHNlbnRpbmVsKSBpbiB0aGUgenN3YXAgdHJlZSByYXRoZXIgdGhhbiBhIGxpdmUgenN3YXAgZW50cnkuXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiBAZm9saW8gaXMgYSB3cml0ZWJhY2sgYnVmZmVyLCBpbiB3aGljaCBjYXNlIHRoZSByZWNsYWltIHBhdGhcXG4rICogbXVzdCBub3QgbWludCBhIGZyZXNoIHdvcmtpbmdzZXQgc2hhZG93IGZvciBpdC5cXG4rICovXFxuK2Jvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVxcdTAwM2Vzd2FwO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbitcXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXG4rXFx0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcXG4rXFx0XFx0c3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgKyBpKTtcXG4rXFxuK1xcdFxcdGlmICgheGFfaXNfdmFsdWUoeGFfbG9hZChzd2FwX3pzd2FwX3RyZWUoZSksIG9mZnNldCArIGkpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyAtIHJldHJpZXZlIGFuZCBjbGVhciBAZm9saW8ncyBwYXJrZWQgc2hhZG93KHMpXFxuKyAqIEBmb2xpbzogdGhlIHdyaXRlYmFjayBidWZmZXIgZm9saW8gKG9yIHRoZSBzd2FwaW4gZm9saW8gdGhhdCBjb25zdW1lZCBpdClcXG4rICpcXG4rICogUmVtb3ZlIGFueSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvd3MgZm9yIEBmb2xpbydzIHN3YXAgb2Zmc2V0KHMpIGZyb20gdGhlXFxuKyAqIHpzd2FwIHRyZWUuXFxuKyAqXFxuKyAqIFJldHVybjogdGhlIHByZXNlcnZlZCB3b3JraW5nc2V0IHNoYWRvdywgb3IgTlVMTCBpZiB0aGUgc2xvdChzKSBoYWQgbm8gc2hhZG93XFxuKyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkXFxuKyAqIHNoYWRvdyBpbnRvIHRoZSBzd2FwIHNsb3QgKGJ1ZmZlciBkcm9wcGVkKSBvciBmZWVkcyBpdCB0b1xcbisgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoKSAoYnVmZmVyIGNvbnN1bWVkIGJ5IGEgc3dhcGluKTsgY2xlYXJpbmdcXG4rICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LlxcbisgKi9cXG4rdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0c3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xcbitcXHR2b2lkICpzaGFkb3cgPSBOVUxMO1xcbitcXHR1bnNpZ25lZCBsb25nIGk7XFxuK1xcbitcXHRpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XFxuK1xcdFxcdHN3cF9lbnRyeV90IGUgPSBzd3BfZW50cnkoc3dwX3R5cGUoc3dwKSwgb2Zmc2V0ICsgaSk7XFxuK1xcdFxcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoZSk7XFxuK1xcdFxcdHZvaWQgKnBhcmtlZCA9IHhhX2xvYWQodHJlZSwgb2Zmc2V0ICsgaSk7XFxuK1xcbitcXHRcXHRpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQgKyBpKTtcXG4rXFx0XFx0aWYgKHBhcmtlZCAhPSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XKVxcbitcXHRcXHRcXHRzaGFkb3cgPSBwYXJrZWQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBzaGFkb3c7XFxuK31cXG4rXFxuIC8qXFxuICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsXFxuICAqIGRlY29tcHJlc3NpbmcgdGhlIGVudHJ5IGRhdGEgaW50byB0aGUgZm9saW8sIGFuZCBpc3N1aW5nIGFcXG5AQCAtOTc2LDEyICsxMDQ5LDE0IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFx0XFx0XFx0XFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxcbiB7XFxuK1xcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XFxuIFxcdHN0cnVjdCB4YXJyYXkgKnRyZWU7XFxuIFxcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3BlbnRyeSk7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XFxuIFxcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcXG4gXFx0c3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9O1xcbitcXHR2b2lkICpzaGFkb3c7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cXG5AQCAtOTkwLDggKzEwNjUsOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbiBcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gXFxuIFxcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XFxuLVxcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XFxuK1xcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXFxuK1xcdFxcdFxcdFxcdFxcdCBOT19JTlRFUkxFQVZFX0lOREVYLCBcXHUwMDI2c2hhZG93KTtcXG4gXFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcXG4gXFxuIFxcdC8qXFxuQEAgLTEwMDMsNiArMTA3OCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuIFxcdCAqL1xcbiBcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xcbitcXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIGZvbGlvIGlzIGxvY2tlZCwgYW5kIHRoZSBzd2FwY2FjaGUgaXMgbm93IHNlY3VyZWQgYWdhaW5zdFxcbkBAIC0xMDI0LDcgKzExMDAsMTIgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHhhX2VyYXNlKHRyZWUsIG9mZnNldCk7XFxuK1xcdC8qXFxuK1xcdCAqIEEgc2xvdCB3aXRoIG5vIHNoYWRvdyBhbHJlYWR5IHJlYWRzIGJhY2sgYXMgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVzpcXG4rXFx0ICogdGhlIHN3YXAgdGFibGUgbWFya3MgYSBzd2FwcGVkIG91dCBzbG90IHdpdGggeGFfbWtfdmFsdWUoMCkgYW5kIGhvbGRzXFxuK1xcdCAqIHRoZSBzaGFkb3csIHdoZW4gdGhlcmUgaXMgb25lLCBpbiB0aGF0IHNhbWUgdmFsdWUuXFxuK1xcdCAqL1xcbitcXHR4YV9zdG9yZSh0cmVlLCBvZmZzZXQsIHNoYWRvdywgR0ZQX0tFUk5FTCk7XFxuIFxcbiBcXHRjb3VudF92bV9ldmVudChaU1dQV0IpO1xcbiBcXHRpZiAoZW50cnktXFx1MDAzZW9iamNnKVxcbkBAIC0xMDQ0LDcgKzExMjUsMTUgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFxuIG91dDpcXG4gXFx0aWYgKHJldCkge1xcbi1cXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBhbGxvY2F0aW9uIGFib3ZlIG92ZXJ3cm90ZSB0aGUgc2xvdCdzIHNoYWRvdyBhbmQgbm90aGluZ1xcbitcXHRcXHQgKiBoYXMgYmVlbiBwYXJrZWQgZm9yIGl0IHlldCwgc28gcmVzdG9yZSBpdCBhcyB0aGUgZm9saW8gbGVhdmVzXFxuK1xcdFxcdCAqIHRoZSBzd2FwIGNhY2hlLCBvciB0aGUgZXZpY3Rpb24gaXQgcmVjb3JkcyBpcyBsb3N0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhzd3BlbnRyeSksIG9mZnNldCk7XFxuK1xcdFxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd3BlbnRyeSwgc2hhZG93KTtcXG4rXFx0XFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuK1xcdFxcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuIFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIFxcdH1cXG4gXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG5AQCAtMTQ4Nyw2ICsxNTc2LDE3IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpO1xcbiBcXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBBIHdyaXRlYmFjayBidWZmZXIgd2hvc2UgSU8gZmFpbGVkIGlzIHJlZGlydGllZCBhbmQgbGVmdCBpbiB0aGVcXG4rXFx0ICogc3dhcCBjYWNoZSwgc28gcmVjbGFpbSB3cml0ZXMgaXQgb3V0IGFnYWluLiBXcml0ZWJhY2sgYWxyZWFkeVxcbitcXHQgKiBkZWNpZGVkIHRoaXMgZGF0YSBiZWxvbmdzIG9uIGRpc2ssIHNvIHNlbmQgaXQgdGhlcmUgaW5zdGVhZCBvZlxcbitcXHQgKiBjb21wcmVzc2luZyBpdCBiYWNrIGludG8genN3YXAuIFRoaXMgYWxzbyBsZWF2ZXMgdGhlIHNoYWRvd1xcbitcXHQgKiBwYXJrZWQgZm9yIHRoZSBidWZmZXIgaW4gcGxhY2UsIHNvIGl0IGlzIHN0aWxsIHJlc3RvcmVkIGludG9cXG4rXFx0ICogdGhlIHNsb3Qgb25jZSB0aGUgZm9saW8gbGVhdmVzIHRoZSBzd2FwIGNhY2hlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRpZiAoIXpzd2FwX2VuYWJsZWQpXFxuIFxcdFxcdGdvdG8gY2hlY2tfb2xkO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTE6MTg6MzUuMjg4NDc0NDUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MjgxMjM2NTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJcIixcbiAgICBcInpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c1wiLFxuICAgIFwienN3YXBfd3JpdGViYWNrX2VudHJ5XCIsXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkXCIsXG4gICAgXCJfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB6c3dhcCBzdWJzeXN0ZW0gbG9naWMsIHNwZWNpZmljYWxseSByZWZhdWx0IHRyYWNraW5nIGFuZCBzaGFkb3cgZW50cnkgcHJlc2VydmF0aW9uIGFjcm9zcyB6c3dhcCB3cml0ZWJhY2sgYW5kIHN3YXAtaW4gcGF0aHMuIEl0IGludHJvZHVjZXMgbmV3IGhlbHBlcnMgKHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIsIHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cywgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKSBhbmQgbW9kaWZpZXMgc3dhcCBjYWNoZSBhbGxvY2F0aW9uIGFuZCB3cml0ZWJhY2sgaGFuZGxpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgd2FycmFudCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjA1ZWM2Yjg4OWM5ZGEwOWE5YmQ4ODcyNGZmOWMzMjE3ZDE4NWI4ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDExOjE4OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXG5pbmRleCAzMGMxOTNhMTIwN2UxLi5kZmI3MTUzMjM2ZjVjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbkBAIC0zNSw2ICszNSw4IEBAIHZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcbiB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XG4gYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xuK2Jvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbit2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2Vsc2VcbiBcbiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9O1xuQEAgLTY5LDYgKzcxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfTElOVVhfWlNXQVBfSCAqL1xuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCA4YmUzZDI4ZDljM2Q4Li5kMTk5NDdhM2MzMzg1IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTMxLDYgKzMxLDcgQEAgdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xuIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XG4rdm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcbiB2b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiAvKiBtbS9mb2xpby5jICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggYTJhNjNhZTA5NjdjMS4uMDA0M2E5MjM3YThkZCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTQ4NTcsNiArNDg1Nyw3IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcztcbiBcdHB0ZV90ICpwdGVwO1xuK1x0dm9pZCAqc2hhZG93O1xuIFxuIFx0aWYgKCFwdGVfdW5tYXBfc2FtZSh2bWYpKVxuIFx0XHRnb3RvIG91dDtcbkBAIC00OTg0LDYgKzQ5ODUsMTAgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdGdvdG8gb3V0X3BhZ2U7XG4gXHR9XG4gXG4rXHRzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xuK1x0aWYgKHNoYWRvdylcbitcdFx0d29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKGZvbGlvLCBzaGFkb3cpO1xuK1xuIFx0LypcbiBcdCAqIEtTTSBzb21ldGltZXMgaGFzIHRvIGNvcHkgb24gcmVhZCBmYXVsdHMsIGZvciBleGFtcGxlLCBpZlxuIFx0ICogZm9saW8tXHUwMDNlaW5kZXggb2Ygbm9uLWtzbSBmb2xpb3Mgd291bGQgYmUgbm9ubGluZWFyIGluc2lkZSB0aGVcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggYzMyMTJmZGVjZTliNC4uNTNmNTdhZDE5NGEzOSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0yNDY1LDYgKzI0NjUsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XG4gXHRpbnQgZXJyb3IsIG5yX3BhZ2VzLCBvcmRlcjtcbiBcdHBnb2ZmX3Qgb2Zmc2V0O1xuK1x0dm9pZCAqc2hhZG93O1xuIFxuIFx0Vk1fQlVHX09OKCEqZm9saW9wIHx8ICF4YV9pc192YWx1ZSgqZm9saW9wKSk7XG4gXHRpbmRleF9lbnRyeSA9IHJhZGl4X3RvX3N3cF9lbnRyeSgqZm9saW9wKTtcbkBAIC0yNTc2LDYgKzI1NzcsMTAgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdCAqL1xuIFx0YXJjaF9zd2FwX3Jlc3RvcmUoZm9saW9fc3dhcChzd2FwLCBmb2xpbyksIGZvbGlvKTtcbiBcbitcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7XG4rXG4gXHRpZiAoc2htZW1fc2hvdWxkX3JlcGxhY2VfZm9saW8oZm9saW8sIGdmcCkpIHtcbiBcdFx0ZXJyb3IgPSBzaG1lbV9yZXBsYWNlX2ZvbGlvKFx1MDAyNmZvbGlvLCBnZnAsIGluZm8sIGluZGV4LCB2bWEpO1xuIFx0XHRpZiAoZXJyb3IpXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCAwYjVkNTA3NzM5YmNiLi5kZGQxMDhiNDFkMzNhIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4rKysgYi9tbS9zd2FwLmhcbkBAIC0zMTIsOSArMzEyLDEwIEBAIGJvb2wgc3dhcF9jYWNoZV9oYXNfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpO1xuIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9nZXRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XG4rc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsXG4rXHRcdFx0XHQgICAgICAgdm9pZCAqKnNoYWRvd3ApO1xuIC8qIEJlbG93IGhlbHBlcnMgcmVxdWlyZSB0aGUgY2FsbGVyIHRvIGxvY2sgYW5kIHBhc3MgaW4gdGhlIHN3YXAgY2x1c3Rlci4gKi9cbiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggMzA1ODc3ZTFmNGQ3Yi4uZTgwYTY5NGRkZGI0NyAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtMjQsNiArMjQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXBfb3BzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC96c3dhcC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbiAjaW5jbHVkZSBcInN3YXBfdGFibGUuaFwiXG4gI2luY2x1ZGUgXCJzd2FwLmhcIlxuQEAgLTI2MywxMiArMjY0LDIxIEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdHVuc2lnbmVkIGludCBjaV9zdGFydCwgY2lfb2ZmLCBjaV9lbmQ7XG4gXHRib29sIGZvbGlvX3N3YXBwZWQgPSBmYWxzZSwgbmVlZF9mcmVlID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1x0dm9pZCAqc2hhZG93X3BhcmtlZDtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShfX3N3YXBfZW50cnlfdG9fY2x1c3RlcihlbnRyeSkgIT0gY2kpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG4gXG4rXHQvKlxuK1x0ICogQSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHBhcmtlZCB0aGUgc2xvdCdzIG9yaWdpbmFsIHNoYWRvdyBpbiB0aGVcbitcdCAqIHpzd2FwIHRyZWU6IHJlc3RvcmUgaXQgaW50byB0aGUgc2xvdCBmb3IgbGF0ZXIgc3dhcC1pbi5cbitcdCAqL1xuK1x0c2hhZG93X3BhcmtlZCA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4rXHRpZiAoc2hhZG93X3BhcmtlZClcbitcdFx0c2hhZG93ID0gc2hhZG93X3BhcmtlZDtcbitcbiBcdHNpID0gX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpO1xuIFx0Y2lfc3RhcnQgPSBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpO1xuIFx0Y2lfZW5kID0gY2lfc3RhcnQgKyBucl9wYWdlcztcbkBAIC00MDksNyArNDE5LDggQEAgdm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdFx0XHRzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHRcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuK1x0XHRcdFx0XHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcbitcdFx0XHRcdFx0dm9pZCAqKnNoYWRvd3ApXG4ge1xuIFx0aW50IGVycjtcbiBcdHN3cF9lbnRyeV90IGVudHJ5O1xuQEAgLTQ4MywzNyArNDk0LDQyIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFxuIFx0LyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovXG4gXHRtZW1jZzFfc3dhcGluKGZvbGlvKTtcbi1cdGlmIChzaGFkb3cpXG4tXHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbiBcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XG4gXG4tXHQvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqL1xuLVx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4rXHRpZiAoc2hhZG93cClcbitcdFx0KnNoYWRvd3AgPSBzaGFkb3c7XG4rXG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuIC8qKlxuLSAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuKyAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG4gICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcbiAgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnc1xuICAqIEBvcmRlcnM6IGFsbG9jYXRpb24gb3JkZXJzLCBtdXN0IGJlIG5vbiB6ZXJvXG4gICogQHZtZjogZmF1bHQgaW5mb3JtYXRpb25cbiAgKiBAbXBvbDogTlVNQSBtZW1vcnkgYWxsb2NhdGlvbiBwb2xpY3kgdG8gYmUgYXBwbGllZFxuICAqIEBpbHg6IE5VTUEgaW50ZXJsZWF2ZSBpbmRleCwgZm9yIHVzZSBvbmx5IHdoZW4gTVBPTF9JTlRFUkxFQVZFXG4rICogQHNoYWRvd3A6IFJldHVybnMgdGhlIHNoYWRvdyB0aGUgYWxsb2NhdGlvbiBkaXNwbGFjZWQsIE5VTEwgdG8gaWdub3JlXG4gICpcbiAgKiBBbGxvY2F0ZSBhIGZvbGlvIGluIHRoZSBzd2FwIGNhY2hlIGZvciBvbmUgc3dhcCBzbG90LCB0eXBpY2FsbHkgYmVmb3JlXG4gICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieVxuICAqIEB0YXJnX2VudHJ5IG11c3QgaGF2ZSBhIG5vbi16ZXJvIHN3YXAgY291bnQgKHN3YXBwZWQgb3V0KS5cbiAgKlxuKyAqIFRoZSByZXR1cm5lZCBmb2xpbyBpcyBsb2NrZWQgYW5kIGlzIE5PVCBvbiB0aGUgTFJVLiBUaGUgY2FsbGVyIG11c3QgZWl0aGVyXG4rICogYWRkIGl0IHRvIHRoZSBMUlUgd2l0aCBmb2xpb19hZGRfbHJ1KCkgc28gcGFnZSByZWNsYWltIGNhbiBmaW5kIGl0LCBvciBmcmVlXG4rICogaXQgZGlyZWN0bHkgb25jZSBkb25lOyBhIGZvbGlvIGxlZnQgb2ZmIHRoZSBMUlUgaXMgdW5yZWNsYWltYWJsZSBhbmQgbGVha3MuXG4rICpcbiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy5cbiAgKiBSZXR1cm46IFJldHVybnMgdGhlIGZvbGlvIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkIGFuZCBmb2xpbyBpcyBpbiB0aGUgc3dhcFxuICAqIGNhY2hlLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYgZmFpbGVkIGR1ZSB0byByYWNlLCBPT00gb3IgaW52YWxpZCBhcmd1bWVudHMuXG4gICovXG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LFxuK1x0XHRcdFx0ICAgICAgIHZvaWQgKipzaGFkb3dwKVxuIHtcbiBcdGludCBvcmRlciwgZXJyO1xuIFx0c3RydWN0IGZvbGlvICpyZXQ7XG5AQCAtNTI4LDcgKzU0NCw3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4gXG4gXHRkbyB7XG4gXHRcdHJldCA9IF9fc3dhcF9jYWNoZV9hbGxvYyhjaSwgdGFyZ19lbnRyeSwgZ2ZwLCBvcmRlcixcbi1cdFx0XHRcdFx0IHZtZiwgbXBvbCwgaWx4KTtcbitcdFx0XHRcdFx0IHZtZiwgbXBvbCwgaWx4LCBzaGFkb3dwKTtcbiBcdFx0aWYgKCFJU19FUlIocmV0KSlcbiBcdFx0XHRicmVhaztcbiBcdFx0ZXJyID0gUFRSX0VSUihyZXQpO1xuQEAgLTY0NCwxNyArNjYwLDIzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCxcbiBcdFx0cGdvZmZfdCBpbHgsIGJvb2wgcmVhZGFoZWFkKVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHR2b2lkICpzaGFkb3cgPSBOVUxMO1xuIFxuIFx0ZG8ge1xuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdFx0aWYgKGZvbGlvKVxuIFx0XHRcdHJldHVybiBmb2xpbztcbi1cdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbitcdFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLFxuK1x0XHRcdFx0XHRcdCBpbHgsIFx1MDAyNnNoYWRvdyk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0aWYgKHNoYWRvdylcbitcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuK1xuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRzd2FwX3JlYWRfZm9saW8oY3R4LCBmb2xpbyk7XG4gXHRpZiAocmVhZGFoZWFkKSB7XG4gXHRcdGZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pO1xuQEAgLTY4NSwxNyArNzA3LDIzIEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4ge1xuIFx0c3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4rXHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLFxuK1x0XHRcdFx0XHRcdCBpbHgsIFx1MDAyNnNoYWRvdyk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIFx0XHRyZXR1cm4gZm9saW87XG4gXG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4rXG4rXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9mb2xpbyhcdTAwMjZjdHgsIGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9zdWJtaXQoXHUwMDI2Y3R4KTtcbiBcdHJldHVybiBmb2xpbztcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggNDhkM2NkNDBkZWZkYi4uNjEwMWY5MGU5MWQyYSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xODg1LDcgKzE4ODUsNyBAQCB2b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuICAqICAgQ1BVMVx0XHRcdFx0Q1BVMlxuICAqICAgZG9fc3dhcF9wYWdlKClcbiAgKiAgICAgLi4uXHRcdFx0XHRzd2Fwb2ZmK3N3YXBvblxuLSAqICAgICBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKClcbisgKiAgICAgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKClcbiAgKiAgICAgICAvLyBjaGVjayBzd2FwX21hcFxuICAqICAgICAvLyB2ZXJpZnkgUFRFIG5vdCBjaGFuZ2VkXG4gICpcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA0MGQzZjFiNDhhNzRjLi4xY2E2NDg5ZTUwMTIyIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDgsNiArNDgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbkBAIC03NTMsNyArNzU0LDggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbi1cdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbitcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICF6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcbiBcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuIFx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4gXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggODQxMmY0ODQwYWUzNS4uOGU0NWIwYmFlYjM2ZCAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuKysrIGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNTM2LDE2ICs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4gXHRyZXR1cm4gcmVmYXVsdF9kaXN0YW5jZSBcdTAwM2M9IHdvcmtpbmdzZXRfc2l6ZTtcbiB9XG4gXG4tLyoqXG4tICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXG4tICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uXG4tICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxuLSAqXG4tICogQ2FsY3VsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSByZWZhdWx0IGRpc3RhbmNlIG9mIHRoZSBwcmV2aW91c2x5XG4tICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxuLSAqIHByZXNzdXJlIGNhdXNlZCB0aGUgZXZpY3Rpb24uXG4tICovXG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuK3N0YXRpYyB2b2lkIF9fd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyxcbitcdFx0XHRcdCBib29sIGxydV9tYW5hZ2VkKVxuIHtcbiBcdGJvb2wgZmlsZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbkBAIC01NzcsNyArNTY5LDE2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdGlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsIFx1MDAyNndvcmtpbmdzZXQsIHRydWUpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuK1x0LypcbitcdCAqIEFuIExSVS1tYW5hZ2VkIGZvbGlvIG1heSBzaXQgaW4gYSBwZXItQ1BVIGJhdGNoLCB3aGljaCBjYW5ub3QgYmVcbitcdCAqIGRldGVybWluZWQgaGVyZTogc2V0dGluZyB0aGUgZmxhZyB3b3VsZCByYWNlIHRoZSBkcmFpbiBhbmQgbGVhdmUgaXRcbitcdCAqIGRpc2FncmVlaW5nIHdpdGggdGhlIGxpc3QuIGZvbGlvX2FjdGl2YXRlKCkgaXMgc2FmZSwgYnV0IG1pc3NlcyB0aGVcbitcdCAqIGFjdGl2YXRpb24gZm9yIHN1Y2ggYSBmb2xpby5cbitcdCAqL1xuK1x0aWYgKGxydV9tYW5hZ2VkKVxuK1x0XHRmb2xpb19hY3RpdmF0ZShmb2xpbyk7XG4rXHRlbHNlXG4rXHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuIFx0d29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9CQVNFICsgZmlsZSwgbnIpO1xuIFxuQEAgLTU5MCw2ICs1OTEsNDMgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuIFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIH1cbiBcbisvKipcbisgKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby5cbisgKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbisgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXG4rICpcbisgKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHlcbisgKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5XG4rICogcHJlc3N1cmUgY2F1c2VkIHRoZSBldmljdGlvbi5cbisgKlxuKyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgbm90IG9uIHRoZSBMUlUgeWV0LCB0aGUgY2FsbGVyIGFkZHNcbisgKiBpdCB3aXRoIGZvbGlvX2FkZF9scnUoKSBhZnRlcndhcmRzLlxuKyAqL1xuK3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbit7XG4rXHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCBmYWxzZSk7XG4rfVxuK1xuKy8qKlxuKyAqIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseVxuKyAqIGV2aWN0ZWQgZm9saW8gdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBMUlUuXG4rICogQGZvbGlvOiBUaGUgZm9saW8gdGhlIGV2aWN0aW9uIGlzIHJlZmF1bHRlZCBpbnRvLlxuKyAqIEBzaGFkb3c6IFNoYWRvdyBlbnRyeSBvZiB0aGUgZXZpY3RlZCBmb2xpby5cbisgKlxuKyAqIExpa2Ugd29ya2luZ3NldF9yZWZhdWx0KCksIGJ1dCBmb3IgYSBmb2xpbyB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGFkZGVkXG4rICogdG8gdGhlIExSVSwgd2hpY2ggaGFzIHRvIGJlIGFjdGl2YXRlZCBieSBtb3ZpbmcgaXQgYmV0d2VlbiB0aGUgbGlzdHNcbisgKiByYXRoZXIgdGhhbiBieSBzZXR0aW5nIFBHX2FjdGl2ZS5cbisgKlxuKyAqIFRoZSBhY3RpdmF0aW9uIGlzIGJlc3QgZWZmb3J0OiBhIGZvbGlvIHN0aWxsIHNpdHRpbmcgaW4gYSBwZXItQ1BVIExSVVxuKyAqIGJhdGNoIGNhbm5vdCBiZSBtb3ZlZCB5ZXQgYW5kIGlzIGxlZnQgaW5hY3RpdmUuXG4rICpcbisgKiBDb250ZXh0OiBAZm9saW8gbXVzdCBiZSBsb2NrZWQgYW5kIGFscmVhZHkgYWRkZWQgdG8gdGhlIExSVS5cbisgKi9cbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4re1xuK1x0X193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgdHJ1ZSk7XG4rfVxuK1xuIC8qKlxuICAqIHdvcmtpbmdzZXRfYWN0aXZhdGlvbiAtIG5vdGUgYSBwYWdlIGFjdGl2YXRpb25cbiAgKiBAZm9saW86IEZvbGlvIHRoYXQgaXMgYmVpbmcgYWN0aXZhdGVkLlxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBjMjdlMjJkMDY3ZTNlLi45MDQ4MjFkYjQwMWYzIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTk2MSw2ICs5NjEsNzkgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIHdyaXRlYmFjayBjb2RlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbitcbisjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMClcbitcbisvKipcbisgKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj9cbisgKiBAZm9saW86IHRoZSBmb2xpbyBiZWluZyBleGFtaW5lZCAodHlwaWNhbGx5IGEgc3dhcCBjYWNoZSBmb2xpbyB1bmRlciByZWNsYWltKVxuKyAqXG4rICogQSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgd2hlbiBldmVyeSBvbmUgb2YgaXRzIHN3YXAgb2Zmc2V0cyBob2xkc1xuKyAqIGEgcGFya2VkIHdyaXRlYmFjayBzaGFkb3cgKGEgcmVhbCBzaGFkb3cgb3IgdGhlIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1dcbisgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIEBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIsIGluIHdoaWNoIGNhc2UgdGhlIHJlY2xhaW0gcGF0aFxuKyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuXG4rICovXG4rYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0c3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tXHUwMDNlc3dhcDtcbitcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcbitcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcbitcdFx0c3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgKyBpKTtcbitcbitcdFx0aWYgKCF4YV9pc192YWx1ZSh4YV9sb2FkKHN3YXBfenN3YXBfdHJlZShlKSwgb2Zmc2V0ICsgaSkpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKipcbisgKiB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MgLSByZXRyaWV2ZSBhbmQgY2xlYXIgQGZvbGlvJ3MgcGFya2VkIHNoYWRvdyhzKVxuKyAqIEBmb2xpbzogdGhlIHdyaXRlYmFjayBidWZmZXIgZm9saW8gKG9yIHRoZSBzd2FwaW4gZm9saW8gdGhhdCBjb25zdW1lZCBpdClcbisgKlxuKyAqIFJlbW92ZSBhbnkgcGFya2VkIHdyaXRlYmFjayBzaGFkb3dzIGZvciBAZm9saW8ncyBzd2FwIG9mZnNldChzKSBmcm9tIHRoZVxuKyAqIHpzd2FwIHRyZWUuXG4rICpcbisgKiBSZXR1cm46IHRoZSBwcmVzZXJ2ZWQgd29ya2luZ3NldCBzaGFkb3csIG9yIE5VTEwgaWYgdGhlIHNsb3QocykgaGFkIG5vIHNoYWRvd1xuKyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkXG4rICogc2hhZG93IGludG8gdGhlIHN3YXAgc2xvdCAoYnVmZmVyIGRyb3BwZWQpIG9yIGZlZWRzIGl0IHRvXG4rICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKCkgKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nXG4rICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LlxuKyAqL1xuK3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1x0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7XG4rXHR2b2lkICpzaGFkb3cgPSBOVUxMO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1xuK1x0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XG4rXHRcdHN3cF9lbnRyeV90IGUgPSBzd3BfZW50cnkoc3dwX3R5cGUoc3dwKSwgb2Zmc2V0ICsgaSk7XG4rXHRcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoZSk7XG4rXHRcdHZvaWQgKnBhcmtlZCA9IHhhX2xvYWQodHJlZSwgb2Zmc2V0ICsgaSk7XG4rXG4rXHRcdGlmICgheGFfaXNfdmFsdWUocGFya2VkKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0ICsgaSk7XG4rXHRcdGlmIChwYXJrZWQgIT0gWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVylcbitcdFx0XHRzaGFkb3cgPSBwYXJrZWQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gc2hhZG93O1xuK31cbitcbiAvKlxuICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsXG4gICogZGVjb21wcmVzc2luZyB0aGUgZW50cnkgZGF0YSBpbnRvIHRoZSBmb2xpbywgYW5kIGlzc3VpbmcgYVxuQEAgLTk3NiwxMiArMTA0OSwxNCBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbiB7XG4rXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuIFx0c3RydWN0IHhhcnJheSAqdHJlZTtcbiBcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3BlbnRyeSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcbiBcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcbiBcdHN0cnVjdCBzd2FwX2lvX2N0eCBjdHggPSB7fTtcbitcdHZvaWQgKnNoYWRvdztcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbkBAIC05OTAsOCArMTA2NSw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuIFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbi1cdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxuLVx0XHRcdFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xuK1x0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbitcdFx0XHRcdFx0IE5PX0lOVEVSTEVBVkVfSU5ERVgsIFx1MDAyNnNoYWRvdyk7XG4gXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFxuIFx0LypcbkBAIC0xMDAzLDYgKzEwNzgsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0ICovXG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXG4gXHQvKlxuIFx0ICogZm9saW8gaXMgbG9ja2VkLCBhbmQgdGhlIHN3YXBjYWNoZSBpcyBub3cgc2VjdXJlZCBhZ2FpbnN0XG5AQCAtMTAyNCw3ICsxMTAwLDEyIEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcbitcdC8qXG4rXHQgKiBBIHNsb3Qgd2l0aCBubyBzaGFkb3cgYWxyZWFkeSByZWFkcyBiYWNrIGFzIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c6XG4rXHQgKiB0aGUgc3dhcCB0YWJsZSBtYXJrcyBhIHN3YXBwZWQgb3V0IHNsb3Qgd2l0aCB4YV9ta192YWx1ZSgwKSBhbmQgaG9sZHNcbitcdCAqIHRoZSBzaGFkb3csIHdoZW4gdGhlcmUgaXMgb25lLCBpbiB0aGF0IHNhbWUgdmFsdWUuXG4rXHQgKi9cbitcdHhhX3N0b3JlKHRyZWUsIG9mZnNldCwgc2hhZG93LCBHRlBfS0VSTkVMKTtcbiBcbiBcdGNvdW50X3ZtX2V2ZW50KFpTV1BXQik7XG4gXHRpZiAoZW50cnktXHUwMDNlb2JqY2cpXG5AQCAtMTA0NCw3ICsxMTI1LDE1IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gb3V0OlxuIFx0aWYgKHJldCkge1xuLVx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBhbGxvY2F0aW9uIGFib3ZlIG92ZXJ3cm90ZSB0aGUgc2xvdCdzIHNoYWRvdyBhbmQgbm90aGluZ1xuK1x0XHQgKiBoYXMgYmVlbiBwYXJrZWQgZm9yIGl0IHlldCwgc28gcmVzdG9yZSBpdCBhcyB0aGUgZm9saW8gbGVhdmVzXG4rXHRcdCAqIHRoZSBzd2FwIGNhY2hlLCBvciB0aGUgZXZpY3Rpb24gaXQgcmVjb3JkcyBpcyBsb3N0LlxuK1x0XHQgKi9cbitcdFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhzd3BlbnRyeSksIG9mZnNldCk7XG4rXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd3BlbnRyeSwgc2hhZG93KTtcbitcdFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4rXHRcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHR9XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuQEAgLTE0ODcsNiArMTU3NiwxNyBAQCBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XG4gXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSk7XG4gXG4rXHQvKlxuK1x0ICogQSB3cml0ZWJhY2sgYnVmZmVyIHdob3NlIElPIGZhaWxlZCBpcyByZWRpcnRpZWQgYW5kIGxlZnQgaW4gdGhlXG4rXHQgKiBzd2FwIGNhY2hlLCBzbyByZWNsYWltIHdyaXRlcyBpdCBvdXQgYWdhaW4uIFdyaXRlYmFjayBhbHJlYWR5XG4rXHQgKiBkZWNpZGVkIHRoaXMgZGF0YSBiZWxvbmdzIG9uIGRpc2ssIHNvIHNlbmQgaXQgdGhlcmUgaW5zdGVhZCBvZlxuK1x0ICogY29tcHJlc3NpbmcgaXQgYmFjayBpbnRvIHpzd2FwLiBUaGlzIGFsc28gbGVhdmVzIHRoZSBzaGFkb3dcbitcdCAqIHBhcmtlZCBmb3IgdGhlIGJ1ZmZlciBpbiBwbGFjZSwgc28gaXQgaXMgc3RpbGwgcmVzdG9yZWQgaW50b1xuK1x0ICogdGhlIHNsb3Qgb25jZSB0aGUgZm9saW8gbGVhdmVzIHRoZSBzd2FwIGNhY2hlLlxuK1x0ICovXG4rXHRpZiAoenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihmb2xpbykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGlmICghenN3YXBfZW5hYmxlZClcbiBcdFx0Z290byBjaGVja19vbGQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMToxODozNS4yODg0NzU2OTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzgxNDUwMzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIGdpdmVuIGl0cyB0b3VjaCBwb2ludHMgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAobW0vKSwgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBXZSdyZSB0YWxraW5nIGFib3V0IGZ1bmRhbWVudGFsIGNoYW5nZXMgaGVyZSwgc28gd2UgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuRmlyc3QsIEkgc2VlIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgYSBidW5jaCBvZiBrZXkgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L3pzd2FwLmhgLCBgbW0vaW50ZXJuYWwuaGAsIGBtbS9tZW1vcnkuY2AsIGBtbS9zaG1lbS5jYCwgYG1tL3N3YXAuaGAsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vc3dhcGZpbGUuY2AsIGBtbS92bXNjYW4uY2AsIGBtbS93b3JraW5nc2V0LmNgLCBhbmQgYG1tL3pzd2FwLmNgLiBBIHNpZ25pZmljYW50IG92ZXJsYXAgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNwYWNlIG1lYW5zIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyAqd2hhdCogc3BlY2lmaWNhbGx5IGhhcyBjaGFuZ2VkLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIHpzd2FwLCBzd2FwIGNhY2hlIGJlaGF2aW9yLCB3b3JraW5nc2V0IHJlZmF1bHQgdHJhY2tpbmcsIGFuZCBzd2FwLWluIGxvZ2ljIHdpdGhpbiBgZG9fc3dhcF9wYWdlYCBhbmQgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGFuZCB0aGUgd3JpdGViYWNrIGluIHpzd2FwLiBUaGVzZSBhcmUgYWxsIGNvcmUgZnVuY3Rpb25hbGl0aWVzLCBhbmQgYW55IHN1YnRsZSBjaGFuZ2UgaW4gdGhlc2UgYXJlYXMgY291bGQgYmUgYSBwb3RlbnRpYWwgYnVnIHdhaXRpbmcgdG8gYmUgZm91bmQuXG5cbk5vdywgbGV0J3MgZXhhbWluZSB0aGUgbW9kaWZpZWQgbG9naWMgaW4gZGV0YWlsOiBUaGUgaW50cm9kdWNlZC9tb2RpZmllZCBmdW5jdGlvbnMsIGxpa2UgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgLCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCwgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAsIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2AsIGBfX3JlbW92ZV9tYXBwaW5nYCwgdGhlIGhhbmRsaW5nIG9mIHNoYWRvd3MsIHdyaXRlYmFjayBjaGFuZ2VzLiBUaGlzIGNsZWFybHkgc2hvd3Mgc3Vic3RhbnRpYWwgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudC4gVGhlcmUncyBhIGxvdCBvZiBwb3RlbnRpYWwgZm9yIHN5emthbGxlciB0byB1bmNvdmVyIHVuZXhwZWN0ZWQgc3RhdGVzIG9yIGludGVyYWN0aW9ucyBoZXJlLlxuXG5SZWdhcmRpbmcgXCJydWxlcyxcIiBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgZXhlY3V0aW9uLiBUaGUgXCJXb3J0aEZ1enppbmdcIiBmbGFnIGlzIHNldCB0byBUUlVFLCBhcyB3ZSdyZSBsb29raW5nIGF0IGNvcmUgc3Vic3lzdGVtcyB3aXRoIGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHdvcmtpbmdzZXQgbGlmZWN5Y2xlIGFuZCB6c3dhcCB3cml0ZWJhY2sgaGFuZGxpbmcuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LlxuXG5OZXh0IHN0ZXA6IEknbSBnb2luZyB0byBkZXRlcm1pbmUgd2hhdCBzcGVjaWZpYyBLY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSwgZXNwZWNpYWxseSB0aG9zZSByZWxhdGVkIHRvIFpTV0FQLiBJJ2xsIHVzZSBncmVwcGVyIG9yIGZpbGUgcmVhZGluZyB0byBsb29rIGZvciBaU1dBUCBhbmQgcmVsYXRlZCBjb25maWdzIHRvIGVuc3VyZSBzeXprYWxsZXIgY2FuIHJlYWNoIGFsbCBhZmZlY3RlZCBjb2RlIHBhdGhzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gZGVmaW5lIHRoZSBjb25maWd1cmF0aW9ucyBuZWNlc3NhcnkgdG8gYWNjdXJhdGVseSBmdXp6IHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg0MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDExOjE4OjQxLjA2OTkyNzg3NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTA0MTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXFxuLS1cXG5tbS9LY29uZmlnLTIxLVxcbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXFxubW0vS2NvbmZpZy0yMy1cXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0zNC1cXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctNDQtXFxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbm1tL0tjb25maWctNDYtXFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9NTk9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTc2LVxcbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXFxubW0vS2NvbmZpZy03OC1cXHRib29sIFxcXCJEZWZsYXRlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04Mi1cXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXFxubW0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJMWk9cXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg4LVxcbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcXG5tbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQtXFxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxcbm1tL0tjb25maWctOTYtXFx0Ym9vbCBcXFwiTFo0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDAtXFxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xcbm1tL0tjb25maWctMTAyLVxcdGJvb2wgXFxcIkxaNEhDXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDYtXFxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXFxubW0vS2NvbmZpZy0xMDgtXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxcbm1tL0tjb25maWctMTEzLVxcbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDExOjE4OjQxLjEyMDk3NzEzNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3MzE3NDQxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIFpTV0FQIERlcGVuZGVuY2llcyBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYFpTV0FQYCBjb25maWd1cmF0aW9uIGFuZCBpdHMgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJJ2xsIGp1bXAgcmlnaHQgdG8gYXJvdW5kIGxpbmUgMjAsIGFzIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50LXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGVuZCB0byBiZSBncm91cGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBvcHRpb25zICptdXN0KiBiZSBlbmFibGVkIG9yIGFyZSByZXF1aXJlZCBiZWZvcmUgYFpTV0FQYCBpcyBldmVuIHByZXNlbnRlZCBhcyBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIHdpbGwgc2F2ZSBtZSB0aW1lIGRlYnVnZ2luZyBkb3duIHRoZSBsaW5lOyB0aGVyZSdzIG5vIHBvaW50IGNoZWNraW5nICp3aHkqIFpTV0FQIGlzIGRpc2FibGVkIHdpdGhvdXQgdmVyaWZ5aW5nIGl0cyBkZXBlbmRlbmNpZXMuIEknbSBsb29raW5nIGZvciBkaXJlY3QgZGVwZW5kZW5jaWVzLCBsaWtlIGBFWFBFUklNRU5UQUxgLCBvciBwb3RlbnRpYWxseSBpbmRpcmVjdCBvbmVzIHRocm91Z2ggb3RoZXIgZmVhdHVyZSBvcHRpb25zIHRoYXQgbXVzdCBiZSBhY3RpdmUgYmVmb3JlIHRoZSBgWlNXQVBgIG9wdGlvbiBpcyBwcmVzZW50LiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBpbnZvbHZlIGBib29sYCBvciBgdHJpc3RhdGVgIG9wdGlvbnMgYW5kIHNvbWUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTE6MTg6NDQuODUyNzIzMTY5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0bWVudSBcXFwiTWVtb3J5IE1hbmFnZW1lbnQgb3B0aW9uc1xcXCJcXG4gICA0OlxcdFxcbiAgIDU6XFx0I1xcbiAgIDY6XFx0IyBGb3Igc29tZSByZWFzb24gbWljcm9ibGF6ZSBhbmQgbmlvczIgaGFyZCBjb2RlIFNXQVA9bi4gIEhvcGVmdWxseSB3ZSBjYW5cXG4gICA3OlxcdCMgYWRkIHByb3BlciBTV0FQIHN1cHBvcnQgdG8gdGhlbSwgaW4gd2hpY2ggY2FzZSB0aGlzIGNhbiBiZSByZW1vdmUuXFxuICAgODpcXHQjXFxuICAgOTpcXHRjb25maWcgQVJDSF9OT19TV0FQXFxuICAxMDpcXHRcXHRib29sXFxuICAxMTpcXHRcXG4gIDEyOlxcdG1lbnVjb25maWcgU1dBUFxcbiAgMTM6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXFxcIlxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBNTVUgXFx1MDAyNlxcdTAwMjYgQkxPQ0sgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfTk9fU1dBUFxcbiAgMTU6XFx0XFx0ZGVmYXVsdCB5XFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XFxuICAxODpcXHRcXHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcXG4gIDE5OlxcdFxcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XFxuICAyMDpcXHRcXHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBaU1dBUFxcbiAgMjM6XFx0XFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gU1dBUFxcbiAgMjU6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgMjY6XFx0XFx0c2VsZWN0IFpTTUFMTE9DXFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXFxuICAyOTpcXHRcXHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xcbiAgMzA6XFx0XFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxcbiAgMzE6XFx0XFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcXG4gIDMyOlxcdFxcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxcbiAgMzM6XFx0XFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG4gIDM2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXFxuICA0MDpcXHRcXHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHQgIFRoZSBzZWxlY3Rpb24gbWFkZSBoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSBrZXJuZWxcXG4gIDQzOlxcdFxcdCAgY29tbWFuZCBsaW5lICd6c3dhcC5lbmFibGVkPScgb3B0aW9uLlxcbiAgNDQ6XFx0XFxuICA0NTpcXHRjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbiAgNDY6XFx0XFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4gIDQ3OlxcdFxcdGRlcGVuZHMgb24gWlNXQVBcXG4gIDQ4OlxcdFxcdGRlZmF1bHQgblxcbiAgNDk6XFx0XFx0aGVscFxcbiAgNTA6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIHpzd2FwIHNocmlua2VyIHdpbGwgYmUgZW5hYmxlZCwgYW5kIHRoZSBwYWdlc1xcbiAgNTE6XFx0XFx0ICBzdG9yZWQgaW4gdGhlIHpzd2FwIHBvb2wgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIGZvciByZWNsYWltIChpLmVcXG4gIDUyOlxcdFxcdCAgd3JpdHRlbiBiYWNrIHRvIHRoZSBiYWNraW5nIHN3YXAgZGV2aWNlKSBvbiBtZW1vcnkgcHJlc3N1cmUuXFxuICA1MzpcXHRcXG4gIDU0OlxcdFxcdCAgVGhpcyBtZWFucyB0aGF0IHpzd2FwIHdyaXRlYmFjayBjb3VsZCBoYXBwZW4gZXZlbiBpZiB0aGUgcG9vbCBpc1xcbiAgNTU6XFx0XFx0ICBub3QgeWV0IGZ1bGwsIG9yIHRoZSBjZ3JvdXAgenN3YXAgbGltaXQgaGFzIG5vdCBiZWVuIHJlYWNoZWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDExOjE4OjQ0Ljg1Mjg4MDY0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyMTIyMDMzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgU3dhcCBDb25maWd1cmF0aW9uIGZvciBPcHRpbWl6YXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHN3YXAgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIGBDT05GSUdfU1dBUGAgYW5kIGBDT05GSUdfWlNXQVBgIGFyZSB0aGUgYmlnIG9uZXMuIE5hdHVyYWxseSwgSSBzaG91bGQgY2hlY2sgd2hldGhlciBgQ09ORklHX1pTV0FQX0RFRkFVTFRfT05gIG9yIGBDT05GSUdfWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAgYXJlIHJlbGV2YW50IGZsYWdzIGhlcmUsIGFsdGhvdWdoIHRoZSBjb3JlIG9mIGl0IHdpbGwgYWx3YXlzIGNlbnRlciBhcm91bmQgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGBaU1dBUGAgYW5kIGBTV0FQYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IG1peCBoZXJlLlxuXG5Ob3csIEkgYWxzbyBuZWVkIHRvIGJlIG1pbmRmdWwgb2Ygb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2Ugc3dhcCBiZWhhdmlvci4gSXQncyB0aW1lIHRvIGNvbnNpZGVyIHRoZSBtZW1vcnkgY29udHJvbCBncm91cHM7IGRvZXMgYE1FTUNHYCwgYE1FTUNHX1YxYCwgb3IgYE1FTUNHX1NXQVBgIGhhdmUgYSByb2xlIGluIHRoZSBjb25maWd1cmF0aW9uPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoZXNlIGludGVyYWN0LlxuXG5BbmQgbGFzdGx5LCBJIHNob3VsZCBsb29rIGRpcmVjdGx5IGF0IHRoZSBpbXBsZW1lbnRhdGlvbjsgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvZGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYG1tL3N3YXBfc3RhdGUuY2AgZmlsZSBhbmQgcG90ZW50aWFsbHkgb3RoZXIgYXJlYXMgZm9yIGhvdyBgbWVtY2cxX3N3YXBpbmAgaXMgaGFuZGxlZC4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjU3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTE6MTg6NDkuMDY1MDg2MjEyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwOTk0NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19aU1dBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Nzk9b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxubW0vTWFrZWZpbGU6ODA6b2JqLSQoQ09ORklHX1pTV0FQKVxcdCs9IHpzd2FwLm9cXG5tbS9NYWtlZmlsZS04MS1vYmotJChDT05GSUdfSEFTX0RNQSlcXHQrPSBkbWFwb29sLm9cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01OTk9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjE1LSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo2MTY6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy02MTctXFx0WlNXUElOLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1OTc9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjA3LVxcdHsgXFxcInNobWVtXFxcIixcXHRcXHRcXHROUl9TSE1FTVxcdFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE2MDg6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy0xNjA5LVxcdHsgXFxcInpzd2FwXFxcIixcXHRcXHRcXHRNRU1DR19aU1dBUF9CXFx0XFx0XFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MjY2PW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQyNzgtXFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LCBQQUdFX0NPVU5URVJfTUFYKTtcXG5tbS9tZW1jb250cm9sLmM6NDI3OTojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTQyODAtXFx0bWVtY2ctXFx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDQ2OD1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZXNldChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ0NzQtXFx0V1JJVEVfT05DRShtZW1jZy1cXHUwMDNlb29tX2dyb3VwLCBmYWxzZSk7XFxubW0vbWVtY29udHJvbC5jOjQ0NzU6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy00NDc2LVxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZXpzd2FwX21heCwgUEFHRV9DT1VOVEVSX01BWCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTc0Nj1zdGF0aWMgdm9pZCBfX2luaXQgbWVtY2dfc3RydWN0X2NoZWNrKHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc5OS1cXHRcXHRcXHRcXHQgICAgICB2bXN0YXRzKTtcXG5tbS9tZW1jb250cm9sLmM6NTgwMDojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTU4MDEtXFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IG1lbV9jZ3JvdXAsIG1lbWNnX3JlYWRfbW9zdGx5LFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTYxMTk9c3RhdGljIHN0cnVjdCBjZnR5cGUgc3dhcF9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTYxNTMtXFxubW0vbWVtY29udHJvbC5jOjYxNTQ6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy02MTU1LS8qKlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTYzMzE9c3RhdGljIHN0cnVjdCBjZnR5cGUgenN3YXBfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MzQ5LX07XFxubW0vbWVtY29udHJvbC5jOjYzNTA6I2VuZGlmIC8qIENPTkZJR19aU1dBUCAqL1xcbm1tL21lbWNvbnRyb2wuYy02MzUxLVxcbm1tL21lbWNvbnRyb2wuYz02MzUyPXN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjM2MC0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NjM2MTojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTYzNjItXFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHpzd2FwX2ZpbGVzKSk7XFxuLS1cXG5tbS92bXN0YXQuYz0xMTk5PWNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xcbi0tXFxubW0vdm1zdGF0LmMtMTQ2NC0jZW5kaWZcXG5tbS92bXN0YXQuYzoxNDY1OiNpZmRlZiBDT05GSUdfWlNXQVBcXG5tbS92bXN0YXQuYy0xNDY2LVxcdFtJKFpTV1BJTildXFx0XFx0XFx0XFx0PSBcXFwienN3cGluXFxcIixcXG4tLVxcbm1tL3pzd2FwLmM9ODY9c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKTtcXG4tLVxcbm1tL3pzd2FwLmMtODgtLyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cXG5tbS96c3dhcC5jOjg5OnN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgenN3YXBfZXZlcl9lbmFibGVkKTtcXG5tbS96c3dhcC5jOjkwOnN0YXRpYyBib29sIHpzd2FwX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9ERUZBVUxUX09OKTtcXG5tbS96c3dhcC5jLTkxLXN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxcbi0tXFxubW0venN3YXAuYz05Nz1tb2R1bGVfcGFyYW1fY2IoZW5hYmxlZCwgXFx1MDAyNnpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzLCBcXHUwMDI2enN3YXBfZW5hYmxlZCwgMDY0NCk7XFxuLS1cXG5tbS96c3dhcC5jLTk5LS8qIENyeXB0byBjb21wcmVzc29yIHRvIHVzZSAqL1xcbm1tL3pzd2FwLmM6MTAwOnN0YXRpYyBjaGFyICp6c3dhcF9jb21wcmVzc29yID0gQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVDtcXG5tbS96c3dhcC5jLTEwMS1zdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKixcXG4tLVxcbm1tL3pzd2FwLmM9MTIxPXN0YXRpYyBib29sIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQgPSBJU19FTkFCTEVEKFxcbm1tL3pzd2FwLmM6MTIyOlxcdFxcdENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OKTtcXG5tbS96c3dhcC5jLTEyMy1tb2R1bGVfcGFyYW1fbmFtZWQoc2hyaW5rZXJfZW5hYmxlZCwgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCwgYm9vbCwgMDY0NCk7XFxuLS1cXG5tbS96c3dhcC5jPTEzMD1ib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZClcXG5tbS96c3dhcC5jLTEzMS17XFxubW0venN3YXAuYzoxMzI6XFx0cmV0dXJuICFzdGF0aWNfYnJhbmNoX21heWJlKENPTkZJR19aU1dBUF9ERUZBVUxUX09OLCBcXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcXG5tbS96c3dhcC5jLTEzMy19XFxuLS1cXG5tbS96c3dhcC5jPTM0ND1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2sodm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtMzQ2LVxcdGlmICghY3J5cHRvX2hhc19hY29tcCh6c3dhcF9jb21wcmVzc29yLCAwLCAwKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3pzd2FwLmM6MzQ3OlxcdCAgICBzdHJjbXAoenN3YXBfY29tcHJlc3NvciwgQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVCkpIHtcXG5tbS96c3dhcC5jLTM0OC1cXHRcXHRwcl9lcnIoXFxcImNvbXByZXNzb3IgJXMgbm90IGF2YWlsYWJsZSwgdXNpbmcgZGVmYXVsdCAlc1xcXFxuXFxcIixcXG5tbS96c3dhcC5jOjM0OTpcXHRcXHQgICAgICAgenN3YXBfY29tcHJlc3NvciwgQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVCk7XFxubW0venN3YXAuYy0zNTAtXFx0XFx0cGFyYW1fZnJlZV9jaGFycChcXHUwMDI2enN3YXBfY29tcHJlc3Nvcik7XFxubW0venN3YXAuYzozNTE6XFx0XFx0enN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XFxubW0venN3YXAuYy0zNTItXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMToxODo0OS4xMTYwODQ1NzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NzU5MjQwOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gncyBGb2N1cyBTeW1ib2xzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nIGFuZCB0ZXN0aW5nLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZWl0aGVyIG5ldyBvciBtb2RpZmllZC4gSSd2ZSBnb3QgYSBsaXN0IGhlcmU6XG5cbjEuICBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmA6IEEgbmV3IGZ1bmN0aW9uIHdpdGhpbiBgbW0venN3YXAuY2AgdGhhdCBjaGVja3MgaWYgYSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIuIFNvdW5kcyBzcGVjaWZpYyB0byB6c3dhcCBsb2dpYy5cbjIuICBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYDogQW5vdGhlciBuZXcgenN3YXAgZnVuY3Rpb24gaW4gYG1tL3pzd2FwLmNgLCBoYW5kbGluZyB0aGUgcmV0cmlldmFsIGFuZCBjbGVhcmluZyBvZiBwYXJrZWQgc2hhZG93cy4gRGVmaW5pdGVseSB6c3dhcC1zcGVjaWZpYy5cbjMuICBgenN3YXBfd3JpdGViYWNrX2VudHJ5YDogQSAqbW9kaWZpZWQqIHN0YXRpYyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgaG93IGl0J3MgY2hhbmdlZCwgYnV0IHRoZSB6c3dhcCBjb250ZXh0IGlzIGNsZWFyLiBUaGUga2V5IGlzIGluIHRoZSBwYXJraW5nIG9mIHRoZSBzaGFkb3dzIGFuZCBlcnJvciBoYW5kbGluZy5cbjQuICBgenN3YXBfc3RvcmVgOiAgVGhpcyBmdW5jdGlvbiBpbiBgbW0venN3YXAuY2AgaGFzIGJlZW4gbW9kaWZpZWQgdG8gaW5jbHVkZSBhIGNoZWNrIHVzaW5nIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgc3VnZ2VzdGluZyBhIGNoYW5nZSBpbiBpdHMgY29yZSBsb2dpYyBjb25jZXJuaW5nIHpzd2FwJ3Mgd3JpdGViYWNrIGJlaGF2aW9yLlxuNS4gIGB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRgOiBBIG5ldyBmdW5jdGlvbiB3aXRoaW4gYG1tL3dvcmtpbmdzZXQuY2AuIFRoaXMgaXMgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCByZWZhdWx0aW5nIG9mIGZvbGlvcyBhbHJlYWR5IG1hbmFnZWQgYnkgdGhlIExSVS4gVGhpcyBpcyBpbnRlcmVzdGluZywgYXMgSSBrbm93IHRoaXMgbG9naWMuXG42LiAgYHdvcmtpbmdzZXRfcmVmYXVsdGA6IE1vZGlmaWVkIGluIGBtbS93b3JraW5nc2V0LmNgLCBidXQgaXQgZGVsZWdhdGVzIHRvIGEgbmV3IGZ1bmN0aW9uLlxuNy4gIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gOiBUaGlzIG9uZSBoYXMgYSBtb2RpZmllZCBzaWduYXR1cmUsIHNwZWNpZmljYWxseSBpbiBgbW0vc3dhcF9zdGF0ZS5jYCwgd2hpY2gsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN3YXAgY2FjaGUsIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBmb3IgaG93IGZvbGlvcyBnZXQgYWxsb2NhdGVkLlxuOC4gIGBzd2FwaW5fc3luY2A6IFRoaXMgZnVuY3Rpb24gbG9va3MgcGVydGluZW50IHRvIHRoZSBvdmVyYWxsIGZlYXR1cmUgbG9naWMuXG5cbkkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggYGRvX3N3YXBfcGFnZWAuIEl0J3MgYSBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIHN3YXAgZW50cmllcywgYW5kIHdoaWxlIGl0J3MgbW9kaWZpZWQsIGl0J3MgYSAqdmVyeSogZ2VuZXJpYyBmdW5jdGlvbi4gV2UgbmVlZCB0byBhdm9pZCBsaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCBieSBuZWFybHkgZXZlcnkgcHJvZ3JhbS4gTGlzdGluZyBpdCB3b3VsZCBkaWx1dGUgdGhlIGZ1enppbmcgZWZmb3J0LiBMZXQncyBtYWtlIHN1cmUgdGhhdCB0aGVzZSBvdGhlciBmdW5jdGlvbnMgKGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCBgenN3YXBfc3RvcmVgLCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCwgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2ApIGFyZSBiZXR0ZXIgY2hvaWNlcyBhcyBmb2N1cyBzeW1ib2xzLiBUaGV5IGFwcGVhciBtb3JlIHNwZWNpZmljIHRvIHRoZSBhbHRlcmVkIGZlYXR1cmUgbG9naWMuXG5cblNvLCBsZXQncyBzb2xpZGlmeSB0aGUgY2FuZGlkYXRlIGZvY3VzIHN5bWJvbHMuIEkgdGhpbmsgdGhlIGtleSBvbmVzIGFyZTpcblxuKiAgIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYFxuKiAgIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgXG4qICAgYHpzd2FwX3dyaXRlYmFja19lbnRyeWBcbiogICBgenN3YXBfc3RvcmVgXG4qICAgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGBcbiogICBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYFxuKiAgIGBzd2FwaW5fc3luY2BcbiogICBgc2htZW1fc3dhcGluX2ZvbGlvYFxuXG5Ob3csIGxldCdzIHVzZSBgZ3JlcHBlcmAgKG9yIHNvbWUgb3RoZXIgdG9vbCkgdG8gZW5zdXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgZGVmaW5lZCBpbiB0aGUga2VybmVsIGFuZCBhcmVuJ3QganVzdCBzdGF0aWMtaW5saW5lZCwgc28gdGhleSBhcmUgc3VpdGFibGUgc3ltYm9scyBmb3IgZm9jdXNlZCBmdXp6aW5nIGFuZCB0ZXN0aW5nLiBJIHdpbGwgY2hlY2sgdGhlIGRlZmluaXRpb25zIG9mIGVhY2ggc3ltYm9sIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MDgsIk91dHB1dFRva2VucyI6MTAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMToxODo1Ni44NzUzMjc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODk0MDg2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGJvb2x8dm9pZHxpbnR8c3RydWN0IGZvbGlvIFxcXFwqKSA/XFxcXCo/KHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJ8enN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzfHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZHx6c3dhcF93cml0ZWJhY2tfZW50cnl8enN3YXBfc3RvcmV8X19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvfHNobWVtX3N3YXBpbl9mb2xpbylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9MzM9dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcXG5tbS9pbnRlcm5hbC5oOjM0OnZvaWQgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XFxubW0vaW50ZXJuYWwuaC0zNS12b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbm1tL3N3YXAuaD0zMTQ9dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9zd2FwLmg6MzE1OnN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vc3dhcC5oLTMxNi1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTQxOT1zdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy01MjgtICovXFxubW0vc3dhcF9zdGF0ZS5jOjUyOTpzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxubW0vc3dhcF9zdGF0ZS5jLTUzMC1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vd29ya2luZ3NldC5jPTYwNj12b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNjI1LSAqL1xcbm1tL3dvcmtpbmdzZXQuYzo2MjY6dm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbm1tL3dvcmtpbmdzZXQuYy02Mjcte1xcbi0tXFxubW0venN3YXAuYz05MTM9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy05NzctICovXFxubW0venN3YXAuYzo5Nzg6Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy05Nzkte1xcbi0tXFxubW0venN3YXAuYy0xMDEwLSAqL1xcbm1tL3pzd2FwLmM6MTAxMTp2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS96c3dhcC5jLTEwMTIte1xcbi0tXFxubW0venN3YXAuYz0xNDg2PXN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgbG9uZyBpbmRleCxcXG4tLVxcbm1tL3pzd2FwLmMtMTU2NS1cXG5tbS96c3dhcC5jOjE1NjY6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3pzd2FwLmMtMTU2Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDExOjE4OjU2Ljk0NDI3MjYwN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTY4MTg5MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkFuYWx5emluZyBac3dhcCBhbmQgU2hhcmVkIE1lbW9yeSBTd2FwIE9wZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGtlcm5lbCBjb2RlIHJlbGF0ZWQgdG8genN3YXAgYW5kIHNoYXJlZCBtZW1vcnkgc3dhcCBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBhbmQgYHNobWVtX3N3YXBpbl9mb2xpb2AuIFRoZXNlIGZ1bmN0aW9ucyByZXNpZGUgaW4gYG1tL3pzd2FwLmNgIGFuZCBgbW0vc2htZW0uY2AgcmVzcGVjdGl2ZWx5LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgenN3YXAgaGFuZGxlcyB0aGUgd3JpdGluZyBiYWNrIG9mIGNvbXByZXNzZWQgZGF0YSBhbmQgaG93IHNoYXJlZCBtZW1vcnkgcGFnZXMgYXJlIHN3YXBwZWQgaW4uIFRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSB0cmFjaW5nIHRoZWlyIGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2UgY2FjaGUsIHN3YXAgY2FjaGUsIGFuZCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2VzLiBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIG9wdGltaXphdGlvbiBtaWdodCBiZSBwb3NzaWJsZSwgYW5kIEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBob3cgdGhlc2UgZnVuY3Rpb25zIHdvcmsgdW5kZXIgZGlmZmVyZW50IG1lbW9yeSBwcmVzc3VyZSBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mjk2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTE6MTk6MDAuMTEyNDYzNjQzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTUyOTA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmM9MTAxMT12b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtMTA0OC0gKi9cXG5tbS96c3dhcC5jOjEwNDk6c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG5tbS96c3dhcC5jLTEwNTAtXFx0XFx0XFx0XFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxcbi0tXFxubW0venN3YXAuYz0xMTY4PXN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxuLS1cXG5tbS96c3dhcC5jLTExOTEtXFx0ICogMS4gV2UgZXh0cmFjdCB0aGUgc3dwX2VudHJ5X3QgdG8gdGhlIHN0YWNrLCBhbGxvd2luZ1xcbm1tL3pzd2FwLmM6MTE5MjpcXHQgKiAgICB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSB0byBwaW4gdGhlIHN3YXAgZW50cnkgYW5kXFxubW0venN3YXAuYy0xMTkzLVxcdCAqICAgIHRoZW4gdmFsaWRhdGUgdGhlIHpzd2FwIGVudHJ5IGFnYWluc3QgdGhhdCBzd2FwIGVudHJ5J3NcXG4tLVxcbm1tL3pzd2FwLmMtMTIyNi1cXG5tbS96c3dhcC5jOjEyMjc6XFx0d3JpdGViYWNrX3Jlc3VsdCA9IHpzd2FwX3dyaXRlYmFja19lbnRyeShlbnRyeSwgc3dwZW50cnkpO1xcbm1tL3pzd2FwLmMtMTIyOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTE6MTk6MDAuMTYxOTk4MDkyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1MzA5NzgxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHNobWVtX3N3YXBpbl9mb2xpb2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgYHNobWVtX3N3YXBpbl9mb2xpb2AuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGNydWNpYWwgZm9yIHRoZSBTaGFyZWQgTWVtb3J5IChTSE1FTSkgc3Vic3lzdGVtLiBJJ20gZ3Vlc3NpbmcgaXQgaGFuZGxlcyB0aGUgcHJvY2VzcyBvZiBicmluZ2luZyBhIGZvbGlvIChhIHBhZ2Ugb3IgZ3JvdXAgb2YgcGFnZXMsIGxpa2VseSkgYmFjayBpbnRvIHBoeXNpY2FsIG1lbW9yeSBmcm9tIHN3YXAuIENvbnNpZGVyaW5nIGl0cyBuYW1lLCBcInN3YXBpblwiIGlzIGEgcHJldHR5IGdvb2QgY2x1ZSwgYXMgaXMgXCJmb2xpb1wiLlxuXG5JIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYW5kIHRoZSAqaG93Ki4gV2h5IGlzIHRoaXMgZm9saW8gYmVpbmcgc3dhcHBlZCBpbj8gSXMgaXQgZHVlIHRvIGEgcGFnZSBmYXVsdCwgYSBwcm9jZXNzIHJlc3VtaW5nIGFmdGVyIGJlaW5nIHN3YXBwZWQgb3V0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNvbnRleHQgb2YgaXRzIGludm9jYXRpb24gaXMgZ29pbmcgdG8gYmUgaW5jcmVkaWJseSBpbXBvcnRhbnQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBzZWUgdGhlIGNhbGxpbmcgcGF0aHMuXG5cbkFuZCB0aGUgXCJob3dcIiBpbnZvbHZlcyBhIHNlcmllcyBvZiBxdWVzdGlvbnM6IFdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBtYW5pcHVsYXRlZD8gSXMgaXQgbG9ja2luZyBjcml0aWNhbCBzZWN0aW9ucz8gSG93IGlzIHRoZSBmb2xpbydzIHN0YXRlIG1hbmFnZWQgZHVyaW5nIHRoZSBzd2FwLWluIHByb2Nlc3M/IFdoYXQgYWJvdXQgZXJyb3IgaGFuZGxpbmc/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvcj8gSSBzdXNwZWN0IGl0IG1heSBiZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBwYWdlIGNhY2hlLCB0aGUgc3dhcCBjYWNoZSwgYW5kIHRoZSBwaHlzaWNhbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLiBJIGFudGljaXBhdGUgYSBsb3Qgb2YgcG9pbnRlciBjaGFzaW5nIGFuZCBzdGF0ZSB0cmFuc2l0aW9ucy4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBmb3IgYW55IGNhbGxzIHRvIGZ1bmN0aW9ucyBsaWtlIGBzd2FwX3JlYWRwYWdlKClgLCBgZm9saW9fbWlncmF0ZSgpYCwgYGZvbGlvX3B1dGJhY2soKWAsIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeSByZWNsYWltIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtZW1vcnkgYmFycmllcnMgdXNlZCB0byBlbnN1cmUgcHJvcGVyIG9yZGVyaW5nLCBlc3BlY2lhbGx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBDUFVzIGFjY2Vzc2luZyB0aGUgc2FtZSBtZW1vcnkgcmVnaW9uLiBMZXQncyBzZWUgaG93IG11Y2ggb2YgdGhpcyBwbGF5cyBvdXQgaW4gdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODc2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTE6MTk6MDQuNjkyOTc4NTc1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDg5NDAzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaG1lbV9zd2FwaW5fZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9MTUyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX2RlZmF1bHRfbWF4X2lub2Rlcyh2b2lkKVxcbi0tXFxubW0vc2htZW0uYy0xNjAtXFxubW0vc2htZW0uYzoxNjE6c3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG5tbS9zaG1lbS5jLTE2Mi1cXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGVudW0gc2dwX3R5cGUgc2dwLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zaG1lbS5jPTE2OTU9c3RhdGljIGludCBzaG1lbV91bnVzZV9zd2FwX2VudHJpZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbm1tL3NobWVtLmMtMTcwNS1cXG5tbS9zaG1lbS5jOjE3MDY6XFx0XFx0ZXJyb3IgPSBzaG1lbV9zd2FwaW5fZm9saW8oaW5vZGUsIGluZGljZXNbaV0sIFxcdTAwMjZmb2xpbywgU0dQX0NBQ0hFLFxcbm1tL3NobWVtLmMtMTcwNy1cXHRcXHRcXHRcXHRcXHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpLCBOVUxMLCBOVUxMKTtcXG4tLVxcbm1tL3NobWVtLmM9MjM3NT1zdGF0aWMgaW50IHNobWVtX3NwbGl0X2xhcmdlX2VudHJ5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5tbS9zaG1lbS5jLTI0NTItICovXFxubW0vc2htZW0uYzoyNDUzOnN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxubW0vc2htZW0uYy0yNDU0LVxcdFxcdFxcdCAgICAgc3RydWN0IGZvbGlvICoqZm9saW9wLCBlbnVtIHNncF90eXBlIHNncCxcXG4tLVxcbm1tL3NobWVtLmM9MjYzMj1zdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtMjY2NC1cXHRpZiAoeGFfaXNfdmFsdWUoZm9saW8pKSB7XFxubW0vc2htZW0uYzoyNjY1OlxcdFxcdGVycm9yID0gc2htZW1fc3dhcGluX2ZvbGlvKGlub2RlLCBpbmRleCwgXFx1MDAyNmZvbGlvLFxcbm1tL3NobWVtLmMtMjY2Ni1cXHRcXHRcXHRcXHRcXHQgICBzZ3AsIGdmcCwgdm1mLCBmYXVsdF90eXBlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTE6MTk6MDQuNzQ3ODc3MTg4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3Mzk2MDUyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gYHN3YXBpbl9zeW5jYCBhbmQgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2A6XG5cbioqSW5pdGlhbCBEaXZlIGludG8gU3dhcCBPcGVyYXRpb25zKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nLCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIGNvcmUgc3dhcCBtZWNoYW5pc20uIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYHN3YXBpbl9zeW5jYCBhbmQgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIGxpa2VseSBmdW5kYW1lbnRhbCB0byB0aGUgcHJvY2VzcyBvZiBicmluZ2luZyBkYXRhIGJhY2sgaW50byBSQU0gZnJvbSB0aGUgc3dhcCBwYXJ0aXRpb24uXG5cbk15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGxpa2VseSBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIG9mIGZvbGlvIHN0cnVjdHVyZXMgYW5kIHByb2JhYmx5IGludGVyYWN0cyB3aXRoIHRoZSBzd2FwIGNhY2hlLiBJJ20gZ3Vlc3NpbmcgaXQgbWlnaHQgaW52b2x2ZSB0aGluZ3MgbGlrZSB0cmFja2luZyBwYWdlIG1ldGFkYXRhLCBhbmQgbWFuYWdpbmcgdGhlIG1hcHBpbmcgb2Ygc3dhcCBlbnRyaWVzIHRvIHBoeXNpY2FsIG1lbW9yeS4gYHN3YXBpbl9zeW5jYCBvbiB0aGUgb3RoZXIgaGFuZCwgc2hvdWxkIGJlIHJlc3BvbnNpYmxlIGZvciBzeW5jaHJvbml6aW5nIHRoZSBkYXRhIGJlaW5nIHJlYWQgaW4gZnJvbSBzd2FwLiBJIHdpbGwgcHJvYmFibHkgZmluZCBpdCBoYW5kbGluZyB0aGluZ3MgbGlrZSBsb2NraW5nLCByZWFkaW5nIGZyb20gdGhlIGRpc2ssIGFuZCB1cGRhdGluZyBwYWdlIHRhYmxlcy5cbkknbGwgYmV0IEknbGwgZmluZCBhIHJhY2UgY29uZGl0aW9uIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgd2l0aCBgc3dhcGluX3N5bmNgIGlmIHRoZXJlIGlzIGNvbnRlbnRpb24gYWNjZXNzaW5nIHRoZSBzd2FwIHBhcnRpdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NTIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMToxOTowOC40ODc0ODU1OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA3NDI5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcGluX3N5bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS5jPTQ4NDQ9dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00OTM2LVxcdFxcdGlmIChkYXRhX3JhY2Uoc2ktXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1dQX1NZTkNIUk9OT1VTX0lPKSlcXG5tbS9tZW1vcnkuYzo0OTM3OlxcdFxcdFxcdGZvbGlvID0gc3dhcGluX3N5bmMoZW50cnksIEdGUF9ISUdIVVNFUl9NT1ZBQkxFLFxcbm1tL21lbW9yeS5jLTQ5MzgtXFx0XFx0XFx0XFx0XFx0ICAgIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHZtZikgfCBCSVQoMCksXFxuLS1cXG5tbS9zaG1lbS5jPTIyNDI9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcF9hbGxvY19mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vc2htZW0uYy0yMjU2LVxcdG1wb2wgPSBzaG1lbV9nZXRfcGdvZmZfcG9saWN5KGluZm8sIGluZGV4LCBvcmRlciwgXFx1MDAyNmlseCk7XFxubW0vc2htZW0uYzoyMjU3OlxcdGZvbGlvID0gc3dhcGluX3N5bmMoZW50cnksIGdmcCwgQklUKG9yZGVyKSwgdm1mLCBtcG9sLCBpbHgpO1xcbm1tL3NobWVtLmMtMjI1OC1cXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xcbi0tXFxubW0vc3dhcC5oPTMzMj1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsXFxubW0vc3dhcC5oLTMzMy1cXHRcXHRzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxubW0vc3dhcC5oOjMzNDpzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBmbGFnLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcXG5tbS9zd2FwLmgtMzM1LVxcdFxcdFxcdCAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XFxuLS1cXG5tbS9zd2FwLmg9NDA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpzd2FwaW5fcmVhZGFoZWFkKHN3cF9lbnRyeV90IHN3cCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9zd2FwLmgtNDEzLVxcbm1tL3N3YXAuaDo0MTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKFxcbm1tL3N3YXAuaC00MTUtXFx0c3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTY1OD1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNjg5LS8qKlxcbm1tL3N3YXBfc3RhdGUuYzo2OTA6ICogc3dhcGluX3N5bmMgLSBzd2FwLWluIG9uZSBvciBtdWx0aXBsZSBlbnRyaWVzIHNraXBwaW5nIHJlYWRhaGVhZC5cXG5tbS9zd2FwX3N0YXRlLmMtNjkxLSAqIEBlbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTcwNC0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6NzA1OnN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxubW0vc3dhcF9zdGF0ZS5jLTcwNi1cXHRcXHRcXHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDExOjE5OjA4LjUzODIzMzU0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk0ODIyOTIxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgbmFpbCBkb3duIHRoZSBmdXp6aW5nIHRhcmdldHMgZm9yIHRoaXMgcGF0Y2guIEkndmUgcGlucG9pbnRlZCBhIHNvbGlkIHNldCBvZiBmb2N1cyBzeW1ib2xzOiBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgYHpzd2FwX3N0b3JlYCwgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAsIGFuZCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gSSBhbHNvIG5lZWQgdG8ga2VlcCBgc3dhcGluX3N5bmNgIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YCBpbiBtaW5kLCBhbHRob3VnaCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCBzZWVtcyB0byBiZSB0aGUgbW9yZSBzcGVjaWZpYyBmdW5jdGlvbiBoZXJlLiBUaGUgY29uZmlndXJhdGlvbnMgSSdtIHdvcmtpbmcgd2l0aCBhcmUgYFNXQVBgIGFuZCBgWlNXQVBgLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCdzIGNsZWFyIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBkZWVwIGludG8gbWVtb3J5IG1hbmFnZW1lbnQsIHBhcnRpY3VsYXJseSB0aGUgd29ya2luZ3NldCByZWZhdWx0IHRyYWNraW5nIGFuZCBob3cgenN3YXAgd3JpdGViYWNrIGFuZCBzd2FwLWluIG9wZXJhdGlvbnMgaGFuZGxlIHRoZXNlIHNoYWRvdyBwYWdlcy4gSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBuZXcgaGVscGVyIGZ1bmN0aW9ucywgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCBmbGFnLCBhbmQgdGhlIGNoYW5nZXMgdG8gc3dhcCBjYWNoZSBhbGxvY2F0aW9uIGFuZCB3cml0ZWJhY2sgcGF0aHMgYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gVGhpcyB0b3VjaGVzIGNvcmUgbW0sIHdoaWNoIG1lYW5zIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBjb3JydXB0aW9uLCByYWNlcywgbGVha3MsIG9yIGV2ZW4gYXNzZXJ0aW9uIGZhaWx1cmVzIGlzIHRoZXJlLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCB3YXJyYW50IGludGVuc2l2ZSBmdXp6aW5nLiBTZWVtcyBsaWtlIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCBjb3JyZWN0bHkuIExldCdzIGdldCB0aGUgdG9vbCBjYWxsIGdvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc0NSwiT3V0cHV0VG9rZW5zIjoyMTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTE6MTk6MTguMDIwNTI4NjE1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAzMDc3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlclwiLFxuICAgIFwienN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzXCIsXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIixcbiAgICBcInpzd2FwX3N0b3JlXCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRcIixcbiAgICBcIl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHpzd2FwIHN1YnN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IHJlZmF1bHQgdHJhY2tpbmcgYW5kIHNoYWRvdyBlbnRyeSBwcmVzZXJ2YXRpb24gYWNyb3NzIHpzd2FwIHdyaXRlYmFjayBhbmQgc3dhcC1pbiBwYXRocy4gSXQgaW50cm9kdWNlcyBuZXcgaGVscGVycyAoenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciwgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzLCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQpIGFuZCBtb2RpZmllcyBzd2FwIGNhY2hlIGFsbG9jYXRpb24gYW5kIHdyaXRlYmFjayBoYW5kbGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gZGV0ZWN0IHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJcIixcbiAgICBcInpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c1wiLFxuICAgIFwienN3YXBfd3JpdGViYWNrX2VudHJ5XCIsXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkXCIsXG4gICAgXCJfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB6c3dhcCBzdWJzeXN0ZW0gbG9naWMsIHNwZWNpZmljYWxseSByZWZhdWx0IHRyYWNraW5nIGFuZCBzaGFkb3cgZW50cnkgcHJlc2VydmF0aW9uIGFjcm9zcyB6c3dhcCB3cml0ZWJhY2sgYW5kIHN3YXAtaW4gcGF0aHMuIEl0IGludHJvZHVjZXMgbmV3IGhlbHBlcnMgKHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIsIHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cywgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKSBhbmQgbW9kaWZpZXMgc3dhcCBjYWNoZSBhbGxvY2F0aW9uIGFuZCB3cml0ZWJhY2sgaGFuZGxpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgd2FycmFudCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDExOjE5OjE4LjEwMDg0NDUwNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NTQyNzU1NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMToxOToxOC4xMDE1NjkxMjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxODY1MzU0NjQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS8gKHN3YXAgY2FjaGUsIHpzd2FwIHdyaXRlYmFjaywgYW5kIHdvcmtpbmdzZXQgcmVmYXVsdCB0cmFja2luZyBmb3IgTFJVLW1hbmFnZWQgZm9saW9zKS4gSXQgYWRqdXN0cyBob3cgc2hhZG93IGVudHJpZXMgYXJlIHBhcmtlZCBpbiB0aGUgenN3YXAgdHJlZSBkdXJpbmcgd3JpdGViYWNrIGFuZCByZXN0b3JlZC9yZWZhdWx0ZWQgZHVyaW5nIHN3YXBpbi5cXG5cXG4xLiBObyBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgcmlzazogTm8gZGF0YSBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3Rscywgb3IgQlBGIGJ1ZmZlcnMpLlxcbjIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOiBBbGwgbmV3bHkgaW50cm9kdWNlZCBvciBtb2RpZmllZCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYHNoYWRvd2AsIGBzaGFkb3dfcGFya2VkYCwgYW5kIGxvb3AgaW5kaWNlcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBhc3NpZ25lZCBieSBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcG9pbnRlcnMvdmFsdWVzLlxcbjMuIEJ1ZyBhcHBsaWNhYmlsaXR5OiBQb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGludm9sdmUgcGFnZSBsb2NraW5nLCByYWNlIGNvbmRpdGlvbnMgaW4gc3dhcGNhY2hlL0xSVSBtYW5pcHVsYXRpb24sIHJlZmNvdW50aW5nLCBvciBpbnZhbGlkIHhhcnJheSBvcGVyYXRpb25zLiBUaGVzZSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgKEtBU0FOLCBMT0NLREVQLCBWTV9XQVJOL1ZNX0JVRyBhc3NlcnRpb25zKSwgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjA1ZWM2Yjg4OWM5ZGEwOWE5YmQ4ODcyNGZmOWMzMjE3ZDE4NWI4ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDExOjE4OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXG5pbmRleCAzMGMxOTNhMTIwN2UxLi5kZmI3MTUzMjM2ZjVjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbkBAIC0zNSw2ICszNSw4IEBAIHZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcbiB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XG4gYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xuK2Jvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbit2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2Vsc2VcbiBcbiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9O1xuQEAgLTY5LDYgKzcxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfTElOVVhfWlNXQVBfSCAqL1xuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCA4YmUzZDI4ZDljM2Q4Li5kMTk5NDdhM2MzMzg1IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTMxLDYgKzMxLDcgQEAgdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xuIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XG4rdm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcbiB2b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiAvKiBtbS9mb2xpby5jICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggYTJhNjNhZTA5NjdjMS4uMDA0M2E5MjM3YThkZCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTQ4NTcsNiArNDg1Nyw3IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcztcbiBcdHB0ZV90ICpwdGVwO1xuK1x0dm9pZCAqc2hhZG93O1xuIFxuIFx0aWYgKCFwdGVfdW5tYXBfc2FtZSh2bWYpKVxuIFx0XHRnb3RvIG91dDtcbkBAIC00OTg0LDYgKzQ5ODUsMTAgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdGdvdG8gb3V0X3BhZ2U7XG4gXHR9XG4gXG4rXHRzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xuK1x0aWYgKHNoYWRvdylcbitcdFx0d29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKGZvbGlvLCBzaGFkb3cpO1xuK1xuIFx0LypcbiBcdCAqIEtTTSBzb21ldGltZXMgaGFzIHRvIGNvcHkgb24gcmVhZCBmYXVsdHMsIGZvciBleGFtcGxlLCBpZlxuIFx0ICogZm9saW8tXHUwMDNlaW5kZXggb2Ygbm9uLWtzbSBmb2xpb3Mgd291bGQgYmUgbm9ubGluZWFyIGluc2lkZSB0aGVcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggYzMyMTJmZGVjZTliNC4uNTNmNTdhZDE5NGEzOSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0yNDY1LDYgKzI0NjUsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XG4gXHRpbnQgZXJyb3IsIG5yX3BhZ2VzLCBvcmRlcjtcbiBcdHBnb2ZmX3Qgb2Zmc2V0O1xuK1x0dm9pZCAqc2hhZG93O1xuIFxuIFx0Vk1fQlVHX09OKCEqZm9saW9wIHx8ICF4YV9pc192YWx1ZSgqZm9saW9wKSk7XG4gXHRpbmRleF9lbnRyeSA9IHJhZGl4X3RvX3N3cF9lbnRyeSgqZm9saW9wKTtcbkBAIC0yNTc2LDYgKzI1NzcsMTAgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdCAqL1xuIFx0YXJjaF9zd2FwX3Jlc3RvcmUoZm9saW9fc3dhcChzd2FwLCBmb2xpbyksIGZvbGlvKTtcbiBcbitcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7XG4rXG4gXHRpZiAoc2htZW1fc2hvdWxkX3JlcGxhY2VfZm9saW8oZm9saW8sIGdmcCkpIHtcbiBcdFx0ZXJyb3IgPSBzaG1lbV9yZXBsYWNlX2ZvbGlvKFx1MDAyNmZvbGlvLCBnZnAsIGluZm8sIGluZGV4LCB2bWEpO1xuIFx0XHRpZiAoZXJyb3IpXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCAwYjVkNTA3NzM5YmNiLi5kZGQxMDhiNDFkMzNhIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4rKysgYi9tbS9zd2FwLmhcbkBAIC0zMTIsOSArMzEyLDEwIEBAIGJvb2wgc3dhcF9jYWNoZV9oYXNfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpO1xuIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9nZXRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XG4rc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsXG4rXHRcdFx0XHQgICAgICAgdm9pZCAqKnNoYWRvd3ApO1xuIC8qIEJlbG93IGhlbHBlcnMgcmVxdWlyZSB0aGUgY2FsbGVyIHRvIGxvY2sgYW5kIHBhc3MgaW4gdGhlIHN3YXAgY2x1c3Rlci4gKi9cbiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggMzA1ODc3ZTFmNGQ3Yi4uZTgwYTY5NGRkZGI0NyAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtMjQsNiArMjQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXBfb3BzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC96c3dhcC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbiAjaW5jbHVkZSBcInN3YXBfdGFibGUuaFwiXG4gI2luY2x1ZGUgXCJzd2FwLmhcIlxuQEAgLTI2MywxMiArMjY0LDIxIEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdHVuc2lnbmVkIGludCBjaV9zdGFydCwgY2lfb2ZmLCBjaV9lbmQ7XG4gXHRib29sIGZvbGlvX3N3YXBwZWQgPSBmYWxzZSwgbmVlZF9mcmVlID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1x0dm9pZCAqc2hhZG93X3BhcmtlZDtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShfX3N3YXBfZW50cnlfdG9fY2x1c3RlcihlbnRyeSkgIT0gY2kpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG4gXG4rXHQvKlxuK1x0ICogQSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHBhcmtlZCB0aGUgc2xvdCdzIG9yaWdpbmFsIHNoYWRvdyBpbiB0aGVcbitcdCAqIHpzd2FwIHRyZWU6IHJlc3RvcmUgaXQgaW50byB0aGUgc2xvdCBmb3IgbGF0ZXIgc3dhcC1pbi5cbitcdCAqL1xuK1x0c2hhZG93X3BhcmtlZCA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4rXHRpZiAoc2hhZG93X3BhcmtlZClcbitcdFx0c2hhZG93ID0gc2hhZG93X3BhcmtlZDtcbitcbiBcdHNpID0gX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpO1xuIFx0Y2lfc3RhcnQgPSBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpO1xuIFx0Y2lfZW5kID0gY2lfc3RhcnQgKyBucl9wYWdlcztcbkBAIC00MDksNyArNDE5LDggQEAgdm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdFx0XHRzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHRcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuK1x0XHRcdFx0XHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcbitcdFx0XHRcdFx0dm9pZCAqKnNoYWRvd3ApXG4ge1xuIFx0aW50IGVycjtcbiBcdHN3cF9lbnRyeV90IGVudHJ5O1xuQEAgLTQ4MywzNyArNDk0LDQyIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFxuIFx0LyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovXG4gXHRtZW1jZzFfc3dhcGluKGZvbGlvKTtcbi1cdGlmIChzaGFkb3cpXG4tXHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbiBcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XG4gXG4tXHQvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqL1xuLVx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4rXHRpZiAoc2hhZG93cClcbitcdFx0KnNoYWRvd3AgPSBzaGFkb3c7XG4rXG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuIC8qKlxuLSAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuKyAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG4gICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcbiAgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnc1xuICAqIEBvcmRlcnM6IGFsbG9jYXRpb24gb3JkZXJzLCBtdXN0IGJlIG5vbiB6ZXJvXG4gICogQHZtZjogZmF1bHQgaW5mb3JtYXRpb25cbiAgKiBAbXBvbDogTlVNQSBtZW1vcnkgYWxsb2NhdGlvbiBwb2xpY3kgdG8gYmUgYXBwbGllZFxuICAqIEBpbHg6IE5VTUEgaW50ZXJsZWF2ZSBpbmRleCwgZm9yIHVzZSBvbmx5IHdoZW4gTVBPTF9JTlRFUkxFQVZFXG4rICogQHNoYWRvd3A6IFJldHVybnMgdGhlIHNoYWRvdyB0aGUgYWxsb2NhdGlvbiBkaXNwbGFjZWQsIE5VTEwgdG8gaWdub3JlXG4gICpcbiAgKiBBbGxvY2F0ZSBhIGZvbGlvIGluIHRoZSBzd2FwIGNhY2hlIGZvciBvbmUgc3dhcCBzbG90LCB0eXBpY2FsbHkgYmVmb3JlXG4gICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieVxuICAqIEB0YXJnX2VudHJ5IG11c3QgaGF2ZSBhIG5vbi16ZXJvIHN3YXAgY291bnQgKHN3YXBwZWQgb3V0KS5cbiAgKlxuKyAqIFRoZSByZXR1cm5lZCBmb2xpbyBpcyBsb2NrZWQgYW5kIGlzIE5PVCBvbiB0aGUgTFJVLiBUaGUgY2FsbGVyIG11c3QgZWl0aGVyXG4rICogYWRkIGl0IHRvIHRoZSBMUlUgd2l0aCBmb2xpb19hZGRfbHJ1KCkgc28gcGFnZSByZWNsYWltIGNhbiBmaW5kIGl0LCBvciBmcmVlXG4rICogaXQgZGlyZWN0bHkgb25jZSBkb25lOyBhIGZvbGlvIGxlZnQgb2ZmIHRoZSBMUlUgaXMgdW5yZWNsYWltYWJsZSBhbmQgbGVha3MuXG4rICpcbiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy5cbiAgKiBSZXR1cm46IFJldHVybnMgdGhlIGZvbGlvIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkIGFuZCBmb2xpbyBpcyBpbiB0aGUgc3dhcFxuICAqIGNhY2hlLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYgZmFpbGVkIGR1ZSB0byByYWNlLCBPT00gb3IgaW52YWxpZCBhcmd1bWVudHMuXG4gICovXG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LFxuK1x0XHRcdFx0ICAgICAgIHZvaWQgKipzaGFkb3dwKVxuIHtcbiBcdGludCBvcmRlciwgZXJyO1xuIFx0c3RydWN0IGZvbGlvICpyZXQ7XG5AQCAtNTI4LDcgKzU0NCw3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4gXG4gXHRkbyB7XG4gXHRcdHJldCA9IF9fc3dhcF9jYWNoZV9hbGxvYyhjaSwgdGFyZ19lbnRyeSwgZ2ZwLCBvcmRlcixcbi1cdFx0XHRcdFx0IHZtZiwgbXBvbCwgaWx4KTtcbitcdFx0XHRcdFx0IHZtZiwgbXBvbCwgaWx4LCBzaGFkb3dwKTtcbiBcdFx0aWYgKCFJU19FUlIocmV0KSlcbiBcdFx0XHRicmVhaztcbiBcdFx0ZXJyID0gUFRSX0VSUihyZXQpO1xuQEAgLTY0NCwxNyArNjYwLDIzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCxcbiBcdFx0cGdvZmZfdCBpbHgsIGJvb2wgcmVhZGFoZWFkKVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHR2b2lkICpzaGFkb3cgPSBOVUxMO1xuIFxuIFx0ZG8ge1xuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdFx0aWYgKGZvbGlvKVxuIFx0XHRcdHJldHVybiBmb2xpbztcbi1cdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbitcdFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLFxuK1x0XHRcdFx0XHRcdCBpbHgsIFx1MDAyNnNoYWRvdyk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0aWYgKHNoYWRvdylcbitcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuK1xuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRzd2FwX3JlYWRfZm9saW8oY3R4LCBmb2xpbyk7XG4gXHRpZiAocmVhZGFoZWFkKSB7XG4gXHRcdGZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pO1xuQEAgLTY4NSwxNyArNzA3LDIzIEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4ge1xuIFx0c3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4rXHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLFxuK1x0XHRcdFx0XHRcdCBpbHgsIFx1MDAyNnNoYWRvdyk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIFx0XHRyZXR1cm4gZm9saW87XG4gXG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4rXG4rXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9mb2xpbyhcdTAwMjZjdHgsIGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9zdWJtaXQoXHUwMDI2Y3R4KTtcbiBcdHJldHVybiBmb2xpbztcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggNDhkM2NkNDBkZWZkYi4uNjEwMWY5MGU5MWQyYSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xODg1LDcgKzE4ODUsNyBAQCB2b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuICAqICAgQ1BVMVx0XHRcdFx0Q1BVMlxuICAqICAgZG9fc3dhcF9wYWdlKClcbiAgKiAgICAgLi4uXHRcdFx0XHRzd2Fwb2ZmK3N3YXBvblxuLSAqICAgICBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKClcbisgKiAgICAgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKClcbiAgKiAgICAgICAvLyBjaGVjayBzd2FwX21hcFxuICAqICAgICAvLyB2ZXJpZnkgUFRFIG5vdCBjaGFuZ2VkXG4gICpcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA0MGQzZjFiNDhhNzRjLi4xY2E2NDg5ZTUwMTIyIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDgsNiArNDgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbkBAIC03NTMsNyArNzU0LDggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbi1cdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbitcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICF6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcbiBcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuIFx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4gXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggODQxMmY0ODQwYWUzNS4uOGU0NWIwYmFlYjM2ZCAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuKysrIGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNTM2LDE2ICs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4gXHRyZXR1cm4gcmVmYXVsdF9kaXN0YW5jZSBcdTAwM2M9IHdvcmtpbmdzZXRfc2l6ZTtcbiB9XG4gXG4tLyoqXG4tICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXG4tICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uXG4tICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxuLSAqXG4tICogQ2FsY3VsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSByZWZhdWx0IGRpc3RhbmNlIG9mIHRoZSBwcmV2aW91c2x5XG4tICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxuLSAqIHByZXNzdXJlIGNhdXNlZCB0aGUgZXZpY3Rpb24uXG4tICovXG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuK3N0YXRpYyB2b2lkIF9fd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyxcbitcdFx0XHRcdCBib29sIGxydV9tYW5hZ2VkKVxuIHtcbiBcdGJvb2wgZmlsZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbkBAIC01NzcsNyArNTY5LDE2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdGlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsIFx1MDAyNndvcmtpbmdzZXQsIHRydWUpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuK1x0LypcbitcdCAqIEFuIExSVS1tYW5hZ2VkIGZvbGlvIG1heSBzaXQgaW4gYSBwZXItQ1BVIGJhdGNoLCB3aGljaCBjYW5ub3QgYmVcbitcdCAqIGRldGVybWluZWQgaGVyZTogc2V0dGluZyB0aGUgZmxhZyB3b3VsZCByYWNlIHRoZSBkcmFpbiBhbmQgbGVhdmUgaXRcbitcdCAqIGRpc2FncmVlaW5nIHdpdGggdGhlIGxpc3QuIGZvbGlvX2FjdGl2YXRlKCkgaXMgc2FmZSwgYnV0IG1pc3NlcyB0aGVcbitcdCAqIGFjdGl2YXRpb24gZm9yIHN1Y2ggYSBmb2xpby5cbitcdCAqL1xuK1x0aWYgKGxydV9tYW5hZ2VkKVxuK1x0XHRmb2xpb19hY3RpdmF0ZShmb2xpbyk7XG4rXHRlbHNlXG4rXHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuIFx0d29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9CQVNFICsgZmlsZSwgbnIpO1xuIFxuQEAgLTU5MCw2ICs1OTEsNDMgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuIFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIH1cbiBcbisvKipcbisgKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby5cbisgKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbisgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXG4rICpcbisgKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHlcbisgKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5XG4rICogcHJlc3N1cmUgY2F1c2VkIHRoZSBldmljdGlvbi5cbisgKlxuKyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgbm90IG9uIHRoZSBMUlUgeWV0LCB0aGUgY2FsbGVyIGFkZHNcbisgKiBpdCB3aXRoIGZvbGlvX2FkZF9scnUoKSBhZnRlcndhcmRzLlxuKyAqL1xuK3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbit7XG4rXHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCBmYWxzZSk7XG4rfVxuK1xuKy8qKlxuKyAqIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseVxuKyAqIGV2aWN0ZWQgZm9saW8gdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBMUlUuXG4rICogQGZvbGlvOiBUaGUgZm9saW8gdGhlIGV2aWN0aW9uIGlzIHJlZmF1bHRlZCBpbnRvLlxuKyAqIEBzaGFkb3c6IFNoYWRvdyBlbnRyeSBvZiB0aGUgZXZpY3RlZCBmb2xpby5cbisgKlxuKyAqIExpa2Ugd29ya2luZ3NldF9yZWZhdWx0KCksIGJ1dCBmb3IgYSBmb2xpbyB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGFkZGVkXG4rICogdG8gdGhlIExSVSwgd2hpY2ggaGFzIHRvIGJlIGFjdGl2YXRlZCBieSBtb3ZpbmcgaXQgYmV0d2VlbiB0aGUgbGlzdHNcbisgKiByYXRoZXIgdGhhbiBieSBzZXR0aW5nIFBHX2FjdGl2ZS5cbisgKlxuKyAqIFRoZSBhY3RpdmF0aW9uIGlzIGJlc3QgZWZmb3J0OiBhIGZvbGlvIHN0aWxsIHNpdHRpbmcgaW4gYSBwZXItQ1BVIExSVVxuKyAqIGJhdGNoIGNhbm5vdCBiZSBtb3ZlZCB5ZXQgYW5kIGlzIGxlZnQgaW5hY3RpdmUuXG4rICpcbisgKiBDb250ZXh0OiBAZm9saW8gbXVzdCBiZSBsb2NrZWQgYW5kIGFscmVhZHkgYWRkZWQgdG8gdGhlIExSVS5cbisgKi9cbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4re1xuK1x0X193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgdHJ1ZSk7XG4rfVxuK1xuIC8qKlxuICAqIHdvcmtpbmdzZXRfYWN0aXZhdGlvbiAtIG5vdGUgYSBwYWdlIGFjdGl2YXRpb25cbiAgKiBAZm9saW86IEZvbGlvIHRoYXQgaXMgYmVpbmcgYWN0aXZhdGVkLlxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBjMjdlMjJkMDY3ZTNlLi45MDQ4MjFkYjQwMWYzIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTk2MSw2ICs5NjEsNzkgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIHdyaXRlYmFjayBjb2RlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbitcbisjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMClcbitcbisvKipcbisgKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj9cbisgKiBAZm9saW86IHRoZSBmb2xpbyBiZWluZyBleGFtaW5lZCAodHlwaWNhbGx5IGEgc3dhcCBjYWNoZSBmb2xpbyB1bmRlciByZWNsYWltKVxuKyAqXG4rICogQSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgd2hlbiBldmVyeSBvbmUgb2YgaXRzIHN3YXAgb2Zmc2V0cyBob2xkc1xuKyAqIGEgcGFya2VkIHdyaXRlYmFjayBzaGFkb3cgKGEgcmVhbCBzaGFkb3cgb3IgdGhlIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1dcbisgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIEBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIsIGluIHdoaWNoIGNhc2UgdGhlIHJlY2xhaW0gcGF0aFxuKyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuXG4rICovXG4rYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0c3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tXHUwMDNlc3dhcDtcbitcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcbitcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcbitcdFx0c3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgKyBpKTtcbitcbitcdFx0aWYgKCF4YV9pc192YWx1ZSh4YV9sb2FkKHN3YXBfenN3YXBfdHJlZShlKSwgb2Zmc2V0ICsgaSkpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKipcbisgKiB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MgLSByZXRyaWV2ZSBhbmQgY2xlYXIgQGZvbGlvJ3MgcGFya2VkIHNoYWRvdyhzKVxuKyAqIEBmb2xpbzogdGhlIHdyaXRlYmFjayBidWZmZXIgZm9saW8gKG9yIHRoZSBzd2FwaW4gZm9saW8gdGhhdCBjb25zdW1lZCBpdClcbisgKlxuKyAqIFJlbW92ZSBhbnkgcGFya2VkIHdyaXRlYmFjayBzaGFkb3dzIGZvciBAZm9saW8ncyBzd2FwIG9mZnNldChzKSBmcm9tIHRoZVxuKyAqIHpzd2FwIHRyZWUuXG4rICpcbisgKiBSZXR1cm46IHRoZSBwcmVzZXJ2ZWQgd29ya2luZ3NldCBzaGFkb3csIG9yIE5VTEwgaWYgdGhlIHNsb3QocykgaGFkIG5vIHNoYWRvd1xuKyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkXG4rICogc2hhZG93IGludG8gdGhlIHN3YXAgc2xvdCAoYnVmZmVyIGRyb3BwZWQpIG9yIGZlZWRzIGl0IHRvXG4rICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKCkgKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nXG4rICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LlxuKyAqL1xuK3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1x0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7XG4rXHR2b2lkICpzaGFkb3cgPSBOVUxMO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1xuK1x0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XG4rXHRcdHN3cF9lbnRyeV90IGUgPSBzd3BfZW50cnkoc3dwX3R5cGUoc3dwKSwgb2Zmc2V0ICsgaSk7XG4rXHRcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoZSk7XG4rXHRcdHZvaWQgKnBhcmtlZCA9IHhhX2xvYWQodHJlZSwgb2Zmc2V0ICsgaSk7XG4rXG4rXHRcdGlmICgheGFfaXNfdmFsdWUocGFya2VkKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0ICsgaSk7XG4rXHRcdGlmIChwYXJrZWQgIT0gWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVylcbitcdFx0XHRzaGFkb3cgPSBwYXJrZWQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gc2hhZG93O1xuK31cbitcbiAvKlxuICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsXG4gICogZGVjb21wcmVzc2luZyB0aGUgZW50cnkgZGF0YSBpbnRvIHRoZSBmb2xpbywgYW5kIGlzc3VpbmcgYVxuQEAgLTk3NiwxMiArMTA0OSwxNCBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbiB7XG4rXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuIFx0c3RydWN0IHhhcnJheSAqdHJlZTtcbiBcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3BlbnRyeSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcbiBcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcbiBcdHN0cnVjdCBzd2FwX2lvX2N0eCBjdHggPSB7fTtcbitcdHZvaWQgKnNoYWRvdztcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbkBAIC05OTAsOCArMTA2NSw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuIFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbi1cdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxuLVx0XHRcdFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xuK1x0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbitcdFx0XHRcdFx0IE5PX0lOVEVSTEVBVkVfSU5ERVgsIFx1MDAyNnNoYWRvdyk7XG4gXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFxuIFx0LypcbkBAIC0xMDAzLDYgKzEwNzgsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0ICovXG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXG4gXHQvKlxuIFx0ICogZm9saW8gaXMgbG9ja2VkLCBhbmQgdGhlIHN3YXBjYWNoZSBpcyBub3cgc2VjdXJlZCBhZ2FpbnN0XG5AQCAtMTAyNCw3ICsxMTAwLDEyIEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcbitcdC8qXG4rXHQgKiBBIHNsb3Qgd2l0aCBubyBzaGFkb3cgYWxyZWFkeSByZWFkcyBiYWNrIGFzIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c6XG4rXHQgKiB0aGUgc3dhcCB0YWJsZSBtYXJrcyBhIHN3YXBwZWQgb3V0IHNsb3Qgd2l0aCB4YV9ta192YWx1ZSgwKSBhbmQgaG9sZHNcbitcdCAqIHRoZSBzaGFkb3csIHdoZW4gdGhlcmUgaXMgb25lLCBpbiB0aGF0IHNhbWUgdmFsdWUuXG4rXHQgKi9cbitcdHhhX3N0b3JlKHRyZWUsIG9mZnNldCwgc2hhZG93LCBHRlBfS0VSTkVMKTtcbiBcbiBcdGNvdW50X3ZtX2V2ZW50KFpTV1BXQik7XG4gXHRpZiAoZW50cnktXHUwMDNlb2JqY2cpXG5AQCAtMTA0NCw3ICsxMTI1LDE1IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gb3V0OlxuIFx0aWYgKHJldCkge1xuLVx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBhbGxvY2F0aW9uIGFib3ZlIG92ZXJ3cm90ZSB0aGUgc2xvdCdzIHNoYWRvdyBhbmQgbm90aGluZ1xuK1x0XHQgKiBoYXMgYmVlbiBwYXJrZWQgZm9yIGl0IHlldCwgc28gcmVzdG9yZSBpdCBhcyB0aGUgZm9saW8gbGVhdmVzXG4rXHRcdCAqIHRoZSBzd2FwIGNhY2hlLCBvciB0aGUgZXZpY3Rpb24gaXQgcmVjb3JkcyBpcyBsb3N0LlxuK1x0XHQgKi9cbitcdFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhzd3BlbnRyeSksIG9mZnNldCk7XG4rXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd3BlbnRyeSwgc2hhZG93KTtcbitcdFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4rXHRcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHR9XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuQEAgLTE0ODcsNiArMTU3NiwxNyBAQCBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XG4gXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSk7XG4gXG4rXHQvKlxuK1x0ICogQSB3cml0ZWJhY2sgYnVmZmVyIHdob3NlIElPIGZhaWxlZCBpcyByZWRpcnRpZWQgYW5kIGxlZnQgaW4gdGhlXG4rXHQgKiBzd2FwIGNhY2hlLCBzbyByZWNsYWltIHdyaXRlcyBpdCBvdXQgYWdhaW4uIFdyaXRlYmFjayBhbHJlYWR5XG4rXHQgKiBkZWNpZGVkIHRoaXMgZGF0YSBiZWxvbmdzIG9uIGRpc2ssIHNvIHNlbmQgaXQgdGhlcmUgaW5zdGVhZCBvZlxuK1x0ICogY29tcHJlc3NpbmcgaXQgYmFjayBpbnRvIHpzd2FwLiBUaGlzIGFsc28gbGVhdmVzIHRoZSBzaGFkb3dcbitcdCAqIHBhcmtlZCBmb3IgdGhlIGJ1ZmZlciBpbiBwbGFjZSwgc28gaXQgaXMgc3RpbGwgcmVzdG9yZWQgaW50b1xuK1x0ICogdGhlIHNsb3Qgb25jZSB0aGUgZm9saW8gbGVhdmVzIHRoZSBzd2FwIGNhY2hlLlxuK1x0ICovXG4rXHRpZiAoenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihmb2xpbykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGlmICghenN3YXBfZW5hYmxlZClcbiBcdFx0Z290byBjaGVja19vbGQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMToxOToxOC4xMDE1NzU3NTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU3NTQ5MzIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgTWVtb3J5IFNhZmV0eSBFdmFsdWF0aW9uOiBac3dhcCBTaGFkb3cgRW50cnkgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBvciBoaWdobGlnaHRzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQncyBhIGtlcm5lbCBwYXRjaCB0b3VjaGluZyBzZXZlcmFsIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGFmZmVjdGVkIGZpbGVzOiBgaW5jbHVkZS9saW51eC96c3dhcC5oYCwgYG1tL2ludGVybmFsLmhgLCBgbW0vbWVtb3J5LmNgLCBgbW0vc2htZW0uY2AsIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBmaWxlLmNgLCBgbW0vdm1zY2FuLmNgLCBgbW0vd29ya2luZ3NldC5jYCwgYW5kIGBtbS96c3dhcC5jYC4gVGhlc2UgYWxsIHBvaW50IHRvd2FyZHMgd29ya2luZ3NldCBzaGFkb3cgZW50cmllcyBhbmQgenN3YXAgd3JpdGViYWNrLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgaG93IHRoZSB3b3JraW5nc2V0IHNoYWRvdyBlbnRyaWVzIGFyZSBoYW5kbGVkIHdoZW4gZm9saW9zIGFyZSBzd2FwcGVkIGluIGFuZCBvdXQgdmlhIHpzd2FwIHdyaXRlYmFjay4gU3BlY2lmaWNhbGx5LCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBub3cgdGFrZXMgYSBgdm9pZCAqKnNoYWRvd3BgIHBhcmFtZXRlci4gIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgY2FsbGluZyBgd29ya2luZ3NldF9yZWZhdWx0YCBpbiBgX19zd2FwX2NhY2hlX2FsbG9jYCwgaXQncyBub3cgcmV0dXJuaW5nIHRoZSBgc2hhZG93YCB2YWx1ZSB2aWEgYHNoYWRvd3BgIChpZiBpdCdzIG5vdCBOVUxMKS4gQ2FsbGVycyBsaWtlIGBzd2FwX2NhY2hlX3JlYWRfZm9saW9gIGFuZCBgc3dhcGluX3N5bmNgIHRoZW4gaGFuZGxlIHRoZSBgd29ya2luZ3NldF9yZWZhdWx0YCBjYWxsICphZnRlciogZ2V0dGluZyB0aGUgYHNoYWRvd2AgdmFsdWUgYmFjay4gQW5kLCBgZG9fc3dhcF9wYWdlYCBhbmQgYHNobWVtX3N3YXBpbl9mb2xpb2AgYXJlIHVzaW5nIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLiBJIHNlZSBzaW1pbGFyIGxvZ2ljIGluIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCB3aXRoIHRoZSBzaGFkb3cgYmVpbmcgcmV0cmlldmVkIHZpYSBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBhbmQgc3RvcmVkIGluIGFuIGB4YV9zdG9yZWAgY2FsbC4gIElmIHRoZXJlJ3MgYW4gZXJyb3IsIGl0J3MgYmVpbmcgcmVzdG9yZWQgaW4gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGV4aXN0cy4gSSdsbCBmb2N1cyBvbiB0aGUgY2FsbHNpdGVzIHdoZXJlIGBzaGFkb3dgIGlzIGJlaW5nIHVzZWQgdG8gc2VlIGhvdyBpdCBpcyBpbml0aWFsbHkgYXNzaWduZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBhdGhzIHdoZXJlIGl0IGNvdWxkIGJlIHJlYWQgYmVmb3JlIGJlaW5nIGFzc2lnbmVkIGEgdmFsaWQgdmFsdWUuXG5cbkxldCdzIGxvb2sgYXQgYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2A6IFRoZSBgc2hhZG93YCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB0byBgTlVMTGAuIFRoZSBjb2RlIGNhbGxzIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBJZiB0aGF0IHN1Y2NlZWRzLCB0aGUgYWxsb2NhdGVkIHNoYWRvdyB2YWx1ZSBpcyByZXR1cm5lZCBhbmQgdGhlIGNhbGxlciB3aWxsIHJ1biBgd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpYC4gVGhlIGBfX3N3YXBfY2FjaGVfYWxsb2NgIGFzc2lnbnMgYHNoYWRvd2AgZnJvbSBlaXRoZXIgYSB2YWx1ZSBmcm9tIHRoZSBgc3dhcF9jYWNoZWAsIG9yIGZyb20gd2hhdCB3YXMganVzdCBhbGxvY2F0ZWQuIExldCdzIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiBkaXJlY3RseSB0byBjb25maXJtIHRoZSBhc3NpZ25tZW50IGFuZCBzZWUgd2hhdCBpcyBhY3R1YWxseSBoYXBwZW5pbmcuIEkgd2lsbCB1c2UgdGhlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBjb21tYW5kIHRvIGludmVzdGlnYXRlIHRoZSByZWxldmFudCBsaW5lcyBpbiBgbW0vc3dhcF9zdGF0ZS5jYCBhcm91bmQgbGluZXMgNDA5LTUwMC4gVGhlbiBJJ2xsIHJlLWV2YWx1YXRlIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMToxOToyNS42NzcwNzI2MDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc3dhcF9zdGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2MDpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmNpLVxcdTAwM2Vsb2NrKTtcXG4gNDYxOlxcdFxcdGVyciA9IF9fc3dhcF9jYWNoZV9hZGRfY2hlY2soY2ksIHRhcmdfZW50cnksIG5yX3BhZ2VzLCBcXHUwMDI2c2hhZG93LCBcXHUwMDI2bWVtY2dfaWQpO1xcbiA0NjI6XFx0XFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG4gNDYzOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjaS1cXHUwMDNlbG9jayk7XFxuIDQ2NDpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiA0NjU6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gNDY2OlxcdFxcdH1cXG4gNDY3OlxcdFxcbiA0Njg6XFx0XFx0X19mb2xpb19zZXRfbG9ja2VkKGZvbGlvKTtcXG4gNDY5OlxcdFxcdF9fZm9saW9fc2V0X3N3YXBiYWNrZWQoZm9saW8pO1xcbiA0NzA6XFx0XFx0X19zd2FwX2NhY2hlX2RvX2FkZF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5KTtcXG4gNDcxOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjaS1cXHUwMDNlbG9jayk7XFxuIDQ3MjpcXHRcXG4gNDczOlxcdFxcdGlmIChtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oZm9saW8sIG1lbWNnX2lkLFxcbiA0NzQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgdm1mID8gdm1mLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tIDogTlVMTCwgZ2ZwKSkge1xcbiA0NzU6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZjaS1cXHUwMDNlbG9jayk7XFxuIDQ3NjpcXHRcXHRcXHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XFxuIDQ3NzpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y2ktXFx1MDAzZWxvY2spO1xcbiA0Nzg6XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gNDc5OlxcdFxcdFxcdC8qIG5yX3BhZ2VzIHJlZnMgZnJvbSBzd2FwIGNhY2hlLCAxIGZyb20gYWxsb2NhdGlvbiAqL1xcbiA0ODA6XFx0XFx0XFx0Zm9saW9fcHV0X3JlZnMoZm9saW8sIG5yX3BhZ2VzICsgMSk7XFxuIDQ4MTpcXHRcXHRcXHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9TV1BJTl9GQUxMQkFDS19DSEFSR0UpO1xcbiA0ODI6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIDQ4MzpcXHRcXHR9XFxuIDQ4NDpcXHRcXG4gNDg1OlxcdFxcdGlmIChvcmRlciBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7XFxuIDQ4NjpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNmNpLVxcdTAwM2Vsb2NrKTtcXG4gNDg3OlxcdFxcdFxcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcXG4gNDg4OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjaS1cXHUwMDNlbG9jayk7XFxuIDQ4OTpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiA0OTA6XFx0XFx0XFx0LyogbnJfcGFnZXMgcmVmcyBmcm9tIHN3YXAgY2FjaGUsIDEgZnJvbSBhbGxvY2F0aW9uICovXFxuIDQ5MTpcXHRcXHRcXHRmb2xpb19wdXRfcmVmcyhmb2xpbywgbnJfcGFnZXMgKyAxKTtcXG4gNDkyOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiA0OTM6XFx0XFx0fVxcbiA0OTQ6XFx0XFxuIDQ5NTpcXHRcXHQvKiBtZW1zdyB1bmNoYXJnZXMgc3dhcCB3aGVuIGZvbGlvIGlzIGFkZGVkIHRvIHN3YXAgY2FjaGUgKi9cXG4gNDk2OlxcdFxcdG1lbWNnMV9zd2FwaW4oZm9saW8pO1xcbiA0OTc6XFx0XFxuIDQ5ODpcXHRcXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCBucl9wYWdlcyk7XFxuIDQ5OTpcXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpO1xcbiA1MDA6XFx0XFxuIDUwMTpcXHRcXHRpZiAoc2hhZG93cClcXG4gNTAyOlxcdFxcdFxcdCpzaGFkb3dwID0gc2hhZG93O1xcbiA1MDM6XFx0XFxuIDUwNDpcXHRcXHRyZXR1cm4gZm9saW87XFxuIDUwNTpcXHR9XFxuIDUwNjpcXHRcXG4gNTA3OlxcdC8qKlxcbiA1MDg6XFx0ICogX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cXG4gNTA5OlxcdCAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XFxuIDUxMDpcXHQgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnc1xcbiA1MTE6XFx0ICogQG9yZGVyczogYWxsb2NhdGlvbiBvcmRlcnMsIG11c3QgYmUgbm9uIHplcm9cXG4gNTEyOlxcdCAqIEB2bWY6IGZhdWx0IGluZm9ybWF0aW9uXFxuIDUxMzpcXHQgKiBAbXBvbDogTlVNQSBtZW1vcnkgYWxsb2NhdGlvbiBwb2xpY3kgdG8gYmUgYXBwbGllZFxcbiA1MTQ6XFx0ICogQGlseDogTlVNQSBpbnRlcmxlYXZlIGluZGV4LCBmb3IgdXNlIG9ubHkgd2hlbiBNUE9MX0lOVEVSTEVBVkVcXG4gNTE1OlxcdCAqIEBzaGFkb3dwOiBSZXR1cm5zIHRoZSBzaGFkb3cgdGhlIGFsbG9jYXRpb24gZGlzcGxhY2VkLCBOVUxMIHRvIGlnbm9yZVxcbiA1MTY6XFx0ICpcXG4gNTE3OlxcdCAqIEFsbG9jYXRlIGEgZm9saW8gaW4gdGhlIHN3YXAgY2FjaGUgZm9yIG9uZSBzd2FwIHNsb3QsIHR5cGljYWxseSBiZWZvcmVcXG4gNTE4OlxcdCAqIGRvaW5nIElPIChlLmcuIHN3YXAgaW4gb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIHN3YXAgc2xvdCBpbmRpY2F0ZWQgYnlcXG4gNTE5OlxcdCAqIEB0YXJnX2VudHJ5IG11c3QgaGF2ZSBhIG5vbi16ZXJvIHN3YXAgY291bnQgKHN3YXBwZWQgb3V0KS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTE6MTk6MjUuNjc3MTY5OTUzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMDc3OTI4Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFpzd2FwIGFuZCBTd2FwIENhY2hlIFJlZmFjdG9yaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBuZWNlc3NpdGF0ZXMgYSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGNoZWNrLiBHaXZlbiBteSBleHBlcnRpc2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIEknbGwgYXNzZXNzIHRoaXMgc3lzdGVtYXRpY2FsbHkuXG5cbkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBjb3JlIGZ1bmN0aW9uczogYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGBzd2FwaW5fc3luY2AsIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCwgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgLCBhbmQgYF9fd29ya2luZ3NldF9yZWZhdWx0YC4gSeKAmW0gbG9va2luZyBmb3IgYW55IGluZGljYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGVzcGVjaWFsbHkgc2luY2UgdGhpcyBpbnZvbHZlcyBmb2xpb3MsIHN3YXAgY2FjaGUgaW50ZXJhY3Rpb25zLCBhbmQgdGhlIHdvcmtpbmdzZXQsIGFsbCBvZiB3aGljaCBhcmUgY3JpdGljYWwgYXJlYXMuIFRoZSBgc2hhZG93YCB2YXJpYWJsZSwgaW4gcGFydGljdWxhciwgY2F1Z2h0IG15IGV5ZSwgYXMgaXQncyBwYXNzZWQgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucy5cblxuTXkgb2JzZXJ2YXRpb25zIGFyZSB0aGF0IGluIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgc2hhZG93YCBtaWdodCBiZSBpbml0aWFsaXplZCB3aXRoaW4gdGhlIGZ1bmN0aW9uIGJ5IGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYCwgd2hpY2ggaXMgY2FsbGVkIGluc2lkZSB0aGUgZnVuY3Rpb24sIG9yIGJ5IGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIGluIHNldmVyYWwgcGxhY2VzIHdoZXJlIGBzaGFkb3dgIGlzIHVzZWQsIGxpa2UgaW4gYHN3YXBpbl9zeW5jYCwgYGRvX3N3YXBfcGFnZWAsIGFuZCBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2AuIFRoZSBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBiZWNhdXNlIGl0IGNsZWFycyBgc2hhZG93YCBmcm9tIGFuIHhhcnJheSwgYW5kIHRoZSB2YWx1ZSByZXRyaWV2ZWQgbWF5IGNvbnRhaW4gYSBwb2ludGVyLiAgSSB2ZXJpZmllZCB0aGF0IGluIGBzd2FwaW5fc3luY2AsIGBzaGFkb3dgIGNhbiBiZSBgTlVMTGAgYnV0IGlzIGNoZWNrZWQuIFRoZSBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCBhbHdheXMgcmV0dXJucyB0aGUgdmFsdWUsIGV2ZW4gYE5VTExgLCBzbyB0aGUgcG9pbnRlciB3aWxsIG5ldmVyIGJlY29tZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLlxuXG5JIGR1ZyBpbnRvIHRoZSBjb2RlIGFuZCBjb25maXJtZWQgdGhhdCBldmVyeSB0aW1lIGBzaGFkb3dgIG9yIHNpbWlsYXIgdmFyaWFibGVzIChgc2hhZG93X3BhcmtlZGApIGFyZSB1c2VkLCB0aGV5IGFyZSBlaXRoZXIgaW5pdGlhbGl6ZWQgdG8gYE5VTExgIGV4cGxpY2l0bHkgb3IgYXNzaWduZWQgYSB2YWx1ZSBiZWZvcmUgYmVpbmcgcmVhZC4gU3BlY2lmaWNhbGx5LCBsb29raW5nIGF0IGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCB0aGUgdmFsdWUgb2YgYHNoYWRvd2AgY29tZXMgZnJvbSB0aGUgYHhhX2xvYWRgIG9mIHRoZSBgc3dhcF96c3dhcF90cmVlYCB4YXJyYXksIGVuc3VyaW5nIHRoZSB2YWx1ZXMgYXJlIGtub3duLiBUaGUgb3RoZXIgdXNhZ2VzLCBzdWNoIGFzIGBzd2FwaW5fc3luY2AgYW5kIGBkb19zd2FwX3BhZ2VgLCBlbnN1cmUgYHNoYWRvd2AgaXMgbm90IHVzZWQgdW5pbml0aWFsaXplZC5cblxuVGhlIGltcG9ydGFudCBwb2ludCBpcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3Mgc3BlY2lmaWNhbGx5IGFkZHJlc3NlZCBieSBLTVNBTi4gSSBjaGVja2VkIHRoYXQgdGhpcyBjb2RlIGRvZXNuJ3Q6IGNvcHkgZGF0YSB0byB1c2VyLXNwYWNlLCByZWFkIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjaGFuZ2UgYnVmZmVyIGJvdW5kcywgb3IgYWxsb3cgcmVhZGluZyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LiBUaGUgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCBWTSBkZWJ1Z2dpbmcgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoZSBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkZWFkbG9ja3MsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2VzcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIG1pZ2h0IGludHJvZHVjZS5cblxuSW4gbGlnaHQgb2YgdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCB0aGF0IEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlIHN1YnN5c3RlbSB3aWxsIGJlIGZvdW5kIGJ5IG90aGVyIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjAxLCJPdXRwdXRUb2tlbnMiOjI1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMToxOTozNi43NTUxMDEyNzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0vIChzd2FwIGNhY2hlLCB6c3dhcCB3cml0ZWJhY2ssIGFuZCB3b3JraW5nc2V0IHJlZmF1bHQgdHJhY2tpbmcgZm9yIExSVS1tYW5hZ2VkIGZvbGlvcykuIEl0IGFkanVzdHMgaG93IHNoYWRvdyBlbnRyaWVzIGFyZSBwYXJrZWQgaW4gdGhlIHpzd2FwIHRyZWUgZHVyaW5nIHdyaXRlYmFjayBhbmQgcmVzdG9yZWQvcmVmYXVsdGVkIGR1cmluZyBzd2FwaW4uXFxuXFxuMS4gTm8ga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrIHJpc2s6IE5vIGRhdGEgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bHMsIG9yIEJQRiBidWZmZXJzKS5cXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogQWxsIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBzaGFkb3dgLCBgc2hhZG93X3BhcmtlZGAsIGFuZCBsb29wIGluZGljZXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgYXNzaWduZWQgYnkgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHBvaW50ZXJzL3ZhbHVlcy5cXG4zLiBCdWcgYXBwbGljYWJpbGl0eTogUG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIHBhZ2UgbG9ja2luZywgcmFjZSBjb25kaXRpb25zIGluIHN3YXBjYWNoZS9MUlUgbWFuaXB1bGF0aW9uLCByZWZjb3VudGluZywgb3IgaW52YWxpZCB4YXJyYXkgb3BlcmF0aW9ucy4gVGhlc2UgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIChLQVNBTiwgTE9DS0RFUCwgVk1fV0FSTi9WTV9CVUcgYXNzZXJ0aW9ucyksIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0vIChzd2FwIGNhY2hlLCB6c3dhcCB3cml0ZWJhY2ssIGFuZCB3b3JraW5nc2V0IHJlZmF1bHQgdHJhY2tpbmcgZm9yIExSVS1tYW5hZ2VkIGZvbGlvcykuIEl0IGFkanVzdHMgaG93IHNoYWRvdyBlbnRyaWVzIGFyZSBwYXJrZWQgaW4gdGhlIHpzd2FwIHRyZWUgZHVyaW5nIHdyaXRlYmFjayBhbmQgcmVzdG9yZWQvcmVmYXVsdGVkIGR1cmluZyBzd2FwaW4uXFxuXFxuMS4gTm8ga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrIHJpc2s6IE5vIGRhdGEgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bHMsIG9yIEJQRiBidWZmZXJzKS5cXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogQWxsIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBzaGFkb3dgLCBgc2hhZG93X3BhcmtlZGAsIGFuZCBsb29wIGluZGljZXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgYXNzaWduZWQgYnkgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHBvaW50ZXJzL3ZhbHVlcy5cXG4zLiBCdWcgYXBwbGljYWJpbGl0eTogUG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIHBhZ2UgbG9ja2luZywgcmFjZSBjb25kaXRpb25zIGluIHN3YXBjYWNoZS9MUlUgbWFuaXB1bGF0aW9uLCByZWZjb3VudGluZywgb3IgaW52YWxpZCB4YXJyYXkgb3BlcmF0aW9ucy4gVGhlc2UgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIChLQVNBTiwgTE9DS0RFUCwgVk1fV0FSTi9WTV9CVUcgYXNzZXJ0aW9ucyksIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpr5sr[1] Phase: Succeeded StartedAt: 2026-09-11 11:19:47 +0000 UTC FinishedAt: 2026-09-11 11:19:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 11:19:47 +0000 UTC FinishedAt: 2026-09-11 11:19:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2] Phase: Succeeded StartedAt: 2026-09-11 11:19:47 +0000 UTC FinishedAt: 2026-09-11 14:58:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:19:47 +0000 UTC FinishedAt: 2026-09-11 14:58:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:19:47 +0000 UTC FinishedAt: 2026-09-11 11:19:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:19:47 +0000 UTC FinishedAt: 2026-09-11 11:19:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-workflowpr5sr/series-workflowpr5sr-convert-artifact-3984591755/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:19:57 +0000 UTC FinishedAt: 2026-09-11 11:35:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:19:57 +0000 UTC FinishedAt: 2026-09-11 11:35:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6316eb65-7884-4f52-b016-e4db9a42991c,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-workflowpr5sr/series-workflowpr5sr-convert-artifact-3984591755/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": "428964fb-c9d2-49d6-a433-aa9575b16416", "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-workflowpr5sr/series-workflowpr5sr-build-action-2193884809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:19:57 +0000 UTC FinishedAt: 2026-09-11 11:35:41 +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:*6316eb65-7884-4f52-b016-e4db9a42991c,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-workflowpr5sr/series-workflowpr5sr-convert-artifact-3984591755/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": "428964fb-c9d2-49d6-a433-aa9575b16416", "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-workflowpr5sr/series-workflowpr5sr-build-action-2193884809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:35:51 +0000 UTC FinishedAt: 2026-09-11 11:35:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:35:51 +0000 UTC FinishedAt: 2026-09-11 11:35:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:35:51 +0000 UTC FinishedAt: 2026-09-11 11:36:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:35:51 +0000 UTC FinishedAt: 2026-09-11 11:35:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-workflowpr5sr/series-workflowpr5sr-convert-artifact-2650679266/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:36:01 +0000 UTC FinishedAt: 2026-09-11 11:37:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:36:01 +0000 UTC FinishedAt: 2026-09-11 11:37:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*428964fb-c9d2-49d6-a433-aa9575b16416,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-workflowpr5sr/series-workflowpr5sr-build-action-2193884809/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-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:37:48 +0000 UTC FinishedAt: 2026-09-11 11:37:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:37:48 +0000 UTC FinishedAt: 2026-09-11 11:37:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:37:48 +0000 UTC FinishedAt: 2026-09-11 11:53:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:37:48 +0000 UTC FinishedAt: 2026-09-11 11:53:44 +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:*6316eb65-7884-4f52-b016-e4db9a42991c,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-workflowpr5sr/series-workflowpr5sr-convert-artifact-2650679266/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": "fe54f028-be06-45b6-a49b-8d83cd8a3992", "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-workflowpr5sr/series-workflowpr5sr-build-action-4261450806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:37:48 +0000 UTC FinishedAt: 2026-09-11 11:53:34 +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:*6316eb65-7884-4f52-b016-e4db9a42991c,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-workflowpr5sr/series-workflowpr5sr-convert-artifact-2650679266/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": "fe54f028-be06-45b6-a49b-8d83cd8a3992", "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-workflowpr5sr/series-workflowpr5sr-build-action-4261450806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:53:44 +0000 UTC FinishedAt: 2026-09-11 11:53:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:53:44 +0000 UTC FinishedAt: 2026-09-11 11:53:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:53:44 +0000 UTC FinishedAt: 2026-09-11 11:55:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:53:44 +0000 UTC FinishedAt: 2026-09-11 11:55:30 +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:*fe54f028-be06-45b6-a49b-8d83cd8a3992,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-workflowpr5sr/series-workflowpr5sr-build-action-4261450806/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-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:55:40 +0000 UTC FinishedAt: 2026-09-11 14:58:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:55:40 +0000 UTC FinishedAt: 2026-09-11 14:58:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"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:*428964fb-c9d2-49d6-a433-aa9575b16416,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fe54f028-be06-45b6-a49b-8d83cd8a3992,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-workflowpr5sr/series-workflowpr5sr-build-action-2193884809/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-workflowpr5sr/series-workflowpr5sr-build-action-4261450806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:55:40 +0000 UTC FinishedAt: 2026-09-11 11:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:55:40 +0000 UTC FinishedAt: 2026-09-11 11:55:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"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-workflowpr5sr/series-workflowpr5sr-convert-artifact-1166748183/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:55:40 +0000 UTC FinishedAt: 2026-09-11 11:55:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:55:40 +0000 UTC FinishedAt: 2026-09-11 11:55:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:55:40 +0000 UTC FinishedAt: 2026-09-11 11:55:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:55:50 +0000 UTC FinishedAt: 2026-09-11 14:58:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpr5sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","zswap_writeback_entry","zswap_store","workingset_refault_lru_managed","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"7b3229dc-2160-454a-ab22-189e701e34c7","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-09-11 11:55:50 +0000 UTC FinishedAt: 2026-09-11 14:57:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*428964fb-c9d2-49d6-a433-aa9575b16416,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fe54f028-be06-45b6-a49b-8d83cd8a3992,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-workflowpr5sr/series-workflowpr5sr-build-action-2193884809/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-workflowpr5sr/series-workflowpr5sr-build-action-4261450806/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-workflowpr5sr/series-workflowpr5sr-convert-artifact-1166748183/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,}