Name: series-workflowx6j7c Phase: Succeeded StartedAt: 2026-09-10 10:06:14 +0000 UTC FinishedAt: 2026-09-10 15:05:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[0] Phase: Succeeded StartedAt: 2026-09-10 10:06:14 +0000 UTC FinishedAt: 2026-09-10 11:22:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 10:06:14 +0000 UTC FinishedAt: 2026-09-10 11:22:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cf558a250cf4475a8936902b8978fbb6c61016f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cf558a250cf4475a8936902b8978fbb6c61016f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP" ], "series_id": "8fcc7bd4-9135-4767-86c0-7cdadb7b17db" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_store", "zswap_invalidate", "swap_range_free", "__swap_cluster_free_entries" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9pbnZhbGlkYXRlJiMzNDssCiAgICAmIzM0O3N3YXBfcmFuZ2VfZnJlZSYjMzQ7LAogICAgJiMzNDtfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgenN3YXAgaGVscGVyIGZ1bmN0aW9ucyAoYHpzd2FwX2ludmFsaWRhdGVgIGFuZCBgenN3YXBfdHJlZWApIHRvIHBhc3MgdHlwZSBhbmQgb2Zmc2V0IGRpcmVjdGx5IHJhdGhlciB0aGFuIHBhY2tpbmcvdW5wYWNraW5nIGBzd3BfZW50cnlfdGAsIGFkZHMgZWFybHktZXhpdCBjaGVja3MgdXNpbmcgYHpzd2FwX25ldmVyX2VuYWJsZWQoKWAsIGFuZCBzaW1wbGlmaWVzIGVudHJ5IGNsZWFudXAgaW4gYHpzd2FwX3N0b3JlKClgLlxuXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gUG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byB6c3dhcCB0cmVlIGluZGV4aW5nIG9yIGVudHJ5IGxpZmV0aW1lcyBmYWxsIHVuZGVyIG1lbW9yeSBzYWZldHkgLyBjb25jdXJyZW5jeSBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgenN3YXAgaW52YWxpZGF0aW9uIGludGVyZmFjZSBhbmQgYWRkcyBlYXJseS1leGl0IG9wdGltaXphdGlvbiBjaGVja3MgKHZpYSB6c3dhcF9uZXZlcl9lbmFibGVkKCkpIGluIHpzd2FwX3N0b3JlKCkgYW5kIHN3YXBfcmFuZ2VfZnJlZSgpLiBTaW5jZSB0aGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3dhcCBhbmQgY29tcHJlc3NlZCBjYWNoZSBsb2dpYyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzI3MDY4NjlmMTYyMGQxMjRhOWM3Yzk3Yjc4Y2QxZjNhMjk1ODcxM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDExOjIxOjUxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenN3YXAuaCBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuaW5kZXggMzBjMTkzYTEyMDdlMS4uNDYzYmRlZTVjMWUxNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC96c3dhcC5oXG5AQCAtMjcsNyAmIzQzOzI3LDcgQEAgc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7XG4gdW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKTtcbiBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApO1xuJiM0Mzt2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KTtcbiBpbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiB2b2lkIHpzd2FwX3N3YXBvZmYoaW50IHR5cGUpO1xuIHZvaWQgenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG5AQCAtNDksNyAmIzQzOzQ5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIC1FTk9FTlQ7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cCkge31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggMDVkMzQwODM5NmY5OC4uNTA1NTkyMDUxOTI0MyAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xMzE4LDggJiM0MzsxMzE4LDEwIEBAIHN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxuIFx0dm9pZCAoKnN3YXBfc2xvdF9mcmVlX25vdGlmeSkoc3RydWN0IGJsb2NrX2RldmljZSAqLCB1bnNpZ25lZCBsb25nKTtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSYjNDM7JiM0MzspXG4tXHRcdHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5KHNpLVx1MDAzZXR5cGUsIG9mZnNldCAmIzQzOyBpKSk7XG4mIzQzO1x0aWYgKCF6c3dhcF9uZXZlcl9lbmFibGVkKCkpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHR6c3dhcF9pbnZhbGlkYXRlKHNpLVx1MDAzZXR5cGUsIG9mZnNldCAmIzQzOyBpKTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoc2ktXHUwMDNlZmxhZ3MgXHUwMDI2IFNXUF9CTEtERVYpXG4gXHRcdHN3YXBfc2xvdF9mcmVlX25vdGlmeSA9XG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IGExMmI2NDUyYTIyNTEuLjYxOTdhYTcxZTMzYzkgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jXG5AQCAtMjI4LDEwICYjNDM7MjI4LDE1IEBAIHN0YXRpYyBib29sIHpzd2FwX2hhc19wb29sO1xuIC8qIE9uZSBzd2FwIGFkZHJlc3Mgc3BhY2UgZm9yIGVhY2ggNjRNIHN3YXAgc3BhY2UgKi9cbiAjZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlQgMTRcbiAjZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfUEFHRVMgKDEgXHUwMDNjXHUwMDNjIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlQpXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCB4YXJyYXkgKnpzd2FwX3RyZWUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNnpzd2FwX3RyZWVzW3R5cGVdW29mZnNldCBcdTAwM2VcdTAwM2UgWlNXQVBfQUREUkVTU19TUEFDRV9TSElGVF07XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgeGFycmF5ICpzd2FwX3pzd2FwX3RyZWUoc3dwX2VudHJ5X3Qgc3dwKVxuIHtcbi1cdHJldHVybiBcdTAwMjZ6c3dhcF90cmVlc1tzd3BfdHlwZShzd3ApXVtzd3Bfb2Zmc2V0KHN3cClcbi1cdFx0XHUwMDNlXHUwMDNlIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlRdO1xuJiM0MztcdHJldHVybiB6c3dhcF90cmVlKHN3cF90eXBlKHN3cCksIHN3cF9vZmZzZXQoc3dwKSk7XG4gfVxuIFxuICNkZWZpbmUgenN3YXBfcG9vbF9kZWJ1Zyhtc2csIHApXHRcdFx0XFxcbkBAIC0xNDg3LDYgJiM0MzsxNDkyLDkgQEAgYm9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0Vk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpO1xuIFxuJiM0MztcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuIFx0aWYgKCF6c3dhcF9lbmFibGVkKVxuIFx0XHRnb3RvIGNoZWNrX29sZDtcbiBcbkBAIC0xNTQ0LDE1ICYjNDM7MTU1Miw5IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmICghcmV0KSB7XG4gXHRcdHVuc2lnbmVkIHR5cGUgPSBzd3BfdHlwZShzd3ApO1xuIFx0XHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbi1cdFx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeTtcbi1cdFx0c3RydWN0IHhhcnJheSAqdHJlZTtcbi1cbi1cdFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBucl9wYWdlczsgJiM0MzsmIzQzO2luZGV4KSB7XG4tXHRcdFx0dHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3BfZW50cnkodHlwZSwgb2Zmc2V0ICYjNDM7IGluZGV4KSk7XG4tXHRcdFx0ZW50cnkgPSB4YV9lcmFzZSh0cmVlLCBvZmZzZXQgJiM0MzsgaW5kZXgpO1xuLVx0XHRcdGlmIChlbnRyeSlcbi1cdFx0XHRcdHpzd2FwX2VudHJ5X2ZyZWUoZW50cnkpO1xuLVx0XHR9XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBucl9wYWdlczsgJiM0MzsmIzQzO2luZGV4KVxuJiM0MztcdFx0XHR6c3dhcF9pbnZhbGlkYXRlKHR5cGUsIG9mZnNldCAmIzQzOyBpbmRleCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTE2NTksMTAgJiM0MzsxNjYxLDkgQEAgaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi12b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKVxuJiM0Mzt2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KVxuIHtcbi1cdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xuLVx0c3RydWN0IHhhcnJheSAqdHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3ApO1xuJiM0MztcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSB6c3dhcF90cmVlKHR5cGUsIG9mZnNldCk7XG4gXHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5O1xuIFxuIFx0aWYgKHhhX2VtcHR5KHRyZWUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9pbnZhbGlkYXRlJiMzNDssCiAgICAmIzM0O3N3YXBfcmFuZ2VfZnJlZSYjMzQ7LAogICAgJiMzNDtfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB6c3dhcCBpbnZhbGlkYXRpb24gaW50ZXJmYWNlIGFuZCBhZGRzIGVhcmx5LWV4aXQgb3B0aW1pemF0aW9uIGNoZWNrcyAodmlhIHpzd2FwX25ldmVyX2VuYWJsZWQoKSkgaW4genN3YXBfc3RvcmUoKSBhbmQgc3dhcF9yYW5nZV9mcmVlKCkuIFNpbmNlIHRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzd2FwIGFuZCBjb21wcmVzc2VkIGNhY2hlIGxvZ2ljIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMjcwNjg2OWYxNjIwZDEyNGE5YzdjOTdiNzhjZDFmM2EyOTU4NzEzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMTE6MjE6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmgKaW5kZXggMzBjMTkzYTEyMDdlMS4uNDYzYmRlZTVjMWUxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvenN3YXAuaApAQCAtMjcsNyAmIzQzOzI3LDcgQEAgc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7CiB1bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpOwogYm9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pOwotdm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cCk7CiYjNDM7dm9pZCB6c3dhcF9pbnZhbGlkYXRlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldCk7CiBpbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIHZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSk7CiB2b2lkIHpzd2FwX21lbWNnX29mZmxpbmVfY2xlYW51cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwpAQCAtNDksNyAmIzQzOzQ5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAtRU5PRU5UOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApIHt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KSB7fQogc3RhdGljIGlubGluZSBpbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggMDVkMzQwODM5NmY5OC4uNTA1NTkyMDUxOTI0MyAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jCkBAIC0xMzE4LDggJiM0MzsxMzE4LDEwIEBAIHN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAogCXZvaWQgKCpzd2FwX3Nsb3RfZnJlZV9ub3RpZnkpKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgdW5zaWduZWQgbG9uZyk7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZW50cmllczsgaSYjNDM7JiM0MzspCi0JCXpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5KHNpLSZndDt0eXBlLCBvZmZzZXQgJiM0MzsgaSkpOwomIzQzOwlpZiAoIXpzd2FwX25ldmVyX2VuYWJsZWQoKSkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KQomIzQzOwkJCXpzd2FwX2ludmFsaWRhdGUoc2ktJmd0O3R5cGUsIG9mZnNldCAmIzQzOyBpKTsKJiM0MzsJfQogCiAJaWYgKHNpLSZndDtmbGFncyAmYW1wOyBTV1BfQkxLREVWKQogCQlzd2FwX3Nsb3RfZnJlZV9ub3RpZnkgPQpkaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmMKaW5kZXggYTEyYjY0NTJhMjI1MS4uNjE5N2FhNzFlMzNjOSAxMDA2NDQKLS0tIGEvbW0venN3YXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jCkBAIC0yMjgsMTAgJiM0MzsyMjgsMTUgQEAgc3RhdGljIGJvb2wgenN3YXBfaGFzX3Bvb2w7CiAvKiBPbmUgc3dhcCBhZGRyZXNzIHNwYWNlIGZvciBlYWNoIDY0TSBzd2FwIHNwYWNlICovCiAjZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlQgMTQKICNkZWZpbmUgWlNXQVBfQUREUkVTU19TUEFDRV9QQUdFUyAoMSAmbHQ7Jmx0OyBaU1dBUF9BRERSRVNTX1NQQUNFX1NISUZUKQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHhhcnJheSAqenN3YXBfdHJlZShpbnQgdHlwZSwgcGdvZmZfdCBvZmZzZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gJmFtcDt6c3dhcF90cmVlc1t0eXBlXVtvZmZzZXQgJmd0OyZndDsgWlNXQVBfQUREUkVTU19TUEFDRV9TSElGVF07CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgeGFycmF5ICpzd2FwX3pzd2FwX3RyZWUoc3dwX2VudHJ5X3Qgc3dwKQogewotCXJldHVybiAmYW1wO3pzd2FwX3RyZWVzW3N3cF90eXBlKHN3cCldW3N3cF9vZmZzZXQoc3dwKQotCQkmZ3Q7Jmd0OyBaU1dBUF9BRERSRVNTX1NQQUNFX1NISUZUXTsKJiM0MzsJcmV0dXJuIHpzd2FwX3RyZWUoc3dwX3R5cGUoc3dwKSwgc3dwX29mZnNldChzd3ApKTsKIH0KIAogI2RlZmluZSB6c3dhcF9wb29sX2RlYnVnKG1zZywgcCkJCQlcCkBAIC0xNDg3LDYgJiM0MzsxNDkyLDkgQEAgYm9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCVZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTsKIAlWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSk7CiAKJiM0MzsJaWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAlpZiAoIXpzd2FwX2VuYWJsZWQpCiAJCWdvdG8gY2hlY2tfb2xkOwogCkBAIC0xNTQ0LDE1ICYjNDM7MTU1Miw5IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoIXJldCkgewogCQl1bnNpZ25lZCB0eXBlID0gc3dwX3R5cGUoc3dwKTsKIAkJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7Ci0JCXN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnk7Ci0JCXN0cnVjdCB4YXJyYXkgKnRyZWU7Ci0KLQkJZm9yIChpbmRleCA9IDA7IGluZGV4ICZsdDsgbnJfcGFnZXM7ICYjNDM7JiM0MztpbmRleCkgewotCQkJdHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3BfZW50cnkodHlwZSwgb2Zmc2V0ICYjNDM7IGluZGV4KSk7Ci0JCQllbnRyeSA9IHhhX2VyYXNlKHRyZWUsIG9mZnNldCAmIzQzOyBpbmRleCk7Ci0JCQlpZiAoZW50cnkpCi0JCQkJenN3YXBfZW50cnlfZnJlZShlbnRyeSk7Ci0JCX0KJiM0MzsKJiM0MzsJCWZvciAoaW5kZXggPSAwOyBpbmRleCAmbHQ7IG5yX3BhZ2VzOyAmIzQzOyYjNDM7aW5kZXgpCiYjNDM7CQkJenN3YXBfaW52YWxpZGF0ZSh0eXBlLCBvZmZzZXQgJiM0MzsgaW5kZXgpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xNjU5LDEwICYjNDM7MTY2MSw5IEBAIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApCiYjNDM7dm9pZCB6c3dhcF9pbnZhbGlkYXRlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldCkKIHsKLQlwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTsKLQlzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKHN3cCk7CiYjNDM7CXN0cnVjdCB4YXJyYXkgKnRyZWUgPSB6c3dhcF90cmVlKHR5cGUsIG9mZnNldCk7CiAJc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeTsKIAogCWlmICh4YV9lbXB0eSh0cmVlKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA3MAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDM0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggUmVsYXRlZCB0byBac3dhcCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGxvb2tzIGludGVyZXN0aW5nOyBpdCYjMzk7cyB0b3VjaGluZyBzb21lIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgenN3YXBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuCgpGaXJzdCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIHNwZWNpZmljcy4gVGhlIHBhdGNoIGltcGFjdHMgYGluY2x1ZGUvbGludXgvenN3YXAuaGAsIGBtbS9zd2FwZmlsZS5jYCwgYW5kIGBtbS96c3dhcC5jYC4gQWxyZWFkeSwgSSYjMzk7bSBzZWVpbmcgYSBzaWduYXR1cmUgY2hhbmdlIGluIGB6c3dhcF9pbnZhbGlkYXRlKClgLCB3aGljaCBpcyBhIGtleSBmdW5jdGlvbiBpbiB6c3dhcCBvcGVyYXRpb25zLiBJdCBhcHBlYXJzIHRvIG5vdyB0YWtlIGEgdHlwZSBhbmQgb2Zmc2V0LiBFeGFtaW5pbmcgdGhlIGBtbS9zd2FwZmlsZS5jYCBjaGFuZ2VzLCBJIHNlZSB0aGF0IHRoZSBwYXRjaCBzZWVtcyB0byBoYXZlIGFkZGVkIGEgY2hlY2ssIGBpZiAoIXpzd2FwX25ldmVyX2VuYWJsZWQoKSlgIGJlZm9yZSBjYWxsaW5nIGB6c3dhcF9pbnZhbGlkYXRlKClgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSXQgaW5kaWNhdGVzIHRoYXQgdGhlIGludmFsaWRhdGlvbiBsb2dpYyBtaWdodCBoYXZlIGRpZmZlcmVudCBiZWhhdmlvciBkZXBlbmRpbmcgb24gaWYgenN3YXAgaXMgZW5hYmxlZCBvciBub3QuCgpUaGVuIGluIGBtbS96c3dhcC5jYCwgdGhlcmUmIzM5O3MgYSBuZXcgaGVscGVyIGZ1bmN0aW9uLCBgenN3YXBfdHJlZSgpYCBhbmQgYW4gdXBkYXRlIG9mIHRoZSBgenN3YXBfaW52YWxpZGF0ZSgpYCBjYWxsIGluIGB6c3dhcF9zdG9yZSgpYC4gVGhpcyBzdWdnZXN0cyBzb21lIHVuZGVybHlpbmcgcmVzdHJ1Y3R1cmluZyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgenN3YXAgaW50ZXJhY3RzIHdpdGggdGhlIHN3YXAgZmlsZSBzeXN0ZW0gYW5kIGl0cyBpbnZhbGlkYXRpb24gbWVjaGFuaXNtLiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSBuZXcgY29uZGl0aW9uIGluIHRoZSBzdG9yZSBmdW5jdGlvbiwgYGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpYC4KClRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgYXJlYS4gQ2hhbmdlcyB0byBgbW0venN3YXAuY2AgYW5kIGBtbS9zd2FwZmlsZS5jYCBhcmUgYSBiaWcgZGVhbDsgdGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCwgaWYgbWlzaGFuZGxlZCwgY291bGQgaGF2ZSBzZXJpb3VzIGNvbnNlcXVlbmNlcy4gQnV0LCBpcyBpdCByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudD8gWWVzLCB0aGlzIHBhdGNoIHdvdWxkIGRlZmluaXRlbHkgYmUgZXhlcmNpc2FibGUgaW4gUUVNVSwgb3IgYW55IGFtZDY0IGVudmlyb25tZW50IHdpdGggenN3YXAgYW5kIHN3YXBmaWxlIGNvbmZpZ3VyZWQuIFRoZXJlZm9yZSwgZnV6emluZyB0aGlzIHBhdGNoIHdvdWxkIGJlIGhpZ2hseSB2YWx1YWJsZS4KCk5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGB6c3dhcGAgYW5kIGl0cyByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcGF0Y2ggd2lsbCBiZWhhdmUgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy4gSSBzaG91bGQgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBzdWJzeXN0ZW1zLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgYmUga2V5IHRvIGNyZWF0aW5nIGEgc29saWQgdGVzdCBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWlNXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcbi0tXG5tbS9LY29uZmlnLTIxLVxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcbm1tL0tjb25maWctMjMtXHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTM0LVxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9NTk9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy03Ni1cbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG5tbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWZsYXRlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04Mi1cbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cbm1tL0tjb25maWctODQtXHRib29sIFwmIzM0O0xaT1wmIzM0O1xuLS1cbm1tL0tjb25maWctODgtXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXG5tbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0LVxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxubW0vS2NvbmZpZy05Ni1cdGJvb2wgXCYjMzQ7TFo0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDAtXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXG5tbS9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7TFo0SENcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwNi1cbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxubW0vS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2Vcbm1tL0tjb25maWctMTEzLVxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NDUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgWlNXQVAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBaU1dBUCwgcmlnaHQ/IFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IGFyZWEuIExldCYjMzk7cyBkaXZlIGludG8gYG1tL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjAuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgZmVhdHVyZXMgYXJlIGxvY2F0ZWQuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBvciBzb21lIG90aGVyIGxvZ2ljIHRoYXQgdGVsbHMgbWUgd2hhdCBvdGhlciBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIEkgY2FuIGVuYWJsZSBaU1dBUC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY3Jvc3MtZGVwZW5kZW5jaWVzIGFuZCBtYXliZSBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIGFyY2hpdGVjdHVyZSBvciBvdGhlciBrZXJuZWwgZmVhdHVyZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSB0byB3b3JrIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE1Olx0XHRkZWZhdWx0IHlcbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcbiAgMTg6XHRcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxuICAxOTpcdFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcbiAgMjA6XHRcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cbiAgMjE6XHRcbiAgMjI6XHRjb25maWcgWlNXQVBcbiAgMjM6XHRcdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuICAyNDpcdFx0ZGVwZW5kcyBvbiBTV0FQXG4gIDI1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gIDI2Olx0XHRzZWxlY3QgWlNNQUxMT0NcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcbiAgMjk6XHRcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXG4gIDMwOlx0XHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXG4gIDMxOlx0XHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxuICAzMjpcdFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXG4gIDMzOlx0XHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG4gIDM2Olx0XHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIFpTV0FQXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcbiAgNDA6XHRcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXG4gIDQxOlx0XG4gIDQyOlx0XHQgIFRoZSBzZWxlY3Rpb24gbWFkZSBoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSBrZXJuZWxcbiAgNDM6XHRcdCAgY29tbWFuZCBsaW5lICYjMzk7enN3YXAuZW5hYmxlZD0mIzM5OyBvcHRpb24uXG4gIDQ0Olx0XG4gIDQ1Olx0Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbiAgNDY6XHRcdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuICA0NzpcdFx0ZGVwZW5kcyBvbiBaU1dBUFxuICA0ODpcdFx0ZGVmYXVsdCBuXG4gIDQ5Olx0XHRoZWxwXG4gIDUwOlx0XHQgIElmIHNlbGVjdGVkLCB0aGUgenN3YXAgc2hyaW5rZXIgd2lsbCBiZSBlbmFibGVkLCBhbmQgdGhlIHBhZ2VzXG4gIDUxOlx0XHQgIHN0b3JlZCBpbiB0aGUgenN3YXAgcG9vbCB3aWxsIGJlY29tZSBhdmFpbGFibGUgZm9yIHJlY2xhaW0gKGkuZVxuICA1MjpcdFx0ICB3cml0dGVuIGJhY2sgdG8gdGhlIGJhY2tpbmcgc3dhcCBkZXZpY2UpIG9uIG1lbW9yeSBwcmVzc3VyZS5cbiAgNTM6XHRcbiAgNTQ6XHRcdCAgVGhpcyBtZWFucyB0aGF0IHpzd2FwIHdyaXRlYmFjayBjb3VsZCBoYXBwZW4gZXZlbiBpZiB0aGUgcG9vbCBpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipUcmFjaW5nIHRoZSBPcmlnaW5zIG9mIGB6c3dhcF9uZXZlcl9lbmFibGVkYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgZXhhY3RseSBpcyB0aGlzIGB6c3dhcF9uZXZlcl9lbmFibGVkYCB2YXJpYWJsZSBkZWZpbmVkLCBhbmQgY3JpdGljYWxseSwgKmhvdyogaXMgaXQgYmVpbmcgdXNlZD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgenN3YXAgaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgdGhlIGZpcnN0IGNydWNpYWwgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGlmIGl0JiMzOTtzIGludm9sdmVkIGluIGFuIGlzc3VlIEkmIzM5O20gaW52ZXN0aWdhdGluZyBvciBqdXN0IHNpbXBseSB0cnlpbmcgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIHRoaXMgY29kZS4gSSBuZWVkIHRvIGJlIGFibGUgdG8gdHJhY2UgaXRzIGRlY2xhcmF0aW9uIGFuZCB1c2FnZSBwYXR0ZXJucyB0byBmb3JtIGEgdmFsaWQgY29uY2x1c2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9uZXZlcl9lbmFibGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvenN3YXAuaD0zNj1ib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6Mzc6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xuaW5jbHVkZS9saW51eC96c3dhcC5oLTM4LSNlbHNlXG4tLVxuaW5jbHVkZS9saW51eC96c3dhcC5oPTYyPXN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC96c3dhcC5oLTY2LVxuaW5jbHVkZS9saW51eC96c3dhcC5oOjY3OnN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNjgte1xuLS1cbm1tL21lbW9yeS5jPTQ3NTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDc3OS1cdCAqL1xubW0vbWVtb3J5LmM6NDc4MDpcdGlmICghenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxubW0vbWVtb3J5LmMtNDc4MS1cdFx0cmV0dXJuIDA7XG4tLVxubW0vc2htZW0uYz0yMjQyPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBfYWxsb2NfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9zaG1lbS5jLTIyNTEtXHRpZiAoKHZtZiBcdTAwMjZcdTAwMjYgdW5saWtlbHkodXNlcmZhdWx0ZmRfYXJtZWQodm1mLVx1MDAzZXZtYSkpKSB8fFxubW0vc2htZW0uYzoyMjUyOlx0ICAgICAhenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxubW0vc2htZW0uYy0yMjUzLVx0XHRvcmRlciA9IDA7XG4tLVxubW0vc3dhcGZpbGUuYz0xMzE0PXN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxuLS1cbm1tL3N3YXBmaWxlLmMtMTMyMC1cbm1tL3N3YXBmaWxlLmM6MTMyMTpcdGlmICghenN3YXBfbmV2ZXJfZW5hYmxlZCgpKSB7XG5tbS9zd2FwZmlsZS5jLTEzMjItXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KVxuLS1cbm1tL3pzd2FwLmM9MTI1PWJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKVxuLS1cbm1tL3pzd2FwLmMtMTI5LVxubW0venN3YXAuYzoxMzA6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG5tbS96c3dhcC5jLTEzMS17XG4tLVxubW0venN3YXAuYz0xNDgyPWJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTE0OTQtXG5tbS96c3dhcC5jOjE0OTU6XHRpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxubW0venN3YXAuYy0xNDk2LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0venN3YXAuYz0xNjA2PWludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy0xNjE1LVxubW0venN3YXAuYzoxNjE2Olx0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbm1tL3pzd2FwLmMtMTYxNy1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEwNAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERpZmY6IEEgUXVpY2sgU2NhbiBvZiBJbXBhY3RlZCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGRpZmYuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gVGhlIGRpZmYgdG91Y2hlcyBhIGZldyBrZXkgYXJlYXMsIGFuZCBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcG90ZW50aWFsbHkgaW1wYWN0ZWQgc3Vic3lzdGVtcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmdW5jdGlvbiBsZXZlbCBicmVha2Rvd246IEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYHpzd2FwX3N0b3JlYCBhbmQgYHpzd2FwX2ludmFsaWRhdGVgIHdpdGhpbiBgbW0venN3YXAuY2AuIFRoZW4sIHRoZXJlJiMzOTtzIGBzd2FwX3JhbmdlX2ZyZWVgIGluIGBtbS9zd2FwZmlsZS5jYCwgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGF0dGVudGlvbi4gRmluYWxseSwgdGhlcmUgYXJlIGFsc28gdHdvIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLCBgenN3YXBfdHJlZWAgYW5kIGBzd2FwX3pzd2FwX3RyZWVgIGFsc28gaW4gYG1tL3pzd2FwLmNgIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLgoKTm93IHRoYXQgSSBoYXZlIGEgbWFwIG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIGxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBjYWxsIGdyYXBoIGZvciBgc3dhcF9yYW5nZV9mcmVlYCBhbmQgYHpzd2FwX2ludmFsaWRhdGVgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBtb3N0IGxpa2VseSB0byBoYXZlIGtub2NrLW9uIGVmZmVjdHMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZXkgYXJlIHVzZWQgYW5kIGhvdyB0aGUgZXhpc3RpbmcgZGVzaWduIGltcGFjdHMgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfaW52YWxpZGF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3pzd2FwLmg9Mjk9aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6MzA6dm9pZCB6c3dhcF9pbnZhbGlkYXRlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldCk7XG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtMzEtaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4tLVxuaW5jbHVkZS9saW51eC96c3dhcC5oPTQ3PXN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNTEtXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6NTI6c3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KSB7fVxuaW5jbHVkZS9saW51eC96c3dhcC5oLTUzLXN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbi0tXG5tbS9zd2FwZmlsZS5jPTEzMTQ9c3RhdGljIHZvaWQgc3dhcF9yYW5nZV9mcmVlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXG4tLVxubW0vc3dhcGZpbGUuYy0xMzIyLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpJiM0MzsmIzQzOylcbm1tL3N3YXBmaWxlLmM6MTMyMzpcdFx0XHR6c3dhcF9pbnZhbGlkYXRlKHNpLVx1MDAzZXR5cGUsIG9mZnNldCAmIzQzOyBpKTtcbm1tL3N3YXBmaWxlLmMtMTMyNC1cdH1cbi0tXG5tbS96c3dhcC5jPTE0ODI9Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtMTU1Ni1cdFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBucl9wYWdlczsgJiM0MzsmIzQzO2luZGV4KVxubW0venN3YXAuYzoxNTU3Olx0XHRcdHpzd2FwX2ludmFsaWRhdGUodHlwZSwgb2Zmc2V0ICYjNDM7IGluZGV4KTtcbm1tL3pzd2FwLmMtMTU1OC1cdH1cbi0tXG5tbS96c3dhcC5jPTE2MDY9aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTE2NjMtXG5tbS96c3dhcC5jOjE2NjQ6dm9pZCB6c3dhcF9pbnZhbGlkYXRlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldClcbm1tL3pzd2FwLmMtMTY2NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NzQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgc3dhcF9yYW5nZV9mcmVlYCBDYWxsZXJzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBzd2FwX3JhbmdlX2ZyZWVgLiBUaGF0IGZ1bmN0aW9uIGlzIGNyaXRpY2FsIHdoZW4gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgc3dhcCBzcGFjZSBtYW5hZ2VtZW50IGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL3N3YXBmaWxlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgdXNhZ2Ug4oCTIHVuZGVyc3RhbmRpbmcgKndoZXJlKiBpdCYjMzk7cyBjYWxsZWQgd2lsbCBpbGx1bWluYXRlIGhvdyBtZW1vcnkgaXMgYmVpbmcgcmVsZWFzZWQgYmFjayB0byB0aGUgc3dhcCBkZXZpY2UuIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhvc2UgY2FsbHMuIFdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIGEgcmFuZ2Ugb2Ygc3dhcCBwYWdlcyB0byBiZSBmcmVlZD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBwYWdlIHJlY2xhaW0sIHByb2Nlc3MgdGVybWluYXRpb24sIGZpbGUgdW5tYXBwaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNhbGxlciBpbmZvcm1hdGlvbiB3aWxsIHRlbGwgdGhlIHRhbGUuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgaXMgcGFyYW1vdW50IHRvIHVuZGVyc3RhbmRpbmcgaG93IHN3YXAgc3BhY2UgaXMgYmVpbmcgaGFuZGxlZC4gVGhpcyBpcyBnb2luZyB0byBiZSBnb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX3JhbmdlX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz0xMzA0PXN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfYWxsb2Moc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMTMxMy1cbm1tL3N3YXBmaWxlLmM6MTMxNDpzdGF0aWMgdm9pZCBzd2FwX3JhbmdlX2ZyZWUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcbm1tL3N3YXBmaWxlLmMtMTMxNS1cdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX2VudHJpZXMpXG4tLVxubW0vc3dhcGZpbGUuYz0xOTMyPXZvaWQgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE5NzMtXG5tbS9zd2FwZmlsZS5jOjE5NzQ6XHRzd2FwX3JhbmdlX2ZyZWUoc2ksIGNpX2hlYWQgJiM0MzsgY2lfc3RhcnQsIG5yX3BhZ2VzKTtcbm1tL3N3YXBmaWxlLmMtMTk3NS1cdHN3YXBfY2x1c3Rlcl9hc3NlcnRfZW1wdHkoY2ksIGNpX3N0YXJ0LCBucl9wYWdlcywgZmFsc2UpO1xuLS1cbm1tL3N3YXBmaWxlLmM9MjgzMz1zdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcbi0tXG5tbS9zd2FwZmlsZS5jLTI5MjgtXHQgKiBNYWtlIHN1cmUgdGhhdCBmdXJ0aGVyIGNsZWFudXBzIGFmdGVyIHRyeV90b191bnVzZSgpIHJldHVybnMgaGFwcGVuXG5tbS9zd2FwZmlsZS5jOjI5Mjk6XHQgKiBhZnRlciBzd2FwX3JhbmdlX2ZyZWUoKSByZWR1Y2VzIHNpLVx1MDAzZWludXNlX3BhZ2VzIHRvIDAuXG5tbS9zd2FwZmlsZS5jLTI5MzAtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU0NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gc29tZSBrZXkgc3ltYm9scyBmb3IgdGhpcyBGb2N1c1N5bWJvbHMgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGB6c3dhcF9zdG9yZWAsIGB6c3dhcF9pbnZhbGlkYXRlYCwgYW5kIGBzd2FwX3JhbmdlX2ZyZWVgLiBBbHNvLCB0aGF0IGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgIGxvb2tzIGludGVyZXN0aW5nLCBhcyBtaWdodCBhbnkgcmVsYXRlZCB0byBgenN3YXBfbG9hZGAgZXRjLiBUaGUgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZXNlIHN5bWJvbHMgYXJlIG1vZGlmaWVkIGFuZCBub24tdWJpcXVpdG91cy4KCkZpcnN0LCBsZXQmIzM5O3MgZGV0ZXJtaW5lIGlmIGFueSBvZiB0aG9zZSBvcHRpb25zIGFyZSB1c2VkIGV2ZXJ5d2hlcmUuIFNvLCBhcmUgYW55IG9mIGB6c3dhcF9zdG9yZWAsIGB6c3dhcF9pbnZhbGlkYXRlYCwgYW5kIGBzd2FwX3JhbmdlX2ZyZWVgIHdpZGVseSB1c2VkIGFjcm9zcyB0aGUgY29kZWJhc2U/IFdhaXQsIGBzd2FwX3JhbmdlX2ZyZWVgIGlzIGRlY2xhcmVkIGBzdGF0aWNgIGluIGBtbS9zd2FwZmlsZS5jYC4gVGhhdCYjMzk7cyBhIGdvb2QgaW5pdGlhbCBzaWduLiBOb3csIHRoZSBrZXkgcXVlc3Rpb246IGlzIGl0IGlubGluZWQ/IEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb2RlIGFyb3VuZCB0aGUgYHN3YXBfcmFuZ2VfZnJlZWAgZGVmaW5pdGlvbiB3aXRoaW4gYG1tL3N3YXBmaWxlLmNgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMxMDpcdFx0fVxuMTMxMTpcdFx0YXRvbWljX2xvbmdfc3ViKG5yX2VudHJpZXMsIFx1MDAyNm5yX3N3YXBfcGFnZXMpO1xuMTMxMjpcdH1cbjEzMTM6XHRcbjEzMTQ6XHRzdGF0aWMgdm9pZCBzd2FwX3JhbmdlX2ZyZWUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcbjEzMTU6XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX2VudHJpZXMpXG4xMzE2Olx0e1xuMTMxNzpcdFx0dW5zaWduZWQgbG9uZyBlbmQgPSBvZmZzZXQgJiM0MzsgbnJfZW50cmllcyAtIDE7XG4xMzE4Olx0XHR2b2lkICgqc3dhcF9zbG90X2ZyZWVfbm90aWZ5KShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcpO1xuMTMxOTpcdFx0dW5zaWduZWQgaW50IGk7XG4xMzIwOlx0XG4xMzIxOlx0XHRpZiAoIXpzd2FwX25ldmVyX2VuYWJsZWQoKSkge1xuMTMyMjpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpJiM0MzsmIzQzOylcbjEzMjM6XHRcdFx0XHR6c3dhcF9pbnZhbGlkYXRlKHNpLVx1MDAzZXR5cGUsIG9mZnNldCAmIzQzOyBpKTtcbjEzMjQ6XHRcdH1cbjEzMjU6XHRcbjEzMjY6XHRcdGlmIChzaS1cdTAwM2VmbGFncyBcdTAwMjYgU1dQX0JMS0RFVilcbjEzMjc6XHRcdFx0c3dhcF9zbG90X2ZyZWVfbm90aWZ5ID1cbjEzMjg6XHRcdFx0XHRzaS1cdTAwM2ViZGV2LVx1MDAzZWJkX2Rpc2stXHUwMDNlZm9wcy1cdTAwM2Vzd2FwX3Nsb3RfZnJlZV9ub3RpZnk7XG4xMzI5Olx0XHRlbHNlXG4xMzMwOlx0XHRcdHN3YXBfc2xvdF9mcmVlX25vdGlmeSA9IE5VTEw7XG4xMzMxOlx0XHR3aGlsZSAob2Zmc2V0IFx1MDAzYz0gZW5kKSB7XG4xMzMyOlx0XHRcdGFyY2hfc3dhcF9pbnZhbGlkYXRlX3BhZ2Uoc2ktXHUwMDNldHlwZSwgb2Zmc2V0KTtcbjEzMzM6XHRcdFx0aWYgKHN3YXBfc2xvdF9mcmVlX25vdGlmeSlcbjEzMzQ6XHRcdFx0XHRzd2FwX3Nsb3RfZnJlZV9ub3RpZnkoc2ktXHUwMDNlYmRldiwgb2Zmc2V0KTtcbjEzMzU6XHRcdFx0b2Zmc2V0JiM0MzsmIzQzOztcbjEzMzY6XHRcdH1cbjEzMzc6XHRcbjEzMzg6XHRcdC8qXG4xMzM5Olx0XHQgKiBNYWtlIHN1cmUgdGhhdCB0cnlfdG9fdW51c2UoKSBvYnNlcnZlcyBzaS1cdTAwM2VpbnVzZV9wYWdlcyByZWFjaGluZyAwXG4xMzQwOlx0XHQgKiBvbmx5IGFmdGVyIHRoZSBhYm92ZSBjbGVhbnVwcyBhcmUgZG9uZS5cbjEzNDE6XHRcdCAqL1xuMTM0MjpcdFx0c21wX3dtYigpO1xuMTM0MzpcdFx0YXRvbWljX2xvbmdfYWRkKG5yX2VudHJpZXMsIFx1MDAyNm5yX3N3YXBfcGFnZXMpO1xuMTM0NDpcdFx0c3dhcF91c2FnZV9zdWIoc2ksIG5yX2VudHJpZXMpO1xuMTM0NTpcdH1cbjEzNDY6XHRcbjEzNDc6XHRzdGF0aWMgYm9vbCBnZXRfc3dhcF9kZXZpY2VfaW5mbyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXG4xMzQ4Olx0e1xuMTM0OTpcdFx0aWYgKCFwZXJjcHVfcmVmX3RyeWdldF9saXZlKFx1MDAyNnNpLVx1MDAzZXVzZXJzKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU4MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgaW4gRGVwdGgqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZmxvdyBzdXJyb3VuZGluZyBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYCBhbmQsIGJ5IGV4dGVuc2lvbiwgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHV0aWxpemUgYHN3YXBfcmFuZ2VfZnJlZWAuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgaWRlbnRpZnlpbmcgdGhlIGRpcmVjdCBjYWxsZXJzOyBpdCYjMzk7cyBhYm91dCB0cmFjaW5nIHRoZSAqd2h5KiBhbmQgdGhlICp3aGVuKi4gSSB3YW50IGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLiBJJiMzOTttIHRoaW5raW5nLi4uCgoqICAgKipNYXBwaW5nIHRoZSBDYWxsIEdyYXBoOioqIExldCYjMzk7cyB0cmFjZSBiYWNrIGZyb20gYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AuIFdoYXQgZnVuY3Rpb25zIGRpcmVjdGx5IGludm9rZSBpdD8gVGhlbiwgd2hhdCBjYWxsIGl0PyBBbmQgd2hhdCBkbyAqdGhleSogY2FsbD8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgY2FsbCBjaGFpbi4gVW5kZXJzdGFuZGluZyB0aGlzIGNoYWluIGlzIGNydWNpYWwuCiogICAqKkFsdGVybmF0aXZlIFBhdGhzOioqIEkgc2hvdWxkIHJlbWVtYmVyIG90aGVyIGNhbGxzIHRvIGBzd2FwX3JhbmdlX2ZyZWVgIGFzIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBtZXRob2RzIHRoYXQgYXJlIHVzZWQgdG8gZnJlZSB0aGUgc3dhcCByYW5nZS4KKiAgICoqQ29udGV4dHVhbCBBbmFseXNpczoqKiBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGVzZSBjYWxscy4gV2hhdCYjMzk7cyB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbSB3aGVuIHRoZXNlIGZyZWVpbmcgb3BlcmF0aW9ucyBhcmUgdHJpZ2dlcmVkPyBJcyBpdCBkdXJpbmcgcGFnZSByZWNsYWltLCBwcm9jZXNzIHRlcm1pbmF0aW9uLCBmaWxlc3lzdGVtIHVubW91bnQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgY29udGV4dCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpc3N1ZXMuCiogICAqKkRhdGEgU3RydWN0dXJlczoqKiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQ/IFN3YXAgY2FjaGUgZW50cmllcywgcGFnZSB0YWJsZSBlbnRyaWVzLCBtYXBwaW5ncy4uLiBob3cgZG8gdGhlc2UgaW50ZXJhY3Qgd2l0aCB0aGUgZnVuY3Rpb25zIEkmIzM5O20gaW52ZXN0aWdhdGluZz8gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBtb2RpZmllZCBwcmlvciB0byBgc3dhcF9yYW5nZV9mcmVlYCBjYWxscy4KKiAgICoqUG90ZW50aWFsIFByb2JsZW0gQXJlYXM6KiogSSYjMzk7bSBtZW50YWxseSBmbGFnZ2luZyBwb3RlbnRpYWwgdHJvdWJsZSBzcG90cy4gQXJlIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbnMgcG9zc2libGU/IElzIHRoZXJlIGxvY2tpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGNvbnRlbnRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBjb3JydXB0aW9uIHNjZW5hcmlvcyB0aGF0IG1pZ2h0IGJlIHRyaWdnZXJlZCBieSB0aGVzZSBmcmVlcz8gVGhpbmtpbmcgb2YgcG90ZW50aWFsIHByb2JsZW1zICpub3cqIHdpbGwgbWFrZSBsYXRlciBkZWJ1Z2dpbmcgZmFzdGVyLgoqICAgKipUb29scyBhbmQgVGVjaG5pcXVlczoqKiBJIG5lZWQgdG8gY29uc2lkZXIgd2hhdCB0b29scyBJJiMzOTtsbCB1c2UuIGBnZGJgLCBvZiBjb3Vyc2UsIGJ1dCBhbHNvIG1heWJlIGBwZXJmYCB0byBwcm9maWxlIGFuZCBzZWUgaWYgdGhlcmUgYXJlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBpbiB0aGUgY29kZS4gSSBtaWdodCB3YW50IHRvIGFkZCBzb21lIGluc3RydW1lbnRhdGlvbiB0byBsb2cgdGhlc2UgY2FsbHMgYW5kIHVuZGVyc3RhbmQgdGhlIHBhcmFtZXRlcnMgYmVpbmcgcGFzc2VkLgoKTXkgZ29hbCBpcyB0byBkZXZlbG9wIGEgZGVlcCwgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBzd2FwIGZyZWVpbmcgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmQgb3B0aW1pemF0aW9uLCBidWcgZml4aW5nLCBvciBzaW1wbHkgZ2FpbmluZyBhIGJldHRlciBncmFzcCBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwLmg9MjQ4PXZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuLS1cbm1tL3N3YXAuaC0yNTAtLyogRm9yIGludGVybmFsIHVzZSAqL1xubW0vc3dhcC5oOjI1MTpleHRlcm4gdm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxubW0vc3dhcC5oLTI1Mi1cdFx0XHRcdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MjU3PXN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMjkyLVx0aWYgKCFmb2xpb19zd2FwcGVkKSB7XG5tbS9zd2FwX3N0YXRlLmM6MjkzOlx0XHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9zdGFydCwgbnJfcGFnZXMpO1xubW0vc3dhcF9zdGF0ZS5jLTI5NC1cdH0gZWxzZSBpZiAobmVlZF9mcmVlKSB7XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTI5Ny1cdFx0XHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpKSlcbm1tL3N3YXBfc3RhdGUuYzoyOTg6XHRcdFx0XHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9vZmYsIDEpO1xubW0vc3dhcF9zdGF0ZS5jLTI5OS1cdFx0fSB3aGlsZSAoJiM0MzsmIzQzO2NpX29mZiBcdTAwM2MgY2lfZW5kKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE2MjItXHRcdGlmIChjaV9iYXRjaCAhPSAtMSkge1xubW0vc3dhcGZpbGUuYzoxNjIzOlx0XHRcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX2JhdGNoLCBjaV9vZmYgLSBjaV9iYXRjaCk7XG5tbS9zd2FwZmlsZS5jLTE2MjQtXHRcdFx0Y2lfYmF0Y2ggPSAtMTtcbi0tXG5tbS9zd2FwZmlsZS5jLTE2MjgtXHRpZiAoY2lfYmF0Y2ggIT0gLTEpXG5tbS9zd2FwZmlsZS5jOjE2Mjk6XHRcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX2JhdGNoLCBjaV9vZmYgLSBjaV9iYXRjaCk7XG5tbS9zd2FwZmlsZS5jLTE2MzAtXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE4OTk9c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5tbS9zd2FwZmlsZS5jLTE5MzEtICovXG5tbS9zd2FwZmlsZS5jOjE5MzI6dm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxubW0vc3dhcGZpbGUuYy0xOTMzLVx0XHRcdFx0IHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcGZpbGUuYz0yMjE0PXZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxubW0vc3dhcGZpbGUuYy0yMjI4LVx0aWYgKCFzd3BfdGJfaXNfZm9saW8oX19zd2FwX3RhYmxlX2dldChjaSwgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUikpKVxubW0vc3dhcGZpbGUuYzoyMjI5Olx0XHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBvZmZzZXQgJSBTV0FQRklMRV9DTFVTVEVSLCAxKTtcbm1tL3N3YXBmaWxlLmMtMjIzMC1cdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkzMwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFpzd2FwIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB6c3dhcGAgdGhpbmcuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29yZSBmdW5jdGlvbnMuIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgenN3YXBfc3RvcmVgIGFuZCBgenN3YXBfaW52YWxpZGF0ZWAuIExvb2tzIGxpa2UgYHpzd2FwX3N0b3JlYCwgd2hpY2ggbGl2ZXMgaW4gYG1tL3pzd2FwLmNgLCBpcyBhbiBleHBvcnRlZCBmdW5jdGlvbiDigJMgYSBjcnVjaWFsIHBpZWNlLCBhcyBleHBlY3RlZCwgaXQmIzM5O3MgYSBgYm9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKWAuIEdvb2QuIEFuZCBgenN3YXBfaW52YWxpZGF0ZWAgaXMgYWxzbyB0aGVyZTogYSBgdm9pZCB6c3dhcF9pbnZhbGlkYXRlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldClgLiBBbHNvIGluIHRoYXQgZmlsZSBpcyBgc3dhcF9yYW5nZV9mcmVlYCwgdGhvdWdoIHRoYXQmIzM5O3Mgc3RhdGljLiBGaW5lLCBub3cgbGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgaXMgZ29pbmcgb24uCgpOb3csIGxldCYjMzk7cyBleHBsb3JlIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBvcHRpb25zIGZvciB0aGlzIGZlYXR1cmUuIFBlZWtpbmcgYXQgYG1tL0tjb25maWdgLCBJIHNlZSB0aGF0IGBDT05GSUdfWlNXQVBgIGlzIGRlcGVuZGVudCBvbiBgQ09ORklHX1NXQVBgLiBNYWtlcyBzZW5zZS4gQW5kIGl0IGxvb2tzIGxpa2UgYFpTV0FQYCBpcyBicmluZ2luZyBpbiBgQ1JZUFRPYCBhbmQgYFpTTUFMTE9DYC4gT2theSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgZm9yIGFueSBvdGhlciBpbXBsaWNpdCBvciByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBkbyBhIGdyZXAgZm9yIGBDT05GSUdfWlNXQVBgIGFjcm9zcyBLY29uZmlnIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZy4qWlNXQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcbi0tXG5tbS9LY29uZmlnLTIxLVxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcbm1tL0tjb25maWctMjMtXHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTM0LVxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9NTk9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy03Ni1cbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG5tbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWZsYXRlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04Mi1cbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cbm1tL0tjb25maWctODQtXHRib29sIFwmIzM0O0xaT1wmIzM0O1xuLS1cbm1tL0tjb25maWctODgtXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXG5tbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0LVxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxubW0vS2NvbmZpZy05Ni1cdGJvb2wgXCYjMzQ7TFo0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDAtXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXG5tbS9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7TFo0SENcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwNi1cbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxubW0vS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2Vcbm1tL0tjb25maWctMTEzLVxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk3NgoJCQkJCQkJb3V0cHV0OiAxMzYKCQkJCQkJCXRob3VnaHRzOiAyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBDb25maWd1cmF0aW9uIERlY2lzaW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHNldHRpbmcgdXAgYSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24uIEZpcnN0LCB0aGUga2V5IHNldHRpbmdzIHRvIGVuYWJsZSBhcmUgYFNXQVBgIGFuZCBgWlNXQVBgLiBUaG9zZSBhcmUgZnVuZGFtZW50YWwuIE5vdywgSSBuZWVkIHRvIGRlZmluZSB0aGUgZm9jdXMgc3ltYm9sczsgdGhlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gdGFyZ2V0IHNwZWNpZmljYWxseS4gRnJvbSB0aGUgcHJvbXB0LCBpdCBzZWVtcyBsaWtlIHRoZXNlIGFyZSB0aGUgY3JpdGljYWwgb25lcyBmb3IgdGhpcyBzY2VuYXJpbzogYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2ludmFsaWRhdGVgLCBgc3dhcF9yYW5nZV9mcmVlYCwgYW5kIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLgoKTGV0IG1lIHJ1biB0aHJvdWdoIGV2ZXJ5dGhpbmcgb25lIG1vcmUgdGltZSB0byBtYWtlIHN1cmUgaXQgYWxsIGFsaWducyB3aXRoIHRoZSByZXF1aXJlbWVudHMuIEl0JiMzOTtzIG1hcmtlZCBhcyBgV29ydGhGdXp6aW5nOiB0cnVlYCwgd2hpY2ggaXMgZ29vZCBiZWNhdXNlIHRoaXMgdGFyZ2V0cyBib3RoIGBtbS96c3dhcC5jYCBhbmQgYG1tL3N3YXBmaWxlLmNgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIGl0JiMzOTtzIGRpcmVjdGx5IHRvdWNoaW5nIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCwgaW1wb3J0YW50bHksIGludmFsaWRhdGlvbiBwYXRocy4gVGhlIGNob3NlbiBgRm9jdXNTeW1ib2xzYCBhcmUgZGVmaW5pdGVseSBub3QgdWJpcXVpdG91c2x5IHVzZWQgd2l0aGluIHRoZSBjb2RlYmFzZSwgd2hpY2ggaXMgZ29vZCAtIHRhcmdldHMuIEkgaGF2ZSB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNldCB0byBleGFjdGx5IHdoYXQgdGhlIHByb21wdCBzcGVjaWZpZWQsIGBbJiMzNDtTV0FQJiMzNDssICYjMzQ7WlNXQVAmIzM0O11gLiBUaGUgcmVhc29uaW5nIHByb3ZpZGVkIGlzIGFsc28gY29uY2lzZSBhbmQgYWNjdXJhdGUuIEl0IGNvdmVycyB3aHkgdGhpcyBmdXp6aW5nIGlzIHdvcnRod2hpbGUgKHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBjYWNoZSBpbnZhbGlkYXRpb24gaGFuZGxpbmcgYW5kIGVhcmx5LWV4aXQgY2hlY2tzKSwgYW5kIGl0IGNvcnJlY3RseSBsaXN0cyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLgoKQWxyaWdodCwgc2VlbXMgc29saWQuIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgY29uZmlndXJhdGlvbi4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7enN3YXBfaW52YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtzd2FwX3JhbmdlX2ZyZWUmIzM0OywKICAgICYjMzQ7X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgenN3YXAgaW52YWxpZGF0aW9uIGludGVyZmFjZSBhbmQgYWRkcyBlYXJseS1leGl0IG9wdGltaXphdGlvbiBjaGVja3MgKHZpYSB6c3dhcF9uZXZlcl9lbmFibGVkKCkpIGluIHpzd2FwX3N0b3JlKCkgYW5kIHN3YXBfcmFuZ2VfZnJlZSgpLiBTaW5jZSB0aGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3dhcCBhbmQgY29tcHJlc3NlZCBjYWNoZSBsb2dpYyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7enN3YXBfaW52YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtzd2FwX3JhbmdlX2ZyZWUmIzM0OywKICAgICYjMzQ7X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgenN3YXAgaW52YWxpZGF0aW9uIGludGVyZmFjZSBhbmQgYWRkcyBlYXJseS1leGl0IG9wdGltaXphdGlvbiBjaGVja3MgKHZpYSB6c3dhcF9uZXZlcl9lbmFibGVkKCkpIGluIHpzd2FwX3N0b3JlKCkgYW5kIHN3YXBfcmFuZ2VfZnJlZSgpLiBTaW5jZSB0aGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3dhcCBhbmQgY29tcHJlc3NlZCBjYWNoZSBsb2dpYyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHpzd2FwIGhlbHBlciBmdW5jdGlvbnMgKGB6c3dhcF9pbnZhbGlkYXRlYCBhbmQgYHpzd2FwX3RyZWVgKSB0byBwYXNzIHR5cGUgYW5kIG9mZnNldCBkaXJlY3RseSByYXRoZXIgdGhhbiBwYWNraW5nL3VucGFja2luZyBgc3dwX2VudHJ5X3RgLCBhZGRzIGVhcmx5LWV4aXQgY2hlY2tzIHVzaW5nIGB6c3dhcF9uZXZlcl9lbmFibGVkKClgLCBhbmQgc2ltcGxpZmllcyBlbnRyeSBjbGVhbnVwIGluIGB6c3dhcF9zdG9yZSgpYC5cblxuTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFBvdGVudGlhbCBpc3N1ZXMgcmVsYXRpbmcgdG8genN3YXAgdHJlZSBpbmRleGluZyBvciBlbnRyeSBsaWZldGltZXMgZmFsbCB1bmRlciBtZW1vcnkgc2FmZXR5IC8gY29uY3VycmVuY3kgY29uY2VybnMgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycy4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzI3MDY4NjlmMTYyMGQxMjRhOWM3Yzk3Yjc4Y2QxZjNhMjk1ODcxMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDExOjIxOjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oCmluZGV4IDMwYzE5M2ExMjA3ZTEuLjQ2M2JkZWU1YzFlMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmgKQEAgLTI3LDcgJiM0MzsyNyw3IEBAIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUgewogdW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKTsKIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbyk7CiBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKLXZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApOwomIzQzO3ZvaWQgenN3YXBfaW52YWxpZGF0ZShpbnQgdHlwZSwgcGdvZmZfdCBvZmZzZXQpOwogaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CiB2b2lkIHpzd2FwX3N3YXBvZmYoaW50IHR5cGUpOwogdm9pZCB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKQEAgLTQ5LDcgJiM0Mzs0OSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbykKIAlyZXR1cm4gLUVOT0VOVDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKSB7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9pbnZhbGlkYXRlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldCkge30KIHN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDA1ZDM0MDgzOTZmOTguLjUwNTU5MjA1MTkyNDMgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtMTMxOCw4ICYjNDM7MTMxOCwxMCBAQCBzdGF0aWMgdm9pZCBzd2FwX3JhbmdlX2ZyZWUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKIAl2b2lkICgqc3dhcF9zbG90X2ZyZWVfbm90aWZ5KShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcpOwogCXVuc2lnbmVkIGludCBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KQotCQl6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeShzaS0mZ3Q7dHlwZSwgb2Zmc2V0ICYjNDM7IGkpKTsKJiM0MzsJaWYgKCF6c3dhcF9uZXZlcl9lbmFibGVkKCkpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBucl9lbnRyaWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQl6c3dhcF9pbnZhbGlkYXRlKHNpLSZndDt0eXBlLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CX0KIAogCWlmIChzaS0mZ3Q7ZmxhZ3MgJmFtcDsgU1dQX0JMS0RFVikKIAkJc3dhcF9zbG90X2ZyZWVfbm90aWZ5ID0KZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IGExMmI2NDUyYTIyNTEuLjYxOTdhYTcxZTMzYzkgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMjI4LDEwICYjNDM7MjI4LDE1IEBAIHN0YXRpYyBib29sIHpzd2FwX2hhc19wb29sOwogLyogT25lIHN3YXAgYWRkcmVzcyBzcGFjZSBmb3IgZWFjaCA2NE0gc3dhcCBzcGFjZSAqLwogI2RlZmluZSBaU1dBUF9BRERSRVNTX1NQQUNFX1NISUZUIDE0CiAjZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfUEFHRVMgKDEgJmx0OyZsdDsgWlNXQVBfQUREUkVTU19TUEFDRV9TSElGVCkKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCB4YXJyYXkgKnpzd2FwX3RyZWUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KQomIzQzO3sKJiM0MzsJcmV0dXJuICZhbXA7enN3YXBfdHJlZXNbdHlwZV1bb2Zmc2V0ICZndDsmZ3Q7IFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlRdOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHhhcnJheSAqc3dhcF96c3dhcF90cmVlKHN3cF9lbnRyeV90IHN3cCkKIHsKLQlyZXR1cm4gJmFtcDt6c3dhcF90cmVlc1tzd3BfdHlwZShzd3ApXVtzd3Bfb2Zmc2V0KHN3cCkKLQkJJmd0OyZndDsgWlNXQVBfQUREUkVTU19TUEFDRV9TSElGVF07CiYjNDM7CXJldHVybiB6c3dhcF90cmVlKHN3cF90eXBlKHN3cCksIHN3cF9vZmZzZXQoc3dwKSk7CiB9CiAKICNkZWZpbmUgenN3YXBfcG9vbF9kZWJ1Zyhtc2csIHApCQkJXApAQCAtMTQ4Nyw2ICYjNDM7MTQ5Miw5IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbykKIAlWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7CiAJVk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpOwogCiYjNDM7CWlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJaWYgKCF6c3dhcF9lbmFibGVkKQogCQlnb3RvIGNoZWNrX29sZDsKIApAQCAtMTU0NCwxNSAmIzQzOzE1NTIsOSBAQCBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJaWYgKCFyZXQpIHsKIAkJdW5zaWduZWQgdHlwZSA9IHN3cF90eXBlKHN3cCk7CiAJCXBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApOwotCQlzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5OwotCQlzdHJ1Y3QgeGFycmF5ICp0cmVlOwotCi0JCWZvciAoaW5kZXggPSAwOyBpbmRleCAmbHQ7IG5yX3BhZ2VzOyAmIzQzOyYjNDM7aW5kZXgpIHsKLQkJCXRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoc3dwX2VudHJ5KHR5cGUsIG9mZnNldCAmIzQzOyBpbmRleCkpOwotCQkJZW50cnkgPSB4YV9lcmFzZSh0cmVlLCBvZmZzZXQgJiM0MzsgaW5kZXgpOwotCQkJaWYgKGVudHJ5KQotCQkJCXpzd2FwX2VudHJ5X2ZyZWUoZW50cnkpOwotCQl9CiYjNDM7CiYjNDM7CQlmb3IgKGluZGV4ID0gMDsgaW5kZXggJmx0OyBucl9wYWdlczsgJiM0MzsmIzQzO2luZGV4KQomIzQzOwkJCXpzd2FwX2ludmFsaWRhdGUodHlwZSwgb2Zmc2V0ICYjNDM7IGluZGV4KTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTY1OSwxMCAmIzQzOzE2NjEsOSBAQCBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAwOwogfQogCi12b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKQomIzQzO3ZvaWQgenN3YXBfaW52YWxpZGF0ZShpbnQgdHlwZSwgcGdvZmZfdCBvZmZzZXQpCiB7Ci0JcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7Ci0Jc3RydWN0IHhhcnJheSAqdHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3ApOwomIzQzOwlzdHJ1Y3QgeGFycmF5ICp0cmVlID0genN3YXBfdHJlZSh0eXBlLCBvZmZzZXQpOwogCXN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnk7CiAKIAlpZiAoeGFfZW1wdHkodHJlZSkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjgyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWnN3YXAgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEV4cG9zdXJlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIGl0IGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIHNjcnV0aW55LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgaW4gZGV0YWlsLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gcmV2b2x2ZXMgYXJvdW5kIGB6c3dhcF9pbnZhbGlkYXRlYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHN3YXAgaW5mcmFzdHJ1Y3R1cmUuCgpUaGUgc2lnbmlmaWNhbnQgY2hhbmdlcyBhcmUgaW4gdGhlIGB6c3dhcC5oYCBoZWFkZXIsIHdoZXJlIHRoZSBzaWduYXR1cmUgb2YgYHpzd2FwX2ludmFsaWRhdGVgIGhhcyBiZWVuIGFsdGVyZWQgZnJvbSB0YWtpbmcgYSBgc3dwX2VudHJ5X3RgIHRvIHRha2luZyBgaW50IHR5cGVgIGFuZCBgcGdvZmZfdCBvZmZzZXRgLiBUaGlzIGlzIGFsc28gdHJ1ZSBmb3IgdGhlIHN0YXRpYyBpbmxpbmUgc3R1Yi4gVGhlIHJlYWwgd29yayBpcyBoYXBwZW5pbmcgaW4gYG1tL3N3YXBmaWxlLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBzd2FwX3JhbmdlX2ZyZWVgLiBUaGUgb3JpZ2luYWwgY29kZSBzaW1wbHkgaXRlcmF0ZWQgYW5kIGNhbGxlZCBgenN3YXBfaW52YWxpZGF0ZWAgd2l0aCBhIGNhbGN1bGF0ZWQgYHN3cF9lbnRyeV90YC4gTm93LCBhIGNoZWNrIGZvciBgenN3YXBfbmV2ZXJfZW5hYmxlZCgpYCBoYXMgYmVlbiBpbnRyb2R1Y2VkLiBJZiB6c3dhcCBpcyBlbmFibGVkLCB0aGUgY29kZSBpdGVyYXRlcyBhbmQgbm93IGNhbGxzIGB6c3dhcF9pbnZhbGlkYXRlYCB3aXRoIHRoZSBpbmRpdmlkdWFsIGB0eXBlYCBhbmQgYG9mZnNldGAgdmFsdWVzLiBJdCBsb29rcyBsaWtlIHRoaXMgYWRkcyBhIGNvbmRpdGlvbmFsIGJsb2NrIHdoZXJlIGB6c3dhcF9pbnZhbGlkYXRlYCBpcyBvbmx5IGV4ZWN1dGVkIGlmIHpzd2FwIGlzIGFjdHVhbGx5IGVuYWJsZWQuCgpUaGUgcGF0Y2ggdGhlbiBtb3ZlcyBvbiB0byBgbW0venN3YXAuY2AuIEhlcmUsIHRoZSBmdW5jdGlvbiBgenN3YXBfdHJlZWAgaXMgYmVpbmcgaW50cm9kdWNlZCwgd2hpY2ggYXBwZWFycyB0byBiZSBhIGhlbHBlciB0byBnZXQgYCZhbXA7enN3YXBfdHJlZXNbdHlwZV1bb2Zmc2V0ICZndDsmZ3Q7IFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlRdYC4gYHN3YXBfenN3YXBfdHJlZWAgaXMgbW9kaWZpZWQgdG8gdXNlIHRoaXMgbmV3IGhlbHBlci4gSXQgYWxzbyBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGFuIGVhcmx5IHJldHVybiBpbiBgenN3YXBfc3RvcmVgIGlmIGB6c3dhcF9uZXZlcl9lbmFibGVkKClgLiBGdXJ0aGVybW9yZSwgaW4gdGhlIGVycm9yL2ZhbGxiYWNrIHBhdGggb2YgYHpzd2FwX3N0b3JlYCwgaXQmIzM5O3MgcmVwbGFjaW5nIGlubGluZSBsb29wcyBmb3IgZXJhc2luZyBlbnRyaWVzIHdpdGggY2FsbHMgdG8gYHpzd2FwX2ludmFsaWRhdGVgIHdpdGggdGhlIG5ldyBzaWduYXR1cmUuIFRoZSBgenN3YXBfaW52YWxpZGF0ZWAgZnVuY3Rpb24gaXRzZWxmIGlzIGFsc28gbW9kaWZpZWQgdG8gdXNlIGB6c3dhcF90cmVlYCBhbmQgdGhlIG5ldyBmdW5jdGlvbiBzaWduYXR1cmUuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgenN3YXBfbmV2ZXJfZW5hYmxlZCgpYCBpcyBiZWluZyBjYWxsZWQgY29ycmVjdGx5LiBUbyBjb25maXJtIHRoYXQgdGhlcmUgYXJlIG5vIGdhcHMgaGVyZSBJIHdpbGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayB0aGUgcGxhY2VzIHdoZXJlIHRoaXMgaXMgYmVpbmcgY2FsbGVkIGFuZCBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIFRoZW4gSSB3aWxsIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBgenN3YXBfaW52YWxpZGF0ZWAgaXMgd29ya2luZyBjb3JyZWN0bHkgYWZ0ZXIgdGhlc2UgbW9kaWZpY2F0aW9ucy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgY2hhbmdlIGluIHNpZ25hdHVyZSBoYXNuJiMzOTt0IGludHJvZHVjZWQgYW55IGlzc3VlcyB3aXRoIGhvdyB0aGUgZGF0YSBpcyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9uZXZlcl9lbmFibGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvenN3YXAuaD0zNj1ib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6Mzc6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xuaW5jbHVkZS9saW51eC96c3dhcC5oLTM4LSNlbHNlXG4tLVxuaW5jbHVkZS9saW51eC96c3dhcC5oPTYyPXN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC96c3dhcC5oLTY2LVxuaW5jbHVkZS9saW51eC96c3dhcC5oOjY3OnN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNjgte1xuLS1cbm1tL21lbW9yeS5jPTQ3NTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDc3OS1cdCAqL1xubW0vbWVtb3J5LmM6NDc4MDpcdGlmICghenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxubW0vbWVtb3J5LmMtNDc4MS1cdFx0cmV0dXJuIDA7XG4tLVxubW0vc2htZW0uYz0yMjQyPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBfYWxsb2NfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9zaG1lbS5jLTIyNTEtXHRpZiAoKHZtZiBcdTAwMjZcdTAwMjYgdW5saWtlbHkodXNlcmZhdWx0ZmRfYXJtZWQodm1mLVx1MDAzZXZtYSkpKSB8fFxubW0vc2htZW0uYzoyMjUyOlx0ICAgICAhenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxubW0vc2htZW0uYy0yMjUzLVx0XHRvcmRlciA9IDA7XG4tLVxubW0vc3dhcGZpbGUuYz0xMzE0PXN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxuLS1cbm1tL3N3YXBmaWxlLmMtMTMyMC1cbm1tL3N3YXBmaWxlLmM6MTMyMTpcdGlmICghenN3YXBfbmV2ZXJfZW5hYmxlZCgpKSB7XG5tbS9zd2FwZmlsZS5jLTEzMjItXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KVxuLS1cbm1tL3pzd2FwLmM9MTI1PWJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKVxuLS1cbm1tL3pzd2FwLmMtMTI5LVxubW0venN3YXAuYzoxMzA6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG5tbS96c3dhcC5jLTEzMS17XG4tLVxubW0venN3YXAuYz0xNDgyPWJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTE0OTQtXG5tbS96c3dhcC5jOjE0OTU6XHRpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxubW0venN3YXAuYy0xNDk2LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0venN3YXAuYz0xNjA2PWludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy0xNjE1LVxubW0venN3YXAuYzoxNjE2Olx0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbm1tL3pzd2FwLmMtMTYxNy1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHpzd2FwX2ludmFsaWRhdGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBgenN3YXBfaW52YWxpZGF0ZWAgYWN0dWFsbHkgd29ya3MuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gdGhlIGBtbS96c3dhcC5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIHRoYXQgZnVuY3Rpb24uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBudWFuY2VzIG9mIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY29tcHJlc3NlZCBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnZhbGlkYXRpb24gcHJvY2VzcyB0aG9yb3VnaGx5LiBBcmUgd2UganVzdCBjbGVhcmluZyB0aGUgc3dhcCBlbnRyeSwgb3IgaXMgdGhlcmUgbW9yZSBpbnZvbHZlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgY29tcHJlc3NlZCBwYWdlcz8gSG93IGRvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aCBvdGhlciBvcGVyYXRpb25zIG9uIHRoYXQgcGFnZT8gSXMgdGhlcmUgYW55IGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2UgY2FjaGUsIG9yIGlzIGl0IGlzb2xhdGVkIHRvIHRoZSBzd2FwIGVudHJpZXM/IEkgbmVlZCB0byBsb29rIGF0IGFueSBsb2NrIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIHBhdHRlcm5zOyB0aGF0JiMzOTtzIGFsd2F5cyBhIGNyaXRpY2FsIGFyZWEgdG8gZXhhbWluZSBmb3IgY29ycmVjdG5lc3MuIEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gYHpzd2FwX2ludmFsaWRhdGVgIGFuZCBzZWUgaG93IHJlc2lsaWVudCB0aGUgc3lzdGVtIGlzIHdoZW4gc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIHRoZSBpbnZhbGlkYXRpb24sIHBlcmhhcHMgd2l0aCBhIGRhbWFnZWQgc3dhcCBlbnRyeSBvciBhIGhhcmR3YXJlIGlzc3VlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyBgenN3YXBfaW52YWxpZGF0ZWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHpzd2FwIGxpZmVjeWNsZSwgcGFydGljdWxhcmx5IHdpdGggcGFnZSByZWNsYWltIGFuZCB0aGUgd3JpdGViYWNrIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgaG93IG11Y2ggbWVtb3J5IGFuZCBvdmVyaGVhZCBpdCBoYXMuIEkgd2FudCB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBvcHRpbWl6YXRpb25zIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIGFuZCB3aGV0aGVyIGl0IGNhbiBjb250cmlidXRlIHRvIHN5c3RlbSBzbG93ZG93bi4gT2theSwgbGV0JiMzOTtzIGdldCBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2NTU6XHRcdCAqL1xuMTY1NjpcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4xNjU3Olx0XHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQpO1xuMTY1ODpcdFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XG4xNjU5Olx0XG4xNjYwOlx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuMTY2MTpcdFx0cmV0dXJuIDA7XG4xNjYyOlx0fVxuMTY2MzpcdFxuMTY2NDpcdHZvaWQgenN3YXBfaW52YWxpZGF0ZShpbnQgdHlwZSwgcGdvZmZfdCBvZmZzZXQpXG4xNjY1Olx0e1xuMTY2NjpcdFx0c3RydWN0IHhhcnJheSAqdHJlZSA9IHpzd2FwX3RyZWUodHlwZSwgb2Zmc2V0KTtcbjE2Njc6XHRcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnk7XG4xNjY4Olx0XG4xNjY5Olx0XHRpZiAoeGFfZW1wdHkodHJlZSkpXG4xNjcwOlx0XHRcdHJldHVybjtcbjE2NzE6XHRcbjE2NzI6XHRcdGVudHJ5ID0geGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcbjE2NzM6XHRcdGlmIChlbnRyeSlcbjE2NzQ6XHRcdFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XG4xNjc1Olx0fVxuMTY3NjpcdFxuMTY3NzpcdGludCB6c3dhcF9zd2Fwb24oaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4xNjc4Olx0e1xuMTY3OTpcdFx0c3RydWN0IHhhcnJheSAqdHJlZXMsICp0cmVlO1xuMTY4MDpcdFx0dW5zaWduZWQgaW50IG5yLCBpO1xuMTY4MTpcdFxuMTY4MjpcdFx0bnIgPSBESVZfUk9VTkRfVVAobnJfcGFnZXMsIFpTV0FQX0FERFJFU1NfU1BBQ0VfUEFHRVMpO1xuMTY4MzpcdFx0dHJlZXMgPSBrdnphbGxvY19vYmpzKCp0cmVlLCBucik7XG4xNjg0Olx0XHRpZiAoIXRyZWVzKSB7XG4xNjg1Olx0XHRcdHByX2VycihcJiMzNDthbGxvYyBmYWlsZWQsIHpzd2FwIGRpc2FibGVkIGZvciBzd2FwIHR5cGUgJWRcXG5cJiMzNDssIHR5cGUpO1xuMTY4NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE2ODc6XHRcdH1cbjE2ODg6XHRcbjE2ODk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yOyBpJiM0MzsmIzQzOylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg3NgoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiA1MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmV3IENvbmNlcm5zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGUgcGF0Y2gmIzM5O3MgY2hhbmdlczogSXQmIzM5O3MgYSByZWZhY3RvcmluZyBvZiBgenN3YXBfaW52YWxpZGF0ZWAgdG8gdXNlIGAodHlwZSwgb2Zmc2V0KWAgaW5zdGVhZCBvZiBgc3dwX2VudHJ5X3RgLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgYXZvaWRpbmcgdW5uZWNlc3Nhcnkgc3dwX2VudHJ5IGNyZWF0aW9uLiBUaGVyZSYjMzk7cyBhbHNvIHNvbWUgb3B0aW1pemF0aW9uIGluIGBzd2FwX3JhbmdlX2ZyZWVgIHJlbGF0ZWQgdG8gYHpzd2FwX25ldmVyX2VuYWJsZWQoKWAgYW5kIGEgc2ltaWxhciBvcHRpbWl6YXRpb24gYW5kIHNpbXBsaWZpY2F0aW9uIGluIGB6c3dhcF9zdG9yZWAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgS01TQU4gY29uY2VybnM/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuCgoqICAgKipVc2VyLXNwYWNlIGV4cG9zdXJlPyoqIE5vcGUuIE5vIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IG91dCwgYW5kIG5vdGhpbmcgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCiogICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNlPyoqIE5vLiBBbGwgdmFyaWFibGVzIGludm9sdmVkIGFyZSBlaXRoZXIgZnVuY3Rpb24gYXJndW1lbnRzLCB3ZWxsLWluaXRpYWxpemVkIGdsb2JhbHMsIG9yIGZsYWdzLiBObyByaXNrcyB0aGVyZS4KKiAgICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbj8qKiBEb2VzbiYjMzk7dCBzZWVtIHNvLiBObyBjb21wbGV4IHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWQgdG8gbGF0ZXIgdW5pbml0aWFsaXplZCByZWFkcy4KKiAgICoqQm91bmRzIGNoZWNrIHZ1bG5lcmFiaWxpdGllcz8qKiBOb3RoaW5nIHRoYXQgY291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGlzc3VlcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUga2luZHMgb2YgbWVtb3J5LXJlbGF0ZWQgZXJyb3JzIHRoYXQgKmNvdWxkKiBhcmlzZSBhcmU6IGFycmF5IGluZGV4aW5nIGludG8gYHpzd2FwX3RyZWVzYCwgbG9ja2luZyBvciBjb25jdXJyZW5jeSBwcm9ibGVtcywgb3IgdXNlLWFmdGVyLWZyZWUvbG9naWMgYnVncyB3aXRoaW4gdGhlIHpzd2FwIGxpZmVjeWNsZS4gQnV0IHRob3NlIGFyZSBwcmVjaXNlbHkgdGhlIHRoaW5ncyBLQVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaCEKCk15IGNvbmNsdXNpb246IHNpbmNlIEtBU0FOIGhhbmRsZXMgdGhlIHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzLCB0aGVyZSYjMzk7cyBubyBuZWVkIGZvciBLTVNBTiB0byBiZSBpbnZvbHZlZCBoZXJlLiBUaGlzIGFsbCBsb29rcyBnb29kLiBUaW1lIHRvIGZpbmFsaXplIHRoZSBhbmFseXNpcy4gSSYjMzk7bSBzZXR0aW5nIHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgenN3YXAgaGVscGVyIGZ1bmN0aW9ucyAoYHpzd2FwX2ludmFsaWRhdGVgIGFuZCBgenN3YXBfdHJlZWApIHRvIHBhc3MgdHlwZSBhbmQgb2Zmc2V0IGRpcmVjdGx5IHJhdGhlciB0aGFuIHBhY2tpbmcvdW5wYWNraW5nIGBzd3BfZW50cnlfdGAsIGFkZHMgZWFybHktZXhpdCBjaGVja3MgdXNpbmcgYHpzd2FwX25ldmVyX2VuYWJsZWQoKWAsIGFuZCBzaW1wbGlmaWVzIGVudHJ5IGNsZWFudXAgaW4gYHpzd2FwX3N0b3JlKClgLlxuXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gUG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byB6c3dhcCB0cmVlIGluZGV4aW5nIG9yIGVudHJ5IGxpZmV0aW1lcyBmYWxsIHVuZGVyIG1lbW9yeSBzYWZldHkgLyBjb25jdXJyZW5jeSBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgenN3YXAgaGVscGVyIGZ1bmN0aW9ucyAoYHpzd2FwX2ludmFsaWRhdGVgIGFuZCBgenN3YXBfdHJlZWApIHRvIHBhc3MgdHlwZSBhbmQgb2Zmc2V0IGRpcmVjdGx5IHJhdGhlciB0aGFuIHBhY2tpbmcvdW5wYWNraW5nIGBzd3BfZW50cnlfdGAsIGFkZHMgZWFybHktZXhpdCBjaGVja3MgdXNpbmcgYHpzd2FwX25ldmVyX2VuYWJsZWQoKWAsIGFuZCBzaW1wbGlmaWVzIGVudHJ5IGNsZWFudXAgaW4gYHpzd2FwX3N0b3JlKClgLlxuXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gUG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byB6c3dhcCB0cmVlIGluZGV4aW5nIG9yIGVudHJ5IGxpZmV0aW1lcyBmYWxsIHVuZGVyIG1lbW9yeSBzYWZldHkgLyBjb25jdXJyZW5jeSBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDExOjIxOjUzLjQ3Njk2NjU2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjkwOTUwNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienN3YXBfc3RvcmVcIixcbiAgICBcInpzd2FwX2ludmFsaWRhdGVcIixcbiAgICBcInN3YXBfcmFuZ2VfZnJlZVwiLFxuICAgIFwiX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgenN3YXAgaGVscGVyIGZ1bmN0aW9ucyAoYHpzd2FwX2ludmFsaWRhdGVgIGFuZCBgenN3YXBfdHJlZWApIHRvIHBhc3MgdHlwZSBhbmQgb2Zmc2V0IGRpcmVjdGx5IHJhdGhlciB0aGFuIHBhY2tpbmcvdW5wYWNraW5nIGBzd3BfZW50cnlfdGAsIGFkZHMgZWFybHktZXhpdCBjaGVja3MgdXNpbmcgYHpzd2FwX25ldmVyX2VuYWJsZWQoKWAsIGFuZCBzaW1wbGlmaWVzIGVudHJ5IGNsZWFudXAgaW4gYHpzd2FwX3N0b3JlKClgLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0aW5nIHRvIHpzd2FwIHRyZWUgaW5kZXhpbmcgb3IgZW50cnkgbGlmZXRpbWVzIGZhbGwgdW5kZXIgbWVtb3J5IHNhZmV0eSAvIGNvbmN1cnJlbmN5IGNvbmNlcm5zIGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMuIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHpzd2FwIGludmFsaWRhdGlvbiBpbnRlcmZhY2UgYW5kIGFkZHMgZWFybHktZXhpdCBvcHRpbWl6YXRpb24gY2hlY2tzICh2aWEgenN3YXBfbmV2ZXJfZW5hYmxlZCgpKSBpbiB6c3dhcF9zdG9yZSgpIGFuZCBzd2FwX3JhbmdlX2ZyZWUoKS4gU2luY2UgdGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN3YXAgYW5kIGNvbXByZXNzZWQgY2FjaGUgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjE6NTMuNDc2OTcxNzM2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk2NDQ5MzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzI3MDY4NjlmMTYyMGQxMjRhOWM3Yzk3Yjc4Y2QxZjNhMjk1ODcxM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAxMToyMTo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG5pbmRleCAzMGMxOTNhMTIwN2UxLi40NjNiZGVlNWMxZTE0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxcbkBAIC0yNyw3ICsyNyw3IEBAIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge1xcbiB1bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpO1xcbiBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tdm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cCk7XFxuK3ZvaWQgenN3YXBfaW52YWxpZGF0ZShpbnQgdHlwZSwgcGdvZmZfdCBvZmZzZXQpO1xcbiBpbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4gdm9pZCB6c3dhcF9zd2Fwb2ZmKGludCB0eXBlKTtcXG4gdm9pZCB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG5AQCAtNDksNyArNDksNyBAQCBzdGF0aWMgaW5saW5lIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdHJldHVybiAtRU5PRU5UO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApIHt9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9pbnZhbGlkYXRlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldCkge31cXG4gc3RhdGljIGlubGluZSBpbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xcbmluZGV4IDA1ZDM0MDgzOTZmOTguLjUwNTU5MjA1MTkyNDMgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xcbisrKyBiL21tL3N3YXBmaWxlLmNcXG5AQCAtMTMxOCw4ICsxMzE4LDEwIEBAIHN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbiBcXHR2b2lkICgqc3dhcF9zbG90X2ZyZWVfbm90aWZ5KShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcpO1xcbiBcXHR1bnNpZ25lZCBpbnQgaTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9lbnRyaWVzOyBpKyspXFxuLVxcdFxcdHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5KHNpLVxcdTAwM2V0eXBlLCBvZmZzZXQgKyBpKSk7XFxuK1xcdGlmICghenN3YXBfbmV2ZXJfZW5hYmxlZCgpKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9lbnRyaWVzOyBpKyspXFxuK1xcdFxcdFxcdHpzd2FwX2ludmFsaWRhdGUoc2ktXFx1MDAzZXR5cGUsIG9mZnNldCArIGkpO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoc2ktXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1dQX0JMS0RFVilcXG4gXFx0XFx0c3dhcF9zbG90X2ZyZWVfbm90aWZ5ID1cXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcXG5pbmRleCBhMTJiNjQ1MmEyMjUxLi42MTk3YWE3MWUzM2M5IDEwMDY0NFxcbi0tLSBhL21tL3pzd2FwLmNcXG4rKysgYi9tbS96c3dhcC5jXFxuQEAgLTIyOCwxMCArMjI4LDE1IEBAIHN0YXRpYyBib29sIHpzd2FwX2hhc19wb29sO1xcbiAvKiBPbmUgc3dhcCBhZGRyZXNzIHNwYWNlIGZvciBlYWNoIDY0TSBzd2FwIHNwYWNlICovXFxuICNkZWZpbmUgWlNXQVBfQUREUkVTU19TUEFDRV9TSElGVCAxNFxcbiAjZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfUEFHRVMgKDEgXFx1MDAzY1xcdTAwM2MgWlNXQVBfQUREUkVTU19TUEFDRV9TSElGVClcXG4rXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhhcnJheSAqenN3YXBfdHJlZShpbnQgdHlwZSwgcGdvZmZfdCBvZmZzZXQpXFxuK3tcXG4rXFx0cmV0dXJuIFxcdTAwMjZ6c3dhcF90cmVlc1t0eXBlXVtvZmZzZXQgXFx1MDAzZVxcdTAwM2UgWlNXQVBfQUREUkVTU19TUEFDRV9TSElGVF07XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHhhcnJheSAqc3dhcF96c3dhcF90cmVlKHN3cF9lbnRyeV90IHN3cClcXG4ge1xcbi1cXHRyZXR1cm4gXFx1MDAyNnpzd2FwX3RyZWVzW3N3cF90eXBlKHN3cCldW3N3cF9vZmZzZXQoc3dwKVxcbi1cXHRcXHRcXHUwMDNlXFx1MDAzZSBaU1dBUF9BRERSRVNTX1NQQUNFX1NISUZUXTtcXG4rXFx0cmV0dXJuIHpzd2FwX3RyZWUoc3dwX3R5cGUoc3dwKSwgc3dwX29mZnNldChzd3ApKTtcXG4gfVxcbiBcXG4gI2RlZmluZSB6c3dhcF9wb29sX2RlYnVnKG1zZywgcClcXHRcXHRcXHRcXFxcXFxuQEAgLTE0ODcsNiArMTQ5Miw5IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpO1xcbiBcXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSk7XFxuIFxcbitcXHRpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRpZiAoIXpzd2FwX2VuYWJsZWQpXFxuIFxcdFxcdGdvdG8gY2hlY2tfb2xkO1xcbiBcXG5AQCAtMTU0NCwxNSArMTU1Miw5IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0aWYgKCFyZXQpIHtcXG4gXFx0XFx0dW5zaWduZWQgdHlwZSA9IHN3cF90eXBlKHN3cCk7XFxuIFxcdFxcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xcbi1cXHRcXHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5O1xcbi1cXHRcXHRzdHJ1Y3QgeGFycmF5ICp0cmVlO1xcbi1cXG4tXFx0XFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFxcdTAwM2MgbnJfcGFnZXM7ICsraW5kZXgpIHtcXG4tXFx0XFx0XFx0dHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3BfZW50cnkodHlwZSwgb2Zmc2V0ICsgaW5kZXgpKTtcXG4tXFx0XFx0XFx0ZW50cnkgPSB4YV9lcmFzZSh0cmVlLCBvZmZzZXQgKyBpbmRleCk7XFxuLVxcdFxcdFxcdGlmIChlbnRyeSlcXG4tXFx0XFx0XFx0XFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XFxuLVxcdFxcdH1cXG4rXFxuK1xcdFxcdGZvciAoaW5kZXggPSAwOyBpbmRleCBcXHUwMDNjIG5yX3BhZ2VzOyArK2luZGV4KVxcbitcXHRcXHRcXHR6c3dhcF9pbnZhbGlkYXRlKHR5cGUsIG9mZnNldCArIGluZGV4KTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5AQCAtMTY1OSwxMCArMTY2MSw5IEBAIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi12b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKVxcbit2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KVxcbiB7XFxuLVxcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xcbi1cXHRzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKHN3cCk7XFxuK1xcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSB6c3dhcF90cmVlKHR5cGUsIG9mZnNldCk7XFxuIFxcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnk7XFxuIFxcbiBcXHRpZiAoeGFfZW1wdHkodHJlZSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDExOjIxOjU1LjA3NDAyOTIzNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzY0NzE1Mjg1NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwienN3YXBfaW52YWxpZGF0ZVwiLFxuICAgIFwic3dhcF9yYW5nZV9mcmVlXCIsXG4gICAgXCJfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHpzd2FwIGludmFsaWRhdGlvbiBpbnRlcmZhY2UgYW5kIGFkZHMgZWFybHktZXhpdCBvcHRpbWl6YXRpb24gY2hlY2tzICh2aWEgenN3YXBfbmV2ZXJfZW5hYmxlZCgpKSBpbiB6c3dhcF9zdG9yZSgpIGFuZCBzd2FwX3JhbmdlX2ZyZWUoKS4gU2luY2UgdGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN3YXAgYW5kIGNvbXByZXNzZWQgY2FjaGUgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMjcwNjg2OWYxNjIwZDEyNGE5YzdjOTdiNzhjZDFmM2EyOTU4NzEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTE6MjE6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbmluZGV4IDMwYzE5M2ExMjA3ZTEuLjQ2M2JkZWU1YzFlMTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuQEAgLTI3LDcgKzI3LDcgQEAgc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7XG4gdW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKTtcbiBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApO1xuK3ZvaWQgenN3YXBfaW52YWxpZGF0ZShpbnQgdHlwZSwgcGdvZmZfdCBvZmZzZXQpO1xuIGludCB6c3dhcF9zd2Fwb24oaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSk7XG4gdm9pZCB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAtRU5PRU5UO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApIHt9XG4rc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggMDVkMzQwODM5NmY5OC4uNTA1NTkyMDUxOTI0MyAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xMzE4LDggKzEzMTgsMTAgQEAgc3RhdGljIHZvaWQgc3dhcF9yYW5nZV9mcmVlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXG4gXHR2b2lkICgqc3dhcF9zbG90X2ZyZWVfbm90aWZ5KShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcpO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpKyspXG4tXHRcdHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5KHNpLVx1MDAzZXR5cGUsIG9mZnNldCArIGkpKTtcbitcdGlmICghenN3YXBfbmV2ZXJfZW5hYmxlZCgpKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2VudHJpZXM7IGkrKylcbitcdFx0XHR6c3dhcF9pbnZhbGlkYXRlKHNpLVx1MDAzZXR5cGUsIG9mZnNldCArIGkpO1xuK1x0fVxuIFxuIFx0aWYgKHNpLVx1MDAzZWZsYWdzIFx1MDAyNiBTV1BfQkxLREVWKVxuIFx0XHRzd2FwX3Nsb3RfZnJlZV9ub3RpZnkgPVxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBhMTJiNjQ1MmEyMjUxLi42MTk3YWE3MWUzM2M5IDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTIyOCwxMCArMjI4LDE1IEBAIHN0YXRpYyBib29sIHpzd2FwX2hhc19wb29sO1xuIC8qIE9uZSBzd2FwIGFkZHJlc3Mgc3BhY2UgZm9yIGVhY2ggNjRNIHN3YXAgc3BhY2UgKi9cbiAjZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlQgMTRcbiAjZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfUEFHRVMgKDEgXHUwMDNjXHUwMDNjIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlQpXG4rXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgeGFycmF5ICp6c3dhcF90cmVlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldClcbit7XG4rXHRyZXR1cm4gXHUwMDI2enN3YXBfdHJlZXNbdHlwZV1bb2Zmc2V0IFx1MDAzZVx1MDAzZSBaU1dBUF9BRERSRVNTX1NQQUNFX1NISUZUXTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgeGFycmF5ICpzd2FwX3pzd2FwX3RyZWUoc3dwX2VudHJ5X3Qgc3dwKVxuIHtcbi1cdHJldHVybiBcdTAwMjZ6c3dhcF90cmVlc1tzd3BfdHlwZShzd3ApXVtzd3Bfb2Zmc2V0KHN3cClcbi1cdFx0XHUwMDNlXHUwMDNlIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlRdO1xuK1x0cmV0dXJuIHpzd2FwX3RyZWUoc3dwX3R5cGUoc3dwKSwgc3dwX29mZnNldChzd3ApKTtcbiB9XG4gXG4gI2RlZmluZSB6c3dhcF9wb29sX2RlYnVnKG1zZywgcClcdFx0XHRcXFxuQEAgLTE0ODcsNiArMTQ5Miw5IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcbiBcdFZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKTtcbiBcbitcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGlmICghenN3YXBfZW5hYmxlZClcbiBcdFx0Z290byBjaGVja19vbGQ7XG4gXG5AQCAtMTU0NCwxNSArMTU1Miw5IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmICghcmV0KSB7XG4gXHRcdHVuc2lnbmVkIHR5cGUgPSBzd3BfdHlwZShzd3ApO1xuIFx0XHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbi1cdFx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeTtcbi1cdFx0c3RydWN0IHhhcnJheSAqdHJlZTtcbi1cbi1cdFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBucl9wYWdlczsgKytpbmRleCkge1xuLVx0XHRcdHRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoc3dwX2VudHJ5KHR5cGUsIG9mZnNldCArIGluZGV4KSk7XG4tXHRcdFx0ZW50cnkgPSB4YV9lcmFzZSh0cmVlLCBvZmZzZXQgKyBpbmRleCk7XG4tXHRcdFx0aWYgKGVudHJ5KVxuLVx0XHRcdFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XG4tXHRcdH1cbitcbitcdFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBucl9wYWdlczsgKytpbmRleClcbitcdFx0XHR6c3dhcF9pbnZhbGlkYXRlKHR5cGUsIG9mZnNldCArIGluZGV4KTtcbiBcdH1cbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMTY1OSwxMCArMTY2MSw5IEBAIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tdm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cClcbit2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KVxuIHtcbi1cdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xuLVx0c3RydWN0IHhhcnJheSAqdHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3ApO1xuK1x0c3RydWN0IHhhcnJheSAqdHJlZSA9IHpzd2FwX3RyZWUodHlwZSwgb2Zmc2V0KTtcbiBcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnk7XG4gXG4gXHRpZiAoeGFfZW1wdHkodHJlZSkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMToyMTo1NS4wNzQwMzA0NTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTg1MzY0MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBSZWxhdGVkIHRvIFpzd2FwKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGxvb2tzIGludGVyZXN0aW5nOyBpdCdzIHRvdWNoaW5nIHNvbWUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGB6c3dhcGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcy5cblxuRmlyc3QsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBzcGVjaWZpY3MuIFRoZSBwYXRjaCBpbXBhY3RzIGBpbmNsdWRlL2xpbnV4L3pzd2FwLmhgLCBgbW0vc3dhcGZpbGUuY2AsIGFuZCBgbW0venN3YXAuY2AuIEFscmVhZHksIEknbSBzZWVpbmcgYSBzaWduYXR1cmUgY2hhbmdlIGluIGB6c3dhcF9pbnZhbGlkYXRlKClgLCB3aGljaCBpcyBhIGtleSBmdW5jdGlvbiBpbiB6c3dhcCBvcGVyYXRpb25zLiBJdCBhcHBlYXJzIHRvIG5vdyB0YWtlIGEgdHlwZSBhbmQgb2Zmc2V0LiBFeGFtaW5pbmcgdGhlIGBtbS9zd2FwZmlsZS5jYCBjaGFuZ2VzLCBJIHNlZSB0aGF0IHRoZSBwYXRjaCBzZWVtcyB0byBoYXZlIGFkZGVkIGEgY2hlY2ssIGBpZiAoIXpzd2FwX25ldmVyX2VuYWJsZWQoKSlgIGJlZm9yZSBjYWxsaW5nIGB6c3dhcF9pbnZhbGlkYXRlKClgLiBUaGF0J3MgaW1wb3J0YW50LiBJdCBpbmRpY2F0ZXMgdGhhdCB0aGUgaW52YWxpZGF0aW9uIGxvZ2ljIG1pZ2h0IGhhdmUgZGlmZmVyZW50IGJlaGF2aW9yIGRlcGVuZGluZyBvbiBpZiB6c3dhcCBpcyBlbmFibGVkIG9yIG5vdC5cblxuVGhlbiBpbiBgbW0venN3YXAuY2AsIHRoZXJlJ3MgYSBuZXcgaGVscGVyIGZ1bmN0aW9uLCBgenN3YXBfdHJlZSgpYCBhbmQgYW4gdXBkYXRlIG9mIHRoZSBgenN3YXBfaW52YWxpZGF0ZSgpYCBjYWxsIGluIGB6c3dhcF9zdG9yZSgpYC4gVGhpcyBzdWdnZXN0cyBzb21lIHVuZGVybHlpbmcgcmVzdHJ1Y3R1cmluZyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgenN3YXAgaW50ZXJhY3RzIHdpdGggdGhlIHN3YXAgZmlsZSBzeXN0ZW0gYW5kIGl0cyBpbnZhbGlkYXRpb24gbWVjaGFuaXNtLiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlcmUncyBhIG5ldyBjb25kaXRpb24gaW4gdGhlIHN0b3JlIGZ1bmN0aW9uLCBgaWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlgLlxuXG5UaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGFyZWEuIENoYW5nZXMgdG8gYG1tL3pzd2FwLmNgIGFuZCBgbW0vc3dhcGZpbGUuY2AgYXJlIGEgYmlnIGRlYWw7IHRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2gsIGlmIG1pc2hhbmRsZWQsIGNvdWxkIGhhdmUgc2VyaW91cyBjb25zZXF1ZW5jZXMuIEJ1dCwgaXMgaXQgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQ/IFllcywgdGhpcyBwYXRjaCB3b3VsZCBkZWZpbml0ZWx5IGJlIGV4ZXJjaXNhYmxlIGluIFFFTVUsIG9yIGFueSBhbWQ2NCBlbnZpcm9ubWVudCB3aXRoIHpzd2FwIGFuZCBzd2FwZmlsZSBjb25maWd1cmVkLiBUaGVyZWZvcmUsIGZ1enppbmcgdGhpcyBwYXRjaCB3b3VsZCBiZSBoaWdobHkgdmFsdWFibGUuXG5cbk5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYHpzd2FwYCBhbmQgaXRzIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBwYXRjaCB3aWxsIGJlaGF2ZSBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLiBJIHNob3VsZCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIHN1YnN5c3RlbXMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBrZXkgdG8gY3JlYXRpbmcgYSBzb2xpZCB0ZXN0IHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDcwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MDAuMDU5Mzk3MDc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyOTY2ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaU1dBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcXG4tLVxcbm1tL0tjb25maWctMjEtXFxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcXG5tbS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTM0LVxcbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy00NC1cXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy00Ni1cXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz01OT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctNzYtXFxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcXG5tbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcIkRlZmxhdGVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTgyLVxcbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cXG5tbS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkxaT1xcXCJcXG4tLVxcbm1tL0tjb25maWctODgtXFxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0Mlxcbm1tL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NC1cXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XFxubW0vS2NvbmZpZy05Ni1cXHRib29sIFxcXCJMWjRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwMC1cXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXFxubW0vS2NvbmZpZy0xMDItXFx0Ym9vbCBcXFwiTFo0SENcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwNi1cXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcXG5tbS9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJ6c3RkXFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy0xMTMtXFxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MDAuMTIyMzY4OTM1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA1NDcxODAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIFpTV0FQIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBaU1dBUCwgcmlnaHQ/IFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IGFyZWEuIExldCdzIGRpdmUgaW50byBgbW0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGZlYXR1cmVzIGFyZSBsb2NhdGVkLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgb3Igc29tZSBvdGhlciBsb2dpYyB0aGF0IHRlbGxzIG1lIHdoYXQgb3RoZXIgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBJIGNhbiBlbmFibGUgWlNXQVAuIEknbGwgYmUgbG9va2luZyBmb3IgY3Jvc3MtZGVwZW5kZW5jaWVzIGFuZCBtYXliZSBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIGFyY2hpdGVjdHVyZSBvciBvdGhlciBrZXJuZWwgZmVhdHVyZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIHdoYXQncyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IHRvIHdvcmsgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDQ1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MDIuMTc3MDg5MTU1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0XFx0ZGVmYXVsdCB5XFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XFxuICAxODpcXHRcXHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcXG4gIDE5OlxcdFxcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XFxuICAyMDpcXHRcXHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBaU1dBUFxcbiAgMjM6XFx0XFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gU1dBUFxcbiAgMjU6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgMjY6XFx0XFx0c2VsZWN0IFpTTUFMTE9DXFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXFxuICAyOTpcXHRcXHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xcbiAgMzA6XFx0XFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxcbiAgMzE6XFx0XFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcXG4gIDMyOlxcdFxcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxcbiAgMzM6XFx0XFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG4gIDM2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXFxuICA0MDpcXHRcXHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHQgIFRoZSBzZWxlY3Rpb24gbWFkZSBoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSBrZXJuZWxcXG4gIDQzOlxcdFxcdCAgY29tbWFuZCBsaW5lICd6c3dhcC5lbmFibGVkPScgb3B0aW9uLlxcbiAgNDQ6XFx0XFxuICA0NTpcXHRjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbiAgNDY6XFx0XFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4gIDQ3OlxcdFxcdGRlcGVuZHMgb24gWlNXQVBcXG4gIDQ4OlxcdFxcdGRlZmF1bHQgblxcbiAgNDk6XFx0XFx0aGVscFxcbiAgNTA6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIHpzd2FwIHNocmlua2VyIHdpbGwgYmUgZW5hYmxlZCwgYW5kIHRoZSBwYWdlc1xcbiAgNTE6XFx0XFx0ICBzdG9yZWQgaW4gdGhlIHpzd2FwIHBvb2wgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIGZvciByZWNsYWltIChpLmVcXG4gIDUyOlxcdFxcdCAgd3JpdHRlbiBiYWNrIHRvIHRoZSBiYWNraW5nIHN3YXAgZGV2aWNlKSBvbiBtZW1vcnkgcHJlc3N1cmUuXFxuICA1MzpcXHRcXG4gIDU0OlxcdFxcdCAgVGhpcyBtZWFucyB0aGF0IHpzd2FwIHdyaXRlYmFjayBjb3VsZCBoYXBwZW4gZXZlbiBpZiB0aGUgcG9vbCBpc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMToyMjowMi4xNzcyMjU0NTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjQ3MDk1ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipUcmFjaW5nIHRoZSBPcmlnaW5zIG9mIGB6c3dhcF9uZXZlcl9lbmFibGVkYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoZXJlIGV4YWN0bHkgaXMgdGhpcyBgenN3YXBfbmV2ZXJfZW5hYmxlZGAgdmFyaWFibGUgZGVmaW5lZCwgYW5kIGNyaXRpY2FsbHksICpob3cqIGlzIGl0IGJlaW5nIHVzZWQ/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBwdXJwb3NlIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIHpzd2FwIGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIHRoZSBmaXJzdCBjcnVjaWFsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBpZiBpdCdzIGludm9sdmVkIGluIGFuIGlzc3VlIEknbSBpbnZlc3RpZ2F0aW5nIG9yIGp1c3Qgc2ltcGx5IHRyeWluZyB0byBnZXQgbXkgaGVhZCBhcm91bmQgdGhpcyBjb2RlLiBJIG5lZWQgdG8gYmUgYWJsZSB0byB0cmFjZSBpdHMgZGVjbGFyYXRpb24gYW5kIHVzYWdlIHBhdHRlcm5zIHRvIGZvcm0gYSB2YWxpZCBjb25jbHVzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjM5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMToyMjowNi44MjQzMjQ4OTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxOTcwMTMzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF9uZXZlcl9lbmFibGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvenN3YXAuaD0zNj1ib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XFxuaW5jbHVkZS9saW51eC96c3dhcC5oOjM3OmJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtMzgtI2Vsc2VcXG4tLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaD02Mj1zdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTY2LVxcbmluY2x1ZGUvbGludXgvenN3YXAuaDo2NzpzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxcbmluY2x1ZGUvbGludXgvenN3YXAuaC02OC17XFxuLS1cXG5tbS9tZW1vcnkuYz00NzU4PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDc3OS1cXHQgKi9cXG5tbS9tZW1vcnkuYzo0NzgwOlxcdGlmICghenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxcbm1tL21lbW9yeS5jLTQ3ODEtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5tbS9zaG1lbS5jPTIyNDI9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcF9hbGxvY19mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vc2htZW0uYy0yMjUxLVxcdGlmICgodm1mIFxcdTAwMjZcXHUwMDI2IHVubGlrZWx5KHVzZXJmYXVsdGZkX2FybWVkKHZtZi1cXHUwMDNldm1hKSkpIHx8XFxubW0vc2htZW0uYzoyMjUyOlxcdCAgICAgIXpzd2FwX25ldmVyX2VuYWJsZWQoKSlcXG5tbS9zaG1lbS5jLTIyNTMtXFx0XFx0b3JkZXIgPSAwO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xMzE0PXN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMzIwLVxcbm1tL3N3YXBmaWxlLmM6MTMyMTpcXHRpZiAoIXpzd2FwX25ldmVyX2VuYWJsZWQoKSkge1xcbm1tL3N3YXBmaWxlLmMtMTMyMi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfZW50cmllczsgaSsrKVxcbi0tXFxubW0venN3YXAuYz0xMjU9Ym9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTEyOS1cXG5tbS96c3dhcC5jOjEzMDpib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZClcXG5tbS96c3dhcC5jLTEzMS17XFxuLS1cXG5tbS96c3dhcC5jPTE0ODI9Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy0xNDk0LVxcbm1tL3pzd2FwLmM6MTQ5NTpcXHRpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxcbm1tL3pzd2FwLmMtMTQ5Ni1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS96c3dhcC5jPTE2MDY9aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtMTYxNS1cXG5tbS96c3dhcC5jOjE2MTY6XFx0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcXG5tbS96c3dhcC5jLTE2MTctXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDExOjIyOjA4LjQ0NDAzMTY5OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTcyMTE4ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEaWZmOiBBIFF1aWNrIFNjYW4gb2YgSW1wYWN0ZWQgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBUaGUgZGlmZiB0b3VjaGVzIGEgZmV3IGtleSBhcmVhcywgYW5kIEkgd2FudCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBwb3RlbnRpYWxseSBpbXBhY3RlZCBzdWJzeXN0ZW1zLiBMZXQncyBzdGFydCB3aXRoIGEgZnVuY3Rpb24gbGV2ZWwgYnJlYWtkb3duOiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGB6c3dhcF9zdG9yZWAgYW5kIGB6c3dhcF9pbnZhbGlkYXRlYCB3aXRoaW4gYG1tL3pzd2FwLmNgLiBUaGVuLCB0aGVyZSdzIGBzd2FwX3JhbmdlX2ZyZWVgIGluIGBtbS9zd2FwZmlsZS5jYCwgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGF0dGVudGlvbi4gRmluYWxseSwgdGhlcmUgYXJlIGFsc28gdHdvIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLCBgenN3YXBfdHJlZWAgYW5kIGBzd2FwX3pzd2FwX3RyZWVgIGFsc28gaW4gYG1tL3pzd2FwLmNgIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLlxuXG5Ob3cgdGhhdCBJIGhhdmUgYSBtYXAgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgbGV0J3MgcXVpY2tseSBjaGVjayB0aGUgY2FsbCBncmFwaCBmb3IgYHN3YXBfcmFuZ2VfZnJlZWAgYW5kIGB6c3dhcF9pbnZhbGlkYXRlYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgbW9zdCBsaWtlbHkgdG8gaGF2ZSBrbm9jay1vbiBlZmZlY3RzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGV5IGFyZSB1c2VkIGFuZCBob3cgdGhlIGV4aXN0aW5nIGRlc2lnbiBpbXBhY3RzIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMDQsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MTEuMzAxMjQ1NzE3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkxNTQyMTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX2ludmFsaWRhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC96c3dhcC5oPTI5PWludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmluY2x1ZGUvbGludXgvenN3YXAuaDozMDp2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KTtcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtMzEtaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg9NDc9c3RhdGljIGlubGluZSBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTUxLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaDo1MjpzdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfaW52YWxpZGF0ZShpbnQgdHlwZSwgcGdvZmZfdCBvZmZzZXQpIHt9XFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTUzLXN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTMxND1zdGF0aWMgdm9pZCBzd2FwX3JhbmdlX2ZyZWUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTMyMi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfZW50cmllczsgaSsrKVxcbm1tL3N3YXBmaWxlLmM6MTMyMzpcXHRcXHRcXHR6c3dhcF9pbnZhbGlkYXRlKHNpLVxcdTAwM2V0eXBlLCBvZmZzZXQgKyBpKTtcXG5tbS9zd2FwZmlsZS5jLTEzMjQtXFx0fVxcbi0tXFxubW0venN3YXAuYz0xNDgyPWJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtMTU1Ni1cXHRcXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXFx1MDAzYyBucl9wYWdlczsgKytpbmRleClcXG5tbS96c3dhcC5jOjE1NTc6XFx0XFx0XFx0enN3YXBfaW52YWxpZGF0ZSh0eXBlLCBvZmZzZXQgKyBpbmRleCk7XFxubW0venN3YXAuYy0xNTU4LVxcdH1cXG4tLVxcbm1tL3pzd2FwLmM9MTYwNj1pbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy0xNjYzLVxcbm1tL3pzd2FwLmM6MTY2NDp2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KVxcbm1tL3pzd2FwLmMtMTY2NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDExOjIyOjEyLjg5Mjc5NjEyNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTE3NDEzNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc3dhcF9yYW5nZV9mcmVlYCBDYWxsZXJzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBsZXQncyB6ZXJvIGluIG9uIGBzd2FwX3JhbmdlX2ZyZWVgLiBUaGF0IGZ1bmN0aW9uIGlzIGNyaXRpY2FsIHdoZW4gd2UncmUgdGFsa2luZyBhYm91dCBzd2FwIHNwYWNlIG1hbmFnZW1lbnQgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vc3dhcGZpbGUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyB1c2FnZSDigJMgdW5kZXJzdGFuZGluZyAqd2hlcmUqIGl0J3MgY2FsbGVkIHdpbGwgaWxsdW1pbmF0ZSBob3cgbWVtb3J5IGlzIGJlaW5nIHJlbGVhc2VkIGJhY2sgdG8gdGhlIHN3YXAgZGV2aWNlLiBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRob3NlIGNhbGxzLiBXaGF0IGNvbmRpdGlvbnMgdHJpZ2dlciBhIHJhbmdlIG9mIHN3YXAgcGFnZXMgdG8gYmUgZnJlZWQ/IEFyZSB3ZSBkZWFsaW5nIHdpdGggcGFnZSByZWNsYWltLCBwcm9jZXNzIHRlcm1pbmF0aW9uLCBmaWxlIHVubWFwcGluZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjYWxsZXIgaW5mb3JtYXRpb24gd2lsbCB0ZWxsIHRoZSB0YWxlLiBJdCdzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgaXMgcGFyYW1vdW50IHRvIHVuZGVyc3RhbmRpbmcgaG93IHN3YXAgc3BhY2UgaXMgYmVpbmcgaGFuZGxlZC4gVGhpcyBpcyBnb2luZyB0byBiZSBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTc0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MTUuMDEwMjEyNTY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzkxMTExMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX3JhbmdlX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9MTMwND1zdGF0aWMgdm9pZCBzd2FwX3JhbmdlX2FsbG9jKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTMxMy1cXG5tbS9zd2FwZmlsZS5jOjEzMTQ6c3RhdGljIHZvaWQgc3dhcF9yYW5nZV9mcmVlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXFxubW0vc3dhcGZpbGUuYy0xMzE1LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbnJfZW50cmllcylcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTkzMj12b2lkIF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE5NzMtXFxubW0vc3dhcGZpbGUuYzoxOTc0OlxcdHN3YXBfcmFuZ2VfZnJlZShzaSwgY2lfaGVhZCArIGNpX3N0YXJ0LCBucl9wYWdlcyk7XFxubW0vc3dhcGZpbGUuYy0xOTc1LVxcdHN3YXBfY2x1c3Rlcl9hc3NlcnRfZW1wdHkoY2ksIGNpX3N0YXJ0LCBucl9wYWdlcywgZmFsc2UpO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0yODMzPXN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yOTI4LVxcdCAqIE1ha2Ugc3VyZSB0aGF0IGZ1cnRoZXIgY2xlYW51cHMgYWZ0ZXIgdHJ5X3RvX3VudXNlKCkgcmV0dXJucyBoYXBwZW5cXG5tbS9zd2FwZmlsZS5jOjI5Mjk6XFx0ICogYWZ0ZXIgc3dhcF9yYW5nZV9mcmVlKCkgcmVkdWNlcyBzaS1cXHUwMDNlaW51c2VfcGFnZXMgdG8gMC5cXG5tbS9zd2FwZmlsZS5jLTI5MzAtXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDExOjIyOjE1LjA2NDEzMjUxNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDY4ODQzNjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gc29tZSBrZXkgc3ltYm9scyBmb3IgdGhpcyBGb2N1c1N5bWJvbHMgaW52ZXN0aWdhdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2ludmFsaWRhdGVgLCBhbmQgYHN3YXBfcmFuZ2VfZnJlZWAuIEFsc28sIHRoYXQgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgbG9va3MgaW50ZXJlc3RpbmcsIGFzIG1pZ2h0IGFueSByZWxhdGVkIHRvIGB6c3dhcF9sb2FkYCBldGMuIFRoZSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlc2Ugc3ltYm9scyBhcmUgbW9kaWZpZWQgYW5kIG5vbi11YmlxdWl0b3VzLlxuXG5GaXJzdCwgbGV0J3MgZGV0ZXJtaW5lIGlmIGFueSBvZiB0aG9zZSBvcHRpb25zIGFyZSB1c2VkIGV2ZXJ5d2hlcmUuIFNvLCBhcmUgYW55IG9mIGB6c3dhcF9zdG9yZWAsIGB6c3dhcF9pbnZhbGlkYXRlYCwgYW5kIGBzd2FwX3JhbmdlX2ZyZWVgIHdpZGVseSB1c2VkIGFjcm9zcyB0aGUgY29kZWJhc2U/IFdhaXQsIGBzd2FwX3JhbmdlX2ZyZWVgIGlzIGRlY2xhcmVkIGBzdGF0aWNgIGluIGBtbS9zd2FwZmlsZS5jYC4gVGhhdCdzIGEgZ29vZCBpbml0aWFsIHNpZ24uIE5vdywgdGhlIGtleSBxdWVzdGlvbjogaXMgaXQgaW5saW5lZD8gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29kZSBhcm91bmQgdGhlIGBzd2FwX3JhbmdlX2ZyZWVgIGRlZmluaXRpb24gd2l0aGluIGBtbS9zd2FwZmlsZS5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTQ3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDExOjIyOjE4LjEzMjk3ODU2MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc3dhcGZpbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzEwOlxcdFxcdH1cXG4xMzExOlxcdFxcdGF0b21pY19sb25nX3N1Yihucl9lbnRyaWVzLCBcXHUwMDI2bnJfc3dhcF9wYWdlcyk7XFxuMTMxMjpcXHR9XFxuMTMxMzpcXHRcXG4xMzE0OlxcdHN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbjEzMTU6XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9lbnRyaWVzKVxcbjEzMTY6XFx0e1xcbjEzMTc6XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQgPSBvZmZzZXQgKyBucl9lbnRyaWVzIC0gMTtcXG4xMzE4OlxcdFxcdHZvaWQgKCpzd2FwX3Nsb3RfZnJlZV9ub3RpZnkpKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgdW5zaWduZWQgbG9uZyk7XFxuMTMxOTpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4xMzIwOlxcdFxcbjEzMjE6XFx0XFx0aWYgKCF6c3dhcF9uZXZlcl9lbmFibGVkKCkpIHtcXG4xMzIyOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9lbnRyaWVzOyBpKyspXFxuMTMyMzpcXHRcXHRcXHRcXHR6c3dhcF9pbnZhbGlkYXRlKHNpLVxcdTAwM2V0eXBlLCBvZmZzZXQgKyBpKTtcXG4xMzI0OlxcdFxcdH1cXG4xMzI1OlxcdFxcbjEzMjY6XFx0XFx0aWYgKHNpLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNXUF9CTEtERVYpXFxuMTMyNzpcXHRcXHRcXHRzd2FwX3Nsb3RfZnJlZV9ub3RpZnkgPVxcbjEzMjg6XFx0XFx0XFx0XFx0c2ktXFx1MDAzZWJkZXYtXFx1MDAzZWJkX2Rpc2stXFx1MDAzZWZvcHMtXFx1MDAzZXN3YXBfc2xvdF9mcmVlX25vdGlmeTtcXG4xMzI5OlxcdFxcdGVsc2VcXG4xMzMwOlxcdFxcdFxcdHN3YXBfc2xvdF9mcmVlX25vdGlmeSA9IE5VTEw7XFxuMTMzMTpcXHRcXHR3aGlsZSAob2Zmc2V0IFxcdTAwM2M9IGVuZCkge1xcbjEzMzI6XFx0XFx0XFx0YXJjaF9zd2FwX2ludmFsaWRhdGVfcGFnZShzaS1cXHUwMDNldHlwZSwgb2Zmc2V0KTtcXG4xMzMzOlxcdFxcdFxcdGlmIChzd2FwX3Nsb3RfZnJlZV9ub3RpZnkpXFxuMTMzNDpcXHRcXHRcXHRcXHRzd2FwX3Nsb3RfZnJlZV9ub3RpZnkoc2ktXFx1MDAzZWJkZXYsIG9mZnNldCk7XFxuMTMzNTpcXHRcXHRcXHRvZmZzZXQrKztcXG4xMzM2OlxcdFxcdH1cXG4xMzM3OlxcdFxcbjEzMzg6XFx0XFx0LypcXG4xMzM5OlxcdFxcdCAqIE1ha2Ugc3VyZSB0aGF0IHRyeV90b191bnVzZSgpIG9ic2VydmVzIHNpLVxcdTAwM2VpbnVzZV9wYWdlcyByZWFjaGluZyAwXFxuMTM0MDpcXHRcXHQgKiBvbmx5IGFmdGVyIHRoZSBhYm92ZSBjbGVhbnVwcyBhcmUgZG9uZS5cXG4xMzQxOlxcdFxcdCAqL1xcbjEzNDI6XFx0XFx0c21wX3dtYigpO1xcbjEzNDM6XFx0XFx0YXRvbWljX2xvbmdfYWRkKG5yX2VudHJpZXMsIFxcdTAwMjZucl9zd2FwX3BhZ2VzKTtcXG4xMzQ0OlxcdFxcdHN3YXBfdXNhZ2Vfc3ViKHNpLCBucl9lbnRyaWVzKTtcXG4xMzQ1OlxcdH1cXG4xMzQ2OlxcdFxcbjEzNDc6XFx0c3RhdGljIGJvb2wgZ2V0X3N3YXBfZGV2aWNlX2luZm8oc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpKVxcbjEzNDg6XFx0e1xcbjEzNDk6XFx0XFx0aWYgKCFwZXJjcHVfcmVmX3RyeWdldF9saXZlKFxcdTAwMjZzaS1cXHUwMDNldXNlcnMpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMToyMjoxOC4xMzMxNTEzNDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDEzNTgyNzQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBpbiBEZXB0aCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBjb3JlIG9mIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgc3Vycm91bmRpbmcgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgYW5kLCBieSBleHRlbnNpb24sIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCB1dGlsaXplIGBzd2FwX3JhbmdlX2ZyZWVgLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgaWRlbnRpZnlpbmcgdGhlIGRpcmVjdCBjYWxsZXJzOyBpdCdzIGFib3V0IHRyYWNpbmcgdGhlICp3aHkqIGFuZCB0aGUgKndoZW4qLiBJIHdhbnQgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUuIEknbSB0aGlua2luZy4uLlxuXG4qICAgKipNYXBwaW5nIHRoZSBDYWxsIEdyYXBoOioqIExldCdzIHRyYWNlIGJhY2sgZnJvbSBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYC4gV2hhdCBmdW5jdGlvbnMgZGlyZWN0bHkgaW52b2tlIGl0PyBUaGVuLCB3aGF0IGNhbGwgaXQ/IEFuZCB3aGF0IGRvICp0aGV5KiBjYWxsPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBjYWxsIGNoYWluLiBVbmRlcnN0YW5kaW5nIHRoaXMgY2hhaW4gaXMgY3J1Y2lhbC5cbiogICAqKkFsdGVybmF0aXZlIFBhdGhzOioqIEkgc2hvdWxkIHJlbWVtYmVyIG90aGVyIGNhbGxzIHRvIGBzd2FwX3JhbmdlX2ZyZWVgIGFzIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBtZXRob2RzIHRoYXQgYXJlIHVzZWQgdG8gZnJlZSB0aGUgc3dhcCByYW5nZS5cbiogICAqKkNvbnRleHR1YWwgQW5hbHlzaXM6KiogSSBuZWVkIHRvIGFuYWx5emUgdGhlIGNvZGUgc3Vycm91bmRpbmcgdGhlc2UgY2FsbHMuIFdoYXQncyB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbSB3aGVuIHRoZXNlIGZyZWVpbmcgb3BlcmF0aW9ucyBhcmUgdHJpZ2dlcmVkPyBJcyBpdCBkdXJpbmcgcGFnZSByZWNsYWltLCBwcm9jZXNzIHRlcm1pbmF0aW9uLCBmaWxlc3lzdGVtIHVubW91bnQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgY29udGV4dCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpc3N1ZXMuXG4qICAgKipEYXRhIFN0cnVjdHVyZXM6KiogV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkPyBTd2FwIGNhY2hlIGVudHJpZXMsIHBhZ2UgdGFibGUgZW50cmllcywgbWFwcGluZ3MuLi4gaG93IGRvIHRoZXNlIGludGVyYWN0IHdpdGggdGhlIGZ1bmN0aW9ucyBJJ20gaW52ZXN0aWdhdGluZz8gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBtb2RpZmllZCBwcmlvciB0byBgc3dhcF9yYW5nZV9mcmVlYCBjYWxscy5cbiogICAqKlBvdGVudGlhbCBQcm9ibGVtIEFyZWFzOioqIEknbSBtZW50YWxseSBmbGFnZ2luZyBwb3RlbnRpYWwgdHJvdWJsZSBzcG90cy4gQXJlIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbnMgcG9zc2libGU/IElzIHRoZXJlIGxvY2tpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGNvbnRlbnRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBjb3JydXB0aW9uIHNjZW5hcmlvcyB0aGF0IG1pZ2h0IGJlIHRyaWdnZXJlZCBieSB0aGVzZSBmcmVlcz8gVGhpbmtpbmcgb2YgcG90ZW50aWFsIHByb2JsZW1zICpub3cqIHdpbGwgbWFrZSBsYXRlciBkZWJ1Z2dpbmcgZmFzdGVyLlxuKiAgICoqVG9vbHMgYW5kIFRlY2huaXF1ZXM6KiogSSBuZWVkIHRvIGNvbnNpZGVyIHdoYXQgdG9vbHMgSSdsbCB1c2UuIGBnZGJgLCBvZiBjb3Vyc2UsIGJ1dCBhbHNvIG1heWJlIGBwZXJmYCB0byBwcm9maWxlIGFuZCBzZWUgaWYgdGhlcmUgYXJlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBpbiB0aGUgY29kZS4gSSBtaWdodCB3YW50IHRvIGFkZCBzb21lIGluc3RydW1lbnRhdGlvbiB0byBsb2cgdGhlc2UgY2FsbHMgYW5kIHVuZGVyc3RhbmQgdGhlIHBhcmFtZXRlcnMgYmVpbmcgcGFzc2VkLlxuXG5NeSBnb2FsIGlzIHRvIGRldmVsb3AgYSBkZWVwLCBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIHN3YXAgZnJlZWluZyBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIHRvd2FyZCBvcHRpbWl6YXRpb24sIGJ1ZyBmaXhpbmcsIG9yIHNpbXBseSBnYWluaW5nIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU4MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MjIuMjY4OTgxMzA3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTMwOTkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXAuaD0yNDg9dm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuLS1cXG5tbS9zd2FwLmgtMjUwLS8qIEZvciBpbnRlcm5hbCB1c2UgKi9cXG5tbS9zd2FwLmg6MjUxOmV4dGVybiB2b2lkIF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxubW0vc3dhcC5oLTI1Mi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTI1Nz1zdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMjkyLVxcdGlmICghZm9saW9fc3dhcHBlZCkge1xcbm1tL3N3YXBfc3RhdGUuYzoyOTM6XFx0XFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfc3RhcnQsIG5yX3BhZ2VzKTtcXG5tbS9zd2FwX3N0YXRlLmMtMjk0LVxcdH0gZWxzZSBpZiAobmVlZF9mcmVlKSB7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMjk3LVxcdFxcdFxcdGlmICghX19zd3BfdGJfZ2V0X2NvdW50KF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZikpKVxcbm1tL3N3YXBfc3RhdGUuYzoyOTg6XFx0XFx0XFx0XFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfb2ZmLCAxKTtcXG5tbS9zd2FwX3N0YXRlLmMtMjk5LVxcdFxcdH0gd2hpbGUgKCsrY2lfb2ZmIFxcdTAwM2MgY2lfZW5kKTtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTU4OD1zdGF0aWMgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xNjIyLVxcdFxcdGlmIChjaV9iYXRjaCAhPSAtMSkge1xcbm1tL3N3YXBmaWxlLmM6MTYyMzpcXHRcXHRcXHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9iYXRjaCwgY2lfb2ZmIC0gY2lfYmF0Y2gpO1xcbm1tL3N3YXBmaWxlLmMtMTYyNC1cXHRcXHRcXHRjaV9iYXRjaCA9IC0xO1xcbi0tXFxubW0vc3dhcGZpbGUuYy0xNjI4LVxcdGlmIChjaV9iYXRjaCAhPSAtMSlcXG5tbS9zd2FwZmlsZS5jOjE2Mjk6XFx0XFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfYmF0Y2gsIGNpX29mZiAtIGNpX2JhdGNoKTtcXG5tbS9zd2FwZmlsZS5jLTE2MzAtXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE4OTk9c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTkzMS0gKi9cXG5tbS9zd2FwZmlsZS5jOjE5MzI6dm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXBmaWxlLmMtMTkzMy1cXHRcXHRcXHRcXHQgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjIxND12b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMjI4LVxcdGlmICghc3dwX3RiX2lzX2ZvbGlvKF9fc3dhcF90YWJsZV9nZXQoY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpKSlcXG5tbS9zd2FwZmlsZS5jOjIyMjk6XFx0XFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUiwgMSk7XFxubW0vc3dhcGZpbGUuYy0yMjMwLVxcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMToyMjoyMi4zMzQyOTU3NTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA4NTI1ODY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFpzd2FwIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgenN3YXBgIHRoaW5nLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBJJ20gc3RhcnRpbmcgd2l0aCBgenN3YXBfc3RvcmVgIGFuZCBgenN3YXBfaW52YWxpZGF0ZWAuIExvb2tzIGxpa2UgYHpzd2FwX3N0b3JlYCwgd2hpY2ggbGl2ZXMgaW4gYG1tL3pzd2FwLmNgLCBpcyBhbiBleHBvcnRlZCBmdW5jdGlvbiDigJMgYSBjcnVjaWFsIHBpZWNlLCBhcyBleHBlY3RlZCwgaXQncyBhIGBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pYC4gR29vZC4gQW5kIGB6c3dhcF9pbnZhbGlkYXRlYCBpcyBhbHNvIHRoZXJlOiBhIGB2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KWAuIEFsc28gaW4gdGhhdCBmaWxlIGlzIGBzd2FwX3JhbmdlX2ZyZWVgLCB0aG91Z2ggdGhhdCdzIHN0YXRpYy4gRmluZSwgbm93IGxldCdzIHNlZSB3aGF0IGVsc2UgaXMgZ29pbmcgb24uXG5cbk5vdywgbGV0J3MgZXhwbG9yZSBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgb3B0aW9ucyBmb3IgdGhpcyBmZWF0dXJlLiBQZWVraW5nIGF0IGBtbS9LY29uZmlnYCwgSSBzZWUgdGhhdCBgQ09ORklHX1pTV0FQYCBpcyBkZXBlbmRlbnQgb24gYENPTkZJR19TV0FQYC4gTWFrZXMgc2Vuc2UuIEFuZCBpdCBsb29rcyBsaWtlIGBaU1dBUGAgaXMgYnJpbmdpbmcgaW4gYENSWVBUT2AgYW5kIGBaU01BTExPQ2AuIE9rYXksIHRoYXQncyBpbnRlcmVzdGluZy4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgZm9yIGFueSBvdGhlciBpbXBsaWNpdCBvciByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSSdsbCBuZWVkIHRvIGRvIGEgZ3JlcCBmb3IgYENPTkZJR19aU1dBUGAgYWNyb3NzIEtjb25maWcgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkzMywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMToyMjoyNS40MTk1NTY0NzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTMzNzA1NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnLipaU1dBUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0yMS1cXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxcbm1tL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTU5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy03Ni1cXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbm1tL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiRGVmbGF0ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODItXFxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbm1tL0tjb25maWctODQtXFx0Ym9vbCBcXFwiTFpPXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OC1cXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXFxubW0vS2NvbmZpZy05MC1cXHRib29sIFxcXCI4NDJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0LVxcbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcXG5tbS9LY29uZmlnLTk2LVxcdGJvb2wgXFxcIkxaNFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTAwLVxcbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcXG5tbS9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJMWjRIQ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA2LVxcbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxcbm1tL0tjb25maWctMTA4LVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTExMy1cXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMToyMjoyNy40NzI5MzU5MThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk5Nzc5NzA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIENvbmZpZ3VyYXRpb24gRGVjaXNpb25zKipcblxuT2theSwgc28gSSdtIHNldHRpbmcgdXAgYSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24uIEZpcnN0LCB0aGUga2V5IHNldHRpbmdzIHRvIGVuYWJsZSBhcmUgYFNXQVBgIGFuZCBgWlNXQVBgLiBUaG9zZSBhcmUgZnVuZGFtZW50YWwuIE5vdywgSSBuZWVkIHRvIGRlZmluZSB0aGUgZm9jdXMgc3ltYm9sczsgdGhlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gdGFyZ2V0IHNwZWNpZmljYWxseS4gRnJvbSB0aGUgcHJvbXB0LCBpdCBzZWVtcyBsaWtlIHRoZXNlIGFyZSB0aGUgY3JpdGljYWwgb25lcyBmb3IgdGhpcyBzY2VuYXJpbzogYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2ludmFsaWRhdGVgLCBgc3dhcF9yYW5nZV9mcmVlYCwgYW5kIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLlxuXG5MZXQgbWUgcnVuIHRocm91Z2ggZXZlcnl0aGluZyBvbmUgbW9yZSB0aW1lIHRvIG1ha2Ugc3VyZSBpdCBhbGwgYWxpZ25zIHdpdGggdGhlIHJlcXVpcmVtZW50cy4gSXQncyBtYXJrZWQgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHdoaWNoIGlzIGdvb2QgYmVjYXVzZSB0aGlzIHRhcmdldHMgYm90aCBgbW0venN3YXAuY2AgYW5kIGBtbS9zd2FwZmlsZS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSBpdCdzIGRpcmVjdGx5IHRvdWNoaW5nIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCwgaW1wb3J0YW50bHksIGludmFsaWRhdGlvbiBwYXRocy4gVGhlIGNob3NlbiBgRm9jdXNTeW1ib2xzYCBhcmUgZGVmaW5pdGVseSBub3QgdWJpcXVpdG91c2x5IHVzZWQgd2l0aGluIHRoZSBjb2RlYmFzZSwgd2hpY2ggaXMgZ29vZCAtIHRhcmdldHMuIEkgaGF2ZSB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNldCB0byBleGFjdGx5IHdoYXQgdGhlIHByb21wdCBzcGVjaWZpZWQsIGBbXCJTV0FQXCIsIFwiWlNXQVBcIl1gLiBUaGUgcmVhc29uaW5nIHByb3ZpZGVkIGlzIGFsc28gY29uY2lzZSBhbmQgYWNjdXJhdGUuIEl0IGNvdmVycyB3aHkgdGhpcyBmdXp6aW5nIGlzIHdvcnRod2hpbGUgKHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBjYWNoZSBpbnZhbGlkYXRpb24gaGFuZGxpbmcgYW5kIGVhcmx5LWV4aXQgY2hlY2tzKSwgYW5kIGl0IGNvcnJlY3RseSBsaXN0cyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLlxuXG5BbHJpZ2h0LCBzZWVtcyBzb2xpZC4gSSdtIGNvbmZpZGVudCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk3NiwiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MzEuNDcwNzM0Njk1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4MTk5NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienN3YXBfc3RvcmVcIixcbiAgICBcInpzd2FwX2ludmFsaWRhdGVcIixcbiAgICBcInN3YXBfcmFuZ2VfZnJlZVwiLFxuICAgIFwiX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB6c3dhcCBpbnZhbGlkYXRpb24gaW50ZXJmYWNlIGFuZCBhZGRzIGVhcmx5LWV4aXQgb3B0aW1pemF0aW9uIGNoZWNrcyAodmlhIHpzd2FwX25ldmVyX2VuYWJsZWQoKSkgaW4genN3YXBfc3RvcmUoKSBhbmQgc3dhcF9yYW5nZV9mcmVlKCkuIFNpbmNlIHRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzd2FwIGFuZCBjb21wcmVzc2VkIGNhY2hlIGxvZ2ljIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwienN3YXBfaW52YWxpZGF0ZVwiLFxuICAgIFwic3dhcF9yYW5nZV9mcmVlXCIsXG4gICAgXCJfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHpzd2FwIGludmFsaWRhdGlvbiBpbnRlcmZhY2UgYW5kIGFkZHMgZWFybHktZXhpdCBvcHRpbWl6YXRpb24gY2hlY2tzICh2aWEgenN3YXBfbmV2ZXJfZW5hYmxlZCgpKSBpbiB6c3dhcF9zdG9yZSgpIGFuZCBzd2FwX3JhbmdlX2ZyZWUoKS4gU2luY2UgdGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN3YXAgYW5kIGNvbXByZXNzZWQgY2FjaGUgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MzEuNTQ1NTYxNTkyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYyMjM0Mjc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDExOjIyOjMxLjU0NTk5Nzg3MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE1NjIxOTAxOTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgenN3YXAgaGVscGVyIGZ1bmN0aW9ucyAoYHpzd2FwX2ludmFsaWRhdGVgIGFuZCBgenN3YXBfdHJlZWApIHRvIHBhc3MgdHlwZSBhbmQgb2Zmc2V0IGRpcmVjdGx5IHJhdGhlciB0aGFuIHBhY2tpbmcvdW5wYWNraW5nIGBzd3BfZW50cnlfdGAsIGFkZHMgZWFybHktZXhpdCBjaGVja3MgdXNpbmcgYHpzd2FwX25ldmVyX2VuYWJsZWQoKWAsIGFuZCBzaW1wbGlmaWVzIGVudHJ5IGNsZWFudXAgaW4gYHpzd2FwX3N0b3JlKClgLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0aW5nIHRvIHpzd2FwIHRyZWUgaW5kZXhpbmcgb3IgZW50cnkgbGlmZXRpbWVzIGZhbGwgdW5kZXIgbWVtb3J5IHNhZmV0eSAvIGNvbmN1cnJlbmN5IGNvbmNlcm5zIGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMuIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMjcwNjg2OWYxNjIwZDEyNGE5YzdjOTdiNzhjZDFmM2EyOTU4NzEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTE6MjE6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbmluZGV4IDMwYzE5M2ExMjA3ZTEuLjQ2M2JkZWU1YzFlMTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuQEAgLTI3LDcgKzI3LDcgQEAgc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7XG4gdW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKTtcbiBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApO1xuK3ZvaWQgenN3YXBfaW52YWxpZGF0ZShpbnQgdHlwZSwgcGdvZmZfdCBvZmZzZXQpO1xuIGludCB6c3dhcF9zd2Fwb24oaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSk7XG4gdm9pZCB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAtRU5PRU5UO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApIHt9XG4rc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggMDVkMzQwODM5NmY5OC4uNTA1NTkyMDUxOTI0MyAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xMzE4LDggKzEzMTgsMTAgQEAgc3RhdGljIHZvaWQgc3dhcF9yYW5nZV9mcmVlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXG4gXHR2b2lkICgqc3dhcF9zbG90X2ZyZWVfbm90aWZ5KShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcpO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpKyspXG4tXHRcdHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5KHNpLVx1MDAzZXR5cGUsIG9mZnNldCArIGkpKTtcbitcdGlmICghenN3YXBfbmV2ZXJfZW5hYmxlZCgpKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2VudHJpZXM7IGkrKylcbitcdFx0XHR6c3dhcF9pbnZhbGlkYXRlKHNpLVx1MDAzZXR5cGUsIG9mZnNldCArIGkpO1xuK1x0fVxuIFxuIFx0aWYgKHNpLVx1MDAzZWZsYWdzIFx1MDAyNiBTV1BfQkxLREVWKVxuIFx0XHRzd2FwX3Nsb3RfZnJlZV9ub3RpZnkgPVxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBhMTJiNjQ1MmEyMjUxLi42MTk3YWE3MWUzM2M5IDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTIyOCwxMCArMjI4LDE1IEBAIHN0YXRpYyBib29sIHpzd2FwX2hhc19wb29sO1xuIC8qIE9uZSBzd2FwIGFkZHJlc3Mgc3BhY2UgZm9yIGVhY2ggNjRNIHN3YXAgc3BhY2UgKi9cbiAjZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlQgMTRcbiAjZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfUEFHRVMgKDEgXHUwMDNjXHUwMDNjIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlQpXG4rXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgeGFycmF5ICp6c3dhcF90cmVlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldClcbit7XG4rXHRyZXR1cm4gXHUwMDI2enN3YXBfdHJlZXNbdHlwZV1bb2Zmc2V0IFx1MDAzZVx1MDAzZSBaU1dBUF9BRERSRVNTX1NQQUNFX1NISUZUXTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgeGFycmF5ICpzd2FwX3pzd2FwX3RyZWUoc3dwX2VudHJ5X3Qgc3dwKVxuIHtcbi1cdHJldHVybiBcdTAwMjZ6c3dhcF90cmVlc1tzd3BfdHlwZShzd3ApXVtzd3Bfb2Zmc2V0KHN3cClcbi1cdFx0XHUwMDNlXHUwMDNlIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlRdO1xuK1x0cmV0dXJuIHpzd2FwX3RyZWUoc3dwX3R5cGUoc3dwKSwgc3dwX29mZnNldChzd3ApKTtcbiB9XG4gXG4gI2RlZmluZSB6c3dhcF9wb29sX2RlYnVnKG1zZywgcClcdFx0XHRcXFxuQEAgLTE0ODcsNiArMTQ5Miw5IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcbiBcdFZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKTtcbiBcbitcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGlmICghenN3YXBfZW5hYmxlZClcbiBcdFx0Z290byBjaGVja19vbGQ7XG4gXG5AQCAtMTU0NCwxNSArMTU1Miw5IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmICghcmV0KSB7XG4gXHRcdHVuc2lnbmVkIHR5cGUgPSBzd3BfdHlwZShzd3ApO1xuIFx0XHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbi1cdFx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeTtcbi1cdFx0c3RydWN0IHhhcnJheSAqdHJlZTtcbi1cbi1cdFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBucl9wYWdlczsgKytpbmRleCkge1xuLVx0XHRcdHRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoc3dwX2VudHJ5KHR5cGUsIG9mZnNldCArIGluZGV4KSk7XG4tXHRcdFx0ZW50cnkgPSB4YV9lcmFzZSh0cmVlLCBvZmZzZXQgKyBpbmRleCk7XG4tXHRcdFx0aWYgKGVudHJ5KVxuLVx0XHRcdFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XG4tXHRcdH1cbitcbitcdFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBucl9wYWdlczsgKytpbmRleClcbitcdFx0XHR6c3dhcF9pbnZhbGlkYXRlKHR5cGUsIG9mZnNldCArIGluZGV4KTtcbiBcdH1cbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMTY1OSwxMCArMTY2MSw5IEBAIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tdm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cClcbit2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KVxuIHtcbi1cdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xuLVx0c3RydWN0IHhhcnJheSAqdHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3ApO1xuK1x0c3RydWN0IHhhcnJheSAqdHJlZSA9IHpzd2FwX3RyZWUodHlwZSwgb2Zmc2V0KTtcbiBcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnk7XG4gXG4gXHRpZiAoeGFfZW1wdHkodHJlZSkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMToyMjozMS41NDU5OTg5NjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTE5Njg1NDgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpzd2FwIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBFeHBvc3VyZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gc2NydXRpbnkuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyBpbiBkZXRhaWwuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbiByZXZvbHZlcyBhcm91bmQgYHpzd2FwX2ludmFsaWRhdGVgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc3dhcCBpbmZyYXN0cnVjdHVyZS5cblxuVGhlIHNpZ25pZmljYW50IGNoYW5nZXMgYXJlIGluIHRoZSBgenN3YXAuaGAgaGVhZGVyLCB3aGVyZSB0aGUgc2lnbmF0dXJlIG9mIGB6c3dhcF9pbnZhbGlkYXRlYCBoYXMgYmVlbiBhbHRlcmVkIGZyb20gdGFraW5nIGEgYHN3cF9lbnRyeV90YCB0byB0YWtpbmcgYGludCB0eXBlYCBhbmQgYHBnb2ZmX3Qgb2Zmc2V0YC4gVGhpcyBpcyBhbHNvIHRydWUgZm9yIHRoZSBzdGF0aWMgaW5saW5lIHN0dWIuIFRoZSByZWFsIHdvcmsgaXMgaGFwcGVuaW5nIGluIGBtbS9zd2FwZmlsZS5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgc3dhcF9yYW5nZV9mcmVlYC4gVGhlIG9yaWdpbmFsIGNvZGUgc2ltcGx5IGl0ZXJhdGVkIGFuZCBjYWxsZWQgYHpzd2FwX2ludmFsaWRhdGVgIHdpdGggYSBjYWxjdWxhdGVkIGBzd3BfZW50cnlfdGAuIE5vdywgYSBjaGVjayBmb3IgYHpzd2FwX25ldmVyX2VuYWJsZWQoKWAgaGFzIGJlZW4gaW50cm9kdWNlZC4gSWYgenN3YXAgaXMgZW5hYmxlZCwgdGhlIGNvZGUgaXRlcmF0ZXMgYW5kIG5vdyBjYWxscyBgenN3YXBfaW52YWxpZGF0ZWAgd2l0aCB0aGUgaW5kaXZpZHVhbCBgdHlwZWAgYW5kIGBvZmZzZXRgIHZhbHVlcy4gSXQgbG9va3MgbGlrZSB0aGlzIGFkZHMgYSBjb25kaXRpb25hbCBibG9jayB3aGVyZSBgenN3YXBfaW52YWxpZGF0ZWAgaXMgb25seSBleGVjdXRlZCBpZiB6c3dhcCBpcyBhY3R1YWxseSBlbmFibGVkLlxuXG5UaGUgcGF0Y2ggdGhlbiBtb3ZlcyBvbiB0byBgbW0venN3YXAuY2AuIEhlcmUsIHRoZSBmdW5jdGlvbiBgenN3YXBfdHJlZWAgaXMgYmVpbmcgaW50cm9kdWNlZCwgd2hpY2ggYXBwZWFycyB0byBiZSBhIGhlbHBlciB0byBnZXQgYFx1MDAyNnpzd2FwX3RyZWVzW3R5cGVdW29mZnNldCBcdTAwM2VcdTAwM2UgWlNXQVBfQUREUkVTU19TUEFDRV9TSElGVF1gLiBgc3dhcF96c3dhcF90cmVlYCBpcyBtb2RpZmllZCB0byB1c2UgdGhpcyBuZXcgaGVscGVyLiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlcmUncyBhbiBlYXJseSByZXR1cm4gaW4gYHpzd2FwX3N0b3JlYCBpZiBgenN3YXBfbmV2ZXJfZW5hYmxlZCgpYC4gRnVydGhlcm1vcmUsIGluIHRoZSBlcnJvci9mYWxsYmFjayBwYXRoIG9mIGB6c3dhcF9zdG9yZWAsIGl0J3MgcmVwbGFjaW5nIGlubGluZSBsb29wcyBmb3IgZXJhc2luZyBlbnRyaWVzIHdpdGggY2FsbHMgdG8gYHpzd2FwX2ludmFsaWRhdGVgIHdpdGggdGhlIG5ldyBzaWduYXR1cmUuIFRoZSBgenN3YXBfaW52YWxpZGF0ZWAgZnVuY3Rpb24gaXRzZWxmIGlzIGFsc28gbW9kaWZpZWQgdG8gdXNlIGB6c3dhcF90cmVlYCBhbmQgdGhlIG5ldyBmdW5jdGlvbiBzaWduYXR1cmUuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGB6c3dhcF9uZXZlcl9lbmFibGVkKClgIGlzIGJlaW5nIGNhbGxlZCBjb3JyZWN0bHkuIFRvIGNvbmZpcm0gdGhhdCB0aGVyZSBhcmUgbm8gZ2FwcyBoZXJlIEkgd2lsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBwbGFjZXMgd2hlcmUgdGhpcyBpcyBiZWluZyBjYWxsZWQgYW5kIGhvdyBpdCdzIGltcGxlbWVudGVkLiBUaGVuIEkgd2lsbCBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYHpzd2FwX2ludmFsaWRhdGVgIGlzIHdvcmtpbmcgY29ycmVjdGx5IGFmdGVyIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGNoYW5nZSBpbiBzaWduYXR1cmUgaGFzbid0IGludHJvZHVjZWQgYW55IGlzc3VlcyB3aXRoIGhvdyB0aGUgZGF0YSBpcyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjgyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MzYuNzQyODU3NDkzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk1NDc3MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX25ldmVyX2VuYWJsZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC96c3dhcC5oPTM2PWJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6Mzc6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvenN3YXAuaC0zOC0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC96c3dhcC5oPTYyPXN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNjYtXFxuaW5jbHVkZS9saW51eC96c3dhcC5oOjY3OnN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTY4LXtcXG4tLVxcbm1tL21lbW9yeS5jPTQ3NTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00Nzc5LVxcdCAqL1xcbm1tL21lbW9yeS5jOjQ3ODA6XFx0aWYgKCF6c3dhcF9uZXZlcl9lbmFibGVkKCkpXFxubW0vbWVtb3J5LmMtNDc4MS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3NobWVtLmM9MjI0Mj1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9zd2FwX2FsbG9jX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5tbS9zaG1lbS5jLTIyNTEtXFx0aWYgKCh2bWYgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkodXNlcmZhdWx0ZmRfYXJtZWQodm1mLVxcdTAwM2V2bWEpKSkgfHxcXG5tbS9zaG1lbS5jOjIyNTI6XFx0ICAgICAhenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxcbm1tL3NobWVtLmMtMjI1My1cXHRcXHRvcmRlciA9IDA7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTEzMTQ9c3RhdGljIHZvaWQgc3dhcF9yYW5nZV9mcmVlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTEzMjAtXFxubW0vc3dhcGZpbGUuYzoxMzIxOlxcdGlmICghenN3YXBfbmV2ZXJfZW5hYmxlZCgpKSB7XFxubW0vc3dhcGZpbGUuYy0xMzIyLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9lbnRyaWVzOyBpKyspXFxuLS1cXG5tbS96c3dhcC5jPTEyNT1ib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtMTI5LVxcbm1tL3pzd2FwLmM6MTMwOmJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxcbm1tL3pzd2FwLmMtMTMxLXtcXG4tLVxcbm1tL3pzd2FwLmM9MTQ4Mj1ib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTE0OTQtXFxubW0venN3YXAuYzoxNDk1OlxcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXFxubW0venN3YXAuYy0xNDk2LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3pzd2FwLmM9MTYwNj1pbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy0xNjE1LVxcbm1tL3pzd2FwLmM6MTYxNjpcXHRpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxcbm1tL3pzd2FwLmMtMTYxNy1cXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MzguMjM4MzQ2MTk3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3NzM2MjczOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8genN3YXBfaW52YWxpZGF0ZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYHpzd2FwX2ludmFsaWRhdGVgIGFjdHVhbGx5IHdvcmtzLiBMZXQncyBoZWFkIG92ZXIgdG8gdGhlIGBtbS96c3dhcC5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIHRoYXQgZnVuY3Rpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIG51YW5jZXMgb2YgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjb21wcmVzc2VkIGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIHBhZ2UgdGFibGUgZW50cmllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludmFsaWRhdGlvbiBwcm9jZXNzIHRob3JvdWdobHkuIEFyZSB3ZSBqdXN0IGNsZWFyaW5nIHRoZSBzd2FwIGVudHJ5LCBvciBpcyB0aGVyZSBtb3JlIGludm9sdmVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjb21wcmVzc2VkIHBhZ2VzPyBIb3cgZG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoIG90aGVyIG9wZXJhdGlvbnMgb24gdGhhdCBwYWdlPyBJcyB0aGVyZSBhbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcGFnZSBjYWNoZSwgb3IgaXMgaXQgaXNvbGF0ZWQgdG8gdGhlIHN3YXAgZW50cmllcz8gSSBuZWVkIHRvIGxvb2sgYXQgYW55IGxvY2sgYWNxdWlzaXRpb24gYW5kIHJlbGVhc2UgcGF0dGVybnM7IHRoYXQncyBhbHdheXMgYSBjcml0aWNhbCBhcmVhIHRvIGV4YW1pbmUgZm9yIGNvcnJlY3RuZXNzLiBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGB6c3dhcF9pbnZhbGlkYXRlYCBhbmQgc2VlIGhvdyByZXNpbGllbnQgdGhlIHN5c3RlbSBpcyB3aGVuIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyB0aGUgaW52YWxpZGF0aW9uLCBwZXJoYXBzIHdpdGggYSBkYW1hZ2VkIHN3YXAgZW50cnkgb3IgYSBoYXJkd2FyZSBpc3N1ZS4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyBgenN3YXBfaW52YWxpZGF0ZWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHpzd2FwIGxpZmVjeWNsZSwgcGFydGljdWxhcmx5IHdpdGggcGFnZSByZWNsYWltIGFuZCB0aGUgd3JpdGViYWNrIHByb2Nlc3MuIExldCdzIHNlZSBob3cgbXVjaCBtZW1vcnkgYW5kIG92ZXJoZWFkIGl0IGhhcy4gSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIG9wdGltaXphdGlvbnMgd2l0aGluIHRoYXQgZnVuY3Rpb24gYW5kIHdoZXRoZXIgaXQgY2FuIGNvbnRyaWJ1dGUgdG8gc3lzdGVtIHNsb3dkb3duLiBPa2F5LCBsZXQncyBnZXQgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA0MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDExOjIyOjQyLjAxMTk3NjIwM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0venN3YXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjU1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjU1OlxcdFxcdCAqL1xcbjE2NTY6XFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuMTY1NzpcXHRcXHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQpO1xcbjE2NTg6XFx0XFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XFxuMTY1OTpcXHRcXG4xNjYwOlxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuMTY2MTpcXHRcXHRyZXR1cm4gMDtcXG4xNjYyOlxcdH1cXG4xNjYzOlxcdFxcbjE2NjQ6XFx0dm9pZCB6c3dhcF9pbnZhbGlkYXRlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldClcXG4xNjY1OlxcdHtcXG4xNjY2OlxcdFxcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSB6c3dhcF90cmVlKHR5cGUsIG9mZnNldCk7XFxuMTY2NzpcXHRcXHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5O1xcbjE2Njg6XFx0XFxuMTY2OTpcXHRcXHRpZiAoeGFfZW1wdHkodHJlZSkpXFxuMTY3MDpcXHRcXHRcXHRyZXR1cm47XFxuMTY3MTpcXHRcXG4xNjcyOlxcdFxcdGVudHJ5ID0geGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcXG4xNjczOlxcdFxcdGlmIChlbnRyeSlcXG4xNjc0OlxcdFxcdFxcdHpzd2FwX2VudHJ5X2ZyZWUoZW50cnkpO1xcbjE2NzU6XFx0fVxcbjE2NzY6XFx0XFxuMTY3NzpcXHRpbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbjE2Nzg6XFx0e1xcbjE2Nzk6XFx0XFx0c3RydWN0IHhhcnJheSAqdHJlZXMsICp0cmVlO1xcbjE2ODA6XFx0XFx0dW5zaWduZWQgaW50IG5yLCBpO1xcbjE2ODE6XFx0XFxuMTY4MjpcXHRcXHRuciA9IERJVl9ST1VORF9VUChucl9wYWdlcywgWlNXQVBfQUREUkVTU19TUEFDRV9QQUdFUyk7XFxuMTY4MzpcXHRcXHR0cmVlcyA9IGt2emFsbG9jX29ianMoKnRyZWUsIG5yKTtcXG4xNjg0OlxcdFxcdGlmICghdHJlZXMpIHtcXG4xNjg1OlxcdFxcdFxcdHByX2VycihcXFwiYWxsb2MgZmFpbGVkLCB6c3dhcCBkaXNhYmxlZCBmb3Igc3dhcCB0eXBlICVkXFxcXG5cXFwiLCB0eXBlKTtcXG4xNjg2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE2ODc6XFx0XFx0fVxcbjE2ODg6XFx0XFxuMTY4OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnI7IGkrKylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6NDIuMDEyMTM5ODkzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxNTU3MzgxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gTmV3IENvbmNlcm5zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhlIHBhdGNoJ3MgY2hhbmdlczogSXQncyBhIHJlZmFjdG9yaW5nIG9mIGB6c3dhcF9pbnZhbGlkYXRlYCB0byB1c2UgYCh0eXBlLCBvZmZzZXQpYCBpbnN0ZWFkIG9mIGBzd3BfZW50cnlfdGAsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBhdm9pZGluZyB1bm5lY2Vzc2FyeSBzd3BfZW50cnkgY3JlYXRpb24uIFRoZXJlJ3MgYWxzbyBzb21lIG9wdGltaXphdGlvbiBpbiBgc3dhcF9yYW5nZV9mcmVlYCByZWxhdGVkIHRvIGB6c3dhcF9uZXZlcl9lbmFibGVkKClgIGFuZCBhIHNpbWlsYXIgb3B0aW1pemF0aW9uIGFuZCBzaW1wbGlmaWNhdGlvbiBpbiBgenN3YXBfc3RvcmVgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgS01TQU4gY29uY2VybnM/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC5cblxuKiAgICoqVXNlci1zcGFjZSBleHBvc3VyZT8qKiBOb3BlLiBObyBuZXcga2VybmVsIHN0cnVjdHVyZXMgc2VudCBvdXQsIGFuZCBub3RoaW5nIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuKiAgICoqVW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2U/KiogTm8uIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgYXJlIGVpdGhlciBmdW5jdGlvbiBhcmd1bWVudHMsIHdlbGwtaW5pdGlhbGl6ZWQgZ2xvYmFscywgb3IgZmxhZ3MuIE5vIHJpc2tzIHRoZXJlLlxuKiAgICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbj8qKiBEb2Vzbid0IHNlZW0gc28uIE5vIGNvbXBsZXggc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byBsYXRlciB1bmluaXRpYWxpemVkIHJlYWRzLlxuKiAgICoqQm91bmRzIGNoZWNrIHZ1bG5lcmFiaWxpdGllcz8qKiBOb3RoaW5nIHRoYXQgY291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBpc3N1ZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGtpbmRzIG9mIG1lbW9yeS1yZWxhdGVkIGVycm9ycyB0aGF0ICpjb3VsZCogYXJpc2UgYXJlOiBhcnJheSBpbmRleGluZyBpbnRvIGB6c3dhcF90cmVlc2AsIGxvY2tpbmcgb3IgY29uY3VycmVuY3kgcHJvYmxlbXMsIG9yIHVzZS1hZnRlci1mcmVlL2xvZ2ljIGJ1Z3Mgd2l0aGluIHRoZSB6c3dhcCBsaWZlY3ljbGUuIEJ1dCB0aG9zZSBhcmUgcHJlY2lzZWx5IHRoZSB0aGluZ3MgS0FTQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2ghXG5cbk15IGNvbmNsdXNpb246IHNpbmNlIEtBU0FOIGhhbmRsZXMgdGhlIHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzLCB0aGVyZSdzIG5vIG5lZWQgZm9yIEtNU0FOIHRvIGJlIGludm9sdmVkIGhlcmUuIFRoaXMgYWxsIGxvb2tzIGdvb2QuIFRpbWUgdG8gZmluYWxpemUgdGhlIGFuYWx5c2lzLiBJJ20gc2V0dGluZyB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg3NiwiT3V0cHV0VG9rZW5zIjoxNjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMToyMjo0Ny4xNjc4ODA0OTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB6c3dhcCBoZWxwZXIgZnVuY3Rpb25zIChgenN3YXBfaW52YWxpZGF0ZWAgYW5kIGB6c3dhcF90cmVlYCkgdG8gcGFzcyB0eXBlIGFuZCBvZmZzZXQgZGlyZWN0bHkgcmF0aGVyIHRoYW4gcGFja2luZy91bnBhY2tpbmcgYHN3cF9lbnRyeV90YCwgYWRkcyBlYXJseS1leGl0IGNoZWNrcyB1c2luZyBgenN3YXBfbmV2ZXJfZW5hYmxlZCgpYCwgYW5kIHNpbXBsaWZpZXMgZW50cnkgY2xlYW51cCBpbiBgenN3YXBfc3RvcmUoKWAuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFBvdGVudGlhbCBpc3N1ZXMgcmVsYXRpbmcgdG8genN3YXAgdHJlZSBpbmRleGluZyBvciBlbnRyeSBsaWZldGltZXMgZmFsbCB1bmRlciBtZW1vcnkgc2FmZXR5IC8gY29uY3VycmVuY3kgY29uY2VybnMgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycy4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB6c3dhcCBoZWxwZXIgZnVuY3Rpb25zIChgenN3YXBfaW52YWxpZGF0ZWAgYW5kIGB6c3dhcF90cmVlYCkgdG8gcGFzcyB0eXBlIGFuZCBvZmZzZXQgZGlyZWN0bHkgcmF0aGVyIHRoYW4gcGFja2luZy91bnBhY2tpbmcgYHN3cF9lbnRyeV90YCwgYWRkcyBlYXJseS1leGl0IGNoZWNrcyB1c2luZyBgenN3YXBfbmV2ZXJfZW5hYmxlZCgpYCwgYW5kIHNpbXBsaWZpZXMgZW50cnkgY2xlYW51cCBpbiBgenN3YXBfc3RvcmUoKWAuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFBvdGVudGlhbCBpc3N1ZXMgcmVsYXRpbmcgdG8genN3YXAgdHJlZSBpbmRleGluZyBvciBlbnRyeSBsaWZldGltZXMgZmFsbCB1bmRlciBtZW1vcnkgc2FmZXR5IC8gY29uY3VycmVuY3kgY29uY2VybnMgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycy4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowx6j7c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 10:06:14 +0000 UTC FinishedAt: 2026-09-10 11:22:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cf558a250cf4475a8936902b8978fbb6c61016f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cf558a250cf4475a8936902b8978fbb6c61016f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP" ], "series_id": "8fcc7bd4-9135-4767-86c0-7cdadb7b17db" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_store", "zswap_invalidate", "swap_range_free", "__swap_cluster_free_entries" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9pbnZhbGlkYXRlJiMzNDssCiAgICAmIzM0O3N3YXBfcmFuZ2VfZnJlZSYjMzQ7LAogICAgJiMzNDtfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgenN3YXAgaGVscGVyIGZ1bmN0aW9ucyAoYHpzd2FwX2ludmFsaWRhdGVgIGFuZCBgenN3YXBfdHJlZWApIHRvIHBhc3MgdHlwZSBhbmQgb2Zmc2V0IGRpcmVjdGx5IHJhdGhlciB0aGFuIHBhY2tpbmcvdW5wYWNraW5nIGBzd3BfZW50cnlfdGAsIGFkZHMgZWFybHktZXhpdCBjaGVja3MgdXNpbmcgYHpzd2FwX25ldmVyX2VuYWJsZWQoKWAsIGFuZCBzaW1wbGlmaWVzIGVudHJ5IGNsZWFudXAgaW4gYHpzd2FwX3N0b3JlKClgLlxuXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gUG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byB6c3dhcCB0cmVlIGluZGV4aW5nIG9yIGVudHJ5IGxpZmV0aW1lcyBmYWxsIHVuZGVyIG1lbW9yeSBzYWZldHkgLyBjb25jdXJyZW5jeSBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgenN3YXAgaW52YWxpZGF0aW9uIGludGVyZmFjZSBhbmQgYWRkcyBlYXJseS1leGl0IG9wdGltaXphdGlvbiBjaGVja3MgKHZpYSB6c3dhcF9uZXZlcl9lbmFibGVkKCkpIGluIHpzd2FwX3N0b3JlKCkgYW5kIHN3YXBfcmFuZ2VfZnJlZSgpLiBTaW5jZSB0aGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3dhcCBhbmQgY29tcHJlc3NlZCBjYWNoZSBsb2dpYyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzI3MDY4NjlmMTYyMGQxMjRhOWM3Yzk3Yjc4Y2QxZjNhMjk1ODcxM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDExOjIxOjUxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenN3YXAuaCBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuaW5kZXggMzBjMTkzYTEyMDdlMS4uNDYzYmRlZTVjMWUxNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC96c3dhcC5oXG5AQCAtMjcsNyAmIzQzOzI3LDcgQEAgc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7XG4gdW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKTtcbiBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApO1xuJiM0Mzt2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KTtcbiBpbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiB2b2lkIHpzd2FwX3N3YXBvZmYoaW50IHR5cGUpO1xuIHZvaWQgenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG5AQCAtNDksNyAmIzQzOzQ5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIC1FTk9FTlQ7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cCkge31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggMDVkMzQwODM5NmY5OC4uNTA1NTkyMDUxOTI0MyAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xMzE4LDggJiM0MzsxMzE4LDEwIEBAIHN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxuIFx0dm9pZCAoKnN3YXBfc2xvdF9mcmVlX25vdGlmeSkoc3RydWN0IGJsb2NrX2RldmljZSAqLCB1bnNpZ25lZCBsb25nKTtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSYjNDM7JiM0MzspXG4tXHRcdHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5KHNpLVx1MDAzZXR5cGUsIG9mZnNldCAmIzQzOyBpKSk7XG4mIzQzO1x0aWYgKCF6c3dhcF9uZXZlcl9lbmFibGVkKCkpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHR6c3dhcF9pbnZhbGlkYXRlKHNpLVx1MDAzZXR5cGUsIG9mZnNldCAmIzQzOyBpKTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoc2ktXHUwMDNlZmxhZ3MgXHUwMDI2IFNXUF9CTEtERVYpXG4gXHRcdHN3YXBfc2xvdF9mcmVlX25vdGlmeSA9XG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IGExMmI2NDUyYTIyNTEuLjYxOTdhYTcxZTMzYzkgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jXG5AQCAtMjI4LDEwICYjNDM7MjI4LDE1IEBAIHN0YXRpYyBib29sIHpzd2FwX2hhc19wb29sO1xuIC8qIE9uZSBzd2FwIGFkZHJlc3Mgc3BhY2UgZm9yIGVhY2ggNjRNIHN3YXAgc3BhY2UgKi9cbiAjZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlQgMTRcbiAjZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfUEFHRVMgKDEgXHUwMDNjXHUwMDNjIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlQpXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCB4YXJyYXkgKnpzd2FwX3RyZWUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNnpzd2FwX3RyZWVzW3R5cGVdW29mZnNldCBcdTAwM2VcdTAwM2UgWlNXQVBfQUREUkVTU19TUEFDRV9TSElGVF07XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgeGFycmF5ICpzd2FwX3pzd2FwX3RyZWUoc3dwX2VudHJ5X3Qgc3dwKVxuIHtcbi1cdHJldHVybiBcdTAwMjZ6c3dhcF90cmVlc1tzd3BfdHlwZShzd3ApXVtzd3Bfb2Zmc2V0KHN3cClcbi1cdFx0XHUwMDNlXHUwMDNlIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlRdO1xuJiM0MztcdHJldHVybiB6c3dhcF90cmVlKHN3cF90eXBlKHN3cCksIHN3cF9vZmZzZXQoc3dwKSk7XG4gfVxuIFxuICNkZWZpbmUgenN3YXBfcG9vbF9kZWJ1Zyhtc2csIHApXHRcdFx0XFxcbkBAIC0xNDg3LDYgJiM0MzsxNDkyLDkgQEAgYm9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0Vk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpO1xuIFxuJiM0MztcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuIFx0aWYgKCF6c3dhcF9lbmFibGVkKVxuIFx0XHRnb3RvIGNoZWNrX29sZDtcbiBcbkBAIC0xNTQ0LDE1ICYjNDM7MTU1Miw5IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmICghcmV0KSB7XG4gXHRcdHVuc2lnbmVkIHR5cGUgPSBzd3BfdHlwZShzd3ApO1xuIFx0XHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbi1cdFx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeTtcbi1cdFx0c3RydWN0IHhhcnJheSAqdHJlZTtcbi1cbi1cdFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBucl9wYWdlczsgJiM0MzsmIzQzO2luZGV4KSB7XG4tXHRcdFx0dHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3BfZW50cnkodHlwZSwgb2Zmc2V0ICYjNDM7IGluZGV4KSk7XG4tXHRcdFx0ZW50cnkgPSB4YV9lcmFzZSh0cmVlLCBvZmZzZXQgJiM0MzsgaW5kZXgpO1xuLVx0XHRcdGlmIChlbnRyeSlcbi1cdFx0XHRcdHpzd2FwX2VudHJ5X2ZyZWUoZW50cnkpO1xuLVx0XHR9XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBucl9wYWdlczsgJiM0MzsmIzQzO2luZGV4KVxuJiM0MztcdFx0XHR6c3dhcF9pbnZhbGlkYXRlKHR5cGUsIG9mZnNldCAmIzQzOyBpbmRleCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTE2NTksMTAgJiM0MzsxNjYxLDkgQEAgaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi12b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKVxuJiM0Mzt2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KVxuIHtcbi1cdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xuLVx0c3RydWN0IHhhcnJheSAqdHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3ApO1xuJiM0MztcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSB6c3dhcF90cmVlKHR5cGUsIG9mZnNldCk7XG4gXHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5O1xuIFxuIFx0aWYgKHhhX2VtcHR5KHRyZWUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9pbnZhbGlkYXRlJiMzNDssCiAgICAmIzM0O3N3YXBfcmFuZ2VfZnJlZSYjMzQ7LAogICAgJiMzNDtfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB6c3dhcCBpbnZhbGlkYXRpb24gaW50ZXJmYWNlIGFuZCBhZGRzIGVhcmx5LWV4aXQgb3B0aW1pemF0aW9uIGNoZWNrcyAodmlhIHpzd2FwX25ldmVyX2VuYWJsZWQoKSkgaW4genN3YXBfc3RvcmUoKSBhbmQgc3dhcF9yYW5nZV9mcmVlKCkuIFNpbmNlIHRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzd2FwIGFuZCBjb21wcmVzc2VkIGNhY2hlIGxvZ2ljIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMjcwNjg2OWYxNjIwZDEyNGE5YzdjOTdiNzhjZDFmM2EyOTU4NzEzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMTE6MjE6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmgKaW5kZXggMzBjMTkzYTEyMDdlMS4uNDYzYmRlZTVjMWUxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvenN3YXAuaApAQCAtMjcsNyAmIzQzOzI3LDcgQEAgc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7CiB1bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpOwogYm9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pOwotdm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cCk7CiYjNDM7dm9pZCB6c3dhcF9pbnZhbGlkYXRlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldCk7CiBpbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIHZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSk7CiB2b2lkIHpzd2FwX21lbWNnX29mZmxpbmVfY2xlYW51cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwpAQCAtNDksNyAmIzQzOzQ5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAtRU5PRU5UOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApIHt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KSB7fQogc3RhdGljIGlubGluZSBpbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggMDVkMzQwODM5NmY5OC4uNTA1NTkyMDUxOTI0MyAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jCkBAIC0xMzE4LDggJiM0MzsxMzE4LDEwIEBAIHN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAogCXZvaWQgKCpzd2FwX3Nsb3RfZnJlZV9ub3RpZnkpKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgdW5zaWduZWQgbG9uZyk7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZW50cmllczsgaSYjNDM7JiM0MzspCi0JCXpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5KHNpLSZndDt0eXBlLCBvZmZzZXQgJiM0MzsgaSkpOwomIzQzOwlpZiAoIXpzd2FwX25ldmVyX2VuYWJsZWQoKSkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KQomIzQzOwkJCXpzd2FwX2ludmFsaWRhdGUoc2ktJmd0O3R5cGUsIG9mZnNldCAmIzQzOyBpKTsKJiM0MzsJfQogCiAJaWYgKHNpLSZndDtmbGFncyAmYW1wOyBTV1BfQkxLREVWKQogCQlzd2FwX3Nsb3RfZnJlZV9ub3RpZnkgPQpkaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmMKaW5kZXggYTEyYjY0NTJhMjI1MS4uNjE5N2FhNzFlMzNjOSAxMDA2NDQKLS0tIGEvbW0venN3YXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jCkBAIC0yMjgsMTAgJiM0MzsyMjgsMTUgQEAgc3RhdGljIGJvb2wgenN3YXBfaGFzX3Bvb2w7CiAvKiBPbmUgc3dhcCBhZGRyZXNzIHNwYWNlIGZvciBlYWNoIDY0TSBzd2FwIHNwYWNlICovCiAjZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlQgMTQKICNkZWZpbmUgWlNXQVBfQUREUkVTU19TUEFDRV9QQUdFUyAoMSAmbHQ7Jmx0OyBaU1dBUF9BRERSRVNTX1NQQUNFX1NISUZUKQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHhhcnJheSAqenN3YXBfdHJlZShpbnQgdHlwZSwgcGdvZmZfdCBvZmZzZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gJmFtcDt6c3dhcF90cmVlc1t0eXBlXVtvZmZzZXQgJmd0OyZndDsgWlNXQVBfQUREUkVTU19TUEFDRV9TSElGVF07CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgeGFycmF5ICpzd2FwX3pzd2FwX3RyZWUoc3dwX2VudHJ5X3Qgc3dwKQogewotCXJldHVybiAmYW1wO3pzd2FwX3RyZWVzW3N3cF90eXBlKHN3cCldW3N3cF9vZmZzZXQoc3dwKQotCQkmZ3Q7Jmd0OyBaU1dBUF9BRERSRVNTX1NQQUNFX1NISUZUXTsKJiM0MzsJcmV0dXJuIHpzd2FwX3RyZWUoc3dwX3R5cGUoc3dwKSwgc3dwX29mZnNldChzd3ApKTsKIH0KIAogI2RlZmluZSB6c3dhcF9wb29sX2RlYnVnKG1zZywgcCkJCQlcCkBAIC0xNDg3LDYgJiM0MzsxNDkyLDkgQEAgYm9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCVZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTsKIAlWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSk7CiAKJiM0MzsJaWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAlpZiAoIXpzd2FwX2VuYWJsZWQpCiAJCWdvdG8gY2hlY2tfb2xkOwogCkBAIC0xNTQ0LDE1ICYjNDM7MTU1Miw5IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoIXJldCkgewogCQl1bnNpZ25lZCB0eXBlID0gc3dwX3R5cGUoc3dwKTsKIAkJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7Ci0JCXN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnk7Ci0JCXN0cnVjdCB4YXJyYXkgKnRyZWU7Ci0KLQkJZm9yIChpbmRleCA9IDA7IGluZGV4ICZsdDsgbnJfcGFnZXM7ICYjNDM7JiM0MztpbmRleCkgewotCQkJdHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3BfZW50cnkodHlwZSwgb2Zmc2V0ICYjNDM7IGluZGV4KSk7Ci0JCQllbnRyeSA9IHhhX2VyYXNlKHRyZWUsIG9mZnNldCAmIzQzOyBpbmRleCk7Ci0JCQlpZiAoZW50cnkpCi0JCQkJenN3YXBfZW50cnlfZnJlZShlbnRyeSk7Ci0JCX0KJiM0MzsKJiM0MzsJCWZvciAoaW5kZXggPSAwOyBpbmRleCAmbHQ7IG5yX3BhZ2VzOyAmIzQzOyYjNDM7aW5kZXgpCiYjNDM7CQkJenN3YXBfaW52YWxpZGF0ZSh0eXBlLCBvZmZzZXQgJiM0MzsgaW5kZXgpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xNjU5LDEwICYjNDM7MTY2MSw5IEBAIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApCiYjNDM7dm9pZCB6c3dhcF9pbnZhbGlkYXRlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldCkKIHsKLQlwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTsKLQlzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKHN3cCk7CiYjNDM7CXN0cnVjdCB4YXJyYXkgKnRyZWUgPSB6c3dhcF90cmVlKHR5cGUsIG9mZnNldCk7CiAJc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeTsKIAogCWlmICh4YV9lbXB0eSh0cmVlKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA3MAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDM0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggUmVsYXRlZCB0byBac3dhcCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGxvb2tzIGludGVyZXN0aW5nOyBpdCYjMzk7cyB0b3VjaGluZyBzb21lIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgenN3YXBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuCgpGaXJzdCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIHNwZWNpZmljcy4gVGhlIHBhdGNoIGltcGFjdHMgYGluY2x1ZGUvbGludXgvenN3YXAuaGAsIGBtbS9zd2FwZmlsZS5jYCwgYW5kIGBtbS96c3dhcC5jYC4gQWxyZWFkeSwgSSYjMzk7bSBzZWVpbmcgYSBzaWduYXR1cmUgY2hhbmdlIGluIGB6c3dhcF9pbnZhbGlkYXRlKClgLCB3aGljaCBpcyBhIGtleSBmdW5jdGlvbiBpbiB6c3dhcCBvcGVyYXRpb25zLiBJdCBhcHBlYXJzIHRvIG5vdyB0YWtlIGEgdHlwZSBhbmQgb2Zmc2V0LiBFeGFtaW5pbmcgdGhlIGBtbS9zd2FwZmlsZS5jYCBjaGFuZ2VzLCBJIHNlZSB0aGF0IHRoZSBwYXRjaCBzZWVtcyB0byBoYXZlIGFkZGVkIGEgY2hlY2ssIGBpZiAoIXpzd2FwX25ldmVyX2VuYWJsZWQoKSlgIGJlZm9yZSBjYWxsaW5nIGB6c3dhcF9pbnZhbGlkYXRlKClgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSXQgaW5kaWNhdGVzIHRoYXQgdGhlIGludmFsaWRhdGlvbiBsb2dpYyBtaWdodCBoYXZlIGRpZmZlcmVudCBiZWhhdmlvciBkZXBlbmRpbmcgb24gaWYgenN3YXAgaXMgZW5hYmxlZCBvciBub3QuCgpUaGVuIGluIGBtbS96c3dhcC5jYCwgdGhlcmUmIzM5O3MgYSBuZXcgaGVscGVyIGZ1bmN0aW9uLCBgenN3YXBfdHJlZSgpYCBhbmQgYW4gdXBkYXRlIG9mIHRoZSBgenN3YXBfaW52YWxpZGF0ZSgpYCBjYWxsIGluIGB6c3dhcF9zdG9yZSgpYC4gVGhpcyBzdWdnZXN0cyBzb21lIHVuZGVybHlpbmcgcmVzdHJ1Y3R1cmluZyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgenN3YXAgaW50ZXJhY3RzIHdpdGggdGhlIHN3YXAgZmlsZSBzeXN0ZW0gYW5kIGl0cyBpbnZhbGlkYXRpb24gbWVjaGFuaXNtLiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSBuZXcgY29uZGl0aW9uIGluIHRoZSBzdG9yZSBmdW5jdGlvbiwgYGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpYC4KClRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgYXJlYS4gQ2hhbmdlcyB0byBgbW0venN3YXAuY2AgYW5kIGBtbS9zd2FwZmlsZS5jYCBhcmUgYSBiaWcgZGVhbDsgdGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCwgaWYgbWlzaGFuZGxlZCwgY291bGQgaGF2ZSBzZXJpb3VzIGNvbnNlcXVlbmNlcy4gQnV0LCBpcyBpdCByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudD8gWWVzLCB0aGlzIHBhdGNoIHdvdWxkIGRlZmluaXRlbHkgYmUgZXhlcmNpc2FibGUgaW4gUUVNVSwgb3IgYW55IGFtZDY0IGVudmlyb25tZW50IHdpdGggenN3YXAgYW5kIHN3YXBmaWxlIGNvbmZpZ3VyZWQuIFRoZXJlZm9yZSwgZnV6emluZyB0aGlzIHBhdGNoIHdvdWxkIGJlIGhpZ2hseSB2YWx1YWJsZS4KCk5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGB6c3dhcGAgYW5kIGl0cyByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcGF0Y2ggd2lsbCBiZWhhdmUgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy4gSSBzaG91bGQgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBzdWJzeXN0ZW1zLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgYmUga2V5IHRvIGNyZWF0aW5nIGEgc29saWQgdGVzdCBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWlNXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcbi0tXG5tbS9LY29uZmlnLTIxLVxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcbm1tL0tjb25maWctMjMtXHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTM0LVxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9NTk9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy03Ni1cbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG5tbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWZsYXRlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04Mi1cbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cbm1tL0tjb25maWctODQtXHRib29sIFwmIzM0O0xaT1wmIzM0O1xuLS1cbm1tL0tjb25maWctODgtXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXG5tbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0LVxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxubW0vS2NvbmZpZy05Ni1cdGJvb2wgXCYjMzQ7TFo0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDAtXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXG5tbS9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7TFo0SENcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwNi1cbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxubW0vS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2Vcbm1tL0tjb25maWctMTEzLVxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NDUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgWlNXQVAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBaU1dBUCwgcmlnaHQ/IFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IGFyZWEuIExldCYjMzk7cyBkaXZlIGludG8gYG1tL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjAuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgZmVhdHVyZXMgYXJlIGxvY2F0ZWQuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBvciBzb21lIG90aGVyIGxvZ2ljIHRoYXQgdGVsbHMgbWUgd2hhdCBvdGhlciBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIEkgY2FuIGVuYWJsZSBaU1dBUC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY3Jvc3MtZGVwZW5kZW5jaWVzIGFuZCBtYXliZSBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIGFyY2hpdGVjdHVyZSBvciBvdGhlciBrZXJuZWwgZmVhdHVyZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSB0byB3b3JrIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE1Olx0XHRkZWZhdWx0IHlcbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcbiAgMTg6XHRcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxuICAxOTpcdFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcbiAgMjA6XHRcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cbiAgMjE6XHRcbiAgMjI6XHRjb25maWcgWlNXQVBcbiAgMjM6XHRcdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuICAyNDpcdFx0ZGVwZW5kcyBvbiBTV0FQXG4gIDI1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gIDI2Olx0XHRzZWxlY3QgWlNNQUxMT0NcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcbiAgMjk6XHRcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXG4gIDMwOlx0XHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXG4gIDMxOlx0XHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxuICAzMjpcdFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXG4gIDMzOlx0XHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG4gIDM2Olx0XHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIFpTV0FQXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcbiAgNDA6XHRcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXG4gIDQxOlx0XG4gIDQyOlx0XHQgIFRoZSBzZWxlY3Rpb24gbWFkZSBoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSBrZXJuZWxcbiAgNDM6XHRcdCAgY29tbWFuZCBsaW5lICYjMzk7enN3YXAuZW5hYmxlZD0mIzM5OyBvcHRpb24uXG4gIDQ0Olx0XG4gIDQ1Olx0Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbiAgNDY6XHRcdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuICA0NzpcdFx0ZGVwZW5kcyBvbiBaU1dBUFxuICA0ODpcdFx0ZGVmYXVsdCBuXG4gIDQ5Olx0XHRoZWxwXG4gIDUwOlx0XHQgIElmIHNlbGVjdGVkLCB0aGUgenN3YXAgc2hyaW5rZXIgd2lsbCBiZSBlbmFibGVkLCBhbmQgdGhlIHBhZ2VzXG4gIDUxOlx0XHQgIHN0b3JlZCBpbiB0aGUgenN3YXAgcG9vbCB3aWxsIGJlY29tZSBhdmFpbGFibGUgZm9yIHJlY2xhaW0gKGkuZVxuICA1MjpcdFx0ICB3cml0dGVuIGJhY2sgdG8gdGhlIGJhY2tpbmcgc3dhcCBkZXZpY2UpIG9uIG1lbW9yeSBwcmVzc3VyZS5cbiAgNTM6XHRcbiAgNTQ6XHRcdCAgVGhpcyBtZWFucyB0aGF0IHpzd2FwIHdyaXRlYmFjayBjb3VsZCBoYXBwZW4gZXZlbiBpZiB0aGUgcG9vbCBpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipUcmFjaW5nIHRoZSBPcmlnaW5zIG9mIGB6c3dhcF9uZXZlcl9lbmFibGVkYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgZXhhY3RseSBpcyB0aGlzIGB6c3dhcF9uZXZlcl9lbmFibGVkYCB2YXJpYWJsZSBkZWZpbmVkLCBhbmQgY3JpdGljYWxseSwgKmhvdyogaXMgaXQgYmVpbmcgdXNlZD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgenN3YXAgaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgdGhlIGZpcnN0IGNydWNpYWwgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGlmIGl0JiMzOTtzIGludm9sdmVkIGluIGFuIGlzc3VlIEkmIzM5O20gaW52ZXN0aWdhdGluZyBvciBqdXN0IHNpbXBseSB0cnlpbmcgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIHRoaXMgY29kZS4gSSBuZWVkIHRvIGJlIGFibGUgdG8gdHJhY2UgaXRzIGRlY2xhcmF0aW9uIGFuZCB1c2FnZSBwYXR0ZXJucyB0byBmb3JtIGEgdmFsaWQgY29uY2x1c2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9uZXZlcl9lbmFibGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvenN3YXAuaD0zNj1ib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6Mzc6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xuaW5jbHVkZS9saW51eC96c3dhcC5oLTM4LSNlbHNlXG4tLVxuaW5jbHVkZS9saW51eC96c3dhcC5oPTYyPXN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC96c3dhcC5oLTY2LVxuaW5jbHVkZS9saW51eC96c3dhcC5oOjY3OnN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNjgte1xuLS1cbm1tL21lbW9yeS5jPTQ3NTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDc3OS1cdCAqL1xubW0vbWVtb3J5LmM6NDc4MDpcdGlmICghenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxubW0vbWVtb3J5LmMtNDc4MS1cdFx0cmV0dXJuIDA7XG4tLVxubW0vc2htZW0uYz0yMjQyPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBfYWxsb2NfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9zaG1lbS5jLTIyNTEtXHRpZiAoKHZtZiBcdTAwMjZcdTAwMjYgdW5saWtlbHkodXNlcmZhdWx0ZmRfYXJtZWQodm1mLVx1MDAzZXZtYSkpKSB8fFxubW0vc2htZW0uYzoyMjUyOlx0ICAgICAhenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxubW0vc2htZW0uYy0yMjUzLVx0XHRvcmRlciA9IDA7XG4tLVxubW0vc3dhcGZpbGUuYz0xMzE0PXN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxuLS1cbm1tL3N3YXBmaWxlLmMtMTMyMC1cbm1tL3N3YXBmaWxlLmM6MTMyMTpcdGlmICghenN3YXBfbmV2ZXJfZW5hYmxlZCgpKSB7XG5tbS9zd2FwZmlsZS5jLTEzMjItXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KVxuLS1cbm1tL3pzd2FwLmM9MTI1PWJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKVxuLS1cbm1tL3pzd2FwLmMtMTI5LVxubW0venN3YXAuYzoxMzA6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG5tbS96c3dhcC5jLTEzMS17XG4tLVxubW0venN3YXAuYz0xNDgyPWJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTE0OTQtXG5tbS96c3dhcC5jOjE0OTU6XHRpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxubW0venN3YXAuYy0xNDk2LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0venN3YXAuYz0xNjA2PWludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy0xNjE1LVxubW0venN3YXAuYzoxNjE2Olx0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbm1tL3pzd2FwLmMtMTYxNy1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEwNAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERpZmY6IEEgUXVpY2sgU2NhbiBvZiBJbXBhY3RlZCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGRpZmYuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gVGhlIGRpZmYgdG91Y2hlcyBhIGZldyBrZXkgYXJlYXMsIGFuZCBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcG90ZW50aWFsbHkgaW1wYWN0ZWQgc3Vic3lzdGVtcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmdW5jdGlvbiBsZXZlbCBicmVha2Rvd246IEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYHpzd2FwX3N0b3JlYCBhbmQgYHpzd2FwX2ludmFsaWRhdGVgIHdpdGhpbiBgbW0venN3YXAuY2AuIFRoZW4sIHRoZXJlJiMzOTtzIGBzd2FwX3JhbmdlX2ZyZWVgIGluIGBtbS9zd2FwZmlsZS5jYCwgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGF0dGVudGlvbi4gRmluYWxseSwgdGhlcmUgYXJlIGFsc28gdHdvIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLCBgenN3YXBfdHJlZWAgYW5kIGBzd2FwX3pzd2FwX3RyZWVgIGFsc28gaW4gYG1tL3pzd2FwLmNgIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLgoKTm93IHRoYXQgSSBoYXZlIGEgbWFwIG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIGxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBjYWxsIGdyYXBoIGZvciBgc3dhcF9yYW5nZV9mcmVlYCBhbmQgYHpzd2FwX2ludmFsaWRhdGVgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBtb3N0IGxpa2VseSB0byBoYXZlIGtub2NrLW9uIGVmZmVjdHMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZXkgYXJlIHVzZWQgYW5kIGhvdyB0aGUgZXhpc3RpbmcgZGVzaWduIGltcGFjdHMgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfaW52YWxpZGF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3pzd2FwLmg9Mjk9aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6MzA6dm9pZCB6c3dhcF9pbnZhbGlkYXRlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldCk7XG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtMzEtaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4tLVxuaW5jbHVkZS9saW51eC96c3dhcC5oPTQ3PXN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNTEtXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6NTI6c3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KSB7fVxuaW5jbHVkZS9saW51eC96c3dhcC5oLTUzLXN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbi0tXG5tbS9zd2FwZmlsZS5jPTEzMTQ9c3RhdGljIHZvaWQgc3dhcF9yYW5nZV9mcmVlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXG4tLVxubW0vc3dhcGZpbGUuYy0xMzIyLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpJiM0MzsmIzQzOylcbm1tL3N3YXBmaWxlLmM6MTMyMzpcdFx0XHR6c3dhcF9pbnZhbGlkYXRlKHNpLVx1MDAzZXR5cGUsIG9mZnNldCAmIzQzOyBpKTtcbm1tL3N3YXBmaWxlLmMtMTMyNC1cdH1cbi0tXG5tbS96c3dhcC5jPTE0ODI9Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtMTU1Ni1cdFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBucl9wYWdlczsgJiM0MzsmIzQzO2luZGV4KVxubW0venN3YXAuYzoxNTU3Olx0XHRcdHpzd2FwX2ludmFsaWRhdGUodHlwZSwgb2Zmc2V0ICYjNDM7IGluZGV4KTtcbm1tL3pzd2FwLmMtMTU1OC1cdH1cbi0tXG5tbS96c3dhcC5jPTE2MDY9aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTE2NjMtXG5tbS96c3dhcC5jOjE2NjQ6dm9pZCB6c3dhcF9pbnZhbGlkYXRlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldClcbm1tL3pzd2FwLmMtMTY2NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NzQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgc3dhcF9yYW5nZV9mcmVlYCBDYWxsZXJzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBzd2FwX3JhbmdlX2ZyZWVgLiBUaGF0IGZ1bmN0aW9uIGlzIGNyaXRpY2FsIHdoZW4gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgc3dhcCBzcGFjZSBtYW5hZ2VtZW50IGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL3N3YXBmaWxlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgdXNhZ2Ug4oCTIHVuZGVyc3RhbmRpbmcgKndoZXJlKiBpdCYjMzk7cyBjYWxsZWQgd2lsbCBpbGx1bWluYXRlIGhvdyBtZW1vcnkgaXMgYmVpbmcgcmVsZWFzZWQgYmFjayB0byB0aGUgc3dhcCBkZXZpY2UuIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhvc2UgY2FsbHMuIFdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIGEgcmFuZ2Ugb2Ygc3dhcCBwYWdlcyB0byBiZSBmcmVlZD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBwYWdlIHJlY2xhaW0sIHByb2Nlc3MgdGVybWluYXRpb24sIGZpbGUgdW5tYXBwaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNhbGxlciBpbmZvcm1hdGlvbiB3aWxsIHRlbGwgdGhlIHRhbGUuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgaXMgcGFyYW1vdW50IHRvIHVuZGVyc3RhbmRpbmcgaG93IHN3YXAgc3BhY2UgaXMgYmVpbmcgaGFuZGxlZC4gVGhpcyBpcyBnb2luZyB0byBiZSBnb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX3JhbmdlX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz0xMzA0PXN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfYWxsb2Moc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMTMxMy1cbm1tL3N3YXBmaWxlLmM6MTMxNDpzdGF0aWMgdm9pZCBzd2FwX3JhbmdlX2ZyZWUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcbm1tL3N3YXBmaWxlLmMtMTMxNS1cdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX2VudHJpZXMpXG4tLVxubW0vc3dhcGZpbGUuYz0xOTMyPXZvaWQgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE5NzMtXG5tbS9zd2FwZmlsZS5jOjE5NzQ6XHRzd2FwX3JhbmdlX2ZyZWUoc2ksIGNpX2hlYWQgJiM0MzsgY2lfc3RhcnQsIG5yX3BhZ2VzKTtcbm1tL3N3YXBmaWxlLmMtMTk3NS1cdHN3YXBfY2x1c3Rlcl9hc3NlcnRfZW1wdHkoY2ksIGNpX3N0YXJ0LCBucl9wYWdlcywgZmFsc2UpO1xuLS1cbm1tL3N3YXBmaWxlLmM9MjgzMz1zdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcbi0tXG5tbS9zd2FwZmlsZS5jLTI5MjgtXHQgKiBNYWtlIHN1cmUgdGhhdCBmdXJ0aGVyIGNsZWFudXBzIGFmdGVyIHRyeV90b191bnVzZSgpIHJldHVybnMgaGFwcGVuXG5tbS9zd2FwZmlsZS5jOjI5Mjk6XHQgKiBhZnRlciBzd2FwX3JhbmdlX2ZyZWUoKSByZWR1Y2VzIHNpLVx1MDAzZWludXNlX3BhZ2VzIHRvIDAuXG5tbS9zd2FwZmlsZS5jLTI5MzAtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU0NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gc29tZSBrZXkgc3ltYm9scyBmb3IgdGhpcyBGb2N1c1N5bWJvbHMgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGB6c3dhcF9zdG9yZWAsIGB6c3dhcF9pbnZhbGlkYXRlYCwgYW5kIGBzd2FwX3JhbmdlX2ZyZWVgLiBBbHNvLCB0aGF0IGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgIGxvb2tzIGludGVyZXN0aW5nLCBhcyBtaWdodCBhbnkgcmVsYXRlZCB0byBgenN3YXBfbG9hZGAgZXRjLiBUaGUgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZXNlIHN5bWJvbHMgYXJlIG1vZGlmaWVkIGFuZCBub24tdWJpcXVpdG91cy4KCkZpcnN0LCBsZXQmIzM5O3MgZGV0ZXJtaW5lIGlmIGFueSBvZiB0aG9zZSBvcHRpb25zIGFyZSB1c2VkIGV2ZXJ5d2hlcmUuIFNvLCBhcmUgYW55IG9mIGB6c3dhcF9zdG9yZWAsIGB6c3dhcF9pbnZhbGlkYXRlYCwgYW5kIGBzd2FwX3JhbmdlX2ZyZWVgIHdpZGVseSB1c2VkIGFjcm9zcyB0aGUgY29kZWJhc2U/IFdhaXQsIGBzd2FwX3JhbmdlX2ZyZWVgIGlzIGRlY2xhcmVkIGBzdGF0aWNgIGluIGBtbS9zd2FwZmlsZS5jYC4gVGhhdCYjMzk7cyBhIGdvb2QgaW5pdGlhbCBzaWduLiBOb3csIHRoZSBrZXkgcXVlc3Rpb246IGlzIGl0IGlubGluZWQ/IEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb2RlIGFyb3VuZCB0aGUgYHN3YXBfcmFuZ2VfZnJlZWAgZGVmaW5pdGlvbiB3aXRoaW4gYG1tL3N3YXBmaWxlLmNgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMxMDpcdFx0fVxuMTMxMTpcdFx0YXRvbWljX2xvbmdfc3ViKG5yX2VudHJpZXMsIFx1MDAyNm5yX3N3YXBfcGFnZXMpO1xuMTMxMjpcdH1cbjEzMTM6XHRcbjEzMTQ6XHRzdGF0aWMgdm9pZCBzd2FwX3JhbmdlX2ZyZWUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcbjEzMTU6XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX2VudHJpZXMpXG4xMzE2Olx0e1xuMTMxNzpcdFx0dW5zaWduZWQgbG9uZyBlbmQgPSBvZmZzZXQgJiM0MzsgbnJfZW50cmllcyAtIDE7XG4xMzE4Olx0XHR2b2lkICgqc3dhcF9zbG90X2ZyZWVfbm90aWZ5KShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcpO1xuMTMxOTpcdFx0dW5zaWduZWQgaW50IGk7XG4xMzIwOlx0XG4xMzIxOlx0XHRpZiAoIXpzd2FwX25ldmVyX2VuYWJsZWQoKSkge1xuMTMyMjpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpJiM0MzsmIzQzOylcbjEzMjM6XHRcdFx0XHR6c3dhcF9pbnZhbGlkYXRlKHNpLVx1MDAzZXR5cGUsIG9mZnNldCAmIzQzOyBpKTtcbjEzMjQ6XHRcdH1cbjEzMjU6XHRcbjEzMjY6XHRcdGlmIChzaS1cdTAwM2VmbGFncyBcdTAwMjYgU1dQX0JMS0RFVilcbjEzMjc6XHRcdFx0c3dhcF9zbG90X2ZyZWVfbm90aWZ5ID1cbjEzMjg6XHRcdFx0XHRzaS1cdTAwM2ViZGV2LVx1MDAzZWJkX2Rpc2stXHUwMDNlZm9wcy1cdTAwM2Vzd2FwX3Nsb3RfZnJlZV9ub3RpZnk7XG4xMzI5Olx0XHRlbHNlXG4xMzMwOlx0XHRcdHN3YXBfc2xvdF9mcmVlX25vdGlmeSA9IE5VTEw7XG4xMzMxOlx0XHR3aGlsZSAob2Zmc2V0IFx1MDAzYz0gZW5kKSB7XG4xMzMyOlx0XHRcdGFyY2hfc3dhcF9pbnZhbGlkYXRlX3BhZ2Uoc2ktXHUwMDNldHlwZSwgb2Zmc2V0KTtcbjEzMzM6XHRcdFx0aWYgKHN3YXBfc2xvdF9mcmVlX25vdGlmeSlcbjEzMzQ6XHRcdFx0XHRzd2FwX3Nsb3RfZnJlZV9ub3RpZnkoc2ktXHUwMDNlYmRldiwgb2Zmc2V0KTtcbjEzMzU6XHRcdFx0b2Zmc2V0JiM0MzsmIzQzOztcbjEzMzY6XHRcdH1cbjEzMzc6XHRcbjEzMzg6XHRcdC8qXG4xMzM5Olx0XHQgKiBNYWtlIHN1cmUgdGhhdCB0cnlfdG9fdW51c2UoKSBvYnNlcnZlcyBzaS1cdTAwM2VpbnVzZV9wYWdlcyByZWFjaGluZyAwXG4xMzQwOlx0XHQgKiBvbmx5IGFmdGVyIHRoZSBhYm92ZSBjbGVhbnVwcyBhcmUgZG9uZS5cbjEzNDE6XHRcdCAqL1xuMTM0MjpcdFx0c21wX3dtYigpO1xuMTM0MzpcdFx0YXRvbWljX2xvbmdfYWRkKG5yX2VudHJpZXMsIFx1MDAyNm5yX3N3YXBfcGFnZXMpO1xuMTM0NDpcdFx0c3dhcF91c2FnZV9zdWIoc2ksIG5yX2VudHJpZXMpO1xuMTM0NTpcdH1cbjEzNDY6XHRcbjEzNDc6XHRzdGF0aWMgYm9vbCBnZXRfc3dhcF9kZXZpY2VfaW5mbyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXG4xMzQ4Olx0e1xuMTM0OTpcdFx0aWYgKCFwZXJjcHVfcmVmX3RyeWdldF9saXZlKFx1MDAyNnNpLVx1MDAzZXVzZXJzKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU4MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgaW4gRGVwdGgqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZmxvdyBzdXJyb3VuZGluZyBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYCBhbmQsIGJ5IGV4dGVuc2lvbiwgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHV0aWxpemUgYHN3YXBfcmFuZ2VfZnJlZWAuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgaWRlbnRpZnlpbmcgdGhlIGRpcmVjdCBjYWxsZXJzOyBpdCYjMzk7cyBhYm91dCB0cmFjaW5nIHRoZSAqd2h5KiBhbmQgdGhlICp3aGVuKi4gSSB3YW50IGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLiBJJiMzOTttIHRoaW5raW5nLi4uCgoqICAgKipNYXBwaW5nIHRoZSBDYWxsIEdyYXBoOioqIExldCYjMzk7cyB0cmFjZSBiYWNrIGZyb20gYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AuIFdoYXQgZnVuY3Rpb25zIGRpcmVjdGx5IGludm9rZSBpdD8gVGhlbiwgd2hhdCBjYWxsIGl0PyBBbmQgd2hhdCBkbyAqdGhleSogY2FsbD8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgY2FsbCBjaGFpbi4gVW5kZXJzdGFuZGluZyB0aGlzIGNoYWluIGlzIGNydWNpYWwuCiogICAqKkFsdGVybmF0aXZlIFBhdGhzOioqIEkgc2hvdWxkIHJlbWVtYmVyIG90aGVyIGNhbGxzIHRvIGBzd2FwX3JhbmdlX2ZyZWVgIGFzIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBtZXRob2RzIHRoYXQgYXJlIHVzZWQgdG8gZnJlZSB0aGUgc3dhcCByYW5nZS4KKiAgICoqQ29udGV4dHVhbCBBbmFseXNpczoqKiBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGVzZSBjYWxscy4gV2hhdCYjMzk7cyB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbSB3aGVuIHRoZXNlIGZyZWVpbmcgb3BlcmF0aW9ucyBhcmUgdHJpZ2dlcmVkPyBJcyBpdCBkdXJpbmcgcGFnZSByZWNsYWltLCBwcm9jZXNzIHRlcm1pbmF0aW9uLCBmaWxlc3lzdGVtIHVubW91bnQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgY29udGV4dCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpc3N1ZXMuCiogICAqKkRhdGEgU3RydWN0dXJlczoqKiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQ/IFN3YXAgY2FjaGUgZW50cmllcywgcGFnZSB0YWJsZSBlbnRyaWVzLCBtYXBwaW5ncy4uLiBob3cgZG8gdGhlc2UgaW50ZXJhY3Qgd2l0aCB0aGUgZnVuY3Rpb25zIEkmIzM5O20gaW52ZXN0aWdhdGluZz8gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBtb2RpZmllZCBwcmlvciB0byBgc3dhcF9yYW5nZV9mcmVlYCBjYWxscy4KKiAgICoqUG90ZW50aWFsIFByb2JsZW0gQXJlYXM6KiogSSYjMzk7bSBtZW50YWxseSBmbGFnZ2luZyBwb3RlbnRpYWwgdHJvdWJsZSBzcG90cy4gQXJlIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbnMgcG9zc2libGU/IElzIHRoZXJlIGxvY2tpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGNvbnRlbnRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBjb3JydXB0aW9uIHNjZW5hcmlvcyB0aGF0IG1pZ2h0IGJlIHRyaWdnZXJlZCBieSB0aGVzZSBmcmVlcz8gVGhpbmtpbmcgb2YgcG90ZW50aWFsIHByb2JsZW1zICpub3cqIHdpbGwgbWFrZSBsYXRlciBkZWJ1Z2dpbmcgZmFzdGVyLgoqICAgKipUb29scyBhbmQgVGVjaG5pcXVlczoqKiBJIG5lZWQgdG8gY29uc2lkZXIgd2hhdCB0b29scyBJJiMzOTtsbCB1c2UuIGBnZGJgLCBvZiBjb3Vyc2UsIGJ1dCBhbHNvIG1heWJlIGBwZXJmYCB0byBwcm9maWxlIGFuZCBzZWUgaWYgdGhlcmUgYXJlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBpbiB0aGUgY29kZS4gSSBtaWdodCB3YW50IHRvIGFkZCBzb21lIGluc3RydW1lbnRhdGlvbiB0byBsb2cgdGhlc2UgY2FsbHMgYW5kIHVuZGVyc3RhbmQgdGhlIHBhcmFtZXRlcnMgYmVpbmcgcGFzc2VkLgoKTXkgZ29hbCBpcyB0byBkZXZlbG9wIGEgZGVlcCwgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBzd2FwIGZyZWVpbmcgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmQgb3B0aW1pemF0aW9uLCBidWcgZml4aW5nLCBvciBzaW1wbHkgZ2FpbmluZyBhIGJldHRlciBncmFzcCBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwLmg9MjQ4PXZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuLS1cbm1tL3N3YXAuaC0yNTAtLyogRm9yIGludGVybmFsIHVzZSAqL1xubW0vc3dhcC5oOjI1MTpleHRlcm4gdm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxubW0vc3dhcC5oLTI1Mi1cdFx0XHRcdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MjU3PXN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMjkyLVx0aWYgKCFmb2xpb19zd2FwcGVkKSB7XG5tbS9zd2FwX3N0YXRlLmM6MjkzOlx0XHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9zdGFydCwgbnJfcGFnZXMpO1xubW0vc3dhcF9zdGF0ZS5jLTI5NC1cdH0gZWxzZSBpZiAobmVlZF9mcmVlKSB7XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTI5Ny1cdFx0XHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpKSlcbm1tL3N3YXBfc3RhdGUuYzoyOTg6XHRcdFx0XHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9vZmYsIDEpO1xubW0vc3dhcF9zdGF0ZS5jLTI5OS1cdFx0fSB3aGlsZSAoJiM0MzsmIzQzO2NpX29mZiBcdTAwM2MgY2lfZW5kKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE2MjItXHRcdGlmIChjaV9iYXRjaCAhPSAtMSkge1xubW0vc3dhcGZpbGUuYzoxNjIzOlx0XHRcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX2JhdGNoLCBjaV9vZmYgLSBjaV9iYXRjaCk7XG5tbS9zd2FwZmlsZS5jLTE2MjQtXHRcdFx0Y2lfYmF0Y2ggPSAtMTtcbi0tXG5tbS9zd2FwZmlsZS5jLTE2MjgtXHRpZiAoY2lfYmF0Y2ggIT0gLTEpXG5tbS9zd2FwZmlsZS5jOjE2Mjk6XHRcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX2JhdGNoLCBjaV9vZmYgLSBjaV9iYXRjaCk7XG5tbS9zd2FwZmlsZS5jLTE2MzAtXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE4OTk9c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5tbS9zd2FwZmlsZS5jLTE5MzEtICovXG5tbS9zd2FwZmlsZS5jOjE5MzI6dm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxubW0vc3dhcGZpbGUuYy0xOTMzLVx0XHRcdFx0IHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcGZpbGUuYz0yMjE0PXZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxubW0vc3dhcGZpbGUuYy0yMjI4LVx0aWYgKCFzd3BfdGJfaXNfZm9saW8oX19zd2FwX3RhYmxlX2dldChjaSwgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUikpKVxubW0vc3dhcGZpbGUuYzoyMjI5Olx0XHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBvZmZzZXQgJSBTV0FQRklMRV9DTFVTVEVSLCAxKTtcbm1tL3N3YXBmaWxlLmMtMjIzMC1cdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkzMwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFpzd2FwIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB6c3dhcGAgdGhpbmcuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29yZSBmdW5jdGlvbnMuIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgenN3YXBfc3RvcmVgIGFuZCBgenN3YXBfaW52YWxpZGF0ZWAuIExvb2tzIGxpa2UgYHpzd2FwX3N0b3JlYCwgd2hpY2ggbGl2ZXMgaW4gYG1tL3pzd2FwLmNgLCBpcyBhbiBleHBvcnRlZCBmdW5jdGlvbiDigJMgYSBjcnVjaWFsIHBpZWNlLCBhcyBleHBlY3RlZCwgaXQmIzM5O3MgYSBgYm9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKWAuIEdvb2QuIEFuZCBgenN3YXBfaW52YWxpZGF0ZWAgaXMgYWxzbyB0aGVyZTogYSBgdm9pZCB6c3dhcF9pbnZhbGlkYXRlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldClgLiBBbHNvIGluIHRoYXQgZmlsZSBpcyBgc3dhcF9yYW5nZV9mcmVlYCwgdGhvdWdoIHRoYXQmIzM5O3Mgc3RhdGljLiBGaW5lLCBub3cgbGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgaXMgZ29pbmcgb24uCgpOb3csIGxldCYjMzk7cyBleHBsb3JlIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBvcHRpb25zIGZvciB0aGlzIGZlYXR1cmUuIFBlZWtpbmcgYXQgYG1tL0tjb25maWdgLCBJIHNlZSB0aGF0IGBDT05GSUdfWlNXQVBgIGlzIGRlcGVuZGVudCBvbiBgQ09ORklHX1NXQVBgLiBNYWtlcyBzZW5zZS4gQW5kIGl0IGxvb2tzIGxpa2UgYFpTV0FQYCBpcyBicmluZ2luZyBpbiBgQ1JZUFRPYCBhbmQgYFpTTUFMTE9DYC4gT2theSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgZm9yIGFueSBvdGhlciBpbXBsaWNpdCBvciByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBkbyBhIGdyZXAgZm9yIGBDT05GSUdfWlNXQVBgIGFjcm9zcyBLY29uZmlnIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZy4qWlNXQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcbi0tXG5tbS9LY29uZmlnLTIxLVxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcbm1tL0tjb25maWctMjMtXHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTM0LVxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9NTk9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy03Ni1cbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG5tbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWZsYXRlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04Mi1cbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cbm1tL0tjb25maWctODQtXHRib29sIFwmIzM0O0xaT1wmIzM0O1xuLS1cbm1tL0tjb25maWctODgtXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXG5tbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0LVxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxubW0vS2NvbmZpZy05Ni1cdGJvb2wgXCYjMzQ7TFo0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDAtXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXG5tbS9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7TFo0SENcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwNi1cbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxubW0vS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2Vcbm1tL0tjb25maWctMTEzLVxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk3NgoJCQkJCQkJb3V0cHV0OiAxMzYKCQkJCQkJCXRob3VnaHRzOiAyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBDb25maWd1cmF0aW9uIERlY2lzaW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHNldHRpbmcgdXAgYSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24uIEZpcnN0LCB0aGUga2V5IHNldHRpbmdzIHRvIGVuYWJsZSBhcmUgYFNXQVBgIGFuZCBgWlNXQVBgLiBUaG9zZSBhcmUgZnVuZGFtZW50YWwuIE5vdywgSSBuZWVkIHRvIGRlZmluZSB0aGUgZm9jdXMgc3ltYm9sczsgdGhlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gdGFyZ2V0IHNwZWNpZmljYWxseS4gRnJvbSB0aGUgcHJvbXB0LCBpdCBzZWVtcyBsaWtlIHRoZXNlIGFyZSB0aGUgY3JpdGljYWwgb25lcyBmb3IgdGhpcyBzY2VuYXJpbzogYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2ludmFsaWRhdGVgLCBgc3dhcF9yYW5nZV9mcmVlYCwgYW5kIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLgoKTGV0IG1lIHJ1biB0aHJvdWdoIGV2ZXJ5dGhpbmcgb25lIG1vcmUgdGltZSB0byBtYWtlIHN1cmUgaXQgYWxsIGFsaWducyB3aXRoIHRoZSByZXF1aXJlbWVudHMuIEl0JiMzOTtzIG1hcmtlZCBhcyBgV29ydGhGdXp6aW5nOiB0cnVlYCwgd2hpY2ggaXMgZ29vZCBiZWNhdXNlIHRoaXMgdGFyZ2V0cyBib3RoIGBtbS96c3dhcC5jYCBhbmQgYG1tL3N3YXBmaWxlLmNgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIGl0JiMzOTtzIGRpcmVjdGx5IHRvdWNoaW5nIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCwgaW1wb3J0YW50bHksIGludmFsaWRhdGlvbiBwYXRocy4gVGhlIGNob3NlbiBgRm9jdXNTeW1ib2xzYCBhcmUgZGVmaW5pdGVseSBub3QgdWJpcXVpdG91c2x5IHVzZWQgd2l0aGluIHRoZSBjb2RlYmFzZSwgd2hpY2ggaXMgZ29vZCAtIHRhcmdldHMuIEkgaGF2ZSB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNldCB0byBleGFjdGx5IHdoYXQgdGhlIHByb21wdCBzcGVjaWZpZWQsIGBbJiMzNDtTV0FQJiMzNDssICYjMzQ7WlNXQVAmIzM0O11gLiBUaGUgcmVhc29uaW5nIHByb3ZpZGVkIGlzIGFsc28gY29uY2lzZSBhbmQgYWNjdXJhdGUuIEl0IGNvdmVycyB3aHkgdGhpcyBmdXp6aW5nIGlzIHdvcnRod2hpbGUgKHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBjYWNoZSBpbnZhbGlkYXRpb24gaGFuZGxpbmcgYW5kIGVhcmx5LWV4aXQgY2hlY2tzKSwgYW5kIGl0IGNvcnJlY3RseSBsaXN0cyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLgoKQWxyaWdodCwgc2VlbXMgc29saWQuIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgY29uZmlndXJhdGlvbi4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7enN3YXBfaW52YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtzd2FwX3JhbmdlX2ZyZWUmIzM0OywKICAgICYjMzQ7X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgenN3YXAgaW52YWxpZGF0aW9uIGludGVyZmFjZSBhbmQgYWRkcyBlYXJseS1leGl0IG9wdGltaXphdGlvbiBjaGVja3MgKHZpYSB6c3dhcF9uZXZlcl9lbmFibGVkKCkpIGluIHpzd2FwX3N0b3JlKCkgYW5kIHN3YXBfcmFuZ2VfZnJlZSgpLiBTaW5jZSB0aGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3dhcCBhbmQgY29tcHJlc3NlZCBjYWNoZSBsb2dpYyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7enN3YXBfaW52YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtzd2FwX3JhbmdlX2ZyZWUmIzM0OywKICAgICYjMzQ7X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgenN3YXAgaW52YWxpZGF0aW9uIGludGVyZmFjZSBhbmQgYWRkcyBlYXJseS1leGl0IG9wdGltaXphdGlvbiBjaGVja3MgKHZpYSB6c3dhcF9uZXZlcl9lbmFibGVkKCkpIGluIHpzd2FwX3N0b3JlKCkgYW5kIHN3YXBfcmFuZ2VfZnJlZSgpLiBTaW5jZSB0aGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3dhcCBhbmQgY29tcHJlc3NlZCBjYWNoZSBsb2dpYyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHpzd2FwIGhlbHBlciBmdW5jdGlvbnMgKGB6c3dhcF9pbnZhbGlkYXRlYCBhbmQgYHpzd2FwX3RyZWVgKSB0byBwYXNzIHR5cGUgYW5kIG9mZnNldCBkaXJlY3RseSByYXRoZXIgdGhhbiBwYWNraW5nL3VucGFja2luZyBgc3dwX2VudHJ5X3RgLCBhZGRzIGVhcmx5LWV4aXQgY2hlY2tzIHVzaW5nIGB6c3dhcF9uZXZlcl9lbmFibGVkKClgLCBhbmQgc2ltcGxpZmllcyBlbnRyeSBjbGVhbnVwIGluIGB6c3dhcF9zdG9yZSgpYC5cblxuTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFBvdGVudGlhbCBpc3N1ZXMgcmVsYXRpbmcgdG8genN3YXAgdHJlZSBpbmRleGluZyBvciBlbnRyeSBsaWZldGltZXMgZmFsbCB1bmRlciBtZW1vcnkgc2FmZXR5IC8gY29uY3VycmVuY3kgY29uY2VybnMgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycy4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzI3MDY4NjlmMTYyMGQxMjRhOWM3Yzk3Yjc4Y2QxZjNhMjk1ODcxMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDExOjIxOjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oCmluZGV4IDMwYzE5M2ExMjA3ZTEuLjQ2M2JkZWU1YzFlMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmgKQEAgLTI3LDcgJiM0MzsyNyw3IEBAIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUgewogdW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKTsKIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbyk7CiBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKLXZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApOwomIzQzO3ZvaWQgenN3YXBfaW52YWxpZGF0ZShpbnQgdHlwZSwgcGdvZmZfdCBvZmZzZXQpOwogaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CiB2b2lkIHpzd2FwX3N3YXBvZmYoaW50IHR5cGUpOwogdm9pZCB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKQEAgLTQ5LDcgJiM0Mzs0OSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbykKIAlyZXR1cm4gLUVOT0VOVDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKSB7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9pbnZhbGlkYXRlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldCkge30KIHN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDA1ZDM0MDgzOTZmOTguLjUwNTU5MjA1MTkyNDMgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtMTMxOCw4ICYjNDM7MTMxOCwxMCBAQCBzdGF0aWMgdm9pZCBzd2FwX3JhbmdlX2ZyZWUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKIAl2b2lkICgqc3dhcF9zbG90X2ZyZWVfbm90aWZ5KShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcpOwogCXVuc2lnbmVkIGludCBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KQotCQl6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeShzaS0mZ3Q7dHlwZSwgb2Zmc2V0ICYjNDM7IGkpKTsKJiM0MzsJaWYgKCF6c3dhcF9uZXZlcl9lbmFibGVkKCkpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBucl9lbnRyaWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQl6c3dhcF9pbnZhbGlkYXRlKHNpLSZndDt0eXBlLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CX0KIAogCWlmIChzaS0mZ3Q7ZmxhZ3MgJmFtcDsgU1dQX0JMS0RFVikKIAkJc3dhcF9zbG90X2ZyZWVfbm90aWZ5ID0KZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IGExMmI2NDUyYTIyNTEuLjYxOTdhYTcxZTMzYzkgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMjI4LDEwICYjNDM7MjI4LDE1IEBAIHN0YXRpYyBib29sIHpzd2FwX2hhc19wb29sOwogLyogT25lIHN3YXAgYWRkcmVzcyBzcGFjZSBmb3IgZWFjaCA2NE0gc3dhcCBzcGFjZSAqLwogI2RlZmluZSBaU1dBUF9BRERSRVNTX1NQQUNFX1NISUZUIDE0CiAjZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfUEFHRVMgKDEgJmx0OyZsdDsgWlNXQVBfQUREUkVTU19TUEFDRV9TSElGVCkKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCB4YXJyYXkgKnpzd2FwX3RyZWUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KQomIzQzO3sKJiM0MzsJcmV0dXJuICZhbXA7enN3YXBfdHJlZXNbdHlwZV1bb2Zmc2V0ICZndDsmZ3Q7IFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlRdOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHhhcnJheSAqc3dhcF96c3dhcF90cmVlKHN3cF9lbnRyeV90IHN3cCkKIHsKLQlyZXR1cm4gJmFtcDt6c3dhcF90cmVlc1tzd3BfdHlwZShzd3ApXVtzd3Bfb2Zmc2V0KHN3cCkKLQkJJmd0OyZndDsgWlNXQVBfQUREUkVTU19TUEFDRV9TSElGVF07CiYjNDM7CXJldHVybiB6c3dhcF90cmVlKHN3cF90eXBlKHN3cCksIHN3cF9vZmZzZXQoc3dwKSk7CiB9CiAKICNkZWZpbmUgenN3YXBfcG9vbF9kZWJ1Zyhtc2csIHApCQkJXApAQCAtMTQ4Nyw2ICYjNDM7MTQ5Miw5IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbykKIAlWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7CiAJVk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpOwogCiYjNDM7CWlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJaWYgKCF6c3dhcF9lbmFibGVkKQogCQlnb3RvIGNoZWNrX29sZDsKIApAQCAtMTU0NCwxNSAmIzQzOzE1NTIsOSBAQCBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJaWYgKCFyZXQpIHsKIAkJdW5zaWduZWQgdHlwZSA9IHN3cF90eXBlKHN3cCk7CiAJCXBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApOwotCQlzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5OwotCQlzdHJ1Y3QgeGFycmF5ICp0cmVlOwotCi0JCWZvciAoaW5kZXggPSAwOyBpbmRleCAmbHQ7IG5yX3BhZ2VzOyAmIzQzOyYjNDM7aW5kZXgpIHsKLQkJCXRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoc3dwX2VudHJ5KHR5cGUsIG9mZnNldCAmIzQzOyBpbmRleCkpOwotCQkJZW50cnkgPSB4YV9lcmFzZSh0cmVlLCBvZmZzZXQgJiM0MzsgaW5kZXgpOwotCQkJaWYgKGVudHJ5KQotCQkJCXpzd2FwX2VudHJ5X2ZyZWUoZW50cnkpOwotCQl9CiYjNDM7CiYjNDM7CQlmb3IgKGluZGV4ID0gMDsgaW5kZXggJmx0OyBucl9wYWdlczsgJiM0MzsmIzQzO2luZGV4KQomIzQzOwkJCXpzd2FwX2ludmFsaWRhdGUodHlwZSwgb2Zmc2V0ICYjNDM7IGluZGV4KTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTY1OSwxMCAmIzQzOzE2NjEsOSBAQCBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAwOwogfQogCi12b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKQomIzQzO3ZvaWQgenN3YXBfaW52YWxpZGF0ZShpbnQgdHlwZSwgcGdvZmZfdCBvZmZzZXQpCiB7Ci0JcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7Ci0Jc3RydWN0IHhhcnJheSAqdHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3ApOwomIzQzOwlzdHJ1Y3QgeGFycmF5ICp0cmVlID0genN3YXBfdHJlZSh0eXBlLCBvZmZzZXQpOwogCXN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnk7CiAKIAlpZiAoeGFfZW1wdHkodHJlZSkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjgyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWnN3YXAgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEV4cG9zdXJlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIGl0IGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIHNjcnV0aW55LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgaW4gZGV0YWlsLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gcmV2b2x2ZXMgYXJvdW5kIGB6c3dhcF9pbnZhbGlkYXRlYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHN3YXAgaW5mcmFzdHJ1Y3R1cmUuCgpUaGUgc2lnbmlmaWNhbnQgY2hhbmdlcyBhcmUgaW4gdGhlIGB6c3dhcC5oYCBoZWFkZXIsIHdoZXJlIHRoZSBzaWduYXR1cmUgb2YgYHpzd2FwX2ludmFsaWRhdGVgIGhhcyBiZWVuIGFsdGVyZWQgZnJvbSB0YWtpbmcgYSBgc3dwX2VudHJ5X3RgIHRvIHRha2luZyBgaW50IHR5cGVgIGFuZCBgcGdvZmZfdCBvZmZzZXRgLiBUaGlzIGlzIGFsc28gdHJ1ZSBmb3IgdGhlIHN0YXRpYyBpbmxpbmUgc3R1Yi4gVGhlIHJlYWwgd29yayBpcyBoYXBwZW5pbmcgaW4gYG1tL3N3YXBmaWxlLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBzd2FwX3JhbmdlX2ZyZWVgLiBUaGUgb3JpZ2luYWwgY29kZSBzaW1wbHkgaXRlcmF0ZWQgYW5kIGNhbGxlZCBgenN3YXBfaW52YWxpZGF0ZWAgd2l0aCBhIGNhbGN1bGF0ZWQgYHN3cF9lbnRyeV90YC4gTm93LCBhIGNoZWNrIGZvciBgenN3YXBfbmV2ZXJfZW5hYmxlZCgpYCBoYXMgYmVlbiBpbnRyb2R1Y2VkLiBJZiB6c3dhcCBpcyBlbmFibGVkLCB0aGUgY29kZSBpdGVyYXRlcyBhbmQgbm93IGNhbGxzIGB6c3dhcF9pbnZhbGlkYXRlYCB3aXRoIHRoZSBpbmRpdmlkdWFsIGB0eXBlYCBhbmQgYG9mZnNldGAgdmFsdWVzLiBJdCBsb29rcyBsaWtlIHRoaXMgYWRkcyBhIGNvbmRpdGlvbmFsIGJsb2NrIHdoZXJlIGB6c3dhcF9pbnZhbGlkYXRlYCBpcyBvbmx5IGV4ZWN1dGVkIGlmIHpzd2FwIGlzIGFjdHVhbGx5IGVuYWJsZWQuCgpUaGUgcGF0Y2ggdGhlbiBtb3ZlcyBvbiB0byBgbW0venN3YXAuY2AuIEhlcmUsIHRoZSBmdW5jdGlvbiBgenN3YXBfdHJlZWAgaXMgYmVpbmcgaW50cm9kdWNlZCwgd2hpY2ggYXBwZWFycyB0byBiZSBhIGhlbHBlciB0byBnZXQgYCZhbXA7enN3YXBfdHJlZXNbdHlwZV1bb2Zmc2V0ICZndDsmZ3Q7IFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlRdYC4gYHN3YXBfenN3YXBfdHJlZWAgaXMgbW9kaWZpZWQgdG8gdXNlIHRoaXMgbmV3IGhlbHBlci4gSXQgYWxzbyBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGFuIGVhcmx5IHJldHVybiBpbiBgenN3YXBfc3RvcmVgIGlmIGB6c3dhcF9uZXZlcl9lbmFibGVkKClgLiBGdXJ0aGVybW9yZSwgaW4gdGhlIGVycm9yL2ZhbGxiYWNrIHBhdGggb2YgYHpzd2FwX3N0b3JlYCwgaXQmIzM5O3MgcmVwbGFjaW5nIGlubGluZSBsb29wcyBmb3IgZXJhc2luZyBlbnRyaWVzIHdpdGggY2FsbHMgdG8gYHpzd2FwX2ludmFsaWRhdGVgIHdpdGggdGhlIG5ldyBzaWduYXR1cmUuIFRoZSBgenN3YXBfaW52YWxpZGF0ZWAgZnVuY3Rpb24gaXRzZWxmIGlzIGFsc28gbW9kaWZpZWQgdG8gdXNlIGB6c3dhcF90cmVlYCBhbmQgdGhlIG5ldyBmdW5jdGlvbiBzaWduYXR1cmUuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgenN3YXBfbmV2ZXJfZW5hYmxlZCgpYCBpcyBiZWluZyBjYWxsZWQgY29ycmVjdGx5LiBUbyBjb25maXJtIHRoYXQgdGhlcmUgYXJlIG5vIGdhcHMgaGVyZSBJIHdpbGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayB0aGUgcGxhY2VzIHdoZXJlIHRoaXMgaXMgYmVpbmcgY2FsbGVkIGFuZCBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIFRoZW4gSSB3aWxsIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBgenN3YXBfaW52YWxpZGF0ZWAgaXMgd29ya2luZyBjb3JyZWN0bHkgYWZ0ZXIgdGhlc2UgbW9kaWZpY2F0aW9ucy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgY2hhbmdlIGluIHNpZ25hdHVyZSBoYXNuJiMzOTt0IGludHJvZHVjZWQgYW55IGlzc3VlcyB3aXRoIGhvdyB0aGUgZGF0YSBpcyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9uZXZlcl9lbmFibGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvenN3YXAuaD0zNj1ib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6Mzc6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xuaW5jbHVkZS9saW51eC96c3dhcC5oLTM4LSNlbHNlXG4tLVxuaW5jbHVkZS9saW51eC96c3dhcC5oPTYyPXN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC96c3dhcC5oLTY2LVxuaW5jbHVkZS9saW51eC96c3dhcC5oOjY3OnN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNjgte1xuLS1cbm1tL21lbW9yeS5jPTQ3NTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDc3OS1cdCAqL1xubW0vbWVtb3J5LmM6NDc4MDpcdGlmICghenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxubW0vbWVtb3J5LmMtNDc4MS1cdFx0cmV0dXJuIDA7XG4tLVxubW0vc2htZW0uYz0yMjQyPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBfYWxsb2NfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9zaG1lbS5jLTIyNTEtXHRpZiAoKHZtZiBcdTAwMjZcdTAwMjYgdW5saWtlbHkodXNlcmZhdWx0ZmRfYXJtZWQodm1mLVx1MDAzZXZtYSkpKSB8fFxubW0vc2htZW0uYzoyMjUyOlx0ICAgICAhenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxubW0vc2htZW0uYy0yMjUzLVx0XHRvcmRlciA9IDA7XG4tLVxubW0vc3dhcGZpbGUuYz0xMzE0PXN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxuLS1cbm1tL3N3YXBmaWxlLmMtMTMyMC1cbm1tL3N3YXBmaWxlLmM6MTMyMTpcdGlmICghenN3YXBfbmV2ZXJfZW5hYmxlZCgpKSB7XG5tbS9zd2FwZmlsZS5jLTEzMjItXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KVxuLS1cbm1tL3pzd2FwLmM9MTI1PWJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKVxuLS1cbm1tL3pzd2FwLmMtMTI5LVxubW0venN3YXAuYzoxMzA6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG5tbS96c3dhcC5jLTEzMS17XG4tLVxubW0venN3YXAuYz0xNDgyPWJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTE0OTQtXG5tbS96c3dhcC5jOjE0OTU6XHRpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxubW0venN3YXAuYy0xNDk2LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0venN3YXAuYz0xNjA2PWludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy0xNjE1LVxubW0venN3YXAuYzoxNjE2Olx0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbm1tL3pzd2FwLmMtMTYxNy1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDExOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHpzd2FwX2ludmFsaWRhdGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBgenN3YXBfaW52YWxpZGF0ZWAgYWN0dWFsbHkgd29ya3MuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gdGhlIGBtbS96c3dhcC5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIHRoYXQgZnVuY3Rpb24uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBudWFuY2VzIG9mIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY29tcHJlc3NlZCBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnZhbGlkYXRpb24gcHJvY2VzcyB0aG9yb3VnaGx5LiBBcmUgd2UganVzdCBjbGVhcmluZyB0aGUgc3dhcCBlbnRyeSwgb3IgaXMgdGhlcmUgbW9yZSBpbnZvbHZlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgY29tcHJlc3NlZCBwYWdlcz8gSG93IGRvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aCBvdGhlciBvcGVyYXRpb25zIG9uIHRoYXQgcGFnZT8gSXMgdGhlcmUgYW55IGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2UgY2FjaGUsIG9yIGlzIGl0IGlzb2xhdGVkIHRvIHRoZSBzd2FwIGVudHJpZXM/IEkgbmVlZCB0byBsb29rIGF0IGFueSBsb2NrIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIHBhdHRlcm5zOyB0aGF0JiMzOTtzIGFsd2F5cyBhIGNyaXRpY2FsIGFyZWEgdG8gZXhhbWluZSBmb3IgY29ycmVjdG5lc3MuIEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gYHpzd2FwX2ludmFsaWRhdGVgIGFuZCBzZWUgaG93IHJlc2lsaWVudCB0aGUgc3lzdGVtIGlzIHdoZW4gc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIHRoZSBpbnZhbGlkYXRpb24sIHBlcmhhcHMgd2l0aCBhIGRhbWFnZWQgc3dhcCBlbnRyeSBvciBhIGhhcmR3YXJlIGlzc3VlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyBgenN3YXBfaW52YWxpZGF0ZWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHpzd2FwIGxpZmVjeWNsZSwgcGFydGljdWxhcmx5IHdpdGggcGFnZSByZWNsYWltIGFuZCB0aGUgd3JpdGViYWNrIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgaG93IG11Y2ggbWVtb3J5IGFuZCBvdmVyaGVhZCBpdCBoYXMuIEkgd2FudCB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBvcHRpbWl6YXRpb25zIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIGFuZCB3aGV0aGVyIGl0IGNhbiBjb250cmlidXRlIHRvIHN5c3RlbSBzbG93ZG93bi4gT2theSwgbGV0JiMzOTtzIGdldCBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2NTU6XHRcdCAqL1xuMTY1NjpcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4xNjU3Olx0XHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQpO1xuMTY1ODpcdFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XG4xNjU5Olx0XG4xNjYwOlx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuMTY2MTpcdFx0cmV0dXJuIDA7XG4xNjYyOlx0fVxuMTY2MzpcdFxuMTY2NDpcdHZvaWQgenN3YXBfaW52YWxpZGF0ZShpbnQgdHlwZSwgcGdvZmZfdCBvZmZzZXQpXG4xNjY1Olx0e1xuMTY2NjpcdFx0c3RydWN0IHhhcnJheSAqdHJlZSA9IHpzd2FwX3RyZWUodHlwZSwgb2Zmc2V0KTtcbjE2Njc6XHRcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnk7XG4xNjY4Olx0XG4xNjY5Olx0XHRpZiAoeGFfZW1wdHkodHJlZSkpXG4xNjcwOlx0XHRcdHJldHVybjtcbjE2NzE6XHRcbjE2NzI6XHRcdGVudHJ5ID0geGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcbjE2NzM6XHRcdGlmIChlbnRyeSlcbjE2NzQ6XHRcdFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XG4xNjc1Olx0fVxuMTY3NjpcdFxuMTY3NzpcdGludCB6c3dhcF9zd2Fwb24oaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4xNjc4Olx0e1xuMTY3OTpcdFx0c3RydWN0IHhhcnJheSAqdHJlZXMsICp0cmVlO1xuMTY4MDpcdFx0dW5zaWduZWQgaW50IG5yLCBpO1xuMTY4MTpcdFxuMTY4MjpcdFx0bnIgPSBESVZfUk9VTkRfVVAobnJfcGFnZXMsIFpTV0FQX0FERFJFU1NfU1BBQ0VfUEFHRVMpO1xuMTY4MzpcdFx0dHJlZXMgPSBrdnphbGxvY19vYmpzKCp0cmVlLCBucik7XG4xNjg0Olx0XHRpZiAoIXRyZWVzKSB7XG4xNjg1Olx0XHRcdHByX2VycihcJiMzNDthbGxvYyBmYWlsZWQsIHpzd2FwIGRpc2FibGVkIGZvciBzd2FwIHR5cGUgJWRcXG5cJiMzNDssIHR5cGUpO1xuMTY4NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE2ODc6XHRcdH1cbjE2ODg6XHRcbjE2ODk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yOyBpJiM0MzsmIzQzOylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg3NgoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiA1MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmV3IENvbmNlcm5zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGUgcGF0Y2gmIzM5O3MgY2hhbmdlczogSXQmIzM5O3MgYSByZWZhY3RvcmluZyBvZiBgenN3YXBfaW52YWxpZGF0ZWAgdG8gdXNlIGAodHlwZSwgb2Zmc2V0KWAgaW5zdGVhZCBvZiBgc3dwX2VudHJ5X3RgLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgYXZvaWRpbmcgdW5uZWNlc3Nhcnkgc3dwX2VudHJ5IGNyZWF0aW9uLiBUaGVyZSYjMzk7cyBhbHNvIHNvbWUgb3B0aW1pemF0aW9uIGluIGBzd2FwX3JhbmdlX2ZyZWVgIHJlbGF0ZWQgdG8gYHpzd2FwX25ldmVyX2VuYWJsZWQoKWAgYW5kIGEgc2ltaWxhciBvcHRpbWl6YXRpb24gYW5kIHNpbXBsaWZpY2F0aW9uIGluIGB6c3dhcF9zdG9yZWAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgS01TQU4gY29uY2VybnM/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuCgoqICAgKipVc2VyLXNwYWNlIGV4cG9zdXJlPyoqIE5vcGUuIE5vIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IG91dCwgYW5kIG5vdGhpbmcgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCiogICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNlPyoqIE5vLiBBbGwgdmFyaWFibGVzIGludm9sdmVkIGFyZSBlaXRoZXIgZnVuY3Rpb24gYXJndW1lbnRzLCB3ZWxsLWluaXRpYWxpemVkIGdsb2JhbHMsIG9yIGZsYWdzLiBObyByaXNrcyB0aGVyZS4KKiAgICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbj8qKiBEb2VzbiYjMzk7dCBzZWVtIHNvLiBObyBjb21wbGV4IHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWQgdG8gbGF0ZXIgdW5pbml0aWFsaXplZCByZWFkcy4KKiAgICoqQm91bmRzIGNoZWNrIHZ1bG5lcmFiaWxpdGllcz8qKiBOb3RoaW5nIHRoYXQgY291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGlzc3VlcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUga2luZHMgb2YgbWVtb3J5LXJlbGF0ZWQgZXJyb3JzIHRoYXQgKmNvdWxkKiBhcmlzZSBhcmU6IGFycmF5IGluZGV4aW5nIGludG8gYHpzd2FwX3RyZWVzYCwgbG9ja2luZyBvciBjb25jdXJyZW5jeSBwcm9ibGVtcywgb3IgdXNlLWFmdGVyLWZyZWUvbG9naWMgYnVncyB3aXRoaW4gdGhlIHpzd2FwIGxpZmVjeWNsZS4gQnV0IHRob3NlIGFyZSBwcmVjaXNlbHkgdGhlIHRoaW5ncyBLQVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaCEKCk15IGNvbmNsdXNpb246IHNpbmNlIEtBU0FOIGhhbmRsZXMgdGhlIHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzLCB0aGVyZSYjMzk7cyBubyBuZWVkIGZvciBLTVNBTiB0byBiZSBpbnZvbHZlZCBoZXJlLiBUaGlzIGFsbCBsb29rcyBnb29kLiBUaW1lIHRvIGZpbmFsaXplIHRoZSBhbmFseXNpcy4gSSYjMzk7bSBzZXR0aW5nIHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgenN3YXAgaGVscGVyIGZ1bmN0aW9ucyAoYHpzd2FwX2ludmFsaWRhdGVgIGFuZCBgenN3YXBfdHJlZWApIHRvIHBhc3MgdHlwZSBhbmQgb2Zmc2V0IGRpcmVjdGx5IHJhdGhlciB0aGFuIHBhY2tpbmcvdW5wYWNraW5nIGBzd3BfZW50cnlfdGAsIGFkZHMgZWFybHktZXhpdCBjaGVja3MgdXNpbmcgYHpzd2FwX25ldmVyX2VuYWJsZWQoKWAsIGFuZCBzaW1wbGlmaWVzIGVudHJ5IGNsZWFudXAgaW4gYHpzd2FwX3N0b3JlKClgLlxuXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gUG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byB6c3dhcCB0cmVlIGluZGV4aW5nIG9yIGVudHJ5IGxpZmV0aW1lcyBmYWxsIHVuZGVyIG1lbW9yeSBzYWZldHkgLyBjb25jdXJyZW5jeSBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgenN3YXAgaGVscGVyIGZ1bmN0aW9ucyAoYHpzd2FwX2ludmFsaWRhdGVgIGFuZCBgenN3YXBfdHJlZWApIHRvIHBhc3MgdHlwZSBhbmQgb2Zmc2V0IGRpcmVjdGx5IHJhdGhlciB0aGFuIHBhY2tpbmcvdW5wYWNraW5nIGBzd3BfZW50cnlfdGAsIGFkZHMgZWFybHktZXhpdCBjaGVja3MgdXNpbmcgYHpzd2FwX25ldmVyX2VuYWJsZWQoKWAsIGFuZCBzaW1wbGlmaWVzIGVudHJ5IGNsZWFudXAgaW4gYHpzd2FwX3N0b3JlKClgLlxuXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gUG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byB6c3dhcCB0cmVlIGluZGV4aW5nIG9yIGVudHJ5IGxpZmV0aW1lcyBmYWxsIHVuZGVyIG1lbW9yeSBzYWZldHkgLyBjb25jdXJyZW5jeSBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDExOjIxOjUzLjQ3Njk2NjU2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjkwOTUwNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienN3YXBfc3RvcmVcIixcbiAgICBcInpzd2FwX2ludmFsaWRhdGVcIixcbiAgICBcInN3YXBfcmFuZ2VfZnJlZVwiLFxuICAgIFwiX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgenN3YXAgaGVscGVyIGZ1bmN0aW9ucyAoYHpzd2FwX2ludmFsaWRhdGVgIGFuZCBgenN3YXBfdHJlZWApIHRvIHBhc3MgdHlwZSBhbmQgb2Zmc2V0IGRpcmVjdGx5IHJhdGhlciB0aGFuIHBhY2tpbmcvdW5wYWNraW5nIGBzd3BfZW50cnlfdGAsIGFkZHMgZWFybHktZXhpdCBjaGVja3MgdXNpbmcgYHpzd2FwX25ldmVyX2VuYWJsZWQoKWAsIGFuZCBzaW1wbGlmaWVzIGVudHJ5IGNsZWFudXAgaW4gYHpzd2FwX3N0b3JlKClgLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0aW5nIHRvIHpzd2FwIHRyZWUgaW5kZXhpbmcgb3IgZW50cnkgbGlmZXRpbWVzIGZhbGwgdW5kZXIgbWVtb3J5IHNhZmV0eSAvIGNvbmN1cnJlbmN5IGNvbmNlcm5zIGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMuIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHpzd2FwIGludmFsaWRhdGlvbiBpbnRlcmZhY2UgYW5kIGFkZHMgZWFybHktZXhpdCBvcHRpbWl6YXRpb24gY2hlY2tzICh2aWEgenN3YXBfbmV2ZXJfZW5hYmxlZCgpKSBpbiB6c3dhcF9zdG9yZSgpIGFuZCBzd2FwX3JhbmdlX2ZyZWUoKS4gU2luY2UgdGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN3YXAgYW5kIGNvbXByZXNzZWQgY2FjaGUgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjE6NTMuNDc2OTcxNzM2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk2NDQ5MzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzI3MDY4NjlmMTYyMGQxMjRhOWM3Yzk3Yjc4Y2QxZjNhMjk1ODcxM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAxMToyMTo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG5pbmRleCAzMGMxOTNhMTIwN2UxLi40NjNiZGVlNWMxZTE0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxcbkBAIC0yNyw3ICsyNyw3IEBAIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge1xcbiB1bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpO1xcbiBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tdm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cCk7XFxuK3ZvaWQgenN3YXBfaW52YWxpZGF0ZShpbnQgdHlwZSwgcGdvZmZfdCBvZmZzZXQpO1xcbiBpbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4gdm9pZCB6c3dhcF9zd2Fwb2ZmKGludCB0eXBlKTtcXG4gdm9pZCB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG5AQCAtNDksNyArNDksNyBAQCBzdGF0aWMgaW5saW5lIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdHJldHVybiAtRU5PRU5UO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApIHt9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9pbnZhbGlkYXRlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldCkge31cXG4gc3RhdGljIGlubGluZSBpbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xcbmluZGV4IDA1ZDM0MDgzOTZmOTguLjUwNTU5MjA1MTkyNDMgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xcbisrKyBiL21tL3N3YXBmaWxlLmNcXG5AQCAtMTMxOCw4ICsxMzE4LDEwIEBAIHN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbiBcXHR2b2lkICgqc3dhcF9zbG90X2ZyZWVfbm90aWZ5KShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcpO1xcbiBcXHR1bnNpZ25lZCBpbnQgaTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9lbnRyaWVzOyBpKyspXFxuLVxcdFxcdHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5KHNpLVxcdTAwM2V0eXBlLCBvZmZzZXQgKyBpKSk7XFxuK1xcdGlmICghenN3YXBfbmV2ZXJfZW5hYmxlZCgpKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9lbnRyaWVzOyBpKyspXFxuK1xcdFxcdFxcdHpzd2FwX2ludmFsaWRhdGUoc2ktXFx1MDAzZXR5cGUsIG9mZnNldCArIGkpO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoc2ktXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1dQX0JMS0RFVilcXG4gXFx0XFx0c3dhcF9zbG90X2ZyZWVfbm90aWZ5ID1cXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcXG5pbmRleCBhMTJiNjQ1MmEyMjUxLi42MTk3YWE3MWUzM2M5IDEwMDY0NFxcbi0tLSBhL21tL3pzd2FwLmNcXG4rKysgYi9tbS96c3dhcC5jXFxuQEAgLTIyOCwxMCArMjI4LDE1IEBAIHN0YXRpYyBib29sIHpzd2FwX2hhc19wb29sO1xcbiAvKiBPbmUgc3dhcCBhZGRyZXNzIHNwYWNlIGZvciBlYWNoIDY0TSBzd2FwIHNwYWNlICovXFxuICNkZWZpbmUgWlNXQVBfQUREUkVTU19TUEFDRV9TSElGVCAxNFxcbiAjZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfUEFHRVMgKDEgXFx1MDAzY1xcdTAwM2MgWlNXQVBfQUREUkVTU19TUEFDRV9TSElGVClcXG4rXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhhcnJheSAqenN3YXBfdHJlZShpbnQgdHlwZSwgcGdvZmZfdCBvZmZzZXQpXFxuK3tcXG4rXFx0cmV0dXJuIFxcdTAwMjZ6c3dhcF90cmVlc1t0eXBlXVtvZmZzZXQgXFx1MDAzZVxcdTAwM2UgWlNXQVBfQUREUkVTU19TUEFDRV9TSElGVF07XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHhhcnJheSAqc3dhcF96c3dhcF90cmVlKHN3cF9lbnRyeV90IHN3cClcXG4ge1xcbi1cXHRyZXR1cm4gXFx1MDAyNnpzd2FwX3RyZWVzW3N3cF90eXBlKHN3cCldW3N3cF9vZmZzZXQoc3dwKVxcbi1cXHRcXHRcXHUwMDNlXFx1MDAzZSBaU1dBUF9BRERSRVNTX1NQQUNFX1NISUZUXTtcXG4rXFx0cmV0dXJuIHpzd2FwX3RyZWUoc3dwX3R5cGUoc3dwKSwgc3dwX29mZnNldChzd3ApKTtcXG4gfVxcbiBcXG4gI2RlZmluZSB6c3dhcF9wb29sX2RlYnVnKG1zZywgcClcXHRcXHRcXHRcXFxcXFxuQEAgLTE0ODcsNiArMTQ5Miw5IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpO1xcbiBcXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSk7XFxuIFxcbitcXHRpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRpZiAoIXpzd2FwX2VuYWJsZWQpXFxuIFxcdFxcdGdvdG8gY2hlY2tfb2xkO1xcbiBcXG5AQCAtMTU0NCwxNSArMTU1Miw5IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0aWYgKCFyZXQpIHtcXG4gXFx0XFx0dW5zaWduZWQgdHlwZSA9IHN3cF90eXBlKHN3cCk7XFxuIFxcdFxcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xcbi1cXHRcXHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5O1xcbi1cXHRcXHRzdHJ1Y3QgeGFycmF5ICp0cmVlO1xcbi1cXG4tXFx0XFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFxcdTAwM2MgbnJfcGFnZXM7ICsraW5kZXgpIHtcXG4tXFx0XFx0XFx0dHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3BfZW50cnkodHlwZSwgb2Zmc2V0ICsgaW5kZXgpKTtcXG4tXFx0XFx0XFx0ZW50cnkgPSB4YV9lcmFzZSh0cmVlLCBvZmZzZXQgKyBpbmRleCk7XFxuLVxcdFxcdFxcdGlmIChlbnRyeSlcXG4tXFx0XFx0XFx0XFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XFxuLVxcdFxcdH1cXG4rXFxuK1xcdFxcdGZvciAoaW5kZXggPSAwOyBpbmRleCBcXHUwMDNjIG5yX3BhZ2VzOyArK2luZGV4KVxcbitcXHRcXHRcXHR6c3dhcF9pbnZhbGlkYXRlKHR5cGUsIG9mZnNldCArIGluZGV4KTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5AQCAtMTY1OSwxMCArMTY2MSw5IEBAIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi12b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKVxcbit2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KVxcbiB7XFxuLVxcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xcbi1cXHRzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKHN3cCk7XFxuK1xcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSB6c3dhcF90cmVlKHR5cGUsIG9mZnNldCk7XFxuIFxcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnk7XFxuIFxcbiBcXHRpZiAoeGFfZW1wdHkodHJlZSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDExOjIxOjU1LjA3NDAyOTIzNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzY0NzE1Mjg1NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwienN3YXBfaW52YWxpZGF0ZVwiLFxuICAgIFwic3dhcF9yYW5nZV9mcmVlXCIsXG4gICAgXCJfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHpzd2FwIGludmFsaWRhdGlvbiBpbnRlcmZhY2UgYW5kIGFkZHMgZWFybHktZXhpdCBvcHRpbWl6YXRpb24gY2hlY2tzICh2aWEgenN3YXBfbmV2ZXJfZW5hYmxlZCgpKSBpbiB6c3dhcF9zdG9yZSgpIGFuZCBzd2FwX3JhbmdlX2ZyZWUoKS4gU2luY2UgdGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN3YXAgYW5kIGNvbXByZXNzZWQgY2FjaGUgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMjcwNjg2OWYxNjIwZDEyNGE5YzdjOTdiNzhjZDFmM2EyOTU4NzEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTE6MjE6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbmluZGV4IDMwYzE5M2ExMjA3ZTEuLjQ2M2JkZWU1YzFlMTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuQEAgLTI3LDcgKzI3LDcgQEAgc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7XG4gdW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKTtcbiBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApO1xuK3ZvaWQgenN3YXBfaW52YWxpZGF0ZShpbnQgdHlwZSwgcGdvZmZfdCBvZmZzZXQpO1xuIGludCB6c3dhcF9zd2Fwb24oaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSk7XG4gdm9pZCB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAtRU5PRU5UO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApIHt9XG4rc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggMDVkMzQwODM5NmY5OC4uNTA1NTkyMDUxOTI0MyAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xMzE4LDggKzEzMTgsMTAgQEAgc3RhdGljIHZvaWQgc3dhcF9yYW5nZV9mcmVlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXG4gXHR2b2lkICgqc3dhcF9zbG90X2ZyZWVfbm90aWZ5KShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcpO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpKyspXG4tXHRcdHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5KHNpLVx1MDAzZXR5cGUsIG9mZnNldCArIGkpKTtcbitcdGlmICghenN3YXBfbmV2ZXJfZW5hYmxlZCgpKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2VudHJpZXM7IGkrKylcbitcdFx0XHR6c3dhcF9pbnZhbGlkYXRlKHNpLVx1MDAzZXR5cGUsIG9mZnNldCArIGkpO1xuK1x0fVxuIFxuIFx0aWYgKHNpLVx1MDAzZWZsYWdzIFx1MDAyNiBTV1BfQkxLREVWKVxuIFx0XHRzd2FwX3Nsb3RfZnJlZV9ub3RpZnkgPVxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBhMTJiNjQ1MmEyMjUxLi42MTk3YWE3MWUzM2M5IDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTIyOCwxMCArMjI4LDE1IEBAIHN0YXRpYyBib29sIHpzd2FwX2hhc19wb29sO1xuIC8qIE9uZSBzd2FwIGFkZHJlc3Mgc3BhY2UgZm9yIGVhY2ggNjRNIHN3YXAgc3BhY2UgKi9cbiAjZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlQgMTRcbiAjZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfUEFHRVMgKDEgXHUwMDNjXHUwMDNjIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlQpXG4rXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgeGFycmF5ICp6c3dhcF90cmVlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldClcbit7XG4rXHRyZXR1cm4gXHUwMDI2enN3YXBfdHJlZXNbdHlwZV1bb2Zmc2V0IFx1MDAzZVx1MDAzZSBaU1dBUF9BRERSRVNTX1NQQUNFX1NISUZUXTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgeGFycmF5ICpzd2FwX3pzd2FwX3RyZWUoc3dwX2VudHJ5X3Qgc3dwKVxuIHtcbi1cdHJldHVybiBcdTAwMjZ6c3dhcF90cmVlc1tzd3BfdHlwZShzd3ApXVtzd3Bfb2Zmc2V0KHN3cClcbi1cdFx0XHUwMDNlXHUwMDNlIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlRdO1xuK1x0cmV0dXJuIHpzd2FwX3RyZWUoc3dwX3R5cGUoc3dwKSwgc3dwX29mZnNldChzd3ApKTtcbiB9XG4gXG4gI2RlZmluZSB6c3dhcF9wb29sX2RlYnVnKG1zZywgcClcdFx0XHRcXFxuQEAgLTE0ODcsNiArMTQ5Miw5IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcbiBcdFZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKTtcbiBcbitcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGlmICghenN3YXBfZW5hYmxlZClcbiBcdFx0Z290byBjaGVja19vbGQ7XG4gXG5AQCAtMTU0NCwxNSArMTU1Miw5IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmICghcmV0KSB7XG4gXHRcdHVuc2lnbmVkIHR5cGUgPSBzd3BfdHlwZShzd3ApO1xuIFx0XHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbi1cdFx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeTtcbi1cdFx0c3RydWN0IHhhcnJheSAqdHJlZTtcbi1cbi1cdFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBucl9wYWdlczsgKytpbmRleCkge1xuLVx0XHRcdHRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoc3dwX2VudHJ5KHR5cGUsIG9mZnNldCArIGluZGV4KSk7XG4tXHRcdFx0ZW50cnkgPSB4YV9lcmFzZSh0cmVlLCBvZmZzZXQgKyBpbmRleCk7XG4tXHRcdFx0aWYgKGVudHJ5KVxuLVx0XHRcdFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XG4tXHRcdH1cbitcbitcdFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBucl9wYWdlczsgKytpbmRleClcbitcdFx0XHR6c3dhcF9pbnZhbGlkYXRlKHR5cGUsIG9mZnNldCArIGluZGV4KTtcbiBcdH1cbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMTY1OSwxMCArMTY2MSw5IEBAIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tdm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cClcbit2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KVxuIHtcbi1cdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xuLVx0c3RydWN0IHhhcnJheSAqdHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3ApO1xuK1x0c3RydWN0IHhhcnJheSAqdHJlZSA9IHpzd2FwX3RyZWUodHlwZSwgb2Zmc2V0KTtcbiBcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnk7XG4gXG4gXHRpZiAoeGFfZW1wdHkodHJlZSkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMToyMTo1NS4wNzQwMzA0NTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTg1MzY0MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBSZWxhdGVkIHRvIFpzd2FwKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGxvb2tzIGludGVyZXN0aW5nOyBpdCdzIHRvdWNoaW5nIHNvbWUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGB6c3dhcGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcy5cblxuRmlyc3QsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBzcGVjaWZpY3MuIFRoZSBwYXRjaCBpbXBhY3RzIGBpbmNsdWRlL2xpbnV4L3pzd2FwLmhgLCBgbW0vc3dhcGZpbGUuY2AsIGFuZCBgbW0venN3YXAuY2AuIEFscmVhZHksIEknbSBzZWVpbmcgYSBzaWduYXR1cmUgY2hhbmdlIGluIGB6c3dhcF9pbnZhbGlkYXRlKClgLCB3aGljaCBpcyBhIGtleSBmdW5jdGlvbiBpbiB6c3dhcCBvcGVyYXRpb25zLiBJdCBhcHBlYXJzIHRvIG5vdyB0YWtlIGEgdHlwZSBhbmQgb2Zmc2V0LiBFeGFtaW5pbmcgdGhlIGBtbS9zd2FwZmlsZS5jYCBjaGFuZ2VzLCBJIHNlZSB0aGF0IHRoZSBwYXRjaCBzZWVtcyB0byBoYXZlIGFkZGVkIGEgY2hlY2ssIGBpZiAoIXpzd2FwX25ldmVyX2VuYWJsZWQoKSlgIGJlZm9yZSBjYWxsaW5nIGB6c3dhcF9pbnZhbGlkYXRlKClgLiBUaGF0J3MgaW1wb3J0YW50LiBJdCBpbmRpY2F0ZXMgdGhhdCB0aGUgaW52YWxpZGF0aW9uIGxvZ2ljIG1pZ2h0IGhhdmUgZGlmZmVyZW50IGJlaGF2aW9yIGRlcGVuZGluZyBvbiBpZiB6c3dhcCBpcyBlbmFibGVkIG9yIG5vdC5cblxuVGhlbiBpbiBgbW0venN3YXAuY2AsIHRoZXJlJ3MgYSBuZXcgaGVscGVyIGZ1bmN0aW9uLCBgenN3YXBfdHJlZSgpYCBhbmQgYW4gdXBkYXRlIG9mIHRoZSBgenN3YXBfaW52YWxpZGF0ZSgpYCBjYWxsIGluIGB6c3dhcF9zdG9yZSgpYC4gVGhpcyBzdWdnZXN0cyBzb21lIHVuZGVybHlpbmcgcmVzdHJ1Y3R1cmluZyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgenN3YXAgaW50ZXJhY3RzIHdpdGggdGhlIHN3YXAgZmlsZSBzeXN0ZW0gYW5kIGl0cyBpbnZhbGlkYXRpb24gbWVjaGFuaXNtLiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlcmUncyBhIG5ldyBjb25kaXRpb24gaW4gdGhlIHN0b3JlIGZ1bmN0aW9uLCBgaWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlgLlxuXG5UaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGFyZWEuIENoYW5nZXMgdG8gYG1tL3pzd2FwLmNgIGFuZCBgbW0vc3dhcGZpbGUuY2AgYXJlIGEgYmlnIGRlYWw7IHRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2gsIGlmIG1pc2hhbmRsZWQsIGNvdWxkIGhhdmUgc2VyaW91cyBjb25zZXF1ZW5jZXMuIEJ1dCwgaXMgaXQgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQ/IFllcywgdGhpcyBwYXRjaCB3b3VsZCBkZWZpbml0ZWx5IGJlIGV4ZXJjaXNhYmxlIGluIFFFTVUsIG9yIGFueSBhbWQ2NCBlbnZpcm9ubWVudCB3aXRoIHpzd2FwIGFuZCBzd2FwZmlsZSBjb25maWd1cmVkLiBUaGVyZWZvcmUsIGZ1enppbmcgdGhpcyBwYXRjaCB3b3VsZCBiZSBoaWdobHkgdmFsdWFibGUuXG5cbk5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYHpzd2FwYCBhbmQgaXRzIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBwYXRjaCB3aWxsIGJlaGF2ZSBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLiBJIHNob3VsZCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIHN1YnN5c3RlbXMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBrZXkgdG8gY3JlYXRpbmcgYSBzb2xpZCB0ZXN0IHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDcwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MDAuMDU5Mzk3MDc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyOTY2ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaU1dBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcXG4tLVxcbm1tL0tjb25maWctMjEtXFxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcXG5tbS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTM0LVxcbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy00NC1cXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy00Ni1cXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz01OT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctNzYtXFxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcXG5tbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcIkRlZmxhdGVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTgyLVxcbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cXG5tbS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkxaT1xcXCJcXG4tLVxcbm1tL0tjb25maWctODgtXFxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0Mlxcbm1tL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NC1cXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XFxubW0vS2NvbmZpZy05Ni1cXHRib29sIFxcXCJMWjRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwMC1cXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXFxubW0vS2NvbmZpZy0xMDItXFx0Ym9vbCBcXFwiTFo0SENcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwNi1cXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcXG5tbS9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJ6c3RkXFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy0xMTMtXFxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MDAuMTIyMzY4OTM1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA1NDcxODAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIFpTV0FQIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBaU1dBUCwgcmlnaHQ/IFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IGFyZWEuIExldCdzIGRpdmUgaW50byBgbW0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGZlYXR1cmVzIGFyZSBsb2NhdGVkLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgb3Igc29tZSBvdGhlciBsb2dpYyB0aGF0IHRlbGxzIG1lIHdoYXQgb3RoZXIgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBJIGNhbiBlbmFibGUgWlNXQVAuIEknbGwgYmUgbG9va2luZyBmb3IgY3Jvc3MtZGVwZW5kZW5jaWVzIGFuZCBtYXliZSBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIGFyY2hpdGVjdHVyZSBvciBvdGhlciBrZXJuZWwgZmVhdHVyZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIHdoYXQncyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IHRvIHdvcmsgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDQ1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MDIuMTc3MDg5MTU1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0XFx0ZGVmYXVsdCB5XFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XFxuICAxODpcXHRcXHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcXG4gIDE5OlxcdFxcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XFxuICAyMDpcXHRcXHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBaU1dBUFxcbiAgMjM6XFx0XFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gU1dBUFxcbiAgMjU6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgMjY6XFx0XFx0c2VsZWN0IFpTTUFMTE9DXFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXFxuICAyOTpcXHRcXHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xcbiAgMzA6XFx0XFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxcbiAgMzE6XFx0XFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcXG4gIDMyOlxcdFxcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxcbiAgMzM6XFx0XFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG4gIDM2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXFxuICA0MDpcXHRcXHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHQgIFRoZSBzZWxlY3Rpb24gbWFkZSBoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSBrZXJuZWxcXG4gIDQzOlxcdFxcdCAgY29tbWFuZCBsaW5lICd6c3dhcC5lbmFibGVkPScgb3B0aW9uLlxcbiAgNDQ6XFx0XFxuICA0NTpcXHRjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbiAgNDY6XFx0XFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4gIDQ3OlxcdFxcdGRlcGVuZHMgb24gWlNXQVBcXG4gIDQ4OlxcdFxcdGRlZmF1bHQgblxcbiAgNDk6XFx0XFx0aGVscFxcbiAgNTA6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIHpzd2FwIHNocmlua2VyIHdpbGwgYmUgZW5hYmxlZCwgYW5kIHRoZSBwYWdlc1xcbiAgNTE6XFx0XFx0ICBzdG9yZWQgaW4gdGhlIHpzd2FwIHBvb2wgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIGZvciByZWNsYWltIChpLmVcXG4gIDUyOlxcdFxcdCAgd3JpdHRlbiBiYWNrIHRvIHRoZSBiYWNraW5nIHN3YXAgZGV2aWNlKSBvbiBtZW1vcnkgcHJlc3N1cmUuXFxuICA1MzpcXHRcXG4gIDU0OlxcdFxcdCAgVGhpcyBtZWFucyB0aGF0IHpzd2FwIHdyaXRlYmFjayBjb3VsZCBoYXBwZW4gZXZlbiBpZiB0aGUgcG9vbCBpc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMToyMjowMi4xNzcyMjU0NTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjQ3MDk1ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipUcmFjaW5nIHRoZSBPcmlnaW5zIG9mIGB6c3dhcF9uZXZlcl9lbmFibGVkYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoZXJlIGV4YWN0bHkgaXMgdGhpcyBgenN3YXBfbmV2ZXJfZW5hYmxlZGAgdmFyaWFibGUgZGVmaW5lZCwgYW5kIGNyaXRpY2FsbHksICpob3cqIGlzIGl0IGJlaW5nIHVzZWQ/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBwdXJwb3NlIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIHpzd2FwIGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIHRoZSBmaXJzdCBjcnVjaWFsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBpZiBpdCdzIGludm9sdmVkIGluIGFuIGlzc3VlIEknbSBpbnZlc3RpZ2F0aW5nIG9yIGp1c3Qgc2ltcGx5IHRyeWluZyB0byBnZXQgbXkgaGVhZCBhcm91bmQgdGhpcyBjb2RlLiBJIG5lZWQgdG8gYmUgYWJsZSB0byB0cmFjZSBpdHMgZGVjbGFyYXRpb24gYW5kIHVzYWdlIHBhdHRlcm5zIHRvIGZvcm0gYSB2YWxpZCBjb25jbHVzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjM5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMToyMjowNi44MjQzMjQ4OTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxOTcwMTMzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF9uZXZlcl9lbmFibGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvenN3YXAuaD0zNj1ib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XFxuaW5jbHVkZS9saW51eC96c3dhcC5oOjM3OmJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtMzgtI2Vsc2VcXG4tLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaD02Mj1zdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTY2LVxcbmluY2x1ZGUvbGludXgvenN3YXAuaDo2NzpzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxcbmluY2x1ZGUvbGludXgvenN3YXAuaC02OC17XFxuLS1cXG5tbS9tZW1vcnkuYz00NzU4PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDc3OS1cXHQgKi9cXG5tbS9tZW1vcnkuYzo0NzgwOlxcdGlmICghenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxcbm1tL21lbW9yeS5jLTQ3ODEtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5tbS9zaG1lbS5jPTIyNDI9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcF9hbGxvY19mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vc2htZW0uYy0yMjUxLVxcdGlmICgodm1mIFxcdTAwMjZcXHUwMDI2IHVubGlrZWx5KHVzZXJmYXVsdGZkX2FybWVkKHZtZi1cXHUwMDNldm1hKSkpIHx8XFxubW0vc2htZW0uYzoyMjUyOlxcdCAgICAgIXpzd2FwX25ldmVyX2VuYWJsZWQoKSlcXG5tbS9zaG1lbS5jLTIyNTMtXFx0XFx0b3JkZXIgPSAwO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xMzE0PXN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMzIwLVxcbm1tL3N3YXBmaWxlLmM6MTMyMTpcXHRpZiAoIXpzd2FwX25ldmVyX2VuYWJsZWQoKSkge1xcbm1tL3N3YXBmaWxlLmMtMTMyMi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfZW50cmllczsgaSsrKVxcbi0tXFxubW0venN3YXAuYz0xMjU9Ym9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTEyOS1cXG5tbS96c3dhcC5jOjEzMDpib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZClcXG5tbS96c3dhcC5jLTEzMS17XFxuLS1cXG5tbS96c3dhcC5jPTE0ODI9Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy0xNDk0LVxcbm1tL3pzd2FwLmM6MTQ5NTpcXHRpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxcbm1tL3pzd2FwLmMtMTQ5Ni1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS96c3dhcC5jPTE2MDY9aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtMTYxNS1cXG5tbS96c3dhcC5jOjE2MTY6XFx0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcXG5tbS96c3dhcC5jLTE2MTctXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDExOjIyOjA4LjQ0NDAzMTY5OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTcyMTE4ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEaWZmOiBBIFF1aWNrIFNjYW4gb2YgSW1wYWN0ZWQgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBUaGUgZGlmZiB0b3VjaGVzIGEgZmV3IGtleSBhcmVhcywgYW5kIEkgd2FudCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBwb3RlbnRpYWxseSBpbXBhY3RlZCBzdWJzeXN0ZW1zLiBMZXQncyBzdGFydCB3aXRoIGEgZnVuY3Rpb24gbGV2ZWwgYnJlYWtkb3duOiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGB6c3dhcF9zdG9yZWAgYW5kIGB6c3dhcF9pbnZhbGlkYXRlYCB3aXRoaW4gYG1tL3pzd2FwLmNgLiBUaGVuLCB0aGVyZSdzIGBzd2FwX3JhbmdlX2ZyZWVgIGluIGBtbS9zd2FwZmlsZS5jYCwgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGF0dGVudGlvbi4gRmluYWxseSwgdGhlcmUgYXJlIGFsc28gdHdvIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLCBgenN3YXBfdHJlZWAgYW5kIGBzd2FwX3pzd2FwX3RyZWVgIGFsc28gaW4gYG1tL3pzd2FwLmNgIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLlxuXG5Ob3cgdGhhdCBJIGhhdmUgYSBtYXAgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgbGV0J3MgcXVpY2tseSBjaGVjayB0aGUgY2FsbCBncmFwaCBmb3IgYHN3YXBfcmFuZ2VfZnJlZWAgYW5kIGB6c3dhcF9pbnZhbGlkYXRlYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgbW9zdCBsaWtlbHkgdG8gaGF2ZSBrbm9jay1vbiBlZmZlY3RzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGV5IGFyZSB1c2VkIGFuZCBob3cgdGhlIGV4aXN0aW5nIGRlc2lnbiBpbXBhY3RzIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMDQsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MTEuMzAxMjQ1NzE3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkxNTQyMTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX2ludmFsaWRhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC96c3dhcC5oPTI5PWludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmluY2x1ZGUvbGludXgvenN3YXAuaDozMDp2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KTtcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtMzEtaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg9NDc9c3RhdGljIGlubGluZSBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTUxLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaDo1MjpzdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfaW52YWxpZGF0ZShpbnQgdHlwZSwgcGdvZmZfdCBvZmZzZXQpIHt9XFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTUzLXN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTMxND1zdGF0aWMgdm9pZCBzd2FwX3JhbmdlX2ZyZWUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTMyMi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfZW50cmllczsgaSsrKVxcbm1tL3N3YXBmaWxlLmM6MTMyMzpcXHRcXHRcXHR6c3dhcF9pbnZhbGlkYXRlKHNpLVxcdTAwM2V0eXBlLCBvZmZzZXQgKyBpKTtcXG5tbS9zd2FwZmlsZS5jLTEzMjQtXFx0fVxcbi0tXFxubW0venN3YXAuYz0xNDgyPWJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtMTU1Ni1cXHRcXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXFx1MDAzYyBucl9wYWdlczsgKytpbmRleClcXG5tbS96c3dhcC5jOjE1NTc6XFx0XFx0XFx0enN3YXBfaW52YWxpZGF0ZSh0eXBlLCBvZmZzZXQgKyBpbmRleCk7XFxubW0venN3YXAuYy0xNTU4LVxcdH1cXG4tLVxcbm1tL3pzd2FwLmM9MTYwNj1pbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy0xNjYzLVxcbm1tL3pzd2FwLmM6MTY2NDp2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KVxcbm1tL3pzd2FwLmMtMTY2NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDExOjIyOjEyLjg5Mjc5NjEyNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTE3NDEzNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc3dhcF9yYW5nZV9mcmVlYCBDYWxsZXJzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBsZXQncyB6ZXJvIGluIG9uIGBzd2FwX3JhbmdlX2ZyZWVgLiBUaGF0IGZ1bmN0aW9uIGlzIGNyaXRpY2FsIHdoZW4gd2UncmUgdGFsa2luZyBhYm91dCBzd2FwIHNwYWNlIG1hbmFnZW1lbnQgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vc3dhcGZpbGUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyB1c2FnZSDigJMgdW5kZXJzdGFuZGluZyAqd2hlcmUqIGl0J3MgY2FsbGVkIHdpbGwgaWxsdW1pbmF0ZSBob3cgbWVtb3J5IGlzIGJlaW5nIHJlbGVhc2VkIGJhY2sgdG8gdGhlIHN3YXAgZGV2aWNlLiBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRob3NlIGNhbGxzLiBXaGF0IGNvbmRpdGlvbnMgdHJpZ2dlciBhIHJhbmdlIG9mIHN3YXAgcGFnZXMgdG8gYmUgZnJlZWQ/IEFyZSB3ZSBkZWFsaW5nIHdpdGggcGFnZSByZWNsYWltLCBwcm9jZXNzIHRlcm1pbmF0aW9uLCBmaWxlIHVubWFwcGluZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjYWxsZXIgaW5mb3JtYXRpb24gd2lsbCB0ZWxsIHRoZSB0YWxlLiBJdCdzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgaXMgcGFyYW1vdW50IHRvIHVuZGVyc3RhbmRpbmcgaG93IHN3YXAgc3BhY2UgaXMgYmVpbmcgaGFuZGxlZC4gVGhpcyBpcyBnb2luZyB0byBiZSBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTc0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MTUuMDEwMjEyNTY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzkxMTExMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX3JhbmdlX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9MTMwND1zdGF0aWMgdm9pZCBzd2FwX3JhbmdlX2FsbG9jKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTMxMy1cXG5tbS9zd2FwZmlsZS5jOjEzMTQ6c3RhdGljIHZvaWQgc3dhcF9yYW5nZV9mcmVlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXFxubW0vc3dhcGZpbGUuYy0xMzE1LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbnJfZW50cmllcylcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTkzMj12b2lkIF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE5NzMtXFxubW0vc3dhcGZpbGUuYzoxOTc0OlxcdHN3YXBfcmFuZ2VfZnJlZShzaSwgY2lfaGVhZCArIGNpX3N0YXJ0LCBucl9wYWdlcyk7XFxubW0vc3dhcGZpbGUuYy0xOTc1LVxcdHN3YXBfY2x1c3Rlcl9hc3NlcnRfZW1wdHkoY2ksIGNpX3N0YXJ0LCBucl9wYWdlcywgZmFsc2UpO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0yODMzPXN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yOTI4LVxcdCAqIE1ha2Ugc3VyZSB0aGF0IGZ1cnRoZXIgY2xlYW51cHMgYWZ0ZXIgdHJ5X3RvX3VudXNlKCkgcmV0dXJucyBoYXBwZW5cXG5tbS9zd2FwZmlsZS5jOjI5Mjk6XFx0ICogYWZ0ZXIgc3dhcF9yYW5nZV9mcmVlKCkgcmVkdWNlcyBzaS1cXHUwMDNlaW51c2VfcGFnZXMgdG8gMC5cXG5tbS9zd2FwZmlsZS5jLTI5MzAtXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDExOjIyOjE1LjA2NDEzMjUxNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDY4ODQzNjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gc29tZSBrZXkgc3ltYm9scyBmb3IgdGhpcyBGb2N1c1N5bWJvbHMgaW52ZXN0aWdhdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2ludmFsaWRhdGVgLCBhbmQgYHN3YXBfcmFuZ2VfZnJlZWAuIEFsc28sIHRoYXQgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgbG9va3MgaW50ZXJlc3RpbmcsIGFzIG1pZ2h0IGFueSByZWxhdGVkIHRvIGB6c3dhcF9sb2FkYCBldGMuIFRoZSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlc2Ugc3ltYm9scyBhcmUgbW9kaWZpZWQgYW5kIG5vbi11YmlxdWl0b3VzLlxuXG5GaXJzdCwgbGV0J3MgZGV0ZXJtaW5lIGlmIGFueSBvZiB0aG9zZSBvcHRpb25zIGFyZSB1c2VkIGV2ZXJ5d2hlcmUuIFNvLCBhcmUgYW55IG9mIGB6c3dhcF9zdG9yZWAsIGB6c3dhcF9pbnZhbGlkYXRlYCwgYW5kIGBzd2FwX3JhbmdlX2ZyZWVgIHdpZGVseSB1c2VkIGFjcm9zcyB0aGUgY29kZWJhc2U/IFdhaXQsIGBzd2FwX3JhbmdlX2ZyZWVgIGlzIGRlY2xhcmVkIGBzdGF0aWNgIGluIGBtbS9zd2FwZmlsZS5jYC4gVGhhdCdzIGEgZ29vZCBpbml0aWFsIHNpZ24uIE5vdywgdGhlIGtleSBxdWVzdGlvbjogaXMgaXQgaW5saW5lZD8gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29kZSBhcm91bmQgdGhlIGBzd2FwX3JhbmdlX2ZyZWVgIGRlZmluaXRpb24gd2l0aGluIGBtbS9zd2FwZmlsZS5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTQ3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDExOjIyOjE4LjEzMjk3ODU2MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc3dhcGZpbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzEwOlxcdFxcdH1cXG4xMzExOlxcdFxcdGF0b21pY19sb25nX3N1Yihucl9lbnRyaWVzLCBcXHUwMDI2bnJfc3dhcF9wYWdlcyk7XFxuMTMxMjpcXHR9XFxuMTMxMzpcXHRcXG4xMzE0OlxcdHN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbjEzMTU6XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9lbnRyaWVzKVxcbjEzMTY6XFx0e1xcbjEzMTc6XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQgPSBvZmZzZXQgKyBucl9lbnRyaWVzIC0gMTtcXG4xMzE4OlxcdFxcdHZvaWQgKCpzd2FwX3Nsb3RfZnJlZV9ub3RpZnkpKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgdW5zaWduZWQgbG9uZyk7XFxuMTMxOTpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4xMzIwOlxcdFxcbjEzMjE6XFx0XFx0aWYgKCF6c3dhcF9uZXZlcl9lbmFibGVkKCkpIHtcXG4xMzIyOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9lbnRyaWVzOyBpKyspXFxuMTMyMzpcXHRcXHRcXHRcXHR6c3dhcF9pbnZhbGlkYXRlKHNpLVxcdTAwM2V0eXBlLCBvZmZzZXQgKyBpKTtcXG4xMzI0OlxcdFxcdH1cXG4xMzI1OlxcdFxcbjEzMjY6XFx0XFx0aWYgKHNpLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNXUF9CTEtERVYpXFxuMTMyNzpcXHRcXHRcXHRzd2FwX3Nsb3RfZnJlZV9ub3RpZnkgPVxcbjEzMjg6XFx0XFx0XFx0XFx0c2ktXFx1MDAzZWJkZXYtXFx1MDAzZWJkX2Rpc2stXFx1MDAzZWZvcHMtXFx1MDAzZXN3YXBfc2xvdF9mcmVlX25vdGlmeTtcXG4xMzI5OlxcdFxcdGVsc2VcXG4xMzMwOlxcdFxcdFxcdHN3YXBfc2xvdF9mcmVlX25vdGlmeSA9IE5VTEw7XFxuMTMzMTpcXHRcXHR3aGlsZSAob2Zmc2V0IFxcdTAwM2M9IGVuZCkge1xcbjEzMzI6XFx0XFx0XFx0YXJjaF9zd2FwX2ludmFsaWRhdGVfcGFnZShzaS1cXHUwMDNldHlwZSwgb2Zmc2V0KTtcXG4xMzMzOlxcdFxcdFxcdGlmIChzd2FwX3Nsb3RfZnJlZV9ub3RpZnkpXFxuMTMzNDpcXHRcXHRcXHRcXHRzd2FwX3Nsb3RfZnJlZV9ub3RpZnkoc2ktXFx1MDAzZWJkZXYsIG9mZnNldCk7XFxuMTMzNTpcXHRcXHRcXHRvZmZzZXQrKztcXG4xMzM2OlxcdFxcdH1cXG4xMzM3OlxcdFxcbjEzMzg6XFx0XFx0LypcXG4xMzM5OlxcdFxcdCAqIE1ha2Ugc3VyZSB0aGF0IHRyeV90b191bnVzZSgpIG9ic2VydmVzIHNpLVxcdTAwM2VpbnVzZV9wYWdlcyByZWFjaGluZyAwXFxuMTM0MDpcXHRcXHQgKiBvbmx5IGFmdGVyIHRoZSBhYm92ZSBjbGVhbnVwcyBhcmUgZG9uZS5cXG4xMzQxOlxcdFxcdCAqL1xcbjEzNDI6XFx0XFx0c21wX3dtYigpO1xcbjEzNDM6XFx0XFx0YXRvbWljX2xvbmdfYWRkKG5yX2VudHJpZXMsIFxcdTAwMjZucl9zd2FwX3BhZ2VzKTtcXG4xMzQ0OlxcdFxcdHN3YXBfdXNhZ2Vfc3ViKHNpLCBucl9lbnRyaWVzKTtcXG4xMzQ1OlxcdH1cXG4xMzQ2OlxcdFxcbjEzNDc6XFx0c3RhdGljIGJvb2wgZ2V0X3N3YXBfZGV2aWNlX2luZm8oc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpKVxcbjEzNDg6XFx0e1xcbjEzNDk6XFx0XFx0aWYgKCFwZXJjcHVfcmVmX3RyeWdldF9saXZlKFxcdTAwMjZzaS1cXHUwMDNldXNlcnMpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMToyMjoxOC4xMzMxNTEzNDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDEzNTgyNzQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBpbiBEZXB0aCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBjb3JlIG9mIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgc3Vycm91bmRpbmcgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgYW5kLCBieSBleHRlbnNpb24sIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCB1dGlsaXplIGBzd2FwX3JhbmdlX2ZyZWVgLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgaWRlbnRpZnlpbmcgdGhlIGRpcmVjdCBjYWxsZXJzOyBpdCdzIGFib3V0IHRyYWNpbmcgdGhlICp3aHkqIGFuZCB0aGUgKndoZW4qLiBJIHdhbnQgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUuIEknbSB0aGlua2luZy4uLlxuXG4qICAgKipNYXBwaW5nIHRoZSBDYWxsIEdyYXBoOioqIExldCdzIHRyYWNlIGJhY2sgZnJvbSBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYC4gV2hhdCBmdW5jdGlvbnMgZGlyZWN0bHkgaW52b2tlIGl0PyBUaGVuLCB3aGF0IGNhbGwgaXQ/IEFuZCB3aGF0IGRvICp0aGV5KiBjYWxsPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBjYWxsIGNoYWluLiBVbmRlcnN0YW5kaW5nIHRoaXMgY2hhaW4gaXMgY3J1Y2lhbC5cbiogICAqKkFsdGVybmF0aXZlIFBhdGhzOioqIEkgc2hvdWxkIHJlbWVtYmVyIG90aGVyIGNhbGxzIHRvIGBzd2FwX3JhbmdlX2ZyZWVgIGFzIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBtZXRob2RzIHRoYXQgYXJlIHVzZWQgdG8gZnJlZSB0aGUgc3dhcCByYW5nZS5cbiogICAqKkNvbnRleHR1YWwgQW5hbHlzaXM6KiogSSBuZWVkIHRvIGFuYWx5emUgdGhlIGNvZGUgc3Vycm91bmRpbmcgdGhlc2UgY2FsbHMuIFdoYXQncyB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbSB3aGVuIHRoZXNlIGZyZWVpbmcgb3BlcmF0aW9ucyBhcmUgdHJpZ2dlcmVkPyBJcyBpdCBkdXJpbmcgcGFnZSByZWNsYWltLCBwcm9jZXNzIHRlcm1pbmF0aW9uLCBmaWxlc3lzdGVtIHVubW91bnQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgY29udGV4dCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpc3N1ZXMuXG4qICAgKipEYXRhIFN0cnVjdHVyZXM6KiogV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkPyBTd2FwIGNhY2hlIGVudHJpZXMsIHBhZ2UgdGFibGUgZW50cmllcywgbWFwcGluZ3MuLi4gaG93IGRvIHRoZXNlIGludGVyYWN0IHdpdGggdGhlIGZ1bmN0aW9ucyBJJ20gaW52ZXN0aWdhdGluZz8gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBtb2RpZmllZCBwcmlvciB0byBgc3dhcF9yYW5nZV9mcmVlYCBjYWxscy5cbiogICAqKlBvdGVudGlhbCBQcm9ibGVtIEFyZWFzOioqIEknbSBtZW50YWxseSBmbGFnZ2luZyBwb3RlbnRpYWwgdHJvdWJsZSBzcG90cy4gQXJlIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbnMgcG9zc2libGU/IElzIHRoZXJlIGxvY2tpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGNvbnRlbnRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBjb3JydXB0aW9uIHNjZW5hcmlvcyB0aGF0IG1pZ2h0IGJlIHRyaWdnZXJlZCBieSB0aGVzZSBmcmVlcz8gVGhpbmtpbmcgb2YgcG90ZW50aWFsIHByb2JsZW1zICpub3cqIHdpbGwgbWFrZSBsYXRlciBkZWJ1Z2dpbmcgZmFzdGVyLlxuKiAgICoqVG9vbHMgYW5kIFRlY2huaXF1ZXM6KiogSSBuZWVkIHRvIGNvbnNpZGVyIHdoYXQgdG9vbHMgSSdsbCB1c2UuIGBnZGJgLCBvZiBjb3Vyc2UsIGJ1dCBhbHNvIG1heWJlIGBwZXJmYCB0byBwcm9maWxlIGFuZCBzZWUgaWYgdGhlcmUgYXJlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBpbiB0aGUgY29kZS4gSSBtaWdodCB3YW50IHRvIGFkZCBzb21lIGluc3RydW1lbnRhdGlvbiB0byBsb2cgdGhlc2UgY2FsbHMgYW5kIHVuZGVyc3RhbmQgdGhlIHBhcmFtZXRlcnMgYmVpbmcgcGFzc2VkLlxuXG5NeSBnb2FsIGlzIHRvIGRldmVsb3AgYSBkZWVwLCBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIHN3YXAgZnJlZWluZyBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIHRvd2FyZCBvcHRpbWl6YXRpb24sIGJ1ZyBmaXhpbmcsIG9yIHNpbXBseSBnYWluaW5nIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU4MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MjIuMjY4OTgxMzA3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTMwOTkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXAuaD0yNDg9dm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuLS1cXG5tbS9zd2FwLmgtMjUwLS8qIEZvciBpbnRlcm5hbCB1c2UgKi9cXG5tbS9zd2FwLmg6MjUxOmV4dGVybiB2b2lkIF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxubW0vc3dhcC5oLTI1Mi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTI1Nz1zdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMjkyLVxcdGlmICghZm9saW9fc3dhcHBlZCkge1xcbm1tL3N3YXBfc3RhdGUuYzoyOTM6XFx0XFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfc3RhcnQsIG5yX3BhZ2VzKTtcXG5tbS9zd2FwX3N0YXRlLmMtMjk0LVxcdH0gZWxzZSBpZiAobmVlZF9mcmVlKSB7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMjk3LVxcdFxcdFxcdGlmICghX19zd3BfdGJfZ2V0X2NvdW50KF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZikpKVxcbm1tL3N3YXBfc3RhdGUuYzoyOTg6XFx0XFx0XFx0XFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfb2ZmLCAxKTtcXG5tbS9zd2FwX3N0YXRlLmMtMjk5LVxcdFxcdH0gd2hpbGUgKCsrY2lfb2ZmIFxcdTAwM2MgY2lfZW5kKTtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTU4OD1zdGF0aWMgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xNjIyLVxcdFxcdGlmIChjaV9iYXRjaCAhPSAtMSkge1xcbm1tL3N3YXBmaWxlLmM6MTYyMzpcXHRcXHRcXHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9iYXRjaCwgY2lfb2ZmIC0gY2lfYmF0Y2gpO1xcbm1tL3N3YXBmaWxlLmMtMTYyNC1cXHRcXHRcXHRjaV9iYXRjaCA9IC0xO1xcbi0tXFxubW0vc3dhcGZpbGUuYy0xNjI4LVxcdGlmIChjaV9iYXRjaCAhPSAtMSlcXG5tbS9zd2FwZmlsZS5jOjE2Mjk6XFx0XFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfYmF0Y2gsIGNpX29mZiAtIGNpX2JhdGNoKTtcXG5tbS9zd2FwZmlsZS5jLTE2MzAtXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE4OTk9c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTkzMS0gKi9cXG5tbS9zd2FwZmlsZS5jOjE5MzI6dm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXBmaWxlLmMtMTkzMy1cXHRcXHRcXHRcXHQgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjIxND12b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMjI4LVxcdGlmICghc3dwX3RiX2lzX2ZvbGlvKF9fc3dhcF90YWJsZV9nZXQoY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpKSlcXG5tbS9zd2FwZmlsZS5jOjIyMjk6XFx0XFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUiwgMSk7XFxubW0vc3dhcGZpbGUuYy0yMjMwLVxcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMToyMjoyMi4zMzQyOTU3NTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA4NTI1ODY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFpzd2FwIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgenN3YXBgIHRoaW5nLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBJJ20gc3RhcnRpbmcgd2l0aCBgenN3YXBfc3RvcmVgIGFuZCBgenN3YXBfaW52YWxpZGF0ZWAuIExvb2tzIGxpa2UgYHpzd2FwX3N0b3JlYCwgd2hpY2ggbGl2ZXMgaW4gYG1tL3pzd2FwLmNgLCBpcyBhbiBleHBvcnRlZCBmdW5jdGlvbiDigJMgYSBjcnVjaWFsIHBpZWNlLCBhcyBleHBlY3RlZCwgaXQncyBhIGBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pYC4gR29vZC4gQW5kIGB6c3dhcF9pbnZhbGlkYXRlYCBpcyBhbHNvIHRoZXJlOiBhIGB2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KWAuIEFsc28gaW4gdGhhdCBmaWxlIGlzIGBzd2FwX3JhbmdlX2ZyZWVgLCB0aG91Z2ggdGhhdCdzIHN0YXRpYy4gRmluZSwgbm93IGxldCdzIHNlZSB3aGF0IGVsc2UgaXMgZ29pbmcgb24uXG5cbk5vdywgbGV0J3MgZXhwbG9yZSBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgb3B0aW9ucyBmb3IgdGhpcyBmZWF0dXJlLiBQZWVraW5nIGF0IGBtbS9LY29uZmlnYCwgSSBzZWUgdGhhdCBgQ09ORklHX1pTV0FQYCBpcyBkZXBlbmRlbnQgb24gYENPTkZJR19TV0FQYC4gTWFrZXMgc2Vuc2UuIEFuZCBpdCBsb29rcyBsaWtlIGBaU1dBUGAgaXMgYnJpbmdpbmcgaW4gYENSWVBUT2AgYW5kIGBaU01BTExPQ2AuIE9rYXksIHRoYXQncyBpbnRlcmVzdGluZy4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgZm9yIGFueSBvdGhlciBpbXBsaWNpdCBvciByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSSdsbCBuZWVkIHRvIGRvIGEgZ3JlcCBmb3IgYENPTkZJR19aU1dBUGAgYWNyb3NzIEtjb25maWcgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkzMywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMToyMjoyNS40MTk1NTY0NzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTMzNzA1NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnLipaU1dBUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0yMS1cXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxcbm1tL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTU5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy03Ni1cXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbm1tL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiRGVmbGF0ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODItXFxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbm1tL0tjb25maWctODQtXFx0Ym9vbCBcXFwiTFpPXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OC1cXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXFxubW0vS2NvbmZpZy05MC1cXHRib29sIFxcXCI4NDJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0LVxcbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcXG5tbS9LY29uZmlnLTk2LVxcdGJvb2wgXFxcIkxaNFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTAwLVxcbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcXG5tbS9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJMWjRIQ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA2LVxcbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxcbm1tL0tjb25maWctMTA4LVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTExMy1cXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMToyMjoyNy40NzI5MzU5MThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk5Nzc5NzA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIENvbmZpZ3VyYXRpb24gRGVjaXNpb25zKipcblxuT2theSwgc28gSSdtIHNldHRpbmcgdXAgYSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24uIEZpcnN0LCB0aGUga2V5IHNldHRpbmdzIHRvIGVuYWJsZSBhcmUgYFNXQVBgIGFuZCBgWlNXQVBgLiBUaG9zZSBhcmUgZnVuZGFtZW50YWwuIE5vdywgSSBuZWVkIHRvIGRlZmluZSB0aGUgZm9jdXMgc3ltYm9sczsgdGhlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gdGFyZ2V0IHNwZWNpZmljYWxseS4gRnJvbSB0aGUgcHJvbXB0LCBpdCBzZWVtcyBsaWtlIHRoZXNlIGFyZSB0aGUgY3JpdGljYWwgb25lcyBmb3IgdGhpcyBzY2VuYXJpbzogYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2ludmFsaWRhdGVgLCBgc3dhcF9yYW5nZV9mcmVlYCwgYW5kIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLlxuXG5MZXQgbWUgcnVuIHRocm91Z2ggZXZlcnl0aGluZyBvbmUgbW9yZSB0aW1lIHRvIG1ha2Ugc3VyZSBpdCBhbGwgYWxpZ25zIHdpdGggdGhlIHJlcXVpcmVtZW50cy4gSXQncyBtYXJrZWQgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHdoaWNoIGlzIGdvb2QgYmVjYXVzZSB0aGlzIHRhcmdldHMgYm90aCBgbW0venN3YXAuY2AgYW5kIGBtbS9zd2FwZmlsZS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSBpdCdzIGRpcmVjdGx5IHRvdWNoaW5nIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCwgaW1wb3J0YW50bHksIGludmFsaWRhdGlvbiBwYXRocy4gVGhlIGNob3NlbiBgRm9jdXNTeW1ib2xzYCBhcmUgZGVmaW5pdGVseSBub3QgdWJpcXVpdG91c2x5IHVzZWQgd2l0aGluIHRoZSBjb2RlYmFzZSwgd2hpY2ggaXMgZ29vZCAtIHRhcmdldHMuIEkgaGF2ZSB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNldCB0byBleGFjdGx5IHdoYXQgdGhlIHByb21wdCBzcGVjaWZpZWQsIGBbXCJTV0FQXCIsIFwiWlNXQVBcIl1gLiBUaGUgcmVhc29uaW5nIHByb3ZpZGVkIGlzIGFsc28gY29uY2lzZSBhbmQgYWNjdXJhdGUuIEl0IGNvdmVycyB3aHkgdGhpcyBmdXp6aW5nIGlzIHdvcnRod2hpbGUgKHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBjYWNoZSBpbnZhbGlkYXRpb24gaGFuZGxpbmcgYW5kIGVhcmx5LWV4aXQgY2hlY2tzKSwgYW5kIGl0IGNvcnJlY3RseSBsaXN0cyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLlxuXG5BbHJpZ2h0LCBzZWVtcyBzb2xpZC4gSSdtIGNvbmZpZGVudCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk3NiwiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MzEuNDcwNzM0Njk1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4MTk5NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienN3YXBfc3RvcmVcIixcbiAgICBcInpzd2FwX2ludmFsaWRhdGVcIixcbiAgICBcInN3YXBfcmFuZ2VfZnJlZVwiLFxuICAgIFwiX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB6c3dhcCBpbnZhbGlkYXRpb24gaW50ZXJmYWNlIGFuZCBhZGRzIGVhcmx5LWV4aXQgb3B0aW1pemF0aW9uIGNoZWNrcyAodmlhIHpzd2FwX25ldmVyX2VuYWJsZWQoKSkgaW4genN3YXBfc3RvcmUoKSBhbmQgc3dhcF9yYW5nZV9mcmVlKCkuIFNpbmNlIHRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzd2FwIGFuZCBjb21wcmVzc2VkIGNhY2hlIGxvZ2ljIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwienN3YXBfaW52YWxpZGF0ZVwiLFxuICAgIFwic3dhcF9yYW5nZV9mcmVlXCIsXG4gICAgXCJfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHpzd2FwIGludmFsaWRhdGlvbiBpbnRlcmZhY2UgYW5kIGFkZHMgZWFybHktZXhpdCBvcHRpbWl6YXRpb24gY2hlY2tzICh2aWEgenN3YXBfbmV2ZXJfZW5hYmxlZCgpKSBpbiB6c3dhcF9zdG9yZSgpIGFuZCBzd2FwX3JhbmdlX2ZyZWUoKS4gU2luY2UgdGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN3YXAgYW5kIGNvbXByZXNzZWQgY2FjaGUgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MzEuNTQ1NTYxNTkyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYyMjM0Mjc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDExOjIyOjMxLjU0NTk5Nzg3MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE1NjIxOTAxOTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgenN3YXAgaGVscGVyIGZ1bmN0aW9ucyAoYHpzd2FwX2ludmFsaWRhdGVgIGFuZCBgenN3YXBfdHJlZWApIHRvIHBhc3MgdHlwZSBhbmQgb2Zmc2V0IGRpcmVjdGx5IHJhdGhlciB0aGFuIHBhY2tpbmcvdW5wYWNraW5nIGBzd3BfZW50cnlfdGAsIGFkZHMgZWFybHktZXhpdCBjaGVja3MgdXNpbmcgYHpzd2FwX25ldmVyX2VuYWJsZWQoKWAsIGFuZCBzaW1wbGlmaWVzIGVudHJ5IGNsZWFudXAgaW4gYHpzd2FwX3N0b3JlKClgLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0aW5nIHRvIHpzd2FwIHRyZWUgaW5kZXhpbmcgb3IgZW50cnkgbGlmZXRpbWVzIGZhbGwgdW5kZXIgbWVtb3J5IHNhZmV0eSAvIGNvbmN1cnJlbmN5IGNvbmNlcm5zIGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMuIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMjcwNjg2OWYxNjIwZDEyNGE5YzdjOTdiNzhjZDFmM2EyOTU4NzEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTE6MjE6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbmluZGV4IDMwYzE5M2ExMjA3ZTEuLjQ2M2JkZWU1YzFlMTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuQEAgLTI3LDcgKzI3LDcgQEAgc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7XG4gdW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKTtcbiBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApO1xuK3ZvaWQgenN3YXBfaW52YWxpZGF0ZShpbnQgdHlwZSwgcGdvZmZfdCBvZmZzZXQpO1xuIGludCB6c3dhcF9zd2Fwb24oaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSk7XG4gdm9pZCB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAtRU5PRU5UO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApIHt9XG4rc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggMDVkMzQwODM5NmY5OC4uNTA1NTkyMDUxOTI0MyAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xMzE4LDggKzEzMTgsMTAgQEAgc3RhdGljIHZvaWQgc3dhcF9yYW5nZV9mcmVlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXG4gXHR2b2lkICgqc3dhcF9zbG90X2ZyZWVfbm90aWZ5KShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcpO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpKyspXG4tXHRcdHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5KHNpLVx1MDAzZXR5cGUsIG9mZnNldCArIGkpKTtcbitcdGlmICghenN3YXBfbmV2ZXJfZW5hYmxlZCgpKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2VudHJpZXM7IGkrKylcbitcdFx0XHR6c3dhcF9pbnZhbGlkYXRlKHNpLVx1MDAzZXR5cGUsIG9mZnNldCArIGkpO1xuK1x0fVxuIFxuIFx0aWYgKHNpLVx1MDAzZWZsYWdzIFx1MDAyNiBTV1BfQkxLREVWKVxuIFx0XHRzd2FwX3Nsb3RfZnJlZV9ub3RpZnkgPVxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBhMTJiNjQ1MmEyMjUxLi42MTk3YWE3MWUzM2M5IDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTIyOCwxMCArMjI4LDE1IEBAIHN0YXRpYyBib29sIHpzd2FwX2hhc19wb29sO1xuIC8qIE9uZSBzd2FwIGFkZHJlc3Mgc3BhY2UgZm9yIGVhY2ggNjRNIHN3YXAgc3BhY2UgKi9cbiAjZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlQgMTRcbiAjZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfUEFHRVMgKDEgXHUwMDNjXHUwMDNjIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlQpXG4rXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgeGFycmF5ICp6c3dhcF90cmVlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldClcbit7XG4rXHRyZXR1cm4gXHUwMDI2enN3YXBfdHJlZXNbdHlwZV1bb2Zmc2V0IFx1MDAzZVx1MDAzZSBaU1dBUF9BRERSRVNTX1NQQUNFX1NISUZUXTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgeGFycmF5ICpzd2FwX3pzd2FwX3RyZWUoc3dwX2VudHJ5X3Qgc3dwKVxuIHtcbi1cdHJldHVybiBcdTAwMjZ6c3dhcF90cmVlc1tzd3BfdHlwZShzd3ApXVtzd3Bfb2Zmc2V0KHN3cClcbi1cdFx0XHUwMDNlXHUwMDNlIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlRdO1xuK1x0cmV0dXJuIHpzd2FwX3RyZWUoc3dwX3R5cGUoc3dwKSwgc3dwX29mZnNldChzd3ApKTtcbiB9XG4gXG4gI2RlZmluZSB6c3dhcF9wb29sX2RlYnVnKG1zZywgcClcdFx0XHRcXFxuQEAgLTE0ODcsNiArMTQ5Miw5IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcbiBcdFZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKTtcbiBcbitcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGlmICghenN3YXBfZW5hYmxlZClcbiBcdFx0Z290byBjaGVja19vbGQ7XG4gXG5AQCAtMTU0NCwxNSArMTU1Miw5IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmICghcmV0KSB7XG4gXHRcdHVuc2lnbmVkIHR5cGUgPSBzd3BfdHlwZShzd3ApO1xuIFx0XHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbi1cdFx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeTtcbi1cdFx0c3RydWN0IHhhcnJheSAqdHJlZTtcbi1cbi1cdFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBucl9wYWdlczsgKytpbmRleCkge1xuLVx0XHRcdHRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoc3dwX2VudHJ5KHR5cGUsIG9mZnNldCArIGluZGV4KSk7XG4tXHRcdFx0ZW50cnkgPSB4YV9lcmFzZSh0cmVlLCBvZmZzZXQgKyBpbmRleCk7XG4tXHRcdFx0aWYgKGVudHJ5KVxuLVx0XHRcdFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XG4tXHRcdH1cbitcbitcdFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBucl9wYWdlczsgKytpbmRleClcbitcdFx0XHR6c3dhcF9pbnZhbGlkYXRlKHR5cGUsIG9mZnNldCArIGluZGV4KTtcbiBcdH1cbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMTY1OSwxMCArMTY2MSw5IEBAIGludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tdm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cClcbit2b2lkIHpzd2FwX2ludmFsaWRhdGUoaW50IHR5cGUsIHBnb2ZmX3Qgb2Zmc2V0KVxuIHtcbi1cdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xuLVx0c3RydWN0IHhhcnJheSAqdHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3ApO1xuK1x0c3RydWN0IHhhcnJheSAqdHJlZSA9IHpzd2FwX3RyZWUodHlwZSwgb2Zmc2V0KTtcbiBcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnk7XG4gXG4gXHRpZiAoeGFfZW1wdHkodHJlZSkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMToyMjozMS41NDU5OTg5NjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTE5Njg1NDgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpzd2FwIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBFeHBvc3VyZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gc2NydXRpbnkuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyBpbiBkZXRhaWwuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbiByZXZvbHZlcyBhcm91bmQgYHpzd2FwX2ludmFsaWRhdGVgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc3dhcCBpbmZyYXN0cnVjdHVyZS5cblxuVGhlIHNpZ25pZmljYW50IGNoYW5nZXMgYXJlIGluIHRoZSBgenN3YXAuaGAgaGVhZGVyLCB3aGVyZSB0aGUgc2lnbmF0dXJlIG9mIGB6c3dhcF9pbnZhbGlkYXRlYCBoYXMgYmVlbiBhbHRlcmVkIGZyb20gdGFraW5nIGEgYHN3cF9lbnRyeV90YCB0byB0YWtpbmcgYGludCB0eXBlYCBhbmQgYHBnb2ZmX3Qgb2Zmc2V0YC4gVGhpcyBpcyBhbHNvIHRydWUgZm9yIHRoZSBzdGF0aWMgaW5saW5lIHN0dWIuIFRoZSByZWFsIHdvcmsgaXMgaGFwcGVuaW5nIGluIGBtbS9zd2FwZmlsZS5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgc3dhcF9yYW5nZV9mcmVlYC4gVGhlIG9yaWdpbmFsIGNvZGUgc2ltcGx5IGl0ZXJhdGVkIGFuZCBjYWxsZWQgYHpzd2FwX2ludmFsaWRhdGVgIHdpdGggYSBjYWxjdWxhdGVkIGBzd3BfZW50cnlfdGAuIE5vdywgYSBjaGVjayBmb3IgYHpzd2FwX25ldmVyX2VuYWJsZWQoKWAgaGFzIGJlZW4gaW50cm9kdWNlZC4gSWYgenN3YXAgaXMgZW5hYmxlZCwgdGhlIGNvZGUgaXRlcmF0ZXMgYW5kIG5vdyBjYWxscyBgenN3YXBfaW52YWxpZGF0ZWAgd2l0aCB0aGUgaW5kaXZpZHVhbCBgdHlwZWAgYW5kIGBvZmZzZXRgIHZhbHVlcy4gSXQgbG9va3MgbGlrZSB0aGlzIGFkZHMgYSBjb25kaXRpb25hbCBibG9jayB3aGVyZSBgenN3YXBfaW52YWxpZGF0ZWAgaXMgb25seSBleGVjdXRlZCBpZiB6c3dhcCBpcyBhY3R1YWxseSBlbmFibGVkLlxuXG5UaGUgcGF0Y2ggdGhlbiBtb3ZlcyBvbiB0byBgbW0venN3YXAuY2AuIEhlcmUsIHRoZSBmdW5jdGlvbiBgenN3YXBfdHJlZWAgaXMgYmVpbmcgaW50cm9kdWNlZCwgd2hpY2ggYXBwZWFycyB0byBiZSBhIGhlbHBlciB0byBnZXQgYFx1MDAyNnpzd2FwX3RyZWVzW3R5cGVdW29mZnNldCBcdTAwM2VcdTAwM2UgWlNXQVBfQUREUkVTU19TUEFDRV9TSElGVF1gLiBgc3dhcF96c3dhcF90cmVlYCBpcyBtb2RpZmllZCB0byB1c2UgdGhpcyBuZXcgaGVscGVyLiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlcmUncyBhbiBlYXJseSByZXR1cm4gaW4gYHpzd2FwX3N0b3JlYCBpZiBgenN3YXBfbmV2ZXJfZW5hYmxlZCgpYC4gRnVydGhlcm1vcmUsIGluIHRoZSBlcnJvci9mYWxsYmFjayBwYXRoIG9mIGB6c3dhcF9zdG9yZWAsIGl0J3MgcmVwbGFjaW5nIGlubGluZSBsb29wcyBmb3IgZXJhc2luZyBlbnRyaWVzIHdpdGggY2FsbHMgdG8gYHpzd2FwX2ludmFsaWRhdGVgIHdpdGggdGhlIG5ldyBzaWduYXR1cmUuIFRoZSBgenN3YXBfaW52YWxpZGF0ZWAgZnVuY3Rpb24gaXRzZWxmIGlzIGFsc28gbW9kaWZpZWQgdG8gdXNlIGB6c3dhcF90cmVlYCBhbmQgdGhlIG5ldyBmdW5jdGlvbiBzaWduYXR1cmUuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGB6c3dhcF9uZXZlcl9lbmFibGVkKClgIGlzIGJlaW5nIGNhbGxlZCBjb3JyZWN0bHkuIFRvIGNvbmZpcm0gdGhhdCB0aGVyZSBhcmUgbm8gZ2FwcyBoZXJlIEkgd2lsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBwbGFjZXMgd2hlcmUgdGhpcyBpcyBiZWluZyBjYWxsZWQgYW5kIGhvdyBpdCdzIGltcGxlbWVudGVkLiBUaGVuIEkgd2lsbCBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYHpzd2FwX2ludmFsaWRhdGVgIGlzIHdvcmtpbmcgY29ycmVjdGx5IGFmdGVyIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGNoYW5nZSBpbiBzaWduYXR1cmUgaGFzbid0IGludHJvZHVjZWQgYW55IGlzc3VlcyB3aXRoIGhvdyB0aGUgZGF0YSBpcyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjgyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MzYuNzQyODU3NDkzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk1NDc3MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX25ldmVyX2VuYWJsZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC96c3dhcC5oPTM2PWJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6Mzc6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvenN3YXAuaC0zOC0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC96c3dhcC5oPTYyPXN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNjYtXFxuaW5jbHVkZS9saW51eC96c3dhcC5oOjY3OnN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTY4LXtcXG4tLVxcbm1tL21lbW9yeS5jPTQ3NTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00Nzc5LVxcdCAqL1xcbm1tL21lbW9yeS5jOjQ3ODA6XFx0aWYgKCF6c3dhcF9uZXZlcl9lbmFibGVkKCkpXFxubW0vbWVtb3J5LmMtNDc4MS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3NobWVtLmM9MjI0Mj1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9zd2FwX2FsbG9jX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5tbS9zaG1lbS5jLTIyNTEtXFx0aWYgKCh2bWYgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkodXNlcmZhdWx0ZmRfYXJtZWQodm1mLVxcdTAwM2V2bWEpKSkgfHxcXG5tbS9zaG1lbS5jOjIyNTI6XFx0ICAgICAhenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxcbm1tL3NobWVtLmMtMjI1My1cXHRcXHRvcmRlciA9IDA7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTEzMTQ9c3RhdGljIHZvaWQgc3dhcF9yYW5nZV9mcmVlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTEzMjAtXFxubW0vc3dhcGZpbGUuYzoxMzIxOlxcdGlmICghenN3YXBfbmV2ZXJfZW5hYmxlZCgpKSB7XFxubW0vc3dhcGZpbGUuYy0xMzIyLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9lbnRyaWVzOyBpKyspXFxuLS1cXG5tbS96c3dhcC5jPTEyNT1ib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtMTI5LVxcbm1tL3pzd2FwLmM6MTMwOmJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxcbm1tL3pzd2FwLmMtMTMxLXtcXG4tLVxcbm1tL3pzd2FwLmM9MTQ4Mj1ib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTE0OTQtXFxubW0venN3YXAuYzoxNDk1OlxcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXFxubW0venN3YXAuYy0xNDk2LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3pzd2FwLmM9MTYwNj1pbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy0xNjE1LVxcbm1tL3pzd2FwLmM6MTYxNjpcXHRpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxcbm1tL3pzd2FwLmMtMTYxNy1cXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6MzguMjM4MzQ2MTk3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3NzM2MjczOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8genN3YXBfaW52YWxpZGF0ZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYHpzd2FwX2ludmFsaWRhdGVgIGFjdHVhbGx5IHdvcmtzLiBMZXQncyBoZWFkIG92ZXIgdG8gdGhlIGBtbS96c3dhcC5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIHRoYXQgZnVuY3Rpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIG51YW5jZXMgb2YgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjb21wcmVzc2VkIGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIHBhZ2UgdGFibGUgZW50cmllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludmFsaWRhdGlvbiBwcm9jZXNzIHRob3JvdWdobHkuIEFyZSB3ZSBqdXN0IGNsZWFyaW5nIHRoZSBzd2FwIGVudHJ5LCBvciBpcyB0aGVyZSBtb3JlIGludm9sdmVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjb21wcmVzc2VkIHBhZ2VzPyBIb3cgZG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoIG90aGVyIG9wZXJhdGlvbnMgb24gdGhhdCBwYWdlPyBJcyB0aGVyZSBhbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcGFnZSBjYWNoZSwgb3IgaXMgaXQgaXNvbGF0ZWQgdG8gdGhlIHN3YXAgZW50cmllcz8gSSBuZWVkIHRvIGxvb2sgYXQgYW55IGxvY2sgYWNxdWlzaXRpb24gYW5kIHJlbGVhc2UgcGF0dGVybnM7IHRoYXQncyBhbHdheXMgYSBjcml0aWNhbCBhcmVhIHRvIGV4YW1pbmUgZm9yIGNvcnJlY3RuZXNzLiBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGB6c3dhcF9pbnZhbGlkYXRlYCBhbmQgc2VlIGhvdyByZXNpbGllbnQgdGhlIHN5c3RlbSBpcyB3aGVuIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyB0aGUgaW52YWxpZGF0aW9uLCBwZXJoYXBzIHdpdGggYSBkYW1hZ2VkIHN3YXAgZW50cnkgb3IgYSBoYXJkd2FyZSBpc3N1ZS4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyBgenN3YXBfaW52YWxpZGF0ZWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHpzd2FwIGxpZmVjeWNsZSwgcGFydGljdWxhcmx5IHdpdGggcGFnZSByZWNsYWltIGFuZCB0aGUgd3JpdGViYWNrIHByb2Nlc3MuIExldCdzIHNlZSBob3cgbXVjaCBtZW1vcnkgYW5kIG92ZXJoZWFkIGl0IGhhcy4gSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIG9wdGltaXphdGlvbnMgd2l0aGluIHRoYXQgZnVuY3Rpb24gYW5kIHdoZXRoZXIgaXQgY2FuIGNvbnRyaWJ1dGUgdG8gc3lzdGVtIHNsb3dkb3duLiBPa2F5LCBsZXQncyBnZXQgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA0MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDExOjIyOjQyLjAxMTk3NjIwM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0venN3YXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjU1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjU1OlxcdFxcdCAqL1xcbjE2NTY6XFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuMTY1NzpcXHRcXHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQpO1xcbjE2NTg6XFx0XFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XFxuMTY1OTpcXHRcXG4xNjYwOlxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuMTY2MTpcXHRcXHRyZXR1cm4gMDtcXG4xNjYyOlxcdH1cXG4xNjYzOlxcdFxcbjE2NjQ6XFx0dm9pZCB6c3dhcF9pbnZhbGlkYXRlKGludCB0eXBlLCBwZ29mZl90IG9mZnNldClcXG4xNjY1OlxcdHtcXG4xNjY2OlxcdFxcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSB6c3dhcF90cmVlKHR5cGUsIG9mZnNldCk7XFxuMTY2NzpcXHRcXHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5O1xcbjE2Njg6XFx0XFxuMTY2OTpcXHRcXHRpZiAoeGFfZW1wdHkodHJlZSkpXFxuMTY3MDpcXHRcXHRcXHRyZXR1cm47XFxuMTY3MTpcXHRcXG4xNjcyOlxcdFxcdGVudHJ5ID0geGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcXG4xNjczOlxcdFxcdGlmIChlbnRyeSlcXG4xNjc0OlxcdFxcdFxcdHpzd2FwX2VudHJ5X2ZyZWUoZW50cnkpO1xcbjE2NzU6XFx0fVxcbjE2NzY6XFx0XFxuMTY3NzpcXHRpbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbjE2Nzg6XFx0e1xcbjE2Nzk6XFx0XFx0c3RydWN0IHhhcnJheSAqdHJlZXMsICp0cmVlO1xcbjE2ODA6XFx0XFx0dW5zaWduZWQgaW50IG5yLCBpO1xcbjE2ODE6XFx0XFxuMTY4MjpcXHRcXHRuciA9IERJVl9ST1VORF9VUChucl9wYWdlcywgWlNXQVBfQUREUkVTU19TUEFDRV9QQUdFUyk7XFxuMTY4MzpcXHRcXHR0cmVlcyA9IGt2emFsbG9jX29ianMoKnRyZWUsIG5yKTtcXG4xNjg0OlxcdFxcdGlmICghdHJlZXMpIHtcXG4xNjg1OlxcdFxcdFxcdHByX2VycihcXFwiYWxsb2MgZmFpbGVkLCB6c3dhcCBkaXNhYmxlZCBmb3Igc3dhcCB0eXBlICVkXFxcXG5cXFwiLCB0eXBlKTtcXG4xNjg2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE2ODc6XFx0XFx0fVxcbjE2ODg6XFx0XFxuMTY4OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnI7IGkrKylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTE6MjI6NDIuMDEyMTM5ODkzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxNTU3MzgxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gTmV3IENvbmNlcm5zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhlIHBhdGNoJ3MgY2hhbmdlczogSXQncyBhIHJlZmFjdG9yaW5nIG9mIGB6c3dhcF9pbnZhbGlkYXRlYCB0byB1c2UgYCh0eXBlLCBvZmZzZXQpYCBpbnN0ZWFkIG9mIGBzd3BfZW50cnlfdGAsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBhdm9pZGluZyB1bm5lY2Vzc2FyeSBzd3BfZW50cnkgY3JlYXRpb24uIFRoZXJlJ3MgYWxzbyBzb21lIG9wdGltaXphdGlvbiBpbiBgc3dhcF9yYW5nZV9mcmVlYCByZWxhdGVkIHRvIGB6c3dhcF9uZXZlcl9lbmFibGVkKClgIGFuZCBhIHNpbWlsYXIgb3B0aW1pemF0aW9uIGFuZCBzaW1wbGlmaWNhdGlvbiBpbiBgenN3YXBfc3RvcmVgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgS01TQU4gY29uY2VybnM/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC5cblxuKiAgICoqVXNlci1zcGFjZSBleHBvc3VyZT8qKiBOb3BlLiBObyBuZXcga2VybmVsIHN0cnVjdHVyZXMgc2VudCBvdXQsIGFuZCBub3RoaW5nIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuKiAgICoqVW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2U/KiogTm8uIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgYXJlIGVpdGhlciBmdW5jdGlvbiBhcmd1bWVudHMsIHdlbGwtaW5pdGlhbGl6ZWQgZ2xvYmFscywgb3IgZmxhZ3MuIE5vIHJpc2tzIHRoZXJlLlxuKiAgICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbj8qKiBEb2Vzbid0IHNlZW0gc28uIE5vIGNvbXBsZXggc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byBsYXRlciB1bmluaXRpYWxpemVkIHJlYWRzLlxuKiAgICoqQm91bmRzIGNoZWNrIHZ1bG5lcmFiaWxpdGllcz8qKiBOb3RoaW5nIHRoYXQgY291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBpc3N1ZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGtpbmRzIG9mIG1lbW9yeS1yZWxhdGVkIGVycm9ycyB0aGF0ICpjb3VsZCogYXJpc2UgYXJlOiBhcnJheSBpbmRleGluZyBpbnRvIGB6c3dhcF90cmVlc2AsIGxvY2tpbmcgb3IgY29uY3VycmVuY3kgcHJvYmxlbXMsIG9yIHVzZS1hZnRlci1mcmVlL2xvZ2ljIGJ1Z3Mgd2l0aGluIHRoZSB6c3dhcCBsaWZlY3ljbGUuIEJ1dCB0aG9zZSBhcmUgcHJlY2lzZWx5IHRoZSB0aGluZ3MgS0FTQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2ghXG5cbk15IGNvbmNsdXNpb246IHNpbmNlIEtBU0FOIGhhbmRsZXMgdGhlIHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzLCB0aGVyZSdzIG5vIG5lZWQgZm9yIEtNU0FOIHRvIGJlIGludm9sdmVkIGhlcmUuIFRoaXMgYWxsIGxvb2tzIGdvb2QuIFRpbWUgdG8gZmluYWxpemUgdGhlIGFuYWx5c2lzLiBJJ20gc2V0dGluZyB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg3NiwiT3V0cHV0VG9rZW5zIjoxNjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMToyMjo0Ny4xNjc4ODA0OTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB6c3dhcCBoZWxwZXIgZnVuY3Rpb25zIChgenN3YXBfaW52YWxpZGF0ZWAgYW5kIGB6c3dhcF90cmVlYCkgdG8gcGFzcyB0eXBlIGFuZCBvZmZzZXQgZGlyZWN0bHkgcmF0aGVyIHRoYW4gcGFja2luZy91bnBhY2tpbmcgYHN3cF9lbnRyeV90YCwgYWRkcyBlYXJseS1leGl0IGNoZWNrcyB1c2luZyBgenN3YXBfbmV2ZXJfZW5hYmxlZCgpYCwgYW5kIHNpbXBsaWZpZXMgZW50cnkgY2xlYW51cCBpbiBgenN3YXBfc3RvcmUoKWAuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFBvdGVudGlhbCBpc3N1ZXMgcmVsYXRpbmcgdG8genN3YXAgdHJlZSBpbmRleGluZyBvciBlbnRyeSBsaWZldGltZXMgZmFsbCB1bmRlciBtZW1vcnkgc2FmZXR5IC8gY29uY3VycmVuY3kgY29uY2VybnMgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycy4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB6c3dhcCBoZWxwZXIgZnVuY3Rpb25zIChgenN3YXBfaW52YWxpZGF0ZWAgYW5kIGB6c3dhcF90cmVlYCkgdG8gcGFzcyB0eXBlIGFuZCBvZmZzZXQgZGlyZWN0bHkgcmF0aGVyIHRoYW4gcGFja2luZy91bnBhY2tpbmcgYHN3cF9lbnRyeV90YCwgYWRkcyBlYXJseS1leGl0IGNoZWNrcyB1c2luZyBgenN3YXBfbmV2ZXJfZW5hYmxlZCgpYCwgYW5kIHNpbXBsaWZpZXMgZW50cnkgY2xlYW51cCBpbiBgenN3YXBfc3RvcmUoKWAuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFBvdGVudGlhbCBpc3N1ZXMgcmVsYXRpbmcgdG8genN3YXAgdHJlZSBpbmRleGluZyBvciBlbnRyeSBsaWZldGltZXMgZmFsbCB1bmRlciBtZW1vcnkgc2FmZXR5IC8gY29uY3VycmVuY3kgY29uY2VybnMgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycy4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowx6j7c[1] Phase: Succeeded StartedAt: 2026-09-10 11:22:58 +0000 UTC FinishedAt: 2026-09-10 11:22:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 11:22:58 +0000 UTC FinishedAt: 2026-09-10 11:22:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2] Phase: Succeeded StartedAt: 2026-09-10 11:22:58 +0000 UTC FinishedAt: 2026-09-10 15:05:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 11:22:58 +0000 UTC FinishedAt: 2026-09-10 15:05:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 11:22:58 +0000 UTC FinishedAt: 2026-09-10 11:23:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 11:22:58 +0000 UTC FinishedAt: 2026-09-10 11:23:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowx6j7c/series-workflowx6j7c-convert-artifact-818270029/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 11:23:08 +0000 UTC FinishedAt: 2026-09-10 11:39:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 11:23:08 +0000 UTC FinishedAt: 2026-09-10 11:39:40 +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:*dc469507-708f-4e80-a579-abb174307953,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-workflowx6j7c/series-workflowx6j7c-convert-artifact-818270029/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": "b990c9ec-fc4b-4d79-ad69-a542efa6c3f6", "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-workflowx6j7c/series-workflowx6j7c-build-action-2998538179/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 11:23:08 +0000 UTC FinishedAt: 2026-09-10 11:39:30 +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:*dc469507-708f-4e80-a579-abb174307953,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-workflowx6j7c/series-workflowx6j7c-convert-artifact-818270029/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": "b990c9ec-fc4b-4d79-ad69-a542efa6c3f6", "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-workflowx6j7c/series-workflowx6j7c-build-action-2998538179/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 11:39:40 +0000 UTC FinishedAt: 2026-09-10 11:39:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 11:39:40 +0000 UTC FinishedAt: 2026-09-10 11:39:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 11:39:40 +0000 UTC FinishedAt: 2026-09-10 11:39:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 11:39:40 +0000 UTC FinishedAt: 2026-09-10 11:39:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowx6j7c/series-workflowx6j7c-convert-artifact-3147498152/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 11:39:50 +0000 UTC FinishedAt: 2026-09-10 11:41:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 11:39:50 +0000 UTC FinishedAt: 2026-09-10 11:41:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b990c9ec-fc4b-4d79-ad69-a542efa6c3f6,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-workflowx6j7c/series-workflowx6j7c-build-action-2998538179/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-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 11:41:50 +0000 UTC FinishedAt: 2026-09-10 11:41:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 11:41:50 +0000 UTC FinishedAt: 2026-09-10 11:41:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 11:41:50 +0000 UTC FinishedAt: 2026-09-10 11:58:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 11:41:50 +0000 UTC FinishedAt: 2026-09-10 11:58:11 +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:*dc469507-708f-4e80-a579-abb174307953,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-workflowx6j7c/series-workflowx6j7c-convert-artifact-3147498152/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": "1ba12ab5-2984-460c-be44-e4a262bf60cc", "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-workflowx6j7c/series-workflowx6j7c-build-action-1793327188/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 11:41:50 +0000 UTC FinishedAt: 2026-09-10 11:58:01 +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:*dc469507-708f-4e80-a579-abb174307953,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-workflowx6j7c/series-workflowx6j7c-convert-artifact-3147498152/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": "1ba12ab5-2984-460c-be44-e4a262bf60cc", "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-workflowx6j7c/series-workflowx6j7c-build-action-1793327188/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 11:58:11 +0000 UTC FinishedAt: 2026-09-10 11:58:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 11:58:11 +0000 UTC FinishedAt: 2026-09-10 11:58:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 11:58:11 +0000 UTC FinishedAt: 2026-09-10 12:00:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 11:58:11 +0000 UTC FinishedAt: 2026-09-10 12:00:05 +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:*1ba12ab5-2984-460c-be44-e4a262bf60cc,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-workflowx6j7c/series-workflowx6j7c-build-action-1793327188/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-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 12:00:15 +0000 UTC FinishedAt: 2026-09-10 15:05:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 12:00:15 +0000 UTC FinishedAt: 2026-09-10 15:05:54 +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_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"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:*b990c9ec-fc4b-4d79-ad69-a542efa6c3f6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1ba12ab5-2984-460c-be44-e4a262bf60cc,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-workflowx6j7c/series-workflowx6j7c-build-action-2998538179/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-workflowx6j7c/series-workflowx6j7c-build-action-1793327188/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 12:00:15 +0000 UTC FinishedAt: 2026-09-10 12:00:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 12:00:15 +0000 UTC FinishedAt: 2026-09-10 12:00:20 +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_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"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-workflowx6j7c/series-workflowx6j7c-convert-artifact-2234591713/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 12:00:15 +0000 UTC FinishedAt: 2026-09-10 12:00:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 12:00:15 +0000 UTC FinishedAt: 2026-09-10 12:00:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 12:00:15 +0000 UTC FinishedAt: 2026-09-10 12:00:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 12:00:25 +0000 UTC FinishedAt: 2026-09-10 15:05:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx6j7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_invalidate","swap_range_free","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cf558a250cf4475a8936902b8978fbb6c61016f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"8fcc7bd4-9135-4767-86c0-7cdadb7b17db","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 12:00:25 +0000 UTC FinishedAt: 2026-09-10 15:05:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b990c9ec-fc4b-4d79-ad69-a542efa6c3f6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1ba12ab5-2984-460c-be44-e4a262bf60cc,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-workflowx6j7c/series-workflowx6j7c-build-action-2998538179/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-workflowx6j7c/series-workflowx6j7c-build-action-1793327188/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-workflowx6j7c/series-workflowx6j7c-convert-artifact-2234591713/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,}