Name: series-workflowj55dn Phase: Succeeded StartedAt: 2026-07-15 20:50:14 +0000 UTC FinishedAt: 2026-07-16 01:33:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[0] Phase: Succeeded StartedAt: 2026-07-15 20:50:14 +0000 UTC FinishedAt: 2026-07-15 21:36:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[0].run-triage Phase: Succeeded StartedAt: 2026-07-15 20:50:14 +0000 UTC FinishedAt: 2026-07-15 21:36:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d1f4b56417a3dc1a0600f960b14f46bd25eda89d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "SMP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d1f4b56417a3dc1a0600f960b14f46bd25eda89d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "SMP" ], "series_id": "f01f6cbb-4912-4465-8bf8-75db6ee2ae60" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_do_misc_fixups", "check_map_prog_compatibility", "__add_used_map" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDIxOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7LAogICAgJiMzNDtjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5JiMzNDssCiAgICAmIzM0O19fYWRkX3VzZWRfbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gZm9yY2UgSklUIGNvbXBpbGF0aW9uIGZvciBwcm9ncmFtcyB0aGF0IHVzZSBwZXItQ1BVIG1hcHMsIHNwZWNpZmljIEJQRiBoZWxwZXJzIChicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQsIGJwZl9nZXRfY3VycmVudF90YXNrLCBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYpLCBhcmVuYSBtYXBzLCBhbmQgaW5zdHJ1Y3Rpb24gYXJyYXkgbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBlbmZvcmNlcyBKSVQgcmVxdWlyZW1lbnRzIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgYnlwYXNzZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjE6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNTkyOTY5NzU2NzExZDZmNTkyZWRmNmExM2I2ZmM2NTJlNDg1MzJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMjE6MzU6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IDMxMTgxZTBjMmI4MDFiLi5kOTU0MjEyN2RmZGZjMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC00MTYzLDcgJiM0Mzs0MTYzLDcgQEAgYnBmX3Byb2dfdXBkYXRlX2luc25fcHRycyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqb2Zmc2V0cywgdm9pZCAqaW1hZ2UpXG4gfVxuICNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWFwX3N1cHBvcnRzX2NwdV9mbGFncyhlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGJwZl9tYXBfaXNfcGVyY3B1X21hcChlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcbiB7XG4gXHRzd2l0Y2ggKG1hcF90eXBlKSB7XG4gXHRjYXNlIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk6XG5AQCAtNDE5MCw3ICYjNDM7NDE5MCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3Moc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGZsYWdzLCB1NjQgYWxsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiAoQlBGX0ZfQ1BVIHwgQlBGX0ZfQUxMX0NQVVMpKSB7XG4tXHRcdGlmICghYnBmX21hcF9zdXBwb3J0c19jcHVfZmxhZ3MobWFwLVx1MDAzZW1hcF90eXBlKSlcbiYjNDM7XHRcdGlmICghYnBmX21hcF9pc19wZXJjcHVfbWFwKG1hcC1cdTAwM2VtYXBfdHlwZSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0NQVSkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgQlBGX0ZfQUxMX0NQVVMpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCBkM2JlOTcyNzE0YjIyYy4uYTBiZGRhZGE3OTY0ZTcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtMjAwOCw2ICYjNDM7MjAwOCw5IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdFx0XHR9XG4gXG4mIzQzO1x0XHRcdFx0aWYgKGJwZl9tYXBfaXNfcGVyY3B1X21hcChtYXBfcHRyLVx1MDAzZW1hcF90eXBlKSlcbiYjNDM7XHRcdFx0XHRcdHByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcbiYjNDM7XG4gXHRcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLFxuIFx0XHRcdFx0XHRcdFx0ICAgICAgIGluc25fYnVmLCBjbnQpO1xuIFx0XHRcdFx0aWYgKCFuZXdfcHJvZylcbkBAIC0yMTEyLDYgJiM0MzsyMTE1LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdCAqIHdheSwgaXQmIzM5O3MgZmluZSB0byBiYWNrIG91dCB0aGlzIGlubGluaW5nIGxvZ2ljXG4gXHRcdFx0ICovXG4gI2lmZGVmIENPTkZJR19TTVBcbiYjNDM7XHRcdFx0cHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO1xuIFx0XHRcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2Y3B1X251bWJlcik7XG4gXHRcdFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XG4gXHRcdFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xuQEAgLTIxMzMsNiAmIzQzOzIxMzcsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdC8qIEltcGxlbWVudCBicGZfZ2V0X2N1cnJlbnRfdGFzaygpIGFuZCBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKSBpbmxpbmUuICovXG4gXHRcdGlmICgoaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0ZVTkNfZ2V0X2N1cnJlbnRfdGFzayB8fCBpbnNuLVx1MDAzZWltbSA9PSBCUEZfRlVOQ19nZXRfY3VycmVudF90YXNrX2J0ZikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBicGZfdmVyaWZpZXJfaW5saW5lc19oZWxwZXJfY2FsbChlbnYsIGluc24tXHUwMDNlaW1tKSkge1xuJiM0MztcdFx0XHRwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XG4gXHRcdFx0aW5zbl9idWZbMF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgKHUzMikodW5zaWduZWQgbG9uZylcdTAwMjZjdXJyZW50X3Rhc2spO1xuIFx0XHRcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xuIFx0XHRcdGluc25fYnVmWzJdID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBkZTgxNjA2M2FlNjNkMC4uZTJlZjc4MzZiN2I1MDcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTE3ODczLDYgJiM0MzsxNzg3Myw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdFx0fVxuIFx0XHRlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEgPSAodm9pZCAqKW1hcDtcbiYjNDM7XHRcdGVudi1cdTAwM2Vwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XG4gXHRcdGlmICghYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSkpIHtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7YXJlbmEmIzM5O3MgdXNlciBhZGRyZXNzIG11c3QgYmUgc2V0IHZpYSBtYXBfZXh0cmEgb3IgbW1hcCgpXFxuXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xNzkyNiw2ICYjNDM7MTc5MjcsNyBAQCBzdGF0aWMgaW50IF9fYWRkX3VzZWRfbWFwKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0XHRlbnYtXHUwMDNlaW5zbl9hcnJheV9tYXBzW2Vudi1cdTAwM2VpbnNuX2FycmF5X21hcF9jbnQmIzQzOyYjNDM7XSA9IG1hcDtcbiYjNDM7XHRcdGVudi1cdTAwM2Vwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XG4gXHR9XG4gXG4gXHRyZXR1cm4gZW52LVx1MDAzZXVzZWRfbWFwX2NudCAtIDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjE6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7U01QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDssCiAgICAmIzM0O2NoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHkmIzM0OywKICAgICYjMzQ7X19hZGRfdXNlZF9tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBmb3JjZSBKSVQgY29tcGlsYXRpb24gZm9yIHByb2dyYW1zIHRoYXQgdXNlIHBlci1DUFUgbWFwcywgc3BlY2lmaWMgQlBGIGhlbHBlcnMgKGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCwgYnBmX2dldF9jdXJyZW50X3Rhc2ssIGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZiksIGFyZW5hIG1hcHMsIGFuZCBpbnN0cnVjdGlvbiBhcnJheSBtYXBzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGVuZm9yY2VzIEpJVCByZXF1aXJlbWVudHMgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBieXBhc3Nlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzU5Mjk2OTc1NjcxMWQ2ZjU5MmVkZjZhMTNiNmZjNjUyZTQ4NTMyYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDE1IDIxOjM1OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmgKaW5kZXggMzExODFlMGMyYjgwMWIuLmQ5NTQyMTI3ZGZkZmMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTQxNjMsNyAmIzQzOzQxNjMsNyBAQCBicGZfcHJvZ191cGRhdGVfaW5zbl9wdHJzKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICpvZmZzZXRzLCB2b2lkICppbWFnZSkKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX21hcF9zdXBwb3J0c19jcHVfZmxhZ3MoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpCiYjNDM7c3RhdGljIGlubGluZSBib29sIGJwZl9tYXBfaXNfcGVyY3B1X21hcChlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSkKIHsKIAlzd2l0Y2ggKG1hcF90eXBlKSB7CiAJY2FzZSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZOgpAQCAtNDE5MCw3ICYjNDM7NDE5MCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3Moc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGZsYWdzLCB1NjQgYWxsCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGZsYWdzICZhbXA7IChCUEZfRl9DUFUgfCBCUEZfRl9BTExfQ1BVUykpIHsKLQkJaWYgKCFicGZfbWFwX3N1cHBvcnRzX2NwdV9mbGFncyhtYXAtJmd0O21hcF90eXBlKSkKJiM0MzsJCWlmICghYnBmX21hcF9pc19wZXJjcHVfbWFwKG1hcC0mZ3Q7bWFwX3R5cGUpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQ1BVKSAmYW1wOyZhbXA7IChmbGFncyAmYW1wOyBCUEZfRl9BTExfQ1BVUykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCmluZGV4IGQzYmU5NzI3MTRiMjJjLi5hMGJkZGFkYTc5NjRlNyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9maXh1cHMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCkBAIC0yMDA4LDYgJiM0MzsyMDA4LDkgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCQl9CiAKJiM0MzsJCQkJaWYgKGJwZl9tYXBfaXNfcGVyY3B1X21hcChtYXBfcHRyLSZndDttYXBfdHlwZSkpCiYjNDM7CQkJCQlwcm9nLSZndDtqaXRfcmVxdWlyZWQgPSB0cnVlOwomIzQzOwogCQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsCiAJCQkJCQkJICAgICAgIGluc25fYnVmLCBjbnQpOwogCQkJCWlmICghbmV3X3Byb2cpCkBAIC0yMTEyLDYgJiM0MzsyMTE1LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJICogd2F5LCBpdCYjMzk7cyBmaW5lIHRvIGJhY2sgb3V0IHRoaXMgaW5saW5pbmcgbG9naWMKIAkJCSAqLwogI2lmZGVmIENPTkZJR19TTVAKJiM0MzsJCQlwcm9nLSZndDtqaXRfcmVxdWlyZWQgPSB0cnVlOwogCQkJaW5zbl9idWZbMF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgKHUzMikodW5zaWduZWQgbG9uZykmYW1wO2NwdV9udW1iZXIpOwogCQkJaW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7CiAJCQlpbnNuX2J1ZlsyXSA9IEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7CkBAIC0yMTMzLDYgJiM0MzsyMTM3LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkvKiBJbXBsZW1lbnQgYnBmX2dldF9jdXJyZW50X3Rhc2soKSBhbmQgYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCkgaW5saW5lLiAqLwogCQlpZiAoKGluc24tJmd0O2ltbSA9PSBCUEZfRlVOQ19nZXRfY3VycmVudF90YXNrIHx8IGluc24tJmd0O2ltbSA9PSBCUEZfRlVOQ19nZXRfY3VycmVudF90YXNrX2J0ZikgJmFtcDsmYW1wOwogCQkgICAgYnBmX3ZlcmlmaWVyX2lubGluZXNfaGVscGVyX2NhbGwoZW52LCBpbnNuLSZndDtpbW0pKSB7CiYjNDM7CQkJcHJvZy0mZ3Q7aml0X3JlcXVpcmVkID0gdHJ1ZTsKIAkJCWluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpJmFtcDtjdXJyZW50X3Rhc2spOwogCQkJaW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7CiAJCQlpbnNuX2J1ZlsyXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IGRlODE2MDYzYWU2M2QwLi5lMmVmNzgzNmI3YjUwNyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMTc4NzMsNiAmIzQzOzE3ODczLDcgQEAgc3RhdGljIGludCBjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJCX0KIAkJZW52LSZndDtwcm9nLSZndDthdXgtJmd0O2FyZW5hID0gKHZvaWQgKiltYXA7CiYjNDM7CQllbnYtJmd0O3Byb2ctJmd0O2ppdF9yZXF1aXJlZCA9IHRydWU7CiAJCWlmICghYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KGVudi0mZ3Q7cHJvZy0mZ3Q7YXV4LSZndDthcmVuYSkpIHsKIAkJCXZlcmJvc2UoZW52LCAmIzM0O2FyZW5hJiMzOTtzIHVzZXIgYWRkcmVzcyBtdXN0IGJlIHNldCB2aWEgbWFwX2V4dHJhIG9yIG1tYXAoKVxuJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNzkyNiw2ICYjNDM7MTc5MjcsNyBAQCBzdGF0aWMgaW50IF9fYWRkX3VzZWRfbWFwKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfbWFwICptYXApCiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJCWVudi0mZ3Q7aW5zbl9hcnJheV9tYXBzW2Vudi0mZ3Q7aW5zbl9hcnJheV9tYXBfY250JiM0MzsmIzQzO10gPSBtYXA7CiYjNDM7CQllbnYtJmd0O3Byb2ctJmd0O2ppdF9yZXF1aXJlZCA9IHRydWU7CiAJfQogCiAJcmV0dXJuIGVudi0mZ3Q7dXNlZF9tYXBfY250IC0gMTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzNgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgRml4dXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBpdCYjMzk7cyBhIGZvY3VzZWQgY2hhbmdlIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgdG91Y2hpbmcgdXBvbiB0aGUgdmVyaWZpZXIgYW5kIGZpeHVwcywgc3BlY2lmaWNhbGx5LiBJdCYjMzk7cyBtb2RpZnlpbmcgYSBmZXcga2V5IGZpbGVzOiBgaW5jbHVkZS9saW51eC9icGYuaGAsIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCwgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgcmVuYW1pbmcgYGJwZl9tYXBfc3VwcG9ydHNfY3B1X2ZsYWdzYCB0byBgYnBmX21hcF9pc19wZXJjcHVfbWFwYCwgd2hpY2ggZmVlbHMgbGlrZSBhIG1vcmUgZGVzY3JpcHRpdmUgbmFtZSwgYSBnb29kIG1vdmUgcmVhbGx5LgoKVGhlIGNydWNpYWwgYml0LCB0aG91Z2gsIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHByb2ctJmd0O2ppdF9yZXF1aXJlZCA9IHRydWVgIGluIHNldmVyYWwgc3BvdHMgd2l0aGluIGBicGZfZG9fbWlzY19maXh1cHNgLCBhbmQgYGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlgIGFuZCBgX19hZGRfdXNlZF9tYXBgLiBSaWdodCwgc28gdGhpcyBtZWFucyB0aGF0IHByb2dyYW1zICpyZWx5aW5nKiBvbiB0aGlzIG1vZGlmaWVkIGxvZ2ljIHdpbGwgbm93ICpyZXF1aXJlKiBKSVQgY29tcGlsYXRpb24uIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY29uc3RyYWludCBhcyBpdCBpbXBhY3RzIHBlcmZvcm1hbmNlIGFuZCBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eSBjb25jZXJucy4KClRoZSBhZmZlY3RlZCBzY2VuYXJpb3MgYXJlIHByZXR0eSBjbGVhcjogYW55IHByb2dyYW0gdXRpbGl6aW5nIHBlci1DUFUgbWFwcywgYGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZGAsIGBicGZfZ2V0X2N1cnJlbnRfdGFza2AsIGBicGZfZ2V0X2N1cnJlbnRfdGFza19idGZgLCBhcmVuYSBtYXBzLCBhbmQgaW5zdHJ1Y3Rpb24gYXJyYXkgbWFwcy4gSXQgbWFrZXMgc2Vuc2UsIHRoZXNlIGZlYXR1cmVzIG9mdGVuIGludm9sdmUgZHluYW1pYyBvciBwZXItQ1BVIGRhdGEgYWNjZXNzIHRoYXQgYmVuZWZpdHMgYSBKSVQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYmV0dGVyLiBCUEYgaXMgZW5hYmxlZCB2aWEgYENPTkZJR19CUEZfU1lTQ0FMTGAsIHRoYXQmIzM5O3MgdGhlIGJhc2UgcmVxdWlyZW1lbnQuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbmZpZ3Mgc3Vycm91bmRpbmcgdGhlc2UgZnVuY3Rpb25zOiBgYnBmX2RvX21pc2NfZml4dXBzYCwgYGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlgLCBhbmQgYF9fYWRkX3VzZWRfbWFwYC4gSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlncyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgZnVuY3Rpb25zIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiBob3cgdGhleSYjMzk7cmUgdXRpbGl6ZWQgZWxzZXdoZXJlLCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucyBhcmUuIEdvdHRhIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbmZpZyBkZXBlbmRlbmNpZXMsIG9yIGNvcm5lciBjYXNlcyBpbiB0aGUgc3lzdGVtIHRoYXQmIzM5O2xsIGJlIGFmZmVjdGVkLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDIxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE2NTY9aW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE2NTc6aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTY1OC1cbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE0NTE9c3RhdGljIGludCBhZGRfaGlkZGVuX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgaW50IGxlbilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE0NzktICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE0ODA6aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9maXh1cHMuYy0xNDgxLXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAwMDQ9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjE2LVx0aWYgKHJldCA9PSAwKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMjE3Olx0XHRyZXQgPSBicGZfZG9fbWlzY19maXh1cHMoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIxOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAyMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTYyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoaXMgQlBGIFBhdGNoKioKCkFscmlnaHQsIHNvIHRoZSBwYXRjaCBpcyBnb2luZyBzdHJhaWdodCBpbnRvIHRoZSBjb3JlIEJQRiB2ZXJpZmllciwgdGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gbm90ZS4gQW5kIGEgcXVpY2sgcmVtaW5kZXIgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLCBzbyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGRlbHZlIGZ1cnRoZXIuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgaW1wYWN0IG9uIGBfX2FkZF91c2VkX21hcGAgYW5kIHRoZSBmdW5jdGlvbiBgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eWAuIFRoZXNlIGFyZSBrZXkgYXJlYXMsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gbWFwIGludGVyYWN0aW9ucywgYW5kIHRoaXMgcGF0Y2ggd2lsbCB1bmRvdWJ0ZWRseSBoYXZlIHNvbWUgcmlwcGxlIGVmZmVjdHMgdGhlcmUgdGhhdCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQuIEkgd2lsbCBoYXZlIHRvIGVuc3VyZSB0aGF0IGFsbCBvZiB0aGUgbWFwIGludGVyYWN0aW9ucyBhbmQgdmVyaWZpZXIgY2hlY2tzIGFyZSBzdGlsbCBhcHByb3ByaWF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAyMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FkZF91c2VkX21hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc3Nzg9c3RhdGljIGludCBjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3ODg1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3ODg2OnN0YXRpYyBpbnQgX19hZGRfdXNlZF9tYXAoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9tYXAgKm1hcClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzg4Ny17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3OTQwPXN0YXRpYyBpbnQgYWRkX3VzZWRfbWFwKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBmZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NTAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5NTE6XHRyZXR1cm4gX19hZGRfdXNlZF9tYXAoZW52LCBtYXApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTUyLX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc5NTQ9c3RhdGljIGludCBmZF9hcnJheV9nZXRfbWFwX2lkeF9jb250aW51b3VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTY3LVx0fVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTY4Olx0cmV0dXJuIF9fYWRkX3VzZWRfbWFwKGVudiwgbWFwKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk2OS19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTYxPXN0YXRpYyBpbnQgYWRkX2ZkX2Zyb21fZmRfYXJyYXkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGlkeCwgaW50IGZkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU2OS1cdGlmICghSVNfRVJSKG1hcCkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTU3MDpcdFx0ZXJyID0gX19hZGRfdXNlZF9tYXAoZW52LCBtYXApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTcxLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU5NS0gKiB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0IG1hcHMgYW5kIEJURnMgYSBwcm9ncmFtIGNhbiBiaW5kIGlzIGVuZm9yY2VkIHdoZW5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTU5NjogKiBlYWNoIGVudHJ5IGlzIHJlc29sdmVkIGJ5IF9fYWRkX3VzZWRfbWFwKCkgYW5kIF9fYWRkX3VzZWRfYnRmKCkuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1OTctICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk1MwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDMxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEpJVCBGb3JjaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgZm9yY2luZyB0aGUgSnVzdC1Jbi1UaW1lIChKSVQpIGNvbXBpbGVyIGZvciBzcGVjaWZpYyBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIHByb2dyYW1zLiBUaGUga2V5IGhlcmUgaXMgdGhpcyBsaW5lOiBgcHJvZy0mZ3Q7aml0X3JlcXVpcmVkID0gdHJ1ZTtgIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4KCk15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCBvciBwb3RlbnRpYWxseSBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZTogYGJwZl9kb19taXNjX2ZpeHVwc2AsIGBjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5YCwgYW5kIGBfX2FkZF91c2VkX21hcGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgb2YgdGhlIGFkanVzdG1lbnQuIGBicGZfZG9fbWlzY19maXh1cHNgIGlzIGNhbGxlZCBmb3IgZXZlcnkgQlBGIHByb2dyYW0gbG9hZGVkLCB3aGljaCBtYWtlcyBpdCBhIHBvdGVudGlhbGx5IGhvdCBzcG90LiBIb3dldmVyLCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIHZlcmlmaWNhdGlvbiwgbm90IHRoZSBleGVjdXRpb24gcGF0aCwgc28gdGhhdCYjMzk7cyBnb29kLiBgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eWAgYW5kIGBfX2FkZF91c2VkX21hcGAgYXJlIGFsc28gdmVyaWZpZXIgZnVuY3Rpb25zLCBzbyB0aGV5IGFyZSBub3QgZGlyZWN0bHkgaW4gdGhlIHByb2dyYW0gZXhlY3V0aW9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGJwZl9kb19taXNjX2ZpeHVwc2AgaXMgdGhlIGNvcnJlY3QgZm9jdXMuIEl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgYGJwZl9jaGVja2AsIHdoaWNoIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIHNvIGl0IHNob3VsZCBiZS4gYGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlgIGFuZCBgX19hZGRfdXNlZF9tYXBgIHdpbGwgYWxzbyBiZSBnb29kIHRvIHJldmlldy4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMuIEkga25vdyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIEJQRi4gVGhlIHBhdGNoIG1lbnRpb25zIGBDT05GSUdfU01QYCwgd2hpY2ggaXMgY29tbW9uLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGtlZXAgdHJhY2sgb2YgaXRzIGludGVyYWN0aW9uLiBJIHN1c3BlY3QgYENPTkZJR19CUEZfSklUYCBpcyBwcm9iYWJseSByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoZSBKSVQgZW5mb3JjZW1lbnQuIFRoZSBgaml0X3JlcXVpcmVkYCBtaWdodCBiZSBkZXNpZ25lZCB0byByZWplY3QgdGhlIHByb2dyYW0gaWYgdGhlIEpJVCBpcyBub3QgZW5hYmxlZCBvciByZXF1ZXN0ZWQuCgpGaW5hbGx5LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSB1c2FnZSBvZiBgaml0X3JlcXVpcmVkYCB0byBmdWxseSBncmFzcCB0aGUgc2NvcGUgYW5kIGVmZmVjdHMgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aml0X3JlcXVpcmVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MTg2NT1zdHJ1Y3QgYnBmX3Byb2cge1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtMTg2OC1cdFx0XHRcdGppdF9yZXF1ZXN0ZWQ6MSwvKiBhcmNocyBuZWVkIHRvIEpJVCB0aGUgcHJvZyAqL1xuaW5jbHVkZS9saW51eC9icGYuaDoxODY5Olx0XHRcdFx0aml0X3JlcXVpcmVkOjEsXHQvKiBwcm9ncmFtIHN0cmljdGx5IHJlcXVpcmVzIEpJVCBjb21waWxlciAqL1xuaW5jbHVkZS9saW51eC9icGYuaC0xODcwLVx0XHRcdFx0Z3BsX2NvbXBhdGlibGU6MSwgLyogSXMgZmlsdGVyIEdQTCBjb21wYXRpYmxlPyAqL1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTEwMD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2FsbG9jX25vX3N0YXRzKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfZXh0cmFfZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMTI4LVx0ZnAtXHUwMDNlaml0X3JlcXVlc3RlZCA9IGVicGZfaml0X2VuYWJsZWQoKTtcbmtlcm5lbC9icGYvY29yZS5jOjEyOTpcdGZwLVx1MDAzZWppdF9yZXF1aXJlZCA9IElTX0VOQUJMRUQoQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OKTtcbmtlcm5lbC9icGYvY29yZS5jLTEzMC1cdGZwLVx1MDAzZWJsaW5kaW5nX3JlcXVlc3RlZCA9IGJwZl9qaXRfYmxpbmRpbmdfZW5hYmxlZChmcCk7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjY2OD1zdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpmcCxcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjczLVx0ICovXG5rZXJuZWwvYnBmL2NvcmUuYzoyNjc0Olx0Ym9vbCBqaXRfbmVlZGVkID0gZnAtXHUwMDNlaml0X3JlcXVpcmVkO1xua2VybmVsL2JwZi9jb3JlLmMtMjY3NS1cbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTEzNzY9aW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE0MDUtI2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvZml4dXBzLmM6MTQwNjpcdGlmIChwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCkge1xua2VybmVsL2JwZi9maXh1cHMuYy0xNDA3LVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7cHJvZ3JhbSByZXF1aXJlcyBCUEYgSklUIGNvbXBpbGVyIGJ1dCBpdCBpcyBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE0ODA9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTg0My1cdFx0aWYgKGJwZl9qaXRfaW5saW5lc19oZWxwZXJfY2FsbChpbnNuLVx1MDAzZWltbSkpIHtcbmtlcm5lbC9icGYvZml4dXBzLmM6MTg0NDpcdFx0XHRwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IDE7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NDUtXHRcdFx0Z290byBuZXh0X2luc247XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMDExLVx0XHRcdFx0aWYgKGJwZl9tYXBfaXNfcGVyY3B1X21hcChtYXBfcHRyLVx1MDAzZW1hcF90eXBlKSlcbmtlcm5lbC9icGYvZml4dXBzLmM6MjAxMjpcdFx0XHRcdFx0cHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO1xua2VybmVsL2JwZi9maXh1cHMuYy0yMDEzLVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjExNy0jaWZkZWYgQ09ORklHX1NNUFxua2VybmVsL2JwZi9maXh1cHMuYzoyMTE4Olx0XHRcdHByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMjExOS1cdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAodTMyKSh1bnNpZ25lZCBsb25nKVx1MDAyNmNwdV9udW1iZXIpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjEzOS1cdFx0ICAgIGJwZl92ZXJpZmllcl9pbmxpbmVzX2hlbHBlcl9jYWxsKGVudiwgaW5zbi1cdTAwM2VpbW0pKSB7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxNDA6XHRcdFx0cHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO1xua2VybmVsL2JwZi9maXh1cHMuYy0yMTQxLVx0XHRcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2Y3VycmVudF90YXNrKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjcyMT1pbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzYxLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjI3NjI6XHRlbnYtXHUwMDNlcHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQgPSAxO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTI3NjMtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3Nzc4PXN0YXRpYyBpbnQgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzg3NS1cdFx0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWFyZW5hID0gKHZvaWQgKiltYXA7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc4NzY6XHRcdGVudi1cdTAwM2Vwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc4NzctXHRcdGlmICghYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSkpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc4ODY9c3RhdGljIGludCBfX2FkZF91c2VkX21hcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzkyOS1cdFx0ZW52LVx1MDAzZWluc25fYXJyYXlfbWFwc1tlbnYtXHUwMDNlaW5zbl9hcnJheV9tYXBfY250JiM0MzsmIzQzO10gPSBtYXA7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5MzA6XHRcdGVudi1cdTAwM2Vwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5MzEtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAyMQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgZm9yY2luZyB0aGUgSklUIHJlcXVpcmVtZW50IHRvIGJlIGFjdGl2ZSBmb3IgYW55IEJQRiBwcm9ncmFtIHRoYXQgdXNlcyBwZXItQ1BVIG1hcHMsIHNwZWNpZmljIEJQRiBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZGAsIG9yIGNlcnRhaW4gbWFwIHR5cGVzIHN1Y2ggYXMgYXJlbmEgYW5kIGluc3RydWN0aW9uIGFycmF5IG1hcHMuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIHBlcmZvcm1hbmNlIHR3ZWFrLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyB0aG9yb3VnaGx5LgoKTXkgcHJpbWFyeSBmb2N1cyBoZXJlIG5lZWRzIHRvIGJlIHRoZSBgYnBmX2RvX21pc2NfZml4dXBzYCwgYGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlgLCBhbmQgYF9fYWRkX3VzZWRfbWFwYCBmdW5jdGlvbnM7IEkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gaG93IHRoZXkgaW50ZXJhY3Qgbm93LCB3aXRoIHRoaXMgYGppdF9yZXF1aXJlZGAgZmxhZyBiZWluZyBzZXQuIEkgYWxzbyBuZWVkIHRvIGtlZXAgYEJQRl9TWVNDQUxMYCBhbmQgYFNNUGAgY29uZmlndXJhdGlvbnMgaW4gbWluZCBhcyB0aGV5JiMzOTtsbCBsaWtlbHkgcGxheSBhIHJvbGUgaW4gdGhpcy4KClRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoYXQgaGFwcGVucyBpZiB0aGUgSklUIGlzbiYjMzk7dCBlbmFibGVkPyBJZiBgQlBGX0pJVGAgaXMgZGlzYWJsZWQsIHRoZSB2ZXJpZmllciAqc2hvdWxkKiBub3cgcmVqZWN0IHRoZSBwcm9ncmFtIG91dHJpZ2h0LCBiZWNhdXNlIGBqaXRfcmVxdWlyZWRgIGlzIHRydWUgYnV0IG5vIEpJVCBpcyBhdmFpbGFibGUgdG8gbWVldCB0aGF0IHJlcXVpcmVtZW50LiBCdXQgd2FpdCwgSSByZWNhbGwgYGJwZl9maXh1cF9jYWxsX2FyZ3NgIHBlcmZvcm1pbmcgc29tZSBjaGVja3MhIERvZXMgaXQgYWxyZWFkeSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYHByb2ctJmd0O2ppdF9yZXF1aXJlZGAgaXMgc2V0LCBhbmQgaXQgd291bGQgcmVqZWN0IHRoZSBwcm9ncmFtIGlmIGBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05gIGlzbiYjMzk7dCBzZXQsIGFuZCBpZiB0aGVyZSYjMzk7cyBubyBKSVQgYXZhaWxhYmxlPyBJIHNob3VsZCBnbyBiYWNrIGFuZCByZXZpZXcgdGhlIGBicGZfZml4dXBfY2FsbF9hcmdzYCBmdW5jdGlvbiB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIEl0IGlzIHZpdGFsIHRvIGdldCB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlc2UgcGFydHMgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ZpeHVwX2NhbGxfYXJncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE2NTU9aW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE2NTY6aW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NTctaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTEyOTY9aW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEzNzUtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEzNzY6aW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvZml4dXBzLmMtMTM3Ny17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMDA0PWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIyOC1cdGlmIChyZXQgPT0gMClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDIyOTpcdFx0cmV0ID0gYnBmX2ZpeHVwX2NhbGxfYXJncyhlbnYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjMwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAyMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTc5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjoKCioqQW5hbHl6aW5nIGBicGZfZml4dXBfY2FsbF9hcmdzYCBhbmQgYGppdF9yZXF1aXJlZGAqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGppdF9yZXF1aXJlZGAgZmxhZyBpbnRlcmFjdHMgd2l0aCB0aGUgY2FsbCBhcmd1bWVudCBoYW5kbGluZyBpbiB0aGUgQlBGIHdvcmxkLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBicGZfZml4dXBfY2FsbF9hcmdzYCBmdW5jdGlvbi4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IGl0JiMzOTtzIHVzZWQgYW5kIHdoYXQgY29uZGl0aW9uYWwgbG9naWMgaXMgaW4gcGxhY2UgYXJvdW5kIHRoYXQgYGppdF9yZXF1aXJlZGAgZmxhZy4gSSBzdXNwZWN0IHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgdGhlIGtleSB0byBlbnN1cmluZyB0aGF0IEpJVCBjb21waWxhdGlvbiBpcyB0cmlnZ2VyZWQgYXBwcm9wcmlhdGVseSB3aGVuIGRlYWxpbmcgd2l0aCBhcmd1bWVudHMgdGhhdCByZXF1aXJlIGl0LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY29uZGl0aW9ucyBhcm91bmQgb3B0aW1pemF0aW9uLCBwb3RlbnRpYWwgcmVnaXN0ZXIgc3BpbGxzIG9yIGxvYWRzLCBvciBtYXliZSBldmVuIGZ1bmN0aW9uIGlubGluaW5nIGRlY2lzaW9ucywgYWxsIGluZmx1ZW5jZWQgYnkgdGhhdCBgaml0X3JlcXVpcmVkYCBzaWduYWwuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgY29udHJvbCBmbG93IGFuZCBpZGVudGlmeSB0aGUgZXhhY3QgcG9pbnRzIHdoZXJlIGBqaXRfcmVxdWlyZWRgIGlzIGNoZWNrZWQgYW5kIGFjdGVkIHVwb24uIFRoaXMgY291bGQgcmV2ZWFsIHNvbWUgaW50ZXJlc3RpbmcgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAyMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZml4dXBzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzc2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNzY6XHRpbnQgYnBmX2ZpeHVwX2NhbGxfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuMTM3NzpcdHtcbjEzNzg6XHQjaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxuMTM3OTpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nID0gZW52LVx1MDAzZXByb2c7XG4xMzgwOlx0XHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBwcm9nLVx1MDAzZWluc25zaTtcbjEzODE6XHRcdGludCBkZXB0aDtcbjEzODI6XHQjZW5kaWZcbjEzODM6XHRcdGludCBpLCBlcnIgPSAwO1xuMTM4NDpcdFxuMTM4NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZW52LVx1MDAzZXN1YnByb2dfY250OyBpJiM0MzsmIzQzOykge1xuMTM4NjpcdFx0XHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IFx1MDAyNmVudi1cdTAwM2VzdWJwcm9nX2luZm9baV07XG4xMzg3Olx0XHRcdHUxNiBvdXRnb2luZyA9IHN1YnByb2ctXHUwMDNlc3RhY2tfYXJnX2NudCAtIGJwZl9pbl9zdGFja19hcmdfY250KHN1YnByb2cpO1xuMTM4ODpcdFxuMTM4OTpcdFx0XHRpZiAoc3VicHJvZy1cdTAwM2VtYXhfb3V0X3N0YWNrX2FyZ19jbnQgXHUwMDNlIG91dGdvaW5nKSB7XG4xMzkwOlx0XHRcdFx0dmVyYm9zZShlbnYsXG4xMzkxOlx0XHRcdFx0XHRcJiMzNDtmdW5jIyVkIHdyaXRlcyAldSBzdGFjayBhcmcgc2xvdHMsIGJ1dCBjYWxscyBvbmx5IHJlcXVpcmUgJXVcXG5cJiMzNDssXG4xMzkyOlx0XHRcdFx0XHRpLCBzdWJwcm9nLVx1MDAzZW1heF9vdXRfc3RhY2tfYXJnX2NudCwgb3V0Z29pbmcpO1xuMTM5MzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTM5NDpcdFx0XHR9XG4xMzk1Olx0XHR9XG4xMzk2Olx0XG4xMzk3Olx0XHRpZiAoZW52LVx1MDAzZXByb2ctXHUwMDNlaml0X3JlcXVlc3RlZCBcdTAwMjZcdTAwMjZcbjEzOTg6XHRcdCAgICAhYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eCkpIHtcbjEzOTk6XHRcdFx0ZXJyID0gYnBmX2ppdF9zdWJwcm9ncyhlbnYpO1xuMTQwMDpcdFx0XHRpZiAoZXJyID09IDApXG4xNDAxOlx0XHRcdFx0cmV0dXJuIDA7XG4xNDAyOlx0XHRcdGlmIChlcnIgPT0gLUVGQVVMVClcbjE0MDM6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTQwNDpcdFx0fVxuMTQwNTpcdCNpZm5kZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OXG4xNDA2Olx0XHRpZiAocHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQpIHtcbjE0MDc6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3Byb2dyYW0gcmVxdWlyZXMgQlBGIEpJVCBjb21waWxlciBidXQgaXQgaXMgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4xNDA4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTQwOTpcdFx0fVxuMTQxMDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZW52LVx1MDAzZXN1YnByb2dfY250OyBpJiM0MzsmIzQzOykge1xuMTQxMTpcdFx0XHRpZiAoYnBmX2luX3N0YWNrX2FyZ19jbnQoXHUwMDI2ZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXSkpIHtcbjE0MTI6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7c3RhY2sgYXJncyBhcmUgbm90IHN1cHBvcnRlZCBpbiBub24tSklUZWQgcHJvZ3JhbXNcXG5cJiMzNDspO1xuMTQxMzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTQxNDpcdFx0XHR9XG4xNDE1Olx0XHR9XG4xNDE2Olx0XHRpZiAoZW52LVx1MDAzZXN1YnByb2dfY250IFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNldGFpbF9jYWxsX3JlYWNoYWJsZSkge1xuMTQxNzpcdFx0XHQvKiBXaGVuIEpJVCBmYWlscyB0aGUgcHJvZ3Mgd2l0aCBicGYyYnBmIGNhbGxzIGFuZCB0YWlsX2NhbGxzXG4xNDE4Olx0XHRcdCAqIGhhdmUgdG8gYmUgcmVqZWN0ZWQsIHNpbmNlIGludGVycHJldGVyIGRvZXNuJiMzOTt0IHN1cHBvcnQgdGhlbSB5ZXQuXG4xNDE5Olx0XHRcdCAqL1xuMTQyMDpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7dGFpbF9jYWxscyBhcmUgbm90IGFsbG93ZWQgaW4gbm9uLUpJVGVkIHByb2dyYW1zIHdpdGggYnBmLXRvLWJwZiBjYWxsc1xcblwmIzM0Oyk7XG4xNDIxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTQyMjpcdFx0fVxuMTQyMzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvZy1cdTAwM2VsZW47IGkmIzQzOyYjNDM7LCBpbnNuJiM0MzsmIzQzOykge1xuMTQyNDpcdFx0XHRpZiAoYnBmX3BzZXVkb19mdW5jKGluc24pKSB7XG4xNDI1Olx0XHRcdFx0LyogV2hlbiBKSVQgZmFpbHMgdGhlIHByb2dzIHdpdGggY2FsbGJhY2sgY2FsbHNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0NwoJCQkJCQkJb3V0cHV0OiAxNzgKCQkJCQkJCXRob3VnaHRzOiA1MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBKSVQgUmVxdWlyZW1lbnRzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpczogdGhlIGNvZGUmIzM5O3MgbG9naWMgY29uY2VybmluZyBCUEYgSklUIHJlcXVpcmVtZW50cyBpcyBiYXNlZCBvbiBgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OYCBhbmQgYHByb2ctJmd0O2ppdF9yZXF1aXJlZGAuIElmIGBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05gIGlzbiYjMzk7dCBzZXQsIGFuZCBgcHJvZy0mZ3Q7aml0X3JlcXVpcmVkYCBpcyB0cnVlLCB0aGUgcHJvZ3JhbSBpcyByZWplY3RlZC4gSG93ZXZlciwgaWYgYENPTkZJR19CUEZfSklUX0FMV0FZU19PTmAgaXMgc2V0LCB0aGVuIGBwcm9nLSZndDtqaXRfcmVxdWlyZWRgIGRlZmF1bHRzIHRvIHRydWUsIGFuZCBpdCAqZG9lc24mIzM5O3QqIHJlamVjdCBpdC4gVGhlIHRyaWNraWVyIHBhcnQgaXMgd2hlbiBgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OYCAqaXNuJiMzOTt0KiBzZXQsIGJ1dCBgcHJvZy0mZ3Q7aml0X3JlcXVpcmVkYCBpcyB0cnVlOyBpbiB0aGlzIGNhc2UsIGl0IGFwcGVhcnMgdG8gcmVseSBvbiBgYnBmX2ppdF9zdWJwcm9nc2Agc3VjY2VlZGluZy4gSSBzZWUgdGhhdCBgYnBmX2ppdF9zdWJwcm9nc2AgaXMgY2FsbGVkIGlmIGBqaXRfcmVxdWVzdGVkYCBhbmQgcmV0dXJucyAwIG9uIHN1Y2Nlc3MuIElmIGl0IGZhaWxzIG9yIGBqaXRfcmVxdWVzdGVkYCBpcyBmYWxzZSwgaXQgcHJvY2VlZHMgaW50byB0aGUgYCNpZm5kZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OYCBibG9jay4gU28gdGhlIGNvbmNsdXNpb24gaGVyZSBpcyB0aGF0IHdoZW4gYHByb2ctJmd0O2ppdF9yZXF1aXJlZGAgaXMgdHJ1ZSwgdGhlIEpJVCAqbXVzdCogc3VjY2VlZC4KClRvIHByb3Blcmx5IHRlc3QgdGhpcywgSSYjMzk7ZCB3YW50IHRvIGVuYWJsZSBgQlBGX0pJVGAgYW5kIGBCUEZfSklUX0FMV0FZU19PTmAsIG9yIHNpbXBseSBgQlBGX0pJVGAuIEdvb2QgbmV3cywgc3l6Ym90IGFscmVhZHkgdXNlcyB0aGVzZSwgc28gSSBvbmx5IG5lZWQgdG8gbm90ZSBgQlBGX1NZU0NBTExgIGFuZCBgU01QYCBmb3IgbXkgY29uZmlndXJhdGlvbi4KCkFscmlnaHQsIG5vdyBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgY2hhbmdpbmcgYGJwZl9tYXBfc3VwcG9ydHNfY3B1X2ZsYWdzYCB0byBgYnBmX21hcF9pc19wZXJjcHVfbWFwYCwgd2hpY2ggbG9va3MgaW5ub2N1b3VzLCBidXQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEpJVCwgaXQgY291bGQgYmUgc2lnbmlmaWNhbnQuIFRoZSBwYXRjaCBpcyBzZXR0aW5nIGBwcm9nLSZndDtqaXRfcmVxdWlyZWQgPSB0cnVlYCBpbiBgYnBmX2RvX21pc2NfZml4dXBzYCBmb3IgcGVyY3B1IG1hcHMsIGBicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWRgLCBgYnBmX2dldF9jdXJyZW50X3Rhc2tgLCBgYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmYC4gSW4gYGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlgLCBpdCBpcyBzZXR0aW5nIGBwcm9nLSZndDtqaXRfcmVxdWlyZWQgPSB0cnVlYCBmb3IgYXJlbmEgbWFwcy4gQW5kIGluIGBfX2FkZF91c2VkX21hcGAgZm9yIGluc3RydWN0aW9uIGFycmF5IG1hcHMuIFNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGVzZSBtYXAgdHlwZXMgYW5kIHNwZWNpZmljIGluc3RydWN0aW9ucy4KClRoaXMgY29uc3RpdHV0ZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHdhcnJhbnRzIGZ1enppbmcsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgaXRzIHJlbGF0aW9uIHRvIHRoZSBKSVQuIE15IGZvY3VzIGZ1bmN0aW9ucyBmb3IgZnV6emluZyB3aWxsIGJlIGBicGZfZG9fbWlzY19maXh1cHNgLCBgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eWAsIGFuZCBgX19hZGRfdXNlZF9tYXBgLiBUaGUgcmVsZXZhbnQgY29uZmlnIGlzIGBCUEZfU1lTQ0FMTGAuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7LAogICAgJiMzNDtjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5JiMzNDssCiAgICAmIzM0O19fYWRkX3VzZWRfbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gZm9yY2UgSklUIGNvbXBpbGF0aW9uIGZvciBwcm9ncmFtcyB0aGF0IHVzZSBwZXItQ1BVIG1hcHMsIHNwZWNpZmljIEJQRiBoZWxwZXJzIChicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQsIGJwZl9nZXRfY3VycmVudF90YXNrLCBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYpLCBhcmVuYSBtYXBzLCBhbmQgaW5zdHJ1Y3Rpb24gYXJyYXkgbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBlbmZvcmNlcyBKSVQgcmVxdWlyZW1lbnRzIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgYnlwYXNzZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7LAogICAgJiMzNDtjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5JiMzNDssCiAgICAmIzM0O19fYWRkX3VzZWRfbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gZm9yY2UgSklUIGNvbXBpbGF0aW9uIGZvciBwcm9ncmFtcyB0aGF0IHVzZSBwZXItQ1BVIG1hcHMsIHNwZWNpZmljIEJQRiBoZWxwZXJzIChicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQsIGJwZl9nZXRfY3VycmVudF90YXNrLCBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYpLCBhcmVuYSBtYXBzLCBhbmQgaW5zdHJ1Y3Rpb24gYXJyYXkgbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBlbmZvcmNlcyBKSVQgcmVxdWlyZW1lbnRzIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgYnlwYXNzZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNVQyMTozNTowNy44ODQ0NTE2NTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgxNzk2ODkzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiU01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2RvX21pc2NfZml4dXBzXCIsXG4gICAgXCJjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5XCIsXG4gICAgXCJfX2FkZF91c2VkX21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gZm9yY2UgSklUIGNvbXBpbGF0aW9uIGZvciBwcm9ncmFtcyB0aGF0IHVzZSBwZXItQ1BVIG1hcHMsIHNwZWNpZmljIEJQRiBoZWxwZXJzIChicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQsIGJwZl9nZXRfY3VycmVudF90YXNrLCBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYpLCBhcmVuYSBtYXBzLCBhbmQgaW5zdHJ1Y3Rpb24gYXJyYXkgbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBlbmZvcmNlcyBKSVQgcmVxdWlyZW1lbnRzIGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBieXBhc3Nlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMjE6MzU6MDcuODg0NDU2NjkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDEwOTAyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNTkyOTY5NzU2NzExZDZmNTkyZWRmNmExM2I2ZmM2NTJlNDg1MzJiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDE1IDIxOjM1OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuaW5kZXggMzExODFlMGMyYjgwMWIuLmQ5NTQyMTI3ZGZkZmMwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuQEAgLTQxNjMsNyArNDE2Myw3IEBAIGJwZl9wcm9nX3VwZGF0ZV9pbnNuX3B0cnMoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKm9mZnNldHMsIHZvaWQgKmltYWdlKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGJwZl9tYXBfc3VwcG9ydHNfY3B1X2ZsYWdzKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21hcF9pc19wZXJjcHVfbWFwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxcbiB7XFxuIFxcdHN3aXRjaCAobWFwX3R5cGUpIHtcXG4gXFx0Y2FzZSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZOlxcbkBAIC00MTkwLDcgKzQxOTAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBmbGFncywgdTY0IGFsbFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IChCUEZfRl9DUFUgfCBCUEZfRl9BTExfQ1BVUykpIHtcXG4tXFx0XFx0aWYgKCFicGZfbWFwX3N1cHBvcnRzX2NwdV9mbGFncyhtYXAtXFx1MDAzZW1hcF90eXBlKSlcXG4rXFx0XFx0aWYgKCFicGZfbWFwX2lzX3BlcmNwdV9tYXAobWFwLVxcdTAwM2VtYXBfdHlwZSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQ1BVKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BTExfQ1BVUykpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xcbmluZGV4IGQzYmU5NzI3MTRiMjJjLi5hMGJkZGFkYTc5NjRlNyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xcbkBAIC0yMDA4LDYgKzIwMDgsOSBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHRcXHRcXHRcXHR9XFxuIFxcbitcXHRcXHRcXHRcXHRpZiAoYnBmX21hcF9pc19wZXJjcHVfbWFwKG1hcF9wdHItXFx1MDAzZW1hcF90eXBlKSlcXG4rXFx0XFx0XFx0XFx0XFx0cHJvZy1cXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcXG4rXFxuIFxcdFxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGluc25fYnVmLCBjbnQpO1xcbiBcXHRcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbkBAIC0yMTEyLDYgKzIxMTUsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdCAqIHdheSwgaXQncyBmaW5lIHRvIGJhY2sgb3V0IHRoaXMgaW5saW5pbmcgbG9naWNcXG4gXFx0XFx0XFx0ICovXFxuICNpZmRlZiBDT05GSUdfU01QXFxuK1xcdFxcdFxcdHByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XFxuIFxcdFxcdFxcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNmNwdV9udW1iZXIpO1xcbiBcXHRcXHRcXHRpbnNuX2J1ZlsxXSA9IEJQRl9NT1Y2NF9QRVJDUFVfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18wKTtcXG4gXFx0XFx0XFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xcbkBAIC0yMTMzLDYgKzIxMzcsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdC8qIEltcGxlbWVudCBicGZfZ2V0X2N1cnJlbnRfdGFzaygpIGFuZCBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKSBpbmxpbmUuICovXFxuIFxcdFxcdGlmICgoaW5zbi1cXHUwMDNlaW1tID09IEJQRl9GVU5DX2dldF9jdXJyZW50X3Rhc2sgfHwgaW5zbi1cXHUwMDNlaW1tID09IEJQRl9GVU5DX2dldF9jdXJyZW50X3Rhc2tfYnRmKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgYnBmX3ZlcmlmaWVyX2lubGluZXNfaGVscGVyX2NhbGwoZW52LCBpbnNuLVxcdTAwM2VpbW0pKSB7XFxuK1xcdFxcdFxcdHByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XFxuIFxcdFxcdFxcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNmN1cnJlbnRfdGFzayk7XFxuIFxcdFxcdFxcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xcbiBcXHRcXHRcXHRpbnNuX2J1ZlsyXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCBkZTgxNjA2M2FlNjNkMC4uZTJlZjc4MzZiN2I1MDcgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTE3ODczLDYgKzE3ODczLDcgQEAgc3RhdGljIGludCBjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXJlbmEgPSAodm9pZCAqKW1hcDtcXG4rXFx0XFx0ZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO1xcbiBcXHRcXHRpZiAoIWJwZl9hcmVuYV9nZXRfdXNlcl92bV9zdGFydChlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXJlbmEpKSB7XFxuIFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiYXJlbmEncyB1c2VyIGFkZHJlc3MgbXVzdCBiZSBzZXQgdmlhIG1hcF9leHRyYSBvciBtbWFwKClcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtMTc5MjYsNiArMTc5MjcsNyBAQCBzdGF0aWMgaW50IF9fYWRkX3VzZWRfbWFwKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfbWFwICptYXApXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdH1cXG4gXFx0XFx0ZW52LVxcdTAwM2VpbnNuX2FycmF5X21hcHNbZW52LVxcdTAwM2VpbnNuX2FycmF5X21hcF9jbnQrK10gPSBtYXA7XFxuK1xcdFxcdGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGVudi1cXHUwMDNldXNlZF9tYXBfY250IC0gMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMjE6MzU6MDguMjI2MjY1NzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NDc2MTQ2NTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJTTVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfZG9fbWlzY19maXh1cHNcIixcbiAgICBcImNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlcIixcbiAgICBcIl9fYWRkX3VzZWRfbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBmb3JjZSBKSVQgY29tcGlsYXRpb24gZm9yIHByb2dyYW1zIHRoYXQgdXNlIHBlci1DUFUgbWFwcywgc3BlY2lmaWMgQlBGIGhlbHBlcnMgKGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCwgYnBmX2dldF9jdXJyZW50X3Rhc2ssIGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZiksIGFyZW5hIG1hcHMsIGFuZCBpbnN0cnVjdGlvbiBhcnJheSBtYXBzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGVuZm9yY2VzIEpJVCByZXF1aXJlbWVudHMgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGJ5cGFzc2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM1OTI5Njk3NTY3MTFkNmY1OTJlZGY2YTEzYjZmYzY1MmU0ODUzMmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAyMTozNTowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCAzMTE4MWUwYzJiODAxYi4uZDk1NDIxMjdkZmRmYzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtNDE2Myw3ICs0MTYzLDcgQEAgYnBmX3Byb2dfdXBkYXRlX2luc25fcHRycyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqb2Zmc2V0cywgdm9pZCAqaW1hZ2UpXG4gfVxuICNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWFwX3N1cHBvcnRzX2NwdV9mbGFncyhlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcbitzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21hcF9pc19wZXJjcHVfbWFwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuIHtcbiBcdHN3aXRjaCAobWFwX3R5cGUpIHtcbiBcdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWTpcbkBAIC00MTkwLDcgKzQxOTAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBmbGFncywgdTY0IGFsbFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgKEJQRl9GX0NQVSB8IEJQRl9GX0FMTF9DUFVTKSkge1xuLVx0XHRpZiAoIWJwZl9tYXBfc3VwcG9ydHNfY3B1X2ZsYWdzKG1hcC1cdTAwM2VtYXBfdHlwZSkpXG4rXHRcdGlmICghYnBmX21hcF9pc19wZXJjcHVfbWFwKG1hcC1cdTAwM2VtYXBfdHlwZSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0NQVSkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgQlBGX0ZfQUxMX0NQVVMpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCBkM2JlOTcyNzE0YjIyYy4uYTBiZGRhZGE3OTY0ZTcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtMjAwOCw2ICsyMDA4LDkgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdFx0XHRcdH1cbiBcbitcdFx0XHRcdGlmIChicGZfbWFwX2lzX3BlcmNwdV9tYXAobWFwX3B0ci1cdTAwM2VtYXBfdHlwZSkpXG4rXHRcdFx0XHRcdHByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcbitcbiBcdFx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSxcbiBcdFx0XHRcdFx0XHRcdCAgICAgICBpbnNuX2J1ZiwgY250KTtcbiBcdFx0XHRcdGlmICghbmV3X3Byb2cpXG5AQCAtMjExMiw2ICsyMTE1LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdCAqIHdheSwgaXQncyBmaW5lIHRvIGJhY2sgb3V0IHRoaXMgaW5saW5pbmcgbG9naWNcbiBcdFx0XHQgKi9cbiAjaWZkZWYgQ09ORklHX1NNUFxuK1x0XHRcdHByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcbiBcdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAodTMyKSh1bnNpZ25lZCBsb25nKVx1MDAyNmNwdV9udW1iZXIpO1xuIFx0XHRcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xuIFx0XHRcdGluc25fYnVmWzJdID0gQlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfMCwgQlBGX1JFR18wLCAwKTtcbkBAIC0yMTMzLDYgKzIxMzcsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdC8qIEltcGxlbWVudCBicGZfZ2V0X2N1cnJlbnRfdGFzaygpIGFuZCBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKSBpbmxpbmUuICovXG4gXHRcdGlmICgoaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0ZVTkNfZ2V0X2N1cnJlbnRfdGFzayB8fCBpbnNuLVx1MDAzZWltbSA9PSBCUEZfRlVOQ19nZXRfY3VycmVudF90YXNrX2J0ZikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBicGZfdmVyaWZpZXJfaW5saW5lc19oZWxwZXJfY2FsbChlbnYsIGluc24tXHUwMDNlaW1tKSkge1xuK1x0XHRcdHByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcbiBcdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAodTMyKSh1bnNpZ25lZCBsb25nKVx1MDAyNmN1cnJlbnRfdGFzayk7XG4gXHRcdFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XG4gXHRcdFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18wLCAwKTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGRlODE2MDYzYWU2M2QwLi5lMmVmNzgzNmI3YjUwNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMTc4NzMsNiArMTc4NzMsNyBAQCBzdGF0aWMgaW50IGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHRcdH1cbiBcdFx0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWFyZW5hID0gKHZvaWQgKiltYXA7XG4rXHRcdGVudi1cdTAwM2Vwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XG4gXHRcdGlmICghYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSkpIHtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCJhcmVuYSdzIHVzZXIgYWRkcmVzcyBtdXN0IGJlIHNldCB2aWEgbWFwX2V4dHJhIG9yIG1tYXAoKVxcblwiKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xNzkyNiw2ICsxNzkyNyw3IEBAIHN0YXRpYyBpbnQgX19hZGRfdXNlZF9tYXAoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4gXHRcdGVudi1cdTAwM2VpbnNuX2FycmF5X21hcHNbZW52LVx1MDAzZWluc25fYXJyYXlfbWFwX2NudCsrXSA9IG1hcDtcbitcdFx0ZW52LVx1MDAzZXByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcbiBcdH1cbiBcbiBcdHJldHVybiBlbnYtXHUwMDNldXNlZF9tYXBfY250IC0gMTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIxOjM1OjA4LjIyNjI2NjkxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYzNzEyMjQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgRml4dXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgaXQncyBhIGZvY3VzZWQgY2hhbmdlIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgdG91Y2hpbmcgdXBvbiB0aGUgdmVyaWZpZXIgYW5kIGZpeHVwcywgc3BlY2lmaWNhbGx5LiBJdCdzIG1vZGlmeWluZyBhIGZldyBrZXkgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L2JwZi5oYCwgYGtlcm5lbC9icGYvZml4dXBzLmNgLCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gaW52b2x2ZSByZW5hbWluZyBgYnBmX21hcF9zdXBwb3J0c19jcHVfZmxhZ3NgIHRvIGBicGZfbWFwX2lzX3BlcmNwdV9tYXBgLCB3aGljaCBmZWVscyBsaWtlIGEgbW9yZSBkZXNjcmlwdGl2ZSBuYW1lLCBhIGdvb2QgbW92ZSByZWFsbHkuXG5cblRoZSBjcnVjaWFsIGJpdCwgdGhvdWdoLCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWVgIGluIHNldmVyYWwgc3BvdHMgd2l0aGluIGBicGZfZG9fbWlzY19maXh1cHNgLCBhbmQgYGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlgIGFuZCBgX19hZGRfdXNlZF9tYXBgLiBSaWdodCwgc28gdGhpcyBtZWFucyB0aGF0IHByb2dyYW1zICpyZWx5aW5nKiBvbiB0aGlzIG1vZGlmaWVkIGxvZ2ljIHdpbGwgbm93ICpyZXF1aXJlKiBKSVQgY29tcGlsYXRpb24uIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY29uc3RyYWludCBhcyBpdCBpbXBhY3RzIHBlcmZvcm1hbmNlIGFuZCBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eSBjb25jZXJucy5cblxuVGhlIGFmZmVjdGVkIHNjZW5hcmlvcyBhcmUgcHJldHR5IGNsZWFyOiBhbnkgcHJvZ3JhbSB1dGlsaXppbmcgcGVyLUNQVSBtYXBzLCBgYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkYCwgYGJwZl9nZXRfY3VycmVudF90YXNrYCwgYGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZmAsIGFyZW5hIG1hcHMsIGFuZCBpbnN0cnVjdGlvbiBhcnJheSBtYXBzLiBJdCBtYWtlcyBzZW5zZSwgdGhlc2UgZmVhdHVyZXMgb2Z0ZW4gaW52b2x2ZSBkeW5hbWljIG9yIHBlci1DUFUgZGF0YSBhY2Nlc3MgdGhhdCBiZW5lZml0cyBhIEpJVC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGJldHRlci4gQlBGIGlzIGVuYWJsZWQgdmlhIGBDT05GSUdfQlBGX1NZU0NBTExgLCB0aGF0J3MgdGhlIGJhc2UgcmVxdWlyZW1lbnQuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbmZpZ3Mgc3Vycm91bmRpbmcgdGhlc2UgZnVuY3Rpb25zOiBgYnBmX2RvX21pc2NfZml4dXBzYCwgYGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlgLCBhbmQgYF9fYWRkX3VzZWRfbWFwYC4gSSdtIGdvaW5nIHRvIGxldmVyYWdlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWdzIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBmdW5jdGlvbnMgdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIGhvdyB0aGV5J3JlIHV0aWxpemVkIGVsc2V3aGVyZSwgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBvciBpbXBsaWNhdGlvbnMgYXJlLiBHb3R0YSBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25maWcgZGVwZW5kZW5jaWVzLCBvciBjb3JuZXIgY2FzZXMgaW4gdGhlIHN5c3RlbSB0aGF0J2xsIGJlIGFmZmVjdGVkLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMzYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQyMTozNToxMy44NjMzOTEyNTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMzExODczNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZG9fbWlzY19maXh1cHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xNjU2PWludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTY1NzppbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTY1OC1cXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTQ1MT1zdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCBpbnQgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNDc5LSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTQ4MDppbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNDgxLXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDAwND1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIxNi1cXHRpZiAocmV0ID09IDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMjE3OlxcdFxcdHJldCA9IGJwZl9kb19taXNjX2ZpeHVwcyhlbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIxOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMjE6MzU6MTUuNTk2NTEzNzc1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU3OTIzNjg0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoaXMgQlBGIFBhdGNoKipcblxuQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIGdvaW5nIHN0cmFpZ2h0IGludG8gdGhlIGNvcmUgQlBGIHZlcmlmaWVyLCB0aGF0J3MgaW1wb3J0YW50IHRvIG5vdGUuIEFuZCBhIHF1aWNrIHJlbWluZGVyIHRoYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZSwgc28gSSdsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGRlbHZlIGZ1cnRoZXIuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgaW1wYWN0IG9uIGBfX2FkZF91c2VkX21hcGAgYW5kIHRoZSBmdW5jdGlvbiBgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eWAuIFRoZXNlIGFyZSBrZXkgYXJlYXMsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gbWFwIGludGVyYWN0aW9ucywgYW5kIHRoaXMgcGF0Y2ggd2lsbCB1bmRvdWJ0ZWRseSBoYXZlIHNvbWUgcmlwcGxlIGVmZmVjdHMgdGhlcmUgdGhhdCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZC4gSSB3aWxsIGhhdmUgdG8gZW5zdXJlIHRoYXQgYWxsIG9mIHRoZSBtYXAgaW50ZXJhY3Rpb25zIGFuZCB2ZXJpZmllciBjaGVja3MgYXJlIHN0aWxsIGFwcHJvcHJpYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTYyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMjE6MzU6MTguMTc1NzUyMzcyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzAyNzAzMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hZGRfdXNlZF9tYXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTE3Nzc4PXN0YXRpYyBpbnQgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3ODg1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzg4NjpzdGF0aWMgaW50IF9fYWRkX3VzZWRfbWFwKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3ODg3LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzk0MD1zdGF0aWMgaW50IGFkZF91c2VkX21hcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgZmQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NTAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTUxOlxcdHJldHVybiBfX2FkZF91c2VkX21hcChlbnYsIG1hcCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTUyLX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzk1ND1zdGF0aWMgaW50IGZkX2FycmF5X2dldF9tYXBfaWR4X2NvbnRpbnVvdXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGlkeClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk2Ny1cXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTY4OlxcdHJldHVybiBfX2FkZF91c2VkX21hcChlbnYsIG1hcCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTY5LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTU2MT1zdGF0aWMgaW50IGFkZF9mZF9mcm9tX2ZkX2FycmF5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpZHgsIGludCBmZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU2OS1cXHRpZiAoIUlTX0VSUihtYXApKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NTcwOlxcdFxcdGVyciA9IF9fYWRkX3VzZWRfbWFwKGVudiwgbWFwKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1NzEtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1OTUtICogdGhlIG51bWJlciBvZiBkaXN0aW5jdCBtYXBzIGFuZCBCVEZzIGEgcHJvZ3JhbSBjYW4gYmluZCBpcyBlbmZvcmNlZCB3aGVuXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NTk2OiAqIGVhY2ggZW50cnkgaXMgcmVzb2x2ZWQgYnkgX19hZGRfdXNlZF9tYXAoKSBhbmQgX19hZGRfdXNlZF9idGYoKS5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1OTctICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIxOjM1OjIwLjE0NjAyNzUwNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNDQwOTM4ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBKSVQgRm9yY2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgZm9yY2luZyB0aGUgSnVzdC1Jbi1UaW1lIChKSVQpIGNvbXBpbGVyIGZvciBzcGVjaWZpYyBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIHByb2dyYW1zLiBUaGUga2V5IGhlcmUgaXMgdGhpcyBsaW5lOiBgcHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO2AgVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLlxuXG5NeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgb3IgcG90ZW50aWFsbHkgaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2U6IGBicGZfZG9fbWlzY19maXh1cHNgLCBgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eWAsIGFuZCBgX19hZGRfdXNlZF9tYXBgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBhZGp1c3RtZW50LiBgYnBmX2RvX21pc2NfZml4dXBzYCBpcyBjYWxsZWQgZm9yIGV2ZXJ5IEJQRiBwcm9ncmFtIGxvYWRlZCwgd2hpY2ggbWFrZXMgaXQgYSBwb3RlbnRpYWxseSBob3Qgc3BvdC4gSG93ZXZlciwgaXQncyBjYWxsZWQgZHVyaW5nIHZlcmlmaWNhdGlvbiwgbm90IHRoZSBleGVjdXRpb24gcGF0aCwgc28gdGhhdCdzIGdvb2QuIGBjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5YCBhbmQgYF9fYWRkX3VzZWRfbWFwYCBhcmUgYWxzbyB2ZXJpZmllciBmdW5jdGlvbnMsIHNvIHRoZXkgYXJlIG5vdCBkaXJlY3RseSBpbiB0aGUgcHJvZ3JhbSBleGVjdXRpb24uXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBicGZfZG9fbWlzY19maXh1cHNgIGlzIHRoZSBjb3JyZWN0IGZvY3VzLiBJdCdzIGNhbGxlZCBkdXJpbmcgYGJwZl9jaGVja2AsIHdoaWNoIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIHNvIGl0IHNob3VsZCBiZS4gYGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlgIGFuZCBgX19hZGRfdXNlZF9tYXBgIHdpbGwgYWxzbyBiZSBnb29kIHRvIHJldmlldy5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucy4gSSBrbm93IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgaGFyZCByZXF1aXJlbWVudCBmb3IgQlBGLiBUaGUgcGF0Y2ggbWVudGlvbnMgYENPTkZJR19TTVBgLCB3aGljaCBpcyBjb21tb24sIGJ1dCBpdCdzIGltcG9ydGFudCB0byBrZWVwIHRyYWNrIG9mIGl0cyBpbnRlcmFjdGlvbi4gSSBzdXNwZWN0IGBDT05GSUdfQlBGX0pJVGAgaXMgcHJvYmFibHkgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGUgSklUIGVuZm9yY2VtZW50LiBUaGUgYGppdF9yZXF1aXJlZGAgbWlnaHQgYmUgZGVzaWduZWQgdG8gcmVqZWN0IHRoZSBwcm9ncmFtIGlmIHRoZSBKSVQgaXMgbm90IGVuYWJsZWQgb3IgcmVxdWVzdGVkLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSB1c2FnZSBvZiBgaml0X3JlcXVpcmVkYCB0byBmdWxseSBncmFzcCB0aGUgc2NvcGUgYW5kIGVmZmVjdHMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NTMsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMjE6MzU6MjYuMjkwMTIzMzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzODU0MDk5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJqaXRfcmVxdWlyZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0xODY1PXN0cnVjdCBicGZfcHJvZyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE4NjgtXFx0XFx0XFx0XFx0aml0X3JlcXVlc3RlZDoxLC8qIGFyY2hzIG5lZWQgdG8gSklUIHRoZSBwcm9nICovXFxuaW5jbHVkZS9saW51eC9icGYuaDoxODY5OlxcdFxcdFxcdFxcdGppdF9yZXF1aXJlZDoxLFxcdC8qIHByb2dyYW0gc3RyaWN0bHkgcmVxdWlyZXMgSklUIGNvbXBpbGVyICovXFxuaW5jbHVkZS9saW51eC9icGYuaC0xODcwLVxcdFxcdFxcdFxcdGdwbF9jb21wYXRpYmxlOjEsIC8qIElzIGZpbHRlciBHUEwgY29tcGF0aWJsZT8gKi9cXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTEwMD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2FsbG9jX25vX3N0YXRzKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfZXh0cmFfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xMjgtXFx0ZnAtXFx1MDAzZWppdF9yZXF1ZXN0ZWQgPSBlYnBmX2ppdF9lbmFibGVkKCk7XFxua2VybmVsL2JwZi9jb3JlLmM6MTI5OlxcdGZwLVxcdTAwM2VqaXRfcmVxdWlyZWQgPSBJU19FTkFCTEVEKENPTkZJR19CUEZfSklUX0FMV0FZU19PTik7XFxua2VybmVsL2JwZi9jb3JlLmMtMTMwLVxcdGZwLVxcdTAwM2VibGluZGluZ19yZXF1ZXN0ZWQgPSBicGZfaml0X2JsaW5kaW5nX2VuYWJsZWQoZnApO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjY2OD1zdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI2NzMtXFx0ICovXFxua2VybmVsL2JwZi9jb3JlLmM6MjY3NDpcXHRib29sIGppdF9uZWVkZWQgPSBmcC1cXHUwMDNlaml0X3JlcXVpcmVkO1xcbmtlcm5lbC9icGYvY29yZS5jLTI2NzUtXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTEzNzY9aW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTQwNS0jaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTQwNjpcXHRpZiAocHJvZy1cXHUwMDNlaml0X3JlcXVpcmVkKSB7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xNDA3LVxcdFxcdHZlcmJvc2UoZW52LCBcXFwicHJvZ3JhbSByZXF1aXJlcyBCUEYgSklUIGNvbXBpbGVyIGJ1dCBpdCBpcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTQ4MD1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NDMtXFx0XFx0aWYgKGJwZl9qaXRfaW5saW5lc19oZWxwZXJfY2FsbChpbnNuLVxcdTAwM2VpbW0pKSB7XFxua2VybmVsL2JwZi9maXh1cHMuYzoxODQ0OlxcdFxcdFxcdHByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCA9IDE7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xODQ1LVxcdFxcdFxcdGdvdG8gbmV4dF9pbnNuO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDExLVxcdFxcdFxcdFxcdGlmIChicGZfbWFwX2lzX3BlcmNwdV9tYXAobWFwX3B0ci1cXHUwMDNlbWFwX3R5cGUpKVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjAxMjpcXHRcXHRcXHRcXHRcXHRwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMjAxMy1cXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjExNy0jaWZkZWYgQ09ORklHX1NNUFxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjExODpcXHRcXHRcXHRwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMjExOS1cXHRcXHRcXHRpbnNuX2J1ZlswXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAodTMyKSh1bnNpZ25lZCBsb25nKVxcdTAwMjZjcHVfbnVtYmVyKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjEzOS1cXHRcXHQgICAgYnBmX3ZlcmlmaWVyX2lubGluZXNfaGVscGVyX2NhbGwoZW52LCBpbnNuLVxcdTAwM2VpbW0pKSB7XFxua2VybmVsL2JwZi9maXh1cHMuYzoyMTQwOlxcdFxcdFxcdHByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTQxLVxcdFxcdFxcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNmN1cnJlbnRfdGFzayk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjcyMT1pbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTI3NjEtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjI3NjI6XFx0ZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQgPSAxO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzYzLVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3Nzc4PXN0YXRpYyBpbnQgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3ODc1LVxcdFxcdGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhcmVuYSA9ICh2b2lkICopbWFwO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzg3NjpcXHRcXHRlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3ODc3LVxcdFxcdGlmICghYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhcmVuYSkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzg4Nj1zdGF0aWMgaW50IF9fYWRkX3VzZWRfbWFwKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5MjktXFx0XFx0ZW52LVxcdTAwM2VpbnNuX2FycmF5X21hcHNbZW52LVxcdTAwM2VpbnNuX2FycmF5X21hcF9jbnQrK10gPSBtYXA7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTMwOlxcdFxcdGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5MzEtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQyMTozNToyNy45Mjg2Njk0NDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTk4Njc4Mzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IGZvcmNpbmcgdGhlIEpJVCByZXF1aXJlbWVudCB0byBiZSBhY3RpdmUgZm9yIGFueSBCUEYgcHJvZ3JhbSB0aGF0IHVzZXMgcGVyLUNQVSBtYXBzLCBzcGVjaWZpYyBCUEYgaGVscGVyIGZ1bmN0aW9ucyBsaWtlIGBicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWRgLCBvciBjZXJ0YWluIG1hcCB0eXBlcyBzdWNoIGFzIGFyZW5hIGFuZCBpbnN0cnVjdGlvbiBhcnJheSBtYXBzLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBwZXJmb3JtYW5jZSB0d2VhaywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgdGhvcm91Z2hseS5cblxuTXkgcHJpbWFyeSBmb2N1cyBoZXJlIG5lZWRzIHRvIGJlIHRoZSBgYnBmX2RvX21pc2NfZml4dXBzYCwgYGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlgLCBhbmQgYF9fYWRkX3VzZWRfbWFwYCBmdW5jdGlvbnM7IEkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gaG93IHRoZXkgaW50ZXJhY3Qgbm93LCB3aXRoIHRoaXMgYGppdF9yZXF1aXJlZGAgZmxhZyBiZWluZyBzZXQuIEkgYWxzbyBuZWVkIHRvIGtlZXAgYEJQRl9TWVNDQUxMYCBhbmQgYFNNUGAgY29uZmlndXJhdGlvbnMgaW4gbWluZCBhcyB0aGV5J2xsIGxpa2VseSBwbGF5IGEgcm9sZSBpbiB0aGlzLlxuXG5UaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGF0IGhhcHBlbnMgaWYgdGhlIEpJVCBpc24ndCBlbmFibGVkPyBJZiBgQlBGX0pJVGAgaXMgZGlzYWJsZWQsIHRoZSB2ZXJpZmllciAqc2hvdWxkKiBub3cgcmVqZWN0IHRoZSBwcm9ncmFtIG91dHJpZ2h0LCBiZWNhdXNlIGBqaXRfcmVxdWlyZWRgIGlzIHRydWUgYnV0IG5vIEpJVCBpcyBhdmFpbGFibGUgdG8gbWVldCB0aGF0IHJlcXVpcmVtZW50LiBCdXQgd2FpdCwgSSByZWNhbGwgYGJwZl9maXh1cF9jYWxsX2FyZ3NgIHBlcmZvcm1pbmcgc29tZSBjaGVja3MhIERvZXMgaXQgYWxyZWFkeSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYHByb2ctXHUwMDNlaml0X3JlcXVpcmVkYCBpcyBzZXQsIGFuZCBpdCB3b3VsZCByZWplY3QgdGhlIHByb2dyYW0gaWYgYENPTkZJR19CUEZfSklUX0FMV0FZU19PTmAgaXNuJ3Qgc2V0LCBhbmQgaWYgdGhlcmUncyBubyBKSVQgYXZhaWxhYmxlPyBJIHNob3VsZCBnbyBiYWNrIGFuZCByZXZpZXcgdGhlIGBicGZfZml4dXBfY2FsbF9hcmdzYCBmdW5jdGlvbiB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIEl0IGlzIHZpdGFsIHRvIGdldCB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlc2UgcGFydHMgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAyMSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQyMTozNTozMi45MjczNDk4MTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Nzg4NTYxMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ZpeHVwX2NhbGxfYXJnc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE2NTU9aW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxNjU2OmludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTY1Ny1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xMjk2PWludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEzNzUtXFxua2VybmVsL2JwZi9maXh1cHMuYzoxMzc2OmludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9maXh1cHMuYy0xMzc3LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDAwND1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIyOC1cXHRpZiAocmV0ID09IDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMjI5OlxcdFxcdHJldCA9IGJwZl9maXh1cF9jYWxsX2FyZ3MoZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAyMzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIxOjM1OjM0LjYwNjIxMDQ4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQyMzM3NDE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjpcblxuKipBbmFseXppbmcgYGJwZl9maXh1cF9jYWxsX2FyZ3NgIGFuZCBgaml0X3JlcXVpcmVkYCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBqaXRfcmVxdWlyZWRgIGZsYWcgaW50ZXJhY3RzIHdpdGggdGhlIGNhbGwgYXJndW1lbnQgaGFuZGxpbmcgaW4gdGhlIEJQRiB3b3JsZC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgYnBmX2ZpeHVwX2NhbGxfYXJnc2AgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyBpdCdzIHVzZWQgYW5kIHdoYXQgY29uZGl0aW9uYWwgbG9naWMgaXMgaW4gcGxhY2UgYXJvdW5kIHRoYXQgYGppdF9yZXF1aXJlZGAgZmxhZy4gSSBzdXNwZWN0IHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgdGhlIGtleSB0byBlbnN1cmluZyB0aGF0IEpJVCBjb21waWxhdGlvbiBpcyB0cmlnZ2VyZWQgYXBwcm9wcmlhdGVseSB3aGVuIGRlYWxpbmcgd2l0aCBhcmd1bWVudHMgdGhhdCByZXF1aXJlIGl0LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjb25kaXRpb25zIGFyb3VuZCBvcHRpbWl6YXRpb24sIHBvdGVudGlhbCByZWdpc3RlciBzcGlsbHMgb3IgbG9hZHMsIG9yIG1heWJlIGV2ZW4gZnVuY3Rpb24gaW5saW5pbmcgZGVjaXNpb25zLCBhbGwgaW5mbHVlbmNlZCBieSB0aGF0IGBqaXRfcmVxdWlyZWRgIHNpZ25hbC4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBjb250cm9sIGZsb3cgYW5kIGlkZW50aWZ5IHRoZSBleGFjdCBwb2ludHMgd2hlcmUgYGppdF9yZXF1aXJlZGAgaXMgY2hlY2tlZCBhbmQgYWN0ZWQgdXBvbi4gVGhpcyBjb3VsZCByZXZlYWwgc29tZSBpbnRlcmVzdGluZyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQyMTozNTo0NS4wMjk1ODYzMjhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvZml4dXBzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM3NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM3NjpcXHRpbnQgYnBmX2ZpeHVwX2NhbGxfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbjEzNzc6XFx0e1xcbjEzNzg6XFx0I2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cXG4xMzc5OlxcdFxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGVudi1cXHUwMDNlcHJvZztcXG4xMzgwOlxcdFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IHByb2ctXFx1MDAzZWluc25zaTtcXG4xMzgxOlxcdFxcdGludCBkZXB0aDtcXG4xMzgyOlxcdCNlbmRpZlxcbjEzODM6XFx0XFx0aW50IGksIGVyciA9IDA7XFxuMTM4NDpcXHRcXG4xMzg1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBlbnYtXFx1MDAzZXN1YnByb2dfY250OyBpKyspIHtcXG4xMzg2OlxcdFxcdFxcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nID0gXFx1MDAyNmVudi1cXHUwMDNlc3VicHJvZ19pbmZvW2ldO1xcbjEzODc6XFx0XFx0XFx0dTE2IG91dGdvaW5nID0gc3VicHJvZy1cXHUwMDNlc3RhY2tfYXJnX2NudCAtIGJwZl9pbl9zdGFja19hcmdfY250KHN1YnByb2cpO1xcbjEzODg6XFx0XFxuMTM4OTpcXHRcXHRcXHRpZiAoc3VicHJvZy1cXHUwMDNlbWF4X291dF9zdGFja19hcmdfY250IFxcdTAwM2Ugb3V0Z29pbmcpIHtcXG4xMzkwOlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LFxcbjEzOTE6XFx0XFx0XFx0XFx0XFx0XFxcImZ1bmMjJWQgd3JpdGVzICV1IHN0YWNrIGFyZyBzbG90cywgYnV0IGNhbGxzIG9ubHkgcmVxdWlyZSAldVxcXFxuXFxcIixcXG4xMzkyOlxcdFxcdFxcdFxcdFxcdGksIHN1YnByb2ctXFx1MDAzZW1heF9vdXRfc3RhY2tfYXJnX2NudCwgb3V0Z29pbmcpO1xcbjEzOTM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTM5NDpcXHRcXHRcXHR9XFxuMTM5NTpcXHRcXHR9XFxuMTM5NjpcXHRcXG4xMzk3OlxcdFxcdGlmIChlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWppdF9yZXF1ZXN0ZWQgXFx1MDAyNlxcdTAwMjZcXG4xMzk4OlxcdFxcdCAgICAhYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4KSkge1xcbjEzOTk6XFx0XFx0XFx0ZXJyID0gYnBmX2ppdF9zdWJwcm9ncyhlbnYpO1xcbjE0MDA6XFx0XFx0XFx0aWYgKGVyciA9PSAwKVxcbjE0MDE6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTQwMjpcXHRcXHRcXHRpZiAoZXJyID09IC1FRkFVTFQpXFxuMTQwMzpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE0MDQ6XFx0XFx0fVxcbjE0MDU6XFx0I2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cXG4xNDA2OlxcdFxcdGlmIChwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQpIHtcXG4xNDA3OlxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwicHJvZ3JhbSByZXF1aXJlcyBCUEYgSklUIGNvbXBpbGVyIGJ1dCBpdCBpcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4xNDA4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0MDk6XFx0XFx0fVxcbjE0MTA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGVudi1cXHUwMDNlc3VicHJvZ19jbnQ7IGkrKykge1xcbjE0MTE6XFx0XFx0XFx0aWYgKGJwZl9pbl9zdGFja19hcmdfY250KFxcdTAwMjZlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tpXSkpIHtcXG4xNDEyOlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwic3RhY2sgYXJncyBhcmUgbm90IHN1cHBvcnRlZCBpbiBub24tSklUZWQgcHJvZ3JhbXNcXFxcblxcXCIpO1xcbjE0MTM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQxNDpcXHRcXHRcXHR9XFxuMTQxNTpcXHRcXHR9XFxuMTQxNjpcXHRcXHRpZiAoZW52LVxcdTAwM2VzdWJwcm9nX2NudCBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXRhaWxfY2FsbF9yZWFjaGFibGUpIHtcXG4xNDE3OlxcdFxcdFxcdC8qIFdoZW4gSklUIGZhaWxzIHRoZSBwcm9ncyB3aXRoIGJwZjJicGYgY2FsbHMgYW5kIHRhaWxfY2FsbHNcXG4xNDE4OlxcdFxcdFxcdCAqIGhhdmUgdG8gYmUgcmVqZWN0ZWQsIHNpbmNlIGludGVycHJldGVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtIHlldC5cXG4xNDE5OlxcdFxcdFxcdCAqL1xcbjE0MjA6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJ0YWlsX2NhbGxzIGFyZSBub3QgYWxsb3dlZCBpbiBub24tSklUZWQgcHJvZ3JhbXMgd2l0aCBicGYtdG8tYnBmIGNhbGxzXFxcXG5cXFwiKTtcXG4xNDIxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0MjI6XFx0XFx0fVxcbjE0MjM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHByb2ctXFx1MDAzZWxlbjsgaSsrLCBpbnNuKyspIHtcXG4xNDI0OlxcdFxcdFxcdGlmIChicGZfcHNldWRvX2Z1bmMoaW5zbikpIHtcXG4xNDI1OlxcdFxcdFxcdFxcdC8qIFdoZW4gSklUIGZhaWxzIHRoZSBwcm9ncyB3aXRoIGNhbGxiYWNrIGNhbGxzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIxOjM1OjQ1LjAyOTcyMzg1OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTk1NTE2ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgSklUIFJlcXVpcmVtZW50cyBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB0aGUgY29kZSdzIGxvZ2ljIGNvbmNlcm5pbmcgQlBGIEpJVCByZXF1aXJlbWVudHMgaXMgYmFzZWQgb24gYENPTkZJR19CUEZfSklUX0FMV0FZU19PTmAgYW5kIGBwcm9nLVx1MDAzZWppdF9yZXF1aXJlZGAuIElmIGBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05gIGlzbid0IHNldCwgYW5kIGBwcm9nLVx1MDAzZWppdF9yZXF1aXJlZGAgaXMgdHJ1ZSwgdGhlIHByb2dyYW0gaXMgcmVqZWN0ZWQuIEhvd2V2ZXIsIGlmIGBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05gIGlzIHNldCwgdGhlbiBgcHJvZy1cdTAwM2VqaXRfcmVxdWlyZWRgIGRlZmF1bHRzIHRvIHRydWUsIGFuZCBpdCAqZG9lc24ndCogcmVqZWN0IGl0LiBUaGUgdHJpY2tpZXIgcGFydCBpcyB3aGVuIGBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05gICppc24ndCogc2V0LCBidXQgYHByb2ctXHUwMDNlaml0X3JlcXVpcmVkYCBpcyB0cnVlOyBpbiB0aGlzIGNhc2UsIGl0IGFwcGVhcnMgdG8gcmVseSBvbiBgYnBmX2ppdF9zdWJwcm9nc2Agc3VjY2VlZGluZy4gSSBzZWUgdGhhdCBgYnBmX2ppdF9zdWJwcm9nc2AgaXMgY2FsbGVkIGlmIGBqaXRfcmVxdWVzdGVkYCBhbmQgcmV0dXJucyAwIG9uIHN1Y2Nlc3MuIElmIGl0IGZhaWxzIG9yIGBqaXRfcmVxdWVzdGVkYCBpcyBmYWxzZSwgaXQgcHJvY2VlZHMgaW50byB0aGUgYCNpZm5kZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OYCBibG9jay4gU28gdGhlIGNvbmNsdXNpb24gaGVyZSBpcyB0aGF0IHdoZW4gYHByb2ctXHUwMDNlaml0X3JlcXVpcmVkYCBpcyB0cnVlLCB0aGUgSklUICptdXN0KiBzdWNjZWVkLlxuXG5UbyBwcm9wZXJseSB0ZXN0IHRoaXMsIEknZCB3YW50IHRvIGVuYWJsZSBgQlBGX0pJVGAgYW5kIGBCUEZfSklUX0FMV0FZU19PTmAsIG9yIHNpbXBseSBgQlBGX0pJVGAuIEdvb2QgbmV3cywgc3l6Ym90IGFscmVhZHkgdXNlcyB0aGVzZSwgc28gSSBvbmx5IG5lZWQgdG8gbm90ZSBgQlBGX1NZU0NBTExgIGFuZCBgU01QYCBmb3IgbXkgY29uZmlndXJhdGlvbi5cblxuQWxyaWdodCwgbm93IGxldCdzIGNpcmNsZSBiYWNrIHRvIHRoZSBwYXRjaCBpdHNlbGYuIEl0J3MgY2hhbmdpbmcgYGJwZl9tYXBfc3VwcG9ydHNfY3B1X2ZsYWdzYCB0byBgYnBmX21hcF9pc19wZXJjcHVfbWFwYCwgd2hpY2ggbG9va3MgaW5ub2N1b3VzLCBidXQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEpJVCwgaXQgY291bGQgYmUgc2lnbmlmaWNhbnQuIFRoZSBwYXRjaCBpcyBzZXR0aW5nIGBwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWVgIGluIGBicGZfZG9fbWlzY19maXh1cHNgIGZvciBwZXJjcHUgbWFwcywgYGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZGAsIGBicGZfZ2V0X2N1cnJlbnRfdGFza2AsIGBicGZfZ2V0X2N1cnJlbnRfdGFza19idGZgLiBJbiBgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eWAsIGl0IGlzIHNldHRpbmcgYHByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZWAgZm9yIGFyZW5hIG1hcHMuIEFuZCBpbiBgX19hZGRfdXNlZF9tYXBgIGZvciBpbnN0cnVjdGlvbiBhcnJheSBtYXBzLiBTbyB0aGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZXNwZWNpYWxseSBhcm91bmQgdGhlc2UgbWFwIHR5cGVzIGFuZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMuXG5cblRoaXMgY29uc3RpdHV0ZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHdhcnJhbnRzIGZ1enppbmcsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgaXRzIHJlbGF0aW9uIHRvIHRoZSBKSVQuIE15IGZvY3VzIGZ1bmN0aW9ucyBmb3IgZnV6emluZyB3aWxsIGJlIGBicGZfZG9fbWlzY19maXh1cHNgLCBgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eWAsIGFuZCBgX19hZGRfdXNlZF9tYXBgLiBUaGUgcmVsZXZhbnQgY29uZmlnIGlzIGBCUEZfU1lTQ0FMTGAuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTQ3LCJPdXRwdXRUb2tlbnMiOjE3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIxOjM1OjUzLjYyNTI0MjU3M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MTY3MDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiU01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2RvX21pc2NfZml4dXBzXCIsXG4gICAgXCJjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5XCIsXG4gICAgXCJfX2FkZF91c2VkX21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gZm9yY2UgSklUIGNvbXBpbGF0aW9uIGZvciBwcm9ncmFtcyB0aGF0IHVzZSBwZXItQ1BVIG1hcHMsIHNwZWNpZmljIEJQRiBoZWxwZXJzIChicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQsIGJwZl9nZXRfY3VycmVudF90YXNrLCBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYpLCBhcmVuYSBtYXBzLCBhbmQgaW5zdHJ1Y3Rpb24gYXJyYXkgbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBlbmZvcmNlcyBKSVQgcmVxdWlyZW1lbnRzIGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBieXBhc3Nlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiU01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2RvX21pc2NfZml4dXBzXCIsXG4gICAgXCJjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5XCIsXG4gICAgXCJfX2FkZF91c2VkX21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gZm9yY2UgSklUIGNvbXBpbGF0aW9uIGZvciBwcm9ncmFtcyB0aGF0IHVzZSBwZXItQ1BVIG1hcHMsIHNwZWNpZmljIEJQRiBoZWxwZXJzIChicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQsIGJwZl9nZXRfY3VycmVudF90YXNrLCBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYpLCBhcmVuYSBtYXBzLCBhbmQgaW5zdHJ1Y3Rpb24gYXJyYXkgbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBlbmZvcmNlcyBKSVQgcmVxdWlyZW1lbnRzIGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBieXBhc3Nlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowj55dn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-15 20:50:14 +0000 UTC FinishedAt: 2026-07-15 21:35:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d1f4b56417a3dc1a0600f960b14f46bd25eda89d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "SMP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d1f4b56417a3dc1a0600f960b14f46bd25eda89d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "SMP" ], "series_id": "f01f6cbb-4912-4465-8bf8-75db6ee2ae60" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_do_misc_fixups", "check_map_prog_compatibility", "__add_used_map" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDIxOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7LAogICAgJiMzNDtjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5JiMzNDssCiAgICAmIzM0O19fYWRkX3VzZWRfbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gZm9yY2UgSklUIGNvbXBpbGF0aW9uIGZvciBwcm9ncmFtcyB0aGF0IHVzZSBwZXItQ1BVIG1hcHMsIHNwZWNpZmljIEJQRiBoZWxwZXJzIChicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQsIGJwZl9nZXRfY3VycmVudF90YXNrLCBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYpLCBhcmVuYSBtYXBzLCBhbmQgaW5zdHJ1Y3Rpb24gYXJyYXkgbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBlbmZvcmNlcyBKSVQgcmVxdWlyZW1lbnRzIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgYnlwYXNzZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjE6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNTkyOTY5NzU2NzExZDZmNTkyZWRmNmExM2I2ZmM2NTJlNDg1MzJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMjE6MzU6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IDMxMTgxZTBjMmI4MDFiLi5kOTU0MjEyN2RmZGZjMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC00MTYzLDcgJiM0Mzs0MTYzLDcgQEAgYnBmX3Byb2dfdXBkYXRlX2luc25fcHRycyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqb2Zmc2V0cywgdm9pZCAqaW1hZ2UpXG4gfVxuICNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWFwX3N1cHBvcnRzX2NwdV9mbGFncyhlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGJwZl9tYXBfaXNfcGVyY3B1X21hcChlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcbiB7XG4gXHRzd2l0Y2ggKG1hcF90eXBlKSB7XG4gXHRjYXNlIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk6XG5AQCAtNDE5MCw3ICYjNDM7NDE5MCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3Moc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGZsYWdzLCB1NjQgYWxsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiAoQlBGX0ZfQ1BVIHwgQlBGX0ZfQUxMX0NQVVMpKSB7XG4tXHRcdGlmICghYnBmX21hcF9zdXBwb3J0c19jcHVfZmxhZ3MobWFwLVx1MDAzZW1hcF90eXBlKSlcbiYjNDM7XHRcdGlmICghYnBmX21hcF9pc19wZXJjcHVfbWFwKG1hcC1cdTAwM2VtYXBfdHlwZSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0NQVSkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgQlBGX0ZfQUxMX0NQVVMpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCBkM2JlOTcyNzE0YjIyYy4uYTBiZGRhZGE3OTY0ZTcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtMjAwOCw2ICYjNDM7MjAwOCw5IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdFx0XHR9XG4gXG4mIzQzO1x0XHRcdFx0aWYgKGJwZl9tYXBfaXNfcGVyY3B1X21hcChtYXBfcHRyLVx1MDAzZW1hcF90eXBlKSlcbiYjNDM7XHRcdFx0XHRcdHByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcbiYjNDM7XG4gXHRcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLFxuIFx0XHRcdFx0XHRcdFx0ICAgICAgIGluc25fYnVmLCBjbnQpO1xuIFx0XHRcdFx0aWYgKCFuZXdfcHJvZylcbkBAIC0yMTEyLDYgJiM0MzsyMTE1LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdCAqIHdheSwgaXQmIzM5O3MgZmluZSB0byBiYWNrIG91dCB0aGlzIGlubGluaW5nIGxvZ2ljXG4gXHRcdFx0ICovXG4gI2lmZGVmIENPTkZJR19TTVBcbiYjNDM7XHRcdFx0cHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO1xuIFx0XHRcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2Y3B1X251bWJlcik7XG4gXHRcdFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XG4gXHRcdFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xuQEAgLTIxMzMsNiAmIzQzOzIxMzcsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdC8qIEltcGxlbWVudCBicGZfZ2V0X2N1cnJlbnRfdGFzaygpIGFuZCBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKSBpbmxpbmUuICovXG4gXHRcdGlmICgoaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0ZVTkNfZ2V0X2N1cnJlbnRfdGFzayB8fCBpbnNuLVx1MDAzZWltbSA9PSBCUEZfRlVOQ19nZXRfY3VycmVudF90YXNrX2J0ZikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBicGZfdmVyaWZpZXJfaW5saW5lc19oZWxwZXJfY2FsbChlbnYsIGluc24tXHUwMDNlaW1tKSkge1xuJiM0MztcdFx0XHRwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XG4gXHRcdFx0aW5zbl9idWZbMF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgKHUzMikodW5zaWduZWQgbG9uZylcdTAwMjZjdXJyZW50X3Rhc2spO1xuIFx0XHRcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xuIFx0XHRcdGluc25fYnVmWzJdID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBkZTgxNjA2M2FlNjNkMC4uZTJlZjc4MzZiN2I1MDcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTE3ODczLDYgJiM0MzsxNzg3Myw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdFx0fVxuIFx0XHRlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEgPSAodm9pZCAqKW1hcDtcbiYjNDM7XHRcdGVudi1cdTAwM2Vwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XG4gXHRcdGlmICghYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSkpIHtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7YXJlbmEmIzM5O3MgdXNlciBhZGRyZXNzIG11c3QgYmUgc2V0IHZpYSBtYXBfZXh0cmEgb3IgbW1hcCgpXFxuXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xNzkyNiw2ICYjNDM7MTc5MjcsNyBAQCBzdGF0aWMgaW50IF9fYWRkX3VzZWRfbWFwKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0XHRlbnYtXHUwMDNlaW5zbl9hcnJheV9tYXBzW2Vudi1cdTAwM2VpbnNuX2FycmF5X21hcF9jbnQmIzQzOyYjNDM7XSA9IG1hcDtcbiYjNDM7XHRcdGVudi1cdTAwM2Vwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XG4gXHR9XG4gXG4gXHRyZXR1cm4gZW52LVx1MDAzZXVzZWRfbWFwX2NudCAtIDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjE6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7U01QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDssCiAgICAmIzM0O2NoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHkmIzM0OywKICAgICYjMzQ7X19hZGRfdXNlZF9tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBmb3JjZSBKSVQgY29tcGlsYXRpb24gZm9yIHByb2dyYW1zIHRoYXQgdXNlIHBlci1DUFUgbWFwcywgc3BlY2lmaWMgQlBGIGhlbHBlcnMgKGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCwgYnBmX2dldF9jdXJyZW50X3Rhc2ssIGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZiksIGFyZW5hIG1hcHMsIGFuZCBpbnN0cnVjdGlvbiBhcnJheSBtYXBzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGVuZm9yY2VzIEpJVCByZXF1aXJlbWVudHMgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBieXBhc3Nlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzU5Mjk2OTc1NjcxMWQ2ZjU5MmVkZjZhMTNiNmZjNjUyZTQ4NTMyYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDE1IDIxOjM1OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmgKaW5kZXggMzExODFlMGMyYjgwMWIuLmQ5NTQyMTI3ZGZkZmMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTQxNjMsNyAmIzQzOzQxNjMsNyBAQCBicGZfcHJvZ191cGRhdGVfaW5zbl9wdHJzKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICpvZmZzZXRzLCB2b2lkICppbWFnZSkKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX21hcF9zdXBwb3J0c19jcHVfZmxhZ3MoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpCiYjNDM7c3RhdGljIGlubGluZSBib29sIGJwZl9tYXBfaXNfcGVyY3B1X21hcChlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSkKIHsKIAlzd2l0Y2ggKG1hcF90eXBlKSB7CiAJY2FzZSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZOgpAQCAtNDE5MCw3ICYjNDM7NDE5MCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3Moc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGZsYWdzLCB1NjQgYWxsCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGZsYWdzICZhbXA7IChCUEZfRl9DUFUgfCBCUEZfRl9BTExfQ1BVUykpIHsKLQkJaWYgKCFicGZfbWFwX3N1cHBvcnRzX2NwdV9mbGFncyhtYXAtJmd0O21hcF90eXBlKSkKJiM0MzsJCWlmICghYnBmX21hcF9pc19wZXJjcHVfbWFwKG1hcC0mZ3Q7bWFwX3R5cGUpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQ1BVKSAmYW1wOyZhbXA7IChmbGFncyAmYW1wOyBCUEZfRl9BTExfQ1BVUykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCmluZGV4IGQzYmU5NzI3MTRiMjJjLi5hMGJkZGFkYTc5NjRlNyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9maXh1cHMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCkBAIC0yMDA4LDYgJiM0MzsyMDA4LDkgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCQl9CiAKJiM0MzsJCQkJaWYgKGJwZl9tYXBfaXNfcGVyY3B1X21hcChtYXBfcHRyLSZndDttYXBfdHlwZSkpCiYjNDM7CQkJCQlwcm9nLSZndDtqaXRfcmVxdWlyZWQgPSB0cnVlOwomIzQzOwogCQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsCiAJCQkJCQkJICAgICAgIGluc25fYnVmLCBjbnQpOwogCQkJCWlmICghbmV3X3Byb2cpCkBAIC0yMTEyLDYgJiM0MzsyMTE1LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJICogd2F5LCBpdCYjMzk7cyBmaW5lIHRvIGJhY2sgb3V0IHRoaXMgaW5saW5pbmcgbG9naWMKIAkJCSAqLwogI2lmZGVmIENPTkZJR19TTVAKJiM0MzsJCQlwcm9nLSZndDtqaXRfcmVxdWlyZWQgPSB0cnVlOwogCQkJaW5zbl9idWZbMF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgKHUzMikodW5zaWduZWQgbG9uZykmYW1wO2NwdV9udW1iZXIpOwogCQkJaW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7CiAJCQlpbnNuX2J1ZlsyXSA9IEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7CkBAIC0yMTMzLDYgJiM0MzsyMTM3LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkvKiBJbXBsZW1lbnQgYnBmX2dldF9jdXJyZW50X3Rhc2soKSBhbmQgYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCkgaW5saW5lLiAqLwogCQlpZiAoKGluc24tJmd0O2ltbSA9PSBCUEZfRlVOQ19nZXRfY3VycmVudF90YXNrIHx8IGluc24tJmd0O2ltbSA9PSBCUEZfRlVOQ19nZXRfY3VycmVudF90YXNrX2J0ZikgJmFtcDsmYW1wOwogCQkgICAgYnBmX3ZlcmlmaWVyX2lubGluZXNfaGVscGVyX2NhbGwoZW52LCBpbnNuLSZndDtpbW0pKSB7CiYjNDM7CQkJcHJvZy0mZ3Q7aml0X3JlcXVpcmVkID0gdHJ1ZTsKIAkJCWluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpJmFtcDtjdXJyZW50X3Rhc2spOwogCQkJaW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7CiAJCQlpbnNuX2J1ZlsyXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IGRlODE2MDYzYWU2M2QwLi5lMmVmNzgzNmI3YjUwNyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMTc4NzMsNiAmIzQzOzE3ODczLDcgQEAgc3RhdGljIGludCBjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJCX0KIAkJZW52LSZndDtwcm9nLSZndDthdXgtJmd0O2FyZW5hID0gKHZvaWQgKiltYXA7CiYjNDM7CQllbnYtJmd0O3Byb2ctJmd0O2ppdF9yZXF1aXJlZCA9IHRydWU7CiAJCWlmICghYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KGVudi0mZ3Q7cHJvZy0mZ3Q7YXV4LSZndDthcmVuYSkpIHsKIAkJCXZlcmJvc2UoZW52LCAmIzM0O2FyZW5hJiMzOTtzIHVzZXIgYWRkcmVzcyBtdXN0IGJlIHNldCB2aWEgbWFwX2V4dHJhIG9yIG1tYXAoKVxuJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNzkyNiw2ICYjNDM7MTc5MjcsNyBAQCBzdGF0aWMgaW50IF9fYWRkX3VzZWRfbWFwKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfbWFwICptYXApCiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJCWVudi0mZ3Q7aW5zbl9hcnJheV9tYXBzW2Vudi0mZ3Q7aW5zbl9hcnJheV9tYXBfY250JiM0MzsmIzQzO10gPSBtYXA7CiYjNDM7CQllbnYtJmd0O3Byb2ctJmd0O2ppdF9yZXF1aXJlZCA9IHRydWU7CiAJfQogCiAJcmV0dXJuIGVudi0mZ3Q7dXNlZF9tYXBfY250IC0gMTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzNgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgRml4dXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBpdCYjMzk7cyBhIGZvY3VzZWQgY2hhbmdlIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgdG91Y2hpbmcgdXBvbiB0aGUgdmVyaWZpZXIgYW5kIGZpeHVwcywgc3BlY2lmaWNhbGx5LiBJdCYjMzk7cyBtb2RpZnlpbmcgYSBmZXcga2V5IGZpbGVzOiBgaW5jbHVkZS9saW51eC9icGYuaGAsIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCwgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgcmVuYW1pbmcgYGJwZl9tYXBfc3VwcG9ydHNfY3B1X2ZsYWdzYCB0byBgYnBmX21hcF9pc19wZXJjcHVfbWFwYCwgd2hpY2ggZmVlbHMgbGlrZSBhIG1vcmUgZGVzY3JpcHRpdmUgbmFtZSwgYSBnb29kIG1vdmUgcmVhbGx5LgoKVGhlIGNydWNpYWwgYml0LCB0aG91Z2gsIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHByb2ctJmd0O2ppdF9yZXF1aXJlZCA9IHRydWVgIGluIHNldmVyYWwgc3BvdHMgd2l0aGluIGBicGZfZG9fbWlzY19maXh1cHNgLCBhbmQgYGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlgIGFuZCBgX19hZGRfdXNlZF9tYXBgLiBSaWdodCwgc28gdGhpcyBtZWFucyB0aGF0IHByb2dyYW1zICpyZWx5aW5nKiBvbiB0aGlzIG1vZGlmaWVkIGxvZ2ljIHdpbGwgbm93ICpyZXF1aXJlKiBKSVQgY29tcGlsYXRpb24uIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY29uc3RyYWludCBhcyBpdCBpbXBhY3RzIHBlcmZvcm1hbmNlIGFuZCBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eSBjb25jZXJucy4KClRoZSBhZmZlY3RlZCBzY2VuYXJpb3MgYXJlIHByZXR0eSBjbGVhcjogYW55IHByb2dyYW0gdXRpbGl6aW5nIHBlci1DUFUgbWFwcywgYGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZGAsIGBicGZfZ2V0X2N1cnJlbnRfdGFza2AsIGBicGZfZ2V0X2N1cnJlbnRfdGFza19idGZgLCBhcmVuYSBtYXBzLCBhbmQgaW5zdHJ1Y3Rpb24gYXJyYXkgbWFwcy4gSXQgbWFrZXMgc2Vuc2UsIHRoZXNlIGZlYXR1cmVzIG9mdGVuIGludm9sdmUgZHluYW1pYyBvciBwZXItQ1BVIGRhdGEgYWNjZXNzIHRoYXQgYmVuZWZpdHMgYSBKSVQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYmV0dGVyLiBCUEYgaXMgZW5hYmxlZCB2aWEgYENPTkZJR19CUEZfU1lTQ0FMTGAsIHRoYXQmIzM5O3MgdGhlIGJhc2UgcmVxdWlyZW1lbnQuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbmZpZ3Mgc3Vycm91bmRpbmcgdGhlc2UgZnVuY3Rpb25zOiBgYnBmX2RvX21pc2NfZml4dXBzYCwgYGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlgLCBhbmQgYF9fYWRkX3VzZWRfbWFwYC4gSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlncyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgZnVuY3Rpb25zIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiBob3cgdGhleSYjMzk7cmUgdXRpbGl6ZWQgZWxzZXdoZXJlLCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucyBhcmUuIEdvdHRhIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbmZpZyBkZXBlbmRlbmNpZXMsIG9yIGNvcm5lciBjYXNlcyBpbiB0aGUgc3lzdGVtIHRoYXQmIzM5O2xsIGJlIGFmZmVjdGVkLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDIxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE2NTY9aW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE2NTc6aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTY1OC1cbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE0NTE9c3RhdGljIGludCBhZGRfaGlkZGVuX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgaW50IGxlbilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE0NzktICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE0ODA6aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9maXh1cHMuYy0xNDgxLXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAwMDQ9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjE2LVx0aWYgKHJldCA9PSAwKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMjE3Olx0XHRyZXQgPSBicGZfZG9fbWlzY19maXh1cHMoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIxOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAyMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTYyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoaXMgQlBGIFBhdGNoKioKCkFscmlnaHQsIHNvIHRoZSBwYXRjaCBpcyBnb2luZyBzdHJhaWdodCBpbnRvIHRoZSBjb3JlIEJQRiB2ZXJpZmllciwgdGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gbm90ZS4gQW5kIGEgcXVpY2sgcmVtaW5kZXIgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLCBzbyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGRlbHZlIGZ1cnRoZXIuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgaW1wYWN0IG9uIGBfX2FkZF91c2VkX21hcGAgYW5kIHRoZSBmdW5jdGlvbiBgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eWAuIFRoZXNlIGFyZSBrZXkgYXJlYXMsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gbWFwIGludGVyYWN0aW9ucywgYW5kIHRoaXMgcGF0Y2ggd2lsbCB1bmRvdWJ0ZWRseSBoYXZlIHNvbWUgcmlwcGxlIGVmZmVjdHMgdGhlcmUgdGhhdCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQuIEkgd2lsbCBoYXZlIHRvIGVuc3VyZSB0aGF0IGFsbCBvZiB0aGUgbWFwIGludGVyYWN0aW9ucyBhbmQgdmVyaWZpZXIgY2hlY2tzIGFyZSBzdGlsbCBhcHByb3ByaWF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAyMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FkZF91c2VkX21hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc3Nzg9c3RhdGljIGludCBjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3ODg1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3ODg2OnN0YXRpYyBpbnQgX19hZGRfdXNlZF9tYXAoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9tYXAgKm1hcClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzg4Ny17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3OTQwPXN0YXRpYyBpbnQgYWRkX3VzZWRfbWFwKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBmZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NTAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5NTE6XHRyZXR1cm4gX19hZGRfdXNlZF9tYXAoZW52LCBtYXApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTUyLX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc5NTQ9c3RhdGljIGludCBmZF9hcnJheV9nZXRfbWFwX2lkeF9jb250aW51b3VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTY3LVx0fVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTY4Olx0cmV0dXJuIF9fYWRkX3VzZWRfbWFwKGVudiwgbWFwKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk2OS19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTYxPXN0YXRpYyBpbnQgYWRkX2ZkX2Zyb21fZmRfYXJyYXkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGlkeCwgaW50IGZkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU2OS1cdGlmICghSVNfRVJSKG1hcCkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTU3MDpcdFx0ZXJyID0gX19hZGRfdXNlZF9tYXAoZW52LCBtYXApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTcxLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU5NS0gKiB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0IG1hcHMgYW5kIEJURnMgYSBwcm9ncmFtIGNhbiBiaW5kIGlzIGVuZm9yY2VkIHdoZW5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTU5NjogKiBlYWNoIGVudHJ5IGlzIHJlc29sdmVkIGJ5IF9fYWRkX3VzZWRfbWFwKCkgYW5kIF9fYWRkX3VzZWRfYnRmKCkuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1OTctICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk1MwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDMxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEpJVCBGb3JjaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgZm9yY2luZyB0aGUgSnVzdC1Jbi1UaW1lIChKSVQpIGNvbXBpbGVyIGZvciBzcGVjaWZpYyBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIHByb2dyYW1zLiBUaGUga2V5IGhlcmUgaXMgdGhpcyBsaW5lOiBgcHJvZy0mZ3Q7aml0X3JlcXVpcmVkID0gdHJ1ZTtgIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4KCk15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCBvciBwb3RlbnRpYWxseSBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZTogYGJwZl9kb19taXNjX2ZpeHVwc2AsIGBjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5YCwgYW5kIGBfX2FkZF91c2VkX21hcGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgb2YgdGhlIGFkanVzdG1lbnQuIGBicGZfZG9fbWlzY19maXh1cHNgIGlzIGNhbGxlZCBmb3IgZXZlcnkgQlBGIHByb2dyYW0gbG9hZGVkLCB3aGljaCBtYWtlcyBpdCBhIHBvdGVudGlhbGx5IGhvdCBzcG90LiBIb3dldmVyLCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIHZlcmlmaWNhdGlvbiwgbm90IHRoZSBleGVjdXRpb24gcGF0aCwgc28gdGhhdCYjMzk7cyBnb29kLiBgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eWAgYW5kIGBfX2FkZF91c2VkX21hcGAgYXJlIGFsc28gdmVyaWZpZXIgZnVuY3Rpb25zLCBzbyB0aGV5IGFyZSBub3QgZGlyZWN0bHkgaW4gdGhlIHByb2dyYW0gZXhlY3V0aW9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGJwZl9kb19taXNjX2ZpeHVwc2AgaXMgdGhlIGNvcnJlY3QgZm9jdXMuIEl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgYGJwZl9jaGVja2AsIHdoaWNoIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIHNvIGl0IHNob3VsZCBiZS4gYGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlgIGFuZCBgX19hZGRfdXNlZF9tYXBgIHdpbGwgYWxzbyBiZSBnb29kIHRvIHJldmlldy4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMuIEkga25vdyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIEJQRi4gVGhlIHBhdGNoIG1lbnRpb25zIGBDT05GSUdfU01QYCwgd2hpY2ggaXMgY29tbW9uLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGtlZXAgdHJhY2sgb2YgaXRzIGludGVyYWN0aW9uLiBJIHN1c3BlY3QgYENPTkZJR19CUEZfSklUYCBpcyBwcm9iYWJseSByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoZSBKSVQgZW5mb3JjZW1lbnQuIFRoZSBgaml0X3JlcXVpcmVkYCBtaWdodCBiZSBkZXNpZ25lZCB0byByZWplY3QgdGhlIHByb2dyYW0gaWYgdGhlIEpJVCBpcyBub3QgZW5hYmxlZCBvciByZXF1ZXN0ZWQuCgpGaW5hbGx5LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSB1c2FnZSBvZiBgaml0X3JlcXVpcmVkYCB0byBmdWxseSBncmFzcCB0aGUgc2NvcGUgYW5kIGVmZmVjdHMgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aml0X3JlcXVpcmVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MTg2NT1zdHJ1Y3QgYnBmX3Byb2cge1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtMTg2OC1cdFx0XHRcdGppdF9yZXF1ZXN0ZWQ6MSwvKiBhcmNocyBuZWVkIHRvIEpJVCB0aGUgcHJvZyAqL1xuaW5jbHVkZS9saW51eC9icGYuaDoxODY5Olx0XHRcdFx0aml0X3JlcXVpcmVkOjEsXHQvKiBwcm9ncmFtIHN0cmljdGx5IHJlcXVpcmVzIEpJVCBjb21waWxlciAqL1xuaW5jbHVkZS9saW51eC9icGYuaC0xODcwLVx0XHRcdFx0Z3BsX2NvbXBhdGlibGU6MSwgLyogSXMgZmlsdGVyIEdQTCBjb21wYXRpYmxlPyAqL1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTEwMD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2FsbG9jX25vX3N0YXRzKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfZXh0cmFfZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMTI4LVx0ZnAtXHUwMDNlaml0X3JlcXVlc3RlZCA9IGVicGZfaml0X2VuYWJsZWQoKTtcbmtlcm5lbC9icGYvY29yZS5jOjEyOTpcdGZwLVx1MDAzZWppdF9yZXF1aXJlZCA9IElTX0VOQUJMRUQoQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OKTtcbmtlcm5lbC9icGYvY29yZS5jLTEzMC1cdGZwLVx1MDAzZWJsaW5kaW5nX3JlcXVlc3RlZCA9IGJwZl9qaXRfYmxpbmRpbmdfZW5hYmxlZChmcCk7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjY2OD1zdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpmcCxcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjczLVx0ICovXG5rZXJuZWwvYnBmL2NvcmUuYzoyNjc0Olx0Ym9vbCBqaXRfbmVlZGVkID0gZnAtXHUwMDNlaml0X3JlcXVpcmVkO1xua2VybmVsL2JwZi9jb3JlLmMtMjY3NS1cbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTEzNzY9aW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE0MDUtI2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvZml4dXBzLmM6MTQwNjpcdGlmIChwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCkge1xua2VybmVsL2JwZi9maXh1cHMuYy0xNDA3LVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7cHJvZ3JhbSByZXF1aXJlcyBCUEYgSklUIGNvbXBpbGVyIGJ1dCBpdCBpcyBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE0ODA9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTg0My1cdFx0aWYgKGJwZl9qaXRfaW5saW5lc19oZWxwZXJfY2FsbChpbnNuLVx1MDAzZWltbSkpIHtcbmtlcm5lbC9icGYvZml4dXBzLmM6MTg0NDpcdFx0XHRwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IDE7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NDUtXHRcdFx0Z290byBuZXh0X2luc247XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMDExLVx0XHRcdFx0aWYgKGJwZl9tYXBfaXNfcGVyY3B1X21hcChtYXBfcHRyLVx1MDAzZW1hcF90eXBlKSlcbmtlcm5lbC9icGYvZml4dXBzLmM6MjAxMjpcdFx0XHRcdFx0cHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO1xua2VybmVsL2JwZi9maXh1cHMuYy0yMDEzLVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjExNy0jaWZkZWYgQ09ORklHX1NNUFxua2VybmVsL2JwZi9maXh1cHMuYzoyMTE4Olx0XHRcdHByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMjExOS1cdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAodTMyKSh1bnNpZ25lZCBsb25nKVx1MDAyNmNwdV9udW1iZXIpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjEzOS1cdFx0ICAgIGJwZl92ZXJpZmllcl9pbmxpbmVzX2hlbHBlcl9jYWxsKGVudiwgaW5zbi1cdTAwM2VpbW0pKSB7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxNDA6XHRcdFx0cHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO1xua2VybmVsL2JwZi9maXh1cHMuYy0yMTQxLVx0XHRcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2Y3VycmVudF90YXNrKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjcyMT1pbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzYxLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjI3NjI6XHRlbnYtXHUwMDNlcHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQgPSAxO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTI3NjMtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3Nzc4PXN0YXRpYyBpbnQgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzg3NS1cdFx0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWFyZW5hID0gKHZvaWQgKiltYXA7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc4NzY6XHRcdGVudi1cdTAwM2Vwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc4NzctXHRcdGlmICghYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSkpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc4ODY9c3RhdGljIGludCBfX2FkZF91c2VkX21hcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzkyOS1cdFx0ZW52LVx1MDAzZWluc25fYXJyYXlfbWFwc1tlbnYtXHUwMDNlaW5zbl9hcnJheV9tYXBfY250JiM0MzsmIzQzO10gPSBtYXA7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5MzA6XHRcdGVudi1cdTAwM2Vwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5MzEtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAyMQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgZm9yY2luZyB0aGUgSklUIHJlcXVpcmVtZW50IHRvIGJlIGFjdGl2ZSBmb3IgYW55IEJQRiBwcm9ncmFtIHRoYXQgdXNlcyBwZXItQ1BVIG1hcHMsIHNwZWNpZmljIEJQRiBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZGAsIG9yIGNlcnRhaW4gbWFwIHR5cGVzIHN1Y2ggYXMgYXJlbmEgYW5kIGluc3RydWN0aW9uIGFycmF5IG1hcHMuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIHBlcmZvcm1hbmNlIHR3ZWFrLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyB0aG9yb3VnaGx5LgoKTXkgcHJpbWFyeSBmb2N1cyBoZXJlIG5lZWRzIHRvIGJlIHRoZSBgYnBmX2RvX21pc2NfZml4dXBzYCwgYGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlgLCBhbmQgYF9fYWRkX3VzZWRfbWFwYCBmdW5jdGlvbnM7IEkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gaG93IHRoZXkgaW50ZXJhY3Qgbm93LCB3aXRoIHRoaXMgYGppdF9yZXF1aXJlZGAgZmxhZyBiZWluZyBzZXQuIEkgYWxzbyBuZWVkIHRvIGtlZXAgYEJQRl9TWVNDQUxMYCBhbmQgYFNNUGAgY29uZmlndXJhdGlvbnMgaW4gbWluZCBhcyB0aGV5JiMzOTtsbCBsaWtlbHkgcGxheSBhIHJvbGUgaW4gdGhpcy4KClRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoYXQgaGFwcGVucyBpZiB0aGUgSklUIGlzbiYjMzk7dCBlbmFibGVkPyBJZiBgQlBGX0pJVGAgaXMgZGlzYWJsZWQsIHRoZSB2ZXJpZmllciAqc2hvdWxkKiBub3cgcmVqZWN0IHRoZSBwcm9ncmFtIG91dHJpZ2h0LCBiZWNhdXNlIGBqaXRfcmVxdWlyZWRgIGlzIHRydWUgYnV0IG5vIEpJVCBpcyBhdmFpbGFibGUgdG8gbWVldCB0aGF0IHJlcXVpcmVtZW50LiBCdXQgd2FpdCwgSSByZWNhbGwgYGJwZl9maXh1cF9jYWxsX2FyZ3NgIHBlcmZvcm1pbmcgc29tZSBjaGVja3MhIERvZXMgaXQgYWxyZWFkeSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYHByb2ctJmd0O2ppdF9yZXF1aXJlZGAgaXMgc2V0LCBhbmQgaXQgd291bGQgcmVqZWN0IHRoZSBwcm9ncmFtIGlmIGBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05gIGlzbiYjMzk7dCBzZXQsIGFuZCBpZiB0aGVyZSYjMzk7cyBubyBKSVQgYXZhaWxhYmxlPyBJIHNob3VsZCBnbyBiYWNrIGFuZCByZXZpZXcgdGhlIGBicGZfZml4dXBfY2FsbF9hcmdzYCBmdW5jdGlvbiB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIEl0IGlzIHZpdGFsIHRvIGdldCB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlc2UgcGFydHMgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ZpeHVwX2NhbGxfYXJncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE2NTU9aW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE2NTY6aW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2NTctaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTEyOTY9aW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEzNzUtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEzNzY6aW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvZml4dXBzLmMtMTM3Ny17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMDA0PWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIyOC1cdGlmIChyZXQgPT0gMClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDIyOTpcdFx0cmV0ID0gYnBmX2ZpeHVwX2NhbGxfYXJncyhlbnYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjMwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAyMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTc5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjoKCioqQW5hbHl6aW5nIGBicGZfZml4dXBfY2FsbF9hcmdzYCBhbmQgYGppdF9yZXF1aXJlZGAqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGppdF9yZXF1aXJlZGAgZmxhZyBpbnRlcmFjdHMgd2l0aCB0aGUgY2FsbCBhcmd1bWVudCBoYW5kbGluZyBpbiB0aGUgQlBGIHdvcmxkLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBicGZfZml4dXBfY2FsbF9hcmdzYCBmdW5jdGlvbi4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IGl0JiMzOTtzIHVzZWQgYW5kIHdoYXQgY29uZGl0aW9uYWwgbG9naWMgaXMgaW4gcGxhY2UgYXJvdW5kIHRoYXQgYGppdF9yZXF1aXJlZGAgZmxhZy4gSSBzdXNwZWN0IHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgdGhlIGtleSB0byBlbnN1cmluZyB0aGF0IEpJVCBjb21waWxhdGlvbiBpcyB0cmlnZ2VyZWQgYXBwcm9wcmlhdGVseSB3aGVuIGRlYWxpbmcgd2l0aCBhcmd1bWVudHMgdGhhdCByZXF1aXJlIGl0LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY29uZGl0aW9ucyBhcm91bmQgb3B0aW1pemF0aW9uLCBwb3RlbnRpYWwgcmVnaXN0ZXIgc3BpbGxzIG9yIGxvYWRzLCBvciBtYXliZSBldmVuIGZ1bmN0aW9uIGlubGluaW5nIGRlY2lzaW9ucywgYWxsIGluZmx1ZW5jZWQgYnkgdGhhdCBgaml0X3JlcXVpcmVkYCBzaWduYWwuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgY29udHJvbCBmbG93IGFuZCBpZGVudGlmeSB0aGUgZXhhY3QgcG9pbnRzIHdoZXJlIGBqaXRfcmVxdWlyZWRgIGlzIGNoZWNrZWQgYW5kIGFjdGVkIHVwb24uIFRoaXMgY291bGQgcmV2ZWFsIHNvbWUgaW50ZXJlc3RpbmcgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAyMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZml4dXBzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzc2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNzY6XHRpbnQgYnBmX2ZpeHVwX2NhbGxfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuMTM3NzpcdHtcbjEzNzg6XHQjaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxuMTM3OTpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nID0gZW52LVx1MDAzZXByb2c7XG4xMzgwOlx0XHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBwcm9nLVx1MDAzZWluc25zaTtcbjEzODE6XHRcdGludCBkZXB0aDtcbjEzODI6XHQjZW5kaWZcbjEzODM6XHRcdGludCBpLCBlcnIgPSAwO1xuMTM4NDpcdFxuMTM4NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZW52LVx1MDAzZXN1YnByb2dfY250OyBpJiM0MzsmIzQzOykge1xuMTM4NjpcdFx0XHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IFx1MDAyNmVudi1cdTAwM2VzdWJwcm9nX2luZm9baV07XG4xMzg3Olx0XHRcdHUxNiBvdXRnb2luZyA9IHN1YnByb2ctXHUwMDNlc3RhY2tfYXJnX2NudCAtIGJwZl9pbl9zdGFja19hcmdfY250KHN1YnByb2cpO1xuMTM4ODpcdFxuMTM4OTpcdFx0XHRpZiAoc3VicHJvZy1cdTAwM2VtYXhfb3V0X3N0YWNrX2FyZ19jbnQgXHUwMDNlIG91dGdvaW5nKSB7XG4xMzkwOlx0XHRcdFx0dmVyYm9zZShlbnYsXG4xMzkxOlx0XHRcdFx0XHRcJiMzNDtmdW5jIyVkIHdyaXRlcyAldSBzdGFjayBhcmcgc2xvdHMsIGJ1dCBjYWxscyBvbmx5IHJlcXVpcmUgJXVcXG5cJiMzNDssXG4xMzkyOlx0XHRcdFx0XHRpLCBzdWJwcm9nLVx1MDAzZW1heF9vdXRfc3RhY2tfYXJnX2NudCwgb3V0Z29pbmcpO1xuMTM5MzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTM5NDpcdFx0XHR9XG4xMzk1Olx0XHR9XG4xMzk2Olx0XG4xMzk3Olx0XHRpZiAoZW52LVx1MDAzZXByb2ctXHUwMDNlaml0X3JlcXVlc3RlZCBcdTAwMjZcdTAwMjZcbjEzOTg6XHRcdCAgICAhYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eCkpIHtcbjEzOTk6XHRcdFx0ZXJyID0gYnBmX2ppdF9zdWJwcm9ncyhlbnYpO1xuMTQwMDpcdFx0XHRpZiAoZXJyID09IDApXG4xNDAxOlx0XHRcdFx0cmV0dXJuIDA7XG4xNDAyOlx0XHRcdGlmIChlcnIgPT0gLUVGQVVMVClcbjE0MDM6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTQwNDpcdFx0fVxuMTQwNTpcdCNpZm5kZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OXG4xNDA2Olx0XHRpZiAocHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQpIHtcbjE0MDc6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3Byb2dyYW0gcmVxdWlyZXMgQlBGIEpJVCBjb21waWxlciBidXQgaXQgaXMgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4xNDA4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTQwOTpcdFx0fVxuMTQxMDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZW52LVx1MDAzZXN1YnByb2dfY250OyBpJiM0MzsmIzQzOykge1xuMTQxMTpcdFx0XHRpZiAoYnBmX2luX3N0YWNrX2FyZ19jbnQoXHUwMDI2ZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXSkpIHtcbjE0MTI6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7c3RhY2sgYXJncyBhcmUgbm90IHN1cHBvcnRlZCBpbiBub24tSklUZWQgcHJvZ3JhbXNcXG5cJiMzNDspO1xuMTQxMzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTQxNDpcdFx0XHR9XG4xNDE1Olx0XHR9XG4xNDE2Olx0XHRpZiAoZW52LVx1MDAzZXN1YnByb2dfY250IFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNldGFpbF9jYWxsX3JlYWNoYWJsZSkge1xuMTQxNzpcdFx0XHQvKiBXaGVuIEpJVCBmYWlscyB0aGUgcHJvZ3Mgd2l0aCBicGYyYnBmIGNhbGxzIGFuZCB0YWlsX2NhbGxzXG4xNDE4Olx0XHRcdCAqIGhhdmUgdG8gYmUgcmVqZWN0ZWQsIHNpbmNlIGludGVycHJldGVyIGRvZXNuJiMzOTt0IHN1cHBvcnQgdGhlbSB5ZXQuXG4xNDE5Olx0XHRcdCAqL1xuMTQyMDpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7dGFpbF9jYWxscyBhcmUgbm90IGFsbG93ZWQgaW4gbm9uLUpJVGVkIHByb2dyYW1zIHdpdGggYnBmLXRvLWJwZiBjYWxsc1xcblwmIzM0Oyk7XG4xNDIxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTQyMjpcdFx0fVxuMTQyMzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvZy1cdTAwM2VsZW47IGkmIzQzOyYjNDM7LCBpbnNuJiM0MzsmIzQzOykge1xuMTQyNDpcdFx0XHRpZiAoYnBmX3BzZXVkb19mdW5jKGluc24pKSB7XG4xNDI1Olx0XHRcdFx0LyogV2hlbiBKSVQgZmFpbHMgdGhlIHByb2dzIHdpdGggY2FsbGJhY2sgY2FsbHNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0NwoJCQkJCQkJb3V0cHV0OiAxNzgKCQkJCQkJCXRob3VnaHRzOiA1MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBKSVQgUmVxdWlyZW1lbnRzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpczogdGhlIGNvZGUmIzM5O3MgbG9naWMgY29uY2VybmluZyBCUEYgSklUIHJlcXVpcmVtZW50cyBpcyBiYXNlZCBvbiBgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OYCBhbmQgYHByb2ctJmd0O2ppdF9yZXF1aXJlZGAuIElmIGBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05gIGlzbiYjMzk7dCBzZXQsIGFuZCBgcHJvZy0mZ3Q7aml0X3JlcXVpcmVkYCBpcyB0cnVlLCB0aGUgcHJvZ3JhbSBpcyByZWplY3RlZC4gSG93ZXZlciwgaWYgYENPTkZJR19CUEZfSklUX0FMV0FZU19PTmAgaXMgc2V0LCB0aGVuIGBwcm9nLSZndDtqaXRfcmVxdWlyZWRgIGRlZmF1bHRzIHRvIHRydWUsIGFuZCBpdCAqZG9lc24mIzM5O3QqIHJlamVjdCBpdC4gVGhlIHRyaWNraWVyIHBhcnQgaXMgd2hlbiBgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OYCAqaXNuJiMzOTt0KiBzZXQsIGJ1dCBgcHJvZy0mZ3Q7aml0X3JlcXVpcmVkYCBpcyB0cnVlOyBpbiB0aGlzIGNhc2UsIGl0IGFwcGVhcnMgdG8gcmVseSBvbiBgYnBmX2ppdF9zdWJwcm9nc2Agc3VjY2VlZGluZy4gSSBzZWUgdGhhdCBgYnBmX2ppdF9zdWJwcm9nc2AgaXMgY2FsbGVkIGlmIGBqaXRfcmVxdWVzdGVkYCBhbmQgcmV0dXJucyAwIG9uIHN1Y2Nlc3MuIElmIGl0IGZhaWxzIG9yIGBqaXRfcmVxdWVzdGVkYCBpcyBmYWxzZSwgaXQgcHJvY2VlZHMgaW50byB0aGUgYCNpZm5kZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OYCBibG9jay4gU28gdGhlIGNvbmNsdXNpb24gaGVyZSBpcyB0aGF0IHdoZW4gYHByb2ctJmd0O2ppdF9yZXF1aXJlZGAgaXMgdHJ1ZSwgdGhlIEpJVCAqbXVzdCogc3VjY2VlZC4KClRvIHByb3Blcmx5IHRlc3QgdGhpcywgSSYjMzk7ZCB3YW50IHRvIGVuYWJsZSBgQlBGX0pJVGAgYW5kIGBCUEZfSklUX0FMV0FZU19PTmAsIG9yIHNpbXBseSBgQlBGX0pJVGAuIEdvb2QgbmV3cywgc3l6Ym90IGFscmVhZHkgdXNlcyB0aGVzZSwgc28gSSBvbmx5IG5lZWQgdG8gbm90ZSBgQlBGX1NZU0NBTExgIGFuZCBgU01QYCBmb3IgbXkgY29uZmlndXJhdGlvbi4KCkFscmlnaHQsIG5vdyBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgY2hhbmdpbmcgYGJwZl9tYXBfc3VwcG9ydHNfY3B1X2ZsYWdzYCB0byBgYnBmX21hcF9pc19wZXJjcHVfbWFwYCwgd2hpY2ggbG9va3MgaW5ub2N1b3VzLCBidXQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEpJVCwgaXQgY291bGQgYmUgc2lnbmlmaWNhbnQuIFRoZSBwYXRjaCBpcyBzZXR0aW5nIGBwcm9nLSZndDtqaXRfcmVxdWlyZWQgPSB0cnVlYCBpbiBgYnBmX2RvX21pc2NfZml4dXBzYCBmb3IgcGVyY3B1IG1hcHMsIGBicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWRgLCBgYnBmX2dldF9jdXJyZW50X3Rhc2tgLCBgYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmYC4gSW4gYGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlgLCBpdCBpcyBzZXR0aW5nIGBwcm9nLSZndDtqaXRfcmVxdWlyZWQgPSB0cnVlYCBmb3IgYXJlbmEgbWFwcy4gQW5kIGluIGBfX2FkZF91c2VkX21hcGAgZm9yIGluc3RydWN0aW9uIGFycmF5IG1hcHMuIFNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGVzZSBtYXAgdHlwZXMgYW5kIHNwZWNpZmljIGluc3RydWN0aW9ucy4KClRoaXMgY29uc3RpdHV0ZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHdhcnJhbnRzIGZ1enppbmcsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgaXRzIHJlbGF0aW9uIHRvIHRoZSBKSVQuIE15IGZvY3VzIGZ1bmN0aW9ucyBmb3IgZnV6emluZyB3aWxsIGJlIGBicGZfZG9fbWlzY19maXh1cHNgLCBgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eWAsIGFuZCBgX19hZGRfdXNlZF9tYXBgLiBUaGUgcmVsZXZhbnQgY29uZmlnIGlzIGBCUEZfU1lTQ0FMTGAuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7LAogICAgJiMzNDtjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5JiMzNDssCiAgICAmIzM0O19fYWRkX3VzZWRfbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gZm9yY2UgSklUIGNvbXBpbGF0aW9uIGZvciBwcm9ncmFtcyB0aGF0IHVzZSBwZXItQ1BVIG1hcHMsIHNwZWNpZmljIEJQRiBoZWxwZXJzIChicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQsIGJwZl9nZXRfY3VycmVudF90YXNrLCBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYpLCBhcmVuYSBtYXBzLCBhbmQgaW5zdHJ1Y3Rpb24gYXJyYXkgbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBlbmZvcmNlcyBKSVQgcmVxdWlyZW1lbnRzIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgYnlwYXNzZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7LAogICAgJiMzNDtjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5JiMzNDssCiAgICAmIzM0O19fYWRkX3VzZWRfbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gZm9yY2UgSklUIGNvbXBpbGF0aW9uIGZvciBwcm9ncmFtcyB0aGF0IHVzZSBwZXItQ1BVIG1hcHMsIHNwZWNpZmljIEJQRiBoZWxwZXJzIChicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQsIGJwZl9nZXRfY3VycmVudF90YXNrLCBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYpLCBhcmVuYSBtYXBzLCBhbmQgaW5zdHJ1Y3Rpb24gYXJyYXkgbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBlbmZvcmNlcyBKSVQgcmVxdWlyZW1lbnRzIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgYnlwYXNzZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNVQyMTozNTowNy44ODQ0NTE2NTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgxNzk2ODkzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiU01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2RvX21pc2NfZml4dXBzXCIsXG4gICAgXCJjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5XCIsXG4gICAgXCJfX2FkZF91c2VkX21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gZm9yY2UgSklUIGNvbXBpbGF0aW9uIGZvciBwcm9ncmFtcyB0aGF0IHVzZSBwZXItQ1BVIG1hcHMsIHNwZWNpZmljIEJQRiBoZWxwZXJzIChicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQsIGJwZl9nZXRfY3VycmVudF90YXNrLCBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYpLCBhcmVuYSBtYXBzLCBhbmQgaW5zdHJ1Y3Rpb24gYXJyYXkgbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBlbmZvcmNlcyBKSVQgcmVxdWlyZW1lbnRzIGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBieXBhc3Nlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMjE6MzU6MDcuODg0NDU2NjkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDEwOTAyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNTkyOTY5NzU2NzExZDZmNTkyZWRmNmExM2I2ZmM2NTJlNDg1MzJiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDE1IDIxOjM1OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuaW5kZXggMzExODFlMGMyYjgwMWIuLmQ5NTQyMTI3ZGZkZmMwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuQEAgLTQxNjMsNyArNDE2Myw3IEBAIGJwZl9wcm9nX3VwZGF0ZV9pbnNuX3B0cnMoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKm9mZnNldHMsIHZvaWQgKmltYWdlKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGJwZl9tYXBfc3VwcG9ydHNfY3B1X2ZsYWdzKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21hcF9pc19wZXJjcHVfbWFwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxcbiB7XFxuIFxcdHN3aXRjaCAobWFwX3R5cGUpIHtcXG4gXFx0Y2FzZSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZOlxcbkBAIC00MTkwLDcgKzQxOTAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBmbGFncywgdTY0IGFsbFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IChCUEZfRl9DUFUgfCBCUEZfRl9BTExfQ1BVUykpIHtcXG4tXFx0XFx0aWYgKCFicGZfbWFwX3N1cHBvcnRzX2NwdV9mbGFncyhtYXAtXFx1MDAzZW1hcF90eXBlKSlcXG4rXFx0XFx0aWYgKCFicGZfbWFwX2lzX3BlcmNwdV9tYXAobWFwLVxcdTAwM2VtYXBfdHlwZSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQ1BVKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BTExfQ1BVUykpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xcbmluZGV4IGQzYmU5NzI3MTRiMjJjLi5hMGJkZGFkYTc5NjRlNyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xcbkBAIC0yMDA4LDYgKzIwMDgsOSBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHRcXHRcXHRcXHR9XFxuIFxcbitcXHRcXHRcXHRcXHRpZiAoYnBmX21hcF9pc19wZXJjcHVfbWFwKG1hcF9wdHItXFx1MDAzZW1hcF90eXBlKSlcXG4rXFx0XFx0XFx0XFx0XFx0cHJvZy1cXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcXG4rXFxuIFxcdFxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGluc25fYnVmLCBjbnQpO1xcbiBcXHRcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbkBAIC0yMTEyLDYgKzIxMTUsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdCAqIHdheSwgaXQncyBmaW5lIHRvIGJhY2sgb3V0IHRoaXMgaW5saW5pbmcgbG9naWNcXG4gXFx0XFx0XFx0ICovXFxuICNpZmRlZiBDT05GSUdfU01QXFxuK1xcdFxcdFxcdHByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XFxuIFxcdFxcdFxcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNmNwdV9udW1iZXIpO1xcbiBcXHRcXHRcXHRpbnNuX2J1ZlsxXSA9IEJQRl9NT1Y2NF9QRVJDUFVfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18wKTtcXG4gXFx0XFx0XFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xcbkBAIC0yMTMzLDYgKzIxMzcsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdC8qIEltcGxlbWVudCBicGZfZ2V0X2N1cnJlbnRfdGFzaygpIGFuZCBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKSBpbmxpbmUuICovXFxuIFxcdFxcdGlmICgoaW5zbi1cXHUwMDNlaW1tID09IEJQRl9GVU5DX2dldF9jdXJyZW50X3Rhc2sgfHwgaW5zbi1cXHUwMDNlaW1tID09IEJQRl9GVU5DX2dldF9jdXJyZW50X3Rhc2tfYnRmKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgYnBmX3ZlcmlmaWVyX2lubGluZXNfaGVscGVyX2NhbGwoZW52LCBpbnNuLVxcdTAwM2VpbW0pKSB7XFxuK1xcdFxcdFxcdHByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XFxuIFxcdFxcdFxcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNmN1cnJlbnRfdGFzayk7XFxuIFxcdFxcdFxcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xcbiBcXHRcXHRcXHRpbnNuX2J1ZlsyXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCBkZTgxNjA2M2FlNjNkMC4uZTJlZjc4MzZiN2I1MDcgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTE3ODczLDYgKzE3ODczLDcgQEAgc3RhdGljIGludCBjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXJlbmEgPSAodm9pZCAqKW1hcDtcXG4rXFx0XFx0ZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO1xcbiBcXHRcXHRpZiAoIWJwZl9hcmVuYV9nZXRfdXNlcl92bV9zdGFydChlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXJlbmEpKSB7XFxuIFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiYXJlbmEncyB1c2VyIGFkZHJlc3MgbXVzdCBiZSBzZXQgdmlhIG1hcF9leHRyYSBvciBtbWFwKClcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtMTc5MjYsNiArMTc5MjcsNyBAQCBzdGF0aWMgaW50IF9fYWRkX3VzZWRfbWFwKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfbWFwICptYXApXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdH1cXG4gXFx0XFx0ZW52LVxcdTAwM2VpbnNuX2FycmF5X21hcHNbZW52LVxcdTAwM2VpbnNuX2FycmF5X21hcF9jbnQrK10gPSBtYXA7XFxuK1xcdFxcdGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGVudi1cXHUwMDNldXNlZF9tYXBfY250IC0gMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMjE6MzU6MDguMjI2MjY1NzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NDc2MTQ2NTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJTTVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfZG9fbWlzY19maXh1cHNcIixcbiAgICBcImNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlcIixcbiAgICBcIl9fYWRkX3VzZWRfbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBmb3JjZSBKSVQgY29tcGlsYXRpb24gZm9yIHByb2dyYW1zIHRoYXQgdXNlIHBlci1DUFUgbWFwcywgc3BlY2lmaWMgQlBGIGhlbHBlcnMgKGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCwgYnBmX2dldF9jdXJyZW50X3Rhc2ssIGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZiksIGFyZW5hIG1hcHMsIGFuZCBpbnN0cnVjdGlvbiBhcnJheSBtYXBzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGVuZm9yY2VzIEpJVCByZXF1aXJlbWVudHMgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGJ5cGFzc2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM1OTI5Njk3NTY3MTFkNmY1OTJlZGY2YTEzYjZmYzY1MmU0ODUzMmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAyMTozNTowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCAzMTE4MWUwYzJiODAxYi4uZDk1NDIxMjdkZmRmYzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtNDE2Myw3ICs0MTYzLDcgQEAgYnBmX3Byb2dfdXBkYXRlX2luc25fcHRycyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqb2Zmc2V0cywgdm9pZCAqaW1hZ2UpXG4gfVxuICNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWFwX3N1cHBvcnRzX2NwdV9mbGFncyhlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcbitzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21hcF9pc19wZXJjcHVfbWFwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuIHtcbiBcdHN3aXRjaCAobWFwX3R5cGUpIHtcbiBcdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWTpcbkBAIC00MTkwLDcgKzQxOTAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBmbGFncywgdTY0IGFsbFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgKEJQRl9GX0NQVSB8IEJQRl9GX0FMTF9DUFVTKSkge1xuLVx0XHRpZiAoIWJwZl9tYXBfc3VwcG9ydHNfY3B1X2ZsYWdzKG1hcC1cdTAwM2VtYXBfdHlwZSkpXG4rXHRcdGlmICghYnBmX21hcF9pc19wZXJjcHVfbWFwKG1hcC1cdTAwM2VtYXBfdHlwZSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0NQVSkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgQlBGX0ZfQUxMX0NQVVMpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCBkM2JlOTcyNzE0YjIyYy4uYTBiZGRhZGE3OTY0ZTcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtMjAwOCw2ICsyMDA4LDkgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdFx0XHRcdH1cbiBcbitcdFx0XHRcdGlmIChicGZfbWFwX2lzX3BlcmNwdV9tYXAobWFwX3B0ci1cdTAwM2VtYXBfdHlwZSkpXG4rXHRcdFx0XHRcdHByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcbitcbiBcdFx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSxcbiBcdFx0XHRcdFx0XHRcdCAgICAgICBpbnNuX2J1ZiwgY250KTtcbiBcdFx0XHRcdGlmICghbmV3X3Byb2cpXG5AQCAtMjExMiw2ICsyMTE1LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdCAqIHdheSwgaXQncyBmaW5lIHRvIGJhY2sgb3V0IHRoaXMgaW5saW5pbmcgbG9naWNcbiBcdFx0XHQgKi9cbiAjaWZkZWYgQ09ORklHX1NNUFxuK1x0XHRcdHByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcbiBcdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAodTMyKSh1bnNpZ25lZCBsb25nKVx1MDAyNmNwdV9udW1iZXIpO1xuIFx0XHRcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xuIFx0XHRcdGluc25fYnVmWzJdID0gQlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfMCwgQlBGX1JFR18wLCAwKTtcbkBAIC0yMTMzLDYgKzIxMzcsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdC8qIEltcGxlbWVudCBicGZfZ2V0X2N1cnJlbnRfdGFzaygpIGFuZCBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKSBpbmxpbmUuICovXG4gXHRcdGlmICgoaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0ZVTkNfZ2V0X2N1cnJlbnRfdGFzayB8fCBpbnNuLVx1MDAzZWltbSA9PSBCUEZfRlVOQ19nZXRfY3VycmVudF90YXNrX2J0ZikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBicGZfdmVyaWZpZXJfaW5saW5lc19oZWxwZXJfY2FsbChlbnYsIGluc24tXHUwMDNlaW1tKSkge1xuK1x0XHRcdHByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcbiBcdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAodTMyKSh1bnNpZ25lZCBsb25nKVx1MDAyNmN1cnJlbnRfdGFzayk7XG4gXHRcdFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XG4gXHRcdFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18wLCAwKTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGRlODE2MDYzYWU2M2QwLi5lMmVmNzgzNmI3YjUwNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMTc4NzMsNiArMTc4NzMsNyBAQCBzdGF0aWMgaW50IGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHRcdH1cbiBcdFx0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWFyZW5hID0gKHZvaWQgKiltYXA7XG4rXHRcdGVudi1cdTAwM2Vwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XG4gXHRcdGlmICghYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSkpIHtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCJhcmVuYSdzIHVzZXIgYWRkcmVzcyBtdXN0IGJlIHNldCB2aWEgbWFwX2V4dHJhIG9yIG1tYXAoKVxcblwiKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xNzkyNiw2ICsxNzkyNyw3IEBAIHN0YXRpYyBpbnQgX19hZGRfdXNlZF9tYXAoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4gXHRcdGVudi1cdTAwM2VpbnNuX2FycmF5X21hcHNbZW52LVx1MDAzZWluc25fYXJyYXlfbWFwX2NudCsrXSA9IG1hcDtcbitcdFx0ZW52LVx1MDAzZXByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcbiBcdH1cbiBcbiBcdHJldHVybiBlbnYtXHUwMDNldXNlZF9tYXBfY250IC0gMTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIxOjM1OjA4LjIyNjI2NjkxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYzNzEyMjQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgRml4dXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgaXQncyBhIGZvY3VzZWQgY2hhbmdlIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgdG91Y2hpbmcgdXBvbiB0aGUgdmVyaWZpZXIgYW5kIGZpeHVwcywgc3BlY2lmaWNhbGx5LiBJdCdzIG1vZGlmeWluZyBhIGZldyBrZXkgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L2JwZi5oYCwgYGtlcm5lbC9icGYvZml4dXBzLmNgLCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gaW52b2x2ZSByZW5hbWluZyBgYnBmX21hcF9zdXBwb3J0c19jcHVfZmxhZ3NgIHRvIGBicGZfbWFwX2lzX3BlcmNwdV9tYXBgLCB3aGljaCBmZWVscyBsaWtlIGEgbW9yZSBkZXNjcmlwdGl2ZSBuYW1lLCBhIGdvb2QgbW92ZSByZWFsbHkuXG5cblRoZSBjcnVjaWFsIGJpdCwgdGhvdWdoLCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWVgIGluIHNldmVyYWwgc3BvdHMgd2l0aGluIGBicGZfZG9fbWlzY19maXh1cHNgLCBhbmQgYGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlgIGFuZCBgX19hZGRfdXNlZF9tYXBgLiBSaWdodCwgc28gdGhpcyBtZWFucyB0aGF0IHByb2dyYW1zICpyZWx5aW5nKiBvbiB0aGlzIG1vZGlmaWVkIGxvZ2ljIHdpbGwgbm93ICpyZXF1aXJlKiBKSVQgY29tcGlsYXRpb24uIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY29uc3RyYWludCBhcyBpdCBpbXBhY3RzIHBlcmZvcm1hbmNlIGFuZCBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eSBjb25jZXJucy5cblxuVGhlIGFmZmVjdGVkIHNjZW5hcmlvcyBhcmUgcHJldHR5IGNsZWFyOiBhbnkgcHJvZ3JhbSB1dGlsaXppbmcgcGVyLUNQVSBtYXBzLCBgYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkYCwgYGJwZl9nZXRfY3VycmVudF90YXNrYCwgYGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZmAsIGFyZW5hIG1hcHMsIGFuZCBpbnN0cnVjdGlvbiBhcnJheSBtYXBzLiBJdCBtYWtlcyBzZW5zZSwgdGhlc2UgZmVhdHVyZXMgb2Z0ZW4gaW52b2x2ZSBkeW5hbWljIG9yIHBlci1DUFUgZGF0YSBhY2Nlc3MgdGhhdCBiZW5lZml0cyBhIEpJVC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGJldHRlci4gQlBGIGlzIGVuYWJsZWQgdmlhIGBDT05GSUdfQlBGX1NZU0NBTExgLCB0aGF0J3MgdGhlIGJhc2UgcmVxdWlyZW1lbnQuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbmZpZ3Mgc3Vycm91bmRpbmcgdGhlc2UgZnVuY3Rpb25zOiBgYnBmX2RvX21pc2NfZml4dXBzYCwgYGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlgLCBhbmQgYF9fYWRkX3VzZWRfbWFwYC4gSSdtIGdvaW5nIHRvIGxldmVyYWdlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWdzIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBmdW5jdGlvbnMgdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIGhvdyB0aGV5J3JlIHV0aWxpemVkIGVsc2V3aGVyZSwgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBvciBpbXBsaWNhdGlvbnMgYXJlLiBHb3R0YSBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25maWcgZGVwZW5kZW5jaWVzLCBvciBjb3JuZXIgY2FzZXMgaW4gdGhlIHN5c3RlbSB0aGF0J2xsIGJlIGFmZmVjdGVkLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMzYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQyMTozNToxMy44NjMzOTEyNTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMzExODczNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZG9fbWlzY19maXh1cHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xNjU2PWludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTY1NzppbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTY1OC1cXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTQ1MT1zdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCBpbnQgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNDc5LSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTQ4MDppbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNDgxLXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDAwND1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIxNi1cXHRpZiAocmV0ID09IDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMjE3OlxcdFxcdHJldCA9IGJwZl9kb19taXNjX2ZpeHVwcyhlbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIxOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMjE6MzU6MTUuNTk2NTEzNzc1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU3OTIzNjg0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoaXMgQlBGIFBhdGNoKipcblxuQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIGdvaW5nIHN0cmFpZ2h0IGludG8gdGhlIGNvcmUgQlBGIHZlcmlmaWVyLCB0aGF0J3MgaW1wb3J0YW50IHRvIG5vdGUuIEFuZCBhIHF1aWNrIHJlbWluZGVyIHRoYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZSwgc28gSSdsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGRlbHZlIGZ1cnRoZXIuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgaW1wYWN0IG9uIGBfX2FkZF91c2VkX21hcGAgYW5kIHRoZSBmdW5jdGlvbiBgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eWAuIFRoZXNlIGFyZSBrZXkgYXJlYXMsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gbWFwIGludGVyYWN0aW9ucywgYW5kIHRoaXMgcGF0Y2ggd2lsbCB1bmRvdWJ0ZWRseSBoYXZlIHNvbWUgcmlwcGxlIGVmZmVjdHMgdGhlcmUgdGhhdCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZC4gSSB3aWxsIGhhdmUgdG8gZW5zdXJlIHRoYXQgYWxsIG9mIHRoZSBtYXAgaW50ZXJhY3Rpb25zIGFuZCB2ZXJpZmllciBjaGVja3MgYXJlIHN0aWxsIGFwcHJvcHJpYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTYyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMjE6MzU6MTguMTc1NzUyMzcyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzAyNzAzMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hZGRfdXNlZF9tYXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTE3Nzc4PXN0YXRpYyBpbnQgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3ODg1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzg4NjpzdGF0aWMgaW50IF9fYWRkX3VzZWRfbWFwKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3ODg3LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzk0MD1zdGF0aWMgaW50IGFkZF91c2VkX21hcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgZmQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NTAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTUxOlxcdHJldHVybiBfX2FkZF91c2VkX21hcChlbnYsIG1hcCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTUyLX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzk1ND1zdGF0aWMgaW50IGZkX2FycmF5X2dldF9tYXBfaWR4X2NvbnRpbnVvdXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGlkeClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk2Ny1cXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTY4OlxcdHJldHVybiBfX2FkZF91c2VkX21hcChlbnYsIG1hcCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTY5LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTU2MT1zdGF0aWMgaW50IGFkZF9mZF9mcm9tX2ZkX2FycmF5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpZHgsIGludCBmZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU2OS1cXHRpZiAoIUlTX0VSUihtYXApKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NTcwOlxcdFxcdGVyciA9IF9fYWRkX3VzZWRfbWFwKGVudiwgbWFwKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1NzEtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1OTUtICogdGhlIG51bWJlciBvZiBkaXN0aW5jdCBtYXBzIGFuZCBCVEZzIGEgcHJvZ3JhbSBjYW4gYmluZCBpcyBlbmZvcmNlZCB3aGVuXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NTk2OiAqIGVhY2ggZW50cnkgaXMgcmVzb2x2ZWQgYnkgX19hZGRfdXNlZF9tYXAoKSBhbmQgX19hZGRfdXNlZF9idGYoKS5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1OTctICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIxOjM1OjIwLjE0NjAyNzUwNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNDQwOTM4ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBKSVQgRm9yY2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgZm9yY2luZyB0aGUgSnVzdC1Jbi1UaW1lIChKSVQpIGNvbXBpbGVyIGZvciBzcGVjaWZpYyBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIHByb2dyYW1zLiBUaGUga2V5IGhlcmUgaXMgdGhpcyBsaW5lOiBgcHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO2AgVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLlxuXG5NeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgb3IgcG90ZW50aWFsbHkgaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2U6IGBicGZfZG9fbWlzY19maXh1cHNgLCBgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eWAsIGFuZCBgX19hZGRfdXNlZF9tYXBgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBhZGp1c3RtZW50LiBgYnBmX2RvX21pc2NfZml4dXBzYCBpcyBjYWxsZWQgZm9yIGV2ZXJ5IEJQRiBwcm9ncmFtIGxvYWRlZCwgd2hpY2ggbWFrZXMgaXQgYSBwb3RlbnRpYWxseSBob3Qgc3BvdC4gSG93ZXZlciwgaXQncyBjYWxsZWQgZHVyaW5nIHZlcmlmaWNhdGlvbiwgbm90IHRoZSBleGVjdXRpb24gcGF0aCwgc28gdGhhdCdzIGdvb2QuIGBjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5YCBhbmQgYF9fYWRkX3VzZWRfbWFwYCBhcmUgYWxzbyB2ZXJpZmllciBmdW5jdGlvbnMsIHNvIHRoZXkgYXJlIG5vdCBkaXJlY3RseSBpbiB0aGUgcHJvZ3JhbSBleGVjdXRpb24uXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBicGZfZG9fbWlzY19maXh1cHNgIGlzIHRoZSBjb3JyZWN0IGZvY3VzLiBJdCdzIGNhbGxlZCBkdXJpbmcgYGJwZl9jaGVja2AsIHdoaWNoIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIHNvIGl0IHNob3VsZCBiZS4gYGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlgIGFuZCBgX19hZGRfdXNlZF9tYXBgIHdpbGwgYWxzbyBiZSBnb29kIHRvIHJldmlldy5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucy4gSSBrbm93IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgaGFyZCByZXF1aXJlbWVudCBmb3IgQlBGLiBUaGUgcGF0Y2ggbWVudGlvbnMgYENPTkZJR19TTVBgLCB3aGljaCBpcyBjb21tb24sIGJ1dCBpdCdzIGltcG9ydGFudCB0byBrZWVwIHRyYWNrIG9mIGl0cyBpbnRlcmFjdGlvbi4gSSBzdXNwZWN0IGBDT05GSUdfQlBGX0pJVGAgaXMgcHJvYmFibHkgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGUgSklUIGVuZm9yY2VtZW50LiBUaGUgYGppdF9yZXF1aXJlZGAgbWlnaHQgYmUgZGVzaWduZWQgdG8gcmVqZWN0IHRoZSBwcm9ncmFtIGlmIHRoZSBKSVQgaXMgbm90IGVuYWJsZWQgb3IgcmVxdWVzdGVkLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSB1c2FnZSBvZiBgaml0X3JlcXVpcmVkYCB0byBmdWxseSBncmFzcCB0aGUgc2NvcGUgYW5kIGVmZmVjdHMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NTMsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMjE6MzU6MjYuMjkwMTIzMzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzODU0MDk5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJqaXRfcmVxdWlyZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0xODY1PXN0cnVjdCBicGZfcHJvZyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE4NjgtXFx0XFx0XFx0XFx0aml0X3JlcXVlc3RlZDoxLC8qIGFyY2hzIG5lZWQgdG8gSklUIHRoZSBwcm9nICovXFxuaW5jbHVkZS9saW51eC9icGYuaDoxODY5OlxcdFxcdFxcdFxcdGppdF9yZXF1aXJlZDoxLFxcdC8qIHByb2dyYW0gc3RyaWN0bHkgcmVxdWlyZXMgSklUIGNvbXBpbGVyICovXFxuaW5jbHVkZS9saW51eC9icGYuaC0xODcwLVxcdFxcdFxcdFxcdGdwbF9jb21wYXRpYmxlOjEsIC8qIElzIGZpbHRlciBHUEwgY29tcGF0aWJsZT8gKi9cXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTEwMD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2FsbG9jX25vX3N0YXRzKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfZXh0cmFfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xMjgtXFx0ZnAtXFx1MDAzZWppdF9yZXF1ZXN0ZWQgPSBlYnBmX2ppdF9lbmFibGVkKCk7XFxua2VybmVsL2JwZi9jb3JlLmM6MTI5OlxcdGZwLVxcdTAwM2VqaXRfcmVxdWlyZWQgPSBJU19FTkFCTEVEKENPTkZJR19CUEZfSklUX0FMV0FZU19PTik7XFxua2VybmVsL2JwZi9jb3JlLmMtMTMwLVxcdGZwLVxcdTAwM2VibGluZGluZ19yZXF1ZXN0ZWQgPSBicGZfaml0X2JsaW5kaW5nX2VuYWJsZWQoZnApO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjY2OD1zdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI2NzMtXFx0ICovXFxua2VybmVsL2JwZi9jb3JlLmM6MjY3NDpcXHRib29sIGppdF9uZWVkZWQgPSBmcC1cXHUwMDNlaml0X3JlcXVpcmVkO1xcbmtlcm5lbC9icGYvY29yZS5jLTI2NzUtXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTEzNzY9aW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTQwNS0jaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTQwNjpcXHRpZiAocHJvZy1cXHUwMDNlaml0X3JlcXVpcmVkKSB7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xNDA3LVxcdFxcdHZlcmJvc2UoZW52LCBcXFwicHJvZ3JhbSByZXF1aXJlcyBCUEYgSklUIGNvbXBpbGVyIGJ1dCBpdCBpcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTQ4MD1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NDMtXFx0XFx0aWYgKGJwZl9qaXRfaW5saW5lc19oZWxwZXJfY2FsbChpbnNuLVxcdTAwM2VpbW0pKSB7XFxua2VybmVsL2JwZi9maXh1cHMuYzoxODQ0OlxcdFxcdFxcdHByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCA9IDE7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xODQ1LVxcdFxcdFxcdGdvdG8gbmV4dF9pbnNuO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDExLVxcdFxcdFxcdFxcdGlmIChicGZfbWFwX2lzX3BlcmNwdV9tYXAobWFwX3B0ci1cXHUwMDNlbWFwX3R5cGUpKVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjAxMjpcXHRcXHRcXHRcXHRcXHRwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMjAxMy1cXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjExNy0jaWZkZWYgQ09ORklHX1NNUFxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjExODpcXHRcXHRcXHRwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMjExOS1cXHRcXHRcXHRpbnNuX2J1ZlswXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAodTMyKSh1bnNpZ25lZCBsb25nKVxcdTAwMjZjcHVfbnVtYmVyKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjEzOS1cXHRcXHQgICAgYnBmX3ZlcmlmaWVyX2lubGluZXNfaGVscGVyX2NhbGwoZW52LCBpbnNuLVxcdTAwM2VpbW0pKSB7XFxua2VybmVsL2JwZi9maXh1cHMuYzoyMTQwOlxcdFxcdFxcdHByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTQxLVxcdFxcdFxcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNmN1cnJlbnRfdGFzayk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjcyMT1pbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTI3NjEtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjI3NjI6XFx0ZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQgPSAxO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzYzLVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3Nzc4PXN0YXRpYyBpbnQgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3ODc1LVxcdFxcdGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhcmVuYSA9ICh2b2lkICopbWFwO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzg3NjpcXHRcXHRlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3ODc3LVxcdFxcdGlmICghYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhcmVuYSkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzg4Nj1zdGF0aWMgaW50IF9fYWRkX3VzZWRfbWFwKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5MjktXFx0XFx0ZW52LVxcdTAwM2VpbnNuX2FycmF5X21hcHNbZW52LVxcdTAwM2VpbnNuX2FycmF5X21hcF9jbnQrK10gPSBtYXA7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTMwOlxcdFxcdGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5MzEtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQyMTozNToyNy45Mjg2Njk0NDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTk4Njc4Mzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IGZvcmNpbmcgdGhlIEpJVCByZXF1aXJlbWVudCB0byBiZSBhY3RpdmUgZm9yIGFueSBCUEYgcHJvZ3JhbSB0aGF0IHVzZXMgcGVyLUNQVSBtYXBzLCBzcGVjaWZpYyBCUEYgaGVscGVyIGZ1bmN0aW9ucyBsaWtlIGBicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWRgLCBvciBjZXJ0YWluIG1hcCB0eXBlcyBzdWNoIGFzIGFyZW5hIGFuZCBpbnN0cnVjdGlvbiBhcnJheSBtYXBzLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBwZXJmb3JtYW5jZSB0d2VhaywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgdGhvcm91Z2hseS5cblxuTXkgcHJpbWFyeSBmb2N1cyBoZXJlIG5lZWRzIHRvIGJlIHRoZSBgYnBmX2RvX21pc2NfZml4dXBzYCwgYGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHlgLCBhbmQgYF9fYWRkX3VzZWRfbWFwYCBmdW5jdGlvbnM7IEkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gaG93IHRoZXkgaW50ZXJhY3Qgbm93LCB3aXRoIHRoaXMgYGppdF9yZXF1aXJlZGAgZmxhZyBiZWluZyBzZXQuIEkgYWxzbyBuZWVkIHRvIGtlZXAgYEJQRl9TWVNDQUxMYCBhbmQgYFNNUGAgY29uZmlndXJhdGlvbnMgaW4gbWluZCBhcyB0aGV5J2xsIGxpa2VseSBwbGF5IGEgcm9sZSBpbiB0aGlzLlxuXG5UaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGF0IGhhcHBlbnMgaWYgdGhlIEpJVCBpc24ndCBlbmFibGVkPyBJZiBgQlBGX0pJVGAgaXMgZGlzYWJsZWQsIHRoZSB2ZXJpZmllciAqc2hvdWxkKiBub3cgcmVqZWN0IHRoZSBwcm9ncmFtIG91dHJpZ2h0LCBiZWNhdXNlIGBqaXRfcmVxdWlyZWRgIGlzIHRydWUgYnV0IG5vIEpJVCBpcyBhdmFpbGFibGUgdG8gbWVldCB0aGF0IHJlcXVpcmVtZW50LiBCdXQgd2FpdCwgSSByZWNhbGwgYGJwZl9maXh1cF9jYWxsX2FyZ3NgIHBlcmZvcm1pbmcgc29tZSBjaGVja3MhIERvZXMgaXQgYWxyZWFkeSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYHByb2ctXHUwMDNlaml0X3JlcXVpcmVkYCBpcyBzZXQsIGFuZCBpdCB3b3VsZCByZWplY3QgdGhlIHByb2dyYW0gaWYgYENPTkZJR19CUEZfSklUX0FMV0FZU19PTmAgaXNuJ3Qgc2V0LCBhbmQgaWYgdGhlcmUncyBubyBKSVQgYXZhaWxhYmxlPyBJIHNob3VsZCBnbyBiYWNrIGFuZCByZXZpZXcgdGhlIGBicGZfZml4dXBfY2FsbF9hcmdzYCBmdW5jdGlvbiB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIEl0IGlzIHZpdGFsIHRvIGdldCB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlc2UgcGFydHMgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAyMSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQyMTozNTozMi45MjczNDk4MTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Nzg4NTYxMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ZpeHVwX2NhbGxfYXJnc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE2NTU9aW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxNjU2OmludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTY1Ny1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xMjk2PWludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEzNzUtXFxua2VybmVsL2JwZi9maXh1cHMuYzoxMzc2OmludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9maXh1cHMuYy0xMzc3LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDAwND1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIyOC1cXHRpZiAocmV0ID09IDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMjI5OlxcdFxcdHJldCA9IGJwZl9maXh1cF9jYWxsX2FyZ3MoZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAyMzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIxOjM1OjM0LjYwNjIxMDQ4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQyMzM3NDE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjpcblxuKipBbmFseXppbmcgYGJwZl9maXh1cF9jYWxsX2FyZ3NgIGFuZCBgaml0X3JlcXVpcmVkYCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBqaXRfcmVxdWlyZWRgIGZsYWcgaW50ZXJhY3RzIHdpdGggdGhlIGNhbGwgYXJndW1lbnQgaGFuZGxpbmcgaW4gdGhlIEJQRiB3b3JsZC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgYnBmX2ZpeHVwX2NhbGxfYXJnc2AgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyBpdCdzIHVzZWQgYW5kIHdoYXQgY29uZGl0aW9uYWwgbG9naWMgaXMgaW4gcGxhY2UgYXJvdW5kIHRoYXQgYGppdF9yZXF1aXJlZGAgZmxhZy4gSSBzdXNwZWN0IHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgdGhlIGtleSB0byBlbnN1cmluZyB0aGF0IEpJVCBjb21waWxhdGlvbiBpcyB0cmlnZ2VyZWQgYXBwcm9wcmlhdGVseSB3aGVuIGRlYWxpbmcgd2l0aCBhcmd1bWVudHMgdGhhdCByZXF1aXJlIGl0LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjb25kaXRpb25zIGFyb3VuZCBvcHRpbWl6YXRpb24sIHBvdGVudGlhbCByZWdpc3RlciBzcGlsbHMgb3IgbG9hZHMsIG9yIG1heWJlIGV2ZW4gZnVuY3Rpb24gaW5saW5pbmcgZGVjaXNpb25zLCBhbGwgaW5mbHVlbmNlZCBieSB0aGF0IGBqaXRfcmVxdWlyZWRgIHNpZ25hbC4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBjb250cm9sIGZsb3cgYW5kIGlkZW50aWZ5IHRoZSBleGFjdCBwb2ludHMgd2hlcmUgYGppdF9yZXF1aXJlZGAgaXMgY2hlY2tlZCBhbmQgYWN0ZWQgdXBvbi4gVGhpcyBjb3VsZCByZXZlYWwgc29tZSBpbnRlcmVzdGluZyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQyMTozNTo0NS4wMjk1ODYzMjhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvZml4dXBzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM3NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM3NjpcXHRpbnQgYnBmX2ZpeHVwX2NhbGxfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbjEzNzc6XFx0e1xcbjEzNzg6XFx0I2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cXG4xMzc5OlxcdFxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGVudi1cXHUwMDNlcHJvZztcXG4xMzgwOlxcdFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IHByb2ctXFx1MDAzZWluc25zaTtcXG4xMzgxOlxcdFxcdGludCBkZXB0aDtcXG4xMzgyOlxcdCNlbmRpZlxcbjEzODM6XFx0XFx0aW50IGksIGVyciA9IDA7XFxuMTM4NDpcXHRcXG4xMzg1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBlbnYtXFx1MDAzZXN1YnByb2dfY250OyBpKyspIHtcXG4xMzg2OlxcdFxcdFxcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nID0gXFx1MDAyNmVudi1cXHUwMDNlc3VicHJvZ19pbmZvW2ldO1xcbjEzODc6XFx0XFx0XFx0dTE2IG91dGdvaW5nID0gc3VicHJvZy1cXHUwMDNlc3RhY2tfYXJnX2NudCAtIGJwZl9pbl9zdGFja19hcmdfY250KHN1YnByb2cpO1xcbjEzODg6XFx0XFxuMTM4OTpcXHRcXHRcXHRpZiAoc3VicHJvZy1cXHUwMDNlbWF4X291dF9zdGFja19hcmdfY250IFxcdTAwM2Ugb3V0Z29pbmcpIHtcXG4xMzkwOlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LFxcbjEzOTE6XFx0XFx0XFx0XFx0XFx0XFxcImZ1bmMjJWQgd3JpdGVzICV1IHN0YWNrIGFyZyBzbG90cywgYnV0IGNhbGxzIG9ubHkgcmVxdWlyZSAldVxcXFxuXFxcIixcXG4xMzkyOlxcdFxcdFxcdFxcdFxcdGksIHN1YnByb2ctXFx1MDAzZW1heF9vdXRfc3RhY2tfYXJnX2NudCwgb3V0Z29pbmcpO1xcbjEzOTM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTM5NDpcXHRcXHRcXHR9XFxuMTM5NTpcXHRcXHR9XFxuMTM5NjpcXHRcXG4xMzk3OlxcdFxcdGlmIChlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWppdF9yZXF1ZXN0ZWQgXFx1MDAyNlxcdTAwMjZcXG4xMzk4OlxcdFxcdCAgICAhYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4KSkge1xcbjEzOTk6XFx0XFx0XFx0ZXJyID0gYnBmX2ppdF9zdWJwcm9ncyhlbnYpO1xcbjE0MDA6XFx0XFx0XFx0aWYgKGVyciA9PSAwKVxcbjE0MDE6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTQwMjpcXHRcXHRcXHRpZiAoZXJyID09IC1FRkFVTFQpXFxuMTQwMzpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE0MDQ6XFx0XFx0fVxcbjE0MDU6XFx0I2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cXG4xNDA2OlxcdFxcdGlmIChwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQpIHtcXG4xNDA3OlxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwicHJvZ3JhbSByZXF1aXJlcyBCUEYgSklUIGNvbXBpbGVyIGJ1dCBpdCBpcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4xNDA4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0MDk6XFx0XFx0fVxcbjE0MTA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGVudi1cXHUwMDNlc3VicHJvZ19jbnQ7IGkrKykge1xcbjE0MTE6XFx0XFx0XFx0aWYgKGJwZl9pbl9zdGFja19hcmdfY250KFxcdTAwMjZlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tpXSkpIHtcXG4xNDEyOlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwic3RhY2sgYXJncyBhcmUgbm90IHN1cHBvcnRlZCBpbiBub24tSklUZWQgcHJvZ3JhbXNcXFxcblxcXCIpO1xcbjE0MTM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQxNDpcXHRcXHRcXHR9XFxuMTQxNTpcXHRcXHR9XFxuMTQxNjpcXHRcXHRpZiAoZW52LVxcdTAwM2VzdWJwcm9nX2NudCBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXRhaWxfY2FsbF9yZWFjaGFibGUpIHtcXG4xNDE3OlxcdFxcdFxcdC8qIFdoZW4gSklUIGZhaWxzIHRoZSBwcm9ncyB3aXRoIGJwZjJicGYgY2FsbHMgYW5kIHRhaWxfY2FsbHNcXG4xNDE4OlxcdFxcdFxcdCAqIGhhdmUgdG8gYmUgcmVqZWN0ZWQsIHNpbmNlIGludGVycHJldGVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtIHlldC5cXG4xNDE5OlxcdFxcdFxcdCAqL1xcbjE0MjA6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJ0YWlsX2NhbGxzIGFyZSBub3QgYWxsb3dlZCBpbiBub24tSklUZWQgcHJvZ3JhbXMgd2l0aCBicGYtdG8tYnBmIGNhbGxzXFxcXG5cXFwiKTtcXG4xNDIxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0MjI6XFx0XFx0fVxcbjE0MjM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHByb2ctXFx1MDAzZWxlbjsgaSsrLCBpbnNuKyspIHtcXG4xNDI0OlxcdFxcdFxcdGlmIChicGZfcHNldWRvX2Z1bmMoaW5zbikpIHtcXG4xNDI1OlxcdFxcdFxcdFxcdC8qIFdoZW4gSklUIGZhaWxzIHRoZSBwcm9ncyB3aXRoIGNhbGxiYWNrIGNhbGxzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIxOjM1OjQ1LjAyOTcyMzg1OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTk1NTE2ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgSklUIFJlcXVpcmVtZW50cyBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB0aGUgY29kZSdzIGxvZ2ljIGNvbmNlcm5pbmcgQlBGIEpJVCByZXF1aXJlbWVudHMgaXMgYmFzZWQgb24gYENPTkZJR19CUEZfSklUX0FMV0FZU19PTmAgYW5kIGBwcm9nLVx1MDAzZWppdF9yZXF1aXJlZGAuIElmIGBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05gIGlzbid0IHNldCwgYW5kIGBwcm9nLVx1MDAzZWppdF9yZXF1aXJlZGAgaXMgdHJ1ZSwgdGhlIHByb2dyYW0gaXMgcmVqZWN0ZWQuIEhvd2V2ZXIsIGlmIGBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05gIGlzIHNldCwgdGhlbiBgcHJvZy1cdTAwM2VqaXRfcmVxdWlyZWRgIGRlZmF1bHRzIHRvIHRydWUsIGFuZCBpdCAqZG9lc24ndCogcmVqZWN0IGl0LiBUaGUgdHJpY2tpZXIgcGFydCBpcyB3aGVuIGBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05gICppc24ndCogc2V0LCBidXQgYHByb2ctXHUwMDNlaml0X3JlcXVpcmVkYCBpcyB0cnVlOyBpbiB0aGlzIGNhc2UsIGl0IGFwcGVhcnMgdG8gcmVseSBvbiBgYnBmX2ppdF9zdWJwcm9nc2Agc3VjY2VlZGluZy4gSSBzZWUgdGhhdCBgYnBmX2ppdF9zdWJwcm9nc2AgaXMgY2FsbGVkIGlmIGBqaXRfcmVxdWVzdGVkYCBhbmQgcmV0dXJucyAwIG9uIHN1Y2Nlc3MuIElmIGl0IGZhaWxzIG9yIGBqaXRfcmVxdWVzdGVkYCBpcyBmYWxzZSwgaXQgcHJvY2VlZHMgaW50byB0aGUgYCNpZm5kZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OYCBibG9jay4gU28gdGhlIGNvbmNsdXNpb24gaGVyZSBpcyB0aGF0IHdoZW4gYHByb2ctXHUwMDNlaml0X3JlcXVpcmVkYCBpcyB0cnVlLCB0aGUgSklUICptdXN0KiBzdWNjZWVkLlxuXG5UbyBwcm9wZXJseSB0ZXN0IHRoaXMsIEknZCB3YW50IHRvIGVuYWJsZSBgQlBGX0pJVGAgYW5kIGBCUEZfSklUX0FMV0FZU19PTmAsIG9yIHNpbXBseSBgQlBGX0pJVGAuIEdvb2QgbmV3cywgc3l6Ym90IGFscmVhZHkgdXNlcyB0aGVzZSwgc28gSSBvbmx5IG5lZWQgdG8gbm90ZSBgQlBGX1NZU0NBTExgIGFuZCBgU01QYCBmb3IgbXkgY29uZmlndXJhdGlvbi5cblxuQWxyaWdodCwgbm93IGxldCdzIGNpcmNsZSBiYWNrIHRvIHRoZSBwYXRjaCBpdHNlbGYuIEl0J3MgY2hhbmdpbmcgYGJwZl9tYXBfc3VwcG9ydHNfY3B1X2ZsYWdzYCB0byBgYnBmX21hcF9pc19wZXJjcHVfbWFwYCwgd2hpY2ggbG9va3MgaW5ub2N1b3VzLCBidXQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEpJVCwgaXQgY291bGQgYmUgc2lnbmlmaWNhbnQuIFRoZSBwYXRjaCBpcyBzZXR0aW5nIGBwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWVgIGluIGBicGZfZG9fbWlzY19maXh1cHNgIGZvciBwZXJjcHUgbWFwcywgYGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZGAsIGBicGZfZ2V0X2N1cnJlbnRfdGFza2AsIGBicGZfZ2V0X2N1cnJlbnRfdGFza19idGZgLiBJbiBgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eWAsIGl0IGlzIHNldHRpbmcgYHByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZWAgZm9yIGFyZW5hIG1hcHMuIEFuZCBpbiBgX19hZGRfdXNlZF9tYXBgIGZvciBpbnN0cnVjdGlvbiBhcnJheSBtYXBzLiBTbyB0aGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZXNwZWNpYWxseSBhcm91bmQgdGhlc2UgbWFwIHR5cGVzIGFuZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMuXG5cblRoaXMgY29uc3RpdHV0ZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHdhcnJhbnRzIGZ1enppbmcsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgaXRzIHJlbGF0aW9uIHRvIHRoZSBKSVQuIE15IGZvY3VzIGZ1bmN0aW9ucyBmb3IgZnV6emluZyB3aWxsIGJlIGBicGZfZG9fbWlzY19maXh1cHNgLCBgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eWAsIGFuZCBgX19hZGRfdXNlZF9tYXBgLiBUaGUgcmVsZXZhbnQgY29uZmlnIGlzIGBCUEZfU1lTQ0FMTGAuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTQ3LCJPdXRwdXRUb2tlbnMiOjE3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIxOjM1OjUzLjYyNTI0MjU3M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MTY3MDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiU01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2RvX21pc2NfZml4dXBzXCIsXG4gICAgXCJjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5XCIsXG4gICAgXCJfX2FkZF91c2VkX21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gZm9yY2UgSklUIGNvbXBpbGF0aW9uIGZvciBwcm9ncmFtcyB0aGF0IHVzZSBwZXItQ1BVIG1hcHMsIHNwZWNpZmljIEJQRiBoZWxwZXJzIChicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQsIGJwZl9nZXRfY3VycmVudF90YXNrLCBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYpLCBhcmVuYSBtYXBzLCBhbmQgaW5zdHJ1Y3Rpb24gYXJyYXkgbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBlbmZvcmNlcyBKSVQgcmVxdWlyZW1lbnRzIGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBieXBhc3Nlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiU01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2RvX21pc2NfZml4dXBzXCIsXG4gICAgXCJjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5XCIsXG4gICAgXCJfX2FkZF91c2VkX21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gZm9yY2UgSklUIGNvbXBpbGF0aW9uIGZvciBwcm9ncmFtcyB0aGF0IHVzZSBwZXItQ1BVIG1hcHMsIHNwZWNpZmljIEJQRiBoZWxwZXJzIChicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQsIGJwZl9nZXRfY3VycmVudF90YXNrLCBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYpLCBhcmVuYSBtYXBzLCBhbmQgaW5zdHJ1Y3Rpb24gYXJyYXkgbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBlbmZvcmNlcyBKSVQgcmVxdWlyZW1lbnRzIGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBieXBhc3Nlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowj55dn[1] Phase: Succeeded StartedAt: 2026-07-15 21:36:04 +0000 UTC FinishedAt: 2026-07-15 21:36:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-15 21:36:04 +0000 UTC FinishedAt: 2026-07-15 21:36:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2] Phase: Succeeded StartedAt: 2026-07-15 21:36:04 +0000 UTC FinishedAt: 2026-07-16 01:33:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-15 21:36:04 +0000 UTC FinishedAt: 2026-07-16 01:33:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-15 21:36:04 +0000 UTC FinishedAt: 2026-07-15 21:36:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-15 21:36:04 +0000 UTC FinishedAt: 2026-07-15 21:36:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowj55dn/series-workflowj55dn-convert-artifact-2114126594/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-15 21:36:15 +0000 UTC FinishedAt: 2026-07-15 21:58:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-15 21:36:15 +0000 UTC FinishedAt: 2026-07-15 21:58:52 +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:*7b15086d-5f5a-4b60-a209-46bedb008153,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-workflowj55dn/series-workflowj55dn-convert-artifact-2114126594/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": "5b8a749d-4663-48ef-bf5d-7ff387c53b69", "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-workflowj55dn/series-workflowj55dn-build-action-3789722048/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-15 21:36:15 +0000 UTC FinishedAt: 2026-07-15 21:58:42 +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:*7b15086d-5f5a-4b60-a209-46bedb008153,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-workflowj55dn/series-workflowj55dn-convert-artifact-2114126594/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": "5b8a749d-4663-48ef-bf5d-7ff387c53b69", "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-workflowj55dn/series-workflowj55dn-build-action-3789722048/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-15 21:58:52 +0000 UTC FinishedAt: 2026-07-15 21:58:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-15 21:58:52 +0000 UTC FinishedAt: 2026-07-15 21:58:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-15 21:58:52 +0000 UTC FinishedAt: 2026-07-15 21:59:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-15 21:58:52 +0000 UTC FinishedAt: 2026-07-15 21:58:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowj55dn/series-workflowj55dn-convert-artifact-4050700637/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-15 21:59:02 +0000 UTC FinishedAt: 2026-07-15 22:01:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-15 21:59:02 +0000 UTC FinishedAt: 2026-07-15 22:00:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5b8a749d-4663-48ef-bf5d-7ff387c53b69,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-workflowj55dn/series-workflowj55dn-build-action-3789722048/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-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-15 22:01:03 +0000 UTC FinishedAt: 2026-07-15 22:01:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-15 22:01:03 +0000 UTC FinishedAt: 2026-07-15 22:01:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-15 22:01:03 +0000 UTC FinishedAt: 2026-07-15 22:29:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-15 22:01:03 +0000 UTC FinishedAt: 2026-07-15 22:29:07 +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:*7b15086d-5f5a-4b60-a209-46bedb008153,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-workflowj55dn/series-workflowj55dn-convert-artifact-4050700637/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": "465b2456-0e6f-4809-adea-c2fd79e1fa6f", "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-workflowj55dn/series-workflowj55dn-build-action-482740793/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-15 22:01:03 +0000 UTC FinishedAt: 2026-07-15 22:28:26 +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:*7b15086d-5f5a-4b60-a209-46bedb008153,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-workflowj55dn/series-workflowj55dn-convert-artifact-4050700637/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": "465b2456-0e6f-4809-adea-c2fd79e1fa6f", "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-workflowj55dn/series-workflowj55dn-build-action-482740793/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-15 22:29:07 +0000 UTC FinishedAt: 2026-07-15 22:29:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-15 22:29:07 +0000 UTC FinishedAt: 2026-07-15 22:29:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-15 22:29:07 +0000 UTC FinishedAt: 2026-07-15 22:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-15 22:29:07 +0000 UTC FinishedAt: 2026-07-15 22:31:01 +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:*465b2456-0e6f-4809-adea-c2fd79e1fa6f,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-workflowj55dn/series-workflowj55dn-build-action-482740793/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-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-15 22:31:11 +0000 UTC FinishedAt: 2026-07-16 01:33:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-15 22:31:11 +0000 UTC FinishedAt: 2026-07-16 01:33:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},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:*5b8a749d-4663-48ef-bf5d-7ff387c53b69,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*465b2456-0e6f-4809-adea-c2fd79e1fa6f,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-workflowj55dn/series-workflowj55dn-build-action-3789722048/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-workflowj55dn/series-workflowj55dn-build-action-482740793/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-15 22:31:11 +0000 UTC FinishedAt: 2026-07-15 22:32:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-15 22:31:11 +0000 UTC FinishedAt: 2026-07-15 22:32:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},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-workflowj55dn/series-workflowj55dn-convert-artifact-113252834/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-15 22:31:11 +0000 UTC FinishedAt: 2026-07-15 22:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-15 22:31:11 +0000 UTC FinishedAt: 2026-07-15 22:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-15 22:31:11 +0000 UTC FinishedAt: 2026-07-15 22:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-15 22:32:44 +0000 UTC FinishedAt: 2026-07-16 01:33:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj55dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_do_misc_fixups","check_map_prog_compatibility","__add_used_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","SMP"],"series_id":"f01f6cbb-4912-4465-8bf8-75db6ee2ae60","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-15 22:32:44 +0000 UTC FinishedAt: 2026-07-16 01:33:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5b8a749d-4663-48ef-bf5d-7ff387c53b69,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*465b2456-0e6f-4809-adea-c2fd79e1fa6f,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-workflowj55dn/series-workflowj55dn-build-action-3789722048/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-workflowj55dn/series-workflowj55dn-build-action-482740793/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-workflowj55dn/series-workflowj55dn-convert-artifact-113252834/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,}