Name: series-workflowfn47r Phase: Succeeded StartedAt: 2026-08-30 04:43:33 +0000 UTC FinishedAt: 2026-08-30 08:43:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[0] Phase: Succeeded StartedAt: 2026-08-30 04:43:33 +0000 UTC FinishedAt: 2026-08-30 05:04:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[0].run-triage Phase: Succeeded StartedAt: 2026-08-30 04:43:33 +0000 UTC FinishedAt: 2026-08-30 05:04:00 +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": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "TRANSPARENT_HUGEPAGE", "THP_SWAP", "SHMEM" ], "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": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "TRANSPARENT_HUGEPAGE", "THP_SWAP", "SHMEM" ], "series_id": "fe171ae4-ab3c-4122-be0d-d91134db62e2" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "folio_alloc_swap", "mem_cgroup_get_folio_swap_margin", "page_counter_margin", "shmem_writeout" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7VEhQX1NXQVAmIzM0OywKICAgICYjMzQ7U0hNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19hbGxvY19zd2FwJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luJiMzNDssCiAgICAmIzM0O3BhZ2VfY291bnRlcl9tYXJnaW4mIzM0OywKICAgICYjMzQ7c2htZW1fd3JpdGVvdXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmhhbmNlcyBzd2FwIGFsbG9jYXRpb24gZXJyb3IgcmVwb3J0aW5nIGluIGBmb2xpb19hbGxvY19zd2FwKClgIGJ5IGRpc3Rpbmd1aXNoaW5nIGJldHdlZW4gY2FzZXMgd2hlcmUgYSBsYXJnZSBmb2xpbyBhbGxvY2F0aW9uIGZhaWxlZCBkdWUgdG8gZm9saW8gc2l6ZSB2cy4gdG90YWwgc3dhcC9jZ3JvdXAgc3dhcCBleGhhdXN0aW9uLiBJdCBpbnRyb2R1Y2VzIGBwYWdlX2NvdW50ZXJfbWFyZ2luKClgIGFuZCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oKWAgYW5kIHVwZGF0ZXMgZm9saW8gc3BsaXR0aW5nIGRlY2lzaW9ucyBpbiBgbW0vdm1zY2FuLmNgIGFuZCBgbW0vc2htZW0uY2AuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IChLTVNBTik6IEFsbCBsb2NhbCB2YXJpYWJsZXMgKGByZXRgLCBgbWFyZ2luYCwgYG1gKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLlxuLSBNZW1vcnkgU2FmZXR5IFx1MDAyNiBMb2dpYyAoS0FTQU4vTG9ja2RlcCk6IEFueSByaXNrcyBpbiB0aGlzIHBhdGNoIHJldm9sdmUgYXJvdW5kIGNncm91cCBzd2FwIGFjY291bnRpbmcsIHBhZ2UgbG9ja2luZywgcmVmY291bnRpbmcsIG9yIGNvbnRyb2wtZmxvdyBsb2dpYyBpbiByZWNsYWltL3dyaXRlb3V0LCB3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IHN0YW5kYXJkIE1NIGFzc2VydGlvbnMsIEtBU0FOLCBhbmQgTG9ja2RlcC5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IHN3YXAgYWxsb2NhdGlvbiBsb2dpYyBieSByZWZpbmluZyBlcnJvciByZXBvcnRpbmcgaW4gZm9saW9fYWxsb2Nfc3dhcCgpIGFuZCBhZGRpbmcgcGFnZV9jb3VudGVyX21hcmdpbigpIGFuZCBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbigpIHRvIGluc3BlY3QgaGllcmFyY2hpY2FsIHN3YXAgbWFyZ2lucy4gVGhpcyBjaGFuZ2VzIGhvdyBsYXJnZSBmb2xpb3MgYXJlIHNwbGl0IGFuZCBoYW5kbGVkIGR1cmluZyBzd2Fwb3V0IGluIHNobWVtX3dyaXRlb3V0KCkgYW5kIHBhZ2UgcmVjbGFpbSBpbiBzaHJpbmtfZm9saW9fbGlzdCgpIHdoZW4gZ2xvYmFsIG9yIG1lbWNnIHN3YXAgbGltaXRzIGFyZSByZWFjaGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzE1MTZiZDY2MmY5MjgxNmFkNjM1MzdkZTFlZTdlYWY5ZTk1N2NiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDMwIDA0OjU5OjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXG5pbmRleCBkNjQ5YjZiYmJjODcxLi4wN2I3Y2IxMjI0OWM3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuQEAgLTY4LDYgJiM0Mzs2OCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxuIFx0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXHUwMDI2Y291bnRlci1cdTAwM2V1c2FnZSk7XG4gfVxuIFxuJiM0Mztsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcik7XG4gdm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgcGFnZV9jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiBib29sIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggMGY5NTNlZDljODYzMC4uYTcyZWNmMTJjMDBkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTUxMCw2ICYjNDM7NTEwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BcbiBcdF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7XG4gfVxuIFxuJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGV4dGVybiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiBleHRlcm4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiAjZWxzZVxuQEAgLTUyMyw2ICYjNDM7NTI0LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXG4ge1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gUEFHRV9DT1VOVEVSX01BWDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIGdldF9ucl9zd2FwX3BhZ2VzKCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA0YTE4ZWU0NTA5YWI2Li45YTM4MDQxMzJjMmViIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmNcbkBAIC01ODAxLDE1ICYjNDM7NTgwMSwzNSBAQCBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XG4gXG4tXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSlcbi1cdFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XG4tXHRmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKVxuLVx0XHRucl9zd2FwX3BhZ2VzID0gbWluX3QobG9uZywgbnJfc3dhcF9wYWdlcyxcbi1cdFx0XHRcdCAgICAgIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzd2FwLm1heCkgLVxuLVx0XHRcdFx0ICAgICAgcGFnZV9jb3VudGVyX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCkpO1xuJiM0MztcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhZG9fbWVtc3dfYWNjb3VudCgpKVxuJiM0MztcdFx0bnJfc3dhcF9wYWdlcyA9IG1pbihucl9zd2FwX3BhZ2VzLCBwYWdlX2NvdW50ZXJfbWFyZ2luKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApKTtcbiYjNDM7XG4gXHRyZXR1cm4gbnJfc3dhcF9wYWdlcztcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbiAtIGdldCBhIGZvbGlvJiMzOTtzIG1lbWNnIHN3YXAgbWFyZ2luXG4mIzQzOyAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtY2cgbWFyZ2luIGlzIHF1ZXJpZWRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBSZW1haW5pbmcgY2hhcmdlYWJsZSBwYWdlcyBpbiB0aGUgZm9saW8mIzM5O3MgbWVtY2cgaGllcmFyY2h5LlxuJiM0MzsgKi9cbiYjNDM7bG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuJiM0MztcdGxvbmcgbWFyZ2luO1xuJiM0MztcbiYjNDM7XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSB8fFxuJiM0MztcdCAgICAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gUEFHRV9DT1VOVEVSX01BWDtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuJiM0MztcdG1hcmdpbiA9IHBhZ2VfY291bnRlcl9tYXJnaW4oXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXJnaW47XG4mIzQzO31cbiYjNDM7XG4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jXG5pbmRleCA2NjFlMGYyYTUxMjdhLi40NTA1NDNmNGIzMThiIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9jb3VudGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfY291bnRlci5jXG5AQCAtNDYsNiAmIzQzOzQ2LDI2IEBAIHN0YXRpYyB2b2lkIHByb3BhZ2F0ZV9wcm90ZWN0ZWRfdXNhZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqYyxcbiBcdH1cbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBwYWdlX2NvdW50ZXJfbWFyZ2luIC0gcmVtYWluaW5nIHVzYWJsZSBzcGFjZSB3aXRoaW4gaGllcmFyY2hpY2FsIGxpbWl0c1xuJiM0MzsgKiBAY291bnRlcjogY291bnRlclxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IFRoZSBtaW5pbXVtIHZhbHVlIG9mIG1heCBtaW51cyB1c2FnZSBhY3Jvc3MgQGNvdW50ZXIgYW5kIGFsbCBvZlxuJiM0MzsgKiBpdHMgYW5jZXN0b3JzLiBUaGUgdmFsdWUgbWF5IGJlIG5lZ2F0aXZlIGR1cmluZyBhIGNvbmN1cnJlbnQgY2hhcmdlLlxuJiM0MzsgKi9cbiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4mIzQzO3tcbiYjNDM7XHRsb25nIG1hcmdpbiA9IFBBR0VfQ09VTlRFUl9NQVg7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdGxvbmcgbSA9IFJFQURfT05DRShjb3VudGVyLVx1MDAzZW1heCkgLSBwYWdlX2NvdW50ZXJfcmVhZChjb3VudGVyKTtcbiYjNDM7XG4mIzQzO1x0XHRtYXJnaW4gPSBtaW4obWFyZ2luLCBtKTtcbiYjNDM7XHR9IHdoaWxlICgoY291bnRlciA9IGNvdW50ZXItXHUwMDNlcGFyZW50KSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXJnaW47XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogcGFnZV9jb3VudGVyX2NhbmNlbCAtIHRha2UgcGFnZXMgb3V0IG9mIHRoZSBsb2NhbCBjb3VudGVyXG4gICogQGNvdW50ZXI6IGNvdW50ZXJcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggZGUxNDRhOWE5NTU4Yi4uODRiOGU5ZTA1OTczYiAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmNcbkBAIC0xNjEyLDcgJiM0MzsxNjEyLDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcbiBcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdHBnb2ZmX3QgaW5kZXg7XG4tXHRpbnQgbnJfcGFnZXM7XG4mIzQzO1x0aW50IG5yX3BhZ2VzLCByZXQ7XG4gXHRib29sIHNwbGl0ID0gZmFsc2U7XG4gXG4gXHRpZiAoKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IFNITUVNX0ZfTE9DS0VEKSB8fCBzYmluZm8tXHUwMDNlbm9zd2FwKVxuQEAgLTE2OTMsNyAmIzQzOzE2OTMsOCBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuIFx0fVxuIFxuLVx0aWYgKCFmb2xpb19hbGxvY19zd2FwKGZvbGlvKSkge1xuJiM0MztcdHJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pO1xuJiM0MztcdGlmICghcmV0KSB7XG4gXHRcdGJvb2wgZmlyc3Rfc3dhcHBlZCA9IHNobWVtX3JlY2FsY19pbm9kZShpbm9kZSwgMCwgbnJfcGFnZXMpO1xuIFx0XHRpbnQgZXJyb3I7XG4gXG5AQCAtMTc0Niw3ICYjNDM7MTc0Nyw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xuIFx0XHRnb3RvIHJlZGlydHk7XG4gXHR9XG4tXHRpZiAobnJfcGFnZXMgXHUwMDNlIDEpXG4mIzQzO1x0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiByZXQgPT0gLUUyQklHKVxuIFx0XHRnb3RvIHRyeV9zcGxpdDtcbiByZWRpcnR5OlxuIFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDUxZjVhNTI1YmI2MWMuLmRjMGNkMGNjNmY2MjYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMTczNSw3ICYjNDM7MTczNSw5IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiAgKiBzd2FwIGNhY2hlLlxuICAqXG4gICogQ29udGV4dDogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGZvbGlvIGxvY2suXG4tICogUmV0dXJuOiBXaGV0aGVyIHRoZSBmb2xpbyB3YXMgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUuXG4mIzQzOyAqIFJldHVybjogJTAgb24gc3VjY2VzcywgJS1FMkJJRyBpZiBzcGxpdHRpbmcgdGhlIGZvbGlvIG1pZ2h0IGFsbG93IHN3YXBvdXQsXG4mIzQzOyAqICUtRU5PU1BDIGlmIG5vIGdsb2JhbCBzd2FwIHNwYWNlIGlzIGF2YWlsYWJsZSwgb3IgJS1FTk9NRU0gaWYgc3BsaXR0aW5nXG4mIzQzOyAqIHdvdWxkIG5vdCBoZWxwLlxuICAqL1xuIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuQEAgLTE3NDcsMTEgJiM0MzsxNzQ5LDExIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHRpZiAob3JkZXIpIHtcbiBcdFx0Lypcbi1cdFx0ICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZCxcbi1cdFx0ICogdGhlIGNhbGxlciBzaG91bGQgc3BsaXQgdGhlIGZvbGlvIGFuZCB0cnkgYWdhaW4uXG4mIzQzO1x0XHQgKiBSZWplY3QgbGFyZ2UgYWxsb2NhdGlvbiB3aGVuIFRIUF9TV0FQIGlzIGRpc2FibGVkLiBDaGVjayBiZWxvd1xuJiM0MztcdFx0ICogd2hldGhlciBzcGxpdHRpbmcgYW5kIHJldHJ5aW5nIGNhbiBtYWtlIHByb2dyZXNzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19USFBfU1dBUCkpXG4tXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0XHRcdGdvdG8gZmFpbGVkO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBBbGxvY2F0aW9uIHNpemUgc2hvdWxkIG5ldmVyIGV4Y2VlZCBjbHVzdGVyIHNpemVcbkBAIC0xNzU5LDcgJiM0MzsxNzYxLDcgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0ICovXG4gXHRcdGlmIChzaXplIFx1MDAzZSBTV0FQRklMRV9DTFVTVEVSKSB7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFKDEpO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIGZhaWxlZDtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTE3NzUsMTMgJiM0MzsxNzc3LDIzIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHR9XG4gXG4gXHQvKiBOZWVkIHRvIGNhbGwgdGhpcyBldmVuIGlmIGFsbG9jYXRpb24gZmFpbGVkLCBmb3IgTUVNQ0dfU1dBUF9GQUlMLiAqL1xuLVx0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpIHtcbiBcdFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xuJiM0MztcdFx0Z290byBmYWlsZWQ7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKHVubGlrZWx5KCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZmFpbGVkO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztmYWlsZWQ6XG4mIzQzO1x0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9TUEM7XG4mIzQzO1x0aWYgKG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGZvbGlvKSBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG9yZGVyID8gLUUyQklHIDogLUVOT01FTTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggZmRkMTMyOTlhMDRhOS4uNmU3NzBhMDhlMjg4MCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTEyNTksNiAmIzQzOzEyNTksOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdCAqL1xuIFx0XHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcbiYjNDM7XHRcdFx0aW50IHJldDtcbiYjNDM7XG4gXHRcdFx0aWYgKCEoc2MtXHUwMDNlZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0lPKSlcbiBcdFx0XHRcdGdvdG8ga2VlcF9sb2NrZWQ7XG4gXHRcdFx0aWYgKGZvbGlvX21heWJlX2RtYV9waW5uZWQoZm9saW8pKVxuQEAgLTEyNzcsMTEgJiM0MzsxMjc5LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbiBcdFx0XHRcdCAgICBzcGxpdF9mb2xpb190b19saXN0KGZvbGlvLCBmb2xpb19saXN0KSlcbiBcdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWQ7XG4gXHRcdFx0fVxuLVx0XHRcdGlmIChmb2xpb19hbGxvY19zd2FwKGZvbGlvKSkge1xuJiM0MztcdFx0XHRyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTtcbiYjNDM7XHRcdFx0aWYgKHJldCkge1xuIFx0XHRcdFx0aW50IF9fbWF5YmVfdW51c2VkIG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuIFxuIFx0XHRcdFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcbiBcdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWRfc3BsaXQ7XG4mIzQzO1x0XHRcdFx0aWYgKHJldCAhPSAtRTJCSUcpXG4mIzQzO1x0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcbiBcdFx0XHRcdC8qIEZhbGxiYWNrIHRvIHN3YXAgbm9ybWFsIHBhZ2VzICovXG4gXHRcdFx0XHRpZiAoc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7VEhQX1NXQVAmIzM0OywKICAgICYjMzQ7U0hNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19hbGxvY19zd2FwJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luJiMzNDssCiAgICAmIzM0O3BhZ2VfY291bnRlcl9tYXJnaW4mIzM0OywKICAgICYjMzQ7c2htZW1fd3JpdGVvdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgc3dhcCBhbGxvY2F0aW9uIGxvZ2ljIGJ5IHJlZmluaW5nIGVycm9yIHJlcG9ydGluZyBpbiBmb2xpb19hbGxvY19zd2FwKCkgYW5kIGFkZGluZyBwYWdlX2NvdW50ZXJfbWFyZ2luKCkgYW5kIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKCkgdG8gaW5zcGVjdCBoaWVyYXJjaGljYWwgc3dhcCBtYXJnaW5zLiBUaGlzIGNoYW5nZXMgaG93IGxhcmdlIGZvbGlvcyBhcmUgc3BsaXQgYW5kIGhhbmRsZWQgZHVyaW5nIHN3YXBvdXQgaW4gc2htZW1fd3JpdGVvdXQoKSBhbmQgcGFnZSByZWNsYWltIGluIHNocmlua19mb2xpb19saXN0KCkgd2hlbiBnbG9iYWwgb3IgbWVtY2cgc3dhcCBsaW1pdHMgYXJlIHJlYWNoZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMTUxNmJkNjYyZjkyODE2YWQ2MzUzN2RlMWVlN2VhZjllOTU3Y2I5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMzAgMDQ6NTk6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaAppbmRleCBkNjQ5YjZiYmJjODcxLi4wN2I3Y2IxMjI0OWM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgKQEAgLTY4LDYgJiM0Mzs2OCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKQogCXJldHVybiBhdG9taWNfbG9uZ19yZWFkKCZhbXA7Y291bnRlci0mZ3Q7dXNhZ2UpOwogfQogCiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpOwogdm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogdm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogYm9vbCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCAwZjk1M2VkOWM4NjMwLi5hNzJlY2YxMmMwMGRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtNTEwLDYgJiM0Mzs1MTAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcAogCV9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7CiB9CiAKJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogZXh0ZXJuIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7CiAjZWxzZQpAQCAtNTIzLDYgJiM0Mzs1MjQsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwKIHsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDRhMThlZTQ1MDlhYjYuLjlhMzgwNDEzMmMyZWIgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTU4MDEsMTUgJiM0Mzs1ODAxLDM1IEBAIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJbG9uZyBucl9zd2FwX3BhZ2VzID0gZ2V0X25yX3N3YXBfcGFnZXMoKTsKIAotCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgZG9fbWVtc3dfYWNjb3VudCgpKQotCQlyZXR1cm4gbnJfc3dhcF9wYWdlczsKLQlmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKQotCQlucl9zd2FwX3BhZ2VzID0gbWluX3QobG9uZywgbnJfc3dhcF9wYWdlcywKLQkJCQkgICAgICBSRUFEX09OQ0UobWVtY2ctJmd0O3N3YXAubWF4KSAtCi0JCQkJICAgICAgcGFnZV9jb3VudGVyX3JlYWQoJmFtcDttZW1jZy0mZ3Q7c3dhcCkpOwomIzQzOwlpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSAmYW1wOyZhbXA7ICFkb19tZW1zd19hY2NvdW50KCkpCiYjNDM7CQlucl9zd2FwX3BhZ2VzID0gbWluKG5yX3N3YXBfcGFnZXMsIHBhZ2VfY291bnRlcl9tYXJnaW4oJmFtcDttZW1jZy0mZ3Q7c3dhcCkpOwomIzQzOwogCXJldHVybiBucl9zd2FwX3BhZ2VzOwogfQogCiYjNDM7LyoqCiYjNDM7ICogbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4gLSBnZXQgYSBmb2xpbyYjMzk7cyBtZW1jZyBzd2FwIG1hcmdpbgomIzQzOyAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtY2cgbWFyZ2luIGlzIHF1ZXJpZWQKJiM0MzsgKgomIzQzOyAqIFJldHVybjogUmVtYWluaW5nIGNoYXJnZWFibGUgcGFnZXMgaW4gdGhlIGZvbGlvJiMzOTtzIG1lbWNnIGhpZXJhcmNoeS4KJiM0MzsgKi8KJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CWxvbmcgbWFyZ2luOwomIzQzOwomIzQzOwlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSB8fAomIzQzOwkgICAgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKQomIzQzOwkJcmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7CiYjNDM7CW1hcmdpbiA9IHBhZ2VfY291bnRlcl9tYXJnaW4oJmFtcDttZW1jZy0mZ3Q7c3dhcCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gbWFyZ2luOwomIzQzO30KJiM0MzsKIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jCmluZGV4IDY2MWUwZjJhNTEyN2EuLjQ1MDU0M2Y0YjMxOGIgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfY291bnRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfY291bnRlci5jCkBAIC00Niw2ICYjNDM7NDYsMjYgQEAgc3RhdGljIHZvaWQgcHJvcGFnYXRlX3Byb3RlY3RlZF91c2FnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjLAogCX0KIH0KIAomIzQzOy8qKgomIzQzOyAqIHBhZ2VfY291bnRlcl9tYXJnaW4gLSByZW1haW5pbmcgdXNhYmxlIHNwYWNlIHdpdGhpbiBoaWVyYXJjaGljYWwgbGltaXRzCiYjNDM7ICogQGNvdW50ZXI6IGNvdW50ZXIKJiM0MzsgKgomIzQzOyAqIFJldHVybjogVGhlIG1pbmltdW0gdmFsdWUgb2YgbWF4IG1pbnVzIHVzYWdlIGFjcm9zcyBAY291bnRlciBhbmQgYWxsIG9mCiYjNDM7ICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS4KJiM0MzsgKi8KJiM0Mztsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcikKJiM0Mzt7CiYjNDM7CWxvbmcgbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJbG9uZyBtID0gUkVBRF9PTkNFKGNvdW50ZXItJmd0O21heCkgLSBwYWdlX2NvdW50ZXJfcmVhZChjb3VudGVyKTsKJiM0MzsKJiM0MzsJCW1hcmdpbiA9IG1pbihtYXJnaW4sIG0pOwomIzQzOwl9IHdoaWxlICgoY291bnRlciA9IGNvdW50ZXItJmd0O3BhcmVudCkpOwomIzQzOwomIzQzOwlyZXR1cm4gbWFyZ2luOwomIzQzO30KJiM0MzsKIC8qKgogICogcGFnZV9jb3VudGVyX2NhbmNlbCAtIHRha2UgcGFnZXMgb3V0IG9mIHRoZSBsb2NhbCBjb3VudGVyCiAgKiBAY291bnRlcjogY291bnRlcgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggZGUxNDRhOWE5NTU4Yi4uODRiOGU5ZTA1OTczYiAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0xNjEyLDcgJiM0MzsxNjEyLDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7CiAJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLSZndDtpX3NiKTsKIAlwZ29mZl90IGluZGV4OwotCWludCBucl9wYWdlczsKJiM0MzsJaW50IG5yX3BhZ2VzLCByZXQ7CiAJYm9vbCBzcGxpdCA9IGZhbHNlOwogCiAJaWYgKChpbmZvLSZndDtmbGFncyAmYW1wOyBTSE1FTV9GX0xPQ0tFRCkgfHwgc2JpbmZvLSZndDtub3N3YXApCkBAIC0xNjkzLDcgJiM0MzsxNjkzLDggQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTsKIAl9CiAKLQlpZiAoIWZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7CiYjNDM7CXJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pOwomIzQzOwlpZiAoIXJldCkgewogCQlib29sIGZpcnN0X3N3YXBwZWQgPSBzaG1lbV9yZWNhbGNfaW5vZGUoaW5vZGUsIDAsIG5yX3BhZ2VzKTsKIAkJaW50IGVycm9yOwogCkBAIC0xNzQ2LDcgJiM0MzsxNzQ3LDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7CiAJCWdvdG8gcmVkaXJ0eTsKIAl9Ci0JaWYgKG5yX3BhZ2VzICZndDsgMSkKJiM0MzsJaWYgKG5yX3BhZ2VzICZndDsgMSAmYW1wOyZhbXA7IHJldCA9PSAtRTJCSUcpCiAJCWdvdG8gdHJ5X3NwbGl0OwogcmVkaXJ0eToKIAlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDUxZjVhNTI1YmI2MWMuLmRjMGNkMGNjNmY2MjYgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtMTczNSw3ICYjNDM7MTczNSw5IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKICAqIHN3YXAgY2FjaGUuCiAgKgogICogQ29udGV4dDogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGZvbGlvIGxvY2suCi0gKiBSZXR1cm46IFdoZXRoZXIgdGhlIGZvbGlvIHdhcyBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZS4KJiM0MzsgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsICUtRTJCSUcgaWYgc3BsaXR0aW5nIHRoZSBmb2xpbyBtaWdodCBhbGxvdyBzd2Fwb3V0LAomIzQzOyAqICUtRU5PU1BDIGlmIG5vIGdsb2JhbCBzd2FwIHNwYWNlIGlzIGF2YWlsYWJsZSwgb3IgJS1FTk9NRU0gaWYgc3BsaXR0aW5nCiYjNDM7ICogd291bGQgbm90IGhlbHAuCiAgKi8KIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CkBAIC0xNzQ3LDExICYjNDM7MTc0OSwxMSBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiAJaWYgKG9yZGVyKSB7CiAJCS8qCi0JCSAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQsCi0JCSAqIHRoZSBjYWxsZXIgc2hvdWxkIHNwbGl0IHRoZSBmb2xpbyBhbmQgdHJ5IGFnYWluLgomIzQzOwkJICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZC4gQ2hlY2sgYmVsb3cKJiM0MzsJCSAqIHdoZXRoZXIgc3BsaXR0aW5nIGFuZCByZXRyeWluZyBjYW4gbWFrZSBwcm9ncmVzcy4KIAkJICovCiAJCWlmICghSVNfRU5BQkxFRChDT05GSUdfVEhQX1NXQVApKQotCQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CQkJZ290byBmYWlsZWQ7CiAKIAkJLyoKIAkJICogQWxsb2NhdGlvbiBzaXplIHNob3VsZCBuZXZlciBleGNlZWQgY2x1c3RlciBzaXplCkBAIC0xNzU5LDcgJiM0MzsxNzYxLDcgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbykKIAkJICovCiAJCWlmIChzaXplICZndDsgU1dBUEZJTEVfQ0xVU1RFUikgewogCQkJVk1fV0FSTl9PTl9PTkNFKDEpOwotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJZ290byBmYWlsZWQ7CiAJCX0KIAl9CiAKQEAgLTE3NzUsMTMgJiM0MzsxNzc3LDIzIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJfQogCiAJLyogTmVlZCB0byBjYWxsIHRoaXMgZXZlbiBpZiBhbGxvY2F0aW9uIGZhaWxlZCwgZm9yIE1FTUNHX1NXQVBfRkFJTC4gKi8KLQlpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSkKJiM0MzsJaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpIHsKIAkJc3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pOwomIzQzOwkJZ290byBmYWlsZWQ7CiYjNDM7CX0KIAogCWlmICh1bmxpa2VseSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlnb3RvIGZhaWxlZDsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO2ZhaWxlZDoKJiM0MzsJaWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiAtRU5PU1BDOwomIzQzOwlpZiAobWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oZm9saW8pICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0dXJuIG9yZGVyID8gLUUyQklHIDogLUVOT01FTTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGZkZDEzMjk5YTA0YTkuLjZlNzcwYTA4ZTI4ODAgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xMjU5LDYgJiM0MzsxMjU5LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LAogCQkgKi8KIAkJaWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJmFtcDsmYW1wOyBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICZhbXA7JmFtcDsKIAkJCQkhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7CiYjNDM7CQkJaW50IHJldDsKJiM0MzsKIAkJCWlmICghKHNjLSZndDtnZnBfbWFzayAmYW1wOyBfX0dGUF9JTykpCiAJCQkJZ290byBrZWVwX2xvY2tlZDsKIAkJCWlmIChmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKSkKQEAgLTEyNzcsMTEgJiM0MzsxMjc5LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwKIAkJCQkgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpCiAJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwogCQkJfQotCQkJaWYgKGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7CiYjNDM7CQkJcmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7CiYjNDM7CQkJaWYgKHJldCkgewogCQkJCWludCBfX21heWJlX3VudXNlZCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTsKIAogCQkJCWlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpCiAJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkX3NwbGl0OwomIzQzOwkJCQlpZiAocmV0ICE9IC1FMkJJRykKJiM0MzsJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwogCQkJCS8qIEZhbGxiYWNrIHRvIHN3YXAgbm9ybWFsIHBhZ2VzICovCiAJCQkJaWYgKHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKQogCQkJCQlnb3RvIGFjdGl2YXRlX2xvY2tlZDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg1MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDU4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhlIHBhdGNoIHRvdWNoZXMgYSBidW5jaCBvZiBrZXkgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXM6IGBwYWdlX2NvdW50ZXIuaGAsIGBzd2FwLmhgLCBgbWVtY29udHJvbC5jYCwgYHBhZ2VfY291bnRlci5jYCwgYHNobWVtLmNgLCBgc3dhcGZpbGUuY2AsIGFuZCBgdm1zY2FuLmNgLiBUaGF0IGdldHMgbXkgYXR0ZW50aW9uIGltbWVkaWF0ZWx5OyBhbnl0aGluZyB0b3VjaGluZyB0aGUgY29yZSBNTSBpcyBhbHdheXMgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNoYW5nZXMgdGhlbXNlbHZlcy4gVGhlcmUmIzM5O3MgYSBuZXcgZnVuY3Rpb24sIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgd2hpY2ggbG9va3MgbGlrZSBpdCBjYWxjdWxhdGVzIHRoZSByZW1haW5pbmcgdXNhYmxlIHNwYWNlIHdpdGhpbiBoaWVyYXJjaGljYWwgbGltaXRzLiBJdCYjMzk7cyB1c2VkIGluIGEgcmVmYWN0b3JlZCBgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlc2AsIGFuZCBhbHNvIHRoZXJlJiMzOTtzIGEgbmV3IGZ1bmN0aW9uIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAuIFRob3NlIHNlZW0gcmVsYXRlZCB0byBtZW1jZyBzd2FwIGFjY291bnRpbmcuIFRoZW4gSSBzZWUgdGhhdCBgc2htZW1fd3JpdGVvdXRgIG5vdyBjaGVja3MgdGhlIHJldHVybiB2YWx1ZSBvZiBgZm9saW9fYWxsb2Nfc3dhcGAsIGFuZCBwYXJ0aWN1bGFybHkgdGhlIGNhc2Ugb2YgYG5yX3BhZ2VzICZndDsgMSAmYW1wOyZhbXA7IHJldCA9PSAtRTJCSUdgLgoKYGZvbGlvX2FsbG9jX3N3YXBgIHNlZW1zIHRvIGJlIHRoZSBiaWcgY2hhbmdlLCBhbHRlcmluZyBpdHMgcmV0dXJuIHZhbHVlcyB0byBzaWduYWwgbW9yZSBncmFudWxhciByZWFzb25zIGZvciBmYWlsdXJlLiBJdCYjMzk7cyBub3QganVzdCBzdWNjZXNzL2ZhaWx1cmUgYW55bW9yZTsgbm93IGl0IHJldHVybnMgc3BlY2lmaWMgZXJyb3IgY29kZXMgbGlrZSBgLUUyQklHYCwgYC1FTk9TUENgLCBhbmQgYC1FTk9NRU1gLiBUaGUgbG9naWMgd2l0aGluIGBmb2xpb19hbGxvY19zd2FwYCBpdHNlbGYgaGFzIGJlZW4gYmVlZmVkIHVwIHRvIGNoZWNrIHN3YXAgbWFyZ2lucyBhbmQgbWVtY2cgbWFyZ2lucy4gQW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgaXMgbm93IGNoZWNraW5nIGByZXRgIGZyb20gYGZvbGlvX2FsbG9jX3N3YXBgIGFzIHdlbGwuCgpUaGUgaW1wbGljYXRpb25zIGFyZSBjbGVhcjogdGhpcyBwYXRjaCBpcyBkZWVwbHkgaW50ZXJ0d2luZWQgd2l0aCBzd2FwIGFsbG9jYXRpb24sIHRoZSBzcGxpdHRpbmcgb2YgbGFyZ2UgZm9saW9zLCBtZW1jZyBzd2FwIGFjY291bnRpbmcgYW5kIHRocm90dGxpbmcsIHNobWVtIHN3YXBvdXQsIGFuZCBldmVuIHBhZ2UgcmVjbGFpbSB0aHJvdWdoIGBzaHJpbmtfZm9saW9fbGlzdGAuIFRoaXMgaXMgYWxsIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIGluZmx1ZW5jaW5nIGV4ZWN1dGlvbiBmbG93IGluIHJlc3BvbnNlIHRvIG1lbW9yeSBwcmVzc3VyZXMgYW5kLCBpbXBvcnRhbnRseSwgYWx0ZXJpbmcgZXJyb3IgY29kZXMuCgpJcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGNydWNpYWwgbW0gbG9naWMgZGVhbGluZyB3aXRoIHN3YXBvdXQsIHNwbGl0dGluZyBvZiBmb2xpb3MgdW5kZXIgc3dhcCBwcmVzc3VyZSwgYW5kIG1lbWNnIGxpbWl0cy4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCAoUUVNVSwgc3l6a2FsbGVyKS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gY29udHJvbCBmbG93IGFuZCByZXR1cm4gY29kZXMgaW4gdGhlIGtlcm5lbCBhcmUgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyB0aGF0IGZ1enppbmcgaXMgZGVzaWduZWQgdG8gdW5jb3ZlciBzdWJ0bGUgZXJyb3JzIG9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLgoKVGhlIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBjb25maWdzIGFuZCBmb2N1cyBteSBzeW1ib2wgYW5hbHlzaXMgYXBwcm9wcmlhdGVseS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgYW5kIGlkZW50aWZ5IHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGVuYWJsZSBvciBhZmZlY3QgdGhpcyBjb2RlLCBzbyBJIGNhbiB0YXJnZXQgdGhlIGZ1enppbmcgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fYWxsb2Nfc3dhcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NobWVtLmM9MTYwNz1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vc2htZW0uYy0xNjk1LVxubW0vc2htZW0uYzoxNjk2Olx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XG5tbS9zaG1lbS5jLTE2OTctXHRpZiAoIXJldCkge1xuLS1cbm1tL3N3YXAuaD0yMjU9ZXh0ZXJuIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApO1xuLS1cbm1tL3N3YXAuaC0yMzMtICpcbm1tL3N3YXAuaDoyMzQ6ICogZm9saW9fYWxsb2Nfc3dhcCgpOiB0aGUgZW50cnkgcG9pbnQgZm9yIGEgZm9saW8gdG8gYmUgc3dhcHBlZFxubW0vc3dhcC5oLTIzNS0gKiBvdXQuIEl0IGFsbG9jYXRlcyBzd2FwIHNsb3RzIGFuZCBwaW5zIHRoZSBzbG90cyB3aXRoIHN3YXAgY2FjaGUuXG4tLVxubW0vc3dhcC5oLTI0NS0gKi9cbm1tL3N3YXAuaDoyNDY6aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9zd2FwLmgtMjQ3LWludCBmb2xpb19kdXBfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4tLVxubW0vc3dhcC5oPTM2MD1zdGF0aWMgaW5saW5lIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpfX3N3YXBfZW50cnlfdG9faW5mbyhzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5tbS9zd2FwLmgtMzY0LVxubW0vc3dhcC5oOjM2NTpzdGF0aWMgaW5saW5lIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9zd2FwLmgtMzY2LXtcbi0tXG5tbS9zd2FwZmlsZS5jPTkwPXN0YXRpYyBQTElTVF9IRUFEKHN3YXBfYWN0aXZlX2hlYWQpO1xuLS1cbm1tL3N3YXBmaWxlLmMtOTQtICogcHJvdGVjdGVkIHdpdGggc3dhcF9hdmFpbF9sb2NrLCBvcmRlcmVkIGJ5IHByaW9yaXR5LlxubW0vc3dhcGZpbGUuYzo5NTogKiBUaGlzIGlzIHVzZWQgYnkgZm9saW9fYWxsb2Nfc3dhcCgpIGluc3RlYWQgb2Ygc3dhcF9hY3RpdmVfaGVhZFxubW0vc3dhcGZpbGUuYy05Ni0gKiBiZWNhdXNlIHN3YXBfYWN0aXZlX2hlYWQgaW5jbHVkZXMgYWxsIHN3YXBfaW5mb19zdHJ1Y3RzLFxubW0vc3dhcGZpbGUuYzo5NzogKiBidXQgZm9saW9fYWxsb2Nfc3dhcCgpIGRvZXNuJiMzOTt0IG5lZWQgdG8gbG9vayBhdCBmdWxsIG9uZXMuXG5tbS9zd2FwZmlsZS5jLTk4LSAqIFRoaXMgdXNlcyBpdHMgb3duIGxvY2sgaW5zdGVhZCBvZiBzd2FwX2xvY2sgYmVjYXVzZSB3aGVuIGFcbi0tXG5tbS9zd2FwZmlsZS5jPTkxMT1zdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTkyNC1cdC8qXG5tbS9zd2FwZmlsZS5jOjkyNTpcdCAqIEFsbCBtbSBzd2FwIGFsbG9jYXRpb24gc3RhcnRzIHdpdGggYSBmb2xpbyAoZm9saW9fYWxsb2Nfc3dhcCksXG5tbS9zd2FwZmlsZS5jLTkyNi1cdCAqIGl0JiMzOTtzIGFsc28gdGhlIG9ubHkgYWxsb2NhdGlvbiBwYXRoIGZvciBsYXJnZSBvcmRlcnMgYWxsb2NhdGlvbi5cbi0tXG5tbS9zd2FwZmlsZS5jPTE2OTU9c3RhdGljIGludCBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMTczMC0vKipcbm1tL3N3YXBmaWxlLmM6MTczMTogKiBmb2xpb19hbGxvY19zd2FwIC0gYWxsb2NhdGUgc3dhcCBzcGFjZSBmb3IgYSBmb2xpb1xubW0vc3dhcGZpbGUuYy0xNzMyLSAqIEBmb2xpbzogZm9saW8gd2Ugd2FudCB0byBtb3ZlIHRvIHN3YXBcbi0tXG5tbS9zd2FwZmlsZS5jLTE3NDEtICovXG5tbS9zd2FwZmlsZS5jOjE3NDI6aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3N3YXBmaWxlLmMtMTc0My17XG4tLVxubW0vc3dhcGZpbGUuYz0yODA5PXN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjg5Mi1cdCAqIGFuZCBldmVuIHNobWVtX3dyaXRlb3V0KCkgY291bGQgaGF2ZSBiZWVuIHByZWVtcHRlZCBhZnRlclxubW0vc3dhcGZpbGUuYzoyODkzOlx0ICogZm9saW9fYWxsb2Nfc3dhcCgpLCB0ZW1wb3JhcmlseSBoaWRpbmcgdGhhdCBzd2FwLiAgSXQmIzM5O3MgZWFzeVxubW0vc3dhcGZpbGUuYy0yODk0LVx0ICogYW5kIHJvYnVzdCAodGhvdWdoIGNwdS1pbnRlbnNpdmUpIGp1c3QgdG8ga2VlcCByZXRyeWluZy5cbi0tXG5tbS92bXNjYW4uYz0xMDU4PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xMjgxLVx0XHRcdH1cbm1tL3Ztc2Nhbi5jOjEyODI6XHRcdFx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XG5tbS92bXNjYW4uYy0xMjgzLVx0XHRcdGlmIChyZXQpIHtcbi0tXG5tbS92bXNjYW4uYy0xMzAwLVx0XHRcdFx0Y291bnRfbXRocF9zdGF0KG9yZGVyLCBNVEhQX1NUQVRfU1dQT1VUX0ZBTExCQUNLKTtcbm1tL3Ztc2Nhbi5jOjEzMDE6XHRcdFx0XHRpZiAoZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpXG5tbS92bXNjYW4uYy0xMzAyLVx0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZF9zcGxpdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTAxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgU3dhcCBGb2xpbyBBbGxvY2F0aW9uIGFuZCBNZW1jZyBJbnRlcmFjdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZW5hYmxpbmcgY29uZGl0aW9ucyBmb3IgYGZvbGlvX2FsbG9jX3N3YXBgIGFuZCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBrbm93IHRoZXNlIGFyZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBzd2FwcGluZywgcGFydGljdWxhcmx5IGluIGNvbmp1bmN0aW9uIHdpdGggbWVtb3J5IGNncm91cHMuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIHN3YXAgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGhlYWRlciBmaWxlcy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBjaGVjayBgaW5jbHVkZS9saW51eC9zd2FwLmhgIGZpcnN0OyBvZnRlbiB0aGUgcHVibGljLWZhY2luZyBkZWZpbml0aW9ucyBhbmQgbWFjcm9zIGFyZSBob3VzZWQgdGhlcmUuIElmIHRoYXQmIzM5O3Mgbm90IHlpZWxkaW5nIHRoZSByaWdodCBjbHVlcywgSSYjMzk7bGwgc3dpdGNoIG92ZXIgdG8gYG1tL3N3YXAuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgbG93ZXItbGV2ZWwgaW1wbGVtZW50YXRpb24gZGV0YWlscywgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgcGVyaGFwcyBtb3JlIG51YW5jZWQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMgcmVsYXRlZCB0byBlbmFibGluZyB0aGVzZSBmZWF0dXJlcy4gS25vd2luZyB0aGUga2VybmVsJiMzOTtzIHNvdXJjZSBsYXlvdXQgc28gd2VsbCwgSSYjMzk7bSBjb25maWRlbnQgSSYjMzk7bGwgcGlucG9pbnQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHF1aWNrbHkuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aG9zZSBmaWxlcyBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gNTAxOlx0XHRcdHJldHVybiAwO1xuIDUwMjpcdFx0cmV0dXJuIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pO1xuIDUwMzpcdH1cbiA1MDQ6XHRcbiA1MDU6XHRleHRlcm4gdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKTtcbiA1MDY6XHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4gNTA3Olx0e1xuIDUwODpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiA1MDk6XHRcdFx0cmV0dXJuO1xuIDUxMDpcdFx0X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoaWQsIG5yX3BhZ2VzKTtcbiA1MTE6XHR9XG4gNTEyOlx0XG4gNTEzOlx0bG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiA1MTQ6XHRleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gNTE1Olx0ZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gNTE2Olx0I2Vsc2VcbiA1MTc6XHRzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDUxODpcdHtcbiA1MTk6XHRcdHJldHVybiAwO1xuIDUyMDpcdH1cbiA1MjE6XHRcbiA1MjI6XHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLFxuIDUyMzpcdFx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuIDUyNDpcdHtcbiA1MjU6XHR9XG4gNTI2Olx0XG4gNTI3Olx0c3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gNTI4Olx0e1xuIDUyOTpcdFx0cmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7XG4gNTMwOlx0fVxuIDUzMTpcdFxuIDUzMjpcdHN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiA1MzM6XHR7XG4gNTM0Olx0XHRyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTtcbiA1MzU6XHR9XG4gNTM2Olx0XG4gNTM3Olx0c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gNTM4Olx0e1xuIDUzOTpcdFx0cmV0dXJuIHZtX3N3YXBfZnVsbCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMzMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgbGluZSA1MDAtaXNoIG9mIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBuZXJ2b3VzIHN5c3RlbSBmb3IgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBzd2FwcGluZywgc28gSSBoYXZlIGEgaHVuY2ggdGhhdCBzb21ldGhpbmcgaW50ZXJlc3Rpbmcgd2lsbCBiZSB0aGVyZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBjb3JlIGRhdGEgc3RydWN0dXJlIHJlbGF0ZWQgdG8gc3dhcCBlbnRyeSBtYW5hZ2VtZW50LCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMsIG9yIHBlcmhhcHMgc29tZSBrZXkgZnVuY3Rpb24gZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBzd2FwIGluL291dCBvcGVyYXRpb25zLiBJdCBjb3VsZCBiZSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgc3dhcCBjYWNoZSBpdHNlbGYuIE9yIG1heWJlIGFuIGludGVyZXN0aW5nIGRlZmluaXRpb24gb2Ygc29tZSBzb3J0LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCBnb29kaWVzIGF3YWl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2FwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ3MDpcdFxuIDQ3MTpcdHN0YXRpYyBpbmxpbmUgaW50IGFkZF9zd2FwX2V4dGVudChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxuIDQ3MjpcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BhZ2UsXG4gNDczOlx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHNlY3Rvcl90IHN0YXJ0X2Jsb2NrKVxuIDQ3NDpcdHtcbiA0NzU6XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ3NjpcdH1cbiA0Nzc6XHQjZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cbiA0Nzg6XHQjaWZkZWYgQ09ORklHX01FTUNHXG4gNDc5Olx0dm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcbiA0ODA6XHQjZW5kaWZcbiA0ODE6XHRcbiA0ODI6XHQjaWYgZGVmaW5lZChDT05GSUdfU1dBUCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX01FTUNHKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQkxLX0NHUk9VUClcbiA0ODM6XHR2b2lkIF9fZm9saW9fdGhyb3R0bGVfc3dhcHJhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKTtcbiA0ODQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fdGhyb3R0bGVfc3dhcHJhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuIDQ4NTpcdHtcbiA0ODY6XHRcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gNDg3Olx0XHRcdHJldHVybjtcbiA0ODg6XHRcdF9fZm9saW9fdGhyb3R0bGVfc3dhcHJhdGUoZm9saW8sIGdmcCk7XG4gNDg5Olx0fVxuIDQ5MDpcdCNlbHNlXG4gNDkxOlx0c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbiA0OTI6XHR7XG4gNDkzOlx0fVxuIDQ5NDpcdCNlbmRpZlxuIDQ5NTpcdFxuIDQ5NjpcdCNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NXQVApXG4gNDk3Olx0aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gNDk4Olx0c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiA0OTk6XHR7XG4gNTAwOlx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIDUwMTpcdFx0XHRyZXR1cm4gMDtcbiA1MDI6XHRcdHJldHVybiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKTtcbiA1MDM6XHR9XG4gNTA0Olx0XG4gNTA1Olx0ZXh0ZXJuIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcyk7XG4gNTA2Olx0c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuIDUwNzpcdHtcbiA1MDg6XHRcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gNTA5Olx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTA4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWcgb3B0aW9ucyDigJMgbGV0JiMzOTtzIHNlZSBpZiBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjayBoZXJlLi4uCgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZTogTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgYENPTkZJR19NRU1DR2AgKG1lbW9yeSBjZ3JvdXBzKSBhbmQgYENPTkZJR19TV0FQYCBhcmUgb2J2aW91c2x5IGZ1bmRhbWVudGFsLiBHb3R0YSBnZXQgdGhvc2UgcmlnaHQgdG8gaGF2ZSBhIHVzYWJsZSBzeXN0ZW0hIEJ1dCwgSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFoZWFkLCBhbmQgd2FudCB0byBjb25zaWRlciBob3cgdG8gb3B0aW1pemUgc3dhcHBpbmcgYW5kIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMuIFdoYXQmIzM5O3MgdGhlIHJlbGF0aW9uc2hpcCwgc3BlY2lmaWNhbGx5LCBiZXR3ZWVuIGBDT05GSUdfVEhQX1NXQVBgIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYD8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgaGF2aW5nIG9uZSB3aXRob3V0IHRoZSBvdGhlciBtYWtlcyBzZW5zZSwgb3IgaWYgdGhlaXIgaW50ZXJwbGF5IGlzIGVzc2VudGlhbCB0byBnZXQgdGhlIHN5c3RlbSBiZWhhdmluZyBhcyBJIGV4cGVjdC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhwbG9yZSB0aGVpciBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRIUF9TV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz05NjQ9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTk2NS1cbm1tL0tjb25maWc6OTY2OmNvbmZpZyBUSFBfU1dBUFxubW0vS2NvbmZpZy05NjctXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIHplcm8gaW4gb24gYG1tL0tjb25maWdgLiBJJiMzOTt2ZSBnb3QgYSBodW5jaCBhYm91dCBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgbGluZSA5NjYgaW4gYG1tL0tjb25maWdgIGlzIG9mdGVuIGEgZ29vZCBwbGFjZSB0byBzdGFydCB3aGVuIEkmIzM5O20gY2hhc2luZyBzb21ldGhpbmcgc3BlY2lmaWMuIENvdWxkIGJlIGEgZmVhdHVyZSBmbGFnLCBhIGRlcGVuZGVuY3ksIG9yIGEgZGVmYXVsdCBzZXR0aW5nIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIHRoZXJlIGFuZCBzZWUgd2hhdCBpcyBhdmFpbGFibGUgd2l0aGluIHRoYXQgbGluZSBvZiBjb2RlLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIGFyZWEgb2YgdGhlIGtlcm5lbCBjb25maWcgaW4gbW9yZSBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTU1Olx0XHQgIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbnMuXG4gOTU2Olx0XG4gOTU3Olx0XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcbiA5NTg6XHRcdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiA5NTk6XHRcdGhlbHBcbiA5NjA6XHRcdCAgRW5hYmxlIGh1Z2VwYWdlIGFsbG9jYXRpb24gZm9yIHRoZSB0bXBmcyBtb3VudCBleGNsdXNpdmVseSB3aGVuXG4gOTYxOlx0XHQgIGFwcGxpY2F0aW9ucyBzdXBwbHkgdGhlIG1hZHZpc2UoTUFEVl9IVUdFUEFHRSkgaGludC5cbiA5NjI6XHRcdCAgVGhpcyBlbnN1cmVzIHRoYXQgaHVnZXBhZ2VzIGFyZSB1c2VkIG9ubHkgaW4gcmVzcG9uc2UgdG8gZXhwbGljaXRcbiA5NjM6XHRcdCAgcmVxdWVzdHMgZnJvbSBhcHBsaWNhdGlvbnMuXG4gOTY0Olx0ZW5kY2hvaWNlXG4gOTY1Olx0XG4gOTY2Olx0Y29uZmlnIFRIUF9TV0FQXG4gOTY3Olx0XHRkZWZfYm9vbCB5XG4gOTY4Olx0XHRkZXBlbmRzIG9uIEFSQ0hfV0FOVFNfVEhQX1NXQVAgXHUwMDI2XHUwMDI2IFNXQVAgXHUwMDI2XHUwMDI2IDY0QklUXG4gOTY5Olx0XHRoZWxwXG4gOTcwOlx0XHQgIFN3YXAgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBpbiBvbmUgcGllY2UsIHdpdGhvdXQgc3BsaXR0aW5nLlxuIDk3MTpcdFx0ICBYWFg6IEZvciBub3csIHN3YXAgY2x1c3RlciBiYWNraW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZVxuIDk3MjpcdFx0ICB3aWxsIGJlIHNwbGl0IGFmdGVyIHN3YXBvdXQuXG4gOTczOlx0XG4gOTc0Olx0XHQgIEZvciBzZWxlY3Rpb24gYnkgYXJjaGl0ZWN0dXJlcyB3aXRoIHJlYXNvbmFibGUgVEhQIHNpemVzLlxuIDk3NTpcdFxuIDk3NjpcdGNvbmZpZyBOT19QQUdFX01BUENPVU5UXG4gOTc3Olx0XHRib29sIFwmIzM0O05vIHBlci1wYWdlIG1hcGNvdW50IChFWFBFUklNRU5UQUwpXCYjMzQ7XG4gOTc4Olx0XHRoZWxwXG4gOTc5Olx0XHQgIERvIG5vdCBtYWludGFpbiBwZXItcGFnZSBtYXBjb3VudHMgZm9yIHBhZ2VzIHBhcnQgb2YgbGFyZ2VyXG4gOTgwOlx0XHQgIGFsbG9jYXRpb25zLCBzdWNoIGFzIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMuXG4gOTgxOlx0XG4gOTgyOlx0XHQgIFdoZW4gdGhpcyBjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQsIHNvbWUgaW50ZXJmYWNlcyB0aGF0IHJlbGllZCBvblxuIDk4MzpcdFx0ICB0aGlzIGluZm9ybWF0aW9uIHdpbGwgcmVseSBvbiBsZXNzLXByZWNpc2UgcGVyLWFsbG9jYXRpb24gaW5mb3JtYXRpb25cbiA5ODQ6XHRcdCAgaW5zdGVhZDogZm9yIGV4YW1wbGUsIHVzaW5nIHRoZSBhdmVyYWdlIHBlci1wYWdlIG1hcGNvdW50IGluIHN1Y2hcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkwOQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3dhcCBhbmQgTWVtb3J5IE1hbmFnZW1lbnQgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gbWVtb3J5IGNvbnRyb2wgYW5kIHN3YXAuIEZpcnN0IHRoaW5ncyBmaXJzdDogYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfU1dBUGAgaW4gS2NvbmZpZy4gR290dGEgbWFrZSBzdXJlIHRob3NlIGFyZSBwcm9wZXJseSBjb25maWd1cmVkLiBBbmQgd2hpbGUgSSYjMzk7bSBhdCBpdCwgSSBzaG91bGQgc2VlIGlmIGBDT05GSUdfU0hNRU1gIGhhcyBhbnkgYmVhcmluZyBvbiB0aGlzLgoKTmV4dCwgSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiBtb2RpZmljYXRpb25zLiBIZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZ290OgoKMS4gIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCBpbiBgbW0vcGFnZV9jb3VudGVyLmNgCjIuICBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gIGluIGBtbS9tZW1jb250cm9sLmNgCjMuICBgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlc2AgaW4gYG1tL21lbWNvbnRyb2wuY2AKNC4gIGBmb2xpb19hbGxvY19zd2FwYCBpbiBgbW0vc3dhcGZpbGUuY2AKNS4gIGBzaG1lbV93cml0ZW91dGAgaW4gYG1tL3NobWVtLmNgCjYuICBgc2hyaW5rX2ZvbGlvX2xpc3RgIGluIGBtbS92bXNjYW4uY2AKClJpZ2h0LCBgc2hyaW5rX2ZvbGlvX2xpc3RgIGlzIHN0YXRpYywgd2hpY2ggaXMgZ29vZCB0byBrbm93LCBidXQgdGhlIG90aGVycyBsb29rIGludGVyZXN0aW5nLiBUaGV5JiMzOTtyZSBub24tc3RhdGljLCBzbyB0aGUgc2NvcGUgYW5kIHZpc2liaWxpdHkgYXJlIGEgYml0IGRpZmZlcmVudCwgcG90ZW50aWFsbHkgaW5kaWNhdGluZyBtb3JlIGltcG9ydGFudCBBUEkgZW50cnlwb2ludHMuCgpOb3csIHRvIG5haWwgZG93biB0aGUgaW1wb3J0YW50IEFQSSBlbnRyeXBvaW50cyBmb3IgRm9jdXNTeW1ib2xzLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5vbi1ob3QtcGF0aCwgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludCBmdW5jdGlvbnM6IGBmb2xpb19hbGxvY19zd2FwYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXNgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSBzaG91bGQgYmUgZm9jdXNpbmcgb24uCgpBbmQgZmluYWxseSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBzaG1lbV93cml0ZW91dGAgdG8gc2VlIGlmIGl0JiMzOTtzIHN0YXRpYyBvciBleHBvcnRlZC4gVGhhdCBkZXRhaWwgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSBhbmQgdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV93cml0ZW91dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NobWVtLmM9NDc9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc2htX21udCBfX3JvX2FmdGVyX2luaXQ7XG4tLVxubW0vc2htZW0uYy0xMDEtLypcbm1tL3NobWVtLmM6MTAyOiAqIHNobWVtX2ZhbGxvY2F0ZSBjb21tdW5pY2F0ZXMgd2l0aCBzaG1lbV9mYXVsdCBvciBzaG1lbV93cml0ZW91dCB2aWFcbm1tL3NobWVtLmMtMTAzLSAqIGlub2RlLVx1MDAzZWlfcHJpdmF0ZSAod2l0aCBpX3J3c2VtIG1ha2luZyBzdXJlIHRoYXQgaXQgaGFzIG9ubHkgb25lIHVzZXIgYXRcbi0tXG5tbS9zaG1lbS5jPTQxND1zdGF0aWMgdm9pZCBzaG1lbV9mcmVlX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNpemVfdCBmcmVlZF9pc3BhY2UpXG4tLVxubW0vc2htZW0uYy00MzUtICpcbm1tL3NobWVtLmM6NDM2OiAqIFJldHVybjogdHJ1ZSBpZiBzd2FwcGVkIHdhcyBpbmNyZW1lbnRlZCBmcm9tIDAsIGZvciBzaG1lbV93cml0ZW91dCgpLlxubW0vc2htZW0uYy00MzctICovXG5tbS9zaG1lbS5jPTQzOD1ib29sIHNobWVtX3JlY2FsY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIGFsbG9jZWQsIGxvbmcgc3dhcHBlZClcbi0tXG5tbS9zaG1lbS5jLTQ1MS1cdCAqIGFmdGVyIGlfbWFwcGluZy1cdTAwM2VucnBhZ2VzIGhhcyBhbHJlYWR5IGJlZW4gYWRqdXN0ZWQgKHVwIG9yIGRvd24pLFxubW0vc2htZW0uYzo0NTI6XHQgKiBzaG1lbV93cml0ZW91dCgpIGhhcyB0byByYWlzZSBzd2FwcGVkIGJlZm9yZSBucnBhZ2VzIGlzIGxvd2VyZWQgLVxubW0vc2htZW0uYy00NTMtXHQgKiB0byBzdG9wIGEgcmFjaW5nIHNobWVtX3JlY2FsY19pbm9kZSgpIGZyb20gdGhpbmtpbmcgdGhhdCBhIHBhZ2UgaGFzXG4tLVxubW0vc2htZW0uYz0xNTU2PWludCBzaG1lbV91bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcbi0tXG5tbS9zaG1lbS5jLTE1OTktLyoqXG5tbS9zaG1lbS5jOjE2MDA6ICogc2htZW1fd3JpdGVvdXQgLSBXcml0ZSB0aGUgZm9saW8gdG8gc3dhcFxubW0vc2htZW0uYy0xNjAxLSAqIEBjdHg6IHN3YXAgSS9PIGNvbnRleHRcbi0tXG5tbS9zaG1lbS5jLTE2MDYtICovXG5tbS9zaG1lbS5jOjE2MDc6aW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vc2htZW0uYy0xNjA4LVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxuLS1cbm1tL3NobWVtLmMtMTc0My1cdFx0ICogYnV0IEkmIzM5O20gYSBsaXR0bGUgbmVydm91cyBhYm91dCBsZXR0aW5nIHRoaXMgZm9saW8gb3V0IG9mXG5tbS9zaG1lbS5jOjE3NDQ6XHRcdCAqIHNobWVtX3dyaXRlb3V0KCkgaW4gYSBoeWJyaWQgaGFsZi10bXBmcy1oYWxmLXN3YXAgc3RhdGVcbm1tL3NobWVtLmMtMTc0NS1cdFx0ICogZS5nLiBmb2xpb19tYXBwaW5nKGZvbGlvKSBtaWdodCBnaXZlIGFuIHVuZXhwZWN0ZWQgYW5zd2VyLlxuLS1cbm1tL3NobWVtLmM9MTc1Nz1pbnQgc2htZW1fd3JpdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zaG1lbS5jLTE3NjEtXG5tbS9zaG1lbS5jOjE3NjI6XHRlcnIgPSBzaG1lbV93cml0ZW91dChcdTAwMjZjdHgsIGZvbGlvLCBOVUxMKTtcbm1tL3NobWVtLmMtMTc2My1cdHN3YXBfd3JpdGVfc3VibWl0KFx1MDAyNmN0eCk7XG4tLVxubW0vc2htZW0uYz0zNjI0PXN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxubW0vc2htZW0uYy0zNzYwLVx0XHQvKlxubW0vc2htZW0uYzozNzYxOlx0XHQgKiBJbmZvcm0gc2htZW1fd3JpdGVvdXQoKSBob3cgZmFyIHdlIGhhdmUgcmVhY2hlZC5cbm1tL3NobWVtLmMtMzc2Mi1cdFx0ICogTm8gbmVlZCBmb3IgbG9jayBvciBiYXJyaWVyOiB3ZSBoYXZlIHRoZSBwYWdlIGxvY2suXG4tLVxubW0vc3dhcC5oPTQ2NT1leHRlcm4gY29uc3Qgc3RydWN0IHN3YXBfb3BzIHN3YXBfYmRldl9vcHM7XG5tbS9zd2FwLmgtNDY2LVxubW0vc3dhcC5oOjQ2NzppbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9zd2FwLmgtNDY4LVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcbi0tXG5tbS9zd2FwZmlsZS5jPTI4MDk9c3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXG4tLVxubW0vc3dhcGZpbGUuYy0yODkxLVx0ICogZXhpdF9tbWFwKCksIHdoaWNoIHByb2NlZWRzIGF0IGl0cyBvd24gaW5kZXBlbmRlbnQgcGFjZTtcbm1tL3N3YXBmaWxlLmM6Mjg5MjpcdCAqIGFuZCBldmVuIHNobWVtX3dyaXRlb3V0KCkgY291bGQgaGF2ZSBiZWVuIHByZWVtcHRlZCBhZnRlclxubW0vc3dhcGZpbGUuYy0yODkzLVx0ICogZm9saW9fYWxsb2Nfc3dhcCgpLCB0ZW1wb3JhcmlseSBoaWRpbmcgdGhhdCBzd2FwLiAgSXQmIzM5O3MgZWFzeVxuLS1cbm1tL3Ztc2Nhbi5jPTYyMT1zdGF0aWMgcGFnZW91dF90IHBhZ2VvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3Ztc2Nhbi5jLTY1Ny1cdGlmIChzaG1lbV9tYXBwaW5nKG1hcHBpbmcpKVxubW0vdm1zY2FuLmM6NjU4Olx0XHRyZXMgPSBzaG1lbV93cml0ZW91dChjdHgsIGZvbGlvLCBmb2xpb19saXN0KTtcbm1tL3Ztc2Nhbi5jLTY1OS1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIFN3YXAgYW5kIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIGBzaG1lbV93cml0ZW91dGAgaXMgZGVmaW5lZCBpbiBgbW0vc3dhcC5oYCwgYW5kIGl0JiMzOTtzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgdXNlZnVsIHRvIGtub3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gbWVtb3J5IGNncm91cHMgYW5kIHN3YXBwaW5nLCBzbyBsZXQgbWUgcXVpY2tseSByZXZpZXcgYSBmZXcga2V5IGZ1bmN0aW9uczogYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYGZvbGlvX2FsbG9jX3N3YXBgLCBgc2htZW1fd3JpdGVvdXRgIChvZiBjb3Vyc2UhKSwgYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXNgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNvcmUgcGllY2VzLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIGNhbiBmaW5kIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBpbiBgbW0vTWFrZWZpbGVgIG9yIHBlcmhhcHMgYGluY2x1ZGUvbGludXgvc3dhcC5oYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5OgoKKiAgIGBTV0FQYDogVGhpcyBvbmUmIzM5O3MgdGhlIGZ1bmRhbWVudGFsIGVuYWJsZXIgZm9yIHN3YXBmaWxlIGZ1bmN0aW9uYWxpdHksIHNvIGl0JiMzOTtzIGNyaXRpY2FsLgoqICAgYE1FTUNHYDogVGhpcyBtdXN0IGJlIHRoZSBrZXkgdG8gaG93IG1lbW9yeSBjZ3JvdXBzIGFuZCBzd2FwIGxpbWl0cyBpbnRlcmFjdC4KKiAgIGBTSE1FTWA6IFRoaXMgc2hvdWxkIGJlIGNyaXRpY2FsIHNpbmNlIEkgYW0gY29uc2lkZXJpbmcgYHNobWVtX3dyaXRlb3V0YC4KKiAgIEFuZCBmaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgZWl0aGVyIGBUSFBfU1dBUGAgb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCDigJMgdGhvc2UgYXJlIHRoZSBtdWx0aS1wYWdlIGZvbGlvIHN3YXAgZmxhZ3MgdGhhdCBjb3VsZCBpbmZsdWVuY2UgYWxsIG9mIHRoaXMuCgpUbyBiZSB0aG9yb3VnaCwgbGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIGBtbS9NYWtlZmlsZWAgYWdhaW4sIHNwZWNpZmljYWxseSBmb3Igc3dhcGZpbGUuYyBhbmQgbWVtY29udHJvbC5jOyBJIGp1c3Qgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cyB3aXRoIHRoZSBjb25maWcgZmxhZ3MgdGhhdCBnb3Zlcm4gdGhlaXIgaW5jbHVzaW9uIG9yIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwZmlsZVxcLm98bWVtY29udHJvbFxcLm98cGFnZV9jb3VudGVyXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cbm1tL01ha2VmaWxlOjI4OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLm8gOj0gblxubW0vTWFrZWZpbGUtMjktS0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXG4tLVxubW0vTWFrZWZpbGU9NzY9ZW5kaWZcbm1tL01ha2VmaWxlLTc3LVxubW0vTWFrZWZpbGU6Nzg6b2JqLSQoQ09ORklHX1NXQVApXHQmIzQzOz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXG5tbS9NYWtlZmlsZS03OS1vYmotJChDT05GSUdfWlNXQVApXHQmIzQzOz0genN3YXAub1xuLS1cbm1tL01ha2VmaWxlPTEwMT1vYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGU6MTAyOm9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xubW0vTWFrZWZpbGUtMTAzLW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbm1tL01ha2VmaWxlPTEwND1vYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA1OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzQwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgQ09ORklHX1BBR0VfQ09VTlRFUmAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgcmlnaHQgaW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdmVyaWZ5IHRoZSBzdGF0ZSBvZiBgQ09ORklHX1BBR0VfQ09VTlRFUmAuIFRoaXMgdmFyaWFibGUsIGFzIHdlIGFsbCBrbm93LCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4uLiB3ZWxsLCBwcmV0dHkgbXVjaCBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0LiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgaXQmIzM5O3MgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBEZXBlbmRpbmcgb24gaXRzIHN0YXR1cywgdGhlIGltcGxpY2F0aW9ucyB3aWxsIGJlIGltbWVkaWF0ZWx5IGFwcGFyZW50IGFuZCB0aGV5JiMzOTtsbCBkcml2ZSB0aGUgbmV4dCBsaW5lIG9mIHRob3VnaHQuIElmIGl0IGlzIGVuYWJsZWQsIHRoYXQgc2F5cyBhIGxvdCBhYm91dCB0aGUgYXNzdW1wdGlvbnMgaW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUsIGhvdyBwYWdlIGNvdW50ZXJzIGFyZSB1c2VkIGZvciB0cmFja2luZywgYW5kIG1heWJlIGhvdyB0aGlzIHdob2xlIHRoaW5nIGJlaGF2ZXMgaW4gZGlmZmVyZW50IG1lbW9yeSBjb250ZXh0cy4gRGlzYWJsaW5nIGl0Li4uIHdlbGwgdGhhdCYjMzk7cyBhIHdob2xlIGRpZmZlcmVudCBiYWxsZ2FtZSBvZiB0cmFkZW9mZnMgYW5kIG9wdGltaXphdGlvbnMsIHdoaWNoIHdpbGwgc2hpZnQgbXkgZm9jdXMgZWxzZXdoZXJlLCBwb3NzaWJseSB0byBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgb3Igc3BlY2lmaWMgaGFyZHdhcmUgY29uc3RyYWludHMuIFNvLCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0sIGFuZCB0aGVuIHdlJiMzOTtsbCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEFHRV9DT1VOVEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2Mz1pZiBDR1JPVVBTXG5pbml0L0tjb25maWctMTA2NC1cbmluaXQvS2NvbmZpZzoxMDY1OmNvbmZpZyBQQUdFX0NPVU5URVJcbmluaXQvS2NvbmZpZy0xMDY2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA1NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlBlZXJpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBCYXNlZCBvbiB0aGUgdGFzayBhdCBoYW5kLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gd2hhdGV2ZXIgZnVuY3Rpb25hbGl0eSBJJiMzOTttIHdvcmtpbmcgd2l0aC4gQSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhcyBhbHdheXMsIGlzIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSAxMDY1LiBJJiMzOTttIGhvcGluZyB0aGF0IHRoaXMgc2VjdGlvbiB3aWxsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjbHVlcyBhYm91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBrbm9icyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGFyZWEgdG8gYmUgYSBjZW50cmFsIGh1YiBmb3IgZGVmaW5pbmcgdGhlIGRlZmF1bHQga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBpbiB0aGlzIHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA1OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDUwOlx0XHRib29sIFwmIzM0O0NvbnRyb2wgR3JvdXAgc3VwcG9ydFwmIzM0O1xuMTA1MTpcdFx0c2VsZWN0IEtFUk5GU1xuMTA1MjpcdFx0aGVscFxuMTA1MzpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGdyb3VwaW5nIHNldHMgb2YgcHJvY2Vzc2VzIHRvZ2V0aGVyLCBmb3JcbjEwNTQ6XHRcdCAgdXNlIHdpdGggcHJvY2VzcyBjb250cm9sIHN1YnN5c3RlbXMgc3VjaCBhcyBDcHVzZXRzLCBDRlMsIG1lbW9yeVxuMTA1NTpcdFx0ICBjb250cm9scyBvciBkZXZpY2UgaXNvbGF0aW9uLlxuMTA1NjpcdFx0ICBTZWVcbjEwNTc6XHRcdFx0LSBEb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1kZXNpZ24tQ0ZTLnJzdFx0KENGUylcbjEwNTg6XHRcdFx0LSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS8gKGZlYXR1cmVzIGZvciBncm91cGluZywgaXNvbGF0aW9uXG4xMDU5Olx0XHRcdFx0XHRcdCAgYW5kIHJlc291cmNlIGNvbnRyb2wpXG4xMDYwOlx0XG4xMDYxOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwNjI6XHRcbjEwNjM6XHRpZiBDR1JPVVBTXG4xMDY0Olx0XG4xMDY1Olx0Y29uZmlnIFBBR0VfQ09VTlRFUlxuMTA2NjpcdFx0Ym9vbFxuMTA2NzpcdFxuMTA2ODpcdGNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuMTA2OTpcdFx0Ym9vbCBcJiMzNDtGYXZvciBkeW5hbWljIG1vZGlmaWNhdGlvbiBsYXRlbmN5IHJlZHVjdGlvbiBieSBkZWZhdWx0XCYjMzQ7XG4xMDcwOlx0XHRoZWxwXG4xMDcxOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFwmIzM0O2Zhdm9yZHlubW9kc1wmIzM0OyBtb3VudCBvcHRpb24gYnkgZGVmYXVsdFxuMTA3MjpcdFx0ICB3aGljaCByZWR1Y2VzIHRoZSBsYXRlbmNpZXMgb2YgZHluYW1pYyBjZ3JvdXAgbW9kaWZpY2F0aW9ucyBzdWNoXG4xMDczOlx0XHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xuMTA3NDpcdFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxuMTA3NTpcdFxuMTA3NjpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDc3Olx0XG4xMDc4Olx0Y29uZmlnIE1FTUNHXG4xMDc5Olx0XHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMDgwOlx0XHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4xMDgxOlx0XHRzZWxlY3QgRVZFTlRGRFxuMTA4MjpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA4MzpcdFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4xMDg0Olx0XHRoZWxwXG4xMDg1Olx0XHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cbjEwODY6XHRcbjEwODc6XHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuMTA4ODpcdFx0Ym9vbFxuMTA4OTpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc3NwoJCQkJCQkJb3V0cHV0OiAxODkKCQkJCQkJCXRob3VnaHRzOiAzNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgc28gdGhlIHBhdGNoIGlzIHRhcmdldGluZyBzb21lIGNydWNpYWwgbWVtb3J5IG1hbmFnZW1lbnQgYXJlYXMsIHNwZWNpZmljYWxseSBhcm91bmQgc3dhcCBhbmQgZm9saW8gYWxsb2NhdGlvbi4gRnJvbSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWd1cmF0aW9ucywgYE1FTUNHYCByZWxpZXMgb24gYENHUk9VUFNgLCBhbmQgaXMgYSBwcmVyZXF1aXNpdGUsIHNvIHRoYXQmIzM5O3MgZ29vZC4gV2UgYWxzbyBoYXZlIGBTV0FQYCBlbmFibGVkLCB3aGljaCBpcyBlc3NlbnRpYWwsIGFzIGFyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgVEhQX1NXQVBgLCBhbmQgYFNITUVNYC4gQWxsIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBhcHBlYXIgdG8gYmUgaW4gcGxhY2UuCgpDaGVja2luZyB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGFuZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMsIHllcywgdGhhdCYjMzk7cyBhbGwgaW5saW5lIHdpdGggbXkgZXhwZWN0YXRpb25zLiBUaGlzIHNlZW1zIGxpa2UgYSB2YWxpZCBhcmVhIHRvIGZvY3VzIG91ciBlZmZvcnRzLCBnaXZlbiB0aGUgbGlzdGVkIGBFbmFibGVDb25maWdzYC4gVGhlIHBhdGNoIGlzIHdvcmtpbmcgd2l0aCBmb2xpbyBzd2FwIGFsbG9jYXRpb24sIG1lbWNnIHN3YXAgbWFyZ2luIHRyYWNraW5nLCBhbmQgc2htZW0gd3JpdGVvdXQuIFRoZSBrZXkgc3ltYm9scyB0aGF0IHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IGluY2x1ZGUgYGZvbGlvX2FsbG9jX3N3YXBgLCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLCBgcGFnZV9jb3VudGVyX21hcmdpbmAsIGFuZCBgc2htZW1fd3JpdGVvdXRgLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSB3b3VsZCBleHBlY3QgZm9yIGEgY2hhbmdlIGltcGFjdGluZyBob3cgd2UgaGFuZGxlIG1lbW9yeSBwcmVzc3VyZSwgZXNwZWNpYWxseSBjb25jZXJuaW5nIHN3YXBwaW5nLgoKU3BlY2lmaWNhbGx5LCB0aGUgbW9yZSBncmFudWxhciBlcnJvciBjb2RlcyBmcm9tIGBmb2xpb19hbGxvY19zd2FwYCBmb3Igc3dhcCBsaW1pdHMgaXMgYSBzbWFydCBjaGFuZ2UuIFJldHVybmluZyBgLUUyQklHYCwgYC1FTk9TUENgLCBhbmQgYC1FTk9NRU1gIGRlcGVuZGluZyBvbiB3aGV0aGVyIGEgbWVtY2cgb3IgZ2xvYmFsIGxpbWl0IGlzIHRoZSBjb25zdHJhaW50IGlzIG11Y2ggY2xlYW5lci4gQXZvaWRpbmcgdW5uZWNlc3Nhcnkgc3BsaXR0aW5nIG9mIGxhcmdlIGZvbGlvcyB3aGVuIHdlJiMzOTtyZSBoaXR0aW5nIGEgbGltaXQgaXMgZ29pbmcgdG8gYmUgdXNlZnVsIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gVGhpcyBpcyBhIHNvbGlkIHVwZGF0ZSB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGlzIGRpcmVjdGx5IGltcGFjdGluZyBib3RoIHN3YXAgYW5kIHJlY2xhaW0uCgpCYXNlZCBvbiB0aGlzIHJldmlldywgZXZlcnl0aGluZyBhcHBlYXJzIHRvIGJlIGluIG9yZGVyLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHJlbGV2YW50IGFyZWFzLCBhbmQgdGhlIHByb3Bvc2VkIGNoYW5nZXMgc2VlbSBhY2N1cmF0ZSBhbmQgd2VsbC1yZWFzb25lZC4gSSYjMzk7bSBjb21mb3J0YWJsZSB3aXRoIHRoZSBjdXJyZW50IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA1OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1RIUF9TV0FQJiMzNDssCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fYWxsb2Nfc3dhcCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbiYjMzQ7LAogICAgJiMzNDtwYWdlX2NvdW50ZXJfbWFyZ2luJiMzNDssCiAgICAmIzM0O3NobWVtX3dyaXRlb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IHN3YXAgYWxsb2NhdGlvbiBsb2dpYyBieSByZWZpbmluZyBlcnJvciByZXBvcnRpbmcgaW4gZm9saW9fYWxsb2Nfc3dhcCgpIGFuZCBhZGRpbmcgcGFnZV9jb3VudGVyX21hcmdpbigpIGFuZCBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbigpIHRvIGluc3BlY3QgaGllcmFyY2hpY2FsIHN3YXAgbWFyZ2lucy4gVGhpcyBjaGFuZ2VzIGhvdyBsYXJnZSBmb2xpb3MgYXJlIHNwbGl0IGFuZCBoYW5kbGVkIGR1cmluZyBzd2Fwb3V0IGluIHNobWVtX3dyaXRlb3V0KCkgYW5kIHBhZ2UgcmVjbGFpbSBpbiBzaHJpbmtfZm9saW9fbGlzdCgpIHdoZW4gZ2xvYmFsIG9yIG1lbWNnIHN3YXAgbGltaXRzIGFyZSByZWFjaGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1RIUF9TV0FQJiMzNDssCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fYWxsb2Nfc3dhcCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbiYjMzQ7LAogICAgJiMzNDtwYWdlX2NvdW50ZXJfbWFyZ2luJiMzNDssCiAgICAmIzM0O3NobWVtX3dyaXRlb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IHN3YXAgYWxsb2NhdGlvbiBsb2dpYyBieSByZWZpbmluZyBlcnJvciByZXBvcnRpbmcgaW4gZm9saW9fYWxsb2Nfc3dhcCgpIGFuZCBhZGRpbmcgcGFnZV9jb3VudGVyX21hcmdpbigpIGFuZCBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbigpIHRvIGluc3BlY3QgaGllcmFyY2hpY2FsIHN3YXAgbWFyZ2lucy4gVGhpcyBjaGFuZ2VzIGhvdyBsYXJnZSBmb2xpb3MgYXJlIHNwbGl0IGFuZCBoYW5kbGVkIGR1cmluZyBzd2Fwb3V0IGluIHNobWVtX3dyaXRlb3V0KCkgYW5kIHBhZ2UgcmVjbGFpbSBpbiBzaHJpbmtfZm9saW9fbGlzdCgpIHdoZW4gZ2xvYmFsIG9yIG1lbWNnIHN3YXAgbGltaXRzIGFyZSByZWFjaGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA1OjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5oYW5jZXMgc3dhcCBhbGxvY2F0aW9uIGVycm9yIHJlcG9ydGluZyBpbiBgZm9saW9fYWxsb2Nfc3dhcCgpYCBieSBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuIGNhc2VzIHdoZXJlIGEgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiBmYWlsZWQgZHVlIHRvIGZvbGlvIHNpemUgdnMuIHRvdGFsIHN3YXAvY2dyb3VwIHN3YXAgZXhoYXVzdGlvbi4gSXQgaW50cm9kdWNlcyBgcGFnZV9jb3VudGVyX21hcmdpbigpYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKClgIGFuZCB1cGRhdGVzIGZvbGlvIHNwbGl0dGluZyBkZWNpc2lvbnMgaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL3NobWVtLmNgLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSAoS01TQU4pOiBBbGwgbG9jYWwgdmFyaWFibGVzIChgcmV0YCwgYG1hcmdpbmAsIGBtYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZC5cbi0gTWVtb3J5IFNhZmV0eSBcdTAwMjYgTG9naWMgKEtBU0FOL0xvY2tkZXApOiBBbnkgcmlza3MgaW4gdGhpcyBwYXRjaCByZXZvbHZlIGFyb3VuZCBjZ3JvdXAgc3dhcCBhY2NvdW50aW5nLCBwYWdlIGxvY2tpbmcsIHJlZmNvdW50aW5nLCBvciBjb250cm9sLWZsb3cgbG9naWMgaW4gcmVjbGFpbS93cml0ZW91dCwgd2hpY2ggYXJlIG1vbml0b3JlZCBieSBzdGFuZGFyZCBNTSBhc3NlcnRpb25zLCBLQVNBTiwgYW5kIExvY2tkZXAuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMTUxNmJkNjYyZjkyODE2YWQ2MzUzN2RlMWVlN2VhZjllOTU3Y2I5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMzAgMDQ6NTk6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaAppbmRleCBkNjQ5YjZiYmJjODcxLi4wN2I3Y2IxMjI0OWM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgKQEAgLTY4LDYgJiM0Mzs2OCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKQogCXJldHVybiBhdG9taWNfbG9uZ19yZWFkKCZhbXA7Y291bnRlci0mZ3Q7dXNhZ2UpOwogfQogCiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpOwogdm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogdm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogYm9vbCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCAwZjk1M2VkOWM4NjMwLi5hNzJlY2YxMmMwMGRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtNTEwLDYgJiM0Mzs1MTAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcAogCV9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7CiB9CiAKJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogZXh0ZXJuIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7CiAjZWxzZQpAQCAtNTIzLDYgJiM0Mzs1MjQsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwKIHsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDRhMThlZTQ1MDlhYjYuLjlhMzgwNDEzMmMyZWIgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTU4MDEsMTUgJiM0Mzs1ODAxLDM1IEBAIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJbG9uZyBucl9zd2FwX3BhZ2VzID0gZ2V0X25yX3N3YXBfcGFnZXMoKTsKIAotCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgZG9fbWVtc3dfYWNjb3VudCgpKQotCQlyZXR1cm4gbnJfc3dhcF9wYWdlczsKLQlmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKQotCQlucl9zd2FwX3BhZ2VzID0gbWluX3QobG9uZywgbnJfc3dhcF9wYWdlcywKLQkJCQkgICAgICBSRUFEX09OQ0UobWVtY2ctJmd0O3N3YXAubWF4KSAtCi0JCQkJICAgICAgcGFnZV9jb3VudGVyX3JlYWQoJmFtcDttZW1jZy0mZ3Q7c3dhcCkpOwomIzQzOwlpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSAmYW1wOyZhbXA7ICFkb19tZW1zd19hY2NvdW50KCkpCiYjNDM7CQlucl9zd2FwX3BhZ2VzID0gbWluKG5yX3N3YXBfcGFnZXMsIHBhZ2VfY291bnRlcl9tYXJnaW4oJmFtcDttZW1jZy0mZ3Q7c3dhcCkpOwomIzQzOwogCXJldHVybiBucl9zd2FwX3BhZ2VzOwogfQogCiYjNDM7LyoqCiYjNDM7ICogbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4gLSBnZXQgYSBmb2xpbyYjMzk7cyBtZW1jZyBzd2FwIG1hcmdpbgomIzQzOyAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtY2cgbWFyZ2luIGlzIHF1ZXJpZWQKJiM0MzsgKgomIzQzOyAqIFJldHVybjogUmVtYWluaW5nIGNoYXJnZWFibGUgcGFnZXMgaW4gdGhlIGZvbGlvJiMzOTtzIG1lbWNnIGhpZXJhcmNoeS4KJiM0MzsgKi8KJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CWxvbmcgbWFyZ2luOwomIzQzOwomIzQzOwlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSB8fAomIzQzOwkgICAgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKQomIzQzOwkJcmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7CiYjNDM7CW1hcmdpbiA9IHBhZ2VfY291bnRlcl9tYXJnaW4oJmFtcDttZW1jZy0mZ3Q7c3dhcCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gbWFyZ2luOwomIzQzO30KJiM0MzsKIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jCmluZGV4IDY2MWUwZjJhNTEyN2EuLjQ1MDU0M2Y0YjMxOGIgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfY291bnRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfY291bnRlci5jCkBAIC00Niw2ICYjNDM7NDYsMjYgQEAgc3RhdGljIHZvaWQgcHJvcGFnYXRlX3Byb3RlY3RlZF91c2FnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjLAogCX0KIH0KIAomIzQzOy8qKgomIzQzOyAqIHBhZ2VfY291bnRlcl9tYXJnaW4gLSByZW1haW5pbmcgdXNhYmxlIHNwYWNlIHdpdGhpbiBoaWVyYXJjaGljYWwgbGltaXRzCiYjNDM7ICogQGNvdW50ZXI6IGNvdW50ZXIKJiM0MzsgKgomIzQzOyAqIFJldHVybjogVGhlIG1pbmltdW0gdmFsdWUgb2YgbWF4IG1pbnVzIHVzYWdlIGFjcm9zcyBAY291bnRlciBhbmQgYWxsIG9mCiYjNDM7ICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS4KJiM0MzsgKi8KJiM0Mztsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcikKJiM0Mzt7CiYjNDM7CWxvbmcgbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJbG9uZyBtID0gUkVBRF9PTkNFKGNvdW50ZXItJmd0O21heCkgLSBwYWdlX2NvdW50ZXJfcmVhZChjb3VudGVyKTsKJiM0MzsKJiM0MzsJCW1hcmdpbiA9IG1pbihtYXJnaW4sIG0pOwomIzQzOwl9IHdoaWxlICgoY291bnRlciA9IGNvdW50ZXItJmd0O3BhcmVudCkpOwomIzQzOwomIzQzOwlyZXR1cm4gbWFyZ2luOwomIzQzO30KJiM0MzsKIC8qKgogICogcGFnZV9jb3VudGVyX2NhbmNlbCAtIHRha2UgcGFnZXMgb3V0IG9mIHRoZSBsb2NhbCBjb3VudGVyCiAgKiBAY291bnRlcjogY291bnRlcgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggZGUxNDRhOWE5NTU4Yi4uODRiOGU5ZTA1OTczYiAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0xNjEyLDcgJiM0MzsxNjEyLDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7CiAJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLSZndDtpX3NiKTsKIAlwZ29mZl90IGluZGV4OwotCWludCBucl9wYWdlczsKJiM0MzsJaW50IG5yX3BhZ2VzLCByZXQ7CiAJYm9vbCBzcGxpdCA9IGZhbHNlOwogCiAJaWYgKChpbmZvLSZndDtmbGFncyAmYW1wOyBTSE1FTV9GX0xPQ0tFRCkgfHwgc2JpbmZvLSZndDtub3N3YXApCkBAIC0xNjkzLDcgJiM0MzsxNjkzLDggQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTsKIAl9CiAKLQlpZiAoIWZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7CiYjNDM7CXJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pOwomIzQzOwlpZiAoIXJldCkgewogCQlib29sIGZpcnN0X3N3YXBwZWQgPSBzaG1lbV9yZWNhbGNfaW5vZGUoaW5vZGUsIDAsIG5yX3BhZ2VzKTsKIAkJaW50IGVycm9yOwogCkBAIC0xNzQ2LDcgJiM0MzsxNzQ3LDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7CiAJCWdvdG8gcmVkaXJ0eTsKIAl9Ci0JaWYgKG5yX3BhZ2VzICZndDsgMSkKJiM0MzsJaWYgKG5yX3BhZ2VzICZndDsgMSAmYW1wOyZhbXA7IHJldCA9PSAtRTJCSUcpCiAJCWdvdG8gdHJ5X3NwbGl0OwogcmVkaXJ0eToKIAlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDUxZjVhNTI1YmI2MWMuLmRjMGNkMGNjNmY2MjYgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtMTczNSw3ICYjNDM7MTczNSw5IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKICAqIHN3YXAgY2FjaGUuCiAgKgogICogQ29udGV4dDogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGZvbGlvIGxvY2suCi0gKiBSZXR1cm46IFdoZXRoZXIgdGhlIGZvbGlvIHdhcyBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZS4KJiM0MzsgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsICUtRTJCSUcgaWYgc3BsaXR0aW5nIHRoZSBmb2xpbyBtaWdodCBhbGxvdyBzd2Fwb3V0LAomIzQzOyAqICUtRU5PU1BDIGlmIG5vIGdsb2JhbCBzd2FwIHNwYWNlIGlzIGF2YWlsYWJsZSwgb3IgJS1FTk9NRU0gaWYgc3BsaXR0aW5nCiYjNDM7ICogd291bGQgbm90IGhlbHAuCiAgKi8KIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CkBAIC0xNzQ3LDExICYjNDM7MTc0OSwxMSBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiAJaWYgKG9yZGVyKSB7CiAJCS8qCi0JCSAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQsCi0JCSAqIHRoZSBjYWxsZXIgc2hvdWxkIHNwbGl0IHRoZSBmb2xpbyBhbmQgdHJ5IGFnYWluLgomIzQzOwkJICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZC4gQ2hlY2sgYmVsb3cKJiM0MzsJCSAqIHdoZXRoZXIgc3BsaXR0aW5nIGFuZCByZXRyeWluZyBjYW4gbWFrZSBwcm9ncmVzcy4KIAkJICovCiAJCWlmICghSVNfRU5BQkxFRChDT05GSUdfVEhQX1NXQVApKQotCQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CQkJZ290byBmYWlsZWQ7CiAKIAkJLyoKIAkJICogQWxsb2NhdGlvbiBzaXplIHNob3VsZCBuZXZlciBleGNlZWQgY2x1c3RlciBzaXplCkBAIC0xNzU5LDcgJiM0MzsxNzYxLDcgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbykKIAkJICovCiAJCWlmIChzaXplICZndDsgU1dBUEZJTEVfQ0xVU1RFUikgewogCQkJVk1fV0FSTl9PTl9PTkNFKDEpOwotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJZ290byBmYWlsZWQ7CiAJCX0KIAl9CiAKQEAgLTE3NzUsMTMgJiM0MzsxNzc3LDIzIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJfQogCiAJLyogTmVlZCB0byBjYWxsIHRoaXMgZXZlbiBpZiBhbGxvY2F0aW9uIGZhaWxlZCwgZm9yIE1FTUNHX1NXQVBfRkFJTC4gKi8KLQlpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSkKJiM0MzsJaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpIHsKIAkJc3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pOwomIzQzOwkJZ290byBmYWlsZWQ7CiYjNDM7CX0KIAogCWlmICh1bmxpa2VseSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlnb3RvIGZhaWxlZDsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO2ZhaWxlZDoKJiM0MzsJaWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiAtRU5PU1BDOwomIzQzOwlpZiAobWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oZm9saW8pICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0dXJuIG9yZGVyID8gLUUyQklHIDogLUVOT01FTTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGZkZDEzMjk5YTA0YTkuLjZlNzcwYTA4ZTI4ODAgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xMjU5LDYgJiM0MzsxMjU5LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LAogCQkgKi8KIAkJaWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJmFtcDsmYW1wOyBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICZhbXA7JmFtcDsKIAkJCQkhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7CiYjNDM7CQkJaW50IHJldDsKJiM0MzsKIAkJCWlmICghKHNjLSZndDtnZnBfbWFzayAmYW1wOyBfX0dGUF9JTykpCiAJCQkJZ290byBrZWVwX2xvY2tlZDsKIAkJCWlmIChmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKSkKQEAgLTEyNzcsMTEgJiM0MzsxMjc5LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwKIAkJCQkgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpCiAJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwogCQkJfQotCQkJaWYgKGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7CiYjNDM7CQkJcmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7CiYjNDM7CQkJaWYgKHJldCkgewogCQkJCWludCBfX21heWJlX3VudXNlZCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTsKIAogCQkJCWlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpCiAJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkX3NwbGl0OwomIzQzOwkJCQlpZiAocmV0ICE9IC1FMkJJRykKJiM0MzsJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwogCQkJCS8qIEZhbGxiYWNrIHRvIHN3YXAgbm9ybWFsIHBhZ2VzICovCiAJCQkJaWYgKHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKQogCQkJCQlnb3RvIGFjdGl2YXRlX2xvY2tlZDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NDkKCQkJCQkJCW91dHB1dDogMjQ0CgkJCQkJCQl0aG91Z2h0czogMTE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBbmFseXNpcyBvZiBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgY2VudGVyZWQgYXJvdW5kIHJlZmluaW5nIGVycm9yIGhhbmRsaW5nIGFuZCBmb2xpbyBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gc3dhcCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgY2dyb3Vwcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IHdvdWxkIHdhcnJhbnQgS01TQU4gZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGNyZWF0ZSBhbnkga2VybmVsLXRvLXVzZXIgY29waWVzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdGhyb3VnaCBuZXcgY29uZGl0aW9uYWwgbG9naWMuCgpJIHNlZSBpdCB0b3VjaGVzIHNldmVyYWwga2V5IGFyZWFzOiBgcGFnZV9jb3VudGVyX21hcmdpbmAsIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGBmb2xpb19hbGxvY19zd2FwYCwgYHNobWVtX3dyaXRlb3V0YCwgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIGJldHRlciBkaXN0aW5ndWlzaGluZyB0aGUgcmVhc29ucyBmb3IgYSBmYWlsZWQgYGZvbGlvX2FsbG9jX3N3YXBgOiB3aGV0aGVyIGl0JiMzOTtzIGJlY2F1c2Ugb2YgdGhlIHNpemUgb2YgdGhlIHJlcXVlc3QgKGAtRTJCSUdgKSBvciBpbnN1ZmZpY2llbnQgc3dhcCBzcGFjZSAoYC1FTk9TUENgIG9yIGAtRU5PTUVNYCkuIFRoaXMgaW5mb3JtYXRpb24gaXMgdGhlbiB1c2VkIHRvIG9wdGltaXplIGZvbGlvIHNwbGl0dGluZyBpbiB0aGUgYHZtc2NhbmAgYW5kIGBzaG1lbWAgY29kZS4KCkxvb2tpbmcgY2xvc2VseSBhdCB0aGUgY29kZSBzbmlwcGV0cywgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGxvZ2ljIGludm9sdmVzIGNoZWNraW5nIHJldHVybiB2YWx1ZXMgb3IgbWFyZ2lucywgYnV0IG5vdCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYHBhZ2VfY291bnRlcl9tYXJnaW5gIGNhbGN1bGF0aW9uIGl0ZXJhdGVzIHRocm91Z2ggYSBoaWVyYXJjaHksIGJ1dCBhbGwgaW50ZXJtZWRpYXRlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBsb29wLiBUaGUgcmV0dXJuIHZhbHVlcyBvZiBgZm9saW9fYWxsb2Nfc3dhcGAgYXJlIGV4cGxpY2l0bHkgZGVmaW5lZCBpbnRlZ2VyIGNvZGVzLiBUaGUgcmV0dXJuIHZhbHVlIGlzIHVzZWQgdG8gZGVjaWRlIHRoZSBjb3JyZWN0IGFjdGlvbiBhbmQgaXMgY2hlY2tlZCBpbW1lZGlhdGVseSBhZnRlciBhc3NpZ25tZW50LiBOb3RoaW5nIGlzIGdldHRpbmcgY29waWVkIHRvIHVzZXJzcGFjZS4gTm8gY29tcGxleCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gYW4gdW5pbml0aWFsaXplZCB2YWx1ZS4KCkkgcmV2aWV3ZWQgdGhlIEtNU0FOIHJlcXVpcmVtZW50cyDigJMgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGtlcm5lbC10by11c2VyIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMsIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgY29tcGxleCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMsIGFuZCBhbnkgb3Bwb3J0dW5pdGllcyBmb3Igc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vbmUgb2YgdGhlc2UgYXBwbHkgaGVyZS4gVGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBsZWFrYWdlIHRvIHVzZXIgc3BhY2UuIEl0IHNlZW1zIHRoYXQgYW55IHBvdGVudGlhbCBidWdzIGhlcmUgd291bGQgYmUgY2xhc3NpYyBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXM6IGxvZ2ljIGVycm9ycywgbWVtb3J5IGxlYWtzLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgY2dyb3VwIGFjY291bnRpbmcgYnVncywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGtlcm5lbCBhc3NlcnRpb25zIGxpa2UgYFZNX1dBUk5fT05fT05DRWAuCgpTbywgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmUsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gVGhlIHBhdGNoIGZvY3VzZXMgb24gaW1wcm92aW5nIGVycm9yIGhhbmRsaW5nIGFuZCBmb2xpbyBtYW5hZ2VtZW50IGJhc2VkIG9uIHRoZSBzd2FwIG1hcmdpbiBhbmQgc3BhY2UgYXZhaWxhYmlsaXR5LiBJdCByZWZpbmVzIHRoZSBlcnJvciBzaWduYWxpbmcgZnJvbSB0aGUgYGZvbGlvX2FsbG9jX3N3YXBgIGZ1bmN0aW9uIGFuZCB1c2VzIHRoZXNlIGNvZGVzIGZvciBzbWFydGVyIGZvbGlvIHNwbGl0dGluZyBhbmQgcmVhZGFoZWFkLiBBbGwgdGhlIG5ldyB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkLCB0aGVyZSBhcmUgbm8ga2VybmVsLXRvLXVzZXIgY29waWVzLCBubyBuZXcgYWxsb2NhdGlvbnMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIG5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBpcyBzdWZmaWNpZW50IGZvciB0aGlzIHBhdGNoLiBJJiMzOTtsbCBkb2N1bWVudCB0aGlzIHJlYXNvbmluZyBhbmQgc3VibWl0IHRoZSByZXN1bHRzIHRvIHRoZSB0b29saW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmhhbmNlcyBzd2FwIGFsbG9jYXRpb24gZXJyb3IgcmVwb3J0aW5nIGluIGBmb2xpb19hbGxvY19zd2FwKClgIGJ5IGRpc3Rpbmd1aXNoaW5nIGJldHdlZW4gY2FzZXMgd2hlcmUgYSBsYXJnZSBmb2xpbyBhbGxvY2F0aW9uIGZhaWxlZCBkdWUgdG8gZm9saW8gc2l6ZSB2cy4gdG90YWwgc3dhcC9jZ3JvdXAgc3dhcCBleGhhdXN0aW9uLiBJdCBpbnRyb2R1Y2VzIGBwYWdlX2NvdW50ZXJfbWFyZ2luKClgIGFuZCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oKWAgYW5kIHVwZGF0ZXMgZm9saW8gc3BsaXR0aW5nIGRlY2lzaW9ucyBpbiBgbW0vdm1zY2FuLmNgIGFuZCBgbW0vc2htZW0uY2AuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IChLTVNBTik6IEFsbCBsb2NhbCB2YXJpYWJsZXMgKGByZXRgLCBgbWFyZ2luYCwgYG1gKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLlxuLSBNZW1vcnkgU2FmZXR5IFx1MDAyNiBMb2dpYyAoS0FTQU4vTG9ja2RlcCk6IEFueSByaXNrcyBpbiB0aGlzIHBhdGNoIHJldm9sdmUgYXJvdW5kIGNncm91cCBzd2FwIGFjY291bnRpbmcsIHBhZ2UgbG9ja2luZywgcmVmY291bnRpbmcsIG9yIGNvbnRyb2wtZmxvdyBsb2dpYyBpbiByZWNsYWltL3dyaXRlb3V0LCB3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IHN0YW5kYXJkIE1NIGFzc2VydGlvbnMsIEtBU0FOLCBhbmQgTG9ja2RlcC5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmhhbmNlcyBzd2FwIGFsbG9jYXRpb24gZXJyb3IgcmVwb3J0aW5nIGluIGBmb2xpb19hbGxvY19zd2FwKClgIGJ5IGRpc3Rpbmd1aXNoaW5nIGJldHdlZW4gY2FzZXMgd2hlcmUgYSBsYXJnZSBmb2xpbyBhbGxvY2F0aW9uIGZhaWxlZCBkdWUgdG8gZm9saW8gc2l6ZSB2cy4gdG90YWwgc3dhcC9jZ3JvdXAgc3dhcCBleGhhdXN0aW9uLiBJdCBpbnRyb2R1Y2VzIGBwYWdlX2NvdW50ZXJfbWFyZ2luKClgIGFuZCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oKWAgYW5kIHVwZGF0ZXMgZm9saW8gc3BsaXR0aW5nIGRlY2lzaW9ucyBpbiBgbW0vdm1zY2FuLmNgIGFuZCBgbW0vc2htZW0uY2AuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IChLTVNBTik6IEFsbCBsb2NhbCB2YXJpYWJsZXMgKGByZXRgLCBgbWFyZ2luYCwgYG1gKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLlxuLSBNZW1vcnkgU2FmZXR5IFx1MDAyNiBMb2dpYyAoS0FTQU4vTG9ja2RlcCk6IEFueSByaXNrcyBpbiB0aGlzIHBhdGNoIHJldm9sdmUgYXJvdW5kIGNncm91cCBzd2FwIGFjY291bnRpbmcsIHBhZ2UgbG9ja2luZywgcmVmY291bnRpbmcsIG9yIGNvbnRyb2wtZmxvdyBsb2dpYyBpbiByZWNsYWltL3dyaXRlb3V0LCB3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IHN0YW5kYXJkIE1NIGFzc2VydGlvbnMsIEtBU0FOLCBhbmQgTG9ja2RlcC5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjU5OjUyLjkwMTgxMjQzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTY1ODMwOTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlRIUF9TV0FQXCIsXG4gICAgXCJTSE1FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX2FsbG9jX3N3YXBcIixcbiAgICBcIm1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luXCIsXG4gICAgXCJwYWdlX2NvdW50ZXJfbWFyZ2luXCIsXG4gICAgXCJzaG1lbV93cml0ZW91dFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5oYW5jZXMgc3dhcCBhbGxvY2F0aW9uIGVycm9yIHJlcG9ydGluZyBpbiBgZm9saW9fYWxsb2Nfc3dhcCgpYCBieSBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuIGNhc2VzIHdoZXJlIGEgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiBmYWlsZWQgZHVlIHRvIGZvbGlvIHNpemUgdnMuIHRvdGFsIHN3YXAvY2dyb3VwIHN3YXAgZXhoYXVzdGlvbi4gSXQgaW50cm9kdWNlcyBgcGFnZV9jb3VudGVyX21hcmdpbigpYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKClgIGFuZCB1cGRhdGVzIGZvbGlvIHNwbGl0dGluZyBkZWNpc2lvbnMgaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL3NobWVtLmNgLlxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSAoS01TQU4pOiBBbGwgbG9jYWwgdmFyaWFibGVzIChgcmV0YCwgYG1hcmdpbmAsIGBtYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZC5cXG4tIE1lbW9yeSBTYWZldHkgXFx1MDAyNiBMb2dpYyAoS0FTQU4vTG9ja2RlcCk6IEFueSByaXNrcyBpbiB0aGlzIHBhdGNoIHJldm9sdmUgYXJvdW5kIGNncm91cCBzd2FwIGFjY291bnRpbmcsIHBhZ2UgbG9ja2luZywgcmVmY291bnRpbmcsIG9yIGNvbnRyb2wtZmxvdyBsb2dpYyBpbiByZWNsYWltL3dyaXRlb3V0LCB3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IHN0YW5kYXJkIE1NIGFzc2VydGlvbnMsIEtBU0FOLCBhbmQgTG9ja2RlcC5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBzd2FwIGFsbG9jYXRpb24gbG9naWMgYnkgcmVmaW5pbmcgZXJyb3IgcmVwb3J0aW5nIGluIGZvbGlvX2FsbG9jX3N3YXAoKSBhbmQgYWRkaW5nIHBhZ2VfY291bnRlcl9tYXJnaW4oKSBhbmQgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oKSB0byBpbnNwZWN0IGhpZXJhcmNoaWNhbCBzd2FwIG1hcmdpbnMuIFRoaXMgY2hhbmdlcyBob3cgbGFyZ2UgZm9saW9zIGFyZSBzcGxpdCBhbmQgaGFuZGxlZCBkdXJpbmcgc3dhcG91dCBpbiBzaG1lbV93cml0ZW91dCgpIGFuZCBwYWdlIHJlY2xhaW0gaW4gc2hyaW5rX2ZvbGlvX2xpc3QoKSB3aGVuIGdsb2JhbCBvciBtZW1jZyBzd2FwIGxpbWl0cyBhcmUgcmVhY2hlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NTk6NTIuOTAxODE2ODAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk0MjI1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzMTUxNmJkNjYyZjkyODE2YWQ2MzUzN2RlMWVlN2VhZjllOTU3Y2I5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDMwIDA0OjU5OjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXFxuaW5kZXggZDY0OWI2YmJiYzg3MS4uMDdiN2NiMTIyNDljNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxcbkBAIC02OCw2ICs2OCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxcbiBcXHRyZXR1cm4gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2Y291bnRlci1cXHUwMDNldXNhZ2UpO1xcbiB9XFxuIFxcbitsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcik7XFxuIHZvaWQgcGFnZV9jb3VudGVyX2NhbmNlbChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4gdm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbiBib29sIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5pbmRleCAwZjk1M2VkOWM4NjMwLi5hNzJlY2YxMmMwMGRiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5AQCAtNTEwLDYgKzUxMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wXFxuIFxcdF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7XFxuIH1cXG4gXFxuK2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIGV4dGVybiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuICNlbHNlXFxuQEAgLTUyMyw2ICs1MjQsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCxcXG4ge1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRyZXR1cm4gUEFHRV9DT1VOVEVSX01BWDtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIFxcdHJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCA0YTE4ZWU0NTA5YWI2Li45YTM4MDQxMzJjMmViIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC01ODAxLDE1ICs1ODAxLDM1IEBAIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0bG9uZyBucl9zd2FwX3BhZ2VzID0gZ2V0X25yX3N3YXBfcGFnZXMoKTtcXG4gXFxuLVxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgZG9fbWVtc3dfYWNjb3VudCgpKVxcbi1cXHRcXHRyZXR1cm4gbnJfc3dhcF9wYWdlcztcXG4tXFx0Zm9yICg7ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpOyBtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSlcXG4tXFx0XFx0bnJfc3dhcF9wYWdlcyA9IG1pbl90KGxvbmcsIG5yX3N3YXBfcGFnZXMsXFxuLVxcdFxcdFxcdFxcdCAgICAgIFJFQURfT05DRShtZW1jZy1cXHUwMDNlc3dhcC5tYXgpIC1cXG4tXFx0XFx0XFx0XFx0ICAgICAgcGFnZV9jb3VudGVyX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwKSk7XFxuK1xcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFkb19tZW1zd19hY2NvdW50KCkpXFxuK1xcdFxcdG5yX3N3YXBfcGFnZXMgPSBtaW4obnJfc3dhcF9wYWdlcywgcGFnZV9jb3VudGVyX21hcmdpbihcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXApKTtcXG4rXFxuIFxcdHJldHVybiBucl9zd2FwX3BhZ2VzO1xcbiB9XFxuIFxcbisvKipcXG4rICogbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4gLSBnZXQgYSBmb2xpbydzIG1lbWNnIHN3YXAgbWFyZ2luXFxuKyAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtY2cgbWFyZ2luIGlzIHF1ZXJpZWRcXG4rICpcXG4rICogUmV0dXJuOiBSZW1haW5pbmcgY2hhcmdlYWJsZSBwYWdlcyBpbiB0aGUgZm9saW8ncyBtZW1jZyBoaWVyYXJjaHkuXFxuKyAqL1xcbitsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbitcXHRsb25nIG1hcmdpbjtcXG4rXFxuK1xcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgZG9fbWVtc3dfYWNjb3VudCgpIHx8XFxuK1xcdCAgICAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpXFxuK1xcdFxcdHJldHVybiBQQUdFX0NPVU5URVJfTUFYO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcXG4rXFx0bWFyZ2luID0gcGFnZV9jb3VudGVyX21hcmdpbihcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXApO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBtYXJnaW47XFxuK31cXG4rXFxuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmNcXG5pbmRleCA2NjFlMGYyYTUxMjdhLi40NTA1NDNmNGIzMThiIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXFxuKysrIGIvbW0vcGFnZV9jb3VudGVyLmNcXG5AQCAtNDYsNiArNDYsMjYgQEAgc3RhdGljIHZvaWQgcHJvcGFnYXRlX3Byb3RlY3RlZF91c2FnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjLFxcbiBcXHR9XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBwYWdlX2NvdW50ZXJfbWFyZ2luIC0gcmVtYWluaW5nIHVzYWJsZSBzcGFjZSB3aXRoaW4gaGllcmFyY2hpY2FsIGxpbWl0c1xcbisgKiBAY291bnRlcjogY291bnRlclxcbisgKlxcbisgKiBSZXR1cm46IFRoZSBtaW5pbXVtIHZhbHVlIG9mIG1heCBtaW51cyB1c2FnZSBhY3Jvc3MgQGNvdW50ZXIgYW5kIGFsbCBvZlxcbisgKiBpdHMgYW5jZXN0b3JzLiBUaGUgdmFsdWUgbWF5IGJlIG5lZ2F0aXZlIGR1cmluZyBhIGNvbmN1cnJlbnQgY2hhcmdlLlxcbisgKi9cXG4rbG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXFxuK3tcXG4rXFx0bG9uZyBtYXJnaW4gPSBQQUdFX0NPVU5URVJfTUFYO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRsb25nIG0gPSBSRUFEX09OQ0UoY291bnRlci1cXHUwMDNlbWF4KSAtIHBhZ2VfY291bnRlcl9yZWFkKGNvdW50ZXIpO1xcbitcXG4rXFx0XFx0bWFyZ2luID0gbWluKG1hcmdpbiwgbSk7XFxuK1xcdH0gd2hpbGUgKChjb3VudGVyID0gY291bnRlci1cXHUwMDNlcGFyZW50KSk7XFxuK1xcbitcXHRyZXR1cm4gbWFyZ2luO1xcbit9XFxuK1xcbiAvKipcXG4gICogcGFnZV9jb3VudGVyX2NhbmNlbCAtIHRha2UgcGFnZXMgb3V0IG9mIHRoZSBsb2NhbCBjb3VudGVyXFxuICAqIEBjb3VudGVyOiBjb3VudGVyXFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXFxuaW5kZXggZGUxNDRhOWE5NTU4Yi4uODRiOGU5ZTA1OTczYiAxMDA2NDRcXG4tLS0gYS9tbS9zaG1lbS5jXFxuKysrIGIvbW0vc2htZW0uY1xcbkBAIC0xNjEyLDcgKzE2MTIsNyBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XFxuIFxcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuIFxcdHBnb2ZmX3QgaW5kZXg7XFxuLVxcdGludCBucl9wYWdlcztcXG4rXFx0aW50IG5yX3BhZ2VzLCByZXQ7XFxuIFxcdGJvb2wgc3BsaXQgPSBmYWxzZTtcXG4gXFxuIFxcdGlmICgoaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSE1FTV9GX0xPQ0tFRCkgfHwgc2JpbmZvLVxcdTAwM2Vub3N3YXApXFxuQEAgLTE2OTMsNyArMTY5Myw4IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0XFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcXG4rXFx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XFxuK1xcdGlmICghcmV0KSB7XFxuIFxcdFxcdGJvb2wgZmlyc3Rfc3dhcHBlZCA9IHNobWVtX3JlY2FsY19pbm9kZShpbm9kZSwgMCwgbnJfcGFnZXMpO1xcbiBcXHRcXHRpbnQgZXJyb3I7XFxuIFxcbkBAIC0xNzQ2LDcgKzE3NDcsNyBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG4gXFx0XFx0Z290byByZWRpcnR5O1xcbiBcXHR9XFxuLVxcdGlmIChucl9wYWdlcyBcXHUwMDNlIDEpXFxuK1xcdGlmIChucl9wYWdlcyBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgcmV0ID09IC1FMkJJRylcXG4gXFx0XFx0Z290byB0cnlfc3BsaXQ7XFxuIHJlZGlydHk6XFxuIFxcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xcbmluZGV4IDUxZjVhNTI1YmI2MWMuLmRjMGNkMGNjNmY2MjYgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xcbisrKyBiL21tL3N3YXBmaWxlLmNcXG5AQCAtMTczNSw3ICsxNzM1LDkgQEAgc3RhdGljIGludCBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiAgKiBzd2FwIGNhY2hlLlxcbiAgKlxcbiAgKiBDb250ZXh0OiBDYWxsZXIgbmVlZHMgdG8gaG9sZCB0aGUgZm9saW8gbG9jay5cXG4tICogUmV0dXJuOiBXaGV0aGVyIHRoZSBmb2xpbyB3YXMgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUuXFxuKyAqIFJldHVybjogJTAgb24gc3VjY2VzcywgJS1FMkJJRyBpZiBzcGxpdHRpbmcgdGhlIGZvbGlvIG1pZ2h0IGFsbG93IHN3YXBvdXQsXFxuKyAqICUtRU5PU1BDIGlmIG5vIGdsb2JhbCBzd2FwIHNwYWNlIGlzIGF2YWlsYWJsZSwgb3IgJS1FTk9NRU0gaWYgc3BsaXR0aW5nXFxuKyAqIHdvdWxkIG5vdCBoZWxwLlxcbiAgKi9cXG4gaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbkBAIC0xNzQ3LDExICsxNzQ5LDExIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcbiBcXHRpZiAob3JkZXIpIHtcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZCxcXG4tXFx0XFx0ICogdGhlIGNhbGxlciBzaG91bGQgc3BsaXQgdGhlIGZvbGlvIGFuZCB0cnkgYWdhaW4uXFxuK1xcdFxcdCAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQuIENoZWNrIGJlbG93XFxuK1xcdFxcdCAqIHdoZXRoZXIgc3BsaXR0aW5nIGFuZCByZXRyeWluZyBjYW4gbWFrZSBwcm9ncmVzcy5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVEhQX1NXQVApKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuIFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBBbGxvY2F0aW9uIHNpemUgc2hvdWxkIG5ldmVyIGV4Y2VlZCBjbHVzdGVyIHNpemVcXG5AQCAtMTc1OSw3ICsxNzYxLDcgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChzaXplIFxcdTAwM2UgU1dBUEZJTEVfQ0xVU1RFUikge1xcbiBcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoMSk7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC0xNzc1LDEzICsxNzc3LDIzIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdH1cXG4gXFxuIFxcdC8qIE5lZWQgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgYWxsb2NhdGlvbiBmYWlsZWQsIGZvciBNRU1DR19TV0FQX0ZBSUwuICovXFxuLVxcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKVxcbitcXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSkge1xcbiBcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxuK1xcdFxcdGdvdG8gZmFpbGVkO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGZhaWxlZDtcXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZmFpbGVkOlxcbitcXHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4rXFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGZvbGlvKSBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHJldHVybiBvcmRlciA/IC1FMkJJRyA6IC1FTk9NRU07XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggZmRkMTMyOTlhMDRhOS4uNmU3NzBhMDhlMjg4MCAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTEyNTksNiArMTI1OSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0IWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xcbitcXHRcXHRcXHRpbnQgcmV0O1xcbitcXG4gXFx0XFx0XFx0aWYgKCEoc2MtXFx1MDAzZWdmcF9tYXNrIFxcdTAwMjYgX19HRlBfSU8pKVxcbiBcXHRcXHRcXHRcXHRnb3RvIGtlZXBfbG9ja2VkO1xcbiBcXHRcXHRcXHRpZiAoZm9saW9fbWF5YmVfZG1hX3Bpbm5lZChmb2xpbykpXFxuQEAgLTEyNzcsMTEgKzEyNzksMTQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbiBcXHRcXHRcXHRcXHQgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXFxuIFxcdFxcdFxcdFxcdFxcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmIChmb2xpb19hbGxvY19zd2FwKGZvbGlvKSkge1xcbitcXHRcXHRcXHRyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTtcXG4rXFx0XFx0XFx0aWYgKHJldCkge1xcbiBcXHRcXHRcXHRcXHRpbnQgX19tYXliZV91bnVzZWQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XFxuIFxcbiBcXHRcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxcbiBcXHRcXHRcXHRcXHRcXHRnb3RvIGFjdGl2YXRlX2xvY2tlZF9zcGxpdDtcXG4rXFx0XFx0XFx0XFx0aWYgKHJldCAhPSAtRTJCSUcpXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xcbiBcXHRcXHRcXHRcXHQvKiBGYWxsYmFjayB0byBzd2FwIG5vcm1hbCBwYWdlcyAqL1xcbiBcXHRcXHRcXHRcXHRpZiAoc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXFxuIFxcdFxcdFxcdFxcdFxcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo1OTo1My4zOTIwMjgzMTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5ODc1MzAyNzU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlRIUF9TV0FQXCIsXG4gICAgXCJTSE1FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX2FsbG9jX3N3YXBcIixcbiAgICBcIm1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luXCIsXG4gICAgXCJwYWdlX2NvdW50ZXJfbWFyZ2luXCIsXG4gICAgXCJzaG1lbV93cml0ZW91dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IHN3YXAgYWxsb2NhdGlvbiBsb2dpYyBieSByZWZpbmluZyBlcnJvciByZXBvcnRpbmcgaW4gZm9saW9fYWxsb2Nfc3dhcCgpIGFuZCBhZGRpbmcgcGFnZV9jb3VudGVyX21hcmdpbigpIGFuZCBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbigpIHRvIGluc3BlY3QgaGllcmFyY2hpY2FsIHN3YXAgbWFyZ2lucy4gVGhpcyBjaGFuZ2VzIGhvdyBsYXJnZSBmb2xpb3MgYXJlIHNwbGl0IGFuZCBoYW5kbGVkIGR1cmluZyBzd2Fwb3V0IGluIHNobWVtX3dyaXRlb3V0KCkgYW5kIHBhZ2UgcmVjbGFpbSBpbiBzaHJpbmtfZm9saW9fbGlzdCgpIHdoZW4gZ2xvYmFsIG9yIG1lbWNnIHN3YXAgbGltaXRzIGFyZSByZWFjaGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMTUxNmJkNjYyZjkyODE2YWQ2MzUzN2RlMWVlN2VhZjllOTU3Y2I5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMzAgMDQ6NTk6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuaW5kZXggZDY0OWI2YmJiYzg3MS4uMDdiN2NiMTIyNDljNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbkBAIC02OCw2ICs2OCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxuIFx0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXHUwMDI2Y291bnRlci1cdTAwM2V1c2FnZSk7XG4gfVxuIFxuK2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKTtcbiB2b2lkIHBhZ2VfY291bnRlcl9jYW5jZWwoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gdm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIGJvb2wgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCAwZjk1M2VkOWM4NjMwLi5hNzJlY2YxMmMwMGRiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtNTEwLDYgKzUxMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wXG4gXHRfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChpZCwgbnJfcGFnZXMpO1xuIH1cbiBcbitsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGV4dGVybiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiBleHRlcm4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiAjZWxzZVxuQEAgLTUyMyw2ICs1MjQsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCxcbiB7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBQQUdFX0NPVU5URVJfTUFYO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIGdldF9ucl9zd2FwX3BhZ2VzKCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA0YTE4ZWU0NTA5YWI2Li45YTM4MDQxMzJjMmViIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC01ODAxLDE1ICs1ODAxLDM1IEBAIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0bG9uZyBucl9zd2FwX3BhZ2VzID0gZ2V0X25yX3N3YXBfcGFnZXMoKTtcbiBcbi1cdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgZG9fbWVtc3dfYWNjb3VudCgpKVxuLVx0XHRyZXR1cm4gbnJfc3dhcF9wYWdlcztcbi1cdGZvciAoOyAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKTsgbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpXG4tXHRcdG5yX3N3YXBfcGFnZXMgPSBtaW5fdChsb25nLCBucl9zd2FwX3BhZ2VzLFxuLVx0XHRcdFx0ICAgICAgUkVBRF9PTkNFKG1lbWNnLVx1MDAzZXN3YXAubWF4KSAtXG4tXHRcdFx0XHQgICAgICBwYWdlX2NvdW50ZXJfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKSk7XG4rXHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWRvX21lbXN3X2FjY291bnQoKSlcbitcdFx0bnJfc3dhcF9wYWdlcyA9IG1pbihucl9zd2FwX3BhZ2VzLCBwYWdlX2NvdW50ZXJfbWFyZ2luKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApKTtcbitcbiBcdHJldHVybiBucl9zd2FwX3BhZ2VzO1xuIH1cbiBcbisvKipcbisgKiBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbiAtIGdldCBhIGZvbGlvJ3MgbWVtY2cgc3dhcCBtYXJnaW5cbisgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbWNnIG1hcmdpbiBpcyBxdWVyaWVkXG4rICpcbisgKiBSZXR1cm46IFJlbWFpbmluZyBjaGFyZ2VhYmxlIHBhZ2VzIGluIHRoZSBmb2xpbydzIG1lbWNnIGhpZXJhcmNoeS5cbisgKi9cbitsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1x0bG9uZyBtYXJnaW47XG4rXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSB8fFxuK1x0ICAgICFmb2xpb19tZW1jZ19jaGFyZ2VkKGZvbGlvKSlcbitcdFx0cmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbitcdG1hcmdpbiA9IHBhZ2VfY291bnRlcl9tYXJnaW4oXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJldHVybiBtYXJnaW47XG4rfVxuK1xuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuY1xuaW5kZXggNjYxZTBmMmE1MTI3YS4uNDUwNTQzZjRiMzE4YiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXG4rKysgYi9tbS9wYWdlX2NvdW50ZXIuY1xuQEAgLTQ2LDYgKzQ2LDI2IEBAIHN0YXRpYyB2b2lkIHByb3BhZ2F0ZV9wcm90ZWN0ZWRfdXNhZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqYyxcbiBcdH1cbiB9XG4gXG4rLyoqXG4rICogcGFnZV9jb3VudGVyX21hcmdpbiAtIHJlbWFpbmluZyB1c2FibGUgc3BhY2Ugd2l0aGluIGhpZXJhcmNoaWNhbCBsaW1pdHNcbisgKiBAY291bnRlcjogY291bnRlclxuKyAqXG4rICogUmV0dXJuOiBUaGUgbWluaW11bSB2YWx1ZSBvZiBtYXggbWludXMgdXNhZ2UgYWNyb3NzIEBjb3VudGVyIGFuZCBhbGwgb2ZcbisgKiBpdHMgYW5jZXN0b3JzLiBUaGUgdmFsdWUgbWF5IGJlIG5lZ2F0aXZlIGR1cmluZyBhIGNvbmN1cnJlbnQgY2hhcmdlLlxuKyAqL1xuK2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxuK3tcbitcdGxvbmcgbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDtcbitcbitcdGRvIHtcbitcdFx0bG9uZyBtID0gUkVBRF9PTkNFKGNvdW50ZXItXHUwMDNlbWF4KSAtIHBhZ2VfY291bnRlcl9yZWFkKGNvdW50ZXIpO1xuK1xuK1x0XHRtYXJnaW4gPSBtaW4obWFyZ2luLCBtKTtcbitcdH0gd2hpbGUgKChjb3VudGVyID0gY291bnRlci1cdTAwM2VwYXJlbnQpKTtcbitcbitcdHJldHVybiBtYXJnaW47XG4rfVxuK1xuIC8qKlxuICAqIHBhZ2VfY291bnRlcl9jYW5jZWwgLSB0YWtlIHBhZ2VzIG91dCBvZiB0aGUgbG9jYWwgY291bnRlclxuICAqIEBjb3VudGVyOiBjb3VudGVyXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IGRlMTQ0YTlhOTU1OGIuLjg0YjhlOWUwNTk3M2IgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4rKysgYi9tbS9zaG1lbS5jXG5AQCAtMTYxMiw3ICsxNjEyLDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcbiBcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdHBnb2ZmX3QgaW5kZXg7XG4tXHRpbnQgbnJfcGFnZXM7XG4rXHRpbnQgbnJfcGFnZXMsIHJldDtcbiBcdGJvb2wgc3BsaXQgPSBmYWxzZTtcbiBcbiBcdGlmICgoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgU0hNRU1fRl9MT0NLRUQpIHx8IHNiaW5mby1cdTAwM2Vub3N3YXApXG5AQCAtMTY5Myw3ICsxNjkzLDggQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTtcbiBcdH1cbiBcbi1cdGlmICghZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcbitcdHJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pO1xuK1x0aWYgKCFyZXQpIHtcbiBcdFx0Ym9vbCBmaXJzdF9zd2FwcGVkID0gc2htZW1fcmVjYWxjX2lub2RlKGlub2RlLCAwLCBucl9wYWdlcyk7XG4gXHRcdGludCBlcnJvcjtcbiBcbkBAIC0xNzQ2LDcgKzE3NDcsNyBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbiBcdFx0Z290byByZWRpcnR5O1xuIFx0fVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxKVxuK1x0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiByZXQgPT0gLUUyQklHKVxuIFx0XHRnb3RvIHRyeV9zcGxpdDtcbiByZWRpcnR5OlxuIFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDUxZjVhNTI1YmI2MWMuLmRjMGNkMGNjNmY2MjYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMTczNSw3ICsxNzM1LDkgQEAgc3RhdGljIGludCBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuICAqIHN3YXAgY2FjaGUuXG4gICpcbiAgKiBDb250ZXh0OiBDYWxsZXIgbmVlZHMgdG8gaG9sZCB0aGUgZm9saW8gbG9jay5cbi0gKiBSZXR1cm46IFdoZXRoZXIgdGhlIGZvbGlvIHdhcyBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZS5cbisgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsICUtRTJCSUcgaWYgc3BsaXR0aW5nIHRoZSBmb2xpbyBtaWdodCBhbGxvdyBzd2Fwb3V0LFxuKyAqICUtRU5PU1BDIGlmIG5vIGdsb2JhbCBzd2FwIHNwYWNlIGlzIGF2YWlsYWJsZSwgb3IgJS1FTk9NRU0gaWYgc3BsaXR0aW5nXG4rICogd291bGQgbm90IGhlbHAuXG4gICovXG4gaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG5AQCAtMTc0NywxMSArMTc0OSwxMSBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIFx0aWYgKG9yZGVyKSB7XG4gXHRcdC8qXG4tXHRcdCAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQsXG4tXHRcdCAqIHRoZSBjYWxsZXIgc2hvdWxkIHNwbGl0IHRoZSBmb2xpbyBhbmQgdHJ5IGFnYWluLlxuK1x0XHQgKiBSZWplY3QgbGFyZ2UgYWxsb2NhdGlvbiB3aGVuIFRIUF9TV0FQIGlzIGRpc2FibGVkLiBDaGVjayBiZWxvd1xuK1x0XHQgKiB3aGV0aGVyIHNwbGl0dGluZyBhbmQgcmV0cnlpbmcgY2FuIG1ha2UgcHJvZ3Jlc3MuXG4gXHRcdCAqL1xuIFx0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RIUF9TV0FQKSlcbi1cdFx0XHRyZXR1cm4gLUVBR0FJTjtcbitcdFx0XHRnb3RvIGZhaWxlZDtcbiBcbiBcdFx0LypcbiBcdFx0ICogQWxsb2NhdGlvbiBzaXplIHNob3VsZCBuZXZlciBleGNlZWQgY2x1c3RlciBzaXplXG5AQCAtMTc1OSw3ICsxNzYxLDcgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0ICovXG4gXHRcdGlmIChzaXplIFx1MDAzZSBTV0FQRklMRV9DTFVTVEVSKSB7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFKDEpO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gZmFpbGVkO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMTc3NSwxMyArMTc3NywyMyBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0fVxuIFxuIFx0LyogTmVlZCB0byBjYWxsIHRoaXMgZXZlbiBpZiBhbGxvY2F0aW9uIGZhaWxlZCwgZm9yIE1FTUNHX1NXQVBfRkFJTC4gKi9cbi1cdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKVxuK1x0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpIHtcbiBcdFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xuK1x0XHRnb3RvIGZhaWxlZDtcbitcdH1cbiBcbiBcdGlmICh1bmxpa2VseSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdGdvdG8gZmFpbGVkO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZmFpbGVkOlxuK1x0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gLUVOT1NQQztcbitcdGlmIChtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihmb2xpbykgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJldHVybiBvcmRlciA/IC1FMkJJRyA6IC1FTk9NRU07XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGZkZDEzMjk5YTA0YTkuLjZlNzcwYTA4ZTI4ODAgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0xMjU5LDYgKzEyNTksOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdCAqL1xuIFx0XHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcbitcdFx0XHRpbnQgcmV0O1xuK1xuIFx0XHRcdGlmICghKHNjLVx1MDAzZWdmcF9tYXNrIFx1MDAyNiBfX0dGUF9JTykpXG4gXHRcdFx0XHRnb3RvIGtlZXBfbG9ja2VkO1xuIFx0XHRcdGlmIChmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKSlcbkBAIC0xMjc3LDExICsxMjc5LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbiBcdFx0XHRcdCAgICBzcGxpdF9mb2xpb190b19saXN0KGZvbGlvLCBmb2xpb19saXN0KSlcbiBcdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWQ7XG4gXHRcdFx0fVxuLVx0XHRcdGlmIChmb2xpb19hbGxvY19zd2FwKGZvbGlvKSkge1xuK1x0XHRcdHJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pO1xuK1x0XHRcdGlmIChyZXQpIHtcbiBcdFx0XHRcdGludCBfX21heWJlX3VudXNlZCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbiBcbiBcdFx0XHRcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkX3NwbGl0O1xuK1x0XHRcdFx0aWYgKHJldCAhPSAtRTJCSUcpXG4rXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuIFx0XHRcdFx0LyogRmFsbGJhY2sgdG8gc3dhcCBub3JtYWwgcGFnZXMgKi9cbiBcdFx0XHRcdGlmIChzcGxpdF9mb2xpb190b19saXN0KGZvbGlvLCBmb2xpb19saXN0KSlcbiBcdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo1OTo1My4zOTIwMjk4MzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzE3NjkzMTM1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhlIHBhdGNoIHRvdWNoZXMgYSBidW5jaCBvZiBrZXkgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXM6IGBwYWdlX2NvdW50ZXIuaGAsIGBzd2FwLmhgLCBgbWVtY29udHJvbC5jYCwgYHBhZ2VfY291bnRlci5jYCwgYHNobWVtLmNgLCBgc3dhcGZpbGUuY2AsIGFuZCBgdm1zY2FuLmNgLiBUaGF0IGdldHMgbXkgYXR0ZW50aW9uIGltbWVkaWF0ZWx5OyBhbnl0aGluZyB0b3VjaGluZyB0aGUgY29yZSBNTSBpcyBhbHdheXMgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjaGFuZ2VzIHRoZW1zZWx2ZXMuIFRoZXJlJ3MgYSBuZXcgZnVuY3Rpb24sIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgd2hpY2ggbG9va3MgbGlrZSBpdCBjYWxjdWxhdGVzIHRoZSByZW1haW5pbmcgdXNhYmxlIHNwYWNlIHdpdGhpbiBoaWVyYXJjaGljYWwgbGltaXRzLiBJdCdzIHVzZWQgaW4gYSByZWZhY3RvcmVkIGBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzYCwgYW5kIGFsc28gdGhlcmUncyBhIG5ldyBmdW5jdGlvbiBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLiBUaG9zZSBzZWVtIHJlbGF0ZWQgdG8gbWVtY2cgc3dhcCBhY2NvdW50aW5nLiBUaGVuIEkgc2VlIHRoYXQgYHNobWVtX3dyaXRlb3V0YCBub3cgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGZvbGlvX2FsbG9jX3N3YXBgLCBhbmQgcGFydGljdWxhcmx5IHRoZSBjYXNlIG9mIGBucl9wYWdlcyBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgcmV0ID09IC1FMkJJR2AuXG5cbmBmb2xpb19hbGxvY19zd2FwYCBzZWVtcyB0byBiZSB0aGUgYmlnIGNoYW5nZSwgYWx0ZXJpbmcgaXRzIHJldHVybiB2YWx1ZXMgdG8gc2lnbmFsIG1vcmUgZ3JhbnVsYXIgcmVhc29ucyBmb3IgZmFpbHVyZS4gSXQncyBub3QganVzdCBzdWNjZXNzL2ZhaWx1cmUgYW55bW9yZTsgbm93IGl0IHJldHVybnMgc3BlY2lmaWMgZXJyb3IgY29kZXMgbGlrZSBgLUUyQklHYCwgYC1FTk9TUENgLCBhbmQgYC1FTk9NRU1gLiBUaGUgbG9naWMgd2l0aGluIGBmb2xpb19hbGxvY19zd2FwYCBpdHNlbGYgaGFzIGJlZW4gYmVlZmVkIHVwIHRvIGNoZWNrIHN3YXAgbWFyZ2lucyBhbmQgbWVtY2cgbWFyZ2lucy4gQW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgaXMgbm93IGNoZWNraW5nIGByZXRgIGZyb20gYGZvbGlvX2FsbG9jX3N3YXBgIGFzIHdlbGwuXG5cblRoZSBpbXBsaWNhdGlvbnMgYXJlIGNsZWFyOiB0aGlzIHBhdGNoIGlzIGRlZXBseSBpbnRlcnR3aW5lZCB3aXRoIHN3YXAgYWxsb2NhdGlvbiwgdGhlIHNwbGl0dGluZyBvZiBsYXJnZSBmb2xpb3MsIG1lbWNnIHN3YXAgYWNjb3VudGluZyBhbmQgdGhyb3R0bGluZywgc2htZW0gc3dhcG91dCwgYW5kIGV2ZW4gcGFnZSByZWNsYWltIHRocm91Z2ggYHNocmlua19mb2xpb19saXN0YC4gVGhpcyBpcyBhbGwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgaW5mbHVlbmNpbmcgZXhlY3V0aW9uIGZsb3cgaW4gcmVzcG9uc2UgdG8gbWVtb3J5IHByZXNzdXJlcyBhbmQsIGltcG9ydGFudGx5LCBhbHRlcmluZyBlcnJvciBjb2Rlcy5cblxuSXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhpcyBpcyBjcnVjaWFsIG1tIGxvZ2ljIGRlYWxpbmcgd2l0aCBzd2Fwb3V0LCBzcGxpdHRpbmcgb2YgZm9saW9zIHVuZGVyIHN3YXAgcHJlc3N1cmUsIGFuZCBtZW1jZyBsaW1pdHMuIEl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCAoUUVNVSwgc3l6a2FsbGVyKS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gY29udHJvbCBmbG93IGFuZCByZXR1cm4gY29kZXMgaW4gdGhlIGtlcm5lbCBhcmUgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyB0aGF0IGZ1enppbmcgaXMgZGVzaWduZWQgdG8gdW5jb3ZlciBzdWJ0bGUgZXJyb3JzIG9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLlxuXG5UaGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3MgYW5kIGZvY3VzIG15IHN5bWJvbCBhbmFseXNpcyBhcHByb3ByaWF0ZWx5LiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBhbmQgaWRlbnRpZnkgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIG9yIGFmZmVjdCB0aGlzIGNvZGUsIHNvIEkgY2FuIHRhcmdldCB0aGUgZnV6emluZyBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg1MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA1OjAwOjEwLjU2ODk2NDgxNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTI3MDc5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19hbGxvY19zd2FwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9MTYwNz1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zaG1lbS5jLTE2OTUtXFxubW0vc2htZW0uYzoxNjk2OlxcdHJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pO1xcbm1tL3NobWVtLmMtMTY5Ny1cXHRpZiAoIXJldCkge1xcbi0tXFxubW0vc3dhcC5oPTIyNT1leHRlcm4gaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCk7XFxuLS1cXG5tbS9zd2FwLmgtMjMzLSAqXFxubW0vc3dhcC5oOjIzNDogKiBmb2xpb19hbGxvY19zd2FwKCk6IHRoZSBlbnRyeSBwb2ludCBmb3IgYSBmb2xpbyB0byBiZSBzd2FwcGVkXFxubW0vc3dhcC5oLTIzNS0gKiBvdXQuIEl0IGFsbG9jYXRlcyBzd2FwIHNsb3RzIGFuZCBwaW5zIHRoZSBzbG90cyB3aXRoIHN3YXAgY2FjaGUuXFxuLS1cXG5tbS9zd2FwLmgtMjQ1LSAqL1xcbm1tL3N3YXAuaDoyNDY6aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vc3dhcC5oLTI0Ny1pbnQgZm9saW9fZHVwX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbi0tXFxubW0vc3dhcC5oPTM2MD1zdGF0aWMgaW5saW5lIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpfX3N3YXBfZW50cnlfdG9faW5mbyhzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL3N3YXAuaC0zNjQtXFxubW0vc3dhcC5oOjM2NTpzdGF0aWMgaW5saW5lIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vc3dhcC5oLTM2Ni17XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTkwPXN0YXRpYyBQTElTVF9IRUFEKHN3YXBfYWN0aXZlX2hlYWQpO1xcbi0tXFxubW0vc3dhcGZpbGUuYy05NC0gKiBwcm90ZWN0ZWQgd2l0aCBzd2FwX2F2YWlsX2xvY2ssIG9yZGVyZWQgYnkgcHJpb3JpdHkuXFxubW0vc3dhcGZpbGUuYzo5NTogKiBUaGlzIGlzIHVzZWQgYnkgZm9saW9fYWxsb2Nfc3dhcCgpIGluc3RlYWQgb2Ygc3dhcF9hY3RpdmVfaGVhZFxcbm1tL3N3YXBmaWxlLmMtOTYtICogYmVjYXVzZSBzd2FwX2FjdGl2ZV9oZWFkIGluY2x1ZGVzIGFsbCBzd2FwX2luZm9fc3RydWN0cyxcXG5tbS9zd2FwZmlsZS5jOjk3OiAqIGJ1dCBmb2xpb19hbGxvY19zd2FwKCkgZG9lc24ndCBuZWVkIHRvIGxvb2sgYXQgZnVsbCBvbmVzLlxcbm1tL3N3YXBmaWxlLmMtOTgtICogVGhpcyB1c2VzIGl0cyBvd24gbG9jayBpbnN0ZWFkIG9mIHN3YXBfbG9jayBiZWNhdXNlIHdoZW4gYVxcbi0tXFxubW0vc3dhcGZpbGUuYz05MTE9c3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTkyNC1cXHQvKlxcbm1tL3N3YXBmaWxlLmM6OTI1OlxcdCAqIEFsbCBtbSBzd2FwIGFsbG9jYXRpb24gc3RhcnRzIHdpdGggYSBmb2xpbyAoZm9saW9fYWxsb2Nfc3dhcCksXFxubW0vc3dhcGZpbGUuYy05MjYtXFx0ICogaXQncyBhbHNvIHRoZSBvbmx5IGFsbG9jYXRpb24gcGF0aCBmb3IgbGFyZ2Ugb3JkZXJzIGFsbG9jYXRpb24uXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE2OTU9c3RhdGljIGludCBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xNzMwLS8qKlxcbm1tL3N3YXBmaWxlLmM6MTczMTogKiBmb2xpb19hbGxvY19zd2FwIC0gYWxsb2NhdGUgc3dhcCBzcGFjZSBmb3IgYSBmb2xpb1xcbm1tL3N3YXBmaWxlLmMtMTczMi0gKiBAZm9saW86IGZvbGlvIHdlIHdhbnQgdG8gbW92ZSB0byBzd2FwXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE3NDEtICovXFxubW0vc3dhcGZpbGUuYzoxNzQyOmludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vc3dhcGZpbGUuYy0xNzQzLXtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjgwOT1zdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjg5Mi1cXHQgKiBhbmQgZXZlbiBzaG1lbV93cml0ZW91dCgpIGNvdWxkIGhhdmUgYmVlbiBwcmVlbXB0ZWQgYWZ0ZXJcXG5tbS9zd2FwZmlsZS5jOjI4OTM6XFx0ICogZm9saW9fYWxsb2Nfc3dhcCgpLCB0ZW1wb3JhcmlseSBoaWRpbmcgdGhhdCBzd2FwLiAgSXQncyBlYXN5XFxubW0vc3dhcGZpbGUuYy0yODk0LVxcdCAqIGFuZCByb2J1c3QgKHRob3VnaCBjcHUtaW50ZW5zaXZlKSBqdXN0IHRvIGtlZXAgcmV0cnlpbmcuXFxuLS1cXG5tbS92bXNjYW4uYz0xMDU4PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTEyODEtXFx0XFx0XFx0fVxcbm1tL3Ztc2Nhbi5jOjEyODI6XFx0XFx0XFx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XFxubW0vdm1zY2FuLmMtMTI4My1cXHRcXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5tbS92bXNjYW4uYy0xMzAwLVxcdFxcdFxcdFxcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX1NXUE9VVF9GQUxMQkFDSyk7XFxubW0vdm1zY2FuLmM6MTMwMTpcXHRcXHRcXHRcXHRpZiAoZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpXFxubW0vdm1zY2FuLmMtMTMwMi1cXHRcXHRcXHRcXHRcXHRnb3RvIGFjdGl2YXRlX2xvY2tlZF9zcGxpdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDU6MDA6MTAuNjM4MjQ1MDU5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY5OTc2MTY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIFN3YXAgRm9saW8gQWxsb2NhdGlvbiBhbmQgTWVtY2cgSW50ZXJhY3Rpb24qKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZW5hYmxpbmcgY29uZGl0aW9ucyBmb3IgYGZvbGlvX2FsbG9jX3N3YXBgIGFuZCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBrbm93IHRoZXNlIGFyZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBzd2FwcGluZywgcGFydGljdWxhcmx5IGluIGNvbmp1bmN0aW9uIHdpdGggbWVtb3J5IGNncm91cHMuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIHN3YXAgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGhlYWRlciBmaWxlcy4gTGV0J3Mgc2VlLi4uIEknbGwgY2hlY2sgYGluY2x1ZGUvbGludXgvc3dhcC5oYCBmaXJzdDsgb2Z0ZW4gdGhlIHB1YmxpYy1mYWNpbmcgZGVmaW5pdGlvbnMgYW5kIG1hY3JvcyBhcmUgaG91c2VkIHRoZXJlLiBJZiB0aGF0J3Mgbm90IHlpZWxkaW5nIHRoZSByaWdodCBjbHVlcywgSSdsbCBzd2l0Y2ggb3ZlciB0byBgbW0vc3dhcC5oYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgbG93ZXItbGV2ZWwgaW1wbGVtZW50YXRpb24gZGV0YWlscywgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgcGVyaGFwcyBtb3JlIG51YW5jZWQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMgcmVsYXRlZCB0byBlbmFibGluZyB0aGVzZSBmZWF0dXJlcy4gS25vd2luZyB0aGUga2VybmVsJ3Mgc291cmNlIGxheW91dCBzbyB3ZWxsLCBJJ20gY29uZmlkZW50IEknbGwgcGlucG9pbnQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHF1aWNrbHkuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aG9zZSBmaWxlcyBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscyFcblxuXG4iLCJJbnB1dFRva2VucyI6NzEwMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA1OjAwOjE3LjMzODAwOTEyN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc3dhcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbiA1MDE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDUwMjpcXHRcXHRyZXR1cm4gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbyk7XFxuIDUwMzpcXHR9XFxuIDUwNDpcXHRcXG4gNTA1OlxcdGV4dGVybiB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpO1xcbiA1MDY6XFx0c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbiA1MDc6XFx0e1xcbiA1MDg6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gNTA5OlxcdFxcdFxcdHJldHVybjtcXG4gNTEwOlxcdFxcdF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7XFxuIDUxMTpcXHR9XFxuIDUxMjpcXHRcXG4gNTEzOlxcdGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIDUxNDpcXHRleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuIDUxNTpcXHRleHRlcm4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gNTE2OlxcdCNlbHNlXFxuIDUxNzpcXHRzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiA1MTg6XFx0e1xcbiA1MTk6XFx0XFx0cmV0dXJuIDA7XFxuIDUyMDpcXHR9XFxuIDUyMTpcXHRcXG4gNTIyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXFxuIDUyMzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbiA1MjQ6XFx0e1xcbiA1MjU6XFx0fVxcbiA1MjY6XFx0XFxuIDUyNzpcXHRzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gNTI4OlxcdHtcXG4gNTI5OlxcdFxcdHJldHVybiBQQUdFX0NPVU5URVJfTUFYO1xcbiA1MzA6XFx0fVxcbiA1MzE6XFx0XFxuIDUzMjpcXHRzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIDUzMzpcXHR7XFxuIDUzNDpcXHRcXHRyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTtcXG4gNTM1OlxcdH1cXG4gNTM2OlxcdFxcbiA1Mzc6XFx0c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDUzODpcXHR7XFxuIDUzOTpcXHRcXHRyZXR1cm4gdm1fc3dhcF9mdWxsKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA1OjAwOjE3LjMzODEwNjcwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3OTA0ODIzNzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRha2luZyBhIGxvb2sgYXQgbGluZSA1MDAtaXNoIG9mIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBuZXJ2b3VzIHN5c3RlbSBmb3IgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBzd2FwcGluZywgc28gSSBoYXZlIGEgaHVuY2ggdGhhdCBzb21ldGhpbmcgaW50ZXJlc3Rpbmcgd2lsbCBiZSB0aGVyZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byBzd2FwIGVudHJ5IG1hbmFnZW1lbnQsIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucywgb3IgcGVyaGFwcyBzb21lIGtleSBmdW5jdGlvbiBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHN3YXAgaW4vb3V0IG9wZXJhdGlvbnMuIEl0IGNvdWxkIGJlIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBzd2FwIGNhY2hlIGl0c2VsZi4gT3IgbWF5YmUgYW4gaW50ZXJlc3RpbmcgZGVmaW5pdGlvbiBvZiBzb21lIHNvcnQuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgZ29vZGllcyBhd2FpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDU6MDA6MzUuMjQyOTMyNTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3N3YXAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzA6XFx0XFxuIDQ3MTpcXHRzdGF0aWMgaW5saW5lIGludCBhZGRfc3dhcF9leHRlbnQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcXG4gNDcyOlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzdGFydF9wYWdlLFxcbiA0NzM6XFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzZWN0b3JfdCBzdGFydF9ibG9jaylcXG4gNDc0OlxcdHtcXG4gNDc1OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NzY6XFx0fVxcbiA0Nzc6XFx0I2VuZGlmIC8qIENPTkZJR19TV0FQICovXFxuIDQ3ODpcXHQjaWZkZWYgQ09ORklHX01FTUNHXFxuIDQ3OTpcXHR2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xcbiA0ODA6XFx0I2VuZGlmXFxuIDQ4MTpcXHRcXG4gNDgyOlxcdCNpZiBkZWZpbmVkKENPTkZJR19TV0FQKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQkxLX0NHUk9VUClcXG4gNDgzOlxcdHZvaWQgX19mb2xpb190aHJvdHRsZV9zd2FwcmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApO1xcbiA0ODQ6XFx0c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4gNDg1OlxcdHtcXG4gNDg2OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIDQ4NzpcXHRcXHRcXHRyZXR1cm47XFxuIDQ4ODpcXHRcXHRfX2ZvbGlvX3Rocm90dGxlX3N3YXByYXRlKGZvbGlvLCBnZnApO1xcbiA0ODk6XFx0fVxcbiA0OTA6XFx0I2Vsc2VcXG4gNDkxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb190aHJvdHRsZV9zd2FwcmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxuIDQ5MjpcXHR7XFxuIDQ5MzpcXHR9XFxuIDQ5NDpcXHQjZW5kaWZcXG4gNDk1OlxcdFxcbiA0OTY6XFx0I2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TV0FQKVxcbiA0OTc6XFx0aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIDQ5ODpcXHRzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiA0OTk6XFx0e1xcbiA1MDA6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gNTAxOlxcdFxcdFxcdHJldHVybiAwO1xcbiA1MDI6XFx0XFx0cmV0dXJuIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pO1xcbiA1MDM6XFx0fVxcbiA1MDQ6XFx0XFxuIDUwNTpcXHRleHRlcm4gdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKTtcXG4gNTA2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4gNTA3OlxcdHtcXG4gNTA4OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIDUwOTpcXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA1OjAwOjM1LjI0MzAxMjE4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQzMDgxMzE3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZyBvcHRpb25zIOKAkyBsZXQncyBzZWUgaWYgSSdtIG9uIHRoZSByaWdodCB0cmFjayBoZXJlLi4uXG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlOiBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGl0J3MgY2xlYXIgdGhhdCBgQ09ORklHX01FTUNHYCAobWVtb3J5IGNncm91cHMpIGFuZCBgQ09ORklHX1NXQVBgIGFyZSBvYnZpb3VzbHkgZnVuZGFtZW50YWwuIEdvdHRhIGdldCB0aG9zZSByaWdodCB0byBoYXZlIGEgdXNhYmxlIHN5c3RlbSEgQnV0LCBJJ20gYWxyZWFkeSB0aGlua2luZyBhaGVhZCwgYW5kIHdhbnQgdG8gY29uc2lkZXIgaG93IHRvIG9wdGltaXplIHN3YXBwaW5nIGFuZCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLiBXaGF0J3MgdGhlIHJlbGF0aW9uc2hpcCwgc3BlY2lmaWNhbGx5LCBiZXR3ZWVuIGBDT05GSUdfVEhQX1NXQVBgIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYD8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgaGF2aW5nIG9uZSB3aXRob3V0IHRoZSBvdGhlciBtYWtlcyBzZW5zZSwgb3IgaWYgdGhlaXIgaW50ZXJwbGF5IGlzIGVzc2VudGlhbCB0byBnZXQgdGhlIHN5c3RlbSBiZWhhdmluZyBhcyBJIGV4cGVjdC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhwbG9yZSB0aGVpciBpbnRlcmFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkwOCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDU6MDA6NDkuNTUxMTQ2MTE1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODQ0MjExMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRIUF9TV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9OTY0PWVuZGNob2ljZVxcbm1tL0tjb25maWctOTY1LVxcbm1tL0tjb25maWc6OTY2OmNvbmZpZyBUSFBfU1dBUFxcbm1tL0tjb25maWctOTY3LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDU6MDA6NDkuOTM1NTc1NjI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNzEwMDQxMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIHplcm8gaW4gb24gYG1tL0tjb25maWdgLiBJJ3ZlIGdvdCBhIGh1bmNoIGFib3V0IHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGxpbmUgOTY2IGluIGBtbS9LY29uZmlnYCBpcyBvZnRlbiBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgd2hlbiBJJ20gY2hhc2luZyBzb21ldGhpbmcgc3BlY2lmaWMuIENvdWxkIGJlIGEgZmVhdHVyZSBmbGFnLCBhIGRlcGVuZGVuY3ksIG9yIGEgZGVmYXVsdCBzZXR0aW5nIEknbSB0cnlpbmcgdG8gdHJhY2UuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiB0aGVyZSBhbmQgc2VlIHdoYXQgaXMgYXZhaWxhYmxlIHdpdGhpbiB0aGF0IGxpbmUgb2YgY29kZS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBhcmVhIG9mIHRoZSBrZXJuZWwgY29uZmlnIGluIG1vcmUgZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjM2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDU6MDE6MjAuNjQ1NjE4ODcxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk1NTpcXHRcXHQgIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbnMuXFxuIDk1NjpcXHRcXG4gOTU3OlxcdFxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbiA5NTg6XFx0XFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbiA5NTk6XFx0XFx0aGVscFxcbiA5NjA6XFx0XFx0ICBFbmFibGUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBmb3IgdGhlIHRtcGZzIG1vdW50IGV4Y2x1c2l2ZWx5IHdoZW5cXG4gOTYxOlxcdFxcdCAgYXBwbGljYXRpb25zIHN1cHBseSB0aGUgbWFkdmlzZShNQURWX0hVR0VQQUdFKSBoaW50LlxcbiA5NjI6XFx0XFx0ICBUaGlzIGVuc3VyZXMgdGhhdCBodWdlcGFnZXMgYXJlIHVzZWQgb25seSBpbiByZXNwb25zZSB0byBleHBsaWNpdFxcbiA5NjM6XFx0XFx0ICByZXF1ZXN0cyBmcm9tIGFwcGxpY2F0aW9ucy5cXG4gOTY0OlxcdGVuZGNob2ljZVxcbiA5NjU6XFx0XFxuIDk2NjpcXHRjb25maWcgVEhQX1NXQVBcXG4gOTY3OlxcdFxcdGRlZl9ib29sIHlcXG4gOTY4OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9XQU5UU19USFBfU1dBUCBcXHUwMDI2XFx1MDAyNiBTV0FQIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuIDk2OTpcXHRcXHRoZWxwXFxuIDk3MDpcXHRcXHQgIFN3YXAgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBpbiBvbmUgcGllY2UsIHdpdGhvdXQgc3BsaXR0aW5nLlxcbiA5NzE6XFx0XFx0ICBYWFg6IEZvciBub3csIHN3YXAgY2x1c3RlciBiYWNraW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZVxcbiA5NzI6XFx0XFx0ICB3aWxsIGJlIHNwbGl0IGFmdGVyIHN3YXBvdXQuXFxuIDk3MzpcXHRcXG4gOTc0OlxcdFxcdCAgRm9yIHNlbGVjdGlvbiBieSBhcmNoaXRlY3R1cmVzIHdpdGggcmVhc29uYWJsZSBUSFAgc2l6ZXMuXFxuIDk3NTpcXHRcXG4gOTc2OlxcdGNvbmZpZyBOT19QQUdFX01BUENPVU5UXFxuIDk3NzpcXHRcXHRib29sIFxcXCJObyBwZXItcGFnZSBtYXBjb3VudCAoRVhQRVJJTUVOVEFMKVxcXCJcXG4gOTc4OlxcdFxcdGhlbHBcXG4gOTc5OlxcdFxcdCAgRG8gbm90IG1haW50YWluIHBlci1wYWdlIG1hcGNvdW50cyBmb3IgcGFnZXMgcGFydCBvZiBsYXJnZXJcXG4gOTgwOlxcdFxcdCAgYWxsb2NhdGlvbnMsIHN1Y2ggYXMgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcy5cXG4gOTgxOlxcdFxcbiA5ODI6XFx0XFx0ICBXaGVuIHRoaXMgY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkLCBzb21lIGludGVyZmFjZXMgdGhhdCByZWxpZWQgb25cXG4gOTgzOlxcdFxcdCAgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIHJlbHkgb24gbGVzcy1wcmVjaXNlIHBlci1hbGxvY2F0aW9uIGluZm9ybWF0aW9uXFxuIDk4NDpcXHRcXHQgIGluc3RlYWQ6IGZvciBleGFtcGxlLCB1c2luZyB0aGUgYXZlcmFnZSBwZXItcGFnZSBtYXBjb3VudCBpbiBzdWNoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA1OjAxOjIwLjY0NTc0OTU3MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjg5OTk0Nzg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3dhcCBhbmQgTWVtb3J5IE1hbmFnZW1lbnQgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBhbmQgc3dhcC4gRmlyc3QgdGhpbmdzIGZpcnN0OiBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19TV0FQYCBpbiBLY29uZmlnLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQuIEFuZCB3aGlsZSBJJ20gYXQgaXQsIEkgc2hvdWxkIHNlZSBpZiBgQ09ORklHX1NITUVNYCBoYXMgYW55IGJlYXJpbmcgb24gdGhpcy5cblxuTmV4dCwgSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMuIEhlcmUncyB3aGF0IEkndmUgZ290OlxuXG4xLiAgYHBhZ2VfY291bnRlcl9tYXJnaW5gIGluIGBtbS9wYWdlX2NvdW50ZXIuY2BcbjIuICBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gIGluIGBtbS9tZW1jb250cm9sLmNgXG4zLiAgYG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXNgIGluIGBtbS9tZW1jb250cm9sLmNgXG40LiAgYGZvbGlvX2FsbG9jX3N3YXBgIGluIGBtbS9zd2FwZmlsZS5jYFxuNS4gIGBzaG1lbV93cml0ZW91dGAgaW4gYG1tL3NobWVtLmNgXG42LiAgYHNocmlua19mb2xpb19saXN0YCBpbiBgbW0vdm1zY2FuLmNgXG5cblJpZ2h0LCBgc2hyaW5rX2ZvbGlvX2xpc3RgIGlzIHN0YXRpYywgd2hpY2ggaXMgZ29vZCB0byBrbm93LCBidXQgdGhlIG90aGVycyBsb29rIGludGVyZXN0aW5nLiBUaGV5J3JlIG5vbi1zdGF0aWMsIHNvIHRoZSBzY29wZSBhbmQgdmlzaWJpbGl0eSBhcmUgYSBiaXQgZGlmZmVyZW50LCBwb3RlbnRpYWxseSBpbmRpY2F0aW5nIG1vcmUgaW1wb3J0YW50IEFQSSBlbnRyeXBvaW50cy5cblxuTm93LCB0byBuYWlsIGRvd24gdGhlIGltcG9ydGFudCBBUEkgZW50cnlwb2ludHMgZm9yIEZvY3VzU3ltYm9scywgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBub24taG90LXBhdGgsIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnQgZnVuY3Rpb25zOiBgZm9saW9fYWxsb2Nfc3dhcGAsIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYW5kIGBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uLlxuXG5BbmQgZmluYWxseSwgSSdsbCBkb3VibGUtY2hlY2sgYHNobWVtX3dyaXRlb3V0YCB0byBzZWUgaWYgaXQncyBzdGF0aWMgb3IgZXhwb3J0ZWQuIFRoYXQgZGV0YWlsIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgYW5kIHVzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkwOSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA1OjAxOjU3LjU0NTcwMDY3NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1NjQ1Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtX3dyaXRlb3V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9NDc9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc2htX21udCBfX3JvX2FmdGVyX2luaXQ7XFxuLS1cXG5tbS9zaG1lbS5jLTEwMS0vKlxcbm1tL3NobWVtLmM6MTAyOiAqIHNobWVtX2ZhbGxvY2F0ZSBjb21tdW5pY2F0ZXMgd2l0aCBzaG1lbV9mYXVsdCBvciBzaG1lbV93cml0ZW91dCB2aWFcXG5tbS9zaG1lbS5jLTEwMy0gKiBpbm9kZS1cXHUwMDNlaV9wcml2YXRlICh3aXRoIGlfcndzZW0gbWFraW5nIHN1cmUgdGhhdCBpdCBoYXMgb25seSBvbmUgdXNlciBhdFxcbi0tXFxubW0vc2htZW0uYz00MTQ9c3RhdGljIHZvaWQgc2htZW1fZnJlZV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzaXplX3QgZnJlZWRfaXNwYWNlKVxcbi0tXFxubW0vc2htZW0uYy00MzUtICpcXG5tbS9zaG1lbS5jOjQzNjogKiBSZXR1cm46IHRydWUgaWYgc3dhcHBlZCB3YXMgaW5jcmVtZW50ZWQgZnJvbSAwLCBmb3Igc2htZW1fd3JpdGVvdXQoKS5cXG5tbS9zaG1lbS5jLTQzNy0gKi9cXG5tbS9zaG1lbS5jPTQzOD1ib29sIHNobWVtX3JlY2FsY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIGFsbG9jZWQsIGxvbmcgc3dhcHBlZClcXG4tLVxcbm1tL3NobWVtLmMtNDUxLVxcdCAqIGFmdGVyIGlfbWFwcGluZy1cXHUwMDNlbnJwYWdlcyBoYXMgYWxyZWFkeSBiZWVuIGFkanVzdGVkICh1cCBvciBkb3duKSxcXG5tbS9zaG1lbS5jOjQ1MjpcXHQgKiBzaG1lbV93cml0ZW91dCgpIGhhcyB0byByYWlzZSBzd2FwcGVkIGJlZm9yZSBucnBhZ2VzIGlzIGxvd2VyZWQgLVxcbm1tL3NobWVtLmMtNDUzLVxcdCAqIHRvIHN0b3AgYSByYWNpbmcgc2htZW1fcmVjYWxjX2lub2RlKCkgZnJvbSB0aGlua2luZyB0aGF0IGEgcGFnZSBoYXNcXG4tLVxcbm1tL3NobWVtLmM9MTU1Nj1pbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXFxuLS1cXG5tbS9zaG1lbS5jLTE1OTktLyoqXFxubW0vc2htZW0uYzoxNjAwOiAqIHNobWVtX3dyaXRlb3V0IC0gV3JpdGUgdGhlIGZvbGlvIHRvIHN3YXBcXG5tbS9zaG1lbS5jLTE2MDEtICogQGN0eDogc3dhcCBJL08gY29udGV4dFxcbi0tXFxubW0vc2htZW0uYy0xNjA2LSAqL1xcbm1tL3NobWVtLmM6MTYwNzppbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vc2htZW0uYy0xNjA4LVxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuLS1cXG5tbS9zaG1lbS5jLTE3NDMtXFx0XFx0ICogYnV0IEknbSBhIGxpdHRsZSBuZXJ2b3VzIGFib3V0IGxldHRpbmcgdGhpcyBmb2xpbyBvdXQgb2ZcXG5tbS9zaG1lbS5jOjE3NDQ6XFx0XFx0ICogc2htZW1fd3JpdGVvdXQoKSBpbiBhIGh5YnJpZCBoYWxmLXRtcGZzLWhhbGYtc3dhcCBzdGF0ZVxcbm1tL3NobWVtLmMtMTc0NS1cXHRcXHQgKiBlLmcuIGZvbGlvX21hcHBpbmcoZm9saW8pIG1pZ2h0IGdpdmUgYW4gdW5leHBlY3RlZCBhbnN3ZXIuXFxuLS1cXG5tbS9zaG1lbS5jPTE3NTc9aW50IHNobWVtX3dyaXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zaG1lbS5jLTE3NjEtXFxubW0vc2htZW0uYzoxNzYyOlxcdGVyciA9IHNobWVtX3dyaXRlb3V0KFxcdTAwMjZjdHgsIGZvbGlvLCBOVUxMKTtcXG5tbS9zaG1lbS5jLTE3NjMtXFx0c3dhcF93cml0ZV9zdWJtaXQoXFx1MDAyNmN0eCk7XFxuLS1cXG5tbS9zaG1lbS5jPTM2MjQ9c3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcXG4tLVxcbm1tL3NobWVtLmMtMzc2MC1cXHRcXHQvKlxcbm1tL3NobWVtLmM6Mzc2MTpcXHRcXHQgKiBJbmZvcm0gc2htZW1fd3JpdGVvdXQoKSBob3cgZmFyIHdlIGhhdmUgcmVhY2hlZC5cXG5tbS9zaG1lbS5jLTM3NjItXFx0XFx0ICogTm8gbmVlZCBmb3IgbG9jayBvciBiYXJyaWVyOiB3ZSBoYXZlIHRoZSBwYWdlIGxvY2suXFxuLS1cXG5tbS9zd2FwLmg9NDY1PWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3dhcF9vcHMgc3dhcF9iZGV2X29wcztcXG5tbS9zd2FwLmgtNDY2LVxcbm1tL3N3YXAuaDo0Njc6aW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3N3YXAuaC00NjgtXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTI4MDk9c3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI4OTEtXFx0ICogZXhpdF9tbWFwKCksIHdoaWNoIHByb2NlZWRzIGF0IGl0cyBvd24gaW5kZXBlbmRlbnQgcGFjZTtcXG5tbS9zd2FwZmlsZS5jOjI4OTI6XFx0ICogYW5kIGV2ZW4gc2htZW1fd3JpdGVvdXQoKSBjb3VsZCBoYXZlIGJlZW4gcHJlZW1wdGVkIGFmdGVyXFxubW0vc3dhcGZpbGUuYy0yODkzLVxcdCAqIGZvbGlvX2FsbG9jX3N3YXAoKSwgdGVtcG9yYXJpbHkgaGlkaW5nIHRoYXQgc3dhcC4gIEl0J3MgZWFzeVxcbi0tXFxubW0vdm1zY2FuLmM9NjIxPXN0YXRpYyBwYWdlb3V0X3QgcGFnZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS92bXNjYW4uYy02NTctXFx0aWYgKHNobWVtX21hcHBpbmcobWFwcGluZykpXFxubW0vdm1zY2FuLmM6NjU4OlxcdFxcdHJlcyA9IHNobWVtX3dyaXRlb3V0KGN0eCwgZm9saW8sIGZvbGlvX2xpc3QpO1xcbm1tL3Ztc2Nhbi5jLTY1OS1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA1OjAxOjU3Ljk3MTM1MjE0MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODczOTY5NDg3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbnZlc3RpZ2F0aW9uIGludG8gU3dhcCBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBgc2htZW1fd3JpdGVvdXRgIGlzIGRlZmluZWQgaW4gYG1tL3N3YXAuaGAsIGFuZCBpdCdzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgdXNlZnVsIHRvIGtub3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gbWVtb3J5IGNncm91cHMgYW5kIHN3YXBwaW5nLCBzbyBsZXQgbWUgcXVpY2tseSByZXZpZXcgYSBmZXcga2V5IGZ1bmN0aW9uczogYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYGZvbGlvX2FsbG9jX3N3YXBgLCBgc2htZW1fd3JpdGVvdXRgIChvZiBjb3Vyc2UhKSwgYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXNgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNvcmUgcGllY2VzLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEknbSBwcmV0dHkgc3VyZSBJIGNhbiBmaW5kIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBpbiBgbW0vTWFrZWZpbGVgIG9yIHBlcmhhcHMgYGluY2x1ZGUvbGludXgvc3dhcC5oYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5OlxuXG4qICAgYFNXQVBgOiBUaGlzIG9uZSdzIHRoZSBmdW5kYW1lbnRhbCBlbmFibGVyIGZvciBzd2FwZmlsZSBmdW5jdGlvbmFsaXR5LCBzbyBpdCdzIGNyaXRpY2FsLlxuKiAgIGBNRU1DR2A6IFRoaXMgbXVzdCBiZSB0aGUga2V5IHRvIGhvdyBtZW1vcnkgY2dyb3VwcyBhbmQgc3dhcCBsaW1pdHMgaW50ZXJhY3QuXG4qICAgYFNITUVNYDogVGhpcyBzaG91bGQgYmUgY3JpdGljYWwgc2luY2UgSSBhbSBjb25zaWRlcmluZyBgc2htZW1fd3JpdGVvdXRgLlxuKiAgIEFuZCBmaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgZWl0aGVyIGBUSFBfU1dBUGAgb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCDigJMgdGhvc2UgYXJlIHRoZSBtdWx0aS1wYWdlIGZvbGlvIHN3YXAgZmxhZ3MgdGhhdCBjb3VsZCBpbmZsdWVuY2UgYWxsIG9mIHRoaXMuXG5cblRvIGJlIHRob3JvdWdoLCBsZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayBgbW0vTWFrZWZpbGVgIGFnYWluLCBzcGVjaWZpY2FsbHkgZm9yIHN3YXBmaWxlLmMgYW5kIG1lbWNvbnRyb2wuYzsgSSBqdXN0IHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cyB3aXRoIHRoZSBjb25maWcgZmxhZ3MgdGhhdCBnb3Zlcm4gdGhlaXIgaW5jbHVzaW9uIG9yIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgxMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNTowMjoyNi43MTEwNTAyMjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NjE3Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBmaWxlXFxcXC5vfG1lbWNvbnRyb2xcXFxcLm98cGFnZV9jb3VudGVyXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cXG4tLVxcbm1tL01ha2VmaWxlPTc2PWVuZGlmXFxubW0vTWFrZWZpbGUtNzctXFxubW0vTWFrZWZpbGU6Nzg6b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxubW0vTWFrZWZpbGUtNzktb2JqLSQoQ09ORklHX1pTV0FQKVxcdCs9IHpzd2FwLm9cXG4tLVxcbm1tL01ha2VmaWxlPTEwMT1vYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGU6MTAyOm9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxubW0vTWFrZWZpbGUtMTAzLW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlPTEwND1vYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgKz0gYnBmX21lbWNvbnRyb2wub1xcbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNTowMjoyNi43Njk2NzM1NDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODUyODQwMzE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBgQ09ORklHX1BBR0VfQ09VTlRFUmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgc3RhdGUgb2YgYENPTkZJR19QQUdFX0NPVU5URVJgLiBUaGlzIHZhcmlhYmxlLCBhcyB3ZSBhbGwga25vdywgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aC4uLiB3ZWxsLCBwcmV0dHkgbXVjaCBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0LiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgaXQncyBlbmFibGVkIG9yIGRpc2FibGVkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIERlcGVuZGluZyBvbiBpdHMgc3RhdHVzLCB0aGUgaW1wbGljYXRpb25zIHdpbGwgYmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQgYW5kIHRoZXknbGwgZHJpdmUgdGhlIG5leHQgbGluZSBvZiB0aG91Z2h0LiBJZiBpdCBpcyBlbmFibGVkLCB0aGF0IHNheXMgYSBsb3QgYWJvdXQgdGhlIGFzc3VtcHRpb25zIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlLCBob3cgcGFnZSBjb3VudGVycyBhcmUgdXNlZCBmb3IgdHJhY2tpbmcsIGFuZCBtYXliZSBob3cgdGhpcyB3aG9sZSB0aGluZyBiZWhhdmVzIGluIGRpZmZlcmVudCBtZW1vcnkgY29udGV4dHMuIERpc2FibGluZyBpdC4uLiB3ZWxsIHRoYXQncyBhIHdob2xlIGRpZmZlcmVudCBiYWxsZ2FtZSBvZiB0cmFkZW9mZnMgYW5kIG9wdGltaXphdGlvbnMsIHdoaWNoIHdpbGwgc2hpZnQgbXkgZm9jdXMgZWxzZXdoZXJlLCBwb3NzaWJseSB0byBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgb3Igc3BlY2lmaWMgaGFyZHdhcmUgY29uc3RyYWludHMuIFNvLCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0sIGFuZCB0aGVuIHdlJ2xsIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzQwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDU6MDI6MzUuMjk4MDc5MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNzQzNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfQ09VTlRFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDYzPWlmIENHUk9VUFNcXG5pbml0L0tjb25maWctMTA2NC1cXG5pbml0L0tjb25maWc6MTA2NTpjb25maWcgUEFHRV9DT1VOVEVSXFxuaW5pdC9LY29uZmlnLTEwNjYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNTowMjozNS4zNDMyNTk5NjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY0MTQ2OTI4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gQmFzZWQgb24gdGhlIHRhc2sgYXQgaGFuZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHdoYXRldmVyIGZ1bmN0aW9uYWxpdHkgSSdtIHdvcmtpbmcgd2l0aC4gQSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhcyBhbHdheXMsIGlzIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbGwgZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDEwNjUuIEknbSBob3BpbmcgdGhhdCB0aGlzIHNlY3Rpb24gd2lsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY2x1ZXMgYWJvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24ga25vYnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gSSdtIGV4cGVjdGluZyB0aGlzIGFyZWEgdG8gYmUgYSBjZW50cmFsIGh1YiBmb3IgZGVmaW5pbmcgdGhlIGRlZmF1bHQga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBpbiB0aGlzIHNlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDU0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDU6MDI6NTEuNzU3OTU2NDU4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA1MDpcXHRcXHRib29sIFxcXCJDb250cm9sIEdyb3VwIHN1cHBvcnRcXFwiXFxuMTA1MTpcXHRcXHRzZWxlY3QgS0VSTkZTXFxuMTA1MjpcXHRcXHRoZWxwXFxuMTA1MzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZ3JvdXBpbmcgc2V0cyBvZiBwcm9jZXNzZXMgdG9nZXRoZXIsIGZvclxcbjEwNTQ6XFx0XFx0ICB1c2Ugd2l0aCBwcm9jZXNzIGNvbnRyb2wgc3Vic3lzdGVtcyBzdWNoIGFzIENwdXNldHMsIENGUywgbWVtb3J5XFxuMTA1NTpcXHRcXHQgIGNvbnRyb2xzIG9yIGRldmljZSBpc29sYXRpb24uXFxuMTA1NjpcXHRcXHQgIFNlZVxcbjEwNTc6XFx0XFx0XFx0LSBEb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1kZXNpZ24tQ0ZTLnJzdFxcdChDRlMpXFxuMTA1ODpcXHRcXHRcXHQtIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxLyAoZmVhdHVyZXMgZm9yIGdyb3VwaW5nLCBpc29sYXRpb25cXG4xMDU5OlxcdFxcdFxcdFxcdFxcdFxcdCAgYW5kIHJlc291cmNlIGNvbnRyb2wpXFxuMTA2MDpcXHRcXG4xMDYxOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwNjI6XFx0XFxuMTA2MzpcXHRpZiBDR1JPVVBTXFxuMTA2NDpcXHRcXG4xMDY1OlxcdGNvbmZpZyBQQUdFX0NPVU5URVJcXG4xMDY2OlxcdFxcdGJvb2xcXG4xMDY3OlxcdFxcbjEwNjg6XFx0Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuMTA2OTpcXHRcXHRib29sIFxcXCJGYXZvciBkeW5hbWljIG1vZGlmaWNhdGlvbiBsYXRlbmN5IHJlZHVjdGlvbiBieSBkZWZhdWx0XFxcIlxcbjEwNzA6XFx0XFx0aGVscFxcbjEwNzE6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBcXFwiZmF2b3JkeW5tb2RzXFxcIiBtb3VudCBvcHRpb24gYnkgZGVmYXVsdFxcbjEwNzI6XFx0XFx0ICB3aGljaCByZWR1Y2VzIHRoZSBsYXRlbmNpZXMgb2YgZHluYW1pYyBjZ3JvdXAgbW9kaWZpY2F0aW9ucyBzdWNoXFxuMTA3MzpcXHRcXHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xcbjEwNzQ6XFx0XFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxcbjEwNzU6XFx0XFxuMTA3NjpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDc3OlxcdFxcbjEwNzg6XFx0Y29uZmlnIE1FTUNHXFxuMTA3OTpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMDgwOlxcdFxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4xMDgxOlxcdFxcdHNlbGVjdCBFVkVOVEZEXFxuMTA4MjpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuMTA4MzpcXHRcXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4xMDg0OlxcdFxcdGhlbHBcXG4xMDg1OlxcdFxcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxcbjEwODY6XFx0XFxuMTA4NzpcXHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbjEwODg6XFx0XFx0Ym9vbFxcbjEwODk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNTowMjo1MS43NTgwODYyOThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzMDA4MjYwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggaXMgdGFyZ2V0aW5nIHNvbWUgY3J1Y2lhbCBtZW1vcnkgbWFuYWdlbWVudCBhcmVhcywgc3BlY2lmaWNhbGx5IGFyb3VuZCBzd2FwIGFuZCBmb2xpbyBhbGxvY2F0aW9uLiBGcm9tIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb25zLCBgTUVNQ0dgIHJlbGllcyBvbiBgQ0dST1VQU2AsIGFuZCBpcyBhIHByZXJlcXVpc2l0ZSwgc28gdGhhdCdzIGdvb2QuIFdlIGFsc28gaGF2ZSBgU1dBUGAgZW5hYmxlZCwgd2hpY2ggaXMgZXNzZW50aWFsLCBhcyBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYFRIUF9TV0FQYCwgYW5kIGBTSE1FTWAuIEFsbCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgYXBwZWFyIHRvIGJlIGluIHBsYWNlLlxuXG5DaGVja2luZyB0aGUgXCJXb3J0aEZ1enppbmdcIiBmbGFnIGFuZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMsIHllcywgdGhhdCdzIGFsbCBpbmxpbmUgd2l0aCBteSBleHBlY3RhdGlvbnMuIFRoaXMgc2VlbXMgbGlrZSBhIHZhbGlkIGFyZWEgdG8gZm9jdXMgb3VyIGVmZm9ydHMsIGdpdmVuIHRoZSBsaXN0ZWQgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgcGF0Y2ggaXMgd29ya2luZyB3aXRoIGZvbGlvIHN3YXAgYWxsb2NhdGlvbiwgbWVtY2cgc3dhcCBtYXJnaW4gdHJhY2tpbmcsIGFuZCBzaG1lbSB3cml0ZW91dC4gVGhlIGtleSBzeW1ib2xzIHRoYXQgdGhlIHBhdGNoIHNwZWNpZmljYWxseSBjYWxscyBvdXQgaW5jbHVkZSBgZm9saW9fYWxsb2Nfc3dhcGAsIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYW5kIGBzaG1lbV93cml0ZW91dGAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIHdvdWxkIGV4cGVjdCBmb3IgYSBjaGFuZ2UgaW1wYWN0aW5nIGhvdyB3ZSBoYW5kbGUgbWVtb3J5IHByZXNzdXJlLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgc3dhcHBpbmcuXG5cblNwZWNpZmljYWxseSwgdGhlIG1vcmUgZ3JhbnVsYXIgZXJyb3IgY29kZXMgZnJvbSBgZm9saW9fYWxsb2Nfc3dhcGAgZm9yIHN3YXAgbGltaXRzIGlzIGEgc21hcnQgY2hhbmdlLiBSZXR1cm5pbmcgYC1FMkJJR2AsIGAtRU5PU1BDYCwgYW5kIGAtRU5PTUVNYCBkZXBlbmRpbmcgb24gd2hldGhlciBhIG1lbWNnIG9yIGdsb2JhbCBsaW1pdCBpcyB0aGUgY29uc3RyYWludCBpcyBtdWNoIGNsZWFuZXIuIEF2b2lkaW5nIHVubmVjZXNzYXJ5IHNwbGl0dGluZyBvZiBsYXJnZSBmb2xpb3Mgd2hlbiB3ZSdyZSBoaXR0aW5nIGEgbGltaXQgaXMgZ29pbmcgdG8gYmUgdXNlZnVsIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gVGhpcyBpcyBhIHNvbGlkIHVwZGF0ZSB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGlzIGRpcmVjdGx5IGltcGFjdGluZyBib3RoIHN3YXAgYW5kIHJlY2xhaW0uXG5cbkJhc2VkIG9uIHRoaXMgcmV2aWV3LCBldmVyeXRoaW5nIGFwcGVhcnMgdG8gYmUgaW4gb3JkZXIuIFRoZSBwYXRjaCBhZGRyZXNzZXMgcmVsZXZhbnQgYXJlYXMsIGFuZCB0aGUgcHJvcG9zZWQgY2hhbmdlcyBzZWVtIGFjY3VyYXRlIGFuZCB3ZWxsLXJlYXNvbmVkLiBJJ20gY29tZm9ydGFibGUgd2l0aCB0aGUgY3VycmVudCBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc3NywiT3V0cHV0VG9rZW5zIjoxODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNTowMzoxMi4wNTg5MTU4MjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjEzNjc4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJUSFBfU1dBUFwiLFxuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb19hbGxvY19zd2FwXCIsXG4gICAgXCJtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpblwiLFxuICAgIFwicGFnZV9jb3VudGVyX21hcmdpblwiLFxuICAgIFwic2htZW1fd3JpdGVvdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBzd2FwIGFsbG9jYXRpb24gbG9naWMgYnkgcmVmaW5pbmcgZXJyb3IgcmVwb3J0aW5nIGluIGZvbGlvX2FsbG9jX3N3YXAoKSBhbmQgYWRkaW5nIHBhZ2VfY291bnRlcl9tYXJnaW4oKSBhbmQgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oKSB0byBpbnNwZWN0IGhpZXJhcmNoaWNhbCBzd2FwIG1hcmdpbnMuIFRoaXMgY2hhbmdlcyBob3cgbGFyZ2UgZm9saW9zIGFyZSBzcGxpdCBhbmQgaGFuZGxlZCBkdXJpbmcgc3dhcG91dCBpbiBzaG1lbV93cml0ZW91dCgpIGFuZCBwYWdlIHJlY2xhaW0gaW4gc2hyaW5rX2ZvbGlvX2xpc3QoKSB3aGVuIGdsb2JhbCBvciBtZW1jZyBzd2FwIGxpbWl0cyBhcmUgcmVhY2hlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlRIUF9TV0FQXCIsXG4gICAgXCJTSE1FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX2FsbG9jX3N3YXBcIixcbiAgICBcIm1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luXCIsXG4gICAgXCJwYWdlX2NvdW50ZXJfbWFyZ2luXCIsXG4gICAgXCJzaG1lbV93cml0ZW91dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IHN3YXAgYWxsb2NhdGlvbiBsb2dpYyBieSByZWZpbmluZyBlcnJvciByZXBvcnRpbmcgaW4gZm9saW9fYWxsb2Nfc3dhcCgpIGFuZCBhZGRpbmcgcGFnZV9jb3VudGVyX21hcmdpbigpIGFuZCBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbigpIHRvIGluc3BlY3QgaGllcmFyY2hpY2FsIHN3YXAgbWFyZ2lucy4gVGhpcyBjaGFuZ2VzIGhvdyBsYXJnZSBmb2xpb3MgYXJlIHNwbGl0IGFuZCBoYW5kbGVkIGR1cmluZyBzd2Fwb3V0IGluIHNobWVtX3dyaXRlb3V0KCkgYW5kIHBhZ2UgcmVjbGFpbSBpbiBzaHJpbmtfZm9saW9fbGlzdCgpIHdoZW4gZ2xvYmFsIG9yIG1lbWNnIHN3YXAgbGltaXRzIGFyZSByZWFjaGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNTowMzoxMi4xNDUwNjA0NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY0MTUwNTA5NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNTowMzoxMi4xNDU2NTk2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzY0MTQ0NDYyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuaGFuY2VzIHN3YXAgYWxsb2NhdGlvbiBlcnJvciByZXBvcnRpbmcgaW4gYGZvbGlvX2FsbG9jX3N3YXAoKWAgYnkgZGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiBjYXNlcyB3aGVyZSBhIGxhcmdlIGZvbGlvIGFsbG9jYXRpb24gZmFpbGVkIGR1ZSB0byBmb2xpbyBzaXplIHZzLiB0b3RhbCBzd2FwL2Nncm91cCBzd2FwIGV4aGF1c3Rpb24uIEl0IGludHJvZHVjZXMgYHBhZ2VfY291bnRlcl9tYXJnaW4oKWAgYW5kIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbigpYCBhbmQgdXBkYXRlcyBmb2xpbyBzcGxpdHRpbmcgZGVjaXNpb25zIGluIGBtbS92bXNjYW4uY2AgYW5kIGBtbS9zaG1lbS5jYC5cXG5cXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgKEtNU0FOKTogQWxsIGxvY2FsIHZhcmlhYmxlcyAoYHJldGAsIGBtYXJnaW5gLCBgbWApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQuXFxuLSBNZW1vcnkgU2FmZXR5IFxcdTAwMjYgTG9naWMgKEtBU0FOL0xvY2tkZXApOiBBbnkgcmlza3MgaW4gdGhpcyBwYXRjaCByZXZvbHZlIGFyb3VuZCBjZ3JvdXAgc3dhcCBhY2NvdW50aW5nLCBwYWdlIGxvY2tpbmcsIHJlZmNvdW50aW5nLCBvciBjb250cm9sLWZsb3cgbG9naWMgaW4gcmVjbGFpbS93cml0ZW91dCwgd2hpY2ggYXJlIG1vbml0b3JlZCBieSBzdGFuZGFyZCBNTSBhc3NlcnRpb25zLCBLQVNBTiwgYW5kIExvY2tkZXAuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzE1MTZiZDY2MmY5MjgxNmFkNjM1MzdkZTFlZTdlYWY5ZTk1N2NiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDMwIDA0OjU5OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbmluZGV4IGQ2NDliNmJiYmM4NzEuLjA3YjdjYjEyMjQ5YzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXG5AQCAtNjgsNiArNjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV9jb3VudGVyX3JlYWQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcbiBcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmNvdW50ZXItXHUwMDNldXNhZ2UpO1xuIH1cbiBcbitsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcik7XG4gdm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgcGFnZV9jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiBib29sIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggMGY5NTNlZDljODYzMC4uYTcyZWNmMTJjMDBkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTUxMCw2ICs1MTAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcFxuIFx0X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoaWQsIG5yX3BhZ2VzKTtcbiB9XG4gXG4rbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2Vsc2VcbkBAIC01MjMsNiArNTI0LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXG4ge1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gUEFHRV9DT1VOVEVSX01BWDtcbit9XG4rXG4gc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNGExOGVlNDUwOWFiNi4uOWEzODA0MTMyYzJlYiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtNTgwMSwxNSArNTgwMSwzNSBAQCBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XG4gXG4tXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSlcbi1cdFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XG4tXHRmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKVxuLVx0XHRucl9zd2FwX3BhZ2VzID0gbWluX3QobG9uZywgbnJfc3dhcF9wYWdlcyxcbi1cdFx0XHRcdCAgICAgIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzd2FwLm1heCkgLVxuLVx0XHRcdFx0ICAgICAgcGFnZV9jb3VudGVyX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCkpO1xuK1x0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2ICFkb19tZW1zd19hY2NvdW50KCkpXG4rXHRcdG5yX3N3YXBfcGFnZXMgPSBtaW4obnJfc3dhcF9wYWdlcywgcGFnZV9jb3VudGVyX21hcmdpbihcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKSk7XG4rXG4gXHRyZXR1cm4gbnJfc3dhcF9wYWdlcztcbiB9XG4gXG4rLyoqXG4rICogbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4gLSBnZXQgYSBmb2xpbydzIG1lbWNnIHN3YXAgbWFyZ2luXG4rICogQGZvbGlvOiBmb2xpbyB3aG9zZSBtZW1jZyBtYXJnaW4gaXMgcXVlcmllZFxuKyAqXG4rICogUmV0dXJuOiBSZW1haW5pbmcgY2hhcmdlYWJsZSBwYWdlcyBpbiB0aGUgZm9saW8ncyBtZW1jZyBoaWVyYXJjaHkuXG4rICovXG4rbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcdGxvbmcgbWFyZ2luO1xuK1xuK1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkgfHxcbitcdCAgICAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpXG4rXHRcdHJldHVybiBQQUdFX0NPVU5URVJfTUFYO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4rXHRtYXJnaW4gPSBwYWdlX2NvdW50ZXJfbWFyZ2luKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gbWFyZ2luO1xuK31cbitcbiBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmNcbmluZGV4IDY2MWUwZjJhNTEyN2EuLjQ1MDU0M2Y0YjMxOGIgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2NvdW50ZXIuY1xuKysrIGIvbW0vcGFnZV9jb3VudGVyLmNcbkBAIC00Niw2ICs0NiwyNiBAQCBzdGF0aWMgdm9pZCBwcm9wYWdhdGVfcHJvdGVjdGVkX3VzYWdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmMsXG4gXHR9XG4gfVxuIFxuKy8qKlxuKyAqIHBhZ2VfY291bnRlcl9tYXJnaW4gLSByZW1haW5pbmcgdXNhYmxlIHNwYWNlIHdpdGhpbiBoaWVyYXJjaGljYWwgbGltaXRzXG4rICogQGNvdW50ZXI6IGNvdW50ZXJcbisgKlxuKyAqIFJldHVybjogVGhlIG1pbmltdW0gdmFsdWUgb2YgbWF4IG1pbnVzIHVzYWdlIGFjcm9zcyBAY291bnRlciBhbmQgYWxsIG9mXG4rICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS5cbisgKi9cbitsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcbit7XG4rXHRsb25nIG1hcmdpbiA9IFBBR0VfQ09VTlRFUl9NQVg7XG4rXG4rXHRkbyB7XG4rXHRcdGxvbmcgbSA9IFJFQURfT05DRShjb3VudGVyLVx1MDAzZW1heCkgLSBwYWdlX2NvdW50ZXJfcmVhZChjb3VudGVyKTtcbitcbitcdFx0bWFyZ2luID0gbWluKG1hcmdpbiwgbSk7XG4rXHR9IHdoaWxlICgoY291bnRlciA9IGNvdW50ZXItXHUwMDNlcGFyZW50KSk7XG4rXG4rXHRyZXR1cm4gbWFyZ2luO1xuK31cbitcbiAvKipcbiAgKiBwYWdlX2NvdW50ZXJfY2FuY2VsIC0gdGFrZSBwYWdlcyBvdXQgb2YgdGhlIGxvY2FsIGNvdW50ZXJcbiAgKiBAY291bnRlcjogY291bnRlclxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCBkZTE0NGE5YTk1NThiLi44NGI4ZTllMDU5NzNiIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTE2MTIsNyArMTYxMiw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRwZ29mZl90IGluZGV4O1xuLVx0aW50IG5yX3BhZ2VzO1xuK1x0aW50IG5yX3BhZ2VzLCByZXQ7XG4gXHRib29sIHNwbGl0ID0gZmFsc2U7XG4gXG4gXHRpZiAoKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IFNITUVNX0ZfTE9DS0VEKSB8fCBzYmluZm8tXHUwMDNlbm9zd2FwKVxuQEAgLTE2OTMsNyArMTY5Myw4IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4gXHR9XG4gXG4tXHRpZiAoIWZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7XG4rXHRyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTtcbitcdGlmICghcmV0KSB7XG4gXHRcdGJvb2wgZmlyc3Rfc3dhcHBlZCA9IHNobWVtX3JlY2FsY19pbm9kZShpbm9kZSwgMCwgbnJfcGFnZXMpO1xuIFx0XHRpbnQgZXJyb3I7XG4gXG5AQCAtMTc0Niw3ICsxNzQ3LDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4gXHRcdGdvdG8gcmVkaXJ0eTtcbiBcdH1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2UgMSlcbitcdGlmIChucl9wYWdlcyBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgcmV0ID09IC1FMkJJRylcbiBcdFx0Z290byB0cnlfc3BsaXQ7XG4gcmVkaXJ0eTpcbiBcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXG5pbmRleCA1MWY1YTUyNWJiNjFjLi5kYzBjZDBjYzZmNjI2IDEwMDY0NFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xuKysrIGIvbW0vc3dhcGZpbGUuY1xuQEAgLTE3MzUsNyArMTczNSw5IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiAgKiBzd2FwIGNhY2hlLlxuICAqXG4gICogQ29udGV4dDogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGZvbGlvIGxvY2suXG4tICogUmV0dXJuOiBXaGV0aGVyIHRoZSBmb2xpbyB3YXMgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUuXG4rICogUmV0dXJuOiAlMCBvbiBzdWNjZXNzLCAlLUUyQklHIGlmIHNwbGl0dGluZyB0aGUgZm9saW8gbWlnaHQgYWxsb3cgc3dhcG91dCxcbisgKiAlLUVOT1NQQyBpZiBubyBnbG9iYWwgc3dhcCBzcGFjZSBpcyBhdmFpbGFibGUsIG9yICUtRU5PTUVNIGlmIHNwbGl0dGluZ1xuKyAqIHdvdWxkIG5vdCBoZWxwLlxuICAqL1xuIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuQEAgLTE3NDcsMTEgKzE3NDksMTEgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBcdGlmIChvcmRlcikge1xuIFx0XHQvKlxuLVx0XHQgKiBSZWplY3QgbGFyZ2UgYWxsb2NhdGlvbiB3aGVuIFRIUF9TV0FQIGlzIGRpc2FibGVkLFxuLVx0XHQgKiB0aGUgY2FsbGVyIHNob3VsZCBzcGxpdCB0aGUgZm9saW8gYW5kIHRyeSBhZ2Fpbi5cbitcdFx0ICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZC4gQ2hlY2sgYmVsb3dcbitcdFx0ICogd2hldGhlciBzcGxpdHRpbmcgYW5kIHJldHJ5aW5nIGNhbiBtYWtlIHByb2dyZXNzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19USFBfU1dBUCkpXG4tXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4rXHRcdFx0Z290byBmYWlsZWQ7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIEFsbG9jYXRpb24gc2l6ZSBzaG91bGQgbmV2ZXIgZXhjZWVkIGNsdXN0ZXIgc2l6ZVxuQEAgLTE3NTksNyArMTc2MSw3IEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdCAqL1xuIFx0XHRpZiAoc2l6ZSBcdTAwM2UgU1dBUEZJTEVfQ0xVU1RFUikge1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRnb3RvIGZhaWxlZDtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTE3NzUsMTMgKzE3NzcsMjMgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdH1cbiBcbiBcdC8qIE5lZWQgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgYWxsb2NhdGlvbiBmYWlsZWQsIGZvciBNRU1DR19TV0FQX0ZBSUwuICovXG4tXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSlcbitcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKSB7XG4gXHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbitcdFx0Z290byBmYWlsZWQ7XG4rXHR9XG4gXG4gXHRpZiAodW5saWtlbHkoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRnb3RvIGZhaWxlZDtcbiBcbiBcdHJldHVybiAwO1xuK1xuK2ZhaWxlZDpcbitcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIC1FTk9TUEM7XG4rXHRpZiAobWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oZm9saW8pIFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXR1cm4gb3JkZXIgPyAtRTJCSUcgOiAtRU5PTUVNO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBmZGQxMzI5OWEwNGE5Li42ZTc3MGEwOGUyODgwIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTI1OSw2ICsxMjU5LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHQgKi9cbiBcdFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4rXHRcdFx0aW50IHJldDtcbitcbiBcdFx0XHRpZiAoIShzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfSU8pKVxuIFx0XHRcdFx0Z290byBrZWVwX2xvY2tlZDtcbiBcdFx0XHRpZiAoZm9saW9fbWF5YmVfZG1hX3Bpbm5lZChmb2xpbykpXG5AQCAtMTI3NywxMSArMTI3OSwxNCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdFx0XHQgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAoZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcbitcdFx0XHRyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTtcbitcdFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0XHRpbnQgX19tYXliZV91bnVzZWQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4gXG4gXHRcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuIFx0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZF9zcGxpdDtcbitcdFx0XHRcdGlmIChyZXQgIT0gLUUyQklHKVxuK1x0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcbiBcdFx0XHRcdC8qIEZhbGxiYWNrIHRvIHN3YXAgbm9ybWFsIHBhZ2VzICovXG4gXHRcdFx0XHRpZiAoc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDU6MDM6MTIuMTQ1NjYwMzVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY0MTQ0MjA2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQW5hbHlzaXMgb2YgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyBjZW50ZXJlZCBhcm91bmQgcmVmaW5pbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGZvbGlvIG1hbmFnZW1lbnQgcmVsYXRlZCB0byBzd2FwIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBjZ3JvdXBzLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgd291bGQgd2FycmFudCBLTVNBTiBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBjcmVhdGUgYW55IGtlcm5lbC10by11c2VyIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIGRhdGEsIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRocm91Z2ggbmV3IGNvbmRpdGlvbmFsIGxvZ2ljLlxuXG5JIHNlZSBpdCB0b3VjaGVzIHNldmVyYWwga2V5IGFyZWFzOiBgcGFnZV9jb3VudGVyX21hcmdpbmAsIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGBmb2xpb19hbGxvY19zd2FwYCwgYHNobWVtX3dyaXRlb3V0YCwgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIGJldHRlciBkaXN0aW5ndWlzaGluZyB0aGUgcmVhc29ucyBmb3IgYSBmYWlsZWQgYGZvbGlvX2FsbG9jX3N3YXBgOiB3aGV0aGVyIGl0J3MgYmVjYXVzZSBvZiB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdCAoYC1FMkJJR2ApIG9yIGluc3VmZmljaWVudCBzd2FwIHNwYWNlIChgLUVOT1NQQ2Agb3IgYC1FTk9NRU1gKS4gVGhpcyBpbmZvcm1hdGlvbiBpcyB0aGVuIHVzZWQgdG8gb3B0aW1pemUgZm9saW8gc3BsaXR0aW5nIGluIHRoZSBgdm1zY2FuYCBhbmQgYHNobWVtYCBjb2RlLlxuXG5Mb29raW5nIGNsb3NlbHkgYXQgdGhlIGNvZGUgc25pcHBldHMsIHRoZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBsb2dpYyBpbnZvbHZlcyBjaGVja2luZyByZXR1cm4gdmFsdWVzIG9yIG1hcmdpbnMsIGJ1dCBub3QgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCBjYWxjdWxhdGlvbiBpdGVyYXRlcyB0aHJvdWdoIGEgaGllcmFyY2h5LCBidXQgYWxsIGludGVybWVkaWF0ZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgbG9vcC4gVGhlIHJldHVybiB2YWx1ZXMgb2YgYGZvbGlvX2FsbG9jX3N3YXBgIGFyZSBleHBsaWNpdGx5IGRlZmluZWQgaW50ZWdlciBjb2Rlcy4gVGhlIHJldHVybiB2YWx1ZSBpcyB1c2VkIHRvIGRlY2lkZSB0aGUgY29ycmVjdCBhY3Rpb24gYW5kIGlzIGNoZWNrZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYXNzaWdubWVudC4gTm90aGluZyBpcyBnZXR0aW5nIGNvcGllZCB0byB1c2Vyc3BhY2UuIE5vIGNvbXBsZXggc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIGFuZCBubyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUuXG5cbkkgcmV2aWV3ZWQgdGhlIEtNU0FOIHJlcXVpcmVtZW50cyDigJMgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGtlcm5lbC10by11c2VyIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMsIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgY29tcGxleCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMsIGFuZCBhbnkgb3Bwb3J0dW5pdGllcyBmb3Igc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vbmUgb2YgdGhlc2UgYXBwbHkgaGVyZS4gVGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGxlYWthZ2UgdG8gdXNlciBzcGFjZS4gSXQgc2VlbXMgdGhhdCBhbnkgcG90ZW50aWFsIGJ1Z3MgaGVyZSB3b3VsZCBiZSBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlczogbG9naWMgZXJyb3JzLCBtZW1vcnkgbGVha3MsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBjZ3JvdXAgYWNjb3VudGluZyBidWdzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQga2VybmVsIGFzc2VydGlvbnMgbGlrZSBgVk1fV0FSTl9PTl9PTkNFYC5cblxuU28sIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlLCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGltcHJvdmluZyBlcnJvciBoYW5kbGluZyBhbmQgZm9saW8gbWFuYWdlbWVudCBiYXNlZCBvbiB0aGUgc3dhcCBtYXJnaW4gYW5kIHNwYWNlIGF2YWlsYWJpbGl0eS4gSXQgcmVmaW5lcyB0aGUgZXJyb3Igc2lnbmFsaW5nIGZyb20gdGhlIGBmb2xpb19hbGxvY19zd2FwYCBmdW5jdGlvbiBhbmQgdXNlcyB0aGVzZSBjb2RlcyBmb3Igc21hcnRlciBmb2xpbyBzcGxpdHRpbmcgYW5kIHJlYWRhaGVhZC4gQWxsIHRoZSBuZXcgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCwgdGhlcmUgYXJlIG5vIGtlcm5lbC10by11c2VyIGNvcGllcywgbm8gbmV3IGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQga2VybmVsIHRlc3RpbmcgaXMgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaC4gSSdsbCBkb2N1bWVudCB0aGlzIHJlYXNvbmluZyBhbmQgc3VibWl0IHRoZSByZXN1bHRzIHRvIHRoZSB0b29saW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODQ5LCJPdXRwdXRUb2tlbnMiOjI0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNTowMzo0OC41NjAwODUwNTNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuaGFuY2VzIHN3YXAgYWxsb2NhdGlvbiBlcnJvciByZXBvcnRpbmcgaW4gYGZvbGlvX2FsbG9jX3N3YXAoKWAgYnkgZGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiBjYXNlcyB3aGVyZSBhIGxhcmdlIGZvbGlvIGFsbG9jYXRpb24gZmFpbGVkIGR1ZSB0byBmb2xpbyBzaXplIHZzLiB0b3RhbCBzd2FwL2Nncm91cCBzd2FwIGV4aGF1c3Rpb24uIEl0IGludHJvZHVjZXMgYHBhZ2VfY291bnRlcl9tYXJnaW4oKWAgYW5kIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbigpYCBhbmQgdXBkYXRlcyBmb2xpbyBzcGxpdHRpbmcgZGVjaXNpb25zIGluIGBtbS92bXNjYW4uY2AgYW5kIGBtbS9zaG1lbS5jYC5cXG5cXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgKEtNU0FOKTogQWxsIGxvY2FsIHZhcmlhYmxlcyAoYHJldGAsIGBtYXJnaW5gLCBgbWApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQuXFxuLSBNZW1vcnkgU2FmZXR5IFxcdTAwMjYgTG9naWMgKEtBU0FOL0xvY2tkZXApOiBBbnkgcmlza3MgaW4gdGhpcyBwYXRjaCByZXZvbHZlIGFyb3VuZCBjZ3JvdXAgc3dhcCBhY2NvdW50aW5nLCBwYWdlIGxvY2tpbmcsIHJlZmNvdW50aW5nLCBvciBjb250cm9sLWZsb3cgbG9naWMgaW4gcmVjbGFpbS93cml0ZW91dCwgd2hpY2ggYXJlIG1vbml0b3JlZCBieSBzdGFuZGFyZCBNTSBhc3NlcnRpb25zLCBLQVNBTiwgYW5kIExvY2tkZXAuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5oYW5jZXMgc3dhcCBhbGxvY2F0aW9uIGVycm9yIHJlcG9ydGluZyBpbiBgZm9saW9fYWxsb2Nfc3dhcCgpYCBieSBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuIGNhc2VzIHdoZXJlIGEgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiBmYWlsZWQgZHVlIHRvIGZvbGlvIHNpemUgdnMuIHRvdGFsIHN3YXAvY2dyb3VwIHN3YXAgZXhoYXVzdGlvbi4gSXQgaW50cm9kdWNlcyBgcGFnZV9jb3VudGVyX21hcmdpbigpYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKClgIGFuZCB1cGRhdGVzIGZvbGlvIHNwbGl0dGluZyBkZWNpc2lvbnMgaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL3NobWVtLmNgLlxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSAoS01TQU4pOiBBbGwgbG9jYWwgdmFyaWFibGVzIChgcmV0YCwgYG1hcmdpbmAsIGBtYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZC5cXG4tIE1lbW9yeSBTYWZldHkgXFx1MDAyNiBMb2dpYyAoS0FTQU4vTG9ja2RlcCk6IEFueSByaXNrcyBpbiB0aGlzIHBhdGNoIHJldm9sdmUgYXJvdW5kIGNncm91cCBzd2FwIGFjY291bnRpbmcsIHBhZ2UgbG9ja2luZywgcmVmY291bnRpbmcsIG9yIGNvbnRyb2wtZmxvdyBsb2dpYyBpbiByZWNsYWltL3dyaXRlb3V0LCB3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IHN0YW5kYXJkIE1NIGFzc2VydGlvbnMsIEtBU0FOLCBhbmQgTG9ja2RlcC5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfn47r[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-30 04:43:33 +0000 UTC FinishedAt: 2026-08-30 05:03:50 +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": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "TRANSPARENT_HUGEPAGE", "THP_SWAP", "SHMEM" ], "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": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "TRANSPARENT_HUGEPAGE", "THP_SWAP", "SHMEM" ], "series_id": "fe171ae4-ab3c-4122-be0d-d91134db62e2" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "folio_alloc_swap", "mem_cgroup_get_folio_swap_margin", "page_counter_margin", "shmem_writeout" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7VEhQX1NXQVAmIzM0OywKICAgICYjMzQ7U0hNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19hbGxvY19zd2FwJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luJiMzNDssCiAgICAmIzM0O3BhZ2VfY291bnRlcl9tYXJnaW4mIzM0OywKICAgICYjMzQ7c2htZW1fd3JpdGVvdXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmhhbmNlcyBzd2FwIGFsbG9jYXRpb24gZXJyb3IgcmVwb3J0aW5nIGluIGBmb2xpb19hbGxvY19zd2FwKClgIGJ5IGRpc3Rpbmd1aXNoaW5nIGJldHdlZW4gY2FzZXMgd2hlcmUgYSBsYXJnZSBmb2xpbyBhbGxvY2F0aW9uIGZhaWxlZCBkdWUgdG8gZm9saW8gc2l6ZSB2cy4gdG90YWwgc3dhcC9jZ3JvdXAgc3dhcCBleGhhdXN0aW9uLiBJdCBpbnRyb2R1Y2VzIGBwYWdlX2NvdW50ZXJfbWFyZ2luKClgIGFuZCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oKWAgYW5kIHVwZGF0ZXMgZm9saW8gc3BsaXR0aW5nIGRlY2lzaW9ucyBpbiBgbW0vdm1zY2FuLmNgIGFuZCBgbW0vc2htZW0uY2AuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IChLTVNBTik6IEFsbCBsb2NhbCB2YXJpYWJsZXMgKGByZXRgLCBgbWFyZ2luYCwgYG1gKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLlxuLSBNZW1vcnkgU2FmZXR5IFx1MDAyNiBMb2dpYyAoS0FTQU4vTG9ja2RlcCk6IEFueSByaXNrcyBpbiB0aGlzIHBhdGNoIHJldm9sdmUgYXJvdW5kIGNncm91cCBzd2FwIGFjY291bnRpbmcsIHBhZ2UgbG9ja2luZywgcmVmY291bnRpbmcsIG9yIGNvbnRyb2wtZmxvdyBsb2dpYyBpbiByZWNsYWltL3dyaXRlb3V0LCB3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IHN0YW5kYXJkIE1NIGFzc2VydGlvbnMsIEtBU0FOLCBhbmQgTG9ja2RlcC5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IHN3YXAgYWxsb2NhdGlvbiBsb2dpYyBieSByZWZpbmluZyBlcnJvciByZXBvcnRpbmcgaW4gZm9saW9fYWxsb2Nfc3dhcCgpIGFuZCBhZGRpbmcgcGFnZV9jb3VudGVyX21hcmdpbigpIGFuZCBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbigpIHRvIGluc3BlY3QgaGllcmFyY2hpY2FsIHN3YXAgbWFyZ2lucy4gVGhpcyBjaGFuZ2VzIGhvdyBsYXJnZSBmb2xpb3MgYXJlIHNwbGl0IGFuZCBoYW5kbGVkIGR1cmluZyBzd2Fwb3V0IGluIHNobWVtX3dyaXRlb3V0KCkgYW5kIHBhZ2UgcmVjbGFpbSBpbiBzaHJpbmtfZm9saW9fbGlzdCgpIHdoZW4gZ2xvYmFsIG9yIG1lbWNnIHN3YXAgbGltaXRzIGFyZSByZWFjaGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzE1MTZiZDY2MmY5MjgxNmFkNjM1MzdkZTFlZTdlYWY5ZTk1N2NiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDMwIDA0OjU5OjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXG5pbmRleCBkNjQ5YjZiYmJjODcxLi4wN2I3Y2IxMjI0OWM3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuQEAgLTY4LDYgJiM0Mzs2OCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxuIFx0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXHUwMDI2Y291bnRlci1cdTAwM2V1c2FnZSk7XG4gfVxuIFxuJiM0Mztsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcik7XG4gdm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgcGFnZV9jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiBib29sIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggMGY5NTNlZDljODYzMC4uYTcyZWNmMTJjMDBkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTUxMCw2ICYjNDM7NTEwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BcbiBcdF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7XG4gfVxuIFxuJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGV4dGVybiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiBleHRlcm4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiAjZWxzZVxuQEAgLTUyMyw2ICYjNDM7NTI0LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXG4ge1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gUEFHRV9DT1VOVEVSX01BWDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIGdldF9ucl9zd2FwX3BhZ2VzKCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA0YTE4ZWU0NTA5YWI2Li45YTM4MDQxMzJjMmViIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmNcbkBAIC01ODAxLDE1ICYjNDM7NTgwMSwzNSBAQCBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XG4gXG4tXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSlcbi1cdFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XG4tXHRmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKVxuLVx0XHRucl9zd2FwX3BhZ2VzID0gbWluX3QobG9uZywgbnJfc3dhcF9wYWdlcyxcbi1cdFx0XHRcdCAgICAgIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzd2FwLm1heCkgLVxuLVx0XHRcdFx0ICAgICAgcGFnZV9jb3VudGVyX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCkpO1xuJiM0MztcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhZG9fbWVtc3dfYWNjb3VudCgpKVxuJiM0MztcdFx0bnJfc3dhcF9wYWdlcyA9IG1pbihucl9zd2FwX3BhZ2VzLCBwYWdlX2NvdW50ZXJfbWFyZ2luKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApKTtcbiYjNDM7XG4gXHRyZXR1cm4gbnJfc3dhcF9wYWdlcztcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbiAtIGdldCBhIGZvbGlvJiMzOTtzIG1lbWNnIHN3YXAgbWFyZ2luXG4mIzQzOyAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtY2cgbWFyZ2luIGlzIHF1ZXJpZWRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBSZW1haW5pbmcgY2hhcmdlYWJsZSBwYWdlcyBpbiB0aGUgZm9saW8mIzM5O3MgbWVtY2cgaGllcmFyY2h5LlxuJiM0MzsgKi9cbiYjNDM7bG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuJiM0MztcdGxvbmcgbWFyZ2luO1xuJiM0MztcbiYjNDM7XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSB8fFxuJiM0MztcdCAgICAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gUEFHRV9DT1VOVEVSX01BWDtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuJiM0MztcdG1hcmdpbiA9IHBhZ2VfY291bnRlcl9tYXJnaW4oXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXJnaW47XG4mIzQzO31cbiYjNDM7XG4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jXG5pbmRleCA2NjFlMGYyYTUxMjdhLi40NTA1NDNmNGIzMThiIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9jb3VudGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfY291bnRlci5jXG5AQCAtNDYsNiAmIzQzOzQ2LDI2IEBAIHN0YXRpYyB2b2lkIHByb3BhZ2F0ZV9wcm90ZWN0ZWRfdXNhZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqYyxcbiBcdH1cbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBwYWdlX2NvdW50ZXJfbWFyZ2luIC0gcmVtYWluaW5nIHVzYWJsZSBzcGFjZSB3aXRoaW4gaGllcmFyY2hpY2FsIGxpbWl0c1xuJiM0MzsgKiBAY291bnRlcjogY291bnRlclxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IFRoZSBtaW5pbXVtIHZhbHVlIG9mIG1heCBtaW51cyB1c2FnZSBhY3Jvc3MgQGNvdW50ZXIgYW5kIGFsbCBvZlxuJiM0MzsgKiBpdHMgYW5jZXN0b3JzLiBUaGUgdmFsdWUgbWF5IGJlIG5lZ2F0aXZlIGR1cmluZyBhIGNvbmN1cnJlbnQgY2hhcmdlLlxuJiM0MzsgKi9cbiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4mIzQzO3tcbiYjNDM7XHRsb25nIG1hcmdpbiA9IFBBR0VfQ09VTlRFUl9NQVg7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdGxvbmcgbSA9IFJFQURfT05DRShjb3VudGVyLVx1MDAzZW1heCkgLSBwYWdlX2NvdW50ZXJfcmVhZChjb3VudGVyKTtcbiYjNDM7XG4mIzQzO1x0XHRtYXJnaW4gPSBtaW4obWFyZ2luLCBtKTtcbiYjNDM7XHR9IHdoaWxlICgoY291bnRlciA9IGNvdW50ZXItXHUwMDNlcGFyZW50KSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXJnaW47XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogcGFnZV9jb3VudGVyX2NhbmNlbCAtIHRha2UgcGFnZXMgb3V0IG9mIHRoZSBsb2NhbCBjb3VudGVyXG4gICogQGNvdW50ZXI6IGNvdW50ZXJcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggZGUxNDRhOWE5NTU4Yi4uODRiOGU5ZTA1OTczYiAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmNcbkBAIC0xNjEyLDcgJiM0MzsxNjEyLDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcbiBcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdHBnb2ZmX3QgaW5kZXg7XG4tXHRpbnQgbnJfcGFnZXM7XG4mIzQzO1x0aW50IG5yX3BhZ2VzLCByZXQ7XG4gXHRib29sIHNwbGl0ID0gZmFsc2U7XG4gXG4gXHRpZiAoKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IFNITUVNX0ZfTE9DS0VEKSB8fCBzYmluZm8tXHUwMDNlbm9zd2FwKVxuQEAgLTE2OTMsNyAmIzQzOzE2OTMsOCBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuIFx0fVxuIFxuLVx0aWYgKCFmb2xpb19hbGxvY19zd2FwKGZvbGlvKSkge1xuJiM0MztcdHJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pO1xuJiM0MztcdGlmICghcmV0KSB7XG4gXHRcdGJvb2wgZmlyc3Rfc3dhcHBlZCA9IHNobWVtX3JlY2FsY19pbm9kZShpbm9kZSwgMCwgbnJfcGFnZXMpO1xuIFx0XHRpbnQgZXJyb3I7XG4gXG5AQCAtMTc0Niw3ICYjNDM7MTc0Nyw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xuIFx0XHRnb3RvIHJlZGlydHk7XG4gXHR9XG4tXHRpZiAobnJfcGFnZXMgXHUwMDNlIDEpXG4mIzQzO1x0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiByZXQgPT0gLUUyQklHKVxuIFx0XHRnb3RvIHRyeV9zcGxpdDtcbiByZWRpcnR5OlxuIFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDUxZjVhNTI1YmI2MWMuLmRjMGNkMGNjNmY2MjYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMTczNSw3ICYjNDM7MTczNSw5IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiAgKiBzd2FwIGNhY2hlLlxuICAqXG4gICogQ29udGV4dDogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGZvbGlvIGxvY2suXG4tICogUmV0dXJuOiBXaGV0aGVyIHRoZSBmb2xpbyB3YXMgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUuXG4mIzQzOyAqIFJldHVybjogJTAgb24gc3VjY2VzcywgJS1FMkJJRyBpZiBzcGxpdHRpbmcgdGhlIGZvbGlvIG1pZ2h0IGFsbG93IHN3YXBvdXQsXG4mIzQzOyAqICUtRU5PU1BDIGlmIG5vIGdsb2JhbCBzd2FwIHNwYWNlIGlzIGF2YWlsYWJsZSwgb3IgJS1FTk9NRU0gaWYgc3BsaXR0aW5nXG4mIzQzOyAqIHdvdWxkIG5vdCBoZWxwLlxuICAqL1xuIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuQEAgLTE3NDcsMTEgJiM0MzsxNzQ5LDExIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHRpZiAob3JkZXIpIHtcbiBcdFx0Lypcbi1cdFx0ICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZCxcbi1cdFx0ICogdGhlIGNhbGxlciBzaG91bGQgc3BsaXQgdGhlIGZvbGlvIGFuZCB0cnkgYWdhaW4uXG4mIzQzO1x0XHQgKiBSZWplY3QgbGFyZ2UgYWxsb2NhdGlvbiB3aGVuIFRIUF9TV0FQIGlzIGRpc2FibGVkLiBDaGVjayBiZWxvd1xuJiM0MztcdFx0ICogd2hldGhlciBzcGxpdHRpbmcgYW5kIHJldHJ5aW5nIGNhbiBtYWtlIHByb2dyZXNzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19USFBfU1dBUCkpXG4tXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0XHRcdGdvdG8gZmFpbGVkO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBBbGxvY2F0aW9uIHNpemUgc2hvdWxkIG5ldmVyIGV4Y2VlZCBjbHVzdGVyIHNpemVcbkBAIC0xNzU5LDcgJiM0MzsxNzYxLDcgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0ICovXG4gXHRcdGlmIChzaXplIFx1MDAzZSBTV0FQRklMRV9DTFVTVEVSKSB7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFKDEpO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIGZhaWxlZDtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTE3NzUsMTMgJiM0MzsxNzc3LDIzIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHR9XG4gXG4gXHQvKiBOZWVkIHRvIGNhbGwgdGhpcyBldmVuIGlmIGFsbG9jYXRpb24gZmFpbGVkLCBmb3IgTUVNQ0dfU1dBUF9GQUlMLiAqL1xuLVx0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpIHtcbiBcdFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xuJiM0MztcdFx0Z290byBmYWlsZWQ7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKHVubGlrZWx5KCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZmFpbGVkO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztmYWlsZWQ6XG4mIzQzO1x0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9TUEM7XG4mIzQzO1x0aWYgKG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGZvbGlvKSBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG9yZGVyID8gLUUyQklHIDogLUVOT01FTTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggZmRkMTMyOTlhMDRhOS4uNmU3NzBhMDhlMjg4MCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTEyNTksNiAmIzQzOzEyNTksOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdCAqL1xuIFx0XHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcbiYjNDM7XHRcdFx0aW50IHJldDtcbiYjNDM7XG4gXHRcdFx0aWYgKCEoc2MtXHUwMDNlZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0lPKSlcbiBcdFx0XHRcdGdvdG8ga2VlcF9sb2NrZWQ7XG4gXHRcdFx0aWYgKGZvbGlvX21heWJlX2RtYV9waW5uZWQoZm9saW8pKVxuQEAgLTEyNzcsMTEgJiM0MzsxMjc5LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbiBcdFx0XHRcdCAgICBzcGxpdF9mb2xpb190b19saXN0KGZvbGlvLCBmb2xpb19saXN0KSlcbiBcdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWQ7XG4gXHRcdFx0fVxuLVx0XHRcdGlmIChmb2xpb19hbGxvY19zd2FwKGZvbGlvKSkge1xuJiM0MztcdFx0XHRyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTtcbiYjNDM7XHRcdFx0aWYgKHJldCkge1xuIFx0XHRcdFx0aW50IF9fbWF5YmVfdW51c2VkIG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuIFxuIFx0XHRcdFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcbiBcdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWRfc3BsaXQ7XG4mIzQzO1x0XHRcdFx0aWYgKHJldCAhPSAtRTJCSUcpXG4mIzQzO1x0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcbiBcdFx0XHRcdC8qIEZhbGxiYWNrIHRvIHN3YXAgbm9ybWFsIHBhZ2VzICovXG4gXHRcdFx0XHRpZiAoc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7VEhQX1NXQVAmIzM0OywKICAgICYjMzQ7U0hNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19hbGxvY19zd2FwJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luJiMzNDssCiAgICAmIzM0O3BhZ2VfY291bnRlcl9tYXJnaW4mIzM0OywKICAgICYjMzQ7c2htZW1fd3JpdGVvdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgc3dhcCBhbGxvY2F0aW9uIGxvZ2ljIGJ5IHJlZmluaW5nIGVycm9yIHJlcG9ydGluZyBpbiBmb2xpb19hbGxvY19zd2FwKCkgYW5kIGFkZGluZyBwYWdlX2NvdW50ZXJfbWFyZ2luKCkgYW5kIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKCkgdG8gaW5zcGVjdCBoaWVyYXJjaGljYWwgc3dhcCBtYXJnaW5zLiBUaGlzIGNoYW5nZXMgaG93IGxhcmdlIGZvbGlvcyBhcmUgc3BsaXQgYW5kIGhhbmRsZWQgZHVyaW5nIHN3YXBvdXQgaW4gc2htZW1fd3JpdGVvdXQoKSBhbmQgcGFnZSByZWNsYWltIGluIHNocmlua19mb2xpb19saXN0KCkgd2hlbiBnbG9iYWwgb3IgbWVtY2cgc3dhcCBsaW1pdHMgYXJlIHJlYWNoZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMTUxNmJkNjYyZjkyODE2YWQ2MzUzN2RlMWVlN2VhZjllOTU3Y2I5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMzAgMDQ6NTk6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaAppbmRleCBkNjQ5YjZiYmJjODcxLi4wN2I3Y2IxMjI0OWM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgKQEAgLTY4LDYgJiM0Mzs2OCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKQogCXJldHVybiBhdG9taWNfbG9uZ19yZWFkKCZhbXA7Y291bnRlci0mZ3Q7dXNhZ2UpOwogfQogCiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpOwogdm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogdm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogYm9vbCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCAwZjk1M2VkOWM4NjMwLi5hNzJlY2YxMmMwMGRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtNTEwLDYgJiM0Mzs1MTAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcAogCV9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7CiB9CiAKJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogZXh0ZXJuIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7CiAjZWxzZQpAQCAtNTIzLDYgJiM0Mzs1MjQsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwKIHsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDRhMThlZTQ1MDlhYjYuLjlhMzgwNDEzMmMyZWIgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTU4MDEsMTUgJiM0Mzs1ODAxLDM1IEBAIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJbG9uZyBucl9zd2FwX3BhZ2VzID0gZ2V0X25yX3N3YXBfcGFnZXMoKTsKIAotCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgZG9fbWVtc3dfYWNjb3VudCgpKQotCQlyZXR1cm4gbnJfc3dhcF9wYWdlczsKLQlmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKQotCQlucl9zd2FwX3BhZ2VzID0gbWluX3QobG9uZywgbnJfc3dhcF9wYWdlcywKLQkJCQkgICAgICBSRUFEX09OQ0UobWVtY2ctJmd0O3N3YXAubWF4KSAtCi0JCQkJICAgICAgcGFnZV9jb3VudGVyX3JlYWQoJmFtcDttZW1jZy0mZ3Q7c3dhcCkpOwomIzQzOwlpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSAmYW1wOyZhbXA7ICFkb19tZW1zd19hY2NvdW50KCkpCiYjNDM7CQlucl9zd2FwX3BhZ2VzID0gbWluKG5yX3N3YXBfcGFnZXMsIHBhZ2VfY291bnRlcl9tYXJnaW4oJmFtcDttZW1jZy0mZ3Q7c3dhcCkpOwomIzQzOwogCXJldHVybiBucl9zd2FwX3BhZ2VzOwogfQogCiYjNDM7LyoqCiYjNDM7ICogbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4gLSBnZXQgYSBmb2xpbyYjMzk7cyBtZW1jZyBzd2FwIG1hcmdpbgomIzQzOyAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtY2cgbWFyZ2luIGlzIHF1ZXJpZWQKJiM0MzsgKgomIzQzOyAqIFJldHVybjogUmVtYWluaW5nIGNoYXJnZWFibGUgcGFnZXMgaW4gdGhlIGZvbGlvJiMzOTtzIG1lbWNnIGhpZXJhcmNoeS4KJiM0MzsgKi8KJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CWxvbmcgbWFyZ2luOwomIzQzOwomIzQzOwlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSB8fAomIzQzOwkgICAgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKQomIzQzOwkJcmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7CiYjNDM7CW1hcmdpbiA9IHBhZ2VfY291bnRlcl9tYXJnaW4oJmFtcDttZW1jZy0mZ3Q7c3dhcCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gbWFyZ2luOwomIzQzO30KJiM0MzsKIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jCmluZGV4IDY2MWUwZjJhNTEyN2EuLjQ1MDU0M2Y0YjMxOGIgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfY291bnRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfY291bnRlci5jCkBAIC00Niw2ICYjNDM7NDYsMjYgQEAgc3RhdGljIHZvaWQgcHJvcGFnYXRlX3Byb3RlY3RlZF91c2FnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjLAogCX0KIH0KIAomIzQzOy8qKgomIzQzOyAqIHBhZ2VfY291bnRlcl9tYXJnaW4gLSByZW1haW5pbmcgdXNhYmxlIHNwYWNlIHdpdGhpbiBoaWVyYXJjaGljYWwgbGltaXRzCiYjNDM7ICogQGNvdW50ZXI6IGNvdW50ZXIKJiM0MzsgKgomIzQzOyAqIFJldHVybjogVGhlIG1pbmltdW0gdmFsdWUgb2YgbWF4IG1pbnVzIHVzYWdlIGFjcm9zcyBAY291bnRlciBhbmQgYWxsIG9mCiYjNDM7ICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS4KJiM0MzsgKi8KJiM0Mztsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcikKJiM0Mzt7CiYjNDM7CWxvbmcgbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJbG9uZyBtID0gUkVBRF9PTkNFKGNvdW50ZXItJmd0O21heCkgLSBwYWdlX2NvdW50ZXJfcmVhZChjb3VudGVyKTsKJiM0MzsKJiM0MzsJCW1hcmdpbiA9IG1pbihtYXJnaW4sIG0pOwomIzQzOwl9IHdoaWxlICgoY291bnRlciA9IGNvdW50ZXItJmd0O3BhcmVudCkpOwomIzQzOwomIzQzOwlyZXR1cm4gbWFyZ2luOwomIzQzO30KJiM0MzsKIC8qKgogICogcGFnZV9jb3VudGVyX2NhbmNlbCAtIHRha2UgcGFnZXMgb3V0IG9mIHRoZSBsb2NhbCBjb3VudGVyCiAgKiBAY291bnRlcjogY291bnRlcgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggZGUxNDRhOWE5NTU4Yi4uODRiOGU5ZTA1OTczYiAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0xNjEyLDcgJiM0MzsxNjEyLDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7CiAJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLSZndDtpX3NiKTsKIAlwZ29mZl90IGluZGV4OwotCWludCBucl9wYWdlczsKJiM0MzsJaW50IG5yX3BhZ2VzLCByZXQ7CiAJYm9vbCBzcGxpdCA9IGZhbHNlOwogCiAJaWYgKChpbmZvLSZndDtmbGFncyAmYW1wOyBTSE1FTV9GX0xPQ0tFRCkgfHwgc2JpbmZvLSZndDtub3N3YXApCkBAIC0xNjkzLDcgJiM0MzsxNjkzLDggQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTsKIAl9CiAKLQlpZiAoIWZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7CiYjNDM7CXJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pOwomIzQzOwlpZiAoIXJldCkgewogCQlib29sIGZpcnN0X3N3YXBwZWQgPSBzaG1lbV9yZWNhbGNfaW5vZGUoaW5vZGUsIDAsIG5yX3BhZ2VzKTsKIAkJaW50IGVycm9yOwogCkBAIC0xNzQ2LDcgJiM0MzsxNzQ3LDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7CiAJCWdvdG8gcmVkaXJ0eTsKIAl9Ci0JaWYgKG5yX3BhZ2VzICZndDsgMSkKJiM0MzsJaWYgKG5yX3BhZ2VzICZndDsgMSAmYW1wOyZhbXA7IHJldCA9PSAtRTJCSUcpCiAJCWdvdG8gdHJ5X3NwbGl0OwogcmVkaXJ0eToKIAlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDUxZjVhNTI1YmI2MWMuLmRjMGNkMGNjNmY2MjYgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtMTczNSw3ICYjNDM7MTczNSw5IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKICAqIHN3YXAgY2FjaGUuCiAgKgogICogQ29udGV4dDogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGZvbGlvIGxvY2suCi0gKiBSZXR1cm46IFdoZXRoZXIgdGhlIGZvbGlvIHdhcyBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZS4KJiM0MzsgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsICUtRTJCSUcgaWYgc3BsaXR0aW5nIHRoZSBmb2xpbyBtaWdodCBhbGxvdyBzd2Fwb3V0LAomIzQzOyAqICUtRU5PU1BDIGlmIG5vIGdsb2JhbCBzd2FwIHNwYWNlIGlzIGF2YWlsYWJsZSwgb3IgJS1FTk9NRU0gaWYgc3BsaXR0aW5nCiYjNDM7ICogd291bGQgbm90IGhlbHAuCiAgKi8KIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CkBAIC0xNzQ3LDExICYjNDM7MTc0OSwxMSBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiAJaWYgKG9yZGVyKSB7CiAJCS8qCi0JCSAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQsCi0JCSAqIHRoZSBjYWxsZXIgc2hvdWxkIHNwbGl0IHRoZSBmb2xpbyBhbmQgdHJ5IGFnYWluLgomIzQzOwkJICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZC4gQ2hlY2sgYmVsb3cKJiM0MzsJCSAqIHdoZXRoZXIgc3BsaXR0aW5nIGFuZCByZXRyeWluZyBjYW4gbWFrZSBwcm9ncmVzcy4KIAkJICovCiAJCWlmICghSVNfRU5BQkxFRChDT05GSUdfVEhQX1NXQVApKQotCQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CQkJZ290byBmYWlsZWQ7CiAKIAkJLyoKIAkJICogQWxsb2NhdGlvbiBzaXplIHNob3VsZCBuZXZlciBleGNlZWQgY2x1c3RlciBzaXplCkBAIC0xNzU5LDcgJiM0MzsxNzYxLDcgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbykKIAkJICovCiAJCWlmIChzaXplICZndDsgU1dBUEZJTEVfQ0xVU1RFUikgewogCQkJVk1fV0FSTl9PTl9PTkNFKDEpOwotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJZ290byBmYWlsZWQ7CiAJCX0KIAl9CiAKQEAgLTE3NzUsMTMgJiM0MzsxNzc3LDIzIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJfQogCiAJLyogTmVlZCB0byBjYWxsIHRoaXMgZXZlbiBpZiBhbGxvY2F0aW9uIGZhaWxlZCwgZm9yIE1FTUNHX1NXQVBfRkFJTC4gKi8KLQlpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSkKJiM0MzsJaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpIHsKIAkJc3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pOwomIzQzOwkJZ290byBmYWlsZWQ7CiYjNDM7CX0KIAogCWlmICh1bmxpa2VseSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlnb3RvIGZhaWxlZDsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO2ZhaWxlZDoKJiM0MzsJaWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiAtRU5PU1BDOwomIzQzOwlpZiAobWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oZm9saW8pICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0dXJuIG9yZGVyID8gLUUyQklHIDogLUVOT01FTTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGZkZDEzMjk5YTA0YTkuLjZlNzcwYTA4ZTI4ODAgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xMjU5LDYgJiM0MzsxMjU5LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LAogCQkgKi8KIAkJaWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJmFtcDsmYW1wOyBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICZhbXA7JmFtcDsKIAkJCQkhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7CiYjNDM7CQkJaW50IHJldDsKJiM0MzsKIAkJCWlmICghKHNjLSZndDtnZnBfbWFzayAmYW1wOyBfX0dGUF9JTykpCiAJCQkJZ290byBrZWVwX2xvY2tlZDsKIAkJCWlmIChmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKSkKQEAgLTEyNzcsMTEgJiM0MzsxMjc5LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwKIAkJCQkgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpCiAJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwogCQkJfQotCQkJaWYgKGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7CiYjNDM7CQkJcmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7CiYjNDM7CQkJaWYgKHJldCkgewogCQkJCWludCBfX21heWJlX3VudXNlZCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTsKIAogCQkJCWlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpCiAJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkX3NwbGl0OwomIzQzOwkJCQlpZiAocmV0ICE9IC1FMkJJRykKJiM0MzsJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwogCQkJCS8qIEZhbGxiYWNrIHRvIHN3YXAgbm9ybWFsIHBhZ2VzICovCiAJCQkJaWYgKHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKQogCQkJCQlnb3RvIGFjdGl2YXRlX2xvY2tlZDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg1MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDU4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhlIHBhdGNoIHRvdWNoZXMgYSBidW5jaCBvZiBrZXkgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXM6IGBwYWdlX2NvdW50ZXIuaGAsIGBzd2FwLmhgLCBgbWVtY29udHJvbC5jYCwgYHBhZ2VfY291bnRlci5jYCwgYHNobWVtLmNgLCBgc3dhcGZpbGUuY2AsIGFuZCBgdm1zY2FuLmNgLiBUaGF0IGdldHMgbXkgYXR0ZW50aW9uIGltbWVkaWF0ZWx5OyBhbnl0aGluZyB0b3VjaGluZyB0aGUgY29yZSBNTSBpcyBhbHdheXMgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNoYW5nZXMgdGhlbXNlbHZlcy4gVGhlcmUmIzM5O3MgYSBuZXcgZnVuY3Rpb24sIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgd2hpY2ggbG9va3MgbGlrZSBpdCBjYWxjdWxhdGVzIHRoZSByZW1haW5pbmcgdXNhYmxlIHNwYWNlIHdpdGhpbiBoaWVyYXJjaGljYWwgbGltaXRzLiBJdCYjMzk7cyB1c2VkIGluIGEgcmVmYWN0b3JlZCBgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlc2AsIGFuZCBhbHNvIHRoZXJlJiMzOTtzIGEgbmV3IGZ1bmN0aW9uIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAuIFRob3NlIHNlZW0gcmVsYXRlZCB0byBtZW1jZyBzd2FwIGFjY291bnRpbmcuIFRoZW4gSSBzZWUgdGhhdCBgc2htZW1fd3JpdGVvdXRgIG5vdyBjaGVja3MgdGhlIHJldHVybiB2YWx1ZSBvZiBgZm9saW9fYWxsb2Nfc3dhcGAsIGFuZCBwYXJ0aWN1bGFybHkgdGhlIGNhc2Ugb2YgYG5yX3BhZ2VzICZndDsgMSAmYW1wOyZhbXA7IHJldCA9PSAtRTJCSUdgLgoKYGZvbGlvX2FsbG9jX3N3YXBgIHNlZW1zIHRvIGJlIHRoZSBiaWcgY2hhbmdlLCBhbHRlcmluZyBpdHMgcmV0dXJuIHZhbHVlcyB0byBzaWduYWwgbW9yZSBncmFudWxhciByZWFzb25zIGZvciBmYWlsdXJlLiBJdCYjMzk7cyBub3QganVzdCBzdWNjZXNzL2ZhaWx1cmUgYW55bW9yZTsgbm93IGl0IHJldHVybnMgc3BlY2lmaWMgZXJyb3IgY29kZXMgbGlrZSBgLUUyQklHYCwgYC1FTk9TUENgLCBhbmQgYC1FTk9NRU1gLiBUaGUgbG9naWMgd2l0aGluIGBmb2xpb19hbGxvY19zd2FwYCBpdHNlbGYgaGFzIGJlZW4gYmVlZmVkIHVwIHRvIGNoZWNrIHN3YXAgbWFyZ2lucyBhbmQgbWVtY2cgbWFyZ2lucy4gQW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgaXMgbm93IGNoZWNraW5nIGByZXRgIGZyb20gYGZvbGlvX2FsbG9jX3N3YXBgIGFzIHdlbGwuCgpUaGUgaW1wbGljYXRpb25zIGFyZSBjbGVhcjogdGhpcyBwYXRjaCBpcyBkZWVwbHkgaW50ZXJ0d2luZWQgd2l0aCBzd2FwIGFsbG9jYXRpb24sIHRoZSBzcGxpdHRpbmcgb2YgbGFyZ2UgZm9saW9zLCBtZW1jZyBzd2FwIGFjY291bnRpbmcgYW5kIHRocm90dGxpbmcsIHNobWVtIHN3YXBvdXQsIGFuZCBldmVuIHBhZ2UgcmVjbGFpbSB0aHJvdWdoIGBzaHJpbmtfZm9saW9fbGlzdGAuIFRoaXMgaXMgYWxsIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIGluZmx1ZW5jaW5nIGV4ZWN1dGlvbiBmbG93IGluIHJlc3BvbnNlIHRvIG1lbW9yeSBwcmVzc3VyZXMgYW5kLCBpbXBvcnRhbnRseSwgYWx0ZXJpbmcgZXJyb3IgY29kZXMuCgpJcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGNydWNpYWwgbW0gbG9naWMgZGVhbGluZyB3aXRoIHN3YXBvdXQsIHNwbGl0dGluZyBvZiBmb2xpb3MgdW5kZXIgc3dhcCBwcmVzc3VyZSwgYW5kIG1lbWNnIGxpbWl0cy4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCAoUUVNVSwgc3l6a2FsbGVyKS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gY29udHJvbCBmbG93IGFuZCByZXR1cm4gY29kZXMgaW4gdGhlIGtlcm5lbCBhcmUgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyB0aGF0IGZ1enppbmcgaXMgZGVzaWduZWQgdG8gdW5jb3ZlciBzdWJ0bGUgZXJyb3JzIG9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLgoKVGhlIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBjb25maWdzIGFuZCBmb2N1cyBteSBzeW1ib2wgYW5hbHlzaXMgYXBwcm9wcmlhdGVseS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgYW5kIGlkZW50aWZ5IHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGVuYWJsZSBvciBhZmZlY3QgdGhpcyBjb2RlLCBzbyBJIGNhbiB0YXJnZXQgdGhlIGZ1enppbmcgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fYWxsb2Nfc3dhcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NobWVtLmM9MTYwNz1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vc2htZW0uYy0xNjk1LVxubW0vc2htZW0uYzoxNjk2Olx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XG5tbS9zaG1lbS5jLTE2OTctXHRpZiAoIXJldCkge1xuLS1cbm1tL3N3YXAuaD0yMjU9ZXh0ZXJuIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApO1xuLS1cbm1tL3N3YXAuaC0yMzMtICpcbm1tL3N3YXAuaDoyMzQ6ICogZm9saW9fYWxsb2Nfc3dhcCgpOiB0aGUgZW50cnkgcG9pbnQgZm9yIGEgZm9saW8gdG8gYmUgc3dhcHBlZFxubW0vc3dhcC5oLTIzNS0gKiBvdXQuIEl0IGFsbG9jYXRlcyBzd2FwIHNsb3RzIGFuZCBwaW5zIHRoZSBzbG90cyB3aXRoIHN3YXAgY2FjaGUuXG4tLVxubW0vc3dhcC5oLTI0NS0gKi9cbm1tL3N3YXAuaDoyNDY6aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9zd2FwLmgtMjQ3LWludCBmb2xpb19kdXBfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4tLVxubW0vc3dhcC5oPTM2MD1zdGF0aWMgaW5saW5lIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpfX3N3YXBfZW50cnlfdG9faW5mbyhzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5tbS9zd2FwLmgtMzY0LVxubW0vc3dhcC5oOjM2NTpzdGF0aWMgaW5saW5lIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9zd2FwLmgtMzY2LXtcbi0tXG5tbS9zd2FwZmlsZS5jPTkwPXN0YXRpYyBQTElTVF9IRUFEKHN3YXBfYWN0aXZlX2hlYWQpO1xuLS1cbm1tL3N3YXBmaWxlLmMtOTQtICogcHJvdGVjdGVkIHdpdGggc3dhcF9hdmFpbF9sb2NrLCBvcmRlcmVkIGJ5IHByaW9yaXR5LlxubW0vc3dhcGZpbGUuYzo5NTogKiBUaGlzIGlzIHVzZWQgYnkgZm9saW9fYWxsb2Nfc3dhcCgpIGluc3RlYWQgb2Ygc3dhcF9hY3RpdmVfaGVhZFxubW0vc3dhcGZpbGUuYy05Ni0gKiBiZWNhdXNlIHN3YXBfYWN0aXZlX2hlYWQgaW5jbHVkZXMgYWxsIHN3YXBfaW5mb19zdHJ1Y3RzLFxubW0vc3dhcGZpbGUuYzo5NzogKiBidXQgZm9saW9fYWxsb2Nfc3dhcCgpIGRvZXNuJiMzOTt0IG5lZWQgdG8gbG9vayBhdCBmdWxsIG9uZXMuXG5tbS9zd2FwZmlsZS5jLTk4LSAqIFRoaXMgdXNlcyBpdHMgb3duIGxvY2sgaW5zdGVhZCBvZiBzd2FwX2xvY2sgYmVjYXVzZSB3aGVuIGFcbi0tXG5tbS9zd2FwZmlsZS5jPTkxMT1zdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTkyNC1cdC8qXG5tbS9zd2FwZmlsZS5jOjkyNTpcdCAqIEFsbCBtbSBzd2FwIGFsbG9jYXRpb24gc3RhcnRzIHdpdGggYSBmb2xpbyAoZm9saW9fYWxsb2Nfc3dhcCksXG5tbS9zd2FwZmlsZS5jLTkyNi1cdCAqIGl0JiMzOTtzIGFsc28gdGhlIG9ubHkgYWxsb2NhdGlvbiBwYXRoIGZvciBsYXJnZSBvcmRlcnMgYWxsb2NhdGlvbi5cbi0tXG5tbS9zd2FwZmlsZS5jPTE2OTU9c3RhdGljIGludCBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMTczMC0vKipcbm1tL3N3YXBmaWxlLmM6MTczMTogKiBmb2xpb19hbGxvY19zd2FwIC0gYWxsb2NhdGUgc3dhcCBzcGFjZSBmb3IgYSBmb2xpb1xubW0vc3dhcGZpbGUuYy0xNzMyLSAqIEBmb2xpbzogZm9saW8gd2Ugd2FudCB0byBtb3ZlIHRvIHN3YXBcbi0tXG5tbS9zd2FwZmlsZS5jLTE3NDEtICovXG5tbS9zd2FwZmlsZS5jOjE3NDI6aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3N3YXBmaWxlLmMtMTc0My17XG4tLVxubW0vc3dhcGZpbGUuYz0yODA5PXN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjg5Mi1cdCAqIGFuZCBldmVuIHNobWVtX3dyaXRlb3V0KCkgY291bGQgaGF2ZSBiZWVuIHByZWVtcHRlZCBhZnRlclxubW0vc3dhcGZpbGUuYzoyODkzOlx0ICogZm9saW9fYWxsb2Nfc3dhcCgpLCB0ZW1wb3JhcmlseSBoaWRpbmcgdGhhdCBzd2FwLiAgSXQmIzM5O3MgZWFzeVxubW0vc3dhcGZpbGUuYy0yODk0LVx0ICogYW5kIHJvYnVzdCAodGhvdWdoIGNwdS1pbnRlbnNpdmUpIGp1c3QgdG8ga2VlcCByZXRyeWluZy5cbi0tXG5tbS92bXNjYW4uYz0xMDU4PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xMjgxLVx0XHRcdH1cbm1tL3Ztc2Nhbi5jOjEyODI6XHRcdFx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XG5tbS92bXNjYW4uYy0xMjgzLVx0XHRcdGlmIChyZXQpIHtcbi0tXG5tbS92bXNjYW4uYy0xMzAwLVx0XHRcdFx0Y291bnRfbXRocF9zdGF0KG9yZGVyLCBNVEhQX1NUQVRfU1dQT1VUX0ZBTExCQUNLKTtcbm1tL3Ztc2Nhbi5jOjEzMDE6XHRcdFx0XHRpZiAoZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpXG5tbS92bXNjYW4uYy0xMzAyLVx0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZF9zcGxpdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTAxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgU3dhcCBGb2xpbyBBbGxvY2F0aW9uIGFuZCBNZW1jZyBJbnRlcmFjdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZW5hYmxpbmcgY29uZGl0aW9ucyBmb3IgYGZvbGlvX2FsbG9jX3N3YXBgIGFuZCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBrbm93IHRoZXNlIGFyZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBzd2FwcGluZywgcGFydGljdWxhcmx5IGluIGNvbmp1bmN0aW9uIHdpdGggbWVtb3J5IGNncm91cHMuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIHN3YXAgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGhlYWRlciBmaWxlcy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBjaGVjayBgaW5jbHVkZS9saW51eC9zd2FwLmhgIGZpcnN0OyBvZnRlbiB0aGUgcHVibGljLWZhY2luZyBkZWZpbml0aW9ucyBhbmQgbWFjcm9zIGFyZSBob3VzZWQgdGhlcmUuIElmIHRoYXQmIzM5O3Mgbm90IHlpZWxkaW5nIHRoZSByaWdodCBjbHVlcywgSSYjMzk7bGwgc3dpdGNoIG92ZXIgdG8gYG1tL3N3YXAuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgbG93ZXItbGV2ZWwgaW1wbGVtZW50YXRpb24gZGV0YWlscywgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgcGVyaGFwcyBtb3JlIG51YW5jZWQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMgcmVsYXRlZCB0byBlbmFibGluZyB0aGVzZSBmZWF0dXJlcy4gS25vd2luZyB0aGUga2VybmVsJiMzOTtzIHNvdXJjZSBsYXlvdXQgc28gd2VsbCwgSSYjMzk7bSBjb25maWRlbnQgSSYjMzk7bGwgcGlucG9pbnQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHF1aWNrbHkuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aG9zZSBmaWxlcyBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gNTAxOlx0XHRcdHJldHVybiAwO1xuIDUwMjpcdFx0cmV0dXJuIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pO1xuIDUwMzpcdH1cbiA1MDQ6XHRcbiA1MDU6XHRleHRlcm4gdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKTtcbiA1MDY6XHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4gNTA3Olx0e1xuIDUwODpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiA1MDk6XHRcdFx0cmV0dXJuO1xuIDUxMDpcdFx0X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoaWQsIG5yX3BhZ2VzKTtcbiA1MTE6XHR9XG4gNTEyOlx0XG4gNTEzOlx0bG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiA1MTQ6XHRleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gNTE1Olx0ZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gNTE2Olx0I2Vsc2VcbiA1MTc6XHRzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDUxODpcdHtcbiA1MTk6XHRcdHJldHVybiAwO1xuIDUyMDpcdH1cbiA1MjE6XHRcbiA1MjI6XHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLFxuIDUyMzpcdFx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuIDUyNDpcdHtcbiA1MjU6XHR9XG4gNTI2Olx0XG4gNTI3Olx0c3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gNTI4Olx0e1xuIDUyOTpcdFx0cmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7XG4gNTMwOlx0fVxuIDUzMTpcdFxuIDUzMjpcdHN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiA1MzM6XHR7XG4gNTM0Olx0XHRyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTtcbiA1MzU6XHR9XG4gNTM2Olx0XG4gNTM3Olx0c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gNTM4Olx0e1xuIDUzOTpcdFx0cmV0dXJuIHZtX3N3YXBfZnVsbCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMzMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgbGluZSA1MDAtaXNoIG9mIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBuZXJ2b3VzIHN5c3RlbSBmb3IgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBzd2FwcGluZywgc28gSSBoYXZlIGEgaHVuY2ggdGhhdCBzb21ldGhpbmcgaW50ZXJlc3Rpbmcgd2lsbCBiZSB0aGVyZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBjb3JlIGRhdGEgc3RydWN0dXJlIHJlbGF0ZWQgdG8gc3dhcCBlbnRyeSBtYW5hZ2VtZW50LCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMsIG9yIHBlcmhhcHMgc29tZSBrZXkgZnVuY3Rpb24gZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBzd2FwIGluL291dCBvcGVyYXRpb25zLiBJdCBjb3VsZCBiZSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgc3dhcCBjYWNoZSBpdHNlbGYuIE9yIG1heWJlIGFuIGludGVyZXN0aW5nIGRlZmluaXRpb24gb2Ygc29tZSBzb3J0LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCBnb29kaWVzIGF3YWl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2FwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ3MDpcdFxuIDQ3MTpcdHN0YXRpYyBpbmxpbmUgaW50IGFkZF9zd2FwX2V4dGVudChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxuIDQ3MjpcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BhZ2UsXG4gNDczOlx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHNlY3Rvcl90IHN0YXJ0X2Jsb2NrKVxuIDQ3NDpcdHtcbiA0NzU6XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ3NjpcdH1cbiA0Nzc6XHQjZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cbiA0Nzg6XHQjaWZkZWYgQ09ORklHX01FTUNHXG4gNDc5Olx0dm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcbiA0ODA6XHQjZW5kaWZcbiA0ODE6XHRcbiA0ODI6XHQjaWYgZGVmaW5lZChDT05GSUdfU1dBUCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX01FTUNHKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQkxLX0NHUk9VUClcbiA0ODM6XHR2b2lkIF9fZm9saW9fdGhyb3R0bGVfc3dhcHJhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKTtcbiA0ODQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fdGhyb3R0bGVfc3dhcHJhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuIDQ4NTpcdHtcbiA0ODY6XHRcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gNDg3Olx0XHRcdHJldHVybjtcbiA0ODg6XHRcdF9fZm9saW9fdGhyb3R0bGVfc3dhcHJhdGUoZm9saW8sIGdmcCk7XG4gNDg5Olx0fVxuIDQ5MDpcdCNlbHNlXG4gNDkxOlx0c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbiA0OTI6XHR7XG4gNDkzOlx0fVxuIDQ5NDpcdCNlbmRpZlxuIDQ5NTpcdFxuIDQ5NjpcdCNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NXQVApXG4gNDk3Olx0aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gNDk4Olx0c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiA0OTk6XHR7XG4gNTAwOlx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIDUwMTpcdFx0XHRyZXR1cm4gMDtcbiA1MDI6XHRcdHJldHVybiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKTtcbiA1MDM6XHR9XG4gNTA0Olx0XG4gNTA1Olx0ZXh0ZXJuIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcyk7XG4gNTA2Olx0c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuIDUwNzpcdHtcbiA1MDg6XHRcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gNTA5Olx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTA4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWcgb3B0aW9ucyDigJMgbGV0JiMzOTtzIHNlZSBpZiBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjayBoZXJlLi4uCgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZTogTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgYENPTkZJR19NRU1DR2AgKG1lbW9yeSBjZ3JvdXBzKSBhbmQgYENPTkZJR19TV0FQYCBhcmUgb2J2aW91c2x5IGZ1bmRhbWVudGFsLiBHb3R0YSBnZXQgdGhvc2UgcmlnaHQgdG8gaGF2ZSBhIHVzYWJsZSBzeXN0ZW0hIEJ1dCwgSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFoZWFkLCBhbmQgd2FudCB0byBjb25zaWRlciBob3cgdG8gb3B0aW1pemUgc3dhcHBpbmcgYW5kIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMuIFdoYXQmIzM5O3MgdGhlIHJlbGF0aW9uc2hpcCwgc3BlY2lmaWNhbGx5LCBiZXR3ZWVuIGBDT05GSUdfVEhQX1NXQVBgIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYD8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgaGF2aW5nIG9uZSB3aXRob3V0IHRoZSBvdGhlciBtYWtlcyBzZW5zZSwgb3IgaWYgdGhlaXIgaW50ZXJwbGF5IGlzIGVzc2VudGlhbCB0byBnZXQgdGhlIHN5c3RlbSBiZWhhdmluZyBhcyBJIGV4cGVjdC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhwbG9yZSB0aGVpciBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRIUF9TV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz05NjQ9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTk2NS1cbm1tL0tjb25maWc6OTY2OmNvbmZpZyBUSFBfU1dBUFxubW0vS2NvbmZpZy05NjctXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIHplcm8gaW4gb24gYG1tL0tjb25maWdgLiBJJiMzOTt2ZSBnb3QgYSBodW5jaCBhYm91dCBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgbGluZSA5NjYgaW4gYG1tL0tjb25maWdgIGlzIG9mdGVuIGEgZ29vZCBwbGFjZSB0byBzdGFydCB3aGVuIEkmIzM5O20gY2hhc2luZyBzb21ldGhpbmcgc3BlY2lmaWMuIENvdWxkIGJlIGEgZmVhdHVyZSBmbGFnLCBhIGRlcGVuZGVuY3ksIG9yIGEgZGVmYXVsdCBzZXR0aW5nIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIHRoZXJlIGFuZCBzZWUgd2hhdCBpcyBhdmFpbGFibGUgd2l0aGluIHRoYXQgbGluZSBvZiBjb2RlLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIGFyZWEgb2YgdGhlIGtlcm5lbCBjb25maWcgaW4gbW9yZSBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTU1Olx0XHQgIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbnMuXG4gOTU2Olx0XG4gOTU3Olx0XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcbiA5NTg6XHRcdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiA5NTk6XHRcdGhlbHBcbiA5NjA6XHRcdCAgRW5hYmxlIGh1Z2VwYWdlIGFsbG9jYXRpb24gZm9yIHRoZSB0bXBmcyBtb3VudCBleGNsdXNpdmVseSB3aGVuXG4gOTYxOlx0XHQgIGFwcGxpY2F0aW9ucyBzdXBwbHkgdGhlIG1hZHZpc2UoTUFEVl9IVUdFUEFHRSkgaGludC5cbiA5NjI6XHRcdCAgVGhpcyBlbnN1cmVzIHRoYXQgaHVnZXBhZ2VzIGFyZSB1c2VkIG9ubHkgaW4gcmVzcG9uc2UgdG8gZXhwbGljaXRcbiA5NjM6XHRcdCAgcmVxdWVzdHMgZnJvbSBhcHBsaWNhdGlvbnMuXG4gOTY0Olx0ZW5kY2hvaWNlXG4gOTY1Olx0XG4gOTY2Olx0Y29uZmlnIFRIUF9TV0FQXG4gOTY3Olx0XHRkZWZfYm9vbCB5XG4gOTY4Olx0XHRkZXBlbmRzIG9uIEFSQ0hfV0FOVFNfVEhQX1NXQVAgXHUwMDI2XHUwMDI2IFNXQVAgXHUwMDI2XHUwMDI2IDY0QklUXG4gOTY5Olx0XHRoZWxwXG4gOTcwOlx0XHQgIFN3YXAgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBpbiBvbmUgcGllY2UsIHdpdGhvdXQgc3BsaXR0aW5nLlxuIDk3MTpcdFx0ICBYWFg6IEZvciBub3csIHN3YXAgY2x1c3RlciBiYWNraW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZVxuIDk3MjpcdFx0ICB3aWxsIGJlIHNwbGl0IGFmdGVyIHN3YXBvdXQuXG4gOTczOlx0XG4gOTc0Olx0XHQgIEZvciBzZWxlY3Rpb24gYnkgYXJjaGl0ZWN0dXJlcyB3aXRoIHJlYXNvbmFibGUgVEhQIHNpemVzLlxuIDk3NTpcdFxuIDk3NjpcdGNvbmZpZyBOT19QQUdFX01BUENPVU5UXG4gOTc3Olx0XHRib29sIFwmIzM0O05vIHBlci1wYWdlIG1hcGNvdW50IChFWFBFUklNRU5UQUwpXCYjMzQ7XG4gOTc4Olx0XHRoZWxwXG4gOTc5Olx0XHQgIERvIG5vdCBtYWludGFpbiBwZXItcGFnZSBtYXBjb3VudHMgZm9yIHBhZ2VzIHBhcnQgb2YgbGFyZ2VyXG4gOTgwOlx0XHQgIGFsbG9jYXRpb25zLCBzdWNoIGFzIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMuXG4gOTgxOlx0XG4gOTgyOlx0XHQgIFdoZW4gdGhpcyBjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQsIHNvbWUgaW50ZXJmYWNlcyB0aGF0IHJlbGllZCBvblxuIDk4MzpcdFx0ICB0aGlzIGluZm9ybWF0aW9uIHdpbGwgcmVseSBvbiBsZXNzLXByZWNpc2UgcGVyLWFsbG9jYXRpb24gaW5mb3JtYXRpb25cbiA5ODQ6XHRcdCAgaW5zdGVhZDogZm9yIGV4YW1wbGUsIHVzaW5nIHRoZSBhdmVyYWdlIHBlci1wYWdlIG1hcGNvdW50IGluIHN1Y2hcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkwOQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3dhcCBhbmQgTWVtb3J5IE1hbmFnZW1lbnQgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gbWVtb3J5IGNvbnRyb2wgYW5kIHN3YXAuIEZpcnN0IHRoaW5ncyBmaXJzdDogYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfU1dBUGAgaW4gS2NvbmZpZy4gR290dGEgbWFrZSBzdXJlIHRob3NlIGFyZSBwcm9wZXJseSBjb25maWd1cmVkLiBBbmQgd2hpbGUgSSYjMzk7bSBhdCBpdCwgSSBzaG91bGQgc2VlIGlmIGBDT05GSUdfU0hNRU1gIGhhcyBhbnkgYmVhcmluZyBvbiB0aGlzLgoKTmV4dCwgSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiBtb2RpZmljYXRpb25zLiBIZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZ290OgoKMS4gIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCBpbiBgbW0vcGFnZV9jb3VudGVyLmNgCjIuICBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gIGluIGBtbS9tZW1jb250cm9sLmNgCjMuICBgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlc2AgaW4gYG1tL21lbWNvbnRyb2wuY2AKNC4gIGBmb2xpb19hbGxvY19zd2FwYCBpbiBgbW0vc3dhcGZpbGUuY2AKNS4gIGBzaG1lbV93cml0ZW91dGAgaW4gYG1tL3NobWVtLmNgCjYuICBgc2hyaW5rX2ZvbGlvX2xpc3RgIGluIGBtbS92bXNjYW4uY2AKClJpZ2h0LCBgc2hyaW5rX2ZvbGlvX2xpc3RgIGlzIHN0YXRpYywgd2hpY2ggaXMgZ29vZCB0byBrbm93LCBidXQgdGhlIG90aGVycyBsb29rIGludGVyZXN0aW5nLiBUaGV5JiMzOTtyZSBub24tc3RhdGljLCBzbyB0aGUgc2NvcGUgYW5kIHZpc2liaWxpdHkgYXJlIGEgYml0IGRpZmZlcmVudCwgcG90ZW50aWFsbHkgaW5kaWNhdGluZyBtb3JlIGltcG9ydGFudCBBUEkgZW50cnlwb2ludHMuCgpOb3csIHRvIG5haWwgZG93biB0aGUgaW1wb3J0YW50IEFQSSBlbnRyeXBvaW50cyBmb3IgRm9jdXNTeW1ib2xzLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5vbi1ob3QtcGF0aCwgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludCBmdW5jdGlvbnM6IGBmb2xpb19hbGxvY19zd2FwYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXNgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSBzaG91bGQgYmUgZm9jdXNpbmcgb24uCgpBbmQgZmluYWxseSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBzaG1lbV93cml0ZW91dGAgdG8gc2VlIGlmIGl0JiMzOTtzIHN0YXRpYyBvciBleHBvcnRlZC4gVGhhdCBkZXRhaWwgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSBhbmQgdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV93cml0ZW91dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NobWVtLmM9NDc9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc2htX21udCBfX3JvX2FmdGVyX2luaXQ7XG4tLVxubW0vc2htZW0uYy0xMDEtLypcbm1tL3NobWVtLmM6MTAyOiAqIHNobWVtX2ZhbGxvY2F0ZSBjb21tdW5pY2F0ZXMgd2l0aCBzaG1lbV9mYXVsdCBvciBzaG1lbV93cml0ZW91dCB2aWFcbm1tL3NobWVtLmMtMTAzLSAqIGlub2RlLVx1MDAzZWlfcHJpdmF0ZSAod2l0aCBpX3J3c2VtIG1ha2luZyBzdXJlIHRoYXQgaXQgaGFzIG9ubHkgb25lIHVzZXIgYXRcbi0tXG5tbS9zaG1lbS5jPTQxND1zdGF0aWMgdm9pZCBzaG1lbV9mcmVlX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNpemVfdCBmcmVlZF9pc3BhY2UpXG4tLVxubW0vc2htZW0uYy00MzUtICpcbm1tL3NobWVtLmM6NDM2OiAqIFJldHVybjogdHJ1ZSBpZiBzd2FwcGVkIHdhcyBpbmNyZW1lbnRlZCBmcm9tIDAsIGZvciBzaG1lbV93cml0ZW91dCgpLlxubW0vc2htZW0uYy00MzctICovXG5tbS9zaG1lbS5jPTQzOD1ib29sIHNobWVtX3JlY2FsY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIGFsbG9jZWQsIGxvbmcgc3dhcHBlZClcbi0tXG5tbS9zaG1lbS5jLTQ1MS1cdCAqIGFmdGVyIGlfbWFwcGluZy1cdTAwM2VucnBhZ2VzIGhhcyBhbHJlYWR5IGJlZW4gYWRqdXN0ZWQgKHVwIG9yIGRvd24pLFxubW0vc2htZW0uYzo0NTI6XHQgKiBzaG1lbV93cml0ZW91dCgpIGhhcyB0byByYWlzZSBzd2FwcGVkIGJlZm9yZSBucnBhZ2VzIGlzIGxvd2VyZWQgLVxubW0vc2htZW0uYy00NTMtXHQgKiB0byBzdG9wIGEgcmFjaW5nIHNobWVtX3JlY2FsY19pbm9kZSgpIGZyb20gdGhpbmtpbmcgdGhhdCBhIHBhZ2UgaGFzXG4tLVxubW0vc2htZW0uYz0xNTU2PWludCBzaG1lbV91bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcbi0tXG5tbS9zaG1lbS5jLTE1OTktLyoqXG5tbS9zaG1lbS5jOjE2MDA6ICogc2htZW1fd3JpdGVvdXQgLSBXcml0ZSB0aGUgZm9saW8gdG8gc3dhcFxubW0vc2htZW0uYy0xNjAxLSAqIEBjdHg6IHN3YXAgSS9PIGNvbnRleHRcbi0tXG5tbS9zaG1lbS5jLTE2MDYtICovXG5tbS9zaG1lbS5jOjE2MDc6aW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vc2htZW0uYy0xNjA4LVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxuLS1cbm1tL3NobWVtLmMtMTc0My1cdFx0ICogYnV0IEkmIzM5O20gYSBsaXR0bGUgbmVydm91cyBhYm91dCBsZXR0aW5nIHRoaXMgZm9saW8gb3V0IG9mXG5tbS9zaG1lbS5jOjE3NDQ6XHRcdCAqIHNobWVtX3dyaXRlb3V0KCkgaW4gYSBoeWJyaWQgaGFsZi10bXBmcy1oYWxmLXN3YXAgc3RhdGVcbm1tL3NobWVtLmMtMTc0NS1cdFx0ICogZS5nLiBmb2xpb19tYXBwaW5nKGZvbGlvKSBtaWdodCBnaXZlIGFuIHVuZXhwZWN0ZWQgYW5zd2VyLlxuLS1cbm1tL3NobWVtLmM9MTc1Nz1pbnQgc2htZW1fd3JpdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zaG1lbS5jLTE3NjEtXG5tbS9zaG1lbS5jOjE3NjI6XHRlcnIgPSBzaG1lbV93cml0ZW91dChcdTAwMjZjdHgsIGZvbGlvLCBOVUxMKTtcbm1tL3NobWVtLmMtMTc2My1cdHN3YXBfd3JpdGVfc3VibWl0KFx1MDAyNmN0eCk7XG4tLVxubW0vc2htZW0uYz0zNjI0PXN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxubW0vc2htZW0uYy0zNzYwLVx0XHQvKlxubW0vc2htZW0uYzozNzYxOlx0XHQgKiBJbmZvcm0gc2htZW1fd3JpdGVvdXQoKSBob3cgZmFyIHdlIGhhdmUgcmVhY2hlZC5cbm1tL3NobWVtLmMtMzc2Mi1cdFx0ICogTm8gbmVlZCBmb3IgbG9jayBvciBiYXJyaWVyOiB3ZSBoYXZlIHRoZSBwYWdlIGxvY2suXG4tLVxubW0vc3dhcC5oPTQ2NT1leHRlcm4gY29uc3Qgc3RydWN0IHN3YXBfb3BzIHN3YXBfYmRldl9vcHM7XG5tbS9zd2FwLmgtNDY2LVxubW0vc3dhcC5oOjQ2NzppbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9zd2FwLmgtNDY4LVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcbi0tXG5tbS9zd2FwZmlsZS5jPTI4MDk9c3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXG4tLVxubW0vc3dhcGZpbGUuYy0yODkxLVx0ICogZXhpdF9tbWFwKCksIHdoaWNoIHByb2NlZWRzIGF0IGl0cyBvd24gaW5kZXBlbmRlbnQgcGFjZTtcbm1tL3N3YXBmaWxlLmM6Mjg5MjpcdCAqIGFuZCBldmVuIHNobWVtX3dyaXRlb3V0KCkgY291bGQgaGF2ZSBiZWVuIHByZWVtcHRlZCBhZnRlclxubW0vc3dhcGZpbGUuYy0yODkzLVx0ICogZm9saW9fYWxsb2Nfc3dhcCgpLCB0ZW1wb3JhcmlseSBoaWRpbmcgdGhhdCBzd2FwLiAgSXQmIzM5O3MgZWFzeVxuLS1cbm1tL3Ztc2Nhbi5jPTYyMT1zdGF0aWMgcGFnZW91dF90IHBhZ2VvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3Ztc2Nhbi5jLTY1Ny1cdGlmIChzaG1lbV9tYXBwaW5nKG1hcHBpbmcpKVxubW0vdm1zY2FuLmM6NjU4Olx0XHRyZXMgPSBzaG1lbV93cml0ZW91dChjdHgsIGZvbGlvLCBmb2xpb19saXN0KTtcbm1tL3Ztc2Nhbi5jLTY1OS1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIFN3YXAgYW5kIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIGBzaG1lbV93cml0ZW91dGAgaXMgZGVmaW5lZCBpbiBgbW0vc3dhcC5oYCwgYW5kIGl0JiMzOTtzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgdXNlZnVsIHRvIGtub3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gbWVtb3J5IGNncm91cHMgYW5kIHN3YXBwaW5nLCBzbyBsZXQgbWUgcXVpY2tseSByZXZpZXcgYSBmZXcga2V5IGZ1bmN0aW9uczogYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYGZvbGlvX2FsbG9jX3N3YXBgLCBgc2htZW1fd3JpdGVvdXRgIChvZiBjb3Vyc2UhKSwgYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXNgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNvcmUgcGllY2VzLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIGNhbiBmaW5kIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBpbiBgbW0vTWFrZWZpbGVgIG9yIHBlcmhhcHMgYGluY2x1ZGUvbGludXgvc3dhcC5oYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5OgoKKiAgIGBTV0FQYDogVGhpcyBvbmUmIzM5O3MgdGhlIGZ1bmRhbWVudGFsIGVuYWJsZXIgZm9yIHN3YXBmaWxlIGZ1bmN0aW9uYWxpdHksIHNvIGl0JiMzOTtzIGNyaXRpY2FsLgoqICAgYE1FTUNHYDogVGhpcyBtdXN0IGJlIHRoZSBrZXkgdG8gaG93IG1lbW9yeSBjZ3JvdXBzIGFuZCBzd2FwIGxpbWl0cyBpbnRlcmFjdC4KKiAgIGBTSE1FTWA6IFRoaXMgc2hvdWxkIGJlIGNyaXRpY2FsIHNpbmNlIEkgYW0gY29uc2lkZXJpbmcgYHNobWVtX3dyaXRlb3V0YC4KKiAgIEFuZCBmaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgZWl0aGVyIGBUSFBfU1dBUGAgb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCDigJMgdGhvc2UgYXJlIHRoZSBtdWx0aS1wYWdlIGZvbGlvIHN3YXAgZmxhZ3MgdGhhdCBjb3VsZCBpbmZsdWVuY2UgYWxsIG9mIHRoaXMuCgpUbyBiZSB0aG9yb3VnaCwgbGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIGBtbS9NYWtlZmlsZWAgYWdhaW4sIHNwZWNpZmljYWxseSBmb3Igc3dhcGZpbGUuYyBhbmQgbWVtY29udHJvbC5jOyBJIGp1c3Qgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cyB3aXRoIHRoZSBjb25maWcgZmxhZ3MgdGhhdCBnb3Zlcm4gdGhlaXIgaW5jbHVzaW9uIG9yIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwZmlsZVxcLm98bWVtY29udHJvbFxcLm98cGFnZV9jb3VudGVyXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cbm1tL01ha2VmaWxlOjI4OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLm8gOj0gblxubW0vTWFrZWZpbGUtMjktS0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXG4tLVxubW0vTWFrZWZpbGU9NzY9ZW5kaWZcbm1tL01ha2VmaWxlLTc3LVxubW0vTWFrZWZpbGU6Nzg6b2JqLSQoQ09ORklHX1NXQVApXHQmIzQzOz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXG5tbS9NYWtlZmlsZS03OS1vYmotJChDT05GSUdfWlNXQVApXHQmIzQzOz0genN3YXAub1xuLS1cbm1tL01ha2VmaWxlPTEwMT1vYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGU6MTAyOm9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xubW0vTWFrZWZpbGUtMTAzLW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbm1tL01ha2VmaWxlPTEwND1vYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA1OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzQwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgQ09ORklHX1BBR0VfQ09VTlRFUmAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgcmlnaHQgaW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdmVyaWZ5IHRoZSBzdGF0ZSBvZiBgQ09ORklHX1BBR0VfQ09VTlRFUmAuIFRoaXMgdmFyaWFibGUsIGFzIHdlIGFsbCBrbm93LCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4uLiB3ZWxsLCBwcmV0dHkgbXVjaCBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0LiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgaXQmIzM5O3MgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBEZXBlbmRpbmcgb24gaXRzIHN0YXR1cywgdGhlIGltcGxpY2F0aW9ucyB3aWxsIGJlIGltbWVkaWF0ZWx5IGFwcGFyZW50IGFuZCB0aGV5JiMzOTtsbCBkcml2ZSB0aGUgbmV4dCBsaW5lIG9mIHRob3VnaHQuIElmIGl0IGlzIGVuYWJsZWQsIHRoYXQgc2F5cyBhIGxvdCBhYm91dCB0aGUgYXNzdW1wdGlvbnMgaW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUsIGhvdyBwYWdlIGNvdW50ZXJzIGFyZSB1c2VkIGZvciB0cmFja2luZywgYW5kIG1heWJlIGhvdyB0aGlzIHdob2xlIHRoaW5nIGJlaGF2ZXMgaW4gZGlmZmVyZW50IG1lbW9yeSBjb250ZXh0cy4gRGlzYWJsaW5nIGl0Li4uIHdlbGwgdGhhdCYjMzk7cyBhIHdob2xlIGRpZmZlcmVudCBiYWxsZ2FtZSBvZiB0cmFkZW9mZnMgYW5kIG9wdGltaXphdGlvbnMsIHdoaWNoIHdpbGwgc2hpZnQgbXkgZm9jdXMgZWxzZXdoZXJlLCBwb3NzaWJseSB0byBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgb3Igc3BlY2lmaWMgaGFyZHdhcmUgY29uc3RyYWludHMuIFNvLCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0sIGFuZCB0aGVuIHdlJiMzOTtsbCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEFHRV9DT1VOVEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2Mz1pZiBDR1JPVVBTXG5pbml0L0tjb25maWctMTA2NC1cbmluaXQvS2NvbmZpZzoxMDY1OmNvbmZpZyBQQUdFX0NPVU5URVJcbmluaXQvS2NvbmZpZy0xMDY2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA1NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlBlZXJpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBCYXNlZCBvbiB0aGUgdGFzayBhdCBoYW5kLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gd2hhdGV2ZXIgZnVuY3Rpb25hbGl0eSBJJiMzOTttIHdvcmtpbmcgd2l0aC4gQSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhcyBhbHdheXMsIGlzIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSAxMDY1LiBJJiMzOTttIGhvcGluZyB0aGF0IHRoaXMgc2VjdGlvbiB3aWxsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjbHVlcyBhYm91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBrbm9icyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGFyZWEgdG8gYmUgYSBjZW50cmFsIGh1YiBmb3IgZGVmaW5pbmcgdGhlIGRlZmF1bHQga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBpbiB0aGlzIHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA1OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDUwOlx0XHRib29sIFwmIzM0O0NvbnRyb2wgR3JvdXAgc3VwcG9ydFwmIzM0O1xuMTA1MTpcdFx0c2VsZWN0IEtFUk5GU1xuMTA1MjpcdFx0aGVscFxuMTA1MzpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGdyb3VwaW5nIHNldHMgb2YgcHJvY2Vzc2VzIHRvZ2V0aGVyLCBmb3JcbjEwNTQ6XHRcdCAgdXNlIHdpdGggcHJvY2VzcyBjb250cm9sIHN1YnN5c3RlbXMgc3VjaCBhcyBDcHVzZXRzLCBDRlMsIG1lbW9yeVxuMTA1NTpcdFx0ICBjb250cm9scyBvciBkZXZpY2UgaXNvbGF0aW9uLlxuMTA1NjpcdFx0ICBTZWVcbjEwNTc6XHRcdFx0LSBEb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1kZXNpZ24tQ0ZTLnJzdFx0KENGUylcbjEwNTg6XHRcdFx0LSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS8gKGZlYXR1cmVzIGZvciBncm91cGluZywgaXNvbGF0aW9uXG4xMDU5Olx0XHRcdFx0XHRcdCAgYW5kIHJlc291cmNlIGNvbnRyb2wpXG4xMDYwOlx0XG4xMDYxOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwNjI6XHRcbjEwNjM6XHRpZiBDR1JPVVBTXG4xMDY0Olx0XG4xMDY1Olx0Y29uZmlnIFBBR0VfQ09VTlRFUlxuMTA2NjpcdFx0Ym9vbFxuMTA2NzpcdFxuMTA2ODpcdGNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuMTA2OTpcdFx0Ym9vbCBcJiMzNDtGYXZvciBkeW5hbWljIG1vZGlmaWNhdGlvbiBsYXRlbmN5IHJlZHVjdGlvbiBieSBkZWZhdWx0XCYjMzQ7XG4xMDcwOlx0XHRoZWxwXG4xMDcxOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFwmIzM0O2Zhdm9yZHlubW9kc1wmIzM0OyBtb3VudCBvcHRpb24gYnkgZGVmYXVsdFxuMTA3MjpcdFx0ICB3aGljaCByZWR1Y2VzIHRoZSBsYXRlbmNpZXMgb2YgZHluYW1pYyBjZ3JvdXAgbW9kaWZpY2F0aW9ucyBzdWNoXG4xMDczOlx0XHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xuMTA3NDpcdFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxuMTA3NTpcdFxuMTA3NjpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDc3Olx0XG4xMDc4Olx0Y29uZmlnIE1FTUNHXG4xMDc5Olx0XHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMDgwOlx0XHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4xMDgxOlx0XHRzZWxlY3QgRVZFTlRGRFxuMTA4MjpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA4MzpcdFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4xMDg0Olx0XHRoZWxwXG4xMDg1Olx0XHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cbjEwODY6XHRcbjEwODc6XHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuMTA4ODpcdFx0Ym9vbFxuMTA4OTpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc3NwoJCQkJCQkJb3V0cHV0OiAxODkKCQkJCQkJCXRob3VnaHRzOiAzNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgc28gdGhlIHBhdGNoIGlzIHRhcmdldGluZyBzb21lIGNydWNpYWwgbWVtb3J5IG1hbmFnZW1lbnQgYXJlYXMsIHNwZWNpZmljYWxseSBhcm91bmQgc3dhcCBhbmQgZm9saW8gYWxsb2NhdGlvbi4gRnJvbSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWd1cmF0aW9ucywgYE1FTUNHYCByZWxpZXMgb24gYENHUk9VUFNgLCBhbmQgaXMgYSBwcmVyZXF1aXNpdGUsIHNvIHRoYXQmIzM5O3MgZ29vZC4gV2UgYWxzbyBoYXZlIGBTV0FQYCBlbmFibGVkLCB3aGljaCBpcyBlc3NlbnRpYWwsIGFzIGFyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgVEhQX1NXQVBgLCBhbmQgYFNITUVNYC4gQWxsIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBhcHBlYXIgdG8gYmUgaW4gcGxhY2UuCgpDaGVja2luZyB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGFuZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMsIHllcywgdGhhdCYjMzk7cyBhbGwgaW5saW5lIHdpdGggbXkgZXhwZWN0YXRpb25zLiBUaGlzIHNlZW1zIGxpa2UgYSB2YWxpZCBhcmVhIHRvIGZvY3VzIG91ciBlZmZvcnRzLCBnaXZlbiB0aGUgbGlzdGVkIGBFbmFibGVDb25maWdzYC4gVGhlIHBhdGNoIGlzIHdvcmtpbmcgd2l0aCBmb2xpbyBzd2FwIGFsbG9jYXRpb24sIG1lbWNnIHN3YXAgbWFyZ2luIHRyYWNraW5nLCBhbmQgc2htZW0gd3JpdGVvdXQuIFRoZSBrZXkgc3ltYm9scyB0aGF0IHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IGluY2x1ZGUgYGZvbGlvX2FsbG9jX3N3YXBgLCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLCBgcGFnZV9jb3VudGVyX21hcmdpbmAsIGFuZCBgc2htZW1fd3JpdGVvdXRgLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSB3b3VsZCBleHBlY3QgZm9yIGEgY2hhbmdlIGltcGFjdGluZyBob3cgd2UgaGFuZGxlIG1lbW9yeSBwcmVzc3VyZSwgZXNwZWNpYWxseSBjb25jZXJuaW5nIHN3YXBwaW5nLgoKU3BlY2lmaWNhbGx5LCB0aGUgbW9yZSBncmFudWxhciBlcnJvciBjb2RlcyBmcm9tIGBmb2xpb19hbGxvY19zd2FwYCBmb3Igc3dhcCBsaW1pdHMgaXMgYSBzbWFydCBjaGFuZ2UuIFJldHVybmluZyBgLUUyQklHYCwgYC1FTk9TUENgLCBhbmQgYC1FTk9NRU1gIGRlcGVuZGluZyBvbiB3aGV0aGVyIGEgbWVtY2cgb3IgZ2xvYmFsIGxpbWl0IGlzIHRoZSBjb25zdHJhaW50IGlzIG11Y2ggY2xlYW5lci4gQXZvaWRpbmcgdW5uZWNlc3Nhcnkgc3BsaXR0aW5nIG9mIGxhcmdlIGZvbGlvcyB3aGVuIHdlJiMzOTtyZSBoaXR0aW5nIGEgbGltaXQgaXMgZ29pbmcgdG8gYmUgdXNlZnVsIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gVGhpcyBpcyBhIHNvbGlkIHVwZGF0ZSB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGlzIGRpcmVjdGx5IGltcGFjdGluZyBib3RoIHN3YXAgYW5kIHJlY2xhaW0uCgpCYXNlZCBvbiB0aGlzIHJldmlldywgZXZlcnl0aGluZyBhcHBlYXJzIHRvIGJlIGluIG9yZGVyLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHJlbGV2YW50IGFyZWFzLCBhbmQgdGhlIHByb3Bvc2VkIGNoYW5nZXMgc2VlbSBhY2N1cmF0ZSBhbmQgd2VsbC1yZWFzb25lZC4gSSYjMzk7bSBjb21mb3J0YWJsZSB3aXRoIHRoZSBjdXJyZW50IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA1OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1RIUF9TV0FQJiMzNDssCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fYWxsb2Nfc3dhcCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbiYjMzQ7LAogICAgJiMzNDtwYWdlX2NvdW50ZXJfbWFyZ2luJiMzNDssCiAgICAmIzM0O3NobWVtX3dyaXRlb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IHN3YXAgYWxsb2NhdGlvbiBsb2dpYyBieSByZWZpbmluZyBlcnJvciByZXBvcnRpbmcgaW4gZm9saW9fYWxsb2Nfc3dhcCgpIGFuZCBhZGRpbmcgcGFnZV9jb3VudGVyX21hcmdpbigpIGFuZCBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbigpIHRvIGluc3BlY3QgaGllcmFyY2hpY2FsIHN3YXAgbWFyZ2lucy4gVGhpcyBjaGFuZ2VzIGhvdyBsYXJnZSBmb2xpb3MgYXJlIHNwbGl0IGFuZCBoYW5kbGVkIGR1cmluZyBzd2Fwb3V0IGluIHNobWVtX3dyaXRlb3V0KCkgYW5kIHBhZ2UgcmVjbGFpbSBpbiBzaHJpbmtfZm9saW9fbGlzdCgpIHdoZW4gZ2xvYmFsIG9yIG1lbWNnIHN3YXAgbGltaXRzIGFyZSByZWFjaGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1RIUF9TV0FQJiMzNDssCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fYWxsb2Nfc3dhcCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbiYjMzQ7LAogICAgJiMzNDtwYWdlX2NvdW50ZXJfbWFyZ2luJiMzNDssCiAgICAmIzM0O3NobWVtX3dyaXRlb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IHN3YXAgYWxsb2NhdGlvbiBsb2dpYyBieSByZWZpbmluZyBlcnJvciByZXBvcnRpbmcgaW4gZm9saW9fYWxsb2Nfc3dhcCgpIGFuZCBhZGRpbmcgcGFnZV9jb3VudGVyX21hcmdpbigpIGFuZCBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbigpIHRvIGluc3BlY3QgaGllcmFyY2hpY2FsIHN3YXAgbWFyZ2lucy4gVGhpcyBjaGFuZ2VzIGhvdyBsYXJnZSBmb2xpb3MgYXJlIHNwbGl0IGFuZCBoYW5kbGVkIGR1cmluZyBzd2Fwb3V0IGluIHNobWVtX3dyaXRlb3V0KCkgYW5kIHBhZ2UgcmVjbGFpbSBpbiBzaHJpbmtfZm9saW9fbGlzdCgpIHdoZW4gZ2xvYmFsIG9yIG1lbWNnIHN3YXAgbGltaXRzIGFyZSByZWFjaGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA1OjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5oYW5jZXMgc3dhcCBhbGxvY2F0aW9uIGVycm9yIHJlcG9ydGluZyBpbiBgZm9saW9fYWxsb2Nfc3dhcCgpYCBieSBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuIGNhc2VzIHdoZXJlIGEgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiBmYWlsZWQgZHVlIHRvIGZvbGlvIHNpemUgdnMuIHRvdGFsIHN3YXAvY2dyb3VwIHN3YXAgZXhoYXVzdGlvbi4gSXQgaW50cm9kdWNlcyBgcGFnZV9jb3VudGVyX21hcmdpbigpYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKClgIGFuZCB1cGRhdGVzIGZvbGlvIHNwbGl0dGluZyBkZWNpc2lvbnMgaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL3NobWVtLmNgLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSAoS01TQU4pOiBBbGwgbG9jYWwgdmFyaWFibGVzIChgcmV0YCwgYG1hcmdpbmAsIGBtYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZC5cbi0gTWVtb3J5IFNhZmV0eSBcdTAwMjYgTG9naWMgKEtBU0FOL0xvY2tkZXApOiBBbnkgcmlza3MgaW4gdGhpcyBwYXRjaCByZXZvbHZlIGFyb3VuZCBjZ3JvdXAgc3dhcCBhY2NvdW50aW5nLCBwYWdlIGxvY2tpbmcsIHJlZmNvdW50aW5nLCBvciBjb250cm9sLWZsb3cgbG9naWMgaW4gcmVjbGFpbS93cml0ZW91dCwgd2hpY2ggYXJlIG1vbml0b3JlZCBieSBzdGFuZGFyZCBNTSBhc3NlcnRpb25zLCBLQVNBTiwgYW5kIExvY2tkZXAuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMTUxNmJkNjYyZjkyODE2YWQ2MzUzN2RlMWVlN2VhZjllOTU3Y2I5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMzAgMDQ6NTk6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaAppbmRleCBkNjQ5YjZiYmJjODcxLi4wN2I3Y2IxMjI0OWM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgKQEAgLTY4LDYgJiM0Mzs2OCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKQogCXJldHVybiBhdG9taWNfbG9uZ19yZWFkKCZhbXA7Y291bnRlci0mZ3Q7dXNhZ2UpOwogfQogCiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpOwogdm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogdm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogYm9vbCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCAwZjk1M2VkOWM4NjMwLi5hNzJlY2YxMmMwMGRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtNTEwLDYgJiM0Mzs1MTAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcAogCV9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7CiB9CiAKJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogZXh0ZXJuIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7CiAjZWxzZQpAQCAtNTIzLDYgJiM0Mzs1MjQsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwKIHsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDRhMThlZTQ1MDlhYjYuLjlhMzgwNDEzMmMyZWIgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTU4MDEsMTUgJiM0Mzs1ODAxLDM1IEBAIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJbG9uZyBucl9zd2FwX3BhZ2VzID0gZ2V0X25yX3N3YXBfcGFnZXMoKTsKIAotCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgZG9fbWVtc3dfYWNjb3VudCgpKQotCQlyZXR1cm4gbnJfc3dhcF9wYWdlczsKLQlmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKQotCQlucl9zd2FwX3BhZ2VzID0gbWluX3QobG9uZywgbnJfc3dhcF9wYWdlcywKLQkJCQkgICAgICBSRUFEX09OQ0UobWVtY2ctJmd0O3N3YXAubWF4KSAtCi0JCQkJICAgICAgcGFnZV9jb3VudGVyX3JlYWQoJmFtcDttZW1jZy0mZ3Q7c3dhcCkpOwomIzQzOwlpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSAmYW1wOyZhbXA7ICFkb19tZW1zd19hY2NvdW50KCkpCiYjNDM7CQlucl9zd2FwX3BhZ2VzID0gbWluKG5yX3N3YXBfcGFnZXMsIHBhZ2VfY291bnRlcl9tYXJnaW4oJmFtcDttZW1jZy0mZ3Q7c3dhcCkpOwomIzQzOwogCXJldHVybiBucl9zd2FwX3BhZ2VzOwogfQogCiYjNDM7LyoqCiYjNDM7ICogbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4gLSBnZXQgYSBmb2xpbyYjMzk7cyBtZW1jZyBzd2FwIG1hcmdpbgomIzQzOyAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtY2cgbWFyZ2luIGlzIHF1ZXJpZWQKJiM0MzsgKgomIzQzOyAqIFJldHVybjogUmVtYWluaW5nIGNoYXJnZWFibGUgcGFnZXMgaW4gdGhlIGZvbGlvJiMzOTtzIG1lbWNnIGhpZXJhcmNoeS4KJiM0MzsgKi8KJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CWxvbmcgbWFyZ2luOwomIzQzOwomIzQzOwlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSB8fAomIzQzOwkgICAgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKQomIzQzOwkJcmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7CiYjNDM7CW1hcmdpbiA9IHBhZ2VfY291bnRlcl9tYXJnaW4oJmFtcDttZW1jZy0mZ3Q7c3dhcCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gbWFyZ2luOwomIzQzO30KJiM0MzsKIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jCmluZGV4IDY2MWUwZjJhNTEyN2EuLjQ1MDU0M2Y0YjMxOGIgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfY291bnRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfY291bnRlci5jCkBAIC00Niw2ICYjNDM7NDYsMjYgQEAgc3RhdGljIHZvaWQgcHJvcGFnYXRlX3Byb3RlY3RlZF91c2FnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjLAogCX0KIH0KIAomIzQzOy8qKgomIzQzOyAqIHBhZ2VfY291bnRlcl9tYXJnaW4gLSByZW1haW5pbmcgdXNhYmxlIHNwYWNlIHdpdGhpbiBoaWVyYXJjaGljYWwgbGltaXRzCiYjNDM7ICogQGNvdW50ZXI6IGNvdW50ZXIKJiM0MzsgKgomIzQzOyAqIFJldHVybjogVGhlIG1pbmltdW0gdmFsdWUgb2YgbWF4IG1pbnVzIHVzYWdlIGFjcm9zcyBAY291bnRlciBhbmQgYWxsIG9mCiYjNDM7ICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS4KJiM0MzsgKi8KJiM0Mztsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcikKJiM0Mzt7CiYjNDM7CWxvbmcgbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJbG9uZyBtID0gUkVBRF9PTkNFKGNvdW50ZXItJmd0O21heCkgLSBwYWdlX2NvdW50ZXJfcmVhZChjb3VudGVyKTsKJiM0MzsKJiM0MzsJCW1hcmdpbiA9IG1pbihtYXJnaW4sIG0pOwomIzQzOwl9IHdoaWxlICgoY291bnRlciA9IGNvdW50ZXItJmd0O3BhcmVudCkpOwomIzQzOwomIzQzOwlyZXR1cm4gbWFyZ2luOwomIzQzO30KJiM0MzsKIC8qKgogICogcGFnZV9jb3VudGVyX2NhbmNlbCAtIHRha2UgcGFnZXMgb3V0IG9mIHRoZSBsb2NhbCBjb3VudGVyCiAgKiBAY291bnRlcjogY291bnRlcgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggZGUxNDRhOWE5NTU4Yi4uODRiOGU5ZTA1OTczYiAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0xNjEyLDcgJiM0MzsxNjEyLDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7CiAJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLSZndDtpX3NiKTsKIAlwZ29mZl90IGluZGV4OwotCWludCBucl9wYWdlczsKJiM0MzsJaW50IG5yX3BhZ2VzLCByZXQ7CiAJYm9vbCBzcGxpdCA9IGZhbHNlOwogCiAJaWYgKChpbmZvLSZndDtmbGFncyAmYW1wOyBTSE1FTV9GX0xPQ0tFRCkgfHwgc2JpbmZvLSZndDtub3N3YXApCkBAIC0xNjkzLDcgJiM0MzsxNjkzLDggQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTsKIAl9CiAKLQlpZiAoIWZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7CiYjNDM7CXJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pOwomIzQzOwlpZiAoIXJldCkgewogCQlib29sIGZpcnN0X3N3YXBwZWQgPSBzaG1lbV9yZWNhbGNfaW5vZGUoaW5vZGUsIDAsIG5yX3BhZ2VzKTsKIAkJaW50IGVycm9yOwogCkBAIC0xNzQ2LDcgJiM0MzsxNzQ3LDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7CiAJCWdvdG8gcmVkaXJ0eTsKIAl9Ci0JaWYgKG5yX3BhZ2VzICZndDsgMSkKJiM0MzsJaWYgKG5yX3BhZ2VzICZndDsgMSAmYW1wOyZhbXA7IHJldCA9PSAtRTJCSUcpCiAJCWdvdG8gdHJ5X3NwbGl0OwogcmVkaXJ0eToKIAlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDUxZjVhNTI1YmI2MWMuLmRjMGNkMGNjNmY2MjYgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtMTczNSw3ICYjNDM7MTczNSw5IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKICAqIHN3YXAgY2FjaGUuCiAgKgogICogQ29udGV4dDogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGZvbGlvIGxvY2suCi0gKiBSZXR1cm46IFdoZXRoZXIgdGhlIGZvbGlvIHdhcyBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZS4KJiM0MzsgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsICUtRTJCSUcgaWYgc3BsaXR0aW5nIHRoZSBmb2xpbyBtaWdodCBhbGxvdyBzd2Fwb3V0LAomIzQzOyAqICUtRU5PU1BDIGlmIG5vIGdsb2JhbCBzd2FwIHNwYWNlIGlzIGF2YWlsYWJsZSwgb3IgJS1FTk9NRU0gaWYgc3BsaXR0aW5nCiYjNDM7ICogd291bGQgbm90IGhlbHAuCiAgKi8KIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CkBAIC0xNzQ3LDExICYjNDM7MTc0OSwxMSBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiAJaWYgKG9yZGVyKSB7CiAJCS8qCi0JCSAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQsCi0JCSAqIHRoZSBjYWxsZXIgc2hvdWxkIHNwbGl0IHRoZSBmb2xpbyBhbmQgdHJ5IGFnYWluLgomIzQzOwkJICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZC4gQ2hlY2sgYmVsb3cKJiM0MzsJCSAqIHdoZXRoZXIgc3BsaXR0aW5nIGFuZCByZXRyeWluZyBjYW4gbWFrZSBwcm9ncmVzcy4KIAkJICovCiAJCWlmICghSVNfRU5BQkxFRChDT05GSUdfVEhQX1NXQVApKQotCQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CQkJZ290byBmYWlsZWQ7CiAKIAkJLyoKIAkJICogQWxsb2NhdGlvbiBzaXplIHNob3VsZCBuZXZlciBleGNlZWQgY2x1c3RlciBzaXplCkBAIC0xNzU5LDcgJiM0MzsxNzYxLDcgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbykKIAkJICovCiAJCWlmIChzaXplICZndDsgU1dBUEZJTEVfQ0xVU1RFUikgewogCQkJVk1fV0FSTl9PTl9PTkNFKDEpOwotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJZ290byBmYWlsZWQ7CiAJCX0KIAl9CiAKQEAgLTE3NzUsMTMgJiM0MzsxNzc3LDIzIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJfQogCiAJLyogTmVlZCB0byBjYWxsIHRoaXMgZXZlbiBpZiBhbGxvY2F0aW9uIGZhaWxlZCwgZm9yIE1FTUNHX1NXQVBfRkFJTC4gKi8KLQlpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSkKJiM0MzsJaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpIHsKIAkJc3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pOwomIzQzOwkJZ290byBmYWlsZWQ7CiYjNDM7CX0KIAogCWlmICh1bmxpa2VseSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlnb3RvIGZhaWxlZDsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO2ZhaWxlZDoKJiM0MzsJaWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiAtRU5PU1BDOwomIzQzOwlpZiAobWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oZm9saW8pICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0dXJuIG9yZGVyID8gLUUyQklHIDogLUVOT01FTTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGZkZDEzMjk5YTA0YTkuLjZlNzcwYTA4ZTI4ODAgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xMjU5LDYgJiM0MzsxMjU5LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LAogCQkgKi8KIAkJaWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJmFtcDsmYW1wOyBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICZhbXA7JmFtcDsKIAkJCQkhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7CiYjNDM7CQkJaW50IHJldDsKJiM0MzsKIAkJCWlmICghKHNjLSZndDtnZnBfbWFzayAmYW1wOyBfX0dGUF9JTykpCiAJCQkJZ290byBrZWVwX2xvY2tlZDsKIAkJCWlmIChmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKSkKQEAgLTEyNzcsMTEgJiM0MzsxMjc5LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwKIAkJCQkgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpCiAJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwogCQkJfQotCQkJaWYgKGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7CiYjNDM7CQkJcmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7CiYjNDM7CQkJaWYgKHJldCkgewogCQkJCWludCBfX21heWJlX3VudXNlZCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTsKIAogCQkJCWlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpCiAJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkX3NwbGl0OwomIzQzOwkJCQlpZiAocmV0ICE9IC1FMkJJRykKJiM0MzsJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwogCQkJCS8qIEZhbGxiYWNrIHRvIHN3YXAgbm9ybWFsIHBhZ2VzICovCiAJCQkJaWYgKHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKQogCQkJCQlnb3RvIGFjdGl2YXRlX2xvY2tlZDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NDkKCQkJCQkJCW91dHB1dDogMjQ0CgkJCQkJCQl0aG91Z2h0czogMTE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBbmFseXNpcyBvZiBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgY2VudGVyZWQgYXJvdW5kIHJlZmluaW5nIGVycm9yIGhhbmRsaW5nIGFuZCBmb2xpbyBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gc3dhcCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgY2dyb3Vwcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IHdvdWxkIHdhcnJhbnQgS01TQU4gZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGNyZWF0ZSBhbnkga2VybmVsLXRvLXVzZXIgY29waWVzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdGhyb3VnaCBuZXcgY29uZGl0aW9uYWwgbG9naWMuCgpJIHNlZSBpdCB0b3VjaGVzIHNldmVyYWwga2V5IGFyZWFzOiBgcGFnZV9jb3VudGVyX21hcmdpbmAsIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGBmb2xpb19hbGxvY19zd2FwYCwgYHNobWVtX3dyaXRlb3V0YCwgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIGJldHRlciBkaXN0aW5ndWlzaGluZyB0aGUgcmVhc29ucyBmb3IgYSBmYWlsZWQgYGZvbGlvX2FsbG9jX3N3YXBgOiB3aGV0aGVyIGl0JiMzOTtzIGJlY2F1c2Ugb2YgdGhlIHNpemUgb2YgdGhlIHJlcXVlc3QgKGAtRTJCSUdgKSBvciBpbnN1ZmZpY2llbnQgc3dhcCBzcGFjZSAoYC1FTk9TUENgIG9yIGAtRU5PTUVNYCkuIFRoaXMgaW5mb3JtYXRpb24gaXMgdGhlbiB1c2VkIHRvIG9wdGltaXplIGZvbGlvIHNwbGl0dGluZyBpbiB0aGUgYHZtc2NhbmAgYW5kIGBzaG1lbWAgY29kZS4KCkxvb2tpbmcgY2xvc2VseSBhdCB0aGUgY29kZSBzbmlwcGV0cywgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGxvZ2ljIGludm9sdmVzIGNoZWNraW5nIHJldHVybiB2YWx1ZXMgb3IgbWFyZ2lucywgYnV0IG5vdCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYHBhZ2VfY291bnRlcl9tYXJnaW5gIGNhbGN1bGF0aW9uIGl0ZXJhdGVzIHRocm91Z2ggYSBoaWVyYXJjaHksIGJ1dCBhbGwgaW50ZXJtZWRpYXRlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBsb29wLiBUaGUgcmV0dXJuIHZhbHVlcyBvZiBgZm9saW9fYWxsb2Nfc3dhcGAgYXJlIGV4cGxpY2l0bHkgZGVmaW5lZCBpbnRlZ2VyIGNvZGVzLiBUaGUgcmV0dXJuIHZhbHVlIGlzIHVzZWQgdG8gZGVjaWRlIHRoZSBjb3JyZWN0IGFjdGlvbiBhbmQgaXMgY2hlY2tlZCBpbW1lZGlhdGVseSBhZnRlciBhc3NpZ25tZW50LiBOb3RoaW5nIGlzIGdldHRpbmcgY29waWVkIHRvIHVzZXJzcGFjZS4gTm8gY29tcGxleCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gYW4gdW5pbml0aWFsaXplZCB2YWx1ZS4KCkkgcmV2aWV3ZWQgdGhlIEtNU0FOIHJlcXVpcmVtZW50cyDigJMgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGtlcm5lbC10by11c2VyIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMsIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgY29tcGxleCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMsIGFuZCBhbnkgb3Bwb3J0dW5pdGllcyBmb3Igc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vbmUgb2YgdGhlc2UgYXBwbHkgaGVyZS4gVGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBsZWFrYWdlIHRvIHVzZXIgc3BhY2UuIEl0IHNlZW1zIHRoYXQgYW55IHBvdGVudGlhbCBidWdzIGhlcmUgd291bGQgYmUgY2xhc3NpYyBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXM6IGxvZ2ljIGVycm9ycywgbWVtb3J5IGxlYWtzLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgY2dyb3VwIGFjY291bnRpbmcgYnVncywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGtlcm5lbCBhc3NlcnRpb25zIGxpa2UgYFZNX1dBUk5fT05fT05DRWAuCgpTbywgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmUsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gVGhlIHBhdGNoIGZvY3VzZXMgb24gaW1wcm92aW5nIGVycm9yIGhhbmRsaW5nIGFuZCBmb2xpbyBtYW5hZ2VtZW50IGJhc2VkIG9uIHRoZSBzd2FwIG1hcmdpbiBhbmQgc3BhY2UgYXZhaWxhYmlsaXR5LiBJdCByZWZpbmVzIHRoZSBlcnJvciBzaWduYWxpbmcgZnJvbSB0aGUgYGZvbGlvX2FsbG9jX3N3YXBgIGZ1bmN0aW9uIGFuZCB1c2VzIHRoZXNlIGNvZGVzIGZvciBzbWFydGVyIGZvbGlvIHNwbGl0dGluZyBhbmQgcmVhZGFoZWFkLiBBbGwgdGhlIG5ldyB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkLCB0aGVyZSBhcmUgbm8ga2VybmVsLXRvLXVzZXIgY29waWVzLCBubyBuZXcgYWxsb2NhdGlvbnMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIG5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBpcyBzdWZmaWNpZW50IGZvciB0aGlzIHBhdGNoLiBJJiMzOTtsbCBkb2N1bWVudCB0aGlzIHJlYXNvbmluZyBhbmQgc3VibWl0IHRoZSByZXN1bHRzIHRvIHRoZSB0b29saW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmhhbmNlcyBzd2FwIGFsbG9jYXRpb24gZXJyb3IgcmVwb3J0aW5nIGluIGBmb2xpb19hbGxvY19zd2FwKClgIGJ5IGRpc3Rpbmd1aXNoaW5nIGJldHdlZW4gY2FzZXMgd2hlcmUgYSBsYXJnZSBmb2xpbyBhbGxvY2F0aW9uIGZhaWxlZCBkdWUgdG8gZm9saW8gc2l6ZSB2cy4gdG90YWwgc3dhcC9jZ3JvdXAgc3dhcCBleGhhdXN0aW9uLiBJdCBpbnRyb2R1Y2VzIGBwYWdlX2NvdW50ZXJfbWFyZ2luKClgIGFuZCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oKWAgYW5kIHVwZGF0ZXMgZm9saW8gc3BsaXR0aW5nIGRlY2lzaW9ucyBpbiBgbW0vdm1zY2FuLmNgIGFuZCBgbW0vc2htZW0uY2AuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IChLTVNBTik6IEFsbCBsb2NhbCB2YXJpYWJsZXMgKGByZXRgLCBgbWFyZ2luYCwgYG1gKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLlxuLSBNZW1vcnkgU2FmZXR5IFx1MDAyNiBMb2dpYyAoS0FTQU4vTG9ja2RlcCk6IEFueSByaXNrcyBpbiB0aGlzIHBhdGNoIHJldm9sdmUgYXJvdW5kIGNncm91cCBzd2FwIGFjY291bnRpbmcsIHBhZ2UgbG9ja2luZywgcmVmY291bnRpbmcsIG9yIGNvbnRyb2wtZmxvdyBsb2dpYyBpbiByZWNsYWltL3dyaXRlb3V0LCB3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IHN0YW5kYXJkIE1NIGFzc2VydGlvbnMsIEtBU0FOLCBhbmQgTG9ja2RlcC5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmhhbmNlcyBzd2FwIGFsbG9jYXRpb24gZXJyb3IgcmVwb3J0aW5nIGluIGBmb2xpb19hbGxvY19zd2FwKClgIGJ5IGRpc3Rpbmd1aXNoaW5nIGJldHdlZW4gY2FzZXMgd2hlcmUgYSBsYXJnZSBmb2xpbyBhbGxvY2F0aW9uIGZhaWxlZCBkdWUgdG8gZm9saW8gc2l6ZSB2cy4gdG90YWwgc3dhcC9jZ3JvdXAgc3dhcCBleGhhdXN0aW9uLiBJdCBpbnRyb2R1Y2VzIGBwYWdlX2NvdW50ZXJfbWFyZ2luKClgIGFuZCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oKWAgYW5kIHVwZGF0ZXMgZm9saW8gc3BsaXR0aW5nIGRlY2lzaW9ucyBpbiBgbW0vdm1zY2FuLmNgIGFuZCBgbW0vc2htZW0uY2AuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IChLTVNBTik6IEFsbCBsb2NhbCB2YXJpYWJsZXMgKGByZXRgLCBgbWFyZ2luYCwgYG1gKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLlxuLSBNZW1vcnkgU2FmZXR5IFx1MDAyNiBMb2dpYyAoS0FTQU4vTG9ja2RlcCk6IEFueSByaXNrcyBpbiB0aGlzIHBhdGNoIHJldm9sdmUgYXJvdW5kIGNncm91cCBzd2FwIGFjY291bnRpbmcsIHBhZ2UgbG9ja2luZywgcmVmY291bnRpbmcsIG9yIGNvbnRyb2wtZmxvdyBsb2dpYyBpbiByZWNsYWltL3dyaXRlb3V0LCB3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IHN0YW5kYXJkIE1NIGFzc2VydGlvbnMsIEtBU0FOLCBhbmQgTG9ja2RlcC5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjU5OjUyLjkwMTgxMjQzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTY1ODMwOTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlRIUF9TV0FQXCIsXG4gICAgXCJTSE1FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX2FsbG9jX3N3YXBcIixcbiAgICBcIm1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luXCIsXG4gICAgXCJwYWdlX2NvdW50ZXJfbWFyZ2luXCIsXG4gICAgXCJzaG1lbV93cml0ZW91dFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5oYW5jZXMgc3dhcCBhbGxvY2F0aW9uIGVycm9yIHJlcG9ydGluZyBpbiBgZm9saW9fYWxsb2Nfc3dhcCgpYCBieSBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuIGNhc2VzIHdoZXJlIGEgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiBmYWlsZWQgZHVlIHRvIGZvbGlvIHNpemUgdnMuIHRvdGFsIHN3YXAvY2dyb3VwIHN3YXAgZXhoYXVzdGlvbi4gSXQgaW50cm9kdWNlcyBgcGFnZV9jb3VudGVyX21hcmdpbigpYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKClgIGFuZCB1cGRhdGVzIGZvbGlvIHNwbGl0dGluZyBkZWNpc2lvbnMgaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL3NobWVtLmNgLlxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSAoS01TQU4pOiBBbGwgbG9jYWwgdmFyaWFibGVzIChgcmV0YCwgYG1hcmdpbmAsIGBtYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZC5cXG4tIE1lbW9yeSBTYWZldHkgXFx1MDAyNiBMb2dpYyAoS0FTQU4vTG9ja2RlcCk6IEFueSByaXNrcyBpbiB0aGlzIHBhdGNoIHJldm9sdmUgYXJvdW5kIGNncm91cCBzd2FwIGFjY291bnRpbmcsIHBhZ2UgbG9ja2luZywgcmVmY291bnRpbmcsIG9yIGNvbnRyb2wtZmxvdyBsb2dpYyBpbiByZWNsYWltL3dyaXRlb3V0LCB3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IHN0YW5kYXJkIE1NIGFzc2VydGlvbnMsIEtBU0FOLCBhbmQgTG9ja2RlcC5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBzd2FwIGFsbG9jYXRpb24gbG9naWMgYnkgcmVmaW5pbmcgZXJyb3IgcmVwb3J0aW5nIGluIGZvbGlvX2FsbG9jX3N3YXAoKSBhbmQgYWRkaW5nIHBhZ2VfY291bnRlcl9tYXJnaW4oKSBhbmQgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oKSB0byBpbnNwZWN0IGhpZXJhcmNoaWNhbCBzd2FwIG1hcmdpbnMuIFRoaXMgY2hhbmdlcyBob3cgbGFyZ2UgZm9saW9zIGFyZSBzcGxpdCBhbmQgaGFuZGxlZCBkdXJpbmcgc3dhcG91dCBpbiBzaG1lbV93cml0ZW91dCgpIGFuZCBwYWdlIHJlY2xhaW0gaW4gc2hyaW5rX2ZvbGlvX2xpc3QoKSB3aGVuIGdsb2JhbCBvciBtZW1jZyBzd2FwIGxpbWl0cyBhcmUgcmVhY2hlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NTk6NTIuOTAxODE2ODAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk0MjI1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzMTUxNmJkNjYyZjkyODE2YWQ2MzUzN2RlMWVlN2VhZjllOTU3Y2I5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDMwIDA0OjU5OjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXFxuaW5kZXggZDY0OWI2YmJiYzg3MS4uMDdiN2NiMTIyNDljNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxcbkBAIC02OCw2ICs2OCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxcbiBcXHRyZXR1cm4gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2Y291bnRlci1cXHUwMDNldXNhZ2UpO1xcbiB9XFxuIFxcbitsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcik7XFxuIHZvaWQgcGFnZV9jb3VudGVyX2NhbmNlbChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4gdm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbiBib29sIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5pbmRleCAwZjk1M2VkOWM4NjMwLi5hNzJlY2YxMmMwMGRiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5AQCAtNTEwLDYgKzUxMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wXFxuIFxcdF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7XFxuIH1cXG4gXFxuK2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIGV4dGVybiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuICNlbHNlXFxuQEAgLTUyMyw2ICs1MjQsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCxcXG4ge1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRyZXR1cm4gUEFHRV9DT1VOVEVSX01BWDtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIFxcdHJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCA0YTE4ZWU0NTA5YWI2Li45YTM4MDQxMzJjMmViIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC01ODAxLDE1ICs1ODAxLDM1IEBAIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0bG9uZyBucl9zd2FwX3BhZ2VzID0gZ2V0X25yX3N3YXBfcGFnZXMoKTtcXG4gXFxuLVxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgZG9fbWVtc3dfYWNjb3VudCgpKVxcbi1cXHRcXHRyZXR1cm4gbnJfc3dhcF9wYWdlcztcXG4tXFx0Zm9yICg7ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpOyBtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSlcXG4tXFx0XFx0bnJfc3dhcF9wYWdlcyA9IG1pbl90KGxvbmcsIG5yX3N3YXBfcGFnZXMsXFxuLVxcdFxcdFxcdFxcdCAgICAgIFJFQURfT05DRShtZW1jZy1cXHUwMDNlc3dhcC5tYXgpIC1cXG4tXFx0XFx0XFx0XFx0ICAgICAgcGFnZV9jb3VudGVyX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwKSk7XFxuK1xcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFkb19tZW1zd19hY2NvdW50KCkpXFxuK1xcdFxcdG5yX3N3YXBfcGFnZXMgPSBtaW4obnJfc3dhcF9wYWdlcywgcGFnZV9jb3VudGVyX21hcmdpbihcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXApKTtcXG4rXFxuIFxcdHJldHVybiBucl9zd2FwX3BhZ2VzO1xcbiB9XFxuIFxcbisvKipcXG4rICogbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4gLSBnZXQgYSBmb2xpbydzIG1lbWNnIHN3YXAgbWFyZ2luXFxuKyAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtY2cgbWFyZ2luIGlzIHF1ZXJpZWRcXG4rICpcXG4rICogUmV0dXJuOiBSZW1haW5pbmcgY2hhcmdlYWJsZSBwYWdlcyBpbiB0aGUgZm9saW8ncyBtZW1jZyBoaWVyYXJjaHkuXFxuKyAqL1xcbitsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbitcXHRsb25nIG1hcmdpbjtcXG4rXFxuK1xcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgZG9fbWVtc3dfYWNjb3VudCgpIHx8XFxuK1xcdCAgICAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpXFxuK1xcdFxcdHJldHVybiBQQUdFX0NPVU5URVJfTUFYO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcXG4rXFx0bWFyZ2luID0gcGFnZV9jb3VudGVyX21hcmdpbihcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXApO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBtYXJnaW47XFxuK31cXG4rXFxuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmNcXG5pbmRleCA2NjFlMGYyYTUxMjdhLi40NTA1NDNmNGIzMThiIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXFxuKysrIGIvbW0vcGFnZV9jb3VudGVyLmNcXG5AQCAtNDYsNiArNDYsMjYgQEAgc3RhdGljIHZvaWQgcHJvcGFnYXRlX3Byb3RlY3RlZF91c2FnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjLFxcbiBcXHR9XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBwYWdlX2NvdW50ZXJfbWFyZ2luIC0gcmVtYWluaW5nIHVzYWJsZSBzcGFjZSB3aXRoaW4gaGllcmFyY2hpY2FsIGxpbWl0c1xcbisgKiBAY291bnRlcjogY291bnRlclxcbisgKlxcbisgKiBSZXR1cm46IFRoZSBtaW5pbXVtIHZhbHVlIG9mIG1heCBtaW51cyB1c2FnZSBhY3Jvc3MgQGNvdW50ZXIgYW5kIGFsbCBvZlxcbisgKiBpdHMgYW5jZXN0b3JzLiBUaGUgdmFsdWUgbWF5IGJlIG5lZ2F0aXZlIGR1cmluZyBhIGNvbmN1cnJlbnQgY2hhcmdlLlxcbisgKi9cXG4rbG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXFxuK3tcXG4rXFx0bG9uZyBtYXJnaW4gPSBQQUdFX0NPVU5URVJfTUFYO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRsb25nIG0gPSBSRUFEX09OQ0UoY291bnRlci1cXHUwMDNlbWF4KSAtIHBhZ2VfY291bnRlcl9yZWFkKGNvdW50ZXIpO1xcbitcXG4rXFx0XFx0bWFyZ2luID0gbWluKG1hcmdpbiwgbSk7XFxuK1xcdH0gd2hpbGUgKChjb3VudGVyID0gY291bnRlci1cXHUwMDNlcGFyZW50KSk7XFxuK1xcbitcXHRyZXR1cm4gbWFyZ2luO1xcbit9XFxuK1xcbiAvKipcXG4gICogcGFnZV9jb3VudGVyX2NhbmNlbCAtIHRha2UgcGFnZXMgb3V0IG9mIHRoZSBsb2NhbCBjb3VudGVyXFxuICAqIEBjb3VudGVyOiBjb3VudGVyXFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXFxuaW5kZXggZGUxNDRhOWE5NTU4Yi4uODRiOGU5ZTA1OTczYiAxMDA2NDRcXG4tLS0gYS9tbS9zaG1lbS5jXFxuKysrIGIvbW0vc2htZW0uY1xcbkBAIC0xNjEyLDcgKzE2MTIsNyBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XFxuIFxcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuIFxcdHBnb2ZmX3QgaW5kZXg7XFxuLVxcdGludCBucl9wYWdlcztcXG4rXFx0aW50IG5yX3BhZ2VzLCByZXQ7XFxuIFxcdGJvb2wgc3BsaXQgPSBmYWxzZTtcXG4gXFxuIFxcdGlmICgoaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSE1FTV9GX0xPQ0tFRCkgfHwgc2JpbmZvLVxcdTAwM2Vub3N3YXApXFxuQEAgLTE2OTMsNyArMTY5Myw4IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0XFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcXG4rXFx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XFxuK1xcdGlmICghcmV0KSB7XFxuIFxcdFxcdGJvb2wgZmlyc3Rfc3dhcHBlZCA9IHNobWVtX3JlY2FsY19pbm9kZShpbm9kZSwgMCwgbnJfcGFnZXMpO1xcbiBcXHRcXHRpbnQgZXJyb3I7XFxuIFxcbkBAIC0xNzQ2LDcgKzE3NDcsNyBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG4gXFx0XFx0Z290byByZWRpcnR5O1xcbiBcXHR9XFxuLVxcdGlmIChucl9wYWdlcyBcXHUwMDNlIDEpXFxuK1xcdGlmIChucl9wYWdlcyBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgcmV0ID09IC1FMkJJRylcXG4gXFx0XFx0Z290byB0cnlfc3BsaXQ7XFxuIHJlZGlydHk6XFxuIFxcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xcbmluZGV4IDUxZjVhNTI1YmI2MWMuLmRjMGNkMGNjNmY2MjYgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xcbisrKyBiL21tL3N3YXBmaWxlLmNcXG5AQCAtMTczNSw3ICsxNzM1LDkgQEAgc3RhdGljIGludCBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiAgKiBzd2FwIGNhY2hlLlxcbiAgKlxcbiAgKiBDb250ZXh0OiBDYWxsZXIgbmVlZHMgdG8gaG9sZCB0aGUgZm9saW8gbG9jay5cXG4tICogUmV0dXJuOiBXaGV0aGVyIHRoZSBmb2xpbyB3YXMgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUuXFxuKyAqIFJldHVybjogJTAgb24gc3VjY2VzcywgJS1FMkJJRyBpZiBzcGxpdHRpbmcgdGhlIGZvbGlvIG1pZ2h0IGFsbG93IHN3YXBvdXQsXFxuKyAqICUtRU5PU1BDIGlmIG5vIGdsb2JhbCBzd2FwIHNwYWNlIGlzIGF2YWlsYWJsZSwgb3IgJS1FTk9NRU0gaWYgc3BsaXR0aW5nXFxuKyAqIHdvdWxkIG5vdCBoZWxwLlxcbiAgKi9cXG4gaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbkBAIC0xNzQ3LDExICsxNzQ5LDExIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcbiBcXHRpZiAob3JkZXIpIHtcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZCxcXG4tXFx0XFx0ICogdGhlIGNhbGxlciBzaG91bGQgc3BsaXQgdGhlIGZvbGlvIGFuZCB0cnkgYWdhaW4uXFxuK1xcdFxcdCAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQuIENoZWNrIGJlbG93XFxuK1xcdFxcdCAqIHdoZXRoZXIgc3BsaXR0aW5nIGFuZCByZXRyeWluZyBjYW4gbWFrZSBwcm9ncmVzcy5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVEhQX1NXQVApKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuIFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBBbGxvY2F0aW9uIHNpemUgc2hvdWxkIG5ldmVyIGV4Y2VlZCBjbHVzdGVyIHNpemVcXG5AQCAtMTc1OSw3ICsxNzYxLDcgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChzaXplIFxcdTAwM2UgU1dBUEZJTEVfQ0xVU1RFUikge1xcbiBcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoMSk7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC0xNzc1LDEzICsxNzc3LDIzIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdH1cXG4gXFxuIFxcdC8qIE5lZWQgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgYWxsb2NhdGlvbiBmYWlsZWQsIGZvciBNRU1DR19TV0FQX0ZBSUwuICovXFxuLVxcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKVxcbitcXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSkge1xcbiBcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxuK1xcdFxcdGdvdG8gZmFpbGVkO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGZhaWxlZDtcXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZmFpbGVkOlxcbitcXHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4rXFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGZvbGlvKSBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHJldHVybiBvcmRlciA/IC1FMkJJRyA6IC1FTk9NRU07XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggZmRkMTMyOTlhMDRhOS4uNmU3NzBhMDhlMjg4MCAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTEyNTksNiArMTI1OSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0IWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xcbitcXHRcXHRcXHRpbnQgcmV0O1xcbitcXG4gXFx0XFx0XFx0aWYgKCEoc2MtXFx1MDAzZWdmcF9tYXNrIFxcdTAwMjYgX19HRlBfSU8pKVxcbiBcXHRcXHRcXHRcXHRnb3RvIGtlZXBfbG9ja2VkO1xcbiBcXHRcXHRcXHRpZiAoZm9saW9fbWF5YmVfZG1hX3Bpbm5lZChmb2xpbykpXFxuQEAgLTEyNzcsMTEgKzEyNzksMTQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbiBcXHRcXHRcXHRcXHQgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXFxuIFxcdFxcdFxcdFxcdFxcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmIChmb2xpb19hbGxvY19zd2FwKGZvbGlvKSkge1xcbitcXHRcXHRcXHRyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTtcXG4rXFx0XFx0XFx0aWYgKHJldCkge1xcbiBcXHRcXHRcXHRcXHRpbnQgX19tYXliZV91bnVzZWQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XFxuIFxcbiBcXHRcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxcbiBcXHRcXHRcXHRcXHRcXHRnb3RvIGFjdGl2YXRlX2xvY2tlZF9zcGxpdDtcXG4rXFx0XFx0XFx0XFx0aWYgKHJldCAhPSAtRTJCSUcpXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xcbiBcXHRcXHRcXHRcXHQvKiBGYWxsYmFjayB0byBzd2FwIG5vcm1hbCBwYWdlcyAqL1xcbiBcXHRcXHRcXHRcXHRpZiAoc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXFxuIFxcdFxcdFxcdFxcdFxcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo1OTo1My4zOTIwMjgzMTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5ODc1MzAyNzU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlRIUF9TV0FQXCIsXG4gICAgXCJTSE1FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX2FsbG9jX3N3YXBcIixcbiAgICBcIm1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luXCIsXG4gICAgXCJwYWdlX2NvdW50ZXJfbWFyZ2luXCIsXG4gICAgXCJzaG1lbV93cml0ZW91dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IHN3YXAgYWxsb2NhdGlvbiBsb2dpYyBieSByZWZpbmluZyBlcnJvciByZXBvcnRpbmcgaW4gZm9saW9fYWxsb2Nfc3dhcCgpIGFuZCBhZGRpbmcgcGFnZV9jb3VudGVyX21hcmdpbigpIGFuZCBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbigpIHRvIGluc3BlY3QgaGllcmFyY2hpY2FsIHN3YXAgbWFyZ2lucy4gVGhpcyBjaGFuZ2VzIGhvdyBsYXJnZSBmb2xpb3MgYXJlIHNwbGl0IGFuZCBoYW5kbGVkIGR1cmluZyBzd2Fwb3V0IGluIHNobWVtX3dyaXRlb3V0KCkgYW5kIHBhZ2UgcmVjbGFpbSBpbiBzaHJpbmtfZm9saW9fbGlzdCgpIHdoZW4gZ2xvYmFsIG9yIG1lbWNnIHN3YXAgbGltaXRzIGFyZSByZWFjaGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMTUxNmJkNjYyZjkyODE2YWQ2MzUzN2RlMWVlN2VhZjllOTU3Y2I5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMzAgMDQ6NTk6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuaW5kZXggZDY0OWI2YmJiYzg3MS4uMDdiN2NiMTIyNDljNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbkBAIC02OCw2ICs2OCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxuIFx0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXHUwMDI2Y291bnRlci1cdTAwM2V1c2FnZSk7XG4gfVxuIFxuK2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKTtcbiB2b2lkIHBhZ2VfY291bnRlcl9jYW5jZWwoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gdm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIGJvb2wgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCAwZjk1M2VkOWM4NjMwLi5hNzJlY2YxMmMwMGRiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtNTEwLDYgKzUxMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wXG4gXHRfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChpZCwgbnJfcGFnZXMpO1xuIH1cbiBcbitsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGV4dGVybiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiBleHRlcm4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiAjZWxzZVxuQEAgLTUyMyw2ICs1MjQsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCxcbiB7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBQQUdFX0NPVU5URVJfTUFYO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIGdldF9ucl9zd2FwX3BhZ2VzKCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA0YTE4ZWU0NTA5YWI2Li45YTM4MDQxMzJjMmViIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC01ODAxLDE1ICs1ODAxLDM1IEBAIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0bG9uZyBucl9zd2FwX3BhZ2VzID0gZ2V0X25yX3N3YXBfcGFnZXMoKTtcbiBcbi1cdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgZG9fbWVtc3dfYWNjb3VudCgpKVxuLVx0XHRyZXR1cm4gbnJfc3dhcF9wYWdlcztcbi1cdGZvciAoOyAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKTsgbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpXG4tXHRcdG5yX3N3YXBfcGFnZXMgPSBtaW5fdChsb25nLCBucl9zd2FwX3BhZ2VzLFxuLVx0XHRcdFx0ICAgICAgUkVBRF9PTkNFKG1lbWNnLVx1MDAzZXN3YXAubWF4KSAtXG4tXHRcdFx0XHQgICAgICBwYWdlX2NvdW50ZXJfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKSk7XG4rXHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWRvX21lbXN3X2FjY291bnQoKSlcbitcdFx0bnJfc3dhcF9wYWdlcyA9IG1pbihucl9zd2FwX3BhZ2VzLCBwYWdlX2NvdW50ZXJfbWFyZ2luKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApKTtcbitcbiBcdHJldHVybiBucl9zd2FwX3BhZ2VzO1xuIH1cbiBcbisvKipcbisgKiBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbiAtIGdldCBhIGZvbGlvJ3MgbWVtY2cgc3dhcCBtYXJnaW5cbisgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbWNnIG1hcmdpbiBpcyBxdWVyaWVkXG4rICpcbisgKiBSZXR1cm46IFJlbWFpbmluZyBjaGFyZ2VhYmxlIHBhZ2VzIGluIHRoZSBmb2xpbydzIG1lbWNnIGhpZXJhcmNoeS5cbisgKi9cbitsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1x0bG9uZyBtYXJnaW47XG4rXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSB8fFxuK1x0ICAgICFmb2xpb19tZW1jZ19jaGFyZ2VkKGZvbGlvKSlcbitcdFx0cmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbitcdG1hcmdpbiA9IHBhZ2VfY291bnRlcl9tYXJnaW4oXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJldHVybiBtYXJnaW47XG4rfVxuK1xuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuY1xuaW5kZXggNjYxZTBmMmE1MTI3YS4uNDUwNTQzZjRiMzE4YiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXG4rKysgYi9tbS9wYWdlX2NvdW50ZXIuY1xuQEAgLTQ2LDYgKzQ2LDI2IEBAIHN0YXRpYyB2b2lkIHByb3BhZ2F0ZV9wcm90ZWN0ZWRfdXNhZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqYyxcbiBcdH1cbiB9XG4gXG4rLyoqXG4rICogcGFnZV9jb3VudGVyX21hcmdpbiAtIHJlbWFpbmluZyB1c2FibGUgc3BhY2Ugd2l0aGluIGhpZXJhcmNoaWNhbCBsaW1pdHNcbisgKiBAY291bnRlcjogY291bnRlclxuKyAqXG4rICogUmV0dXJuOiBUaGUgbWluaW11bSB2YWx1ZSBvZiBtYXggbWludXMgdXNhZ2UgYWNyb3NzIEBjb3VudGVyIGFuZCBhbGwgb2ZcbisgKiBpdHMgYW5jZXN0b3JzLiBUaGUgdmFsdWUgbWF5IGJlIG5lZ2F0aXZlIGR1cmluZyBhIGNvbmN1cnJlbnQgY2hhcmdlLlxuKyAqL1xuK2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxuK3tcbitcdGxvbmcgbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDtcbitcbitcdGRvIHtcbitcdFx0bG9uZyBtID0gUkVBRF9PTkNFKGNvdW50ZXItXHUwMDNlbWF4KSAtIHBhZ2VfY291bnRlcl9yZWFkKGNvdW50ZXIpO1xuK1xuK1x0XHRtYXJnaW4gPSBtaW4obWFyZ2luLCBtKTtcbitcdH0gd2hpbGUgKChjb3VudGVyID0gY291bnRlci1cdTAwM2VwYXJlbnQpKTtcbitcbitcdHJldHVybiBtYXJnaW47XG4rfVxuK1xuIC8qKlxuICAqIHBhZ2VfY291bnRlcl9jYW5jZWwgLSB0YWtlIHBhZ2VzIG91dCBvZiB0aGUgbG9jYWwgY291bnRlclxuICAqIEBjb3VudGVyOiBjb3VudGVyXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IGRlMTQ0YTlhOTU1OGIuLjg0YjhlOWUwNTk3M2IgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4rKysgYi9tbS9zaG1lbS5jXG5AQCAtMTYxMiw3ICsxNjEyLDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcbiBcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdHBnb2ZmX3QgaW5kZXg7XG4tXHRpbnQgbnJfcGFnZXM7XG4rXHRpbnQgbnJfcGFnZXMsIHJldDtcbiBcdGJvb2wgc3BsaXQgPSBmYWxzZTtcbiBcbiBcdGlmICgoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgU0hNRU1fRl9MT0NLRUQpIHx8IHNiaW5mby1cdTAwM2Vub3N3YXApXG5AQCAtMTY5Myw3ICsxNjkzLDggQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTtcbiBcdH1cbiBcbi1cdGlmICghZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcbitcdHJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pO1xuK1x0aWYgKCFyZXQpIHtcbiBcdFx0Ym9vbCBmaXJzdF9zd2FwcGVkID0gc2htZW1fcmVjYWxjX2lub2RlKGlub2RlLCAwLCBucl9wYWdlcyk7XG4gXHRcdGludCBlcnJvcjtcbiBcbkBAIC0xNzQ2LDcgKzE3NDcsNyBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbiBcdFx0Z290byByZWRpcnR5O1xuIFx0fVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxKVxuK1x0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiByZXQgPT0gLUUyQklHKVxuIFx0XHRnb3RvIHRyeV9zcGxpdDtcbiByZWRpcnR5OlxuIFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDUxZjVhNTI1YmI2MWMuLmRjMGNkMGNjNmY2MjYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMTczNSw3ICsxNzM1LDkgQEAgc3RhdGljIGludCBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuICAqIHN3YXAgY2FjaGUuXG4gICpcbiAgKiBDb250ZXh0OiBDYWxsZXIgbmVlZHMgdG8gaG9sZCB0aGUgZm9saW8gbG9jay5cbi0gKiBSZXR1cm46IFdoZXRoZXIgdGhlIGZvbGlvIHdhcyBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZS5cbisgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsICUtRTJCSUcgaWYgc3BsaXR0aW5nIHRoZSBmb2xpbyBtaWdodCBhbGxvdyBzd2Fwb3V0LFxuKyAqICUtRU5PU1BDIGlmIG5vIGdsb2JhbCBzd2FwIHNwYWNlIGlzIGF2YWlsYWJsZSwgb3IgJS1FTk9NRU0gaWYgc3BsaXR0aW5nXG4rICogd291bGQgbm90IGhlbHAuXG4gICovXG4gaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG5AQCAtMTc0NywxMSArMTc0OSwxMSBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIFx0aWYgKG9yZGVyKSB7XG4gXHRcdC8qXG4tXHRcdCAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQsXG4tXHRcdCAqIHRoZSBjYWxsZXIgc2hvdWxkIHNwbGl0IHRoZSBmb2xpbyBhbmQgdHJ5IGFnYWluLlxuK1x0XHQgKiBSZWplY3QgbGFyZ2UgYWxsb2NhdGlvbiB3aGVuIFRIUF9TV0FQIGlzIGRpc2FibGVkLiBDaGVjayBiZWxvd1xuK1x0XHQgKiB3aGV0aGVyIHNwbGl0dGluZyBhbmQgcmV0cnlpbmcgY2FuIG1ha2UgcHJvZ3Jlc3MuXG4gXHRcdCAqL1xuIFx0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RIUF9TV0FQKSlcbi1cdFx0XHRyZXR1cm4gLUVBR0FJTjtcbitcdFx0XHRnb3RvIGZhaWxlZDtcbiBcbiBcdFx0LypcbiBcdFx0ICogQWxsb2NhdGlvbiBzaXplIHNob3VsZCBuZXZlciBleGNlZWQgY2x1c3RlciBzaXplXG5AQCAtMTc1OSw3ICsxNzYxLDcgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0ICovXG4gXHRcdGlmIChzaXplIFx1MDAzZSBTV0FQRklMRV9DTFVTVEVSKSB7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFKDEpO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gZmFpbGVkO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMTc3NSwxMyArMTc3NywyMyBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0fVxuIFxuIFx0LyogTmVlZCB0byBjYWxsIHRoaXMgZXZlbiBpZiBhbGxvY2F0aW9uIGZhaWxlZCwgZm9yIE1FTUNHX1NXQVBfRkFJTC4gKi9cbi1cdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKVxuK1x0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpIHtcbiBcdFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xuK1x0XHRnb3RvIGZhaWxlZDtcbitcdH1cbiBcbiBcdGlmICh1bmxpa2VseSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdGdvdG8gZmFpbGVkO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZmFpbGVkOlxuK1x0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gLUVOT1NQQztcbitcdGlmIChtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihmb2xpbykgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJldHVybiBvcmRlciA/IC1FMkJJRyA6IC1FTk9NRU07XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGZkZDEzMjk5YTA0YTkuLjZlNzcwYTA4ZTI4ODAgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0xMjU5LDYgKzEyNTksOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdCAqL1xuIFx0XHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcbitcdFx0XHRpbnQgcmV0O1xuK1xuIFx0XHRcdGlmICghKHNjLVx1MDAzZWdmcF9tYXNrIFx1MDAyNiBfX0dGUF9JTykpXG4gXHRcdFx0XHRnb3RvIGtlZXBfbG9ja2VkO1xuIFx0XHRcdGlmIChmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKSlcbkBAIC0xMjc3LDExICsxMjc5LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbiBcdFx0XHRcdCAgICBzcGxpdF9mb2xpb190b19saXN0KGZvbGlvLCBmb2xpb19saXN0KSlcbiBcdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWQ7XG4gXHRcdFx0fVxuLVx0XHRcdGlmIChmb2xpb19hbGxvY19zd2FwKGZvbGlvKSkge1xuK1x0XHRcdHJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pO1xuK1x0XHRcdGlmIChyZXQpIHtcbiBcdFx0XHRcdGludCBfX21heWJlX3VudXNlZCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbiBcbiBcdFx0XHRcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkX3NwbGl0O1xuK1x0XHRcdFx0aWYgKHJldCAhPSAtRTJCSUcpXG4rXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuIFx0XHRcdFx0LyogRmFsbGJhY2sgdG8gc3dhcCBub3JtYWwgcGFnZXMgKi9cbiBcdFx0XHRcdGlmIChzcGxpdF9mb2xpb190b19saXN0KGZvbGlvLCBmb2xpb19saXN0KSlcbiBcdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo1OTo1My4zOTIwMjk4MzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzE3NjkzMTM1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhlIHBhdGNoIHRvdWNoZXMgYSBidW5jaCBvZiBrZXkgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXM6IGBwYWdlX2NvdW50ZXIuaGAsIGBzd2FwLmhgLCBgbWVtY29udHJvbC5jYCwgYHBhZ2VfY291bnRlci5jYCwgYHNobWVtLmNgLCBgc3dhcGZpbGUuY2AsIGFuZCBgdm1zY2FuLmNgLiBUaGF0IGdldHMgbXkgYXR0ZW50aW9uIGltbWVkaWF0ZWx5OyBhbnl0aGluZyB0b3VjaGluZyB0aGUgY29yZSBNTSBpcyBhbHdheXMgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjaGFuZ2VzIHRoZW1zZWx2ZXMuIFRoZXJlJ3MgYSBuZXcgZnVuY3Rpb24sIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgd2hpY2ggbG9va3MgbGlrZSBpdCBjYWxjdWxhdGVzIHRoZSByZW1haW5pbmcgdXNhYmxlIHNwYWNlIHdpdGhpbiBoaWVyYXJjaGljYWwgbGltaXRzLiBJdCdzIHVzZWQgaW4gYSByZWZhY3RvcmVkIGBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzYCwgYW5kIGFsc28gdGhlcmUncyBhIG5ldyBmdW5jdGlvbiBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLiBUaG9zZSBzZWVtIHJlbGF0ZWQgdG8gbWVtY2cgc3dhcCBhY2NvdW50aW5nLiBUaGVuIEkgc2VlIHRoYXQgYHNobWVtX3dyaXRlb3V0YCBub3cgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGZvbGlvX2FsbG9jX3N3YXBgLCBhbmQgcGFydGljdWxhcmx5IHRoZSBjYXNlIG9mIGBucl9wYWdlcyBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgcmV0ID09IC1FMkJJR2AuXG5cbmBmb2xpb19hbGxvY19zd2FwYCBzZWVtcyB0byBiZSB0aGUgYmlnIGNoYW5nZSwgYWx0ZXJpbmcgaXRzIHJldHVybiB2YWx1ZXMgdG8gc2lnbmFsIG1vcmUgZ3JhbnVsYXIgcmVhc29ucyBmb3IgZmFpbHVyZS4gSXQncyBub3QganVzdCBzdWNjZXNzL2ZhaWx1cmUgYW55bW9yZTsgbm93IGl0IHJldHVybnMgc3BlY2lmaWMgZXJyb3IgY29kZXMgbGlrZSBgLUUyQklHYCwgYC1FTk9TUENgLCBhbmQgYC1FTk9NRU1gLiBUaGUgbG9naWMgd2l0aGluIGBmb2xpb19hbGxvY19zd2FwYCBpdHNlbGYgaGFzIGJlZW4gYmVlZmVkIHVwIHRvIGNoZWNrIHN3YXAgbWFyZ2lucyBhbmQgbWVtY2cgbWFyZ2lucy4gQW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgaXMgbm93IGNoZWNraW5nIGByZXRgIGZyb20gYGZvbGlvX2FsbG9jX3N3YXBgIGFzIHdlbGwuXG5cblRoZSBpbXBsaWNhdGlvbnMgYXJlIGNsZWFyOiB0aGlzIHBhdGNoIGlzIGRlZXBseSBpbnRlcnR3aW5lZCB3aXRoIHN3YXAgYWxsb2NhdGlvbiwgdGhlIHNwbGl0dGluZyBvZiBsYXJnZSBmb2xpb3MsIG1lbWNnIHN3YXAgYWNjb3VudGluZyBhbmQgdGhyb3R0bGluZywgc2htZW0gc3dhcG91dCwgYW5kIGV2ZW4gcGFnZSByZWNsYWltIHRocm91Z2ggYHNocmlua19mb2xpb19saXN0YC4gVGhpcyBpcyBhbGwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgaW5mbHVlbmNpbmcgZXhlY3V0aW9uIGZsb3cgaW4gcmVzcG9uc2UgdG8gbWVtb3J5IHByZXNzdXJlcyBhbmQsIGltcG9ydGFudGx5LCBhbHRlcmluZyBlcnJvciBjb2Rlcy5cblxuSXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhpcyBpcyBjcnVjaWFsIG1tIGxvZ2ljIGRlYWxpbmcgd2l0aCBzd2Fwb3V0LCBzcGxpdHRpbmcgb2YgZm9saW9zIHVuZGVyIHN3YXAgcHJlc3N1cmUsIGFuZCBtZW1jZyBsaW1pdHMuIEl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCAoUUVNVSwgc3l6a2FsbGVyKS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gY29udHJvbCBmbG93IGFuZCByZXR1cm4gY29kZXMgaW4gdGhlIGtlcm5lbCBhcmUgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyB0aGF0IGZ1enppbmcgaXMgZGVzaWduZWQgdG8gdW5jb3ZlciBzdWJ0bGUgZXJyb3JzIG9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLlxuXG5UaGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3MgYW5kIGZvY3VzIG15IHN5bWJvbCBhbmFseXNpcyBhcHByb3ByaWF0ZWx5LiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBhbmQgaWRlbnRpZnkgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIG9yIGFmZmVjdCB0aGlzIGNvZGUsIHNvIEkgY2FuIHRhcmdldCB0aGUgZnV6emluZyBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg1MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA1OjAwOjEwLjU2ODk2NDgxNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTI3MDc5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19hbGxvY19zd2FwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9MTYwNz1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zaG1lbS5jLTE2OTUtXFxubW0vc2htZW0uYzoxNjk2OlxcdHJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pO1xcbm1tL3NobWVtLmMtMTY5Ny1cXHRpZiAoIXJldCkge1xcbi0tXFxubW0vc3dhcC5oPTIyNT1leHRlcm4gaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCk7XFxuLS1cXG5tbS9zd2FwLmgtMjMzLSAqXFxubW0vc3dhcC5oOjIzNDogKiBmb2xpb19hbGxvY19zd2FwKCk6IHRoZSBlbnRyeSBwb2ludCBmb3IgYSBmb2xpbyB0byBiZSBzd2FwcGVkXFxubW0vc3dhcC5oLTIzNS0gKiBvdXQuIEl0IGFsbG9jYXRlcyBzd2FwIHNsb3RzIGFuZCBwaW5zIHRoZSBzbG90cyB3aXRoIHN3YXAgY2FjaGUuXFxuLS1cXG5tbS9zd2FwLmgtMjQ1LSAqL1xcbm1tL3N3YXAuaDoyNDY6aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vc3dhcC5oLTI0Ny1pbnQgZm9saW9fZHVwX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbi0tXFxubW0vc3dhcC5oPTM2MD1zdGF0aWMgaW5saW5lIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpfX3N3YXBfZW50cnlfdG9faW5mbyhzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL3N3YXAuaC0zNjQtXFxubW0vc3dhcC5oOjM2NTpzdGF0aWMgaW5saW5lIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vc3dhcC5oLTM2Ni17XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTkwPXN0YXRpYyBQTElTVF9IRUFEKHN3YXBfYWN0aXZlX2hlYWQpO1xcbi0tXFxubW0vc3dhcGZpbGUuYy05NC0gKiBwcm90ZWN0ZWQgd2l0aCBzd2FwX2F2YWlsX2xvY2ssIG9yZGVyZWQgYnkgcHJpb3JpdHkuXFxubW0vc3dhcGZpbGUuYzo5NTogKiBUaGlzIGlzIHVzZWQgYnkgZm9saW9fYWxsb2Nfc3dhcCgpIGluc3RlYWQgb2Ygc3dhcF9hY3RpdmVfaGVhZFxcbm1tL3N3YXBmaWxlLmMtOTYtICogYmVjYXVzZSBzd2FwX2FjdGl2ZV9oZWFkIGluY2x1ZGVzIGFsbCBzd2FwX2luZm9fc3RydWN0cyxcXG5tbS9zd2FwZmlsZS5jOjk3OiAqIGJ1dCBmb2xpb19hbGxvY19zd2FwKCkgZG9lc24ndCBuZWVkIHRvIGxvb2sgYXQgZnVsbCBvbmVzLlxcbm1tL3N3YXBmaWxlLmMtOTgtICogVGhpcyB1c2VzIGl0cyBvd24gbG9jayBpbnN0ZWFkIG9mIHN3YXBfbG9jayBiZWNhdXNlIHdoZW4gYVxcbi0tXFxubW0vc3dhcGZpbGUuYz05MTE9c3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTkyNC1cXHQvKlxcbm1tL3N3YXBmaWxlLmM6OTI1OlxcdCAqIEFsbCBtbSBzd2FwIGFsbG9jYXRpb24gc3RhcnRzIHdpdGggYSBmb2xpbyAoZm9saW9fYWxsb2Nfc3dhcCksXFxubW0vc3dhcGZpbGUuYy05MjYtXFx0ICogaXQncyBhbHNvIHRoZSBvbmx5IGFsbG9jYXRpb24gcGF0aCBmb3IgbGFyZ2Ugb3JkZXJzIGFsbG9jYXRpb24uXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE2OTU9c3RhdGljIGludCBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xNzMwLS8qKlxcbm1tL3N3YXBmaWxlLmM6MTczMTogKiBmb2xpb19hbGxvY19zd2FwIC0gYWxsb2NhdGUgc3dhcCBzcGFjZSBmb3IgYSBmb2xpb1xcbm1tL3N3YXBmaWxlLmMtMTczMi0gKiBAZm9saW86IGZvbGlvIHdlIHdhbnQgdG8gbW92ZSB0byBzd2FwXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE3NDEtICovXFxubW0vc3dhcGZpbGUuYzoxNzQyOmludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vc3dhcGZpbGUuYy0xNzQzLXtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjgwOT1zdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjg5Mi1cXHQgKiBhbmQgZXZlbiBzaG1lbV93cml0ZW91dCgpIGNvdWxkIGhhdmUgYmVlbiBwcmVlbXB0ZWQgYWZ0ZXJcXG5tbS9zd2FwZmlsZS5jOjI4OTM6XFx0ICogZm9saW9fYWxsb2Nfc3dhcCgpLCB0ZW1wb3JhcmlseSBoaWRpbmcgdGhhdCBzd2FwLiAgSXQncyBlYXN5XFxubW0vc3dhcGZpbGUuYy0yODk0LVxcdCAqIGFuZCByb2J1c3QgKHRob3VnaCBjcHUtaW50ZW5zaXZlKSBqdXN0IHRvIGtlZXAgcmV0cnlpbmcuXFxuLS1cXG5tbS92bXNjYW4uYz0xMDU4PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTEyODEtXFx0XFx0XFx0fVxcbm1tL3Ztc2Nhbi5jOjEyODI6XFx0XFx0XFx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XFxubW0vdm1zY2FuLmMtMTI4My1cXHRcXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5tbS92bXNjYW4uYy0xMzAwLVxcdFxcdFxcdFxcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX1NXUE9VVF9GQUxMQkFDSyk7XFxubW0vdm1zY2FuLmM6MTMwMTpcXHRcXHRcXHRcXHRpZiAoZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpXFxubW0vdm1zY2FuLmMtMTMwMi1cXHRcXHRcXHRcXHRcXHRnb3RvIGFjdGl2YXRlX2xvY2tlZF9zcGxpdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDU6MDA6MTAuNjM4MjQ1MDU5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY5OTc2MTY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIFN3YXAgRm9saW8gQWxsb2NhdGlvbiBhbmQgTWVtY2cgSW50ZXJhY3Rpb24qKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZW5hYmxpbmcgY29uZGl0aW9ucyBmb3IgYGZvbGlvX2FsbG9jX3N3YXBgIGFuZCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBrbm93IHRoZXNlIGFyZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBzd2FwcGluZywgcGFydGljdWxhcmx5IGluIGNvbmp1bmN0aW9uIHdpdGggbWVtb3J5IGNncm91cHMuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIHN3YXAgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGhlYWRlciBmaWxlcy4gTGV0J3Mgc2VlLi4uIEknbGwgY2hlY2sgYGluY2x1ZGUvbGludXgvc3dhcC5oYCBmaXJzdDsgb2Z0ZW4gdGhlIHB1YmxpYy1mYWNpbmcgZGVmaW5pdGlvbnMgYW5kIG1hY3JvcyBhcmUgaG91c2VkIHRoZXJlLiBJZiB0aGF0J3Mgbm90IHlpZWxkaW5nIHRoZSByaWdodCBjbHVlcywgSSdsbCBzd2l0Y2ggb3ZlciB0byBgbW0vc3dhcC5oYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgbG93ZXItbGV2ZWwgaW1wbGVtZW50YXRpb24gZGV0YWlscywgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgcGVyaGFwcyBtb3JlIG51YW5jZWQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMgcmVsYXRlZCB0byBlbmFibGluZyB0aGVzZSBmZWF0dXJlcy4gS25vd2luZyB0aGUga2VybmVsJ3Mgc291cmNlIGxheW91dCBzbyB3ZWxsLCBJJ20gY29uZmlkZW50IEknbGwgcGlucG9pbnQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHF1aWNrbHkuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aG9zZSBmaWxlcyBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscyFcblxuXG4iLCJJbnB1dFRva2VucyI6NzEwMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA1OjAwOjE3LjMzODAwOTEyN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc3dhcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbiA1MDE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDUwMjpcXHRcXHRyZXR1cm4gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbyk7XFxuIDUwMzpcXHR9XFxuIDUwNDpcXHRcXG4gNTA1OlxcdGV4dGVybiB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpO1xcbiA1MDY6XFx0c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbiA1MDc6XFx0e1xcbiA1MDg6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gNTA5OlxcdFxcdFxcdHJldHVybjtcXG4gNTEwOlxcdFxcdF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7XFxuIDUxMTpcXHR9XFxuIDUxMjpcXHRcXG4gNTEzOlxcdGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIDUxNDpcXHRleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuIDUxNTpcXHRleHRlcm4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gNTE2OlxcdCNlbHNlXFxuIDUxNzpcXHRzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiA1MTg6XFx0e1xcbiA1MTk6XFx0XFx0cmV0dXJuIDA7XFxuIDUyMDpcXHR9XFxuIDUyMTpcXHRcXG4gNTIyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXFxuIDUyMzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbiA1MjQ6XFx0e1xcbiA1MjU6XFx0fVxcbiA1MjY6XFx0XFxuIDUyNzpcXHRzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gNTI4OlxcdHtcXG4gNTI5OlxcdFxcdHJldHVybiBQQUdFX0NPVU5URVJfTUFYO1xcbiA1MzA6XFx0fVxcbiA1MzE6XFx0XFxuIDUzMjpcXHRzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIDUzMzpcXHR7XFxuIDUzNDpcXHRcXHRyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTtcXG4gNTM1OlxcdH1cXG4gNTM2OlxcdFxcbiA1Mzc6XFx0c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDUzODpcXHR7XFxuIDUzOTpcXHRcXHRyZXR1cm4gdm1fc3dhcF9mdWxsKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA1OjAwOjE3LjMzODEwNjcwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3OTA0ODIzNzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRha2luZyBhIGxvb2sgYXQgbGluZSA1MDAtaXNoIG9mIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBuZXJ2b3VzIHN5c3RlbSBmb3IgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBzd2FwcGluZywgc28gSSBoYXZlIGEgaHVuY2ggdGhhdCBzb21ldGhpbmcgaW50ZXJlc3Rpbmcgd2lsbCBiZSB0aGVyZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byBzd2FwIGVudHJ5IG1hbmFnZW1lbnQsIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucywgb3IgcGVyaGFwcyBzb21lIGtleSBmdW5jdGlvbiBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHN3YXAgaW4vb3V0IG9wZXJhdGlvbnMuIEl0IGNvdWxkIGJlIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBzd2FwIGNhY2hlIGl0c2VsZi4gT3IgbWF5YmUgYW4gaW50ZXJlc3RpbmcgZGVmaW5pdGlvbiBvZiBzb21lIHNvcnQuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgZ29vZGllcyBhd2FpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDU6MDA6MzUuMjQyOTMyNTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3N3YXAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzA6XFx0XFxuIDQ3MTpcXHRzdGF0aWMgaW5saW5lIGludCBhZGRfc3dhcF9leHRlbnQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcXG4gNDcyOlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzdGFydF9wYWdlLFxcbiA0NzM6XFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzZWN0b3JfdCBzdGFydF9ibG9jaylcXG4gNDc0OlxcdHtcXG4gNDc1OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NzY6XFx0fVxcbiA0Nzc6XFx0I2VuZGlmIC8qIENPTkZJR19TV0FQICovXFxuIDQ3ODpcXHQjaWZkZWYgQ09ORklHX01FTUNHXFxuIDQ3OTpcXHR2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xcbiA0ODA6XFx0I2VuZGlmXFxuIDQ4MTpcXHRcXG4gNDgyOlxcdCNpZiBkZWZpbmVkKENPTkZJR19TV0FQKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQkxLX0NHUk9VUClcXG4gNDgzOlxcdHZvaWQgX19mb2xpb190aHJvdHRsZV9zd2FwcmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApO1xcbiA0ODQ6XFx0c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4gNDg1OlxcdHtcXG4gNDg2OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIDQ4NzpcXHRcXHRcXHRyZXR1cm47XFxuIDQ4ODpcXHRcXHRfX2ZvbGlvX3Rocm90dGxlX3N3YXByYXRlKGZvbGlvLCBnZnApO1xcbiA0ODk6XFx0fVxcbiA0OTA6XFx0I2Vsc2VcXG4gNDkxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb190aHJvdHRsZV9zd2FwcmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxuIDQ5MjpcXHR7XFxuIDQ5MzpcXHR9XFxuIDQ5NDpcXHQjZW5kaWZcXG4gNDk1OlxcdFxcbiA0OTY6XFx0I2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TV0FQKVxcbiA0OTc6XFx0aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIDQ5ODpcXHRzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiA0OTk6XFx0e1xcbiA1MDA6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gNTAxOlxcdFxcdFxcdHJldHVybiAwO1xcbiA1MDI6XFx0XFx0cmV0dXJuIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pO1xcbiA1MDM6XFx0fVxcbiA1MDQ6XFx0XFxuIDUwNTpcXHRleHRlcm4gdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKTtcXG4gNTA2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4gNTA3OlxcdHtcXG4gNTA4OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIDUwOTpcXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA1OjAwOjM1LjI0MzAxMjE4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQzMDgxMzE3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZyBvcHRpb25zIOKAkyBsZXQncyBzZWUgaWYgSSdtIG9uIHRoZSByaWdodCB0cmFjayBoZXJlLi4uXG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlOiBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGl0J3MgY2xlYXIgdGhhdCBgQ09ORklHX01FTUNHYCAobWVtb3J5IGNncm91cHMpIGFuZCBgQ09ORklHX1NXQVBgIGFyZSBvYnZpb3VzbHkgZnVuZGFtZW50YWwuIEdvdHRhIGdldCB0aG9zZSByaWdodCB0byBoYXZlIGEgdXNhYmxlIHN5c3RlbSEgQnV0LCBJJ20gYWxyZWFkeSB0aGlua2luZyBhaGVhZCwgYW5kIHdhbnQgdG8gY29uc2lkZXIgaG93IHRvIG9wdGltaXplIHN3YXBwaW5nIGFuZCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLiBXaGF0J3MgdGhlIHJlbGF0aW9uc2hpcCwgc3BlY2lmaWNhbGx5LCBiZXR3ZWVuIGBDT05GSUdfVEhQX1NXQVBgIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYD8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgaGF2aW5nIG9uZSB3aXRob3V0IHRoZSBvdGhlciBtYWtlcyBzZW5zZSwgb3IgaWYgdGhlaXIgaW50ZXJwbGF5IGlzIGVzc2VudGlhbCB0byBnZXQgdGhlIHN5c3RlbSBiZWhhdmluZyBhcyBJIGV4cGVjdC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhwbG9yZSB0aGVpciBpbnRlcmFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkwOCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDU6MDA6NDkuNTUxMTQ2MTE1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODQ0MjExMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRIUF9TV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9OTY0PWVuZGNob2ljZVxcbm1tL0tjb25maWctOTY1LVxcbm1tL0tjb25maWc6OTY2OmNvbmZpZyBUSFBfU1dBUFxcbm1tL0tjb25maWctOTY3LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDU6MDA6NDkuOTM1NTc1NjI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNzEwMDQxMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIHplcm8gaW4gb24gYG1tL0tjb25maWdgLiBJJ3ZlIGdvdCBhIGh1bmNoIGFib3V0IHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGxpbmUgOTY2IGluIGBtbS9LY29uZmlnYCBpcyBvZnRlbiBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgd2hlbiBJJ20gY2hhc2luZyBzb21ldGhpbmcgc3BlY2lmaWMuIENvdWxkIGJlIGEgZmVhdHVyZSBmbGFnLCBhIGRlcGVuZGVuY3ksIG9yIGEgZGVmYXVsdCBzZXR0aW5nIEknbSB0cnlpbmcgdG8gdHJhY2UuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiB0aGVyZSBhbmQgc2VlIHdoYXQgaXMgYXZhaWxhYmxlIHdpdGhpbiB0aGF0IGxpbmUgb2YgY29kZS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBhcmVhIG9mIHRoZSBrZXJuZWwgY29uZmlnIGluIG1vcmUgZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjM2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDU6MDE6MjAuNjQ1NjE4ODcxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk1NTpcXHRcXHQgIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbnMuXFxuIDk1NjpcXHRcXG4gOTU3OlxcdFxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbiA5NTg6XFx0XFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbiA5NTk6XFx0XFx0aGVscFxcbiA5NjA6XFx0XFx0ICBFbmFibGUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBmb3IgdGhlIHRtcGZzIG1vdW50IGV4Y2x1c2l2ZWx5IHdoZW5cXG4gOTYxOlxcdFxcdCAgYXBwbGljYXRpb25zIHN1cHBseSB0aGUgbWFkdmlzZShNQURWX0hVR0VQQUdFKSBoaW50LlxcbiA5NjI6XFx0XFx0ICBUaGlzIGVuc3VyZXMgdGhhdCBodWdlcGFnZXMgYXJlIHVzZWQgb25seSBpbiByZXNwb25zZSB0byBleHBsaWNpdFxcbiA5NjM6XFx0XFx0ICByZXF1ZXN0cyBmcm9tIGFwcGxpY2F0aW9ucy5cXG4gOTY0OlxcdGVuZGNob2ljZVxcbiA5NjU6XFx0XFxuIDk2NjpcXHRjb25maWcgVEhQX1NXQVBcXG4gOTY3OlxcdFxcdGRlZl9ib29sIHlcXG4gOTY4OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9XQU5UU19USFBfU1dBUCBcXHUwMDI2XFx1MDAyNiBTV0FQIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuIDk2OTpcXHRcXHRoZWxwXFxuIDk3MDpcXHRcXHQgIFN3YXAgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBpbiBvbmUgcGllY2UsIHdpdGhvdXQgc3BsaXR0aW5nLlxcbiA5NzE6XFx0XFx0ICBYWFg6IEZvciBub3csIHN3YXAgY2x1c3RlciBiYWNraW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZVxcbiA5NzI6XFx0XFx0ICB3aWxsIGJlIHNwbGl0IGFmdGVyIHN3YXBvdXQuXFxuIDk3MzpcXHRcXG4gOTc0OlxcdFxcdCAgRm9yIHNlbGVjdGlvbiBieSBhcmNoaXRlY3R1cmVzIHdpdGggcmVhc29uYWJsZSBUSFAgc2l6ZXMuXFxuIDk3NTpcXHRcXG4gOTc2OlxcdGNvbmZpZyBOT19QQUdFX01BUENPVU5UXFxuIDk3NzpcXHRcXHRib29sIFxcXCJObyBwZXItcGFnZSBtYXBjb3VudCAoRVhQRVJJTUVOVEFMKVxcXCJcXG4gOTc4OlxcdFxcdGhlbHBcXG4gOTc5OlxcdFxcdCAgRG8gbm90IG1haW50YWluIHBlci1wYWdlIG1hcGNvdW50cyBmb3IgcGFnZXMgcGFydCBvZiBsYXJnZXJcXG4gOTgwOlxcdFxcdCAgYWxsb2NhdGlvbnMsIHN1Y2ggYXMgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcy5cXG4gOTgxOlxcdFxcbiA5ODI6XFx0XFx0ICBXaGVuIHRoaXMgY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkLCBzb21lIGludGVyZmFjZXMgdGhhdCByZWxpZWQgb25cXG4gOTgzOlxcdFxcdCAgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIHJlbHkgb24gbGVzcy1wcmVjaXNlIHBlci1hbGxvY2F0aW9uIGluZm9ybWF0aW9uXFxuIDk4NDpcXHRcXHQgIGluc3RlYWQ6IGZvciBleGFtcGxlLCB1c2luZyB0aGUgYXZlcmFnZSBwZXItcGFnZSBtYXBjb3VudCBpbiBzdWNoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA1OjAxOjIwLjY0NTc0OTU3MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjg5OTk0Nzg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3dhcCBhbmQgTWVtb3J5IE1hbmFnZW1lbnQgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBhbmQgc3dhcC4gRmlyc3QgdGhpbmdzIGZpcnN0OiBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19TV0FQYCBpbiBLY29uZmlnLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQuIEFuZCB3aGlsZSBJJ20gYXQgaXQsIEkgc2hvdWxkIHNlZSBpZiBgQ09ORklHX1NITUVNYCBoYXMgYW55IGJlYXJpbmcgb24gdGhpcy5cblxuTmV4dCwgSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMuIEhlcmUncyB3aGF0IEkndmUgZ290OlxuXG4xLiAgYHBhZ2VfY291bnRlcl9tYXJnaW5gIGluIGBtbS9wYWdlX2NvdW50ZXIuY2BcbjIuICBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gIGluIGBtbS9tZW1jb250cm9sLmNgXG4zLiAgYG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXNgIGluIGBtbS9tZW1jb250cm9sLmNgXG40LiAgYGZvbGlvX2FsbG9jX3N3YXBgIGluIGBtbS9zd2FwZmlsZS5jYFxuNS4gIGBzaG1lbV93cml0ZW91dGAgaW4gYG1tL3NobWVtLmNgXG42LiAgYHNocmlua19mb2xpb19saXN0YCBpbiBgbW0vdm1zY2FuLmNgXG5cblJpZ2h0LCBgc2hyaW5rX2ZvbGlvX2xpc3RgIGlzIHN0YXRpYywgd2hpY2ggaXMgZ29vZCB0byBrbm93LCBidXQgdGhlIG90aGVycyBsb29rIGludGVyZXN0aW5nLiBUaGV5J3JlIG5vbi1zdGF0aWMsIHNvIHRoZSBzY29wZSBhbmQgdmlzaWJpbGl0eSBhcmUgYSBiaXQgZGlmZmVyZW50LCBwb3RlbnRpYWxseSBpbmRpY2F0aW5nIG1vcmUgaW1wb3J0YW50IEFQSSBlbnRyeXBvaW50cy5cblxuTm93LCB0byBuYWlsIGRvd24gdGhlIGltcG9ydGFudCBBUEkgZW50cnlwb2ludHMgZm9yIEZvY3VzU3ltYm9scywgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBub24taG90LXBhdGgsIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnQgZnVuY3Rpb25zOiBgZm9saW9fYWxsb2Nfc3dhcGAsIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYW5kIGBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uLlxuXG5BbmQgZmluYWxseSwgSSdsbCBkb3VibGUtY2hlY2sgYHNobWVtX3dyaXRlb3V0YCB0byBzZWUgaWYgaXQncyBzdGF0aWMgb3IgZXhwb3J0ZWQuIFRoYXQgZGV0YWlsIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgYW5kIHVzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkwOSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA1OjAxOjU3LjU0NTcwMDY3NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1NjQ1Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtX3dyaXRlb3V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9NDc9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc2htX21udCBfX3JvX2FmdGVyX2luaXQ7XFxuLS1cXG5tbS9zaG1lbS5jLTEwMS0vKlxcbm1tL3NobWVtLmM6MTAyOiAqIHNobWVtX2ZhbGxvY2F0ZSBjb21tdW5pY2F0ZXMgd2l0aCBzaG1lbV9mYXVsdCBvciBzaG1lbV93cml0ZW91dCB2aWFcXG5tbS9zaG1lbS5jLTEwMy0gKiBpbm9kZS1cXHUwMDNlaV9wcml2YXRlICh3aXRoIGlfcndzZW0gbWFraW5nIHN1cmUgdGhhdCBpdCBoYXMgb25seSBvbmUgdXNlciBhdFxcbi0tXFxubW0vc2htZW0uYz00MTQ9c3RhdGljIHZvaWQgc2htZW1fZnJlZV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzaXplX3QgZnJlZWRfaXNwYWNlKVxcbi0tXFxubW0vc2htZW0uYy00MzUtICpcXG5tbS9zaG1lbS5jOjQzNjogKiBSZXR1cm46IHRydWUgaWYgc3dhcHBlZCB3YXMgaW5jcmVtZW50ZWQgZnJvbSAwLCBmb3Igc2htZW1fd3JpdGVvdXQoKS5cXG5tbS9zaG1lbS5jLTQzNy0gKi9cXG5tbS9zaG1lbS5jPTQzOD1ib29sIHNobWVtX3JlY2FsY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIGFsbG9jZWQsIGxvbmcgc3dhcHBlZClcXG4tLVxcbm1tL3NobWVtLmMtNDUxLVxcdCAqIGFmdGVyIGlfbWFwcGluZy1cXHUwMDNlbnJwYWdlcyBoYXMgYWxyZWFkeSBiZWVuIGFkanVzdGVkICh1cCBvciBkb3duKSxcXG5tbS9zaG1lbS5jOjQ1MjpcXHQgKiBzaG1lbV93cml0ZW91dCgpIGhhcyB0byByYWlzZSBzd2FwcGVkIGJlZm9yZSBucnBhZ2VzIGlzIGxvd2VyZWQgLVxcbm1tL3NobWVtLmMtNDUzLVxcdCAqIHRvIHN0b3AgYSByYWNpbmcgc2htZW1fcmVjYWxjX2lub2RlKCkgZnJvbSB0aGlua2luZyB0aGF0IGEgcGFnZSBoYXNcXG4tLVxcbm1tL3NobWVtLmM9MTU1Nj1pbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXFxuLS1cXG5tbS9zaG1lbS5jLTE1OTktLyoqXFxubW0vc2htZW0uYzoxNjAwOiAqIHNobWVtX3dyaXRlb3V0IC0gV3JpdGUgdGhlIGZvbGlvIHRvIHN3YXBcXG5tbS9zaG1lbS5jLTE2MDEtICogQGN0eDogc3dhcCBJL08gY29udGV4dFxcbi0tXFxubW0vc2htZW0uYy0xNjA2LSAqL1xcbm1tL3NobWVtLmM6MTYwNzppbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vc2htZW0uYy0xNjA4LVxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuLS1cXG5tbS9zaG1lbS5jLTE3NDMtXFx0XFx0ICogYnV0IEknbSBhIGxpdHRsZSBuZXJ2b3VzIGFib3V0IGxldHRpbmcgdGhpcyBmb2xpbyBvdXQgb2ZcXG5tbS9zaG1lbS5jOjE3NDQ6XFx0XFx0ICogc2htZW1fd3JpdGVvdXQoKSBpbiBhIGh5YnJpZCBoYWxmLXRtcGZzLWhhbGYtc3dhcCBzdGF0ZVxcbm1tL3NobWVtLmMtMTc0NS1cXHRcXHQgKiBlLmcuIGZvbGlvX21hcHBpbmcoZm9saW8pIG1pZ2h0IGdpdmUgYW4gdW5leHBlY3RlZCBhbnN3ZXIuXFxuLS1cXG5tbS9zaG1lbS5jPTE3NTc9aW50IHNobWVtX3dyaXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zaG1lbS5jLTE3NjEtXFxubW0vc2htZW0uYzoxNzYyOlxcdGVyciA9IHNobWVtX3dyaXRlb3V0KFxcdTAwMjZjdHgsIGZvbGlvLCBOVUxMKTtcXG5tbS9zaG1lbS5jLTE3NjMtXFx0c3dhcF93cml0ZV9zdWJtaXQoXFx1MDAyNmN0eCk7XFxuLS1cXG5tbS9zaG1lbS5jPTM2MjQ9c3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcXG4tLVxcbm1tL3NobWVtLmMtMzc2MC1cXHRcXHQvKlxcbm1tL3NobWVtLmM6Mzc2MTpcXHRcXHQgKiBJbmZvcm0gc2htZW1fd3JpdGVvdXQoKSBob3cgZmFyIHdlIGhhdmUgcmVhY2hlZC5cXG5tbS9zaG1lbS5jLTM3NjItXFx0XFx0ICogTm8gbmVlZCBmb3IgbG9jayBvciBiYXJyaWVyOiB3ZSBoYXZlIHRoZSBwYWdlIGxvY2suXFxuLS1cXG5tbS9zd2FwLmg9NDY1PWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3dhcF9vcHMgc3dhcF9iZGV2X29wcztcXG5tbS9zd2FwLmgtNDY2LVxcbm1tL3N3YXAuaDo0Njc6aW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3N3YXAuaC00NjgtXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTI4MDk9c3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI4OTEtXFx0ICogZXhpdF9tbWFwKCksIHdoaWNoIHByb2NlZWRzIGF0IGl0cyBvd24gaW5kZXBlbmRlbnQgcGFjZTtcXG5tbS9zd2FwZmlsZS5jOjI4OTI6XFx0ICogYW5kIGV2ZW4gc2htZW1fd3JpdGVvdXQoKSBjb3VsZCBoYXZlIGJlZW4gcHJlZW1wdGVkIGFmdGVyXFxubW0vc3dhcGZpbGUuYy0yODkzLVxcdCAqIGZvbGlvX2FsbG9jX3N3YXAoKSwgdGVtcG9yYXJpbHkgaGlkaW5nIHRoYXQgc3dhcC4gIEl0J3MgZWFzeVxcbi0tXFxubW0vdm1zY2FuLmM9NjIxPXN0YXRpYyBwYWdlb3V0X3QgcGFnZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS92bXNjYW4uYy02NTctXFx0aWYgKHNobWVtX21hcHBpbmcobWFwcGluZykpXFxubW0vdm1zY2FuLmM6NjU4OlxcdFxcdHJlcyA9IHNobWVtX3dyaXRlb3V0KGN0eCwgZm9saW8sIGZvbGlvX2xpc3QpO1xcbm1tL3Ztc2Nhbi5jLTY1OS1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA1OjAxOjU3Ljk3MTM1MjE0MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODczOTY5NDg3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbnZlc3RpZ2F0aW9uIGludG8gU3dhcCBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBgc2htZW1fd3JpdGVvdXRgIGlzIGRlZmluZWQgaW4gYG1tL3N3YXAuaGAsIGFuZCBpdCdzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgdXNlZnVsIHRvIGtub3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gbWVtb3J5IGNncm91cHMgYW5kIHN3YXBwaW5nLCBzbyBsZXQgbWUgcXVpY2tseSByZXZpZXcgYSBmZXcga2V5IGZ1bmN0aW9uczogYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYGZvbGlvX2FsbG9jX3N3YXBgLCBgc2htZW1fd3JpdGVvdXRgIChvZiBjb3Vyc2UhKSwgYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXNgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNvcmUgcGllY2VzLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEknbSBwcmV0dHkgc3VyZSBJIGNhbiBmaW5kIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBpbiBgbW0vTWFrZWZpbGVgIG9yIHBlcmhhcHMgYGluY2x1ZGUvbGludXgvc3dhcC5oYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5OlxuXG4qICAgYFNXQVBgOiBUaGlzIG9uZSdzIHRoZSBmdW5kYW1lbnRhbCBlbmFibGVyIGZvciBzd2FwZmlsZSBmdW5jdGlvbmFsaXR5LCBzbyBpdCdzIGNyaXRpY2FsLlxuKiAgIGBNRU1DR2A6IFRoaXMgbXVzdCBiZSB0aGUga2V5IHRvIGhvdyBtZW1vcnkgY2dyb3VwcyBhbmQgc3dhcCBsaW1pdHMgaW50ZXJhY3QuXG4qICAgYFNITUVNYDogVGhpcyBzaG91bGQgYmUgY3JpdGljYWwgc2luY2UgSSBhbSBjb25zaWRlcmluZyBgc2htZW1fd3JpdGVvdXRgLlxuKiAgIEFuZCBmaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgZWl0aGVyIGBUSFBfU1dBUGAgb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCDigJMgdGhvc2UgYXJlIHRoZSBtdWx0aS1wYWdlIGZvbGlvIHN3YXAgZmxhZ3MgdGhhdCBjb3VsZCBpbmZsdWVuY2UgYWxsIG9mIHRoaXMuXG5cblRvIGJlIHRob3JvdWdoLCBsZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayBgbW0vTWFrZWZpbGVgIGFnYWluLCBzcGVjaWZpY2FsbHkgZm9yIHN3YXBmaWxlLmMgYW5kIG1lbWNvbnRyb2wuYzsgSSBqdXN0IHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cyB3aXRoIHRoZSBjb25maWcgZmxhZ3MgdGhhdCBnb3Zlcm4gdGhlaXIgaW5jbHVzaW9uIG9yIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgxMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNTowMjoyNi43MTEwNTAyMjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NjE3Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBmaWxlXFxcXC5vfG1lbWNvbnRyb2xcXFxcLm98cGFnZV9jb3VudGVyXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cXG4tLVxcbm1tL01ha2VmaWxlPTc2PWVuZGlmXFxubW0vTWFrZWZpbGUtNzctXFxubW0vTWFrZWZpbGU6Nzg6b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxubW0vTWFrZWZpbGUtNzktb2JqLSQoQ09ORklHX1pTV0FQKVxcdCs9IHpzd2FwLm9cXG4tLVxcbm1tL01ha2VmaWxlPTEwMT1vYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGU6MTAyOm9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxubW0vTWFrZWZpbGUtMTAzLW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlPTEwND1vYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgKz0gYnBmX21lbWNvbnRyb2wub1xcbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNTowMjoyNi43Njk2NzM1NDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODUyODQwMzE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBgQ09ORklHX1BBR0VfQ09VTlRFUmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgc3RhdGUgb2YgYENPTkZJR19QQUdFX0NPVU5URVJgLiBUaGlzIHZhcmlhYmxlLCBhcyB3ZSBhbGwga25vdywgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aC4uLiB3ZWxsLCBwcmV0dHkgbXVjaCBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0LiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgaXQncyBlbmFibGVkIG9yIGRpc2FibGVkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIERlcGVuZGluZyBvbiBpdHMgc3RhdHVzLCB0aGUgaW1wbGljYXRpb25zIHdpbGwgYmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQgYW5kIHRoZXknbGwgZHJpdmUgdGhlIG5leHQgbGluZSBvZiB0aG91Z2h0LiBJZiBpdCBpcyBlbmFibGVkLCB0aGF0IHNheXMgYSBsb3QgYWJvdXQgdGhlIGFzc3VtcHRpb25zIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlLCBob3cgcGFnZSBjb3VudGVycyBhcmUgdXNlZCBmb3IgdHJhY2tpbmcsIGFuZCBtYXliZSBob3cgdGhpcyB3aG9sZSB0aGluZyBiZWhhdmVzIGluIGRpZmZlcmVudCBtZW1vcnkgY29udGV4dHMuIERpc2FibGluZyBpdC4uLiB3ZWxsIHRoYXQncyBhIHdob2xlIGRpZmZlcmVudCBiYWxsZ2FtZSBvZiB0cmFkZW9mZnMgYW5kIG9wdGltaXphdGlvbnMsIHdoaWNoIHdpbGwgc2hpZnQgbXkgZm9jdXMgZWxzZXdoZXJlLCBwb3NzaWJseSB0byBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgb3Igc3BlY2lmaWMgaGFyZHdhcmUgY29uc3RyYWludHMuIFNvLCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0sIGFuZCB0aGVuIHdlJ2xsIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzQwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDU6MDI6MzUuMjk4MDc5MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNzQzNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfQ09VTlRFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDYzPWlmIENHUk9VUFNcXG5pbml0L0tjb25maWctMTA2NC1cXG5pbml0L0tjb25maWc6MTA2NTpjb25maWcgUEFHRV9DT1VOVEVSXFxuaW5pdC9LY29uZmlnLTEwNjYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNTowMjozNS4zNDMyNTk5NjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY0MTQ2OTI4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gQmFzZWQgb24gdGhlIHRhc2sgYXQgaGFuZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHdoYXRldmVyIGZ1bmN0aW9uYWxpdHkgSSdtIHdvcmtpbmcgd2l0aC4gQSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhcyBhbHdheXMsIGlzIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbGwgZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDEwNjUuIEknbSBob3BpbmcgdGhhdCB0aGlzIHNlY3Rpb24gd2lsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY2x1ZXMgYWJvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24ga25vYnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gSSdtIGV4cGVjdGluZyB0aGlzIGFyZWEgdG8gYmUgYSBjZW50cmFsIGh1YiBmb3IgZGVmaW5pbmcgdGhlIGRlZmF1bHQga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBpbiB0aGlzIHNlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDU0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDU6MDI6NTEuNzU3OTU2NDU4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA1MDpcXHRcXHRib29sIFxcXCJDb250cm9sIEdyb3VwIHN1cHBvcnRcXFwiXFxuMTA1MTpcXHRcXHRzZWxlY3QgS0VSTkZTXFxuMTA1MjpcXHRcXHRoZWxwXFxuMTA1MzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZ3JvdXBpbmcgc2V0cyBvZiBwcm9jZXNzZXMgdG9nZXRoZXIsIGZvclxcbjEwNTQ6XFx0XFx0ICB1c2Ugd2l0aCBwcm9jZXNzIGNvbnRyb2wgc3Vic3lzdGVtcyBzdWNoIGFzIENwdXNldHMsIENGUywgbWVtb3J5XFxuMTA1NTpcXHRcXHQgIGNvbnRyb2xzIG9yIGRldmljZSBpc29sYXRpb24uXFxuMTA1NjpcXHRcXHQgIFNlZVxcbjEwNTc6XFx0XFx0XFx0LSBEb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1kZXNpZ24tQ0ZTLnJzdFxcdChDRlMpXFxuMTA1ODpcXHRcXHRcXHQtIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxLyAoZmVhdHVyZXMgZm9yIGdyb3VwaW5nLCBpc29sYXRpb25cXG4xMDU5OlxcdFxcdFxcdFxcdFxcdFxcdCAgYW5kIHJlc291cmNlIGNvbnRyb2wpXFxuMTA2MDpcXHRcXG4xMDYxOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwNjI6XFx0XFxuMTA2MzpcXHRpZiBDR1JPVVBTXFxuMTA2NDpcXHRcXG4xMDY1OlxcdGNvbmZpZyBQQUdFX0NPVU5URVJcXG4xMDY2OlxcdFxcdGJvb2xcXG4xMDY3OlxcdFxcbjEwNjg6XFx0Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuMTA2OTpcXHRcXHRib29sIFxcXCJGYXZvciBkeW5hbWljIG1vZGlmaWNhdGlvbiBsYXRlbmN5IHJlZHVjdGlvbiBieSBkZWZhdWx0XFxcIlxcbjEwNzA6XFx0XFx0aGVscFxcbjEwNzE6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBcXFwiZmF2b3JkeW5tb2RzXFxcIiBtb3VudCBvcHRpb24gYnkgZGVmYXVsdFxcbjEwNzI6XFx0XFx0ICB3aGljaCByZWR1Y2VzIHRoZSBsYXRlbmNpZXMgb2YgZHluYW1pYyBjZ3JvdXAgbW9kaWZpY2F0aW9ucyBzdWNoXFxuMTA3MzpcXHRcXHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xcbjEwNzQ6XFx0XFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxcbjEwNzU6XFx0XFxuMTA3NjpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDc3OlxcdFxcbjEwNzg6XFx0Y29uZmlnIE1FTUNHXFxuMTA3OTpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMDgwOlxcdFxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4xMDgxOlxcdFxcdHNlbGVjdCBFVkVOVEZEXFxuMTA4MjpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuMTA4MzpcXHRcXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4xMDg0OlxcdFxcdGhlbHBcXG4xMDg1OlxcdFxcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxcbjEwODY6XFx0XFxuMTA4NzpcXHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbjEwODg6XFx0XFx0Ym9vbFxcbjEwODk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNTowMjo1MS43NTgwODYyOThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzMDA4MjYwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggaXMgdGFyZ2V0aW5nIHNvbWUgY3J1Y2lhbCBtZW1vcnkgbWFuYWdlbWVudCBhcmVhcywgc3BlY2lmaWNhbGx5IGFyb3VuZCBzd2FwIGFuZCBmb2xpbyBhbGxvY2F0aW9uLiBGcm9tIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb25zLCBgTUVNQ0dgIHJlbGllcyBvbiBgQ0dST1VQU2AsIGFuZCBpcyBhIHByZXJlcXVpc2l0ZSwgc28gdGhhdCdzIGdvb2QuIFdlIGFsc28gaGF2ZSBgU1dBUGAgZW5hYmxlZCwgd2hpY2ggaXMgZXNzZW50aWFsLCBhcyBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYFRIUF9TV0FQYCwgYW5kIGBTSE1FTWAuIEFsbCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgYXBwZWFyIHRvIGJlIGluIHBsYWNlLlxuXG5DaGVja2luZyB0aGUgXCJXb3J0aEZ1enppbmdcIiBmbGFnIGFuZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMsIHllcywgdGhhdCdzIGFsbCBpbmxpbmUgd2l0aCBteSBleHBlY3RhdGlvbnMuIFRoaXMgc2VlbXMgbGlrZSBhIHZhbGlkIGFyZWEgdG8gZm9jdXMgb3VyIGVmZm9ydHMsIGdpdmVuIHRoZSBsaXN0ZWQgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgcGF0Y2ggaXMgd29ya2luZyB3aXRoIGZvbGlvIHN3YXAgYWxsb2NhdGlvbiwgbWVtY2cgc3dhcCBtYXJnaW4gdHJhY2tpbmcsIGFuZCBzaG1lbSB3cml0ZW91dC4gVGhlIGtleSBzeW1ib2xzIHRoYXQgdGhlIHBhdGNoIHNwZWNpZmljYWxseSBjYWxscyBvdXQgaW5jbHVkZSBgZm9saW9fYWxsb2Nfc3dhcGAsIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYW5kIGBzaG1lbV93cml0ZW91dGAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIHdvdWxkIGV4cGVjdCBmb3IgYSBjaGFuZ2UgaW1wYWN0aW5nIGhvdyB3ZSBoYW5kbGUgbWVtb3J5IHByZXNzdXJlLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgc3dhcHBpbmcuXG5cblNwZWNpZmljYWxseSwgdGhlIG1vcmUgZ3JhbnVsYXIgZXJyb3IgY29kZXMgZnJvbSBgZm9saW9fYWxsb2Nfc3dhcGAgZm9yIHN3YXAgbGltaXRzIGlzIGEgc21hcnQgY2hhbmdlLiBSZXR1cm5pbmcgYC1FMkJJR2AsIGAtRU5PU1BDYCwgYW5kIGAtRU5PTUVNYCBkZXBlbmRpbmcgb24gd2hldGhlciBhIG1lbWNnIG9yIGdsb2JhbCBsaW1pdCBpcyB0aGUgY29uc3RyYWludCBpcyBtdWNoIGNsZWFuZXIuIEF2b2lkaW5nIHVubmVjZXNzYXJ5IHNwbGl0dGluZyBvZiBsYXJnZSBmb2xpb3Mgd2hlbiB3ZSdyZSBoaXR0aW5nIGEgbGltaXQgaXMgZ29pbmcgdG8gYmUgdXNlZnVsIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gVGhpcyBpcyBhIHNvbGlkIHVwZGF0ZSB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGlzIGRpcmVjdGx5IGltcGFjdGluZyBib3RoIHN3YXAgYW5kIHJlY2xhaW0uXG5cbkJhc2VkIG9uIHRoaXMgcmV2aWV3LCBldmVyeXRoaW5nIGFwcGVhcnMgdG8gYmUgaW4gb3JkZXIuIFRoZSBwYXRjaCBhZGRyZXNzZXMgcmVsZXZhbnQgYXJlYXMsIGFuZCB0aGUgcHJvcG9zZWQgY2hhbmdlcyBzZWVtIGFjY3VyYXRlIGFuZCB3ZWxsLXJlYXNvbmVkLiBJJ20gY29tZm9ydGFibGUgd2l0aCB0aGUgY3VycmVudCBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc3NywiT3V0cHV0VG9rZW5zIjoxODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNTowMzoxMi4wNTg5MTU4MjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjEzNjc4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJUSFBfU1dBUFwiLFxuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb19hbGxvY19zd2FwXCIsXG4gICAgXCJtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpblwiLFxuICAgIFwicGFnZV9jb3VudGVyX21hcmdpblwiLFxuICAgIFwic2htZW1fd3JpdGVvdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBzd2FwIGFsbG9jYXRpb24gbG9naWMgYnkgcmVmaW5pbmcgZXJyb3IgcmVwb3J0aW5nIGluIGZvbGlvX2FsbG9jX3N3YXAoKSBhbmQgYWRkaW5nIHBhZ2VfY291bnRlcl9tYXJnaW4oKSBhbmQgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oKSB0byBpbnNwZWN0IGhpZXJhcmNoaWNhbCBzd2FwIG1hcmdpbnMuIFRoaXMgY2hhbmdlcyBob3cgbGFyZ2UgZm9saW9zIGFyZSBzcGxpdCBhbmQgaGFuZGxlZCBkdXJpbmcgc3dhcG91dCBpbiBzaG1lbV93cml0ZW91dCgpIGFuZCBwYWdlIHJlY2xhaW0gaW4gc2hyaW5rX2ZvbGlvX2xpc3QoKSB3aGVuIGdsb2JhbCBvciBtZW1jZyBzd2FwIGxpbWl0cyBhcmUgcmVhY2hlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlRIUF9TV0FQXCIsXG4gICAgXCJTSE1FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX2FsbG9jX3N3YXBcIixcbiAgICBcIm1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luXCIsXG4gICAgXCJwYWdlX2NvdW50ZXJfbWFyZ2luXCIsXG4gICAgXCJzaG1lbV93cml0ZW91dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IHN3YXAgYWxsb2NhdGlvbiBsb2dpYyBieSByZWZpbmluZyBlcnJvciByZXBvcnRpbmcgaW4gZm9saW9fYWxsb2Nfc3dhcCgpIGFuZCBhZGRpbmcgcGFnZV9jb3VudGVyX21hcmdpbigpIGFuZCBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbigpIHRvIGluc3BlY3QgaGllcmFyY2hpY2FsIHN3YXAgbWFyZ2lucy4gVGhpcyBjaGFuZ2VzIGhvdyBsYXJnZSBmb2xpb3MgYXJlIHNwbGl0IGFuZCBoYW5kbGVkIGR1cmluZyBzd2Fwb3V0IGluIHNobWVtX3dyaXRlb3V0KCkgYW5kIHBhZ2UgcmVjbGFpbSBpbiBzaHJpbmtfZm9saW9fbGlzdCgpIHdoZW4gZ2xvYmFsIG9yIG1lbWNnIHN3YXAgbGltaXRzIGFyZSByZWFjaGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNTowMzoxMi4xNDUwNjA0NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY0MTUwNTA5NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNTowMzoxMi4xNDU2NTk2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzY0MTQ0NDYyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuaGFuY2VzIHN3YXAgYWxsb2NhdGlvbiBlcnJvciByZXBvcnRpbmcgaW4gYGZvbGlvX2FsbG9jX3N3YXAoKWAgYnkgZGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiBjYXNlcyB3aGVyZSBhIGxhcmdlIGZvbGlvIGFsbG9jYXRpb24gZmFpbGVkIGR1ZSB0byBmb2xpbyBzaXplIHZzLiB0b3RhbCBzd2FwL2Nncm91cCBzd2FwIGV4aGF1c3Rpb24uIEl0IGludHJvZHVjZXMgYHBhZ2VfY291bnRlcl9tYXJnaW4oKWAgYW5kIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbigpYCBhbmQgdXBkYXRlcyBmb2xpbyBzcGxpdHRpbmcgZGVjaXNpb25zIGluIGBtbS92bXNjYW4uY2AgYW5kIGBtbS9zaG1lbS5jYC5cXG5cXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgKEtNU0FOKTogQWxsIGxvY2FsIHZhcmlhYmxlcyAoYHJldGAsIGBtYXJnaW5gLCBgbWApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQuXFxuLSBNZW1vcnkgU2FmZXR5IFxcdTAwMjYgTG9naWMgKEtBU0FOL0xvY2tkZXApOiBBbnkgcmlza3MgaW4gdGhpcyBwYXRjaCByZXZvbHZlIGFyb3VuZCBjZ3JvdXAgc3dhcCBhY2NvdW50aW5nLCBwYWdlIGxvY2tpbmcsIHJlZmNvdW50aW5nLCBvciBjb250cm9sLWZsb3cgbG9naWMgaW4gcmVjbGFpbS93cml0ZW91dCwgd2hpY2ggYXJlIG1vbml0b3JlZCBieSBzdGFuZGFyZCBNTSBhc3NlcnRpb25zLCBLQVNBTiwgYW5kIExvY2tkZXAuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzE1MTZiZDY2MmY5MjgxNmFkNjM1MzdkZTFlZTdlYWY5ZTk1N2NiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDMwIDA0OjU5OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbmluZGV4IGQ2NDliNmJiYmM4NzEuLjA3YjdjYjEyMjQ5YzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXG5AQCAtNjgsNiArNjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV9jb3VudGVyX3JlYWQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcbiBcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmNvdW50ZXItXHUwMDNldXNhZ2UpO1xuIH1cbiBcbitsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcik7XG4gdm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgcGFnZV9jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiBib29sIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggMGY5NTNlZDljODYzMC4uYTcyZWNmMTJjMDBkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTUxMCw2ICs1MTAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcFxuIFx0X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoaWQsIG5yX3BhZ2VzKTtcbiB9XG4gXG4rbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2Vsc2VcbkBAIC01MjMsNiArNTI0LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXG4ge1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gUEFHRV9DT1VOVEVSX01BWDtcbit9XG4rXG4gc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNGExOGVlNDUwOWFiNi4uOWEzODA0MTMyYzJlYiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtNTgwMSwxNSArNTgwMSwzNSBAQCBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XG4gXG4tXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSlcbi1cdFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XG4tXHRmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKVxuLVx0XHRucl9zd2FwX3BhZ2VzID0gbWluX3QobG9uZywgbnJfc3dhcF9wYWdlcyxcbi1cdFx0XHRcdCAgICAgIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzd2FwLm1heCkgLVxuLVx0XHRcdFx0ICAgICAgcGFnZV9jb3VudGVyX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCkpO1xuK1x0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2ICFkb19tZW1zd19hY2NvdW50KCkpXG4rXHRcdG5yX3N3YXBfcGFnZXMgPSBtaW4obnJfc3dhcF9wYWdlcywgcGFnZV9jb3VudGVyX21hcmdpbihcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKSk7XG4rXG4gXHRyZXR1cm4gbnJfc3dhcF9wYWdlcztcbiB9XG4gXG4rLyoqXG4rICogbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4gLSBnZXQgYSBmb2xpbydzIG1lbWNnIHN3YXAgbWFyZ2luXG4rICogQGZvbGlvOiBmb2xpbyB3aG9zZSBtZW1jZyBtYXJnaW4gaXMgcXVlcmllZFxuKyAqXG4rICogUmV0dXJuOiBSZW1haW5pbmcgY2hhcmdlYWJsZSBwYWdlcyBpbiB0aGUgZm9saW8ncyBtZW1jZyBoaWVyYXJjaHkuXG4rICovXG4rbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcdGxvbmcgbWFyZ2luO1xuK1xuK1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkgfHxcbitcdCAgICAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpXG4rXHRcdHJldHVybiBQQUdFX0NPVU5URVJfTUFYO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4rXHRtYXJnaW4gPSBwYWdlX2NvdW50ZXJfbWFyZ2luKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gbWFyZ2luO1xuK31cbitcbiBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmNcbmluZGV4IDY2MWUwZjJhNTEyN2EuLjQ1MDU0M2Y0YjMxOGIgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2NvdW50ZXIuY1xuKysrIGIvbW0vcGFnZV9jb3VudGVyLmNcbkBAIC00Niw2ICs0NiwyNiBAQCBzdGF0aWMgdm9pZCBwcm9wYWdhdGVfcHJvdGVjdGVkX3VzYWdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmMsXG4gXHR9XG4gfVxuIFxuKy8qKlxuKyAqIHBhZ2VfY291bnRlcl9tYXJnaW4gLSByZW1haW5pbmcgdXNhYmxlIHNwYWNlIHdpdGhpbiBoaWVyYXJjaGljYWwgbGltaXRzXG4rICogQGNvdW50ZXI6IGNvdW50ZXJcbisgKlxuKyAqIFJldHVybjogVGhlIG1pbmltdW0gdmFsdWUgb2YgbWF4IG1pbnVzIHVzYWdlIGFjcm9zcyBAY291bnRlciBhbmQgYWxsIG9mXG4rICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS5cbisgKi9cbitsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcbit7XG4rXHRsb25nIG1hcmdpbiA9IFBBR0VfQ09VTlRFUl9NQVg7XG4rXG4rXHRkbyB7XG4rXHRcdGxvbmcgbSA9IFJFQURfT05DRShjb3VudGVyLVx1MDAzZW1heCkgLSBwYWdlX2NvdW50ZXJfcmVhZChjb3VudGVyKTtcbitcbitcdFx0bWFyZ2luID0gbWluKG1hcmdpbiwgbSk7XG4rXHR9IHdoaWxlICgoY291bnRlciA9IGNvdW50ZXItXHUwMDNlcGFyZW50KSk7XG4rXG4rXHRyZXR1cm4gbWFyZ2luO1xuK31cbitcbiAvKipcbiAgKiBwYWdlX2NvdW50ZXJfY2FuY2VsIC0gdGFrZSBwYWdlcyBvdXQgb2YgdGhlIGxvY2FsIGNvdW50ZXJcbiAgKiBAY291bnRlcjogY291bnRlclxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCBkZTE0NGE5YTk1NThiLi44NGI4ZTllMDU5NzNiIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTE2MTIsNyArMTYxMiw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRwZ29mZl90IGluZGV4O1xuLVx0aW50IG5yX3BhZ2VzO1xuK1x0aW50IG5yX3BhZ2VzLCByZXQ7XG4gXHRib29sIHNwbGl0ID0gZmFsc2U7XG4gXG4gXHRpZiAoKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IFNITUVNX0ZfTE9DS0VEKSB8fCBzYmluZm8tXHUwMDNlbm9zd2FwKVxuQEAgLTE2OTMsNyArMTY5Myw4IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4gXHR9XG4gXG4tXHRpZiAoIWZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7XG4rXHRyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTtcbitcdGlmICghcmV0KSB7XG4gXHRcdGJvb2wgZmlyc3Rfc3dhcHBlZCA9IHNobWVtX3JlY2FsY19pbm9kZShpbm9kZSwgMCwgbnJfcGFnZXMpO1xuIFx0XHRpbnQgZXJyb3I7XG4gXG5AQCAtMTc0Niw3ICsxNzQ3LDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4gXHRcdGdvdG8gcmVkaXJ0eTtcbiBcdH1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2UgMSlcbitcdGlmIChucl9wYWdlcyBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgcmV0ID09IC1FMkJJRylcbiBcdFx0Z290byB0cnlfc3BsaXQ7XG4gcmVkaXJ0eTpcbiBcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXG5pbmRleCA1MWY1YTUyNWJiNjFjLi5kYzBjZDBjYzZmNjI2IDEwMDY0NFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xuKysrIGIvbW0vc3dhcGZpbGUuY1xuQEAgLTE3MzUsNyArMTczNSw5IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiAgKiBzd2FwIGNhY2hlLlxuICAqXG4gICogQ29udGV4dDogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGZvbGlvIGxvY2suXG4tICogUmV0dXJuOiBXaGV0aGVyIHRoZSBmb2xpbyB3YXMgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUuXG4rICogUmV0dXJuOiAlMCBvbiBzdWNjZXNzLCAlLUUyQklHIGlmIHNwbGl0dGluZyB0aGUgZm9saW8gbWlnaHQgYWxsb3cgc3dhcG91dCxcbisgKiAlLUVOT1NQQyBpZiBubyBnbG9iYWwgc3dhcCBzcGFjZSBpcyBhdmFpbGFibGUsIG9yICUtRU5PTUVNIGlmIHNwbGl0dGluZ1xuKyAqIHdvdWxkIG5vdCBoZWxwLlxuICAqL1xuIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuQEAgLTE3NDcsMTEgKzE3NDksMTEgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBcdGlmIChvcmRlcikge1xuIFx0XHQvKlxuLVx0XHQgKiBSZWplY3QgbGFyZ2UgYWxsb2NhdGlvbiB3aGVuIFRIUF9TV0FQIGlzIGRpc2FibGVkLFxuLVx0XHQgKiB0aGUgY2FsbGVyIHNob3VsZCBzcGxpdCB0aGUgZm9saW8gYW5kIHRyeSBhZ2Fpbi5cbitcdFx0ICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZC4gQ2hlY2sgYmVsb3dcbitcdFx0ICogd2hldGhlciBzcGxpdHRpbmcgYW5kIHJldHJ5aW5nIGNhbiBtYWtlIHByb2dyZXNzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19USFBfU1dBUCkpXG4tXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4rXHRcdFx0Z290byBmYWlsZWQ7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIEFsbG9jYXRpb24gc2l6ZSBzaG91bGQgbmV2ZXIgZXhjZWVkIGNsdXN0ZXIgc2l6ZVxuQEAgLTE3NTksNyArMTc2MSw3IEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdCAqL1xuIFx0XHRpZiAoc2l6ZSBcdTAwM2UgU1dBUEZJTEVfQ0xVU1RFUikge1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRnb3RvIGZhaWxlZDtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTE3NzUsMTMgKzE3NzcsMjMgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdH1cbiBcbiBcdC8qIE5lZWQgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgYWxsb2NhdGlvbiBmYWlsZWQsIGZvciBNRU1DR19TV0FQX0ZBSUwuICovXG4tXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSlcbitcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKSB7XG4gXHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbitcdFx0Z290byBmYWlsZWQ7XG4rXHR9XG4gXG4gXHRpZiAodW5saWtlbHkoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRnb3RvIGZhaWxlZDtcbiBcbiBcdHJldHVybiAwO1xuK1xuK2ZhaWxlZDpcbitcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIC1FTk9TUEM7XG4rXHRpZiAobWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oZm9saW8pIFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXR1cm4gb3JkZXIgPyAtRTJCSUcgOiAtRU5PTUVNO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBmZGQxMzI5OWEwNGE5Li42ZTc3MGEwOGUyODgwIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTI1OSw2ICsxMjU5LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHQgKi9cbiBcdFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4rXHRcdFx0aW50IHJldDtcbitcbiBcdFx0XHRpZiAoIShzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfSU8pKVxuIFx0XHRcdFx0Z290byBrZWVwX2xvY2tlZDtcbiBcdFx0XHRpZiAoZm9saW9fbWF5YmVfZG1hX3Bpbm5lZChmb2xpbykpXG5AQCAtMTI3NywxMSArMTI3OSwxNCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdFx0XHQgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAoZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcbitcdFx0XHRyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTtcbitcdFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0XHRpbnQgX19tYXliZV91bnVzZWQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4gXG4gXHRcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuIFx0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZF9zcGxpdDtcbitcdFx0XHRcdGlmIChyZXQgIT0gLUUyQklHKVxuK1x0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcbiBcdFx0XHRcdC8qIEZhbGxiYWNrIHRvIHN3YXAgbm9ybWFsIHBhZ2VzICovXG4gXHRcdFx0XHRpZiAoc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDU6MDM6MTIuMTQ1NjYwMzVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY0MTQ0MjA2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQW5hbHlzaXMgb2YgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyBjZW50ZXJlZCBhcm91bmQgcmVmaW5pbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGZvbGlvIG1hbmFnZW1lbnQgcmVsYXRlZCB0byBzd2FwIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBjZ3JvdXBzLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgd291bGQgd2FycmFudCBLTVNBTiBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBjcmVhdGUgYW55IGtlcm5lbC10by11c2VyIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIGRhdGEsIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRocm91Z2ggbmV3IGNvbmRpdGlvbmFsIGxvZ2ljLlxuXG5JIHNlZSBpdCB0b3VjaGVzIHNldmVyYWwga2V5IGFyZWFzOiBgcGFnZV9jb3VudGVyX21hcmdpbmAsIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGBmb2xpb19hbGxvY19zd2FwYCwgYHNobWVtX3dyaXRlb3V0YCwgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIGJldHRlciBkaXN0aW5ndWlzaGluZyB0aGUgcmVhc29ucyBmb3IgYSBmYWlsZWQgYGZvbGlvX2FsbG9jX3N3YXBgOiB3aGV0aGVyIGl0J3MgYmVjYXVzZSBvZiB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdCAoYC1FMkJJR2ApIG9yIGluc3VmZmljaWVudCBzd2FwIHNwYWNlIChgLUVOT1NQQ2Agb3IgYC1FTk9NRU1gKS4gVGhpcyBpbmZvcm1hdGlvbiBpcyB0aGVuIHVzZWQgdG8gb3B0aW1pemUgZm9saW8gc3BsaXR0aW5nIGluIHRoZSBgdm1zY2FuYCBhbmQgYHNobWVtYCBjb2RlLlxuXG5Mb29raW5nIGNsb3NlbHkgYXQgdGhlIGNvZGUgc25pcHBldHMsIHRoZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBsb2dpYyBpbnZvbHZlcyBjaGVja2luZyByZXR1cm4gdmFsdWVzIG9yIG1hcmdpbnMsIGJ1dCBub3QgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCBjYWxjdWxhdGlvbiBpdGVyYXRlcyB0aHJvdWdoIGEgaGllcmFyY2h5LCBidXQgYWxsIGludGVybWVkaWF0ZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgbG9vcC4gVGhlIHJldHVybiB2YWx1ZXMgb2YgYGZvbGlvX2FsbG9jX3N3YXBgIGFyZSBleHBsaWNpdGx5IGRlZmluZWQgaW50ZWdlciBjb2Rlcy4gVGhlIHJldHVybiB2YWx1ZSBpcyB1c2VkIHRvIGRlY2lkZSB0aGUgY29ycmVjdCBhY3Rpb24gYW5kIGlzIGNoZWNrZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYXNzaWdubWVudC4gTm90aGluZyBpcyBnZXR0aW5nIGNvcGllZCB0byB1c2Vyc3BhY2UuIE5vIGNvbXBsZXggc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIGFuZCBubyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUuXG5cbkkgcmV2aWV3ZWQgdGhlIEtNU0FOIHJlcXVpcmVtZW50cyDigJMgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGtlcm5lbC10by11c2VyIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMsIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgY29tcGxleCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMsIGFuZCBhbnkgb3Bwb3J0dW5pdGllcyBmb3Igc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vbmUgb2YgdGhlc2UgYXBwbHkgaGVyZS4gVGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGxlYWthZ2UgdG8gdXNlciBzcGFjZS4gSXQgc2VlbXMgdGhhdCBhbnkgcG90ZW50aWFsIGJ1Z3MgaGVyZSB3b3VsZCBiZSBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlczogbG9naWMgZXJyb3JzLCBtZW1vcnkgbGVha3MsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBjZ3JvdXAgYWNjb3VudGluZyBidWdzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQga2VybmVsIGFzc2VydGlvbnMgbGlrZSBgVk1fV0FSTl9PTl9PTkNFYC5cblxuU28sIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlLCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGltcHJvdmluZyBlcnJvciBoYW5kbGluZyBhbmQgZm9saW8gbWFuYWdlbWVudCBiYXNlZCBvbiB0aGUgc3dhcCBtYXJnaW4gYW5kIHNwYWNlIGF2YWlsYWJpbGl0eS4gSXQgcmVmaW5lcyB0aGUgZXJyb3Igc2lnbmFsaW5nIGZyb20gdGhlIGBmb2xpb19hbGxvY19zd2FwYCBmdW5jdGlvbiBhbmQgdXNlcyB0aGVzZSBjb2RlcyBmb3Igc21hcnRlciBmb2xpbyBzcGxpdHRpbmcgYW5kIHJlYWRhaGVhZC4gQWxsIHRoZSBuZXcgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCwgdGhlcmUgYXJlIG5vIGtlcm5lbC10by11c2VyIGNvcGllcywgbm8gbmV3IGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQga2VybmVsIHRlc3RpbmcgaXMgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaC4gSSdsbCBkb2N1bWVudCB0aGlzIHJlYXNvbmluZyBhbmQgc3VibWl0IHRoZSByZXN1bHRzIHRvIHRoZSB0b29saW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODQ5LCJPdXRwdXRUb2tlbnMiOjI0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNTowMzo0OC41NjAwODUwNTNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuaGFuY2VzIHN3YXAgYWxsb2NhdGlvbiBlcnJvciByZXBvcnRpbmcgaW4gYGZvbGlvX2FsbG9jX3N3YXAoKWAgYnkgZGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiBjYXNlcyB3aGVyZSBhIGxhcmdlIGZvbGlvIGFsbG9jYXRpb24gZmFpbGVkIGR1ZSB0byBmb2xpbyBzaXplIHZzLiB0b3RhbCBzd2FwL2Nncm91cCBzd2FwIGV4aGF1c3Rpb24uIEl0IGludHJvZHVjZXMgYHBhZ2VfY291bnRlcl9tYXJnaW4oKWAgYW5kIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbigpYCBhbmQgdXBkYXRlcyBmb2xpbyBzcGxpdHRpbmcgZGVjaXNpb25zIGluIGBtbS92bXNjYW4uY2AgYW5kIGBtbS9zaG1lbS5jYC5cXG5cXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgKEtNU0FOKTogQWxsIGxvY2FsIHZhcmlhYmxlcyAoYHJldGAsIGBtYXJnaW5gLCBgbWApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQuXFxuLSBNZW1vcnkgU2FmZXR5IFxcdTAwMjYgTG9naWMgKEtBU0FOL0xvY2tkZXApOiBBbnkgcmlza3MgaW4gdGhpcyBwYXRjaCByZXZvbHZlIGFyb3VuZCBjZ3JvdXAgc3dhcCBhY2NvdW50aW5nLCBwYWdlIGxvY2tpbmcsIHJlZmNvdW50aW5nLCBvciBjb250cm9sLWZsb3cgbG9naWMgaW4gcmVjbGFpbS93cml0ZW91dCwgd2hpY2ggYXJlIG1vbml0b3JlZCBieSBzdGFuZGFyZCBNTSBhc3NlcnRpb25zLCBLQVNBTiwgYW5kIExvY2tkZXAuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5oYW5jZXMgc3dhcCBhbGxvY2F0aW9uIGVycm9yIHJlcG9ydGluZyBpbiBgZm9saW9fYWxsb2Nfc3dhcCgpYCBieSBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuIGNhc2VzIHdoZXJlIGEgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiBmYWlsZWQgZHVlIHRvIGZvbGlvIHNpemUgdnMuIHRvdGFsIHN3YXAvY2dyb3VwIHN3YXAgZXhoYXVzdGlvbi4gSXQgaW50cm9kdWNlcyBgcGFnZV9jb3VudGVyX21hcmdpbigpYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKClgIGFuZCB1cGRhdGVzIGZvbGlvIHNwbGl0dGluZyBkZWNpc2lvbnMgaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL3NobWVtLmNgLlxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSAoS01TQU4pOiBBbGwgbG9jYWwgdmFyaWFibGVzIChgcmV0YCwgYG1hcmdpbmAsIGBtYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZC5cXG4tIE1lbW9yeSBTYWZldHkgXFx1MDAyNiBMb2dpYyAoS0FTQU4vTG9ja2RlcCk6IEFueSByaXNrcyBpbiB0aGlzIHBhdGNoIHJldm9sdmUgYXJvdW5kIGNncm91cCBzd2FwIGFjY291bnRpbmcsIHBhZ2UgbG9ja2luZywgcmVmY291bnRpbmcsIG9yIGNvbnRyb2wtZmxvdyBsb2dpYyBpbiByZWNsYWltL3dyaXRlb3V0LCB3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IHN0YW5kYXJkIE1NIGFzc2VydGlvbnMsIEtBU0FOLCBhbmQgTG9ja2RlcC5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfn47r[1] Phase: Succeeded StartedAt: 2026-08-30 05:04:00 +0000 UTC FinishedAt: 2026-08-30 05:04:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-30 05:04:00 +0000 UTC FinishedAt: 2026-08-30 05:04:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2] Phase: Succeeded StartedAt: 2026-08-30 05:04:00 +0000 UTC FinishedAt: 2026-08-30 08:43:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-30 05:04:00 +0000 UTC FinishedAt: 2026-08-30 08:43:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","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-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-30 05:04:00 +0000 UTC FinishedAt: 2026-08-30 05:04:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-30 05:04:00 +0000 UTC FinishedAt: 2026-08-30 05:04:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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-workflowfn47r/series-workflowfn47r-convert-artifact-295287020/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-30 05:04:10 +0000 UTC FinishedAt: 2026-08-30 05:20:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-30 05:04:10 +0000 UTC FinishedAt: 2026-08-30 05:20:15 +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:*970d83f8-3779-43bd-85cb-a5ccfa296322,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-workflowfn47r/series-workflowfn47r-convert-artifact-295287020/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": "0e715ab2-5c23-4fac-adf9-17270327600a", "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-workflowfn47r/series-workflowfn47r-build-action-3786875674/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-30 05:04:10 +0000 UTC FinishedAt: 2026-08-30 05:20:05 +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:*970d83f8-3779-43bd-85cb-a5ccfa296322,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-workflowfn47r/series-workflowfn47r-convert-artifact-295287020/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": "0e715ab2-5c23-4fac-adf9-17270327600a", "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-workflowfn47r/series-workflowfn47r-build-action-3786875674/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-30 05:20:15 +0000 UTC FinishedAt: 2026-08-30 05:20:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-30 05:20:15 +0000 UTC FinishedAt: 2026-08-30 05:20:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-30 05:20:15 +0000 UTC FinishedAt: 2026-08-30 05:20:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-30 05:20:15 +0000 UTC FinishedAt: 2026-08-30 05:20:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","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-workflowfn47r/series-workflowfn47r-convert-artifact-2911804587/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-30 05:20:25 +0000 UTC FinishedAt: 2026-08-30 05:22:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-30 05:20:25 +0000 UTC FinishedAt: 2026-08-30 05:21:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0e715ab2-5c23-4fac-adf9-17270327600a,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-workflowfn47r/series-workflowfn47r-build-action-3786875674/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-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-30 05:22:08 +0000 UTC FinishedAt: 2026-08-30 05:22:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-30 05:22:08 +0000 UTC FinishedAt: 2026-08-30 05:22:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-30 05:22:08 +0000 UTC FinishedAt: 2026-08-30 05:38:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-30 05:22:08 +0000 UTC FinishedAt: 2026-08-30 05:38:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*970d83f8-3779-43bd-85cb-a5ccfa296322,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-workflowfn47r/series-workflowfn47r-convert-artifact-2911804587/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": "a1b704e3-d2d6-41fa-b5b6-6cce45d31fb3", "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-workflowfn47r/series-workflowfn47r-build-action-3463990479/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-30 05:22:08 +0000 UTC FinishedAt: 2026-08-30 05:38:24 +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:*970d83f8-3779-43bd-85cb-a5ccfa296322,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-workflowfn47r/series-workflowfn47r-convert-artifact-2911804587/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": "a1b704e3-d2d6-41fa-b5b6-6cce45d31fb3", "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-workflowfn47r/series-workflowfn47r-build-action-3463990479/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-30 05:38:34 +0000 UTC FinishedAt: 2026-08-30 05:38:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-30 05:38:34 +0000 UTC FinishedAt: 2026-08-30 05:38:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-30 05:38:34 +0000 UTC FinishedAt: 2026-08-30 05:40:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-30 05:38:34 +0000 UTC FinishedAt: 2026-08-30 05:40:23 +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:*a1b704e3-d2d6-41fa-b5b6-6cce45d31fb3,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-workflowfn47r/series-workflowfn47r-build-action-3463990479/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-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-30 05:40:33 +0000 UTC FinishedAt: 2026-08-30 08:43:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-30 05:40:33 +0000 UTC FinishedAt: 2026-08-30 08:43:21 +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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"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:*0e715ab2-5c23-4fac-adf9-17270327600a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a1b704e3-d2d6-41fa-b5b6-6cce45d31fb3,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-workflowfn47r/series-workflowfn47r-build-action-3786875674/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-workflowfn47r/series-workflowfn47r-build-action-3463990479/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-30 05:40:33 +0000 UTC FinishedAt: 2026-08-30 05:40:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-30 05:40:33 +0000 UTC FinishedAt: 2026-08-30 05:40:38 +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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"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-workflowfn47r/series-workflowfn47r-convert-artifact-4277859780/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-30 05:40:33 +0000 UTC FinishedAt: 2026-08-30 05:40:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-30 05:40:33 +0000 UTC FinishedAt: 2026-08-30 05:40:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-30 05:40:33 +0000 UTC FinishedAt: 2026-08-30 05:40:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-30 05:40:43 +0000 UTC FinishedAt: 2026-08-30 08:43:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn47r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"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":["folio_alloc_swap","mem_cgroup_get_folio_swap_margin","page_counter_margin","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","THP_SWAP","SHMEM"],"series_id":"fe171ae4-ab3c-4122-be0d-d91134db62e2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-30 05:40:43 +0000 UTC FinishedAt: 2026-08-30 08:43:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0e715ab2-5c23-4fac-adf9-17270327600a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a1b704e3-d2d6-41fa-b5b6-6cce45d31fb3,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-workflowfn47r/series-workflowfn47r-build-action-3786875674/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-workflowfn47r/series-workflowfn47r-build-action-3463990479/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-workflowfn47r/series-workflowfn47r-convert-artifact-4277859780/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,}