Name: series-workflowhxp2z Phase: Succeeded StartedAt: 2026-07-21 18:24:00 +0000 UTC FinishedAt: 2026-07-21 23:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[0] Phase: Succeeded StartedAt: 2026-07-21 18:24:00 +0000 UTC FinishedAt: 2026-07-21 18:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[0].run-triage Phase: Succeeded StartedAt: 2026-07-21 18:24:00 +0000 UTC FinishedAt: 2026-07-21 18:49:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "NET" ], "series_id": "a3607086-6be2-4a52-a7f8-0b3124256fa5" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "cgroup_bpf_attach", "cgroup_bpf_replace", "bpf_mprog_attach", "bpf_mprog_detach", "bpf_netns_link_update_prog", "bpf_link_show_fdinfo", "bpf_link_get_info_by_fd" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2dyb3VwX2JwZl9hdHRhY2gmIzM0OywKICAgICYjMzQ7Y2dyb3VwX2JwZl9yZXBsYWNlJiMzNDssCiAgICAmIzM0O2JwZl9tcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7YnBmX21wcm9nX2RldGFjaCYjMzQ7LAogICAgJiMzNDticGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyYjMzQ7LAogICAgJiMzNDticGZfbGlua19zaG93X2ZkaW5mbyYjMzQ7LAogICAgJiMzNDticGZfbGlua19nZXRfaW5mb19ieV9mZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gQlBGIGNncm91cCBzdG9yYWdlIHJlcGxhY2VtZW50LCBtcHJvZyBsaW5rIHR5cGUgY2hlY2tpbmcsIG5ldG5zIGxpbmsgdXBkYXRlIGxvY2tpbmcsIGFuZCBsaW5rIHByb2cgUkNVIHNhZmV0eS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBCUEYgc3lzY2FsbHMgYW5kIGxpbmsgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTg6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlOWNjYzM1ZWQwYjIwZGZjNTk1OWIzMDIxNDA5YTNkZTY0YzUxYTFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMTg6NDg6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDQzNTVjY2I3OGE5YzY3Li41NmQ1MzhmMDU1MjAwNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbkBAIC04MTMsMTAgJiM0Mzs4MTMsMTIgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDtcbiBcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuIFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLVx1MDAzZWxpbmsucHJvZztcbiBcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTtcbiBcdHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDtcbiBcdHN0cnVjdCBobGlzdF9oZWFkICpwcm9ncztcbiYjNDM7XHR1OCBvbGRfZmxhZ3M7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FMTE9XX09WRVJSSURFKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkpIHx8XG5AQCAtODgzLDcgJiM0Mzs4ODUsMTAgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRwbC1cdTAwM2Vwcm9nID0gcHJvZztcbiBcdHBsLVx1MDAzZWxpbmsgPSBsaW5rO1xuIFx0cGwtXHUwMDNlZmxhZ3MgPSBmbGFncztcbiYjNDM7XHRpZiAob2xkX3Byb2cpXG4mIzQzO1x0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihvbGRfc3RvcmFnZSwgcGwtXHUwMDNlc3RvcmFnZSk7XG4gXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC1cdTAwM2VzdG9yYWdlLCBzdG9yYWdlKTtcbiYjNDM7XHRvbGRfZmxhZ3MgPSBjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV07XG4gXHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBzYXZlZF9mbGFncztcbiBcbiBcdGlmICh0eXBlID09IEJQRl9MU01fQ0dST1VQKSB7XG5AQCAtOTE1LDEyICYjNDM7OTIwLDE0IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0aWYgKG9sZF9wcm9nKSB7XG4gXHRcdHBsLVx1MDAzZXByb2cgPSBvbGRfcHJvZztcbiBcdFx0cGwtXHUwMDNlbGluayA9IE5VTEw7XG4mIzQzO1x0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC1cdTAwM2VzdG9yYWdlLCBvbGRfc3RvcmFnZSk7XG4gXHR9XG4gXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpO1xuIFx0aWYgKCFvbGRfcHJvZykge1xuIFx0XHRobGlzdF9kZWwoXHUwMDI2cGwtXHUwMDNlbm9kZSk7XG4gXHRcdGtmcmVlKHBsKTtcbiBcdH1cbiYjNDM7XHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xMDMyLDExICYjNDM7MTAzOSwxNyBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRcdFx0XHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxuIFx0XHRcdFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZylcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiYjNDM7XHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlO1xuIFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuJiM0MztcdGJvb2wgc3RvcmFnZV9jaGFuZ2VkID0gZmFsc2U7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xuIFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHRhdHlwZSA9IGJwZl9jZ3JvdXBfYXR5cGVfZmluZChsaW5rLVx1MDAzZWxpbmsuYXR0YWNoX3R5cGUsIG5ld19wcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkKTtcbiBcdGlmIChhdHlwZSBcdTAwM2MgMClcbkBAIC0xMDU2LDEwICYjNDM7MTA2OSwzOSBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRpZiAoIWZvdW5kKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiYjNDM7XHRpZiAoYnBmX2Nncm91cF9zdG9yYWdlc19hbGxvYyhzdG9yYWdlLCBuZXdfc3RvcmFnZSwgbGluay1cdTAwM2VsaW5rLmF0dGFjaF90eXBlLFxuJiM0MztcdFx0XHRcdCAgICAgIG5ld19wcm9nLCBjZ3JwKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKSB7XG4mIzQzO1x0XHRpZiAoc3RvcmFnZVtzdHlwZV0gIT0gcGwtXHUwMDNlc3RvcmFnZVtzdHlwZV0pIHtcbiYjNDM7XHRcdFx0c3RvcmFnZV9jaGFuZ2VkID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdGNncnAtXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gJiM0Mzs9IDE7XG4gXHRvbGRfcHJvZyA9IHhjaGcoXHUwMDI2bGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKTtcbi1cdHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coY2dycCwgYXR5cGUsIHBsKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzdG9yYWdlX2NoYW5nZWQpIHtcbiYjNDM7XHRcdHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coY2dycCwgYXR5cGUsIHBsKTtcbiYjNDM7XHRcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC1cdTAwM2VzdG9yYWdlKTtcbiYjNDM7XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC1cdTAwM2VzdG9yYWdlLCBzdG9yYWdlKTtcbiYjNDM7XHRlcnIgPSB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzKGNncnAsIGF0eXBlKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHR4Y2hnKFx1MDAyNmxpbmstXHUwMDNlbGluay5wcm9nLCBvbGRfcHJvZyk7XG4mIzQzO1x0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC1cdTAwM2VzdG9yYWdlLCBvbGRfc3RvcmFnZSk7XG4mIzQzO1x0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpO1xuJiM0MztcdFx0Y2dycC1cdTAwM2VicGYucmV2aXNpb25zW2F0eXBlXSAtPSAxO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0YnBmX3Byb2dfcHV0KG9sZF9wcm9nKTtcbiYjNDM7XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2xpbmsobmV3X3N0b3JhZ2UsIGNncnAsIGxpbmstXHUwMDNlbGluay5hdHRhY2hfdHlwZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tcHJvZy5jIGIva2VybmVsL2JwZi9tcHJvZy5jXG5pbmRleCAxMzk0MTY4MDYyZTg1Ni4uMzdjZTkxZTBiY2QyMWQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21wcm9nLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbXByb2cuY1xuQEAgLTYsNyAmIzQzOzYsNyBAQFxuIFxuIHN0YXRpYyBpbnQgYnBmX21wcm9nX2xpbmsoc3RydWN0IGJwZl90dXBsZSAqdHVwbGUsXG4gXHRcdFx0ICB1MzIgaWRfb3JfZmQsIHUzMiBmbGFncyxcbi1cdFx0XHQgIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxuJiM0MztcdFx0XHQgIGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlKVxuIHtcbiBcdHN0cnVjdCBicGZfbGluayAqbGluayA9IEVSUl9QVFIoLUVJTlZBTCk7XG4gXHRib29sIGlkID0gZmxhZ3MgXHUwMDI2IEJQRl9GX0lEO1xuQEAgLTE3LDcgJiM0MzsxNyw3IEBAIHN0YXRpYyBpbnQgYnBmX21wcm9nX2xpbmsoc3RydWN0IGJwZl90dXBsZSAqdHVwbGUsXG4gXHRcdGxpbmsgPSBicGZfbGlua19nZXRfZnJvbV9mZChpZF9vcl9mZCk7XG4gXHRpZiAoSVNfRVJSKGxpbmspKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihsaW5rKTtcbi1cdGlmICh0eXBlIFx1MDAyNlx1MDAyNiBsaW5rLVx1MDAzZXByb2ctXHUwMDNldHlwZSAhPSB0eXBlKSB7XG4mIzQzO1x0aWYgKHR5cGUgXHUwMDI2XHUwMDI2IGxpbmstXHUwMDNldHlwZSAhPSB0eXBlKSB7XG4gXHRcdGJwZl9saW5rX3B1dChsaW5rKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG5AQCAtNTIsMjEgJiM0Mzs1MiwyMiBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19wcm9nKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLFxuIFxuIHN0YXRpYyBpbnQgYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLFxuIFx0XHRcdFx0ICAgIHUzMiBpZF9vcl9mZCwgdTMyIGZsYWdzLFxuLVx0XHRcdFx0ICAgIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxuJiM0MztcdFx0XHRcdCAgICBlbnVtIGJwZl9saW5rX3R5cGUgbHR5cGUsXG4mIzQzO1x0XHRcdFx0ICAgIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSlcbiB7XG4gXHRib29sIGxpbmsgPSBmbGFncyBcdTAwMjYgQlBGX0ZfTElOSztcbiBcdGJvb2wgaWQgPSBmbGFncyBcdTAwMjYgQlBGX0ZfSUQ7XG4gXG4gXHRtZW1zZXQodHVwbGUsIDAsIHNpemVvZigqdHVwbGUpKTtcbiBcdGlmIChsaW5rKVxuLVx0XHRyZXR1cm4gYnBmX21wcm9nX2xpbmsodHVwbGUsIGlkX29yX2ZkLCBmbGFncywgdHlwZSk7XG4mIzQzO1x0XHRyZXR1cm4gYnBmX21wcm9nX2xpbmsodHVwbGUsIGlkX29yX2ZkLCBmbGFncywgbHR5cGUpO1xuIFx0LyogSWYgbm8gcmVsZXZhbnQgZmxhZyBpcyBzZXQgYW5kIG5vIGlkX29yX2ZkIHdhcyBwYXNzZWQsIHRoZW5cbiBcdCAqIHR1cGxlIGxpbmsvcHJvZyBpcyBqdXN0IE5VTExlZC4gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIGJlZm9yZS9cbiBcdCAqIGFmdGVyIHNlbGVjdHMgZmlyc3QvbGFzdCBwb3NpdGlvbiB3aXRob3V0IHBhc3NpbmcgZmQuXG4gXHQgKi9cbiBcdGlmICghaWQgXHUwMDI2XHUwMDI2ICFpZF9vcl9mZClcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gYnBmX21wcm9nX3Byb2codHVwbGUsIGlkX29yX2ZkLCBmbGFncywgdHlwZSk7XG4mIzQzO1x0cmV0dXJuIGJwZl9tcHJvZ19wcm9nKHR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsIHB0eXBlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYnBmX21wcm9nX3R1cGxlX3B1dChzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSlcbkBAIC0yNDMsNiAmIzQzOzI0NCw3IEBAIGludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdHJldCA9IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZShcdTAwMjZydHVwbGUsIGlkX29yX2ZkLFxuIFx0XHRcdFx0ICAgICAgIGZsYWdzIFx1MDAyNiB+QlBGX0ZfUkVQTEFDRSxcbiYjNDM7XHRcdFx0XHQgICAgICAgbGluayA/IGxpbmstXHUwMDNldHlwZSA6IEJQRl9MSU5LX1RZUEVfVU5TUEVDLFxuIFx0XHRcdFx0ICAgICAgIHByb2dfbmV3LVx1MDAzZXR5cGUpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbkBAIC0zNDMsNiAmIzQzOzM0NSw3IEBAIGludCBicGZfbXByb2dfZGV0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxuIFx0aWYgKCFicGZfbXByb2dfdG90YWwoZW50cnkpKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcdHJldCA9IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZShcdTAwMjZydHVwbGUsIGlkX29yX2ZkLCBmbGFncyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbGluayA/IGxpbmstXHUwMDNldHlwZSA6IEJQRl9MSU5LX1RZUEVfVU5TUEVDLFxuIFx0XHRcdFx0ICAgICAgIHByb2cgPyBwcm9nLVx1MDAzZXR5cGUgOlxuIFx0XHRcdFx0ICAgICAgIEJQRl9QUk9HX1RZUEVfVU5TUEVDKTtcbiBcdGlmIChyZXQpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xuaW5kZXggMjVmMzBmOWVkYWVmZDMuLjlmYzYyZGIxNDQxYzYyIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXG5AQCAtMTcxLDEzICYjNDM7MTcxLDE3IEBAIHN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0aW50IGlkeCwgcmV0O1xuIFxuLVx0aWYgKG9sZF9wcm9nIFx1MDAyNlx1MDAyNiBvbGRfcHJvZyAhPSBsaW5rLVx1MDAzZXByb2cpXG4tXHRcdHJldHVybiAtRVBFUk07XG4tXHRpZiAobmV3X3Byb2ctXHUwMDNldHlwZSAhPSBsaW5rLVx1MDAzZXByb2ctXHUwMDNldHlwZSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4gXHRtdXRleF9sb2NrKFx1MDAyNm5ldG5zX2JwZl9tdXRleCk7XG4gXG4mIzQzO1x0aWYgKG9sZF9wcm9nIFx1MDAyNlx1MDAyNiBvbGRfcHJvZyAhPSBsaW5rLVx1MDAzZXByb2cpIHtcbiYjNDM7XHRcdHJldCA9IC1FUEVSTTtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKG5ld19wcm9nLVx1MDAzZXR5cGUgIT0gbGluay1cdTAwM2Vwcm9nLVx1MDAzZXR5cGUpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG5ldCA9IG5ldF9saW5rLVx1MDAzZW5ldDtcbiBcdGlmICghbmV0IHx8ICFjaGVja19uZXQobmV0KSkge1xuIFx0XHQvKiBMaW5rIGF1dG8tZGV0YWNoZWQgb3IgbmV0bnMgZHlpbmcgKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ZGIzMDZkMjNiNDc5Zi4uY2FkOTg2ODA3ZDUzMDMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC0zNDcxLDkgJiM0MzszNDcxLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpicGZfbGlua190eXBlX3N0cnNbXSA9IHtcbiBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuLVx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nID0gbGluay1cdTAwM2Vwcm9nO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbiBcdGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlID0gbGluay1cdTAwM2V0eXBlO1xuIFx0Y2hhciBwcm9nX3RhZ1tzaXplb2YocHJvZy1cdTAwM2V0YWcpICogMiAmIzQzOyAxXSA9IHsgfTtcbiYjNDM7XHR1MzIgcHJvZ19pZDtcbiBcbiBcdGlmICh0eXBlIFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9saW5rX3R5cGVfc3RycykgXHUwMDI2XHUwMDI2IGJwZl9saW5rX3R5cGVfc3Ryc1t0eXBlXSkge1xuIFx0XHRpZiAobGluay1cdTAwM2V0eXBlID09IEJQRl9MSU5LX1RZUEVfS1BST0JFX01VTFRJKVxuQEAgLTM0OTAsMTMgJiM0MzszNDkxLDIwIEBAIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXG4gXHR9XG4gXHRzZXFfcHJpbnRmKG0sIFwmIzM0O2xpbmtfaWQ6XFx0JXVcXG5cJiMzNDssIGxpbmstXHUwMDNlaWQpO1xuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRwcm9nID0gUkVBRF9PTkNFKGxpbmstXHUwMDNlcHJvZyk7XG4gXHRpZiAocHJvZykge1xuIFx0XHRiaW4yaGV4KHByb2dfdGFnLCBwcm9nLVx1MDAzZXRhZywgc2l6ZW9mKHByb2ctXHUwMDNldGFnKSk7XG4mIzQzO1x0XHRwcm9nX2lkID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlaWQ7XG4mIzQzO1x0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvZykge1xuIFx0XHRzZXFfcHJpbnRmKG0sXG4gXHRcdFx0ICAgXCYjMzQ7cHJvZ190YWc6XFx0JXNcXG5cJiMzNDtcbiBcdFx0XHQgICBcJiMzNDtwcm9nX2lkOlxcdCV1XFxuXCYjMzQ7LFxuIFx0XHRcdCAgIHByb2dfdGFnLFxuLVx0XHRcdCAgIHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkKTtcbiYjNDM7XHRcdFx0ICAgcHJvZ19pZCk7XG4gXHR9XG4gXHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNlc2hvd19mZGluZm8pXG4gXHRcdGxpbmstXHUwMDNlb3BzLVx1MDAzZXNob3dfZmRpbmZvKGxpbmssIG0pO1xuQEAgLTU1MzUsNiAmIzQzOzU1NDMsNyBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuIHtcbiBcdHN0cnVjdCBicGZfbGlua19pbmZvIF9fdXNlciAqdWluZm8gPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2VpbmZvLmluZm8pO1xuIFx0c3RydWN0IGJwZl9saW5rX2luZm8gaW5mbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4gXHR1MzIgaW5mb19sZW4gPSBhdHRyLVx1MDAzZWluZm8uaW5mb19sZW47XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTU1NDksOCAmIzQzOzU1NTgsMTIgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcbiBcdGluZm8udHlwZSA9IGxpbmstXHUwMDNldHlwZTtcbiBcdGluZm8uaWQgPSBsaW5rLVx1MDAzZWlkO1xuLVx0aWYgKGxpbmstXHUwMDNlcHJvZylcbi1cdFx0aW5mby5wcm9nX2lkID0gbGluay1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZDtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHByb2cgPSBSRUFEX09OQ0UobGluay1cdTAwM2Vwcm9nKTtcbiYjNDM7XHRpZiAocHJvZylcbiYjNDM7XHRcdGluZm8ucHJvZ19pZCA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZWZpbGxfbGlua19pbmZvKSB7XG4gXHRcdGVyciA9IGxpbmstXHUwMDNlb3BzLVx1MDAzZWZpbGxfbGlua19pbmZvKGxpbmssIFx1MDAyNmluZm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Nncm91cF9icGZfcmVwbGFjZSYjMzQ7LAogICAgJiMzNDticGZfbXByb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2JwZl9tcHJvZ19kZXRhY2gmIzM0OywKICAgICYjMzQ7YnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2hvd19mZGluZm8mIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIEJQRiBjZ3JvdXAgc3RvcmFnZSByZXBsYWNlbWVudCwgbXByb2cgbGluayB0eXBlIGNoZWNraW5nLCBuZXRucyBsaW5rIHVwZGF0ZSBsb2NraW5nLCBhbmQgbGluayBwcm9nIFJDVSBzYWZldHkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQlBGIHN5c2NhbGxzIGFuZCBsaW5rIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOWNjYzM1ZWQwYjIwZGZjNTk1OWIzMDIxNDA5YTNkZTY0YzUxYTFhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjEgMTg6NDg6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuYwppbmRleCA0MzU1Y2NiNzhhOWM2Ny4uNTZkNTM4ZjA1NTIwMDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuYwpAQCAtODEzLDEwICYjNDM7ODEzLDEyIEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCXN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cgPSBOVUxMOwogCXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwogCXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTsKJiM0MzsJc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwogCXN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLSZndDtsaW5rLnByb2c7CiAJZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlOwogCXN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7CiYjNDM7CXU4IG9sZF9mbGFnczsKIAlpbnQgZXJyOwogCiAJaWYgKCgoZmxhZ3MgJmFtcDsgQlBGX0ZfQUxMT1dfT1ZFUlJJREUpICZhbXA7JmFtcDsgKGZsYWdzICZhbXA7IEJQRl9GX0FMTE9XX01VTFRJKSkgfHwKQEAgLTg4Myw3ICYjNDM7ODg1LDEwIEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCXBsLSZndDtwcm9nID0gcHJvZzsKIAlwbC0mZ3Q7bGluayA9IGxpbms7CiAJcGwtJmd0O2ZsYWdzID0gZmxhZ3M7CiYjNDM7CWlmIChvbGRfcHJvZykKJiM0MzsJCWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC0mZ3Q7c3RvcmFnZSk7CiAJYnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtJmd0O3N0b3JhZ2UsIHN0b3JhZ2UpOwomIzQzOwlvbGRfZmxhZ3MgPSBjZ3JwLSZndDticGYuZmxhZ3NbYXR5cGVdOwogCWNncnAtJmd0O2JwZi5mbGFnc1thdHlwZV0gPSBzYXZlZF9mbGFnczsKIAogCWlmICh0eXBlID09IEJQRl9MU01fQ0dST1VQKSB7CkBAIC05MTUsMTIgJiM0Mzs5MjAsMTQgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJaWYgKG9sZF9wcm9nKSB7CiAJCXBsLSZndDtwcm9nID0gb2xkX3Byb2c7CiAJCXBsLSZndDtsaW5rID0gTlVMTDsKJiM0MzsJCWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLSZndDtzdG9yYWdlLCBvbGRfc3RvcmFnZSk7CiAJfQogCWJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7CiAJaWYgKCFvbGRfcHJvZykgewogCQlobGlzdF9kZWwoJmFtcDtwbC0mZ3Q7bm9kZSk7CiAJCWtmcmVlKHBsKTsKIAl9CiYjNDM7CWNncnAtJmd0O2JwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTAzMiwxMSAmIzQzOzEwMzksMTcgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCQkJCXN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssCiAJCQkJc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZykKIHsKJiM0MzsJc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwomIzQzOwlzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307CiYjNDM7CXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwomIzQzOwllbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlOwogCWVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTsKJiM0MzsJYm9vbCBzdG9yYWdlX2NoYW5nZWQgPSBmYWxzZTsKIAlzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nOwogCXN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7CiAJYm9vbCBmb3VuZCA9IGZhbHNlOwomIzQzOwlpbnQgZXJyOwogCiAJYXR5cGUgPSBicGZfY2dyb3VwX2F0eXBlX2ZpbmQobGluay0mZ3Q7bGluay5hdHRhY2hfdHlwZSwgbmV3X3Byb2ctJmd0O2F1eC0mZ3Q7YXR0YWNoX2J0Zl9pZCk7CiAJaWYgKGF0eXBlICZsdDsgMCkKQEAgLTEwNTYsMTAgJiM0MzsxMDY5LDM5IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCwKIAlpZiAoIWZvdW5kKQogCQlyZXR1cm4gLUVOT0VOVDsKIAomIzQzOwlpZiAoYnBmX2Nncm91cF9zdG9yYWdlc19hbGxvYyhzdG9yYWdlLCBuZXdfc3RvcmFnZSwgbGluay0mZ3Q7bGluay5hdHRhY2hfdHlwZSwKJiM0MzsJCQkJICAgICAgbmV3X3Byb2csIGNncnApKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHsKJiM0MzsJCWlmIChzdG9yYWdlW3N0eXBlXSAhPSBwbC0mZ3Q7c3RvcmFnZVtzdHlwZV0pIHsKJiM0MzsJCQlzdG9yYWdlX2NoYW5nZWQgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJY2dycC0mZ3Q7YnBmLnJldmlzaW9uc1thdHlwZV0gJiM0Mzs9IDE7CiAJb2xkX3Byb2cgPSB4Y2hnKCZhbXA7bGluay0mZ3Q7bGluay5wcm9nLCBuZXdfcHJvZyk7Ci0JcmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpOwomIzQzOwomIzQzOwlpZiAoIXN0b3JhZ2VfY2hhbmdlZCkgewomIzQzOwkJcmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpOwomIzQzOwkJYnBmX3Byb2dfcHV0KG9sZF9wcm9nKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC0mZ3Q7c3RvcmFnZSk7CiYjNDM7CWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLSZndDtzdG9yYWdlLCBzdG9yYWdlKTsKJiM0MzsJZXJyID0gdXBkYXRlX2VmZmVjdGl2ZV9wcm9ncyhjZ3JwLCBhdHlwZSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCXhjaGcoJmFtcDtsaW5rLSZndDtsaW5rLnByb2csIG9sZF9wcm9nKTsKJiM0MzsJCWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLSZndDtzdG9yYWdlLCBvbGRfc3RvcmFnZSk7CiYjNDM7CQlicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpOwomIzQzOwkJY2dycC0mZ3Q7YnBmLnJldmlzaW9uc1thdHlwZV0gLT0gMTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKIAlicGZfcHJvZ19wdXQob2xkX3Byb2cpOwomIzQzOwlicGZfY2dyb3VwX3N0b3JhZ2VzX2xpbmsobmV3X3N0b3JhZ2UsIGNncnAsIGxpbmstJmd0O2xpbmsuYXR0YWNoX3R5cGUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21wcm9nLmMgYi9rZXJuZWwvYnBmL21wcm9nLmMKaW5kZXggMTM5NDE2ODA2MmU4NTYuLjM3Y2U5MWUwYmNkMjFkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL21wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tcHJvZy5jCkBAIC02LDcgJiM0Mzs2LDcgQEAKIAogc3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSwKIAkJCSAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsCi0JCQkgIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKQomIzQzOwkJCSAgZW51bSBicGZfbGlua190eXBlIHR5cGUpCiB7CiAJc3RydWN0IGJwZl9saW5rICpsaW5rID0gRVJSX1BUUigtRUlOVkFMKTsKIAlib29sIGlkID0gZmxhZ3MgJmFtcDsgQlBGX0ZfSUQ7CkBAIC0xNyw3ICYjNDM7MTcsNyBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19saW5rKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLAogCQlsaW5rID0gYnBmX2xpbmtfZ2V0X2Zyb21fZmQoaWRfb3JfZmQpOwogCWlmIChJU19FUlIobGluaykpCiAJCXJldHVybiBQVFJfRVJSKGxpbmspOwotCWlmICh0eXBlICZhbXA7JmFtcDsgbGluay0mZ3Q7cHJvZy0mZ3Q7dHlwZSAhPSB0eXBlKSB7CiYjNDM7CWlmICh0eXBlICZhbXA7JmFtcDsgbGluay0mZ3Q7dHlwZSAhPSB0eXBlKSB7CiAJCWJwZl9saW5rX3B1dChsaW5rKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTIsMjEgJiM0Mzs1MiwyMiBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19wcm9nKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLAogCiBzdGF0aWMgaW50IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZShzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSwKIAkJCQkgICAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsCi0JCQkJICAgIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKQomIzQzOwkJCQkgICAgZW51bSBicGZfbGlua190eXBlIGx0eXBlLAomIzQzOwkJCQkgICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKQogewogCWJvb2wgbGluayA9IGZsYWdzICZhbXA7IEJQRl9GX0xJTks7CiAJYm9vbCBpZCA9IGZsYWdzICZhbXA7IEJQRl9GX0lEOwogCiAJbWVtc2V0KHR1cGxlLCAwLCBzaXplb2YoKnR1cGxlKSk7CiAJaWYgKGxpbmspCi0JCXJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCB0eXBlKTsKJiM0MzsJCXJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCBsdHlwZSk7CiAJLyogSWYgbm8gcmVsZXZhbnQgZmxhZyBpcyBzZXQgYW5kIG5vIGlkX29yX2ZkIHdhcyBwYXNzZWQsIHRoZW4KIAkgKiB0dXBsZSBsaW5rL3Byb2cgaXMganVzdCBOVUxMZWQuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBiZWZvcmUvCiAJICogYWZ0ZXIgc2VsZWN0cyBmaXJzdC9sYXN0IHBvc2l0aW9uIHdpdGhvdXQgcGFzc2luZyBmZC4KIAkgKi8KIAlpZiAoIWlkICZhbXA7JmFtcDsgIWlkX29yX2ZkKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gYnBmX21wcm9nX3Byb2codHVwbGUsIGlkX29yX2ZkLCBmbGFncywgdHlwZSk7CiYjNDM7CXJldHVybiBicGZfbXByb2dfcHJvZyh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCBwdHlwZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGJwZl9tcHJvZ190dXBsZV9wdXQoc3RydWN0IGJwZl90dXBsZSAqdHVwbGUpCkBAIC0yNDMsNiAmIzQzOzI0NCw3IEBAIGludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LAogCQlyZXR1cm4gLUVFWElTVDsKIAlyZXQgPSBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmUoJmFtcDtydHVwbGUsIGlkX29yX2ZkLAogCQkJCSAgICAgICBmbGFncyAmYW1wOyB+QlBGX0ZfUkVQTEFDRSwKJiM0MzsJCQkJICAgICAgIGxpbmsgPyBsaW5rLSZndDt0eXBlIDogQlBGX0xJTktfVFlQRV9VTlNQRUMsCiAJCQkJICAgICAgIHByb2dfbmV3LSZndDt0eXBlKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMzQzLDYgJiM0MzszNDUsNyBAQCBpbnQgYnBmX21wcm9nX2RldGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSwKIAlpZiAoIWJwZl9tcHJvZ190b3RhbChlbnRyeSkpCiAJCXJldHVybiAtRU5PRU5UOwogCXJldCA9IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZSgmYW1wO3J0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLAomIzQzOwkJCQkgICAgICAgbGluayA/IGxpbmstJmd0O3R5cGUgOiBCUEZfTElOS19UWVBFX1VOU1BFQywKIAkJCQkgICAgICAgcHJvZyA/IHByb2ctJmd0O3R5cGUgOgogCQkJCSAgICAgICBCUEZfUFJPR19UWVBFX1VOU1BFQyk7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jIGIva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMKaW5kZXggMjVmMzBmOWVkYWVmZDMuLjlmYzYyZGIxNDQxYzYyIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYwpAQCAtMTcxLDEzICYjNDM7MTcxLDE3IEBAIHN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLAogCXN0cnVjdCBuZXQgKm5ldDsKIAlpbnQgaWR4LCByZXQ7CiAKLQlpZiAob2xkX3Byb2cgJmFtcDsmYW1wOyBvbGRfcHJvZyAhPSBsaW5rLSZndDtwcm9nKQotCQlyZXR1cm4gLUVQRVJNOwotCWlmIChuZXdfcHJvZy0mZ3Q7dHlwZSAhPSBsaW5rLSZndDtwcm9nLSZndDt0eXBlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCW11dGV4X2xvY2soJmFtcDtuZXRuc19icGZfbXV0ZXgpOwogCiYjNDM7CWlmIChvbGRfcHJvZyAmYW1wOyZhbXA7IG9sZF9wcm9nICE9IGxpbmstJmd0O3Byb2cpIHsKJiM0MzsJCXJldCA9IC1FUEVSTTsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwlpZiAobmV3X3Byb2ctJmd0O3R5cGUgIT0gbGluay0mZ3Q7cHJvZy0mZ3Q7dHlwZSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwogCW5ldCA9IG5ldF9saW5rLSZndDtuZXQ7CiAJaWYgKCFuZXQgfHwgIWNoZWNrX25ldChuZXQpKSB7CiAJCS8qIExpbmsgYXV0by1kZXRhY2hlZCBvciBuZXRucyBkeWluZyAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCA2ZGIzMDZkMjNiNDc5Zi4uY2FkOTg2ODA3ZDUzMDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC0zNDcxLDkgJiM0MzszNDcxLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpicGZfbGlua190eXBlX3N0cnNbXSA9IHsKIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rID0gZmlscC0mZ3Q7cHJpdmF0ZV9kYXRhOwotCWNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGxpbmstJmd0O3Byb2c7CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZzsKIAllbnVtIGJwZl9saW5rX3R5cGUgdHlwZSA9IGxpbmstJmd0O3R5cGU7CiAJY2hhciBwcm9nX3RhZ1tzaXplb2YocHJvZy0mZ3Q7dGFnKSAqIDIgJiM0MzsgMV0gPSB7IH07CiYjNDM7CXUzMiBwcm9nX2lkOwogCiAJaWYgKHR5cGUgJmx0OyBBUlJBWV9TSVpFKGJwZl9saW5rX3R5cGVfc3RycykgJmFtcDsmYW1wOyBicGZfbGlua190eXBlX3N0cnNbdHlwZV0pIHsKIAkJaWYgKGxpbmstJmd0O3R5cGUgPT0gQlBGX0xJTktfVFlQRV9LUFJPQkVfTVVMVEkpCkBAIC0zNDkwLDEzICYjNDM7MzQ5MSwyMCBAQCBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKQogCX0KIAlzZXFfcHJpbnRmKG0sICYjMzQ7bGlua19pZDpcdCV1XG4mIzM0OywgbGluay0mZ3Q7aWQpOwogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJcHJvZyA9IFJFQURfT05DRShsaW5rLSZndDtwcm9nKTsKIAlpZiAocHJvZykgewogCQliaW4yaGV4KHByb2dfdGFnLCBwcm9nLSZndDt0YWcsIHNpemVvZihwcm9nLSZndDt0YWcpKTsKJiM0MzsJCXByb2dfaWQgPSBwcm9nLSZndDthdXgtJmd0O2lkOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAocHJvZykgewogCQlzZXFfcHJpbnRmKG0sCiAJCQkgICAmIzM0O3Byb2dfdGFnOlx0JXNcbiYjMzQ7CiAJCQkgICAmIzM0O3Byb2dfaWQ6XHQldVxuJiMzNDssCiAJCQkgICBwcm9nX3RhZywKLQkJCSAgIHByb2ctJmd0O2F1eC0mZ3Q7aWQpOwomIzQzOwkJCSAgIHByb2dfaWQpOwogCX0KIAlpZiAobGluay0mZ3Q7b3BzLSZndDtzaG93X2ZkaW5mbykKIAkJbGluay0mZ3Q7b3BzLSZndDtzaG93X2ZkaW5mbyhsaW5rLCBtKTsKQEAgLTU1MzUsNiAmIzQzOzU1NDMsNyBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLAogewogCXN0cnVjdCBicGZfbGlua19pbmZvIF9fdXNlciAqdWluZm8gPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci0mZ3Q7aW5mby5pbmZvKTsKIAlzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBpbmZvOwomIzQzOwljb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7CiAJdTMyIGluZm9fbGVuID0gYXR0ci0mZ3Q7aW5mby5pbmZvX2xlbjsKIAlpbnQgZXJyOwogCkBAIC01NTQ5LDggJiM0Mzs1NTU4LDEyIEBAIHN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsCiAKIAlpbmZvLnR5cGUgPSBsaW5rLSZndDt0eXBlOwogCWluZm8uaWQgPSBsaW5rLSZndDtpZDsKLQlpZiAobGluay0mZ3Q7cHJvZykKLQkJaW5mby5wcm9nX2lkID0gbGluay0mZ3Q7cHJvZy0mZ3Q7YXV4LSZndDtpZDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlwcm9nID0gUkVBRF9PTkNFKGxpbmstJmd0O3Byb2cpOwomIzQzOwlpZiAocHJvZykKJiM0MzsJCWluZm8ucHJvZ19pZCA9IHByb2ctJmd0O2F1eC0mZ3Q7aWQ7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKGxpbmstJmd0O29wcy0mZ3Q7ZmlsbF9saW5rX2luZm8pIHsKIAkJZXJyID0gbGluay0mZ3Q7b3BzLSZndDtmaWxsX2xpbmtfaW5mbyhsaW5rLCAmYW1wO2luZm8pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzE4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBTdWJzeXN0ZW0gUGF0Y2ggQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIGEgZmV3IGtleSBhcmVhcyB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW06IGNncm91cHMsIG1wcm9ncywgbmV0IG5hbWVzcGFjZXMsIGFuZCB0aGUgc3lzY2FsbCBpbnRlcmZhY2UuIExldCYjMzk7cyBicmVhayBkb3duIHRoZSBjaGFuZ2VzIGFuZCBzZWUgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLgoKRmlyc3QsIGxvb2tpbmcgYXQgYGNncm91cC5jYCwgdGhlcmUmIzM5O3MgYSBkZWZpbml0ZSBmb2N1cyBvbiBpbXByb3Zpbmcgc3RvcmFnZSByZXBsYWNlbWVudCB3aXRoaW4gY2dyb3VwIEJQRi4gIGBfX2Nncm91cF9icGZfYXR0YWNoYCBhbmQgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBub3cgaGF2ZSByb2J1c3QgbWVjaGFuaXNtcyBmb3IgaGFuZGxpbmcgc3RvcmFnZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGBvbGRfc3RvcmFnZWAgYW5kIGBvbGRfZmxhZ3NgIHRvIHByb3Blcmx5IHJldmVydCB0aGUgc3RhdGUgaW4gZXJyb3IgY2FzZXMsIGVuc3VyaW5nIHRoYXQgY2dyb3VwIEJQRiBkb2VzbiYjMzk7dCBnZXQgaW50byBhIGJyb2tlbiBzdGF0ZSBkdXJpbmcgdXBkYXRlcy4gIFRoZSBgc3RvcmFnZV9jaGFuZ2VkYCBjaGVjayBpbiBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBhIG1vcmUgZWZmaWNpZW50IHVwZGF0ZSBwcm9jZXNzIGFuZCBtb3JlIGNhcmVmdWwgaGFuZGxpbmcgb2YgaG93IG5ldyBzdG9yYWdlIGlzIGFsbG9jYXRlZCBhbmQgZWZmZWN0aXZlIHByb2dyYW1zIGFyZSB1cGRhdGVkLiBUaGUgcmVzdG9yZSBsb2dpYyBvbiB0aGUgZXJyb3IgcGF0aHMgaXMgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0IHRvIHNlZSB0byBlbnN1cmUgYXRvbWljaXR5LgoKVGhlbiwgbW92aW5nIG9uIHRvIGBtcHJvZy5jYCwgd2Ugc2VlIGEgc2hpZnQgaW4gaG93IGxpbmtzIGFyZSBtYW5hZ2VkLiBgYnBmX21wcm9nX2xpbmtgIG5vdyB1c2VzIGBlbnVtIGJwZl9saW5rX3R5cGVgIGFuZCBjaGVja3MgdGhlIGxpbmsgdHlwZSBkaXJlY3RseSwgYW5kIHRoZSBgYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlYCBmdW5jdGlvbiBjbGVhcmx5IHNlcGFyYXRlcyBsaW5rIHR5cGUgZnJvbSBwcm9ncmFtIHR5cGUsIHdoaWNoIGlzIGEgZ29vZCBhcmNoaXRlY3R1cmFsIGNob2ljZS4gYGJwZl9tcHJvZ19hdHRhY2hgIGFuZCBgYnBmX21wcm9nX2RldGFjaGAgbm93IHBhc3MgdGhpcyBsaW5rIHR5cGUgaW5mb3JtYXRpb24uIFRoaXMgaW5kaWNhdGVzIGEgcmVmYWN0b3JpbmcgdGhhdCBwcm92aWRlcyBtb3JlIGZsZXhpYmlsaXR5IGFuZCBiZXR0ZXIgdHlwZSBzYWZldHkuCgpJbiBgbmV0X25hbWVzcGFjZS5jYCwgc3BlY2lmaWNhbGx5IGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AsIHRoZXkmIzM5O3ZlIHRpZ2h0ZW5lZCB1cCB0aGUgbG9ja2luZyBhcm91bmQgbGluayB1cGRhdGVzLiBNb3ZpbmcgdGhvc2UgY2hlY2tzIGludG8gdGhlIG11dGV4IGJsb2NrIGlzIGEgY2xlYXIgaW5kaWNhdGlvbiBvZiBhIGZpeCBmb3IgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgY29uY3VycmVuY3kgaXNzdWUuIFRoaXMgaXMgYSBzb2xpZCBtb3ZlIGZvciB0aHJlYWQgc2FmZXR5IGluIG5ldCBuYW1lc3BhY2UgQlBGIG9wZXJhdGlvbnMuCgpGaW5hbGx5LCBpbiBgc3lzY2FsbC5jYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBoYXZlIGFkZGVkIFJDVSByZWFkIGxvY2tzLiBUaGV5JiMzOTtyZSB1c2luZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYFJFQURfT05DRShsaW5rLSZndDtwcm9nKWAgdG8gc2FmZWx5IGFjY2VzcyB0aGUgcHJvZ3JhbSBwb2ludGVyLiBUaGlzIGluZGljYXRlcyB0aGUgcmVzb2x1dGlvbiBvZiBwb3RlbnRpYWwgcmVhZC1hZnRlci1mcmVlIGJ1Z3Mgd2l0aGluIHRoZSBzeXNjYWxsIGhhbmRsaW5nIG9mIEJQRiBsaW5rcywgZW5zdXJpbmcgZGF0YSBjb25zaXN0ZW5jeSBhbmQgcHJldmVudGluZyBjcmFzaGVzLgoKT3ZlcmFsbCwgdGhlc2UgYXJlIHNvbGlkLCBmdW5jdGlvbmFsIGltcHJvdmVtZW50cy4gVGhlIGJ1ZyBmaXhlcyBhZGRyZXNzIGlzc3VlcyB3aXRoIGNncm91cCBzdG9yYWdlIHJlcGxhY2VtZW50LCBtcHJvZyBsaW5rIHR5cGUgdmFsaWRhdGlvbiwgbmV0bnMgbGluayB1cGRhdGUgbG9ja2luZywgYW5kIFJDVSBzYWZldHkgaW4gbGluayBwcm9ncmFtIGFjY2Vzcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc2V0IG9mIGZpeGVzLiBJJiMzOTttIHRoaW5raW5nIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBzb21lIHNlcmlvdXMgZnV6emluZy4KCk15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBsb29rcyBsaWtlOiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAsIGBfX2Nncm91cF9icGZfcmVwbGFjZWAsIGBicGZfbXByb2dfbGlua2AsIGBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmVgLCBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCwgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuCgpMZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQgdGhlIGtleSBmdW5jdGlvbnMgaW4gdGhvc2UgYXJlYXMgYXJlIHN0YXRpYy4gWWVwLCB0aGV5IGFsbCBhcmUsICpleGNlcHQqIGBicGZfbXByb2dfYXR0YWNoYCBhbmQgYGJwZl9tcHJvZ19kZXRhY2hgISAgSW50ZXJlc3RpbmcuLi4gYW5kIHRoZXkmIzM5O3JlIGV4cG9ydGVkL2dsb2JhbC4gT2theSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlncyB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoYXQgQlBGX1NZU0NBTEwsIENHUk9VUF9CUEYsIGFuZCBORVQgYXJlIGVuYWJsZWQuICBUaGVuLCBJJiMzOTtsbCBwcm9iYWJseSBydW4gYSBjb2RlIHNlYXJjaCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZy4gVGltZSB0byBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY2dyb3VwX2JwZl9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkxLS8qKlxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkzLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHRvIGRlc2NlbmRhbnRzXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXG5rZXJuZWwvYnBmL2Nncm91cC5jOjgwNjpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODA3LVx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9OTM0PXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0Mi1cdGNncm91cF9sb2NrKCk7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjk0MzpcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTQ0LVx0XHRcdFx0ICBpZF9vcl9mZCwgcmV2aXNpb24pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MjEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucy4KCioqRGVjb25zdHJ1Y3RpbmcgQlBGIEF0dGFjaG1lbnQgUG9pbnRzKioKClJpZ2h0LCBzbyBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgYW5kIGBfX2Nncm91cF9icGZfcmVwbGFjZWAgYXJlIHN0YXRpYywgYW5kIHRoYXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgc29tZSB0aG91Z2h0IHByb2Nlc3Nlcy4gVGhpcyBtZWFucyB0aGV5JiMzOTtyZSBsaWtlbHkgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LCBtYXliZSByZWxhdGVkIHRvIGluaXRpYWxpemF0aW9uIG9yIGEgdmVyeSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBjZ3JvdXAgQlBGIG1hY2hpbmVyeS4gVGhleSYjMzk7cmUgbm90IGludGVuZGVkIHRvIGJlIGRpcmVjdGx5IGNhbGxlZCBleHRlcm5hbGx5LiBOb3csIEkgbmVlZCB0byBzZWUgaG93IHRoZXkgaW50ZXJhY3QuIE15IG5leHQgb2J2aW91cyBzdGVwIGlzIHRvIGRpZyBpbnRvIGBicGZfbXByb2dfbGlua2AgYW5kIGBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmVgLiBUaG9zZSBuYW1lcyBpbW1lZGlhdGVseSBzdWdnZXN0IGR5bmFtaWMgbGlua2luZyBhbmQgc29tZSBraW5kIG9mIHJlbGF0aW9uIHRvIHByb2dyYW0gdHVwbGVzLCBvciBtdWx0aXBsZSBwcm9ncmFtIGF0dGFjaG1lbnRzLiBJIGFudGljaXBhdGUgdGhlc2UgbWlnaHQgZXhwb3NlIHRoZSAqZW50cnkgcG9pbnQqIGZvciBhIHByb2dyYW0gb3IgcHJvdmlkZSB0aGUgd2F5IGZvciB0aGUgaW50ZXJuYWwgYXR0YWNobWVudCBmdW5jdGlvbnMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgbGFyZ2VyIGZyYW1ld29yay4gSSYjMzk7bSBndWVzc2luZyBgYnBmX21wcm9nX2xpbmtgIGhhbmRsZXMgdGhlIGNyZWF0aW9uIG9mIHRoZXNlIGxpbmtzLCBhbmQgdGhlIHR1cGxlcyBhcmUgYWJvdXQgaG93IHRoZXNlIGFyZSByZWxhdGVkIGFuZCB0cmFja2VkLiBMZXQmIzM5O3Mgc2VlIGhvdyBJIGNhbiBnZXQgbW9yZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9tcHJvZ19saW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9tcHJvZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbXByb2cuYy02LVxua2VybmVsL2JwZi9tcHJvZy5jOjc6c3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcbmtlcm5lbC9icGYvbXByb2cuYy04LVx0XHRcdCAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsXG4tLVxua2VybmVsL2JwZi9tcHJvZy5jPTUzPXN0YXRpYyBpbnQgYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLFxuLS1cbmtlcm5lbC9icGYvbXByb2cuYy02Mi1cdGlmIChsaW5rKVxua2VybmVsL2JwZi9tcHJvZy5jOjYzOlx0XHRyZXR1cm4gYnBmX21wcm9nX2xpbmsodHVwbGUsIGlkX29yX2ZkLCBmbGFncywgbHR5cGUpO1xua2VybmVsL2JwZi9tcHJvZy5jLTY0LVx0LyogSWYgbm8gcmVsZXZhbnQgZmxhZyBpcyBzZXQgYW5kIG5vIGlkX29yX2ZkIHdhcyBwYXNzZWQsIHRoZW5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTUxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCBmdW5jdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IGhvdyB0aGlzIHBsYXlzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBuZXR3b3JrIG5hbWVzcGFjZXMgYW5kIGVCUEYgcHJvZ3JhbSB1cGRhdGVzIG9uIG5ldHdvcmsgbGlua3MuIE15IGluaXRpYWwgcXVlc3Rpb25zIHJldm9sdmUgYXJvdW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yOgoKKiAgICoqQ29uY3VycmVuY3k6KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBoYW5kbGUgY29uY3VycmVudCB1cGRhdGVzIHRvIG5ldHdvcmsgbGlua3Mgd2l0aGluIHRoZSBzYW1lIG5hbWVzcGFjZSBvciBhY3Jvc3MgZGlmZmVyZW50IG5hbWVzcGFjZXM/IFJhY2UgY29uZGl0aW9ucyBhcmUgYWx3YXlzIGEgY29uY2VybiBpbiB0aGlzIGFyZWEuCiogICAqKkF0b21pY2l0eToqKiBXaGF0IGd1YXJhbnRlZXMgYXJlIHByb3ZpZGVkIGZvciBhdG9taWMgdXBkYXRlcz8gQXJlIHdlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbGlrZSBhIHJlYWQtY29weS11cGRhdGUgKFJDVSkgbWVjaGFuaXNtLCBvciBzb21ldGhpbmcgbW9yZSBiYXNpYz8gVW5kZXJzdGFuZGluZyB0aGUgYXRvbWljaXR5IG9mIHRoZSB1cGRhdGUgaXMgY3JpdGljYWwgZm9yIGRhdGEgY29uc2lzdGVuY3kuCiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQmIzM5O3MgdGhlIGVycm9yIHJlcG9ydGluZyBsaWtlPyBEb2VzIGl0IHByb3ZpZGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gaWYgYSBCUEYgcHJvZ3JhbSB1cGRhdGUgZmFpbHMgb24gYSBzcGVjaWZpYyBsaW5rPyBBbmQsIGhvdyBpcyB0aGUgZmFpbHVyZSBwcm9wYWdhdGVkPyBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyByb2J1c3QgdGhlIHN5c3RlbSBpcy4KKiAgICoqU2VjdXJpdHk6KiogVGhpcyBpcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQsIGhvdyBkbyB3ZSBoYW5kbGUgcGVybWlzc2lvbnMsIHZhbGlkYXRpb24gYW5kIGNoZWNrcyB3aGVuIGFkZGluZyBvciB1cGRhdGluZyBwcm9ncmFtcyB2aWEgdGhpcyBmdW5jdGlvbiwgd2hhdCBhcmUgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucz8KCkkgd2FudCB0byBrbm93IHdoZXJlIHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIGxpZmVjeWNsZSBvZiBhIEJQRiBwcm9ncmFtIG9uIGEgbmV0d29yayBsaW5rLiBJcyBpdCB0aGUgZW50cnkgcG9pbnQgZm9yIHVwZGF0ZXM/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBhIGhpZ2hlci1sZXZlbCBmcmFtZXdvcmsgb3IgZGlyZWN0bHkgd2l0aCB0aGUgQlBGIHN1YnN5c3RlbT8gRmluYWxseSwgSSBuZWVkIHRvIHNlZSBpZiBpdCBzdXBwb3J0cyBkaWZmZXJlbnQgQlBGIHByb2dyYW0gdHlwZXMgdGhhdCBjb3VsZCBiZSBhdHRhY2hlZCB0byBhIGxpbmsuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGljaCBhcmUgc3VwcG9ydGVkLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIHByZXR0eSBzb3BoaXN0aWNhdGVkIGludGVybmFsIG9wZXJhdGlvbnMgaGFwcGVuaW5nIGhlcmUuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTE1NT1zdGF0aWMgdm9pZCBicGZfbmV0bnNfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0xNjItXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzoxNjM6c3RhdGljIGludCBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0xNjQtXHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxuLS1cbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTIzOT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfbmV0bnNfbGlua19vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjQyLVx0LmRldGFjaCA9IGJwZl9uZXRuc19saW5rX2RldGFjaCxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jOjI0MzpcdC51cGRhdGVfcHJvZyA9IGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nLFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjQ0LVx0LmZpbGxfbGlua19pbmZvID0gYnBmX25ldG5zX2xpbmtfZmlsbF9pbmZvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzLCBrZWVwaW5nIGluIG1pbmQgdGhlIGV4cGVydCB1c2VyOgoKKipBc3Nlc3NpbmcgQlBGIExpbmsgSW5mb3JtYXRpb24gUmV0cmlldmFsKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gaG93IHdlJiMzOTtyZSBoYW5kbGluZyBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGUgY29yZSBsZXZlbCB0aGVyZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBkZWJ1Z2dpbmcsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcsIGFuZCBwb3NzaWJseSBldmVuIGludHJvc3BlY3Rpb24gb2YgQlBGIHByb2dyYW1zIGNvbm5lY3RlZCB0aHJvdWdoIGxpbmtzLiBBcmUgd2UgZ2V0dGluZyBhbGwgdGhlIHBlcnRpbmVudCBkYXRhPyBIb3cgZWZmaWNpZW50IGFyZSB0aGVzZSBjYWxscz8gSXMgdGhlcmUgYW55IHJlZHVuZGFuY3k/IEl0JiMzOTtzIGVzc2VudGlhbCB0byBlbnN1cmUgd2UmIzM5O3JlIGdldHRpbmcgcm9idXN0IGFuZCBjb21wcmVoZW5zaXZlIGxpbmsgaW5mb3JtYXRpb24gZm9yIGRpYWdub3N0aWMgYW5kIGFkbWluaXN0cmF0aXZlIHB1cnBvc2VzLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZXh0cmFjdCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gdGhlIGZpbGUgZGVzY3JpcHRvci4gTGV0JiMzOTtzIHNlZSBob3cgdGhlc2UgYXJlIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbGlua19zaG93X2ZkaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTM0NjM9c3RhdGljIGNvbnN0IGNoYXIgKmJwZl9saW5rX3R5cGVfc3Ryc1tdID0ge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0NzAtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDcxOnN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDcyLXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9saW5rX2ZvcHMgPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTIyLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUyMzpcdC5zaG93X2ZkaW5mb1x0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MjQtI2VuZGlmXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzUzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBicGZfbGlua19mb3BzX3BvbGwgPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTMxLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUzMjpcdC5zaG93X2ZkaW5mb1x0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MzMtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMTgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVsdmluZyBpbnRvIGVCUEYgTGluayBJbmZvcm1hdGlvbiBSZXRyaWV2YWwqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG1lY2hhbmljcyBvZiByZXRyaWV2aW5nIGluZm9ybWF0aW9uIGFib3V0IGVCUEYgbGlua3MuIFdlJiMzOTtyZSBvYnZpb3VzbHkgaW4gdGhlIHdlZWRzIGhlcmUsIGNvbnNpZGVyaW5nIHRoZSBrZXJuZWwtbGV2ZWwgc3BlY2lmaWNzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgZnVuY3Rpb24uIFRoZSBpbXBvcnRhbmNlIG9mIHRoaXMgZnVuY3Rpb24gaXMgY2xlYXJseSBhYm91dCBpbnRyb3NwZWN0aW9uIOKAkyBnYXRoZXJpbmcgY3JpdGljYWwgZGF0YSBvbiB0aGUgbGl2ZSBlQlBGIGxpbmtzIHRoYXQgYXJlIGN1cnJlbnRseSBhY3RpdmUuIEkmIzM5O20gaW1hZ2luaW5nIGhvdyBpdCYjMzk7cyB1c2VkOyBwcm9iYWJseSBhIGZpbGUgZGVzY3JpcHRvciByZXByZXNlbnRpbmcgYW4gZUJQRiBsaW5rIGlzIHByb3ZpZGVkIGFzIGlucHV0LCBhbmQgdGhlIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIHJldHVybiB0aGUgbGluayYjMzk7cyBtZXRhZGF0YS4gSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkIGludGVybmFsbHkuIFdoYXQgZXhhY3RseSBpcyB0aGUgcmV0dXJuZWQgaW5mb3JtYXRpb24/IElzIGl0IGEgc3RydWN0dXJlIGRlZmluZWQgaW4gdGhlIGtlcm5lbD8gV2hhdCBmaWVsZHMgYXJlIGF2YWlsYWJsZT8gSSBhbHNvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBkZWJ1Z2dpbmcgYW5kIG1vbml0b3JpbmcgZUJQRiBwcm9ncmFtcy4gV2l0aCB0aGUgaW5mb3JtYXRpb24gdGhpcyBmdW5jdGlvbiBwcm92aWRlcywgd2hhdCBxdWVzdGlvbnMgY2FuIGJlIGFuc3dlcmVkPyBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGJlY29tZXMgYWJzb2x1dGVseSBpbmRpc3BlbnNhYmxlIGFuZCB3aGF0IHRoZSBiZXN0IHByYWN0aWNlcyBmb3IgaGFuZGxpbmcgZXJyb3JzIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFyZS4gSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIGhvdyB0aGlzIHJlbGF0ZXMgdG8gb3RoZXIgZUJQRiBpbnRyb3NwZWN0aW9uIHRvb2xzIGFuZCBmdW5jdGlvbnMgd2l0aGluIHRoZSBicm9hZGVyIGVjb3N5c3RlbSwgYW5kIHRoZSByZWxhdGlvbnNoaXAgdG8gb3RoZXIgbGlicmFyaWVzIGxpa2UgbGliYnBmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbGlua19nZXRfaW5mb19ieV9mZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTU1MjM9c3RhdGljIGludCBicGZfYnRmX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU1MzgtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NTM5OnN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTQwLVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTU5OT1zdGF0aWMgaW50IGJwZl9vYmpfZ2V0X2luZm9fYnlfZmQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTYxNy1cdGVsc2UgaWYgKGZkX2ZpbGUoZiktXHUwMDNlZl9vcCA9PSBcdTAwMjZicGZfbGlua19mb3BzIHx8IGZkX2ZpbGUoZiktXHUwMDNlZl9vcCA9PSBcdTAwMjZicGZfbGlua19mb3BzX3BvbGwpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NjE4Olx0XHRyZXR1cm4gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmRfZmlsZShmKSwgZmRfZmlsZShmKS1cdTAwM2Vwcml2YXRlX2RhdGEsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NjE5LVx0XHRcdFx0XHQgICAgICBhdHRyLCB1YXR0cik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlY2VudCBCUEYgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBzaWduaWZpY2FudCBCUEYgdXBkYXRlcywgc3BlY2lmaWNhbGx5IGFyb3VuZCBzeXNjYWxscywgY2dyb3VwIGF0dGFjaC9yZXBsYWNlIG9wZXJhdGlvbnMsIG5ldG5zIGF0dGFjaG1lbnQsIGFuZCBtcHJvZyBhdHRhY2htZW50L2RldGFjaG1lbnQuIFRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gcmlnaHQgbm93IGFyZSBgY2dyb3VwX2JwZl9hdHRhY2hgLCBgY2dyb3VwX2JwZl9yZXBsYWNlYCwgYGJwZl9tcHJvZ19hdHRhY2hgLCBgYnBmX21wcm9nX2RldGFjaGAsIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AsIGBicGZfbGlua19zaG93X2ZkaW5mb2AsIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgLgoKTGV0JiMzOTtzIGJlZ2luIGJ5IHplcm9pbmcgaW4gb24gYGNncm91cF9icGZfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfcmVwbGFjZWAuIFRoZXkgc2VlbSBpbXBvcnRhbnQuIEFoLCBnb29kLCB0aGV5JiMzOTtyZSBjYWxsZWQgZnJvbSBgYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGJwZl9saW5rX2NyZWF0ZWAgc3lzY2FsbHMg4oCTIHRoYXQgYWxpZ25zIHdpdGggbXkgZXhwZWN0YXRpb25zLiBXYWl0IGEgc2Vjb25kLCBsb29raW5nIGNsb3NlciBhdCBgY2dyb3VwX2JwZl9yZXBsYWNlYCBJIHNlZSBpdCYjMzk7cyBhbHNvIGNhbGxlZCBieSBgY2dyb3VwX2JwZl9saW5rX3VwZGF0ZV9wcm9nYC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQgY2FsbCBwYXRoIGEgYml0IGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX2JwZl9yZXBsYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTEwMDE9c3RhdGljIHZvaWQgcmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAyOC0vKipcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTAyOTogKiBfX2Nncm91cF9icGZfcmVwbGFjZSgpIC0gUmVwbGFjZSBsaW5rJiMzOTtzIHByb2dyYW0gYW5kIHByb3BhZ2F0ZSB0aGUgY2hhbmdlXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMzAtICogICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGRlc2NlbmRhbnRzXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM3LSAqL1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDM4OnN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzOS1cdFx0XHRcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTA3LVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTA4OnN0YXRpYyBpbnQgY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwOS1cdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEyNS1cdH1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTEyNjpcdHJldCA9IF9fY2dyb3VwX2JwZl9yZXBsYWNlKGNnX2xpbmstXHUwMDNlY2dyb3VwLCBjZ19saW5rLCBuZXdfcHJvZyk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTExMjctb3V0X3VubG9jazpcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE1NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX2Nncm91cF9saW5rX2xvcHMgPSB7XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTQ0LVx0LmRldGFjaCA9IGJwZl9jZ3JvdXBfbGlua19kZXRhY2gsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE1NDU6XHQudXBkYXRlX3Byb2cgPSBjZ3JvdXBfYnBmX3JlcGxhY2UsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NDYtXHQuc2hvd19mZGluZm8gPSBicGZfY2dyb3VwX2xpbmtfc2hvd19mZGluZm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODUzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgQlBGIExpbmsgVXBkYXRlIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBtYXBwaW5nIG91dCBob3cgQlBGIHByb2dyYW0gdXBkYXRlcyB3b3JrIGFjcm9zcyBkaWZmZXJlbnQgY29udGV4dHMuIEl0IHNlZW1zIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgdXBkYXRpbmcgQlBGIHByb2dyYW1zIGxpbmtlZCB0byBjZ3JvdXBzLiBGb3IgbmV0d29yayBuYW1lc3BhY2VzLCBpdCYjMzk7cyBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLiBBbmQsIGxldCYjMzk7cyBub3QgZm9yZ2V0IGFib3V0IG1wcm9nczsgdGhvc2UgYXJlIGhhbmRsZWQgYnkgYGJwZl9tcHJvZ19hdHRhY2hgIGFuZCBgYnBmX21wcm9nX2RldGFjaGAgZm9yIGF0dGFjaG1lbnQgYW5kIGRldGFjaG1lbnQsIHJlc3BlY3RpdmVseS4gVGhlbiwgZm9yIHRoZSBsaW5rIGZkaW5mbyBhbmQgdXNpbmcgQlBGX09CSl9HRVRfSU5GT19CWV9GRCwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgYXJlIGFsbCBvZiB0aGUgcmVsZXZhbnQgc3lzdGVtIGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgdGhlIEJQRiBzeXNjYWxscywgY2dyb3VwIEJQRiwgYW5kIG5ldHdvcmsgZmVhdHVyZXMgYXJlIGludm9sdmVkLgoKR2l2ZW4gdGhhdCBJJiMzOTttIGNoZWNraW5nIGBicGZfbXByb2dfYXR0YWNoYCwgSSBzaG91bGQgZ28gbG9vayBhdCB0aGUgTWFrZWZpbGUgd2l0aGluIGBrZXJuZWwvYnBmL21wcm9nLmNgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBpcyB0aWVkIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHJvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xNT1vYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQxMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgQlBGIExhbmRzY2FwZTogQSBDb21waWxhdGlvbiBRdWVyeSoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYG1wcm9nLm9gIG9iamVjdCBmaWxlLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgdGhhdCBpdCB3YXMgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVkLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHdoZXJlIHRoaXMgY29kZSBtaWdodCBiZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBrZXJuZWwuIEdpdmVuIHRoYXQgdGhpcyBpcyBCUEYtcmVsYXRlZCwgbXkgbmV4dCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gcG90ZW50aWFsIGludGVncmF0aW9uIHBvaW50cy4KCkkmIzM5O20gbWVudGFsbHkgcmVhY2hpbmcgZm9yIGBuZXRfbmFtZXNwYWNlLmNgIG5vdy4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSB0byBpbnZlc3RpZ2F0ZSBnaXZlbiBCUEYmIzM5O3MgZnJlcXVlbnQgdXNlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjayBhbmQgaXRzIGNsb3NlIHJlbGF0aW9uc2hpcCB0byBuYW1lc3BhY2VzLiBJIGFudGljaXBhdGUgdGhhdCB0aGlzIGZpbGUgbGlrZWx5IGhvbGRzIHNvbWUgb2YgdGhlIGNyaXRpY2FsIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggQlBGIHByb2dyYW1zIHJ1bm5pbmcgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgbmV0d29yayBuYW1lc3BhY2UsIGVzcGVjaWFsbHkgaWYgdGhlIEJQRiBzeXNjYWxsIGlzIGluIHBsYXkuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBCUEYgcHJvZ3JhbXMgdGhhdCB0aGlzIGBtcHJvZy5vYCBmaWxlIHJlcHJlc2VudHMgYXJlIGNvbm5lY3RlZCB0byBhbmQgaW50ZXJhY3Qgd2l0aCB0aGF0IGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldF9uYW1lc3BhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gb2ZmbG9hZC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG5ldF9uYW1lc3BhY2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZS0yOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSB0Y3gub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc5NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkV4YW1pbmluZyBCUEYgYW5kIE5hbWVzcGFjZXMqKgoKQWxyaWdodCwgc28gSSBzZWUgdGhhdCBgbmV0X25hbWVzcGFjZS5vYCBpcyBiZWluZyBjb21waWxlZCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBzdWdnZXN0cyBhIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbm5lY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHBsYXlzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gYGNncm91cC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY2dyb3VwIGludGVyYWN0aW9ucywgYW5kIHRoZSBzeXN0ZW0gY2FsbHMgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlbSwgYXJlIGhhbmRsZWQuIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgc29tZSBpbnRlcnJlbGF0aW9uIHRvIGJlIHVuY292ZXJlZCB0aGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTMzPWlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM1LWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19DR1JPVVBfQlBGKSAmIzQzOz0gY2dyb3VwLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMzctaWZlcSAoJChDT05GSUdfSU5FVCkseSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMzcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIE1vZHVsZSBhbmQgU3lzY2FsbCBBbmFseXNpcyoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCBgY2dyb3VwLm9gIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGggYENPTkZJR19DR1JPVVBfQlBGYCBlbmFibGVkLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCB0ZWxscyBtZSB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IGxldmVyYWdpbmcgQlBGIHdpdGhpbiB0aGUgY2dyb3VwIGltcGxlbWVudGF0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0JiMzOTtzIGJlaW5nIGludGVncmF0ZWQsIHdoZXJlIHRoZSBob29rcyBhcmUuIE15IG5leHQgc3RvcCBpcyBkZWZpbml0ZWx5IGBzeXNjYWxsLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBzeXNjYWxscyBpbnRlcmFjdCB3aXRoIHRoaXMgQlBGIGZ1bmN0aW9uYWxpdHksIGhvdyB0aGV5JiMzOTtyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIHdoYXQgdGhlIG92ZXJhbGwgaW50ZXJhY3Rpb24gbW9kZWwgbG9va3MgbGlrZS4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIHBhdGggZm9yIHRob3NlIHN5c2NhbGxzIHRvIGdldCBhIGdvb2QgZ3JpcCBvbiB0aGUgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXNjYWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTI5CgkJCQkJCQlvdXRwdXQ6IDE4OQoJCQkJCQkJdGhvdWdodHM6IDQwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgU3lzY2FsbCBhbmQgTGluayBPcGVyYXRpb25zOiBBIFF1aWNrIEFzc2Vzc21lbnQgZm9yIEZ1enppbmcqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgc3lzY2FsbC5vYCBpcyBjbGVhcmx5IGNvbXBpbGVkIHdpdGggYENPTkZJR19CUEZfU1lTQ0FMTGAg4oCTIHRoYXQmIzM5O3Mgb3VyIHN0YXJ0aW5nIHBvaW50LiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIEJQRiBzeXNjYWxsIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBuZWVkaW5nIGNsb3NlIGF0dGVudGlvbiBmb3IgZnV6emluZy4gSSYjMzk7bSBzZWVpbmcgdGhhdCB3ZSBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgY29uZmlnczogYEJQRl9TWVNDQUxMYCwgYENHUk9VUF9CUEZgLCBhbmQgYE5FVGAgKGZvciBgbmV0bnNgKS4KCk5vdywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6IGBjZ3JvdXBfYnBmX2F0dGFjaGAsIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLCBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCwgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuIFRoZXNlIGxvb2sgbGlrZSB0aGUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBjb3JlIGNoYW5nZXMuCgpMZXQgbWUgcXVpY2tseSB2ZXJpZnkgYGNncm91cF9icGZfYXR0YWNoYOKApiBZZXAsIHRoYXQmIzM5O3Mgd2hhdCBJIHRob3VnaHQ7IGl0IGNvcnJlY3RseSBjYWxscyBgX19jZ3JvdXBfYnBmX2F0dGFjaGAsIHNvIHRoYXQmIzM5O3MgZ29vZC4gT2gsIGFuZCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIGNhbGxlZCBieSBgY2dyb3VwX2JwZl9yZXBsYWNlYC4gT2theSwgc28gYGNncm91cF9icGZfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfcmVwbGFjZWAgYXJlIHZhbGlkIHRhcmdldCBlbnRyeXBvaW50cy4KCk1vdmluZyBvbiB0byBgYnBmX21wcm9nX2F0dGFjaGAgYW5kIGBicGZfbXByb2dfZGV0YWNoYOKApiBZZXMsIHRob3NlIGFyZSBleHBvcnRlZCBmdW5jdGlvbnMuIENoZWNrLiBOZXh0IHVwIGlzIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AuIFl1cCwgdGhhdCYjMzk7cyB0aGUgYHVwZGF0ZV9wcm9nYCBvcCBmb3IgYG5ldG5zYCBsaW5rcy4gQW5kIGZpbmFsbHksIGBicGZfbGlua19zaG93X2ZkaW5mb2AgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAg4oCTIHllcywgdGhleSBhcmUgdGhlIGBmZGluZm9gIGFuZCBgaW5mb2Agb3BzIGZvciBsaW5rcy4KClNvLCB0aGUgcmF0aW9uYWxlIGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCUEYgY2dyb3VwIHN0b3JhZ2UgcmVwbGFjZW1lbnQsIGhvdyBgbXByb2dgIGxpbmsgdHlwZXMgYXJlIGNoZWNrZWQsIGBuZXRuc2AgbGluayB1cGRhdGUgbG9ja2luZywgYW5kIGxpbmsgcHJvZ3JhbSBSQ1Ugc2FmZXR5LiBUaGVzZSBhcmUgYWxsIGNoYW5nZXMgdGhhdCBhZmZlY3QgY29yZSBCUEYgc3lzY2FsbHMgYW5kIGhvdyBsaW5rcyBhcmUgb3BlcmF0ZWQgb24sIGFuZCBzaW5jZSBhbGwgdGhlc2UgY29tcG9uZW50cyBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UsIHRoZXkmIzM5O3JlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFdlIGNhbiBwcm9jZWVkIHdpdGggc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Nncm91cF9icGZfcmVwbGFjZSYjMzQ7LAogICAgJiMzNDticGZfbXByb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2JwZl9tcHJvZ19kZXRhY2gmIzM0OywKICAgICYjMzQ7YnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2hvd19mZGluZm8mIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIEJQRiBjZ3JvdXAgc3RvcmFnZSByZXBsYWNlbWVudCwgbXByb2cgbGluayB0eXBlIGNoZWNraW5nLCBuZXRucyBsaW5rIHVwZGF0ZSBsb2NraW5nLCBhbmQgbGluayBwcm9nIFJDVSBzYWZldHkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQlBGIHN5c2NhbGxzIGFuZCBsaW5rIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Nncm91cF9icGZfcmVwbGFjZSYjMzQ7LAogICAgJiMzNDticGZfbXByb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2JwZl9tcHJvZ19kZXRhY2gmIzM0OywKICAgICYjMzQ7YnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2hvd19mZGluZm8mIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIEJQRiBjZ3JvdXAgc3RvcmFnZSByZXBsYWNlbWVudCwgbXByb2cgbGluayB0eXBlIGNoZWNraW5nLCBuZXRucyBsaW5rIHVwZGF0ZSBsb2NraW5nLCBhbmQgbGluayBwcm9nIFJDVSBzYWZldHkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQlBGIHN5c2NhbGxzIGFuZCBsaW5rIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6NDg6MjkuNDQzOTE4NjU3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyMjIyMjM1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNncm91cF9icGZfYXR0YWNoXCIsXG4gICAgXCJjZ3JvdXBfYnBmX3JlcGxhY2VcIixcbiAgICBcImJwZl9tcHJvZ19hdHRhY2hcIixcbiAgICBcImJwZl9tcHJvZ19kZXRhY2hcIixcbiAgICBcImJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nXCIsXG4gICAgXCJicGZfbGlua19zaG93X2ZkaW5mb1wiLFxuICAgIFwiYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gQlBGIGNncm91cCBzdG9yYWdlIHJlcGxhY2VtZW50LCBtcHJvZyBsaW5rIHR5cGUgY2hlY2tpbmcsIG5ldG5zIGxpbmsgdXBkYXRlIGxvY2tpbmcsIGFuZCBsaW5rIHByb2cgUkNVIHNhZmV0eS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBCUEYgc3lzY2FsbHMgYW5kIGxpbmsgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjQ4OjI5LjQ0MzkyNDcyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNzc4OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTljY2MzNWVkMGIyMGRmYzU5NTliMzAyMTQwOWEzZGU2NGM1MWExYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyMSAxODo0ODoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xcbmluZGV4IDQzNTVjY2I3OGE5YzY3Li41NmQ1MzhmMDU1MjAwNCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXFxuKysrIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xcbkBAIC04MTMsMTAgKzgxMywxMiBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEw7XFxuIFxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbiBcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuK1xcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXFx1MDAzZWxpbmsucHJvZztcXG4gXFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7XFxuIFxcdHN0cnVjdCBobGlzdF9oZWFkICpwcm9ncztcXG4rXFx0dTggb2xkX2ZsYWdzO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKCgoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BTExPV19PVkVSUklERSkgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpKSB8fFxcbkBAIC04ODMsNyArODg1LDEwIEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbiBcXHRwbC1cXHUwMDNlcHJvZyA9IHByb2c7XFxuIFxcdHBsLVxcdTAwM2VsaW5rID0gbGluaztcXG4gXFx0cGwtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuK1xcdGlmIChvbGRfcHJvZylcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVxcdTAwM2VzdG9yYWdlKTtcXG4gXFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xcbitcXHRvbGRfZmxhZ3MgPSBjZ3JwLVxcdTAwM2VicGYuZmxhZ3NbYXR5cGVdO1xcbiBcXHRjZ3JwLVxcdTAwM2VicGYuZmxhZ3NbYXR5cGVdID0gc2F2ZWRfZmxhZ3M7XFxuIFxcbiBcXHRpZiAodHlwZSA9PSBCUEZfTFNNX0NHUk9VUCkge1xcbkBAIC05MTUsMTIgKzkyMCwxNCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gXFx0aWYgKG9sZF9wcm9nKSB7XFxuIFxcdFxcdHBsLVxcdTAwM2Vwcm9nID0gb2xkX3Byb2c7XFxuIFxcdFxcdHBsLVxcdTAwM2VsaW5rID0gTlVMTDtcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcXG4gXFx0fVxcbiBcXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpO1xcbiBcXHRpZiAoIW9sZF9wcm9nKSB7XFxuIFxcdFxcdGhsaXN0X2RlbChcXHUwMDI2cGwtXFx1MDAzZW5vZGUpO1xcbiBcXHRcXHRrZnJlZShwbCk7XFxuIFxcdH1cXG4rXFx0Y2dycC1cXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IG9sZF9mbGFncztcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMTAzMiwxMSArMTAzOSwxNyBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cpXFxuIHtcXG4rXFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbitcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuK1xcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbitcXHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlO1xcbiBcXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XFxuK1xcdGJvb2wgc3RvcmFnZV9jaGFuZ2VkID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XFxuIFxcdHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDtcXG4gXFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xcbiBcXHRib29sIGZvdW5kID0gZmFsc2U7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHRhdHlwZSA9IGJwZl9jZ3JvdXBfYXR5cGVfZmluZChsaW5rLVxcdTAwM2VsaW5rLmF0dGFjaF90eXBlLCBuZXdfcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhdHRhY2hfYnRmX2lkKTtcXG4gXFx0aWYgKGF0eXBlIFxcdTAwM2MgMClcXG5AQCAtMTA1NiwxMCArMTA2OSwzOSBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIFxcdGlmICghZm91bmQpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG4rXFx0aWYgKGJwZl9jZ3JvdXBfc3RvcmFnZXNfYWxsb2Moc3RvcmFnZSwgbmV3X3N0b3JhZ2UsIGxpbmstXFx1MDAzZWxpbmsuYXR0YWNoX3R5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIG5ld19wcm9nLCBjZ3JwKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKSB7XFxuK1xcdFxcdGlmIChzdG9yYWdlW3N0eXBlXSAhPSBwbC1cXHUwMDNlc3RvcmFnZVtzdHlwZV0pIHtcXG4rXFx0XFx0XFx0c3RvcmFnZV9jaGFuZ2VkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0Y2dycC1cXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gKz0gMTtcXG4gXFx0b2xkX3Byb2cgPSB4Y2hnKFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKTtcXG4tXFx0cmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpO1xcbitcXG4rXFx0aWYgKCFzdG9yYWdlX2NoYW5nZWQpIHtcXG4rXFx0XFx0cmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpO1xcbitcXHRcXHRicGZfcHJvZ19wdXQob2xkX3Byb2cpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVxcdTAwM2VzdG9yYWdlKTtcXG4rXFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xcbitcXHRlcnIgPSB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzKGNncnAsIGF0eXBlKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHR4Y2hnKFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLnByb2csIG9sZF9wcm9nKTtcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcXG4rXFx0XFx0Y2dycC1cXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gLT0gMTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4gXFx0YnBmX3Byb2dfcHV0KG9sZF9wcm9nKTtcXG4rXFx0YnBmX2Nncm91cF9zdG9yYWdlc19saW5rKG5ld19zdG9yYWdlLCBjZ3JwLCBsaW5rLVxcdTAwM2VsaW5rLmF0dGFjaF90eXBlKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbXByb2cuYyBiL2tlcm5lbC9icGYvbXByb2cuY1xcbmluZGV4IDEzOTQxNjgwNjJlODU2Li4zN2NlOTFlMGJjZDIxZCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL21wcm9nLmNcXG4rKysgYi9rZXJuZWwvYnBmL21wcm9nLmNcXG5AQCAtNiw3ICs2LDcgQEBcXG4gXFxuIHN0YXRpYyBpbnQgYnBmX21wcm9nX2xpbmsoc3RydWN0IGJwZl90dXBsZSAqdHVwbGUsXFxuIFxcdFxcdFxcdCAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsXFxuLVxcdFxcdFxcdCAgZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXFxuK1xcdFxcdFxcdCAgZW51bSBicGZfbGlua190eXBlIHR5cGUpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9saW5rICpsaW5rID0gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFx0Ym9vbCBpZCA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfSUQ7XFxuQEAgLTE3LDcgKzE3LDcgQEAgc3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcXG4gXFx0XFx0bGluayA9IGJwZl9saW5rX2dldF9mcm9tX2ZkKGlkX29yX2ZkKTtcXG4gXFx0aWYgKElTX0VSUihsaW5rKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIobGluayk7XFxuLVxcdGlmICh0eXBlIFxcdTAwMjZcXHUwMDI2IGxpbmstXFx1MDAzZXByb2ctXFx1MDAzZXR5cGUgIT0gdHlwZSkge1xcbitcXHRpZiAodHlwZSBcXHUwMDI2XFx1MDAyNiBsaW5rLVxcdTAwM2V0eXBlICE9IHR5cGUpIHtcXG4gXFx0XFx0YnBmX2xpbmtfcHV0KGxpbmspO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbkBAIC01MiwyMSArNTIsMjIgQEAgc3RhdGljIGludCBicGZfbXByb2dfcHJvZyhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcXG4gXFxuIHN0YXRpYyBpbnQgYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLFxcbiBcXHRcXHRcXHRcXHQgICAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdCAgICBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSlcXG4rXFx0XFx0XFx0XFx0ICAgIGVudW0gYnBmX2xpbmtfdHlwZSBsdHlwZSxcXG4rXFx0XFx0XFx0XFx0ICAgIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSlcXG4ge1xcbiBcXHRib29sIGxpbmsgPSBmbGFncyBcXHUwMDI2IEJQRl9GX0xJTks7XFxuIFxcdGJvb2wgaWQgPSBmbGFncyBcXHUwMDI2IEJQRl9GX0lEO1xcbiBcXG4gXFx0bWVtc2V0KHR1cGxlLCAwLCBzaXplb2YoKnR1cGxlKSk7XFxuIFxcdGlmIChsaW5rKVxcbi1cXHRcXHRyZXR1cm4gYnBmX21wcm9nX2xpbmsodHVwbGUsIGlkX29yX2ZkLCBmbGFncywgdHlwZSk7XFxuK1xcdFxcdHJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCBsdHlwZSk7XFxuIFxcdC8qIElmIG5vIHJlbGV2YW50IGZsYWcgaXMgc2V0IGFuZCBubyBpZF9vcl9mZCB3YXMgcGFzc2VkLCB0aGVuXFxuIFxcdCAqIHR1cGxlIGxpbmsvcHJvZyBpcyBqdXN0IE5VTExlZC4gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIGJlZm9yZS9cXG4gXFx0ICogYWZ0ZXIgc2VsZWN0cyBmaXJzdC9sYXN0IHBvc2l0aW9uIHdpdGhvdXQgcGFzc2luZyBmZC5cXG4gXFx0ICovXFxuIFxcdGlmICghaWQgXFx1MDAyNlxcdTAwMjYgIWlkX29yX2ZkKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIGJwZl9tcHJvZ19wcm9nKHR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsIHR5cGUpO1xcbitcXHRyZXR1cm4gYnBmX21wcm9nX3Byb2codHVwbGUsIGlkX29yX2ZkLCBmbGFncywgcHR5cGUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBicGZfbXByb2dfdHVwbGVfcHV0KHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlKVxcbkBAIC0yNDMsNiArMjQ0LDcgQEAgaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXHRyZXQgPSBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmUoXFx1MDAyNnJ0dXBsZSwgaWRfb3JfZmQsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBmbGFncyBcXHUwMDI2IH5CUEZfRl9SRVBMQUNFLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbGluayA/IGxpbmstXFx1MDAzZXR5cGUgOiBCUEZfTElOS19UWVBFX1VOU1BFQyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHByb2dfbmV3LVxcdTAwM2V0eXBlKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG5AQCAtMzQzLDYgKzM0NSw3IEBAIGludCBicGZfbXByb2dfZGV0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxcbiBcXHRpZiAoIWJwZl9tcHJvZ190b3RhbChlbnRyeSkpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXHRyZXQgPSBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmUoXFx1MDAyNnJ0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbGluayA/IGxpbmstXFx1MDAzZXR5cGUgOiBCUEZfTElOS19UWVBFX1VOU1BFQyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHByb2cgPyBwcm9nLVxcdTAwM2V0eXBlIDpcXG4gXFx0XFx0XFx0XFx0ICAgICAgIEJQRl9QUk9HX1RZUEVfVU5TUEVDKTtcXG4gXFx0aWYgKHJldClcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xcbmluZGV4IDI1ZjMwZjllZGFlZmQzLi45ZmM2MmRiMTQ0MWM2MiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xcbisrKyBiL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXFxuQEAgLTE3MSwxMyArMTcxLDE3IEBAIHN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuIFxcdGludCBpZHgsIHJldDtcXG4gXFxuLVxcdGlmIChvbGRfcHJvZyBcXHUwMDI2XFx1MDAyNiBvbGRfcHJvZyAhPSBsaW5rLVxcdTAwM2Vwcm9nKVxcbi1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi1cXHRpZiAobmV3X3Byb2ctXFx1MDAzZXR5cGUgIT0gbGluay1cXHUwMDNlcHJvZy1cXHUwMDNldHlwZSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZuZXRuc19icGZfbXV0ZXgpO1xcbiBcXG4rXFx0aWYgKG9sZF9wcm9nIFxcdTAwMjZcXHUwMDI2IG9sZF9wcm9nICE9IGxpbmstXFx1MDAzZXByb2cpIHtcXG4rXFx0XFx0cmV0ID0gLUVQRVJNO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFx0aWYgKG5ld19wcm9nLVxcdTAwM2V0eXBlICE9IGxpbmstXFx1MDAzZXByb2ctXFx1MDAzZXR5cGUpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHR9XFxuK1xcbiBcXHRuZXQgPSBuZXRfbGluay1cXHUwMDNlbmV0O1xcbiBcXHRpZiAoIW5ldCB8fCAhY2hlY2tfbmV0KG5ldCkpIHtcXG4gXFx0XFx0LyogTGluayBhdXRvLWRldGFjaGVkIG9yIG5ldG5zIGR5aW5nICovXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcXG5pbmRleCA2ZGIzMDZkMjNiNDc5Zi4uY2FkOTg2ODA3ZDUzMDMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbkBAIC0zNDcxLDkgKzM0NzEsMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmJwZl9saW5rX3R5cGVfc3Ryc1tdID0ge1xcbiBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4tXFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nID0gbGluay1cXHUwMDNlcHJvZztcXG4rXFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbiBcXHRlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSA9IGxpbmstXFx1MDAzZXR5cGU7XFxuIFxcdGNoYXIgcHJvZ190YWdbc2l6ZW9mKHByb2ctXFx1MDAzZXRhZykgKiAyICsgMV0gPSB7IH07XFxuK1xcdHUzMiBwcm9nX2lkO1xcbiBcXG4gXFx0aWYgKHR5cGUgXFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9saW5rX3R5cGVfc3RycykgXFx1MDAyNlxcdTAwMjYgYnBmX2xpbmtfdHlwZV9zdHJzW3R5cGVdKSB7XFxuIFxcdFxcdGlmIChsaW5rLVxcdTAwM2V0eXBlID09IEJQRl9MSU5LX1RZUEVfS1BST0JFX01VTFRJKVxcbkBAIC0zNDkwLDEzICszNDkxLDIwIEBAIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXFxuIFxcdH1cXG4gXFx0c2VxX3ByaW50ZihtLCBcXFwibGlua19pZDpcXFxcdCV1XFxcXG5cXFwiLCBsaW5rLVxcdTAwM2VpZCk7XFxuIFxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHByb2cgPSBSRUFEX09OQ0UobGluay1cXHUwMDNlcHJvZyk7XFxuIFxcdGlmIChwcm9nKSB7XFxuIFxcdFxcdGJpbjJoZXgocHJvZ190YWcsIHByb2ctXFx1MDAzZXRhZywgc2l6ZW9mKHByb2ctXFx1MDAzZXRhZykpO1xcbitcXHRcXHRwcm9nX2lkID0gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VpZDtcXG4rXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdGlmIChwcm9nKSB7XFxuIFxcdFxcdHNlcV9wcmludGYobSxcXG4gXFx0XFx0XFx0ICAgXFxcInByb2dfdGFnOlxcXFx0JXNcXFxcblxcXCJcXG4gXFx0XFx0XFx0ICAgXFxcInByb2dfaWQ6XFxcXHQldVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgcHJvZ190YWcsXFxuLVxcdFxcdFxcdCAgIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaWQpO1xcbitcXHRcXHRcXHQgICBwcm9nX2lkKTtcXG4gXFx0fVxcbiBcXHRpZiAobGluay1cXHUwMDNlb3BzLVxcdTAwM2VzaG93X2ZkaW5mbylcXG4gXFx0XFx0bGluay1cXHUwMDNlb3BzLVxcdTAwM2VzaG93X2ZkaW5mbyhsaW5rLCBtKTtcXG5AQCAtNTUzNSw2ICs1NTQzLDcgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBfX3VzZXIgKnVpbmZvID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWluZm8uaW5mbyk7XFxuIFxcdHN0cnVjdCBicGZfbGlua19pbmZvIGluZm87XFxuK1xcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG4gXFx0dTMyIGluZm9fbGVuID0gYXR0ci1cXHUwMDNlaW5mby5pbmZvX2xlbjtcXG4gXFx0aW50IGVycjtcXG4gXFxuQEAgLTU1NDksOCArNTU1OCwxMiBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXG4gXFx0aW5mby50eXBlID0gbGluay1cXHUwMDNldHlwZTtcXG4gXFx0aW5mby5pZCA9IGxpbmstXFx1MDAzZWlkO1xcbi1cXHRpZiAobGluay1cXHUwMDNlcHJvZylcXG4tXFx0XFx0aW5mby5wcm9nX2lkID0gbGluay1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VpZDtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0cHJvZyA9IFJFQURfT05DRShsaW5rLVxcdTAwM2Vwcm9nKTtcXG4rXFx0aWYgKHByb2cpXFxuK1xcdFxcdGluZm8ucHJvZ19pZCA9IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaWQ7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0aWYgKGxpbmstXFx1MDAzZW9wcy1cXHUwMDNlZmlsbF9saW5rX2luZm8pIHtcXG4gXFx0XFx0ZXJyID0gbGluay1cXHUwMDNlb3BzLVxcdTAwM2VmaWxsX2xpbmtfaW5mbyhsaW5rLCBcXHUwMDI2aW5mbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjQ4OjI5Ljg4ODM2MDQzNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc3Nzc3NzczMzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZ3JvdXBfYnBmX2F0dGFjaFwiLFxuICAgIFwiY2dyb3VwX2JwZl9yZXBsYWNlXCIsXG4gICAgXCJicGZfbXByb2dfYXR0YWNoXCIsXG4gICAgXCJicGZfbXByb2dfZGV0YWNoXCIsXG4gICAgXCJicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ1wiLFxuICAgIFwiYnBmX2xpbmtfc2hvd19mZGluZm9cIixcbiAgICBcImJwZl9saW5rX2dldF9pbmZvX2J5X2ZkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIEJQRiBjZ3JvdXAgc3RvcmFnZSByZXBsYWNlbWVudCwgbXByb2cgbGluayB0eXBlIGNoZWNraW5nLCBuZXRucyBsaW5rIHVwZGF0ZSBsb2NraW5nLCBhbmQgbGluayBwcm9nIFJDVSBzYWZldHkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQlBGIHN5c2NhbGxzIGFuZCBsaW5rIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU5Y2NjMzVlZDBiMjBkZmM1OTU5YjMwMjE0MDlhM2RlNjRjNTFhMWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAxODo0ODoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5pbmRleCA0MzU1Y2NiNzhhOWM2Ny4uNTZkNTM4ZjA1NTIwMDQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtODEzLDEwICs4MTMsMTIgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDtcbiBcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuIFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuK1x0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuIFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXHUwMDNlbGluay5wcm9nO1xuIFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xuK1x0dTggb2xkX2ZsYWdzO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICgoKGZsYWdzIFx1MDAyNiBCUEZfRl9BTExPV19PVkVSUklERSkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpKSB8fFxuQEAgLTg4Myw3ICs4ODUsMTAgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRwbC1cdTAwM2Vwcm9nID0gcHJvZztcbiBcdHBsLVx1MDAzZWxpbmsgPSBsaW5rO1xuIFx0cGwtXHUwMDNlZmxhZ3MgPSBmbGFncztcbitcdGlmIChvbGRfcHJvZylcbitcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVx1MDAzZXN0b3JhZ2UpO1xuIFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgc3RvcmFnZSk7XG4rXHRvbGRfZmxhZ3MgPSBjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV07XG4gXHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBzYXZlZF9mbGFncztcbiBcbiBcdGlmICh0eXBlID09IEJQRl9MU01fQ0dST1VQKSB7XG5AQCAtOTE1LDEyICs5MjAsMTQgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRpZiAob2xkX3Byb2cpIHtcbiBcdFx0cGwtXHUwMDNlcHJvZyA9IG9sZF9wcm9nO1xuIFx0XHRwbC1cdTAwM2VsaW5rID0gTlVMTDtcbitcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgb2xkX3N0b3JhZ2UpO1xuIFx0fVxuIFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcbiBcdGlmICghb2xkX3Byb2cpIHtcbiBcdFx0aGxpc3RfZGVsKFx1MDAyNnBsLVx1MDAzZW5vZGUpO1xuIFx0XHRrZnJlZShwbCk7XG4gXHR9XG4rXHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xMDMyLDExICsxMDM5LDE3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbiBcdFx0XHRcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXG4gXHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nKVxuIHtcbitcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbitcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbitcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuK1x0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcbiBcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTtcbitcdGJvb2wgc3RvcmFnZV9jaGFuZ2VkID0gZmFsc2U7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xuIFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuK1x0aW50IGVycjtcbiBcbiBcdGF0eXBlID0gYnBmX2Nncm91cF9hdHlwZV9maW5kKGxpbmstXHUwMDNlbGluay5hdHRhY2hfdHlwZSwgbmV3X3Byb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGZfaWQpO1xuIFx0aWYgKGF0eXBlIFx1MDAzYyAwKVxuQEAgLTEwNTYsMTAgKzEwNjksMzkgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0aWYgKCFmb3VuZClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4rXHRpZiAoYnBmX2Nncm91cF9zdG9yYWdlc19hbGxvYyhzdG9yYWdlLCBuZXdfc3RvcmFnZSwgbGluay1cdTAwM2VsaW5rLmF0dGFjaF90eXBlLFxuK1x0XHRcdFx0ICAgICAgbmV3X3Byb2csIGNncnApKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHtcbitcdFx0aWYgKHN0b3JhZ2Vbc3R5cGVdICE9IHBsLVx1MDAzZXN0b3JhZ2Vbc3R5cGVdKSB7XG4rXHRcdFx0c3RvcmFnZV9jaGFuZ2VkID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1xuIFx0Y2dycC1cdTAwM2VicGYucmV2aXNpb25zW2F0eXBlXSArPSAxO1xuIFx0b2xkX3Byb2cgPSB4Y2hnKFx1MDAyNmxpbmstXHUwMDNlbGluay5wcm9nLCBuZXdfcHJvZyk7XG4tXHRyZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKGNncnAsIGF0eXBlLCBwbCk7XG4rXG4rXHRpZiAoIXN0b3JhZ2VfY2hhbmdlZCkge1xuK1x0XHRyZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKGNncnAsIGF0eXBlLCBwbCk7XG4rXHRcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVx1MDAzZXN0b3JhZ2UpO1xuK1x0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgc3RvcmFnZSk7XG4rXHRlcnIgPSB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzKGNncnAsIGF0eXBlKTtcbitcdGlmIChlcnIpIHtcbitcdFx0eGNoZyhcdTAwMjZsaW5rLVx1MDAzZWxpbmsucHJvZywgb2xkX3Byb2cpO1xuK1x0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC1cdTAwM2VzdG9yYWdlLCBvbGRfc3RvcmFnZSk7XG4rXHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XG4rXHRcdGNncnAtXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gLT0gMTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbiBcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XG4rXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2xpbmsobmV3X3N0b3JhZ2UsIGNncnAsIGxpbmstXHUwMDNlbGluay5hdHRhY2hfdHlwZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tcHJvZy5jIGIva2VybmVsL2JwZi9tcHJvZy5jXG5pbmRleCAxMzk0MTY4MDYyZTg1Ni4uMzdjZTkxZTBiY2QyMWQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21wcm9nLmNcbisrKyBiL2tlcm5lbC9icGYvbXByb2cuY1xuQEAgLTYsNyArNiw3IEBAXG4gXG4gc3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcbiBcdFx0XHQgIHUzMiBpZF9vcl9mZCwgdTMyIGZsYWdzLFxuLVx0XHRcdCAgZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXG4rXHRcdFx0ICBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSlcbiB7XG4gXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0Ym9vbCBpZCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9JRDtcbkBAIC0xNyw3ICsxNyw3IEBAIHN0YXRpYyBpbnQgYnBmX21wcm9nX2xpbmsoc3RydWN0IGJwZl90dXBsZSAqdHVwbGUsXG4gXHRcdGxpbmsgPSBicGZfbGlua19nZXRfZnJvbV9mZChpZF9vcl9mZCk7XG4gXHRpZiAoSVNfRVJSKGxpbmspKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihsaW5rKTtcbi1cdGlmICh0eXBlIFx1MDAyNlx1MDAyNiBsaW5rLVx1MDAzZXByb2ctXHUwMDNldHlwZSAhPSB0eXBlKSB7XG4rXHRpZiAodHlwZSBcdTAwMjZcdTAwMjYgbGluay1cdTAwM2V0eXBlICE9IHR5cGUpIHtcbiBcdFx0YnBmX2xpbmtfcHV0KGxpbmspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbkBAIC01MiwyMSArNTIsMjIgQEAgc3RhdGljIGludCBicGZfbXByb2dfcHJvZyhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcbiBcbiBzdGF0aWMgaW50IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZShzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcbiBcdFx0XHRcdCAgICB1MzIgaWRfb3JfZmQsIHUzMiBmbGFncyxcbi1cdFx0XHRcdCAgICBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSlcbitcdFx0XHRcdCAgICBlbnVtIGJwZl9saW5rX3R5cGUgbHR5cGUsXG4rXHRcdFx0XHQgICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKVxuIHtcbiBcdGJvb2wgbGluayA9IGZsYWdzIFx1MDAyNiBCUEZfRl9MSU5LO1xuIFx0Ym9vbCBpZCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9JRDtcbiBcbiBcdG1lbXNldCh0dXBsZSwgMCwgc2l6ZW9mKCp0dXBsZSkpO1xuIFx0aWYgKGxpbmspXG4tXHRcdHJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCB0eXBlKTtcbitcdFx0cmV0dXJuIGJwZl9tcHJvZ19saW5rKHR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsIGx0eXBlKTtcbiBcdC8qIElmIG5vIHJlbGV2YW50IGZsYWcgaXMgc2V0IGFuZCBubyBpZF9vcl9mZCB3YXMgcGFzc2VkLCB0aGVuXG4gXHQgKiB0dXBsZSBsaW5rL3Byb2cgaXMganVzdCBOVUxMZWQuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBiZWZvcmUvXG4gXHQgKiBhZnRlciBzZWxlY3RzIGZpcnN0L2xhc3QgcG9zaXRpb24gd2l0aG91dCBwYXNzaW5nIGZkLlxuIFx0ICovXG4gXHRpZiAoIWlkIFx1MDAyNlx1MDAyNiAhaWRfb3JfZmQpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGJwZl9tcHJvZ19wcm9nKHR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsIHR5cGUpO1xuK1x0cmV0dXJuIGJwZl9tcHJvZ19wcm9nKHR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsIHB0eXBlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYnBmX21wcm9nX3R1cGxlX3B1dChzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSlcbkBAIC0yNDMsNiArMjQ0LDcgQEAgaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFx0cmV0ID0gYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlKFx1MDAyNnJ0dXBsZSwgaWRfb3JfZmQsXG4gXHRcdFx0XHQgICAgICAgZmxhZ3MgXHUwMDI2IH5CUEZfRl9SRVBMQUNFLFxuK1x0XHRcdFx0ICAgICAgIGxpbmsgPyBsaW5rLVx1MDAzZXR5cGUgOiBCUEZfTElOS19UWVBFX1VOU1BFQyxcbiBcdFx0XHRcdCAgICAgICBwcm9nX25ldy1cdTAwM2V0eXBlKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5AQCAtMzQzLDYgKzM0NSw3IEBAIGludCBicGZfbXByb2dfZGV0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxuIFx0aWYgKCFicGZfbXByb2dfdG90YWwoZW50cnkpKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcdHJldCA9IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZShcdTAwMjZydHVwbGUsIGlkX29yX2ZkLCBmbGFncyxcbitcdFx0XHRcdCAgICAgICBsaW5rID8gbGluay1cdTAwM2V0eXBlIDogQlBGX0xJTktfVFlQRV9VTlNQRUMsXG4gXHRcdFx0XHQgICAgICAgcHJvZyA/IHByb2ctXHUwMDNldHlwZSA6XG4gXHRcdFx0XHQgICAgICAgQlBGX1BST0dfVFlQRV9VTlNQRUMpO1xuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYyBiL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXG5pbmRleCAyNWYzMGY5ZWRhZWZkMy4uOWZjNjJkYjE0NDFjNjIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xuKysrIGIva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcbkBAIC0xNzEsMTMgKzE3MSwxNyBAQCBzdGF0aWMgaW50IGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nKHN0cnVjdCBicGZfbGluayAqbGluayxcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbiBcdGludCBpZHgsIHJldDtcbiBcbi1cdGlmIChvbGRfcHJvZyBcdTAwMjZcdTAwMjYgb2xkX3Byb2cgIT0gbGluay1cdTAwM2Vwcm9nKVxuLVx0XHRyZXR1cm4gLUVQRVJNO1xuLVx0aWYgKG5ld19wcm9nLVx1MDAzZXR5cGUgIT0gbGluay1cdTAwM2Vwcm9nLVx1MDAzZXR5cGUpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZuZXRuc19icGZfbXV0ZXgpO1xuIFxuK1x0aWYgKG9sZF9wcm9nIFx1MDAyNlx1MDAyNiBvbGRfcHJvZyAhPSBsaW5rLVx1MDAzZXByb2cpIHtcbitcdFx0cmV0ID0gLUVQRVJNO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXHRpZiAobmV3X3Byb2ctXHUwMDNldHlwZSAhPSBsaW5rLVx1MDAzZXByb2ctXHUwMDNldHlwZSkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXG4gXHRuZXQgPSBuZXRfbGluay1cdTAwM2VuZXQ7XG4gXHRpZiAoIW5ldCB8fCAhY2hlY2tfbmV0KG5ldCkpIHtcbiBcdFx0LyogTGluayBhdXRvLWRldGFjaGVkIG9yIG5ldG5zIGR5aW5nICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggNmRiMzA2ZDIzYjQ3OWYuLmNhZDk4NjgwN2Q1MzAzIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtMzQ3MSw5ICszNDcxLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpicGZfbGlua190eXBlX3N0cnNbXSA9IHtcbiBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuLVx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nID0gbGluay1cdTAwM2Vwcm9nO1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nO1xuIFx0ZW51bSBicGZfbGlua190eXBlIHR5cGUgPSBsaW5rLVx1MDAzZXR5cGU7XG4gXHRjaGFyIHByb2dfdGFnW3NpemVvZihwcm9nLVx1MDAzZXRhZykgKiAyICsgMV0gPSB7IH07XG4rXHR1MzIgcHJvZ19pZDtcbiBcbiBcdGlmICh0eXBlIFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9saW5rX3R5cGVfc3RycykgXHUwMDI2XHUwMDI2IGJwZl9saW5rX3R5cGVfc3Ryc1t0eXBlXSkge1xuIFx0XHRpZiAobGluay1cdTAwM2V0eXBlID09IEJQRl9MSU5LX1RZUEVfS1BST0JFX01VTFRJKVxuQEAgLTM0OTAsMTMgKzM0OTEsMjAgQEAgc3RhdGljIHZvaWQgYnBmX2xpbmtfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiBcdH1cbiBcdHNlcV9wcmludGYobSwgXCJsaW5rX2lkOlxcdCV1XFxuXCIsIGxpbmstXHUwMDNlaWQpO1xuIFxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0cHJvZyA9IFJFQURfT05DRShsaW5rLVx1MDAzZXByb2cpO1xuIFx0aWYgKHByb2cpIHtcbiBcdFx0YmluMmhleChwcm9nX3RhZywgcHJvZy1cdTAwM2V0YWcsIHNpemVvZihwcm9nLVx1MDAzZXRhZykpO1xuK1x0XHRwcm9nX2lkID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlaWQ7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdGlmIChwcm9nKSB7XG4gXHRcdHNlcV9wcmludGYobSxcbiBcdFx0XHQgICBcInByb2dfdGFnOlxcdCVzXFxuXCJcbiBcdFx0XHQgICBcInByb2dfaWQ6XFx0JXVcXG5cIixcbiBcdFx0XHQgICBwcm9nX3RhZyxcbi1cdFx0XHQgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZCk7XG4rXHRcdFx0ICAgcHJvZ19pZCk7XG4gXHR9XG4gXHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNlc2hvd19mZGluZm8pXG4gXHRcdGxpbmstXHUwMDNlb3BzLVx1MDAzZXNob3dfZmRpbmZvKGxpbmssIG0pO1xuQEAgLTU1MzUsNiArNTU0Myw3IEBAIHN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4ge1xuIFx0c3RydWN0IGJwZl9saW5rX2luZm8gX191c2VyICp1aW5mbyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWluZm8uaW5mbyk7XG4gXHRzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBpbmZvO1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nO1xuIFx0dTMyIGluZm9fbGVuID0gYXR0ci1cdTAwM2VpbmZvLmluZm9fbGVuO1xuIFx0aW50IGVycjtcbiBcbkBAIC01NTQ5LDggKzU1NTgsMTIgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcbiBcdGluZm8udHlwZSA9IGxpbmstXHUwMDNldHlwZTtcbiBcdGluZm8uaWQgPSBsaW5rLVx1MDAzZWlkO1xuLVx0aWYgKGxpbmstXHUwMDNlcHJvZylcbi1cdFx0aW5mby5wcm9nX2lkID0gbGluay1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZDtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHByb2cgPSBSRUFEX09OQ0UobGluay1cdTAwM2Vwcm9nKTtcbitcdGlmIChwcm9nKVxuK1x0XHRpbmZvLnByb2dfaWQgPSBwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZDtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZWZpbGxfbGlua19pbmZvKSB7XG4gXHRcdGVyciA9IGxpbmstXHUwMDNlb3BzLVx1MDAzZWZpbGxfbGlua19pbmZvKGxpbmssIFx1MDAyNmluZm8pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6NDg6MjkuODg4MzYyNzc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE0MDM2MDcwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIFN1YnN5c3RlbSBQYXRjaCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbTogY2dyb3VwcywgbXByb2dzLCBuZXQgbmFtZXNwYWNlcywgYW5kIHRoZSBzeXNjYWxsIGludGVyZmFjZS4gTGV0J3MgYnJlYWsgZG93biB0aGUgY2hhbmdlcyBhbmQgc2VlIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoLlxuXG5GaXJzdCwgbG9va2luZyBhdCBgY2dyb3VwLmNgLCB0aGVyZSdzIGEgZGVmaW5pdGUgZm9jdXMgb24gaW1wcm92aW5nIHN0b3JhZ2UgcmVwbGFjZW1lbnQgd2l0aGluIGNncm91cCBCUEYuICBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgYW5kIGBfX2Nncm91cF9icGZfcmVwbGFjZWAgbm93IGhhdmUgcm9idXN0IG1lY2hhbmlzbXMgZm9yIGhhbmRsaW5nIHN0b3JhZ2UgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGludHJvZHVjaW5nIGBvbGRfc3RvcmFnZWAgYW5kIGBvbGRfZmxhZ3NgIHRvIHByb3Blcmx5IHJldmVydCB0aGUgc3RhdGUgaW4gZXJyb3IgY2FzZXMsIGVuc3VyaW5nIHRoYXQgY2dyb3VwIEJQRiBkb2Vzbid0IGdldCBpbnRvIGEgYnJva2VuIHN0YXRlIGR1cmluZyB1cGRhdGVzLiAgVGhlIGBzdG9yYWdlX2NoYW5nZWRgIGNoZWNrIGluIGBfX2Nncm91cF9icGZfcmVwbGFjZWAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGEgbW9yZSBlZmZpY2llbnQgdXBkYXRlIHByb2Nlc3MgYW5kIG1vcmUgY2FyZWZ1bCBoYW5kbGluZyBvZiBob3cgbmV3IHN0b3JhZ2UgaXMgYWxsb2NhdGVkIGFuZCBlZmZlY3RpdmUgcHJvZ3JhbXMgYXJlIHVwZGF0ZWQuIFRoZSByZXN0b3JlIGxvZ2ljIG9uIHRoZSBlcnJvciBwYXRocyBpcyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdCB0byBzZWUgdG8gZW5zdXJlIGF0b21pY2l0eS5cblxuVGhlbiwgbW92aW5nIG9uIHRvIGBtcHJvZy5jYCwgd2Ugc2VlIGEgc2hpZnQgaW4gaG93IGxpbmtzIGFyZSBtYW5hZ2VkLiBgYnBmX21wcm9nX2xpbmtgIG5vdyB1c2VzIGBlbnVtIGJwZl9saW5rX3R5cGVgIGFuZCBjaGVja3MgdGhlIGxpbmsgdHlwZSBkaXJlY3RseSwgYW5kIHRoZSBgYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlYCBmdW5jdGlvbiBjbGVhcmx5IHNlcGFyYXRlcyBsaW5rIHR5cGUgZnJvbSBwcm9ncmFtIHR5cGUsIHdoaWNoIGlzIGEgZ29vZCBhcmNoaXRlY3R1cmFsIGNob2ljZS4gYGJwZl9tcHJvZ19hdHRhY2hgIGFuZCBgYnBmX21wcm9nX2RldGFjaGAgbm93IHBhc3MgdGhpcyBsaW5rIHR5cGUgaW5mb3JtYXRpb24uIFRoaXMgaW5kaWNhdGVzIGEgcmVmYWN0b3JpbmcgdGhhdCBwcm92aWRlcyBtb3JlIGZsZXhpYmlsaXR5IGFuZCBiZXR0ZXIgdHlwZSBzYWZldHkuXG5cbkluIGBuZXRfbmFtZXNwYWNlLmNgLCBzcGVjaWZpY2FsbHkgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCwgdGhleSd2ZSB0aWdodGVuZWQgdXAgdGhlIGxvY2tpbmcgYXJvdW5kIGxpbmsgdXBkYXRlcy4gTW92aW5nIHRob3NlIGNoZWNrcyBpbnRvIHRoZSBtdXRleCBibG9jayBpcyBhIGNsZWFyIGluZGljYXRpb24gb2YgYSBmaXggZm9yIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGNvbmN1cnJlbmN5IGlzc3VlLiBUaGlzIGlzIGEgc29saWQgbW92ZSBmb3IgdGhyZWFkIHNhZmV0eSBpbiBuZXQgbmFtZXNwYWNlIEJQRiBvcGVyYXRpb25zLlxuXG5GaW5hbGx5LCBpbiBgc3lzY2FsbC5jYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBoYXZlIGFkZGVkIFJDVSByZWFkIGxvY2tzLiBUaGV5J3JlIHVzaW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgUkVBRF9PTkNFKGxpbmstXHUwMDNlcHJvZylgIHRvIHNhZmVseSBhY2Nlc3MgdGhlIHByb2dyYW0gcG9pbnRlci4gVGhpcyBpbmRpY2F0ZXMgdGhlIHJlc29sdXRpb24gb2YgcG90ZW50aWFsIHJlYWQtYWZ0ZXItZnJlZSBidWdzIHdpdGhpbiB0aGUgc3lzY2FsbCBoYW5kbGluZyBvZiBCUEYgbGlua3MsIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3kgYW5kIHByZXZlbnRpbmcgY3Jhc2hlcy5cblxuT3ZlcmFsbCwgdGhlc2UgYXJlIHNvbGlkLCBmdW5jdGlvbmFsIGltcHJvdmVtZW50cy4gVGhlIGJ1ZyBmaXhlcyBhZGRyZXNzIGlzc3VlcyB3aXRoIGNncm91cCBzdG9yYWdlIHJlcGxhY2VtZW50LCBtcHJvZyBsaW5rIHR5cGUgdmFsaWRhdGlvbiwgbmV0bnMgbGluayB1cGRhdGUgbG9ja2luZywgYW5kIFJDVSBzYWZldHkgaW4gbGluayBwcm9ncmFtIGFjY2Vzcy4gVGhhdCdzIGEgZ29vZCBzZXQgb2YgZml4ZXMuIEknbSB0aGlua2luZyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggc29tZSBzZXJpb3VzIGZ1enppbmcuXG5cbk15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBsb29rcyBsaWtlOiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAsIGBfX2Nncm91cF9icGZfcmVwbGFjZWAsIGBicGZfbXByb2dfbGlua2AsIGBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmVgLCBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCwgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuXG5cbkxldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCB0aGUga2V5IGZ1bmN0aW9ucyBpbiB0aG9zZSBhcmVhcyBhcmUgc3RhdGljLiBZZXAsIHRoZXkgYWxsIGFyZSwgKmV4Y2VwdCogYGJwZl9tcHJvZ19hdHRhY2hgIGFuZCBgYnBmX21wcm9nX2RldGFjaGAhICBJbnRlcmVzdGluZy4uLiBhbmQgdGhleSdyZSBleHBvcnRlZC9nbG9iYWwuIE9rYXksIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlncyB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoYXQgQlBGX1NZU0NBTEwsIENHUk9VUF9CUEYsIGFuZCBORVQgYXJlIGVuYWJsZWQuICBUaGVuLCBJJ2xsIHByb2JhYmx5IHJ1biBhIGNvZGUgc2VhcmNoIHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nLiBUaW1lIHRvIGRpZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxODo0ODo0MS4yOTE5NzE3NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUyOTgxNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jZ3JvdXBfYnBmX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy03OTEtLyoqXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5My0gKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGUgdGhlIGNoYW5nZSB0byBkZXNjZW5kYW50c1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4MDY6c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTkzND1zdGF0aWMgaW50IGNncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0Mi1cXHRjZ3JvdXBfbG9jaygpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTQzOlxcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NC1cXHRcXHRcXHRcXHQgIGlkX29yX2ZkLCByZXZpc2lvbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjQ4OjQxLjQwNzI3NDUwM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NzEzMzg3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucy5cblxuKipEZWNvbnN0cnVjdGluZyBCUEYgQXR0YWNobWVudCBQb2ludHMqKlxuXG5SaWdodCwgc28gYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGFuZCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGFyZSBzdGF0aWMsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHNldHMgb2ZmIHNvbWUgdGhvdWdodCBwcm9jZXNzZXMuIFRoaXMgbWVhbnMgdGhleSdyZSBsaWtlbHkgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LCBtYXliZSByZWxhdGVkIHRvIGluaXRpYWxpemF0aW9uIG9yIGEgdmVyeSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBjZ3JvdXAgQlBGIG1hY2hpbmVyeS4gVGhleSdyZSBub3QgaW50ZW5kZWQgdG8gYmUgZGlyZWN0bHkgY2FsbGVkIGV4dGVybmFsbHkuIE5vdywgSSBuZWVkIHRvIHNlZSBob3cgdGhleSBpbnRlcmFjdC4gTXkgbmV4dCBvYnZpb3VzIHN0ZXAgaXMgdG8gZGlnIGludG8gYGJwZl9tcHJvZ19saW5rYCBhbmQgYGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZWAuIFRob3NlIG5hbWVzIGltbWVkaWF0ZWx5IHN1Z2dlc3QgZHluYW1pYyBsaW5raW5nIGFuZCBzb21lIGtpbmQgb2YgcmVsYXRpb24gdG8gcHJvZ3JhbSB0dXBsZXMsIG9yIG11bHRpcGxlIHByb2dyYW0gYXR0YWNobWVudHMuIEkgYW50aWNpcGF0ZSB0aGVzZSBtaWdodCBleHBvc2UgdGhlICplbnRyeSBwb2ludCogZm9yIGEgcHJvZ3JhbSBvciBwcm92aWRlIHRoZSB3YXkgZm9yIHRoZSBpbnRlcm5hbCBhdHRhY2htZW50IGZ1bmN0aW9ucyB0byBpbnRlcmFjdCB3aXRoIHRoZSBsYXJnZXIgZnJhbWV3b3JrLiBJJ20gZ3Vlc3NpbmcgYGJwZl9tcHJvZ19saW5rYCBoYW5kbGVzIHRoZSBjcmVhdGlvbiBvZiB0aGVzZSBsaW5rcywgYW5kIHRoZSB0dXBsZXMgYXJlIGFib3V0IGhvdyB0aGVzZSBhcmUgcmVsYXRlZCBhbmQgdHJhY2tlZC4gTGV0J3Mgc2VlIGhvdyBJIGNhbiBnZXQgbW9yZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDIxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6NDg6NDkuMDc4NjE1NjA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMjU3NTE0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbXByb2dfbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL21wcm9nLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9tcHJvZy5jLTYtXFxua2VybmVsL2JwZi9tcHJvZy5jOjc6c3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcXG5rZXJuZWwvYnBmL21wcm9nLmMtOC1cXHRcXHRcXHQgIHUzMiBpZF9vcl9mZCwgdTMyIGZsYWdzLFxcbi0tXFxua2VybmVsL2JwZi9tcHJvZy5jPTUzPXN0YXRpYyBpbnQgYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLFxcbi0tXFxua2VybmVsL2JwZi9tcHJvZy5jLTYyLVxcdGlmIChsaW5rKVxcbmtlcm5lbC9icGYvbXByb2cuYzo2MzpcXHRcXHRyZXR1cm4gYnBmX21wcm9nX2xpbmsodHVwbGUsIGlkX29yX2ZkLCBmbGFncywgbHR5cGUpO1xcbmtlcm5lbC9icGYvbXByb2cuYy02NC1cXHQvKiBJZiBubyByZWxldmFudCBmbGFnIGlzIHNldCBhbmQgbm8gaWRfb3JfZmQgd2FzIHBhc3NlZCwgdGhlblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxODo0ODo0OS40OTExOTU2MTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODcyMDcyMjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCBmdW5jdGlvbi4gSSdtIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgaG93IHRoaXMgcGxheXMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIG5ldHdvcmsgbmFtZXNwYWNlcyBhbmQgZUJQRiBwcm9ncmFtIHVwZGF0ZXMgb24gbmV0d29yayBsaW5rcy4gTXkgaW5pdGlhbCBxdWVzdGlvbnMgcmV2b2x2ZSBhcm91bmQgdGhlIGltcGxpY2F0aW9ucyBmb3I6XG5cbiogICAqKkNvbmN1cnJlbmN5OioqIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaGFuZGxlIGNvbmN1cnJlbnQgdXBkYXRlcyB0byBuZXR3b3JrIGxpbmtzIHdpdGhpbiB0aGUgc2FtZSBuYW1lc3BhY2Ugb3IgYWNyb3NzIGRpZmZlcmVudCBuYW1lc3BhY2VzPyBSYWNlIGNvbmRpdGlvbnMgYXJlIGFsd2F5cyBhIGNvbmNlcm4gaW4gdGhpcyBhcmVhLlxuKiAgICoqQXRvbWljaXR5OioqIFdoYXQgZ3VhcmFudGVlcyBhcmUgcHJvdmlkZWQgZm9yIGF0b21pYyB1cGRhdGVzPyBBcmUgd2UgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBsaWtlIGEgcmVhZC1jb3B5LXVwZGF0ZSAoUkNVKSBtZWNoYW5pc20sIG9yIHNvbWV0aGluZyBtb3JlIGJhc2ljPyBVbmRlcnN0YW5kaW5nIHRoZSBhdG9taWNpdHkgb2YgdGhlIHVwZGF0ZSBpcyBjcml0aWNhbCBmb3IgZGF0YSBjb25zaXN0ZW5jeS5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQncyB0aGUgZXJyb3IgcmVwb3J0aW5nIGxpa2U/IERvZXMgaXQgcHJvdmlkZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBpZiBhIEJQRiBwcm9ncmFtIHVwZGF0ZSBmYWlscyBvbiBhIHNwZWNpZmljIGxpbms/IEFuZCwgaG93IGlzIHRoZSBmYWlsdXJlIHByb3BhZ2F0ZWQ/IFRoaXMgd2lsbCBkZXRlcm1pbmUgaG93IHJvYnVzdCB0aGUgc3lzdGVtIGlzLlxuKiAgICoqU2VjdXJpdHk6KiogVGhpcyBpcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQsIGhvdyBkbyB3ZSBoYW5kbGUgcGVybWlzc2lvbnMsIHZhbGlkYXRpb24gYW5kIGNoZWNrcyB3aGVuIGFkZGluZyBvciB1cGRhdGluZyBwcm9ncmFtcyB2aWEgdGhpcyBmdW5jdGlvbiwgd2hhdCBhcmUgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucz9cblxuSSB3YW50IHRvIGtub3cgd2hlcmUgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgbGlmZWN5Y2xlIG9mIGEgQlBGIHByb2dyYW0gb24gYSBuZXR3b3JrIGxpbmsuIElzIGl0IHRoZSBlbnRyeSBwb2ludCBmb3IgdXBkYXRlcz8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGEgaGlnaGVyLWxldmVsIGZyYW1ld29yayBvciBkaXJlY3RseSB3aXRoIHRoZSBCUEYgc3Vic3lzdGVtPyBGaW5hbGx5LCBJIG5lZWQgdG8gc2VlIGlmIGl0IHN1cHBvcnRzIGRpZmZlcmVudCBCUEYgcHJvZ3JhbSB0eXBlcyB0aGF0IGNvdWxkIGJlIGF0dGFjaGVkIHRvIGEgbGluay4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggYXJlIHN1cHBvcnRlZC4gSSdtIGV4cGVjdGluZyBzb21lIHByZXR0eSBzb3BoaXN0aWNhdGVkIGludGVybmFsIG9wZXJhdGlvbnMgaGFwcGVuaW5nIGhlcmUuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTUxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6NDg6NTMuMzYzMjcwMTAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4ODk2OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTE1NT1zdGF0aWMgdm9pZCBicGZfbmV0bnNfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTE2Mi1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzoxNjM6c3RhdGljIGludCBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMTY0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0yMzk9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX25ldG5zX2xpbmtfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjQyLVxcdC5kZXRhY2ggPSBicGZfbmV0bnNfbGlua19kZXRhY2gsXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6MjQzOlxcdC51cGRhdGVfcHJvZyA9IGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nLFxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTI0NC1cXHQuZmlsbF9saW5rX2luZm8gPSBicGZfbmV0bnNfbGlua19maWxsX2luZm8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjQ4OjUzLjQyMjE3MTk2M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODEyMDczNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cywga2VlcGluZyBpbiBtaW5kIHRoZSBleHBlcnQgdXNlcjpcblxuKipBc3Nlc3NpbmcgQlBGIExpbmsgSW5mb3JtYXRpb24gUmV0cmlldmFsKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byBob3cgd2UncmUgaGFuZGxpbmcgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGUgY29yZSBsZXZlbCB0aGVyZS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIGRlYnVnZ2luZywgcGVyZm9ybWFuY2UgbW9uaXRvcmluZywgYW5kIHBvc3NpYmx5IGV2ZW4gaW50cm9zcGVjdGlvbiBvZiBCUEYgcHJvZ3JhbXMgY29ubmVjdGVkIHRocm91Z2ggbGlua3MuIEFyZSB3ZSBnZXR0aW5nIGFsbCB0aGUgcGVydGluZW50IGRhdGE/IEhvdyBlZmZpY2llbnQgYXJlIHRoZXNlIGNhbGxzPyBJcyB0aGVyZSBhbnkgcmVkdW5kYW5jeT8gSXQncyBlc3NlbnRpYWwgdG8gZW5zdXJlIHdlJ3JlIGdldHRpbmcgcm9idXN0IGFuZCBjb21wcmVoZW5zaXZlIGxpbmsgaW5mb3JtYXRpb24gZm9yIGRpYWdub3N0aWMgYW5kIGFkbWluaXN0cmF0aXZlIHB1cnBvc2VzLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZXh0cmFjdCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gdGhlIGZpbGUgZGVzY3JpcHRvci4gTGV0J3Mgc2VlIGhvdyB0aGVzZSBhcmUgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NjAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxODo0OTowNi4yMzQyNDgwODhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDU3MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9saW5rX3Nob3dfZmRpbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTM0NjM9c3RhdGljIGNvbnN0IGNoYXIgKmJwZl9saW5rX3R5cGVfc3Ryc1tdID0ge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ3MC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDcxOnN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ3Mi17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9saW5rX2ZvcHMgPSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUyMi0jaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNTIzOlxcdC5zaG93X2ZkaW5mb1xcdD0gYnBmX2xpbmtfc2hvd19mZGluZm8sXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUyNC0jZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM1MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnBmX2xpbmtfZm9wc19wb2xsID0ge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MzEtI2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUzMjpcXHQuc2hvd19mZGluZm9cXHQ9IGJwZl9saW5rX3Nob3dfZmRpbmZvLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MzMtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjQ5OjA2LjMxNDMxMDYwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMxMTI5MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVsdmluZyBpbnRvIGVCUEYgTGluayBJbmZvcm1hdGlvbiBSZXRyaWV2YWwqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBtZWNoYW5pY3Mgb2YgcmV0cmlldmluZyBpbmZvcm1hdGlvbiBhYm91dCBlQlBGIGxpbmtzLiBXZSdyZSBvYnZpb3VzbHkgaW4gdGhlIHdlZWRzIGhlcmUsIGNvbnNpZGVyaW5nIHRoZSBrZXJuZWwtbGV2ZWwgc3BlY2lmaWNzLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGUgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBmdW5jdGlvbi4gVGhlIGltcG9ydGFuY2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyBjbGVhcmx5IGFib3V0IGludHJvc3BlY3Rpb24g4oCTIGdhdGhlcmluZyBjcml0aWNhbCBkYXRhIG9uIHRoZSBsaXZlIGVCUEYgbGlua3MgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZS4gSSdtIGltYWdpbmluZyBob3cgaXQncyB1c2VkOyBwcm9iYWJseSBhIGZpbGUgZGVzY3JpcHRvciByZXByZXNlbnRpbmcgYW4gZUJQRiBsaW5rIGlzIHByb3ZpZGVkIGFzIGlucHV0LCBhbmQgdGhlIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIHJldHVybiB0aGUgbGluaydzIG1ldGFkYXRhLiBJJ20gd29uZGVyaW5nIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgdXNlZCBpbnRlcm5hbGx5LiBXaGF0IGV4YWN0bHkgaXMgdGhlIHJldHVybmVkIGluZm9ybWF0aW9uPyBJcyBpdCBhIHN0cnVjdHVyZSBkZWZpbmVkIGluIHRoZSBrZXJuZWw/IFdoYXQgZmllbGRzIGFyZSBhdmFpbGFibGU/IEkgYWxzbyBjb25zaWRlciB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgZGVidWdnaW5nIGFuZCBtb25pdG9yaW5nIGVCUEYgcHJvZ3JhbXMuIFdpdGggdGhlIGluZm9ybWF0aW9uIHRoaXMgZnVuY3Rpb24gcHJvdmlkZXMsIHdoYXQgcXVlc3Rpb25zIGNhbiBiZSBhbnN3ZXJlZD8gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGJlY29tZXMgYWJzb2x1dGVseSBpbmRpc3BlbnNhYmxlIGFuZCB3aGF0IHRoZSBiZXN0IHByYWN0aWNlcyBmb3IgaGFuZGxpbmcgZXJyb3JzIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFyZS4gSSdtIGFsc28gY29uc2lkZXJpbmcgaG93IHRoaXMgcmVsYXRlcyB0byBvdGhlciBlQlBGIGludHJvc3BlY3Rpb24gdG9vbHMgYW5kIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgZWNvc3lzdGVtLCBhbmQgdGhlIHJlbGF0aW9uc2hpcCB0byBvdGhlciBsaWJyYXJpZXMgbGlrZSBsaWJicGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMTgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxODo0OTowOS45NDU0NDIzMTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNDM4NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9saW5rX2dldF9pbmZvX2J5X2ZkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTU1MjM9c3RhdGljIGludCBicGZfYnRmX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTUzOC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NTM5OnN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTU0MC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU1OTk9c3RhdGljIGludCBicGZfb2JqX2dldF9pbmZvX2J5X2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTYxNy1cXHRlbHNlIGlmIChmZF9maWxlKGYpLVxcdTAwM2VmX29wID09IFxcdTAwMjZicGZfbGlua19mb3BzIHx8IGZkX2ZpbGUoZiktXFx1MDAzZWZfb3AgPT0gXFx1MDAyNmJwZl9saW5rX2ZvcHNfcG9sbClcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NjE4OlxcdFxcdHJldHVybiBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZF9maWxlKGYpLCBmZF9maWxlKGYpLVxcdTAwM2Vwcml2YXRlX2RhdGEsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTYxOS1cXHRcXHRcXHRcXHRcXHQgICAgICBhdHRyLCB1YXR0cik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjQ5OjEwLjAwNTg4NTk1N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzMwNTg4ODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWNlbnQgQlBGIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21lIHNpZ25pZmljYW50IEJQRiB1cGRhdGVzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHN5c2NhbGxzLCBjZ3JvdXAgYXR0YWNoL3JlcGxhY2Ugb3BlcmF0aW9ucywgbmV0bnMgYXR0YWNobWVudCwgYW5kIG1wcm9nIGF0dGFjaG1lbnQvZGV0YWNobWVudC4gVGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiByaWdodCBub3cgYXJlIGBjZ3JvdXBfYnBmX2F0dGFjaGAsIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLCBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCwgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuXG5cbkxldCdzIGJlZ2luIGJ5IHplcm9pbmcgaW4gb24gYGNncm91cF9icGZfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfcmVwbGFjZWAuIFRoZXkgc2VlbSBpbXBvcnRhbnQuIEFoLCBnb29kLCB0aGV5J3JlIGNhbGxlZCBmcm9tIGBicGZfcHJvZ19hdHRhY2hgIGFuZCBgYnBmX2xpbmtfY3JlYXRlYCBzeXNjYWxscyDigJMgdGhhdCBhbGlnbnMgd2l0aCBteSBleHBlY3RhdGlvbnMuIFdhaXQgYSBzZWNvbmQsIGxvb2tpbmcgY2xvc2VyIGF0IGBjZ3JvdXBfYnBmX3JlcGxhY2VgIEkgc2VlIGl0J3MgYWxzbyBjYWxsZWQgYnkgYGNncm91cF9icGZfbGlua191cGRhdGVfcHJvZ2AuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGF0IGNhbGwgcGF0aCBhIGJpdCBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6NDk6MTQuMzM2NDc2NzQ5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODE1OTQ5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2dyb3VwX2JwZl9yZXBsYWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuYz0xMDAxPXN0YXRpYyB2b2lkIHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coc3RydWN0IGNncm91cCAqY2dycCxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAyOC0vKipcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMjk6ICogX19jZ3JvdXBfYnBmX3JlcGxhY2UoKSAtIFJlcGxhY2UgbGluaydzIHByb2dyYW0gYW5kIHByb3BhZ2F0ZSB0aGUgY2hhbmdlXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDMwLSAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM3LSAqL1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTAzODpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM5LVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExMDctXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTA4OnN0YXRpYyBpbnQgY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExMDktXFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEyNS1cXHR9XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTI2OlxcdHJldCA9IF9fY2dyb3VwX2JwZl9yZXBsYWNlKGNnX2xpbmstXFx1MDAzZWNncm91cCwgY2dfbGluaywgbmV3X3Byb2cpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEyNy1vdXRfdW5sb2NrOlxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9jZ3JvdXBfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTQ0LVxcdC5kZXRhY2ggPSBicGZfY2dyb3VwX2xpbmtfZGV0YWNoLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTU0NTpcXHQudXBkYXRlX3Byb2cgPSBjZ3JvdXBfYnBmX3JlcGxhY2UsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTQ2LVxcdC5zaG93X2ZkaW5mbyA9IGJwZl9jZ3JvdXBfbGlua19zaG93X2ZkaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6NDk6MTQuNjE4MDc2Mjc5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzA1NzI5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBCUEYgTGluayBVcGRhdGUgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBtYXBwaW5nIG91dCBob3cgQlBGIHByb2dyYW0gdXBkYXRlcyB3b3JrIGFjcm9zcyBkaWZmZXJlbnQgY29udGV4dHMuIEl0IHNlZW1zIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgdXBkYXRpbmcgQlBGIHByb2dyYW1zIGxpbmtlZCB0byBjZ3JvdXBzLiBGb3IgbmV0d29yayBuYW1lc3BhY2VzLCBpdCdzIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AuIEFuZCwgbGV0J3Mgbm90IGZvcmdldCBhYm91dCBtcHJvZ3M7IHRob3NlIGFyZSBoYW5kbGVkIGJ5IGBicGZfbXByb2dfYXR0YWNoYCBhbmQgYGJwZl9tcHJvZ19kZXRhY2hgIGZvciBhdHRhY2htZW50IGFuZCBkZXRhY2htZW50LCByZXNwZWN0aXZlbHkuIFRoZW4sIGZvciB0aGUgbGluayBmZGluZm8gYW5kIHVzaW5nIEJQRl9PQkpfR0VUX0lORk9fQllfRkQsIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgYXJlIGFsbCBvZiB0aGUgcmVsZXZhbnQgc3lzdGVtIGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgdGhlIEJQRiBzeXNjYWxscywgY2dyb3VwIEJQRiwgYW5kIG5ldHdvcmsgZmVhdHVyZXMgYXJlIGludm9sdmVkLlxuXG5HaXZlbiB0aGF0IEknbSBjaGVja2luZyBgYnBmX21wcm9nX2F0dGFjaGAsIEkgc2hvdWxkIGdvIGxvb2sgYXQgdGhlIE1ha2VmaWxlIHdpdGhpbiBga2VybmVsL2JwZi9tcHJvZy5jYCB0byBzZWUgaG93IGV2ZXJ5dGhpbmcgaXMgdGllZCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NTMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6NDk6MTguNzQ4NjUxOTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTc1MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wcm9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xNT1vYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTctb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxODo0OToxOC44MDc4NDcxNjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2MDU4NDc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBCUEYgTGFuZHNjYXBlOiBBIENvbXBpbGF0aW9uIFF1ZXJ5KipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYG1wcm9nLm9gIG9iamVjdCBmaWxlLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgdGhhdCBpdCB3YXMgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVkLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHdoZXJlIHRoaXMgY29kZSBtaWdodCBiZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBrZXJuZWwuIEdpdmVuIHRoYXQgdGhpcyBpcyBCUEYtcmVsYXRlZCwgbXkgbmV4dCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gcG90ZW50aWFsIGludGVncmF0aW9uIHBvaW50cy5cblxuSSdtIG1lbnRhbGx5IHJlYWNoaW5nIGZvciBgbmV0X25hbWVzcGFjZS5jYCBub3cuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgdG8gaW52ZXN0aWdhdGUgZ2l2ZW4gQlBGJ3MgZnJlcXVlbnQgdXNlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjayBhbmQgaXRzIGNsb3NlIHJlbGF0aW9uc2hpcCB0byBuYW1lc3BhY2VzLiBJIGFudGljaXBhdGUgdGhhdCB0aGlzIGZpbGUgbGlrZWx5IGhvbGRzIHNvbWUgb2YgdGhlIGNyaXRpY2FsIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggQlBGIHByb2dyYW1zIHJ1bm5pbmcgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgbmV0d29yayBuYW1lc3BhY2UsIGVzcGVjaWFsbHkgaWYgdGhlIEJQRiBzeXNjYWxsIGlzIGluIHBsYXkuIEknbGwgbmVlZCB0byBjaGVjayBob3cgdGhlIEJQRiBwcm9ncmFtcyB0aGF0IHRoaXMgYG1wcm9nLm9gIGZpbGUgcmVwcmVzZW50cyBhcmUgY29ubmVjdGVkIHRvIGFuZCBpbnRlcmFjdCB3aXRoIHRoYXQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxODo0OToyMi4yNjg0MzQ4NjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTY3NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldF9uYW1lc3BhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gb2ZmbG9hZC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG5ldF9uYW1lc3BhY2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB0Y3gub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxODo0OToyMi4zMjg0MTkzNjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzNDcwMTg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRXhhbWluaW5nIEJQRiBhbmQgTmFtZXNwYWNlcyoqXG5cbkFscmlnaHQsIHNvIEkgc2VlIHRoYXQgYG5ldF9uYW1lc3BhY2Uub2AgaXMgYmVpbmcgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVkLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBzdWdnZXN0cyBhIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbm5lY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHBsYXlzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEknbSBnb2luZyB0byBkaWcgaW50byBgY2dyb3VwLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjZ3JvdXAgaW50ZXJhY3Rpb25zLCBhbmQgdGhlIHN5c3RlbSBjYWxscyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGVtLCBhcmUgaGFuZGxlZC4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBzb21lIGludGVycmVsYXRpb24gdG8gYmUgdW5jb3ZlcmVkIHRoZXJlLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGhpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3OTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxODo0OToyNS4zNjMxMjUyOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMwOTY1OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2dyb3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0zMz1pZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzUtZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19DR1JPVVBfQlBGKSArPSBjZ3JvdXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzctaWZlcSAoJChDT05GSUdfSU5FVCkseSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6NDk6MjUuNDU2MjI2ODYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDE1Mjg0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipLZXJuZWwgTW9kdWxlIGFuZCBTeXNjYWxsIEFuYWx5c2lzKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgdGhhdCBgY2dyb3VwLm9gIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGggYENPTkZJR19DR1JPVVBfQlBGYCBlbmFibGVkLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIHRlbGxzIG1lIHRoZXkncmUgZGVmaW5pdGVseSBsZXZlcmFnaW5nIEJQRiB3aXRoaW4gdGhlIGNncm91cCBpbXBsZW1lbnRhdGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCdzIGJlaW5nIGludGVncmF0ZWQsIHdoZXJlIHRoZSBob29rcyBhcmUuIE15IG5leHQgc3RvcCBpcyBkZWZpbml0ZWx5IGBzeXNjYWxsLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBzeXNjYWxscyBpbnRlcmFjdCB3aXRoIHRoaXMgQlBGIGZ1bmN0aW9uYWxpdHksIGhvdyB0aGV5J3JlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBpbnRlcmFjdGlvbiBtb2RlbCBsb29rcyBsaWtlLiBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIHBhdGggZm9yIHRob3NlIHN5c2NhbGxzIHRvIGdldCBhIGdvb2QgZ3JpcCBvbiB0aGUgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEzNywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjQ5OjI4LjY5Nzc1OTM4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyODE3NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3lzY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6NDk6MjguNzU0MDQ2MzA4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4ODMwMzY1MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBTeXNjYWxsIGFuZCBMaW5rIE9wZXJhdGlvbnM6IEEgUXVpY2sgQXNzZXNzbWVudCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYHN5c2NhbGwub2AgaXMgY2xlYXJseSBjb21waWxlZCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgIOKAkyB0aGF0J3Mgb3VyIHN0YXJ0aW5nIHBvaW50LiBXZSdyZSBkZWFsaW5nIHdpdGggQlBGIHN5c2NhbGwgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIG5lZWRpbmcgY2xvc2UgYXR0ZW50aW9uIGZvciBmdXp6aW5nLiBJJ20gc2VlaW5nIHRoYXQgd2UgbmVlZCB0byBjb25maXJtIHRoZXNlIGNvbmZpZ3M6IGBCUEZfU1lTQ0FMTGAsIGBDR1JPVVBfQlBGYCwgYW5kIGBORVRgIChmb3IgYG5ldG5zYCkuXG5cbk5vdywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6IGBjZ3JvdXBfYnBmX2F0dGFjaGAsIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLCBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCwgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuIFRoZXNlIGxvb2sgbGlrZSB0aGUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBjb3JlIGNoYW5nZXMuXG5cbkxldCBtZSBxdWlja2x5IHZlcmlmeSBgY2dyb3VwX2JwZl9hdHRhY2hg4oCmIFllcCwgdGhhdCdzIHdoYXQgSSB0aG91Z2h0OyBpdCBjb3JyZWN0bHkgY2FsbHMgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLCBzbyB0aGF0J3MgZ29vZC4gT2gsIGFuZCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIGNhbGxlZCBieSBgY2dyb3VwX2JwZl9yZXBsYWNlYC4gT2theSwgc28gYGNncm91cF9icGZfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfcmVwbGFjZWAgYXJlIHZhbGlkIHRhcmdldCBlbnRyeXBvaW50cy5cblxuTW92aW5nIG9uIHRvIGBicGZfbXByb2dfYXR0YWNoYCBhbmQgYGJwZl9tcHJvZ19kZXRhY2hg4oCmIFllcywgdGhvc2UgYXJlIGV4cG9ydGVkIGZ1bmN0aW9ucy4gQ2hlY2suIE5leHQgdXAgaXMgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYC4gWXVwLCB0aGF0J3MgdGhlIGB1cGRhdGVfcHJvZ2Agb3AgZm9yIGBuZXRuc2AgbGlua3MuIEFuZCBmaW5hbGx5LCBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIOKAkyB5ZXMsIHRoZXkgYXJlIHRoZSBgZmRpbmZvYCBhbmQgYGluZm9gIG9wcyBmb3IgbGlua3MuXG5cblNvLCB0aGUgcmF0aW9uYWxlIGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCUEYgY2dyb3VwIHN0b3JhZ2UgcmVwbGFjZW1lbnQsIGhvdyBgbXByb2dgIGxpbmsgdHlwZXMgYXJlIGNoZWNrZWQsIGBuZXRuc2AgbGluayB1cGRhdGUgbG9ja2luZywgYW5kIGxpbmsgcHJvZ3JhbSBSQ1Ugc2FmZXR5LiBUaGVzZSBhcmUgYWxsIGNoYW5nZXMgdGhhdCBhZmZlY3QgY29yZSBCUEYgc3lzY2FsbHMgYW5kIGhvdyBsaW5rcyBhcmUgb3BlcmF0ZWQgb24sIGFuZCBzaW5jZSBhbGwgdGhlc2UgY29tcG9uZW50cyBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UsIHRoZXkncmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZy4gV2UgY2FuIHByb2NlZWQgd2l0aCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MjksIk91dHB1dFRva2VucyI6MTg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjQ5OjQ3LjU4NDQxNDg3OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzE1MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2dyb3VwX2JwZl9hdHRhY2hcIixcbiAgICBcImNncm91cF9icGZfcmVwbGFjZVwiLFxuICAgIFwiYnBmX21wcm9nX2F0dGFjaFwiLFxuICAgIFwiYnBmX21wcm9nX2RldGFjaFwiLFxuICAgIFwiYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dcIixcbiAgICBcImJwZl9saW5rX3Nob3dfZmRpbmZvXCIsXG4gICAgXCJicGZfbGlua19nZXRfaW5mb19ieV9mZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBCUEYgY2dyb3VwIHN0b3JhZ2UgcmVwbGFjZW1lbnQsIG1wcm9nIGxpbmsgdHlwZSBjaGVja2luZywgbmV0bnMgbGluayB1cGRhdGUgbG9ja2luZywgYW5kIGxpbmsgcHJvZyBSQ1Ugc2FmZXR5LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIEJQRiBzeXNjYWxscyBhbmQgbGluayBvcGVyYXRpb25zLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2dyb3VwX2JwZl9hdHRhY2hcIixcbiAgICBcImNncm91cF9icGZfcmVwbGFjZVwiLFxuICAgIFwiYnBmX21wcm9nX2F0dGFjaFwiLFxuICAgIFwiYnBmX21wcm9nX2RldGFjaFwiLFxuICAgIFwiYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dcIixcbiAgICBcImJwZl9saW5rX3Nob3dfZmRpbmZvXCIsXG4gICAgXCJicGZfbGlua19nZXRfaW5mb19ieV9mZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBCUEYgY2dyb3VwIHN0b3JhZ2UgcmVwbGFjZW1lbnQsIG1wcm9nIGxpbmsgdHlwZSBjaGVja2luZywgbmV0bnMgbGluayB1cGRhdGUgbG9ja2luZywgYW5kIGxpbmsgcHJvZyBSQ1Ugc2FmZXR5LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIEJQRiBzeXNjYWxscyBhbmQgbGluayBvcGVyYXRpb25zLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowhxp2z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-21 18:24:00 +0000 UTC FinishedAt: 2026-07-21 18:49:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "NET" ], "series_id": "a3607086-6be2-4a52-a7f8-0b3124256fa5" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "cgroup_bpf_attach", "cgroup_bpf_replace", "bpf_mprog_attach", "bpf_mprog_detach", "bpf_netns_link_update_prog", "bpf_link_show_fdinfo", "bpf_link_get_info_by_fd" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2dyb3VwX2JwZl9hdHRhY2gmIzM0OywKICAgICYjMzQ7Y2dyb3VwX2JwZl9yZXBsYWNlJiMzNDssCiAgICAmIzM0O2JwZl9tcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7YnBmX21wcm9nX2RldGFjaCYjMzQ7LAogICAgJiMzNDticGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyYjMzQ7LAogICAgJiMzNDticGZfbGlua19zaG93X2ZkaW5mbyYjMzQ7LAogICAgJiMzNDticGZfbGlua19nZXRfaW5mb19ieV9mZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gQlBGIGNncm91cCBzdG9yYWdlIHJlcGxhY2VtZW50LCBtcHJvZyBsaW5rIHR5cGUgY2hlY2tpbmcsIG5ldG5zIGxpbmsgdXBkYXRlIGxvY2tpbmcsIGFuZCBsaW5rIHByb2cgUkNVIHNhZmV0eS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBCUEYgc3lzY2FsbHMgYW5kIGxpbmsgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTg6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlOWNjYzM1ZWQwYjIwZGZjNTk1OWIzMDIxNDA5YTNkZTY0YzUxYTFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMTg6NDg6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDQzNTVjY2I3OGE5YzY3Li41NmQ1MzhmMDU1MjAwNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbkBAIC04MTMsMTAgJiM0Mzs4MTMsMTIgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDtcbiBcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuIFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLVx1MDAzZWxpbmsucHJvZztcbiBcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTtcbiBcdHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDtcbiBcdHN0cnVjdCBobGlzdF9oZWFkICpwcm9ncztcbiYjNDM7XHR1OCBvbGRfZmxhZ3M7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FMTE9XX09WRVJSSURFKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkpIHx8XG5AQCAtODgzLDcgJiM0Mzs4ODUsMTAgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRwbC1cdTAwM2Vwcm9nID0gcHJvZztcbiBcdHBsLVx1MDAzZWxpbmsgPSBsaW5rO1xuIFx0cGwtXHUwMDNlZmxhZ3MgPSBmbGFncztcbiYjNDM7XHRpZiAob2xkX3Byb2cpXG4mIzQzO1x0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihvbGRfc3RvcmFnZSwgcGwtXHUwMDNlc3RvcmFnZSk7XG4gXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC1cdTAwM2VzdG9yYWdlLCBzdG9yYWdlKTtcbiYjNDM7XHRvbGRfZmxhZ3MgPSBjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV07XG4gXHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBzYXZlZF9mbGFncztcbiBcbiBcdGlmICh0eXBlID09IEJQRl9MU01fQ0dST1VQKSB7XG5AQCAtOTE1LDEyICYjNDM7OTIwLDE0IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0aWYgKG9sZF9wcm9nKSB7XG4gXHRcdHBsLVx1MDAzZXByb2cgPSBvbGRfcHJvZztcbiBcdFx0cGwtXHUwMDNlbGluayA9IE5VTEw7XG4mIzQzO1x0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC1cdTAwM2VzdG9yYWdlLCBvbGRfc3RvcmFnZSk7XG4gXHR9XG4gXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpO1xuIFx0aWYgKCFvbGRfcHJvZykge1xuIFx0XHRobGlzdF9kZWwoXHUwMDI2cGwtXHUwMDNlbm9kZSk7XG4gXHRcdGtmcmVlKHBsKTtcbiBcdH1cbiYjNDM7XHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xMDMyLDExICYjNDM7MTAzOSwxNyBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRcdFx0XHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxuIFx0XHRcdFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZylcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiYjNDM7XHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlO1xuIFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuJiM0MztcdGJvb2wgc3RvcmFnZV9jaGFuZ2VkID0gZmFsc2U7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xuIFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHRhdHlwZSA9IGJwZl9jZ3JvdXBfYXR5cGVfZmluZChsaW5rLVx1MDAzZWxpbmsuYXR0YWNoX3R5cGUsIG5ld19wcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkKTtcbiBcdGlmIChhdHlwZSBcdTAwM2MgMClcbkBAIC0xMDU2LDEwICYjNDM7MTA2OSwzOSBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRpZiAoIWZvdW5kKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiYjNDM7XHRpZiAoYnBmX2Nncm91cF9zdG9yYWdlc19hbGxvYyhzdG9yYWdlLCBuZXdfc3RvcmFnZSwgbGluay1cdTAwM2VsaW5rLmF0dGFjaF90eXBlLFxuJiM0MztcdFx0XHRcdCAgICAgIG5ld19wcm9nLCBjZ3JwKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKSB7XG4mIzQzO1x0XHRpZiAoc3RvcmFnZVtzdHlwZV0gIT0gcGwtXHUwMDNlc3RvcmFnZVtzdHlwZV0pIHtcbiYjNDM7XHRcdFx0c3RvcmFnZV9jaGFuZ2VkID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdGNncnAtXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gJiM0Mzs9IDE7XG4gXHRvbGRfcHJvZyA9IHhjaGcoXHUwMDI2bGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKTtcbi1cdHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coY2dycCwgYXR5cGUsIHBsKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzdG9yYWdlX2NoYW5nZWQpIHtcbiYjNDM7XHRcdHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coY2dycCwgYXR5cGUsIHBsKTtcbiYjNDM7XHRcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC1cdTAwM2VzdG9yYWdlKTtcbiYjNDM7XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC1cdTAwM2VzdG9yYWdlLCBzdG9yYWdlKTtcbiYjNDM7XHRlcnIgPSB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzKGNncnAsIGF0eXBlKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHR4Y2hnKFx1MDAyNmxpbmstXHUwMDNlbGluay5wcm9nLCBvbGRfcHJvZyk7XG4mIzQzO1x0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC1cdTAwM2VzdG9yYWdlLCBvbGRfc3RvcmFnZSk7XG4mIzQzO1x0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpO1xuJiM0MztcdFx0Y2dycC1cdTAwM2VicGYucmV2aXNpb25zW2F0eXBlXSAtPSAxO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0YnBmX3Byb2dfcHV0KG9sZF9wcm9nKTtcbiYjNDM7XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2xpbmsobmV3X3N0b3JhZ2UsIGNncnAsIGxpbmstXHUwMDNlbGluay5hdHRhY2hfdHlwZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tcHJvZy5jIGIva2VybmVsL2JwZi9tcHJvZy5jXG5pbmRleCAxMzk0MTY4MDYyZTg1Ni4uMzdjZTkxZTBiY2QyMWQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21wcm9nLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbXByb2cuY1xuQEAgLTYsNyAmIzQzOzYsNyBAQFxuIFxuIHN0YXRpYyBpbnQgYnBmX21wcm9nX2xpbmsoc3RydWN0IGJwZl90dXBsZSAqdHVwbGUsXG4gXHRcdFx0ICB1MzIgaWRfb3JfZmQsIHUzMiBmbGFncyxcbi1cdFx0XHQgIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxuJiM0MztcdFx0XHQgIGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlKVxuIHtcbiBcdHN0cnVjdCBicGZfbGluayAqbGluayA9IEVSUl9QVFIoLUVJTlZBTCk7XG4gXHRib29sIGlkID0gZmxhZ3MgXHUwMDI2IEJQRl9GX0lEO1xuQEAgLTE3LDcgJiM0MzsxNyw3IEBAIHN0YXRpYyBpbnQgYnBmX21wcm9nX2xpbmsoc3RydWN0IGJwZl90dXBsZSAqdHVwbGUsXG4gXHRcdGxpbmsgPSBicGZfbGlua19nZXRfZnJvbV9mZChpZF9vcl9mZCk7XG4gXHRpZiAoSVNfRVJSKGxpbmspKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihsaW5rKTtcbi1cdGlmICh0eXBlIFx1MDAyNlx1MDAyNiBsaW5rLVx1MDAzZXByb2ctXHUwMDNldHlwZSAhPSB0eXBlKSB7XG4mIzQzO1x0aWYgKHR5cGUgXHUwMDI2XHUwMDI2IGxpbmstXHUwMDNldHlwZSAhPSB0eXBlKSB7XG4gXHRcdGJwZl9saW5rX3B1dChsaW5rKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG5AQCAtNTIsMjEgJiM0Mzs1MiwyMiBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19wcm9nKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLFxuIFxuIHN0YXRpYyBpbnQgYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLFxuIFx0XHRcdFx0ICAgIHUzMiBpZF9vcl9mZCwgdTMyIGZsYWdzLFxuLVx0XHRcdFx0ICAgIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxuJiM0MztcdFx0XHRcdCAgICBlbnVtIGJwZl9saW5rX3R5cGUgbHR5cGUsXG4mIzQzO1x0XHRcdFx0ICAgIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSlcbiB7XG4gXHRib29sIGxpbmsgPSBmbGFncyBcdTAwMjYgQlBGX0ZfTElOSztcbiBcdGJvb2wgaWQgPSBmbGFncyBcdTAwMjYgQlBGX0ZfSUQ7XG4gXG4gXHRtZW1zZXQodHVwbGUsIDAsIHNpemVvZigqdHVwbGUpKTtcbiBcdGlmIChsaW5rKVxuLVx0XHRyZXR1cm4gYnBmX21wcm9nX2xpbmsodHVwbGUsIGlkX29yX2ZkLCBmbGFncywgdHlwZSk7XG4mIzQzO1x0XHRyZXR1cm4gYnBmX21wcm9nX2xpbmsodHVwbGUsIGlkX29yX2ZkLCBmbGFncywgbHR5cGUpO1xuIFx0LyogSWYgbm8gcmVsZXZhbnQgZmxhZyBpcyBzZXQgYW5kIG5vIGlkX29yX2ZkIHdhcyBwYXNzZWQsIHRoZW5cbiBcdCAqIHR1cGxlIGxpbmsvcHJvZyBpcyBqdXN0IE5VTExlZC4gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIGJlZm9yZS9cbiBcdCAqIGFmdGVyIHNlbGVjdHMgZmlyc3QvbGFzdCBwb3NpdGlvbiB3aXRob3V0IHBhc3NpbmcgZmQuXG4gXHQgKi9cbiBcdGlmICghaWQgXHUwMDI2XHUwMDI2ICFpZF9vcl9mZClcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gYnBmX21wcm9nX3Byb2codHVwbGUsIGlkX29yX2ZkLCBmbGFncywgdHlwZSk7XG4mIzQzO1x0cmV0dXJuIGJwZl9tcHJvZ19wcm9nKHR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsIHB0eXBlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYnBmX21wcm9nX3R1cGxlX3B1dChzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSlcbkBAIC0yNDMsNiAmIzQzOzI0NCw3IEBAIGludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdHJldCA9IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZShcdTAwMjZydHVwbGUsIGlkX29yX2ZkLFxuIFx0XHRcdFx0ICAgICAgIGZsYWdzIFx1MDAyNiB+QlBGX0ZfUkVQTEFDRSxcbiYjNDM7XHRcdFx0XHQgICAgICAgbGluayA/IGxpbmstXHUwMDNldHlwZSA6IEJQRl9MSU5LX1RZUEVfVU5TUEVDLFxuIFx0XHRcdFx0ICAgICAgIHByb2dfbmV3LVx1MDAzZXR5cGUpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbkBAIC0zNDMsNiAmIzQzOzM0NSw3IEBAIGludCBicGZfbXByb2dfZGV0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxuIFx0aWYgKCFicGZfbXByb2dfdG90YWwoZW50cnkpKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcdHJldCA9IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZShcdTAwMjZydHVwbGUsIGlkX29yX2ZkLCBmbGFncyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbGluayA/IGxpbmstXHUwMDNldHlwZSA6IEJQRl9MSU5LX1RZUEVfVU5TUEVDLFxuIFx0XHRcdFx0ICAgICAgIHByb2cgPyBwcm9nLVx1MDAzZXR5cGUgOlxuIFx0XHRcdFx0ICAgICAgIEJQRl9QUk9HX1RZUEVfVU5TUEVDKTtcbiBcdGlmIChyZXQpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xuaW5kZXggMjVmMzBmOWVkYWVmZDMuLjlmYzYyZGIxNDQxYzYyIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXG5AQCAtMTcxLDEzICYjNDM7MTcxLDE3IEBAIHN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0aW50IGlkeCwgcmV0O1xuIFxuLVx0aWYgKG9sZF9wcm9nIFx1MDAyNlx1MDAyNiBvbGRfcHJvZyAhPSBsaW5rLVx1MDAzZXByb2cpXG4tXHRcdHJldHVybiAtRVBFUk07XG4tXHRpZiAobmV3X3Byb2ctXHUwMDNldHlwZSAhPSBsaW5rLVx1MDAzZXByb2ctXHUwMDNldHlwZSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4gXHRtdXRleF9sb2NrKFx1MDAyNm5ldG5zX2JwZl9tdXRleCk7XG4gXG4mIzQzO1x0aWYgKG9sZF9wcm9nIFx1MDAyNlx1MDAyNiBvbGRfcHJvZyAhPSBsaW5rLVx1MDAzZXByb2cpIHtcbiYjNDM7XHRcdHJldCA9IC1FUEVSTTtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKG5ld19wcm9nLVx1MDAzZXR5cGUgIT0gbGluay1cdTAwM2Vwcm9nLVx1MDAzZXR5cGUpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG5ldCA9IG5ldF9saW5rLVx1MDAzZW5ldDtcbiBcdGlmICghbmV0IHx8ICFjaGVja19uZXQobmV0KSkge1xuIFx0XHQvKiBMaW5rIGF1dG8tZGV0YWNoZWQgb3IgbmV0bnMgZHlpbmcgKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ZGIzMDZkMjNiNDc5Zi4uY2FkOTg2ODA3ZDUzMDMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC0zNDcxLDkgJiM0MzszNDcxLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpicGZfbGlua190eXBlX3N0cnNbXSA9IHtcbiBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuLVx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nID0gbGluay1cdTAwM2Vwcm9nO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbiBcdGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlID0gbGluay1cdTAwM2V0eXBlO1xuIFx0Y2hhciBwcm9nX3RhZ1tzaXplb2YocHJvZy1cdTAwM2V0YWcpICogMiAmIzQzOyAxXSA9IHsgfTtcbiYjNDM7XHR1MzIgcHJvZ19pZDtcbiBcbiBcdGlmICh0eXBlIFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9saW5rX3R5cGVfc3RycykgXHUwMDI2XHUwMDI2IGJwZl9saW5rX3R5cGVfc3Ryc1t0eXBlXSkge1xuIFx0XHRpZiAobGluay1cdTAwM2V0eXBlID09IEJQRl9MSU5LX1RZUEVfS1BST0JFX01VTFRJKVxuQEAgLTM0OTAsMTMgJiM0MzszNDkxLDIwIEBAIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXG4gXHR9XG4gXHRzZXFfcHJpbnRmKG0sIFwmIzM0O2xpbmtfaWQ6XFx0JXVcXG5cJiMzNDssIGxpbmstXHUwMDNlaWQpO1xuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRwcm9nID0gUkVBRF9PTkNFKGxpbmstXHUwMDNlcHJvZyk7XG4gXHRpZiAocHJvZykge1xuIFx0XHRiaW4yaGV4KHByb2dfdGFnLCBwcm9nLVx1MDAzZXRhZywgc2l6ZW9mKHByb2ctXHUwMDNldGFnKSk7XG4mIzQzO1x0XHRwcm9nX2lkID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlaWQ7XG4mIzQzO1x0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvZykge1xuIFx0XHRzZXFfcHJpbnRmKG0sXG4gXHRcdFx0ICAgXCYjMzQ7cHJvZ190YWc6XFx0JXNcXG5cJiMzNDtcbiBcdFx0XHQgICBcJiMzNDtwcm9nX2lkOlxcdCV1XFxuXCYjMzQ7LFxuIFx0XHRcdCAgIHByb2dfdGFnLFxuLVx0XHRcdCAgIHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkKTtcbiYjNDM7XHRcdFx0ICAgcHJvZ19pZCk7XG4gXHR9XG4gXHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNlc2hvd19mZGluZm8pXG4gXHRcdGxpbmstXHUwMDNlb3BzLVx1MDAzZXNob3dfZmRpbmZvKGxpbmssIG0pO1xuQEAgLTU1MzUsNiAmIzQzOzU1NDMsNyBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuIHtcbiBcdHN0cnVjdCBicGZfbGlua19pbmZvIF9fdXNlciAqdWluZm8gPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2VpbmZvLmluZm8pO1xuIFx0c3RydWN0IGJwZl9saW5rX2luZm8gaW5mbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4gXHR1MzIgaW5mb19sZW4gPSBhdHRyLVx1MDAzZWluZm8uaW5mb19sZW47XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTU1NDksOCAmIzQzOzU1NTgsMTIgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcbiBcdGluZm8udHlwZSA9IGxpbmstXHUwMDNldHlwZTtcbiBcdGluZm8uaWQgPSBsaW5rLVx1MDAzZWlkO1xuLVx0aWYgKGxpbmstXHUwMDNlcHJvZylcbi1cdFx0aW5mby5wcm9nX2lkID0gbGluay1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZDtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHByb2cgPSBSRUFEX09OQ0UobGluay1cdTAwM2Vwcm9nKTtcbiYjNDM7XHRpZiAocHJvZylcbiYjNDM7XHRcdGluZm8ucHJvZ19pZCA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZWZpbGxfbGlua19pbmZvKSB7XG4gXHRcdGVyciA9IGxpbmstXHUwMDNlb3BzLVx1MDAzZWZpbGxfbGlua19pbmZvKGxpbmssIFx1MDAyNmluZm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Nncm91cF9icGZfcmVwbGFjZSYjMzQ7LAogICAgJiMzNDticGZfbXByb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2JwZl9tcHJvZ19kZXRhY2gmIzM0OywKICAgICYjMzQ7YnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2hvd19mZGluZm8mIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIEJQRiBjZ3JvdXAgc3RvcmFnZSByZXBsYWNlbWVudCwgbXByb2cgbGluayB0eXBlIGNoZWNraW5nLCBuZXRucyBsaW5rIHVwZGF0ZSBsb2NraW5nLCBhbmQgbGluayBwcm9nIFJDVSBzYWZldHkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQlBGIHN5c2NhbGxzIGFuZCBsaW5rIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOWNjYzM1ZWQwYjIwZGZjNTk1OWIzMDIxNDA5YTNkZTY0YzUxYTFhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjEgMTg6NDg6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuYwppbmRleCA0MzU1Y2NiNzhhOWM2Ny4uNTZkNTM4ZjA1NTIwMDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuYwpAQCAtODEzLDEwICYjNDM7ODEzLDEyIEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCXN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cgPSBOVUxMOwogCXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwogCXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTsKJiM0MzsJc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwogCXN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLSZndDtsaW5rLnByb2c7CiAJZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlOwogCXN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7CiYjNDM7CXU4IG9sZF9mbGFnczsKIAlpbnQgZXJyOwogCiAJaWYgKCgoZmxhZ3MgJmFtcDsgQlBGX0ZfQUxMT1dfT1ZFUlJJREUpICZhbXA7JmFtcDsgKGZsYWdzICZhbXA7IEJQRl9GX0FMTE9XX01VTFRJKSkgfHwKQEAgLTg4Myw3ICYjNDM7ODg1LDEwIEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCXBsLSZndDtwcm9nID0gcHJvZzsKIAlwbC0mZ3Q7bGluayA9IGxpbms7CiAJcGwtJmd0O2ZsYWdzID0gZmxhZ3M7CiYjNDM7CWlmIChvbGRfcHJvZykKJiM0MzsJCWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC0mZ3Q7c3RvcmFnZSk7CiAJYnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtJmd0O3N0b3JhZ2UsIHN0b3JhZ2UpOwomIzQzOwlvbGRfZmxhZ3MgPSBjZ3JwLSZndDticGYuZmxhZ3NbYXR5cGVdOwogCWNncnAtJmd0O2JwZi5mbGFnc1thdHlwZV0gPSBzYXZlZF9mbGFnczsKIAogCWlmICh0eXBlID09IEJQRl9MU01fQ0dST1VQKSB7CkBAIC05MTUsMTIgJiM0Mzs5MjAsMTQgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJaWYgKG9sZF9wcm9nKSB7CiAJCXBsLSZndDtwcm9nID0gb2xkX3Byb2c7CiAJCXBsLSZndDtsaW5rID0gTlVMTDsKJiM0MzsJCWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLSZndDtzdG9yYWdlLCBvbGRfc3RvcmFnZSk7CiAJfQogCWJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7CiAJaWYgKCFvbGRfcHJvZykgewogCQlobGlzdF9kZWwoJmFtcDtwbC0mZ3Q7bm9kZSk7CiAJCWtmcmVlKHBsKTsKIAl9CiYjNDM7CWNncnAtJmd0O2JwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTAzMiwxMSAmIzQzOzEwMzksMTcgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCQkJCXN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssCiAJCQkJc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZykKIHsKJiM0MzsJc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwomIzQzOwlzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307CiYjNDM7CXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwomIzQzOwllbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlOwogCWVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTsKJiM0MzsJYm9vbCBzdG9yYWdlX2NoYW5nZWQgPSBmYWxzZTsKIAlzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nOwogCXN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7CiAJYm9vbCBmb3VuZCA9IGZhbHNlOwomIzQzOwlpbnQgZXJyOwogCiAJYXR5cGUgPSBicGZfY2dyb3VwX2F0eXBlX2ZpbmQobGluay0mZ3Q7bGluay5hdHRhY2hfdHlwZSwgbmV3X3Byb2ctJmd0O2F1eC0mZ3Q7YXR0YWNoX2J0Zl9pZCk7CiAJaWYgKGF0eXBlICZsdDsgMCkKQEAgLTEwNTYsMTAgJiM0MzsxMDY5LDM5IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCwKIAlpZiAoIWZvdW5kKQogCQlyZXR1cm4gLUVOT0VOVDsKIAomIzQzOwlpZiAoYnBmX2Nncm91cF9zdG9yYWdlc19hbGxvYyhzdG9yYWdlLCBuZXdfc3RvcmFnZSwgbGluay0mZ3Q7bGluay5hdHRhY2hfdHlwZSwKJiM0MzsJCQkJICAgICAgbmV3X3Byb2csIGNncnApKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHsKJiM0MzsJCWlmIChzdG9yYWdlW3N0eXBlXSAhPSBwbC0mZ3Q7c3RvcmFnZVtzdHlwZV0pIHsKJiM0MzsJCQlzdG9yYWdlX2NoYW5nZWQgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJY2dycC0mZ3Q7YnBmLnJldmlzaW9uc1thdHlwZV0gJiM0Mzs9IDE7CiAJb2xkX3Byb2cgPSB4Y2hnKCZhbXA7bGluay0mZ3Q7bGluay5wcm9nLCBuZXdfcHJvZyk7Ci0JcmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpOwomIzQzOwomIzQzOwlpZiAoIXN0b3JhZ2VfY2hhbmdlZCkgewomIzQzOwkJcmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpOwomIzQzOwkJYnBmX3Byb2dfcHV0KG9sZF9wcm9nKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC0mZ3Q7c3RvcmFnZSk7CiYjNDM7CWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLSZndDtzdG9yYWdlLCBzdG9yYWdlKTsKJiM0MzsJZXJyID0gdXBkYXRlX2VmZmVjdGl2ZV9wcm9ncyhjZ3JwLCBhdHlwZSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCXhjaGcoJmFtcDtsaW5rLSZndDtsaW5rLnByb2csIG9sZF9wcm9nKTsKJiM0MzsJCWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLSZndDtzdG9yYWdlLCBvbGRfc3RvcmFnZSk7CiYjNDM7CQlicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpOwomIzQzOwkJY2dycC0mZ3Q7YnBmLnJldmlzaW9uc1thdHlwZV0gLT0gMTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKIAlicGZfcHJvZ19wdXQob2xkX3Byb2cpOwomIzQzOwlicGZfY2dyb3VwX3N0b3JhZ2VzX2xpbmsobmV3X3N0b3JhZ2UsIGNncnAsIGxpbmstJmd0O2xpbmsuYXR0YWNoX3R5cGUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21wcm9nLmMgYi9rZXJuZWwvYnBmL21wcm9nLmMKaW5kZXggMTM5NDE2ODA2MmU4NTYuLjM3Y2U5MWUwYmNkMjFkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL21wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tcHJvZy5jCkBAIC02LDcgJiM0Mzs2LDcgQEAKIAogc3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSwKIAkJCSAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsCi0JCQkgIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKQomIzQzOwkJCSAgZW51bSBicGZfbGlua190eXBlIHR5cGUpCiB7CiAJc3RydWN0IGJwZl9saW5rICpsaW5rID0gRVJSX1BUUigtRUlOVkFMKTsKIAlib29sIGlkID0gZmxhZ3MgJmFtcDsgQlBGX0ZfSUQ7CkBAIC0xNyw3ICYjNDM7MTcsNyBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19saW5rKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLAogCQlsaW5rID0gYnBmX2xpbmtfZ2V0X2Zyb21fZmQoaWRfb3JfZmQpOwogCWlmIChJU19FUlIobGluaykpCiAJCXJldHVybiBQVFJfRVJSKGxpbmspOwotCWlmICh0eXBlICZhbXA7JmFtcDsgbGluay0mZ3Q7cHJvZy0mZ3Q7dHlwZSAhPSB0eXBlKSB7CiYjNDM7CWlmICh0eXBlICZhbXA7JmFtcDsgbGluay0mZ3Q7dHlwZSAhPSB0eXBlKSB7CiAJCWJwZl9saW5rX3B1dChsaW5rKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTIsMjEgJiM0Mzs1MiwyMiBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19wcm9nKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLAogCiBzdGF0aWMgaW50IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZShzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSwKIAkJCQkgICAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsCi0JCQkJICAgIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKQomIzQzOwkJCQkgICAgZW51bSBicGZfbGlua190eXBlIGx0eXBlLAomIzQzOwkJCQkgICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKQogewogCWJvb2wgbGluayA9IGZsYWdzICZhbXA7IEJQRl9GX0xJTks7CiAJYm9vbCBpZCA9IGZsYWdzICZhbXA7IEJQRl9GX0lEOwogCiAJbWVtc2V0KHR1cGxlLCAwLCBzaXplb2YoKnR1cGxlKSk7CiAJaWYgKGxpbmspCi0JCXJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCB0eXBlKTsKJiM0MzsJCXJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCBsdHlwZSk7CiAJLyogSWYgbm8gcmVsZXZhbnQgZmxhZyBpcyBzZXQgYW5kIG5vIGlkX29yX2ZkIHdhcyBwYXNzZWQsIHRoZW4KIAkgKiB0dXBsZSBsaW5rL3Byb2cgaXMganVzdCBOVUxMZWQuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBiZWZvcmUvCiAJICogYWZ0ZXIgc2VsZWN0cyBmaXJzdC9sYXN0IHBvc2l0aW9uIHdpdGhvdXQgcGFzc2luZyBmZC4KIAkgKi8KIAlpZiAoIWlkICZhbXA7JmFtcDsgIWlkX29yX2ZkKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gYnBmX21wcm9nX3Byb2codHVwbGUsIGlkX29yX2ZkLCBmbGFncywgdHlwZSk7CiYjNDM7CXJldHVybiBicGZfbXByb2dfcHJvZyh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCBwdHlwZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGJwZl9tcHJvZ190dXBsZV9wdXQoc3RydWN0IGJwZl90dXBsZSAqdHVwbGUpCkBAIC0yNDMsNiAmIzQzOzI0NCw3IEBAIGludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LAogCQlyZXR1cm4gLUVFWElTVDsKIAlyZXQgPSBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmUoJmFtcDtydHVwbGUsIGlkX29yX2ZkLAogCQkJCSAgICAgICBmbGFncyAmYW1wOyB+QlBGX0ZfUkVQTEFDRSwKJiM0MzsJCQkJICAgICAgIGxpbmsgPyBsaW5rLSZndDt0eXBlIDogQlBGX0xJTktfVFlQRV9VTlNQRUMsCiAJCQkJICAgICAgIHByb2dfbmV3LSZndDt0eXBlKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMzQzLDYgJiM0MzszNDUsNyBAQCBpbnQgYnBmX21wcm9nX2RldGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSwKIAlpZiAoIWJwZl9tcHJvZ190b3RhbChlbnRyeSkpCiAJCXJldHVybiAtRU5PRU5UOwogCXJldCA9IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZSgmYW1wO3J0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLAomIzQzOwkJCQkgICAgICAgbGluayA/IGxpbmstJmd0O3R5cGUgOiBCUEZfTElOS19UWVBFX1VOU1BFQywKIAkJCQkgICAgICAgcHJvZyA/IHByb2ctJmd0O3R5cGUgOgogCQkJCSAgICAgICBCUEZfUFJPR19UWVBFX1VOU1BFQyk7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jIGIva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMKaW5kZXggMjVmMzBmOWVkYWVmZDMuLjlmYzYyZGIxNDQxYzYyIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYwpAQCAtMTcxLDEzICYjNDM7MTcxLDE3IEBAIHN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLAogCXN0cnVjdCBuZXQgKm5ldDsKIAlpbnQgaWR4LCByZXQ7CiAKLQlpZiAob2xkX3Byb2cgJmFtcDsmYW1wOyBvbGRfcHJvZyAhPSBsaW5rLSZndDtwcm9nKQotCQlyZXR1cm4gLUVQRVJNOwotCWlmIChuZXdfcHJvZy0mZ3Q7dHlwZSAhPSBsaW5rLSZndDtwcm9nLSZndDt0eXBlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCW11dGV4X2xvY2soJmFtcDtuZXRuc19icGZfbXV0ZXgpOwogCiYjNDM7CWlmIChvbGRfcHJvZyAmYW1wOyZhbXA7IG9sZF9wcm9nICE9IGxpbmstJmd0O3Byb2cpIHsKJiM0MzsJCXJldCA9IC1FUEVSTTsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwlpZiAobmV3X3Byb2ctJmd0O3R5cGUgIT0gbGluay0mZ3Q7cHJvZy0mZ3Q7dHlwZSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwogCW5ldCA9IG5ldF9saW5rLSZndDtuZXQ7CiAJaWYgKCFuZXQgfHwgIWNoZWNrX25ldChuZXQpKSB7CiAJCS8qIExpbmsgYXV0by1kZXRhY2hlZCBvciBuZXRucyBkeWluZyAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCA2ZGIzMDZkMjNiNDc5Zi4uY2FkOTg2ODA3ZDUzMDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC0zNDcxLDkgJiM0MzszNDcxLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpicGZfbGlua190eXBlX3N0cnNbXSA9IHsKIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rID0gZmlscC0mZ3Q7cHJpdmF0ZV9kYXRhOwotCWNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGxpbmstJmd0O3Byb2c7CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZzsKIAllbnVtIGJwZl9saW5rX3R5cGUgdHlwZSA9IGxpbmstJmd0O3R5cGU7CiAJY2hhciBwcm9nX3RhZ1tzaXplb2YocHJvZy0mZ3Q7dGFnKSAqIDIgJiM0MzsgMV0gPSB7IH07CiYjNDM7CXUzMiBwcm9nX2lkOwogCiAJaWYgKHR5cGUgJmx0OyBBUlJBWV9TSVpFKGJwZl9saW5rX3R5cGVfc3RycykgJmFtcDsmYW1wOyBicGZfbGlua190eXBlX3N0cnNbdHlwZV0pIHsKIAkJaWYgKGxpbmstJmd0O3R5cGUgPT0gQlBGX0xJTktfVFlQRV9LUFJPQkVfTVVMVEkpCkBAIC0zNDkwLDEzICYjNDM7MzQ5MSwyMCBAQCBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKQogCX0KIAlzZXFfcHJpbnRmKG0sICYjMzQ7bGlua19pZDpcdCV1XG4mIzM0OywgbGluay0mZ3Q7aWQpOwogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJcHJvZyA9IFJFQURfT05DRShsaW5rLSZndDtwcm9nKTsKIAlpZiAocHJvZykgewogCQliaW4yaGV4KHByb2dfdGFnLCBwcm9nLSZndDt0YWcsIHNpemVvZihwcm9nLSZndDt0YWcpKTsKJiM0MzsJCXByb2dfaWQgPSBwcm9nLSZndDthdXgtJmd0O2lkOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAocHJvZykgewogCQlzZXFfcHJpbnRmKG0sCiAJCQkgICAmIzM0O3Byb2dfdGFnOlx0JXNcbiYjMzQ7CiAJCQkgICAmIzM0O3Byb2dfaWQ6XHQldVxuJiMzNDssCiAJCQkgICBwcm9nX3RhZywKLQkJCSAgIHByb2ctJmd0O2F1eC0mZ3Q7aWQpOwomIzQzOwkJCSAgIHByb2dfaWQpOwogCX0KIAlpZiAobGluay0mZ3Q7b3BzLSZndDtzaG93X2ZkaW5mbykKIAkJbGluay0mZ3Q7b3BzLSZndDtzaG93X2ZkaW5mbyhsaW5rLCBtKTsKQEAgLTU1MzUsNiAmIzQzOzU1NDMsNyBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLAogewogCXN0cnVjdCBicGZfbGlua19pbmZvIF9fdXNlciAqdWluZm8gPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci0mZ3Q7aW5mby5pbmZvKTsKIAlzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBpbmZvOwomIzQzOwljb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7CiAJdTMyIGluZm9fbGVuID0gYXR0ci0mZ3Q7aW5mby5pbmZvX2xlbjsKIAlpbnQgZXJyOwogCkBAIC01NTQ5LDggJiM0Mzs1NTU4LDEyIEBAIHN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsCiAKIAlpbmZvLnR5cGUgPSBsaW5rLSZndDt0eXBlOwogCWluZm8uaWQgPSBsaW5rLSZndDtpZDsKLQlpZiAobGluay0mZ3Q7cHJvZykKLQkJaW5mby5wcm9nX2lkID0gbGluay0mZ3Q7cHJvZy0mZ3Q7YXV4LSZndDtpZDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlwcm9nID0gUkVBRF9PTkNFKGxpbmstJmd0O3Byb2cpOwomIzQzOwlpZiAocHJvZykKJiM0MzsJCWluZm8ucHJvZ19pZCA9IHByb2ctJmd0O2F1eC0mZ3Q7aWQ7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKGxpbmstJmd0O29wcy0mZ3Q7ZmlsbF9saW5rX2luZm8pIHsKIAkJZXJyID0gbGluay0mZ3Q7b3BzLSZndDtmaWxsX2xpbmtfaW5mbyhsaW5rLCAmYW1wO2luZm8pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzE4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBTdWJzeXN0ZW0gUGF0Y2ggQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIGEgZmV3IGtleSBhcmVhcyB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW06IGNncm91cHMsIG1wcm9ncywgbmV0IG5hbWVzcGFjZXMsIGFuZCB0aGUgc3lzY2FsbCBpbnRlcmZhY2UuIExldCYjMzk7cyBicmVhayBkb3duIHRoZSBjaGFuZ2VzIGFuZCBzZWUgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLgoKRmlyc3QsIGxvb2tpbmcgYXQgYGNncm91cC5jYCwgdGhlcmUmIzM5O3MgYSBkZWZpbml0ZSBmb2N1cyBvbiBpbXByb3Zpbmcgc3RvcmFnZSByZXBsYWNlbWVudCB3aXRoaW4gY2dyb3VwIEJQRi4gIGBfX2Nncm91cF9icGZfYXR0YWNoYCBhbmQgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBub3cgaGF2ZSByb2J1c3QgbWVjaGFuaXNtcyBmb3IgaGFuZGxpbmcgc3RvcmFnZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGBvbGRfc3RvcmFnZWAgYW5kIGBvbGRfZmxhZ3NgIHRvIHByb3Blcmx5IHJldmVydCB0aGUgc3RhdGUgaW4gZXJyb3IgY2FzZXMsIGVuc3VyaW5nIHRoYXQgY2dyb3VwIEJQRiBkb2VzbiYjMzk7dCBnZXQgaW50byBhIGJyb2tlbiBzdGF0ZSBkdXJpbmcgdXBkYXRlcy4gIFRoZSBgc3RvcmFnZV9jaGFuZ2VkYCBjaGVjayBpbiBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBhIG1vcmUgZWZmaWNpZW50IHVwZGF0ZSBwcm9jZXNzIGFuZCBtb3JlIGNhcmVmdWwgaGFuZGxpbmcgb2YgaG93IG5ldyBzdG9yYWdlIGlzIGFsbG9jYXRlZCBhbmQgZWZmZWN0aXZlIHByb2dyYW1zIGFyZSB1cGRhdGVkLiBUaGUgcmVzdG9yZSBsb2dpYyBvbiB0aGUgZXJyb3IgcGF0aHMgaXMgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0IHRvIHNlZSB0byBlbnN1cmUgYXRvbWljaXR5LgoKVGhlbiwgbW92aW5nIG9uIHRvIGBtcHJvZy5jYCwgd2Ugc2VlIGEgc2hpZnQgaW4gaG93IGxpbmtzIGFyZSBtYW5hZ2VkLiBgYnBmX21wcm9nX2xpbmtgIG5vdyB1c2VzIGBlbnVtIGJwZl9saW5rX3R5cGVgIGFuZCBjaGVja3MgdGhlIGxpbmsgdHlwZSBkaXJlY3RseSwgYW5kIHRoZSBgYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlYCBmdW5jdGlvbiBjbGVhcmx5IHNlcGFyYXRlcyBsaW5rIHR5cGUgZnJvbSBwcm9ncmFtIHR5cGUsIHdoaWNoIGlzIGEgZ29vZCBhcmNoaXRlY3R1cmFsIGNob2ljZS4gYGJwZl9tcHJvZ19hdHRhY2hgIGFuZCBgYnBmX21wcm9nX2RldGFjaGAgbm93IHBhc3MgdGhpcyBsaW5rIHR5cGUgaW5mb3JtYXRpb24uIFRoaXMgaW5kaWNhdGVzIGEgcmVmYWN0b3JpbmcgdGhhdCBwcm92aWRlcyBtb3JlIGZsZXhpYmlsaXR5IGFuZCBiZXR0ZXIgdHlwZSBzYWZldHkuCgpJbiBgbmV0X25hbWVzcGFjZS5jYCwgc3BlY2lmaWNhbGx5IGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AsIHRoZXkmIzM5O3ZlIHRpZ2h0ZW5lZCB1cCB0aGUgbG9ja2luZyBhcm91bmQgbGluayB1cGRhdGVzLiBNb3ZpbmcgdGhvc2UgY2hlY2tzIGludG8gdGhlIG11dGV4IGJsb2NrIGlzIGEgY2xlYXIgaW5kaWNhdGlvbiBvZiBhIGZpeCBmb3IgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgY29uY3VycmVuY3kgaXNzdWUuIFRoaXMgaXMgYSBzb2xpZCBtb3ZlIGZvciB0aHJlYWQgc2FmZXR5IGluIG5ldCBuYW1lc3BhY2UgQlBGIG9wZXJhdGlvbnMuCgpGaW5hbGx5LCBpbiBgc3lzY2FsbC5jYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBoYXZlIGFkZGVkIFJDVSByZWFkIGxvY2tzLiBUaGV5JiMzOTtyZSB1c2luZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYFJFQURfT05DRShsaW5rLSZndDtwcm9nKWAgdG8gc2FmZWx5IGFjY2VzcyB0aGUgcHJvZ3JhbSBwb2ludGVyLiBUaGlzIGluZGljYXRlcyB0aGUgcmVzb2x1dGlvbiBvZiBwb3RlbnRpYWwgcmVhZC1hZnRlci1mcmVlIGJ1Z3Mgd2l0aGluIHRoZSBzeXNjYWxsIGhhbmRsaW5nIG9mIEJQRiBsaW5rcywgZW5zdXJpbmcgZGF0YSBjb25zaXN0ZW5jeSBhbmQgcHJldmVudGluZyBjcmFzaGVzLgoKT3ZlcmFsbCwgdGhlc2UgYXJlIHNvbGlkLCBmdW5jdGlvbmFsIGltcHJvdmVtZW50cy4gVGhlIGJ1ZyBmaXhlcyBhZGRyZXNzIGlzc3VlcyB3aXRoIGNncm91cCBzdG9yYWdlIHJlcGxhY2VtZW50LCBtcHJvZyBsaW5rIHR5cGUgdmFsaWRhdGlvbiwgbmV0bnMgbGluayB1cGRhdGUgbG9ja2luZywgYW5kIFJDVSBzYWZldHkgaW4gbGluayBwcm9ncmFtIGFjY2Vzcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc2V0IG9mIGZpeGVzLiBJJiMzOTttIHRoaW5raW5nIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBzb21lIHNlcmlvdXMgZnV6emluZy4KCk15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBsb29rcyBsaWtlOiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAsIGBfX2Nncm91cF9icGZfcmVwbGFjZWAsIGBicGZfbXByb2dfbGlua2AsIGBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmVgLCBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCwgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuCgpMZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQgdGhlIGtleSBmdW5jdGlvbnMgaW4gdGhvc2UgYXJlYXMgYXJlIHN0YXRpYy4gWWVwLCB0aGV5IGFsbCBhcmUsICpleGNlcHQqIGBicGZfbXByb2dfYXR0YWNoYCBhbmQgYGJwZl9tcHJvZ19kZXRhY2hgISAgSW50ZXJlc3RpbmcuLi4gYW5kIHRoZXkmIzM5O3JlIGV4cG9ydGVkL2dsb2JhbC4gT2theSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlncyB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoYXQgQlBGX1NZU0NBTEwsIENHUk9VUF9CUEYsIGFuZCBORVQgYXJlIGVuYWJsZWQuICBUaGVuLCBJJiMzOTtsbCBwcm9iYWJseSBydW4gYSBjb2RlIHNlYXJjaCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZy4gVGltZSB0byBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY2dyb3VwX2JwZl9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkxLS8qKlxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkzLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHRvIGRlc2NlbmRhbnRzXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXG5rZXJuZWwvYnBmL2Nncm91cC5jOjgwNjpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODA3LVx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9OTM0PXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0Mi1cdGNncm91cF9sb2NrKCk7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjk0MzpcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTQ0LVx0XHRcdFx0ICBpZF9vcl9mZCwgcmV2aXNpb24pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MjEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucy4KCioqRGVjb25zdHJ1Y3RpbmcgQlBGIEF0dGFjaG1lbnQgUG9pbnRzKioKClJpZ2h0LCBzbyBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgYW5kIGBfX2Nncm91cF9icGZfcmVwbGFjZWAgYXJlIHN0YXRpYywgYW5kIHRoYXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgc29tZSB0aG91Z2h0IHByb2Nlc3Nlcy4gVGhpcyBtZWFucyB0aGV5JiMzOTtyZSBsaWtlbHkgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LCBtYXliZSByZWxhdGVkIHRvIGluaXRpYWxpemF0aW9uIG9yIGEgdmVyeSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBjZ3JvdXAgQlBGIG1hY2hpbmVyeS4gVGhleSYjMzk7cmUgbm90IGludGVuZGVkIHRvIGJlIGRpcmVjdGx5IGNhbGxlZCBleHRlcm5hbGx5LiBOb3csIEkgbmVlZCB0byBzZWUgaG93IHRoZXkgaW50ZXJhY3QuIE15IG5leHQgb2J2aW91cyBzdGVwIGlzIHRvIGRpZyBpbnRvIGBicGZfbXByb2dfbGlua2AgYW5kIGBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmVgLiBUaG9zZSBuYW1lcyBpbW1lZGlhdGVseSBzdWdnZXN0IGR5bmFtaWMgbGlua2luZyBhbmQgc29tZSBraW5kIG9mIHJlbGF0aW9uIHRvIHByb2dyYW0gdHVwbGVzLCBvciBtdWx0aXBsZSBwcm9ncmFtIGF0dGFjaG1lbnRzLiBJIGFudGljaXBhdGUgdGhlc2UgbWlnaHQgZXhwb3NlIHRoZSAqZW50cnkgcG9pbnQqIGZvciBhIHByb2dyYW0gb3IgcHJvdmlkZSB0aGUgd2F5IGZvciB0aGUgaW50ZXJuYWwgYXR0YWNobWVudCBmdW5jdGlvbnMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgbGFyZ2VyIGZyYW1ld29yay4gSSYjMzk7bSBndWVzc2luZyBgYnBmX21wcm9nX2xpbmtgIGhhbmRsZXMgdGhlIGNyZWF0aW9uIG9mIHRoZXNlIGxpbmtzLCBhbmQgdGhlIHR1cGxlcyBhcmUgYWJvdXQgaG93IHRoZXNlIGFyZSByZWxhdGVkIGFuZCB0cmFja2VkLiBMZXQmIzM5O3Mgc2VlIGhvdyBJIGNhbiBnZXQgbW9yZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9tcHJvZ19saW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9tcHJvZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbXByb2cuYy02LVxua2VybmVsL2JwZi9tcHJvZy5jOjc6c3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcbmtlcm5lbC9icGYvbXByb2cuYy04LVx0XHRcdCAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsXG4tLVxua2VybmVsL2JwZi9tcHJvZy5jPTUzPXN0YXRpYyBpbnQgYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLFxuLS1cbmtlcm5lbC9icGYvbXByb2cuYy02Mi1cdGlmIChsaW5rKVxua2VybmVsL2JwZi9tcHJvZy5jOjYzOlx0XHRyZXR1cm4gYnBmX21wcm9nX2xpbmsodHVwbGUsIGlkX29yX2ZkLCBmbGFncywgbHR5cGUpO1xua2VybmVsL2JwZi9tcHJvZy5jLTY0LVx0LyogSWYgbm8gcmVsZXZhbnQgZmxhZyBpcyBzZXQgYW5kIG5vIGlkX29yX2ZkIHdhcyBwYXNzZWQsIHRoZW5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTUxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCBmdW5jdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IGhvdyB0aGlzIHBsYXlzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBuZXR3b3JrIG5hbWVzcGFjZXMgYW5kIGVCUEYgcHJvZ3JhbSB1cGRhdGVzIG9uIG5ldHdvcmsgbGlua3MuIE15IGluaXRpYWwgcXVlc3Rpb25zIHJldm9sdmUgYXJvdW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yOgoKKiAgICoqQ29uY3VycmVuY3k6KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBoYW5kbGUgY29uY3VycmVudCB1cGRhdGVzIHRvIG5ldHdvcmsgbGlua3Mgd2l0aGluIHRoZSBzYW1lIG5hbWVzcGFjZSBvciBhY3Jvc3MgZGlmZmVyZW50IG5hbWVzcGFjZXM/IFJhY2UgY29uZGl0aW9ucyBhcmUgYWx3YXlzIGEgY29uY2VybiBpbiB0aGlzIGFyZWEuCiogICAqKkF0b21pY2l0eToqKiBXaGF0IGd1YXJhbnRlZXMgYXJlIHByb3ZpZGVkIGZvciBhdG9taWMgdXBkYXRlcz8gQXJlIHdlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbGlrZSBhIHJlYWQtY29weS11cGRhdGUgKFJDVSkgbWVjaGFuaXNtLCBvciBzb21ldGhpbmcgbW9yZSBiYXNpYz8gVW5kZXJzdGFuZGluZyB0aGUgYXRvbWljaXR5IG9mIHRoZSB1cGRhdGUgaXMgY3JpdGljYWwgZm9yIGRhdGEgY29uc2lzdGVuY3kuCiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQmIzM5O3MgdGhlIGVycm9yIHJlcG9ydGluZyBsaWtlPyBEb2VzIGl0IHByb3ZpZGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gaWYgYSBCUEYgcHJvZ3JhbSB1cGRhdGUgZmFpbHMgb24gYSBzcGVjaWZpYyBsaW5rPyBBbmQsIGhvdyBpcyB0aGUgZmFpbHVyZSBwcm9wYWdhdGVkPyBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyByb2J1c3QgdGhlIHN5c3RlbSBpcy4KKiAgICoqU2VjdXJpdHk6KiogVGhpcyBpcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQsIGhvdyBkbyB3ZSBoYW5kbGUgcGVybWlzc2lvbnMsIHZhbGlkYXRpb24gYW5kIGNoZWNrcyB3aGVuIGFkZGluZyBvciB1cGRhdGluZyBwcm9ncmFtcyB2aWEgdGhpcyBmdW5jdGlvbiwgd2hhdCBhcmUgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucz8KCkkgd2FudCB0byBrbm93IHdoZXJlIHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIGxpZmVjeWNsZSBvZiBhIEJQRiBwcm9ncmFtIG9uIGEgbmV0d29yayBsaW5rLiBJcyBpdCB0aGUgZW50cnkgcG9pbnQgZm9yIHVwZGF0ZXM/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBhIGhpZ2hlci1sZXZlbCBmcmFtZXdvcmsgb3IgZGlyZWN0bHkgd2l0aCB0aGUgQlBGIHN1YnN5c3RlbT8gRmluYWxseSwgSSBuZWVkIHRvIHNlZSBpZiBpdCBzdXBwb3J0cyBkaWZmZXJlbnQgQlBGIHByb2dyYW0gdHlwZXMgdGhhdCBjb3VsZCBiZSBhdHRhY2hlZCB0byBhIGxpbmsuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGljaCBhcmUgc3VwcG9ydGVkLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIHByZXR0eSBzb3BoaXN0aWNhdGVkIGludGVybmFsIG9wZXJhdGlvbnMgaGFwcGVuaW5nIGhlcmUuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTE1NT1zdGF0aWMgdm9pZCBicGZfbmV0bnNfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0xNjItXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzoxNjM6c3RhdGljIGludCBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0xNjQtXHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxuLS1cbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTIzOT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfbmV0bnNfbGlua19vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjQyLVx0LmRldGFjaCA9IGJwZl9uZXRuc19saW5rX2RldGFjaCxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jOjI0MzpcdC51cGRhdGVfcHJvZyA9IGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nLFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjQ0LVx0LmZpbGxfbGlua19pbmZvID0gYnBmX25ldG5zX2xpbmtfZmlsbF9pbmZvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzLCBrZWVwaW5nIGluIG1pbmQgdGhlIGV4cGVydCB1c2VyOgoKKipBc3Nlc3NpbmcgQlBGIExpbmsgSW5mb3JtYXRpb24gUmV0cmlldmFsKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gaG93IHdlJiMzOTtyZSBoYW5kbGluZyBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGUgY29yZSBsZXZlbCB0aGVyZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBkZWJ1Z2dpbmcsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcsIGFuZCBwb3NzaWJseSBldmVuIGludHJvc3BlY3Rpb24gb2YgQlBGIHByb2dyYW1zIGNvbm5lY3RlZCB0aHJvdWdoIGxpbmtzLiBBcmUgd2UgZ2V0dGluZyBhbGwgdGhlIHBlcnRpbmVudCBkYXRhPyBIb3cgZWZmaWNpZW50IGFyZSB0aGVzZSBjYWxscz8gSXMgdGhlcmUgYW55IHJlZHVuZGFuY3k/IEl0JiMzOTtzIGVzc2VudGlhbCB0byBlbnN1cmUgd2UmIzM5O3JlIGdldHRpbmcgcm9idXN0IGFuZCBjb21wcmVoZW5zaXZlIGxpbmsgaW5mb3JtYXRpb24gZm9yIGRpYWdub3N0aWMgYW5kIGFkbWluaXN0cmF0aXZlIHB1cnBvc2VzLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZXh0cmFjdCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gdGhlIGZpbGUgZGVzY3JpcHRvci4gTGV0JiMzOTtzIHNlZSBob3cgdGhlc2UgYXJlIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbGlua19zaG93X2ZkaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTM0NjM9c3RhdGljIGNvbnN0IGNoYXIgKmJwZl9saW5rX3R5cGVfc3Ryc1tdID0ge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0NzAtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDcxOnN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDcyLXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9saW5rX2ZvcHMgPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTIyLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUyMzpcdC5zaG93X2ZkaW5mb1x0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MjQtI2VuZGlmXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzUzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBicGZfbGlua19mb3BzX3BvbGwgPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTMxLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUzMjpcdC5zaG93X2ZkaW5mb1x0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MzMtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMTgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVsdmluZyBpbnRvIGVCUEYgTGluayBJbmZvcm1hdGlvbiBSZXRyaWV2YWwqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG1lY2hhbmljcyBvZiByZXRyaWV2aW5nIGluZm9ybWF0aW9uIGFib3V0IGVCUEYgbGlua3MuIFdlJiMzOTtyZSBvYnZpb3VzbHkgaW4gdGhlIHdlZWRzIGhlcmUsIGNvbnNpZGVyaW5nIHRoZSBrZXJuZWwtbGV2ZWwgc3BlY2lmaWNzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgZnVuY3Rpb24uIFRoZSBpbXBvcnRhbmNlIG9mIHRoaXMgZnVuY3Rpb24gaXMgY2xlYXJseSBhYm91dCBpbnRyb3NwZWN0aW9uIOKAkyBnYXRoZXJpbmcgY3JpdGljYWwgZGF0YSBvbiB0aGUgbGl2ZSBlQlBGIGxpbmtzIHRoYXQgYXJlIGN1cnJlbnRseSBhY3RpdmUuIEkmIzM5O20gaW1hZ2luaW5nIGhvdyBpdCYjMzk7cyB1c2VkOyBwcm9iYWJseSBhIGZpbGUgZGVzY3JpcHRvciByZXByZXNlbnRpbmcgYW4gZUJQRiBsaW5rIGlzIHByb3ZpZGVkIGFzIGlucHV0LCBhbmQgdGhlIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIHJldHVybiB0aGUgbGluayYjMzk7cyBtZXRhZGF0YS4gSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkIGludGVybmFsbHkuIFdoYXQgZXhhY3RseSBpcyB0aGUgcmV0dXJuZWQgaW5mb3JtYXRpb24/IElzIGl0IGEgc3RydWN0dXJlIGRlZmluZWQgaW4gdGhlIGtlcm5lbD8gV2hhdCBmaWVsZHMgYXJlIGF2YWlsYWJsZT8gSSBhbHNvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBkZWJ1Z2dpbmcgYW5kIG1vbml0b3JpbmcgZUJQRiBwcm9ncmFtcy4gV2l0aCB0aGUgaW5mb3JtYXRpb24gdGhpcyBmdW5jdGlvbiBwcm92aWRlcywgd2hhdCBxdWVzdGlvbnMgY2FuIGJlIGFuc3dlcmVkPyBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGJlY29tZXMgYWJzb2x1dGVseSBpbmRpc3BlbnNhYmxlIGFuZCB3aGF0IHRoZSBiZXN0IHByYWN0aWNlcyBmb3IgaGFuZGxpbmcgZXJyb3JzIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFyZS4gSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIGhvdyB0aGlzIHJlbGF0ZXMgdG8gb3RoZXIgZUJQRiBpbnRyb3NwZWN0aW9uIHRvb2xzIGFuZCBmdW5jdGlvbnMgd2l0aGluIHRoZSBicm9hZGVyIGVjb3N5c3RlbSwgYW5kIHRoZSByZWxhdGlvbnNoaXAgdG8gb3RoZXIgbGlicmFyaWVzIGxpa2UgbGliYnBmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbGlua19nZXRfaW5mb19ieV9mZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTU1MjM9c3RhdGljIGludCBicGZfYnRmX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU1MzgtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NTM5OnN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTQwLVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTU5OT1zdGF0aWMgaW50IGJwZl9vYmpfZ2V0X2luZm9fYnlfZmQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTYxNy1cdGVsc2UgaWYgKGZkX2ZpbGUoZiktXHUwMDNlZl9vcCA9PSBcdTAwMjZicGZfbGlua19mb3BzIHx8IGZkX2ZpbGUoZiktXHUwMDNlZl9vcCA9PSBcdTAwMjZicGZfbGlua19mb3BzX3BvbGwpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NjE4Olx0XHRyZXR1cm4gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmRfZmlsZShmKSwgZmRfZmlsZShmKS1cdTAwM2Vwcml2YXRlX2RhdGEsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NjE5LVx0XHRcdFx0XHQgICAgICBhdHRyLCB1YXR0cik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlY2VudCBCUEYgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBzaWduaWZpY2FudCBCUEYgdXBkYXRlcywgc3BlY2lmaWNhbGx5IGFyb3VuZCBzeXNjYWxscywgY2dyb3VwIGF0dGFjaC9yZXBsYWNlIG9wZXJhdGlvbnMsIG5ldG5zIGF0dGFjaG1lbnQsIGFuZCBtcHJvZyBhdHRhY2htZW50L2RldGFjaG1lbnQuIFRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gcmlnaHQgbm93IGFyZSBgY2dyb3VwX2JwZl9hdHRhY2hgLCBgY2dyb3VwX2JwZl9yZXBsYWNlYCwgYGJwZl9tcHJvZ19hdHRhY2hgLCBgYnBmX21wcm9nX2RldGFjaGAsIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AsIGBicGZfbGlua19zaG93X2ZkaW5mb2AsIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgLgoKTGV0JiMzOTtzIGJlZ2luIGJ5IHplcm9pbmcgaW4gb24gYGNncm91cF9icGZfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfcmVwbGFjZWAuIFRoZXkgc2VlbSBpbXBvcnRhbnQuIEFoLCBnb29kLCB0aGV5JiMzOTtyZSBjYWxsZWQgZnJvbSBgYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGJwZl9saW5rX2NyZWF0ZWAgc3lzY2FsbHMg4oCTIHRoYXQgYWxpZ25zIHdpdGggbXkgZXhwZWN0YXRpb25zLiBXYWl0IGEgc2Vjb25kLCBsb29raW5nIGNsb3NlciBhdCBgY2dyb3VwX2JwZl9yZXBsYWNlYCBJIHNlZSBpdCYjMzk7cyBhbHNvIGNhbGxlZCBieSBgY2dyb3VwX2JwZl9saW5rX3VwZGF0ZV9wcm9nYC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQgY2FsbCBwYXRoIGEgYml0IGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX2JwZl9yZXBsYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTEwMDE9c3RhdGljIHZvaWQgcmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAyOC0vKipcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTAyOTogKiBfX2Nncm91cF9icGZfcmVwbGFjZSgpIC0gUmVwbGFjZSBsaW5rJiMzOTtzIHByb2dyYW0gYW5kIHByb3BhZ2F0ZSB0aGUgY2hhbmdlXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMzAtICogICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGRlc2NlbmRhbnRzXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM3LSAqL1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDM4OnN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzOS1cdFx0XHRcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTA3LVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTA4OnN0YXRpYyBpbnQgY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwOS1cdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEyNS1cdH1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTEyNjpcdHJldCA9IF9fY2dyb3VwX2JwZl9yZXBsYWNlKGNnX2xpbmstXHUwMDNlY2dyb3VwLCBjZ19saW5rLCBuZXdfcHJvZyk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTExMjctb3V0X3VubG9jazpcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE1NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX2Nncm91cF9saW5rX2xvcHMgPSB7XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTQ0LVx0LmRldGFjaCA9IGJwZl9jZ3JvdXBfbGlua19kZXRhY2gsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE1NDU6XHQudXBkYXRlX3Byb2cgPSBjZ3JvdXBfYnBmX3JlcGxhY2UsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NDYtXHQuc2hvd19mZGluZm8gPSBicGZfY2dyb3VwX2xpbmtfc2hvd19mZGluZm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODUzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgQlBGIExpbmsgVXBkYXRlIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBtYXBwaW5nIG91dCBob3cgQlBGIHByb2dyYW0gdXBkYXRlcyB3b3JrIGFjcm9zcyBkaWZmZXJlbnQgY29udGV4dHMuIEl0IHNlZW1zIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgdXBkYXRpbmcgQlBGIHByb2dyYW1zIGxpbmtlZCB0byBjZ3JvdXBzLiBGb3IgbmV0d29yayBuYW1lc3BhY2VzLCBpdCYjMzk7cyBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLiBBbmQsIGxldCYjMzk7cyBub3QgZm9yZ2V0IGFib3V0IG1wcm9nczsgdGhvc2UgYXJlIGhhbmRsZWQgYnkgYGJwZl9tcHJvZ19hdHRhY2hgIGFuZCBgYnBmX21wcm9nX2RldGFjaGAgZm9yIGF0dGFjaG1lbnQgYW5kIGRldGFjaG1lbnQsIHJlc3BlY3RpdmVseS4gVGhlbiwgZm9yIHRoZSBsaW5rIGZkaW5mbyBhbmQgdXNpbmcgQlBGX09CSl9HRVRfSU5GT19CWV9GRCwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgYXJlIGFsbCBvZiB0aGUgcmVsZXZhbnQgc3lzdGVtIGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgdGhlIEJQRiBzeXNjYWxscywgY2dyb3VwIEJQRiwgYW5kIG5ldHdvcmsgZmVhdHVyZXMgYXJlIGludm9sdmVkLgoKR2l2ZW4gdGhhdCBJJiMzOTttIGNoZWNraW5nIGBicGZfbXByb2dfYXR0YWNoYCwgSSBzaG91bGQgZ28gbG9vayBhdCB0aGUgTWFrZWZpbGUgd2l0aGluIGBrZXJuZWwvYnBmL21wcm9nLmNgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBpcyB0aWVkIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHJvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xNT1vYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQxMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgQlBGIExhbmRzY2FwZTogQSBDb21waWxhdGlvbiBRdWVyeSoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYG1wcm9nLm9gIG9iamVjdCBmaWxlLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgdGhhdCBpdCB3YXMgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVkLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHdoZXJlIHRoaXMgY29kZSBtaWdodCBiZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBrZXJuZWwuIEdpdmVuIHRoYXQgdGhpcyBpcyBCUEYtcmVsYXRlZCwgbXkgbmV4dCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gcG90ZW50aWFsIGludGVncmF0aW9uIHBvaW50cy4KCkkmIzM5O20gbWVudGFsbHkgcmVhY2hpbmcgZm9yIGBuZXRfbmFtZXNwYWNlLmNgIG5vdy4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSB0byBpbnZlc3RpZ2F0ZSBnaXZlbiBCUEYmIzM5O3MgZnJlcXVlbnQgdXNlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjayBhbmQgaXRzIGNsb3NlIHJlbGF0aW9uc2hpcCB0byBuYW1lc3BhY2VzLiBJIGFudGljaXBhdGUgdGhhdCB0aGlzIGZpbGUgbGlrZWx5IGhvbGRzIHNvbWUgb2YgdGhlIGNyaXRpY2FsIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggQlBGIHByb2dyYW1zIHJ1bm5pbmcgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgbmV0d29yayBuYW1lc3BhY2UsIGVzcGVjaWFsbHkgaWYgdGhlIEJQRiBzeXNjYWxsIGlzIGluIHBsYXkuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBCUEYgcHJvZ3JhbXMgdGhhdCB0aGlzIGBtcHJvZy5vYCBmaWxlIHJlcHJlc2VudHMgYXJlIGNvbm5lY3RlZCB0byBhbmQgaW50ZXJhY3Qgd2l0aCB0aGF0IGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldF9uYW1lc3BhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gb2ZmbG9hZC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG5ldF9uYW1lc3BhY2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZS0yOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSB0Y3gub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc5NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkV4YW1pbmluZyBCUEYgYW5kIE5hbWVzcGFjZXMqKgoKQWxyaWdodCwgc28gSSBzZWUgdGhhdCBgbmV0X25hbWVzcGFjZS5vYCBpcyBiZWluZyBjb21waWxlZCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBzdWdnZXN0cyBhIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbm5lY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHBsYXlzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gYGNncm91cC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY2dyb3VwIGludGVyYWN0aW9ucywgYW5kIHRoZSBzeXN0ZW0gY2FsbHMgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlbSwgYXJlIGhhbmRsZWQuIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgc29tZSBpbnRlcnJlbGF0aW9uIHRvIGJlIHVuY292ZXJlZCB0aGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTMzPWlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM1LWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19DR1JPVVBfQlBGKSAmIzQzOz0gY2dyb3VwLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMzctaWZlcSAoJChDT05GSUdfSU5FVCkseSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMzcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIE1vZHVsZSBhbmQgU3lzY2FsbCBBbmFseXNpcyoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCBgY2dyb3VwLm9gIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGggYENPTkZJR19DR1JPVVBfQlBGYCBlbmFibGVkLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCB0ZWxscyBtZSB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IGxldmVyYWdpbmcgQlBGIHdpdGhpbiB0aGUgY2dyb3VwIGltcGxlbWVudGF0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0JiMzOTtzIGJlaW5nIGludGVncmF0ZWQsIHdoZXJlIHRoZSBob29rcyBhcmUuIE15IG5leHQgc3RvcCBpcyBkZWZpbml0ZWx5IGBzeXNjYWxsLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBzeXNjYWxscyBpbnRlcmFjdCB3aXRoIHRoaXMgQlBGIGZ1bmN0aW9uYWxpdHksIGhvdyB0aGV5JiMzOTtyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIHdoYXQgdGhlIG92ZXJhbGwgaW50ZXJhY3Rpb24gbW9kZWwgbG9va3MgbGlrZS4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIHBhdGggZm9yIHRob3NlIHN5c2NhbGxzIHRvIGdldCBhIGdvb2QgZ3JpcCBvbiB0aGUgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXNjYWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTI5CgkJCQkJCQlvdXRwdXQ6IDE4OQoJCQkJCQkJdGhvdWdodHM6IDQwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgU3lzY2FsbCBhbmQgTGluayBPcGVyYXRpb25zOiBBIFF1aWNrIEFzc2Vzc21lbnQgZm9yIEZ1enppbmcqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgc3lzY2FsbC5vYCBpcyBjbGVhcmx5IGNvbXBpbGVkIHdpdGggYENPTkZJR19CUEZfU1lTQ0FMTGAg4oCTIHRoYXQmIzM5O3Mgb3VyIHN0YXJ0aW5nIHBvaW50LiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIEJQRiBzeXNjYWxsIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBuZWVkaW5nIGNsb3NlIGF0dGVudGlvbiBmb3IgZnV6emluZy4gSSYjMzk7bSBzZWVpbmcgdGhhdCB3ZSBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgY29uZmlnczogYEJQRl9TWVNDQUxMYCwgYENHUk9VUF9CUEZgLCBhbmQgYE5FVGAgKGZvciBgbmV0bnNgKS4KCk5vdywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6IGBjZ3JvdXBfYnBmX2F0dGFjaGAsIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLCBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCwgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuIFRoZXNlIGxvb2sgbGlrZSB0aGUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBjb3JlIGNoYW5nZXMuCgpMZXQgbWUgcXVpY2tseSB2ZXJpZnkgYGNncm91cF9icGZfYXR0YWNoYOKApiBZZXAsIHRoYXQmIzM5O3Mgd2hhdCBJIHRob3VnaHQ7IGl0IGNvcnJlY3RseSBjYWxscyBgX19jZ3JvdXBfYnBmX2F0dGFjaGAsIHNvIHRoYXQmIzM5O3MgZ29vZC4gT2gsIGFuZCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIGNhbGxlZCBieSBgY2dyb3VwX2JwZl9yZXBsYWNlYC4gT2theSwgc28gYGNncm91cF9icGZfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfcmVwbGFjZWAgYXJlIHZhbGlkIHRhcmdldCBlbnRyeXBvaW50cy4KCk1vdmluZyBvbiB0byBgYnBmX21wcm9nX2F0dGFjaGAgYW5kIGBicGZfbXByb2dfZGV0YWNoYOKApiBZZXMsIHRob3NlIGFyZSBleHBvcnRlZCBmdW5jdGlvbnMuIENoZWNrLiBOZXh0IHVwIGlzIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AuIFl1cCwgdGhhdCYjMzk7cyB0aGUgYHVwZGF0ZV9wcm9nYCBvcCBmb3IgYG5ldG5zYCBsaW5rcy4gQW5kIGZpbmFsbHksIGBicGZfbGlua19zaG93X2ZkaW5mb2AgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAg4oCTIHllcywgdGhleSBhcmUgdGhlIGBmZGluZm9gIGFuZCBgaW5mb2Agb3BzIGZvciBsaW5rcy4KClNvLCB0aGUgcmF0aW9uYWxlIGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCUEYgY2dyb3VwIHN0b3JhZ2UgcmVwbGFjZW1lbnQsIGhvdyBgbXByb2dgIGxpbmsgdHlwZXMgYXJlIGNoZWNrZWQsIGBuZXRuc2AgbGluayB1cGRhdGUgbG9ja2luZywgYW5kIGxpbmsgcHJvZ3JhbSBSQ1Ugc2FmZXR5LiBUaGVzZSBhcmUgYWxsIGNoYW5nZXMgdGhhdCBhZmZlY3QgY29yZSBCUEYgc3lzY2FsbHMgYW5kIGhvdyBsaW5rcyBhcmUgb3BlcmF0ZWQgb24sIGFuZCBzaW5jZSBhbGwgdGhlc2UgY29tcG9uZW50cyBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UsIHRoZXkmIzM5O3JlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFdlIGNhbiBwcm9jZWVkIHdpdGggc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Nncm91cF9icGZfcmVwbGFjZSYjMzQ7LAogICAgJiMzNDticGZfbXByb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2JwZl9tcHJvZ19kZXRhY2gmIzM0OywKICAgICYjMzQ7YnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2hvd19mZGluZm8mIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIEJQRiBjZ3JvdXAgc3RvcmFnZSByZXBsYWNlbWVudCwgbXByb2cgbGluayB0eXBlIGNoZWNraW5nLCBuZXRucyBsaW5rIHVwZGF0ZSBsb2NraW5nLCBhbmQgbGluayBwcm9nIFJDVSBzYWZldHkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQlBGIHN5c2NhbGxzIGFuZCBsaW5rIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Nncm91cF9icGZfcmVwbGFjZSYjMzQ7LAogICAgJiMzNDticGZfbXByb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2JwZl9tcHJvZ19kZXRhY2gmIzM0OywKICAgICYjMzQ7YnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2hvd19mZGluZm8mIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIEJQRiBjZ3JvdXAgc3RvcmFnZSByZXBsYWNlbWVudCwgbXByb2cgbGluayB0eXBlIGNoZWNraW5nLCBuZXRucyBsaW5rIHVwZGF0ZSBsb2NraW5nLCBhbmQgbGluayBwcm9nIFJDVSBzYWZldHkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQlBGIHN5c2NhbGxzIGFuZCBsaW5rIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6NDg6MjkuNDQzOTE4NjU3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyMjIyMjM1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNncm91cF9icGZfYXR0YWNoXCIsXG4gICAgXCJjZ3JvdXBfYnBmX3JlcGxhY2VcIixcbiAgICBcImJwZl9tcHJvZ19hdHRhY2hcIixcbiAgICBcImJwZl9tcHJvZ19kZXRhY2hcIixcbiAgICBcImJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nXCIsXG4gICAgXCJicGZfbGlua19zaG93X2ZkaW5mb1wiLFxuICAgIFwiYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gQlBGIGNncm91cCBzdG9yYWdlIHJlcGxhY2VtZW50LCBtcHJvZyBsaW5rIHR5cGUgY2hlY2tpbmcsIG5ldG5zIGxpbmsgdXBkYXRlIGxvY2tpbmcsIGFuZCBsaW5rIHByb2cgUkNVIHNhZmV0eS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBCUEYgc3lzY2FsbHMgYW5kIGxpbmsgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjQ4OjI5LjQ0MzkyNDcyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNzc4OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTljY2MzNWVkMGIyMGRmYzU5NTliMzAyMTQwOWEzZGU2NGM1MWExYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyMSAxODo0ODoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xcbmluZGV4IDQzNTVjY2I3OGE5YzY3Li41NmQ1MzhmMDU1MjAwNCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXFxuKysrIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xcbkBAIC04MTMsMTAgKzgxMywxMiBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEw7XFxuIFxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbiBcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuK1xcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXFx1MDAzZWxpbmsucHJvZztcXG4gXFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7XFxuIFxcdHN0cnVjdCBobGlzdF9oZWFkICpwcm9ncztcXG4rXFx0dTggb2xkX2ZsYWdzO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKCgoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BTExPV19PVkVSUklERSkgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpKSB8fFxcbkBAIC04ODMsNyArODg1LDEwIEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbiBcXHRwbC1cXHUwMDNlcHJvZyA9IHByb2c7XFxuIFxcdHBsLVxcdTAwM2VsaW5rID0gbGluaztcXG4gXFx0cGwtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuK1xcdGlmIChvbGRfcHJvZylcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVxcdTAwM2VzdG9yYWdlKTtcXG4gXFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xcbitcXHRvbGRfZmxhZ3MgPSBjZ3JwLVxcdTAwM2VicGYuZmxhZ3NbYXR5cGVdO1xcbiBcXHRjZ3JwLVxcdTAwM2VicGYuZmxhZ3NbYXR5cGVdID0gc2F2ZWRfZmxhZ3M7XFxuIFxcbiBcXHRpZiAodHlwZSA9PSBCUEZfTFNNX0NHUk9VUCkge1xcbkBAIC05MTUsMTIgKzkyMCwxNCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gXFx0aWYgKG9sZF9wcm9nKSB7XFxuIFxcdFxcdHBsLVxcdTAwM2Vwcm9nID0gb2xkX3Byb2c7XFxuIFxcdFxcdHBsLVxcdTAwM2VsaW5rID0gTlVMTDtcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcXG4gXFx0fVxcbiBcXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpO1xcbiBcXHRpZiAoIW9sZF9wcm9nKSB7XFxuIFxcdFxcdGhsaXN0X2RlbChcXHUwMDI2cGwtXFx1MDAzZW5vZGUpO1xcbiBcXHRcXHRrZnJlZShwbCk7XFxuIFxcdH1cXG4rXFx0Y2dycC1cXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IG9sZF9mbGFncztcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMTAzMiwxMSArMTAzOSwxNyBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cpXFxuIHtcXG4rXFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbitcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuK1xcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbitcXHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlO1xcbiBcXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XFxuK1xcdGJvb2wgc3RvcmFnZV9jaGFuZ2VkID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XFxuIFxcdHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDtcXG4gXFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xcbiBcXHRib29sIGZvdW5kID0gZmFsc2U7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHRhdHlwZSA9IGJwZl9jZ3JvdXBfYXR5cGVfZmluZChsaW5rLVxcdTAwM2VsaW5rLmF0dGFjaF90eXBlLCBuZXdfcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhdHRhY2hfYnRmX2lkKTtcXG4gXFx0aWYgKGF0eXBlIFxcdTAwM2MgMClcXG5AQCAtMTA1NiwxMCArMTA2OSwzOSBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIFxcdGlmICghZm91bmQpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG4rXFx0aWYgKGJwZl9jZ3JvdXBfc3RvcmFnZXNfYWxsb2Moc3RvcmFnZSwgbmV3X3N0b3JhZ2UsIGxpbmstXFx1MDAzZWxpbmsuYXR0YWNoX3R5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIG5ld19wcm9nLCBjZ3JwKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKSB7XFxuK1xcdFxcdGlmIChzdG9yYWdlW3N0eXBlXSAhPSBwbC1cXHUwMDNlc3RvcmFnZVtzdHlwZV0pIHtcXG4rXFx0XFx0XFx0c3RvcmFnZV9jaGFuZ2VkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0Y2dycC1cXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gKz0gMTtcXG4gXFx0b2xkX3Byb2cgPSB4Y2hnKFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKTtcXG4tXFx0cmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpO1xcbitcXG4rXFx0aWYgKCFzdG9yYWdlX2NoYW5nZWQpIHtcXG4rXFx0XFx0cmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpO1xcbitcXHRcXHRicGZfcHJvZ19wdXQob2xkX3Byb2cpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVxcdTAwM2VzdG9yYWdlKTtcXG4rXFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xcbitcXHRlcnIgPSB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzKGNncnAsIGF0eXBlKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHR4Y2hnKFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLnByb2csIG9sZF9wcm9nKTtcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcXG4rXFx0XFx0Y2dycC1cXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gLT0gMTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4gXFx0YnBmX3Byb2dfcHV0KG9sZF9wcm9nKTtcXG4rXFx0YnBmX2Nncm91cF9zdG9yYWdlc19saW5rKG5ld19zdG9yYWdlLCBjZ3JwLCBsaW5rLVxcdTAwM2VsaW5rLmF0dGFjaF90eXBlKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbXByb2cuYyBiL2tlcm5lbC9icGYvbXByb2cuY1xcbmluZGV4IDEzOTQxNjgwNjJlODU2Li4zN2NlOTFlMGJjZDIxZCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL21wcm9nLmNcXG4rKysgYi9rZXJuZWwvYnBmL21wcm9nLmNcXG5AQCAtNiw3ICs2LDcgQEBcXG4gXFxuIHN0YXRpYyBpbnQgYnBmX21wcm9nX2xpbmsoc3RydWN0IGJwZl90dXBsZSAqdHVwbGUsXFxuIFxcdFxcdFxcdCAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsXFxuLVxcdFxcdFxcdCAgZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXFxuK1xcdFxcdFxcdCAgZW51bSBicGZfbGlua190eXBlIHR5cGUpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9saW5rICpsaW5rID0gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFx0Ym9vbCBpZCA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfSUQ7XFxuQEAgLTE3LDcgKzE3LDcgQEAgc3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcXG4gXFx0XFx0bGluayA9IGJwZl9saW5rX2dldF9mcm9tX2ZkKGlkX29yX2ZkKTtcXG4gXFx0aWYgKElTX0VSUihsaW5rKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIobGluayk7XFxuLVxcdGlmICh0eXBlIFxcdTAwMjZcXHUwMDI2IGxpbmstXFx1MDAzZXByb2ctXFx1MDAzZXR5cGUgIT0gdHlwZSkge1xcbitcXHRpZiAodHlwZSBcXHUwMDI2XFx1MDAyNiBsaW5rLVxcdTAwM2V0eXBlICE9IHR5cGUpIHtcXG4gXFx0XFx0YnBmX2xpbmtfcHV0KGxpbmspO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbkBAIC01MiwyMSArNTIsMjIgQEAgc3RhdGljIGludCBicGZfbXByb2dfcHJvZyhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcXG4gXFxuIHN0YXRpYyBpbnQgYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLFxcbiBcXHRcXHRcXHRcXHQgICAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdCAgICBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSlcXG4rXFx0XFx0XFx0XFx0ICAgIGVudW0gYnBmX2xpbmtfdHlwZSBsdHlwZSxcXG4rXFx0XFx0XFx0XFx0ICAgIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSlcXG4ge1xcbiBcXHRib29sIGxpbmsgPSBmbGFncyBcXHUwMDI2IEJQRl9GX0xJTks7XFxuIFxcdGJvb2wgaWQgPSBmbGFncyBcXHUwMDI2IEJQRl9GX0lEO1xcbiBcXG4gXFx0bWVtc2V0KHR1cGxlLCAwLCBzaXplb2YoKnR1cGxlKSk7XFxuIFxcdGlmIChsaW5rKVxcbi1cXHRcXHRyZXR1cm4gYnBmX21wcm9nX2xpbmsodHVwbGUsIGlkX29yX2ZkLCBmbGFncywgdHlwZSk7XFxuK1xcdFxcdHJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCBsdHlwZSk7XFxuIFxcdC8qIElmIG5vIHJlbGV2YW50IGZsYWcgaXMgc2V0IGFuZCBubyBpZF9vcl9mZCB3YXMgcGFzc2VkLCB0aGVuXFxuIFxcdCAqIHR1cGxlIGxpbmsvcHJvZyBpcyBqdXN0IE5VTExlZC4gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIGJlZm9yZS9cXG4gXFx0ICogYWZ0ZXIgc2VsZWN0cyBmaXJzdC9sYXN0IHBvc2l0aW9uIHdpdGhvdXQgcGFzc2luZyBmZC5cXG4gXFx0ICovXFxuIFxcdGlmICghaWQgXFx1MDAyNlxcdTAwMjYgIWlkX29yX2ZkKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIGJwZl9tcHJvZ19wcm9nKHR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsIHR5cGUpO1xcbitcXHRyZXR1cm4gYnBmX21wcm9nX3Byb2codHVwbGUsIGlkX29yX2ZkLCBmbGFncywgcHR5cGUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBicGZfbXByb2dfdHVwbGVfcHV0KHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlKVxcbkBAIC0yNDMsNiArMjQ0LDcgQEAgaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXHRyZXQgPSBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmUoXFx1MDAyNnJ0dXBsZSwgaWRfb3JfZmQsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBmbGFncyBcXHUwMDI2IH5CUEZfRl9SRVBMQUNFLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbGluayA/IGxpbmstXFx1MDAzZXR5cGUgOiBCUEZfTElOS19UWVBFX1VOU1BFQyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHByb2dfbmV3LVxcdTAwM2V0eXBlKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG5AQCAtMzQzLDYgKzM0NSw3IEBAIGludCBicGZfbXByb2dfZGV0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxcbiBcXHRpZiAoIWJwZl9tcHJvZ190b3RhbChlbnRyeSkpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXHRyZXQgPSBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmUoXFx1MDAyNnJ0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbGluayA/IGxpbmstXFx1MDAzZXR5cGUgOiBCUEZfTElOS19UWVBFX1VOU1BFQyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHByb2cgPyBwcm9nLVxcdTAwM2V0eXBlIDpcXG4gXFx0XFx0XFx0XFx0ICAgICAgIEJQRl9QUk9HX1RZUEVfVU5TUEVDKTtcXG4gXFx0aWYgKHJldClcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xcbmluZGV4IDI1ZjMwZjllZGFlZmQzLi45ZmM2MmRiMTQ0MWM2MiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xcbisrKyBiL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXFxuQEAgLTE3MSwxMyArMTcxLDE3IEBAIHN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuIFxcdGludCBpZHgsIHJldDtcXG4gXFxuLVxcdGlmIChvbGRfcHJvZyBcXHUwMDI2XFx1MDAyNiBvbGRfcHJvZyAhPSBsaW5rLVxcdTAwM2Vwcm9nKVxcbi1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi1cXHRpZiAobmV3X3Byb2ctXFx1MDAzZXR5cGUgIT0gbGluay1cXHUwMDNlcHJvZy1cXHUwMDNldHlwZSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZuZXRuc19icGZfbXV0ZXgpO1xcbiBcXG4rXFx0aWYgKG9sZF9wcm9nIFxcdTAwMjZcXHUwMDI2IG9sZF9wcm9nICE9IGxpbmstXFx1MDAzZXByb2cpIHtcXG4rXFx0XFx0cmV0ID0gLUVQRVJNO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFx0aWYgKG5ld19wcm9nLVxcdTAwM2V0eXBlICE9IGxpbmstXFx1MDAzZXByb2ctXFx1MDAzZXR5cGUpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHR9XFxuK1xcbiBcXHRuZXQgPSBuZXRfbGluay1cXHUwMDNlbmV0O1xcbiBcXHRpZiAoIW5ldCB8fCAhY2hlY2tfbmV0KG5ldCkpIHtcXG4gXFx0XFx0LyogTGluayBhdXRvLWRldGFjaGVkIG9yIG5ldG5zIGR5aW5nICovXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcXG5pbmRleCA2ZGIzMDZkMjNiNDc5Zi4uY2FkOTg2ODA3ZDUzMDMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbkBAIC0zNDcxLDkgKzM0NzEsMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmJwZl9saW5rX3R5cGVfc3Ryc1tdID0ge1xcbiBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4tXFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nID0gbGluay1cXHUwMDNlcHJvZztcXG4rXFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbiBcXHRlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSA9IGxpbmstXFx1MDAzZXR5cGU7XFxuIFxcdGNoYXIgcHJvZ190YWdbc2l6ZW9mKHByb2ctXFx1MDAzZXRhZykgKiAyICsgMV0gPSB7IH07XFxuK1xcdHUzMiBwcm9nX2lkO1xcbiBcXG4gXFx0aWYgKHR5cGUgXFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9saW5rX3R5cGVfc3RycykgXFx1MDAyNlxcdTAwMjYgYnBmX2xpbmtfdHlwZV9zdHJzW3R5cGVdKSB7XFxuIFxcdFxcdGlmIChsaW5rLVxcdTAwM2V0eXBlID09IEJQRl9MSU5LX1RZUEVfS1BST0JFX01VTFRJKVxcbkBAIC0zNDkwLDEzICszNDkxLDIwIEBAIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXFxuIFxcdH1cXG4gXFx0c2VxX3ByaW50ZihtLCBcXFwibGlua19pZDpcXFxcdCV1XFxcXG5cXFwiLCBsaW5rLVxcdTAwM2VpZCk7XFxuIFxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHByb2cgPSBSRUFEX09OQ0UobGluay1cXHUwMDNlcHJvZyk7XFxuIFxcdGlmIChwcm9nKSB7XFxuIFxcdFxcdGJpbjJoZXgocHJvZ190YWcsIHByb2ctXFx1MDAzZXRhZywgc2l6ZW9mKHByb2ctXFx1MDAzZXRhZykpO1xcbitcXHRcXHRwcm9nX2lkID0gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VpZDtcXG4rXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdGlmIChwcm9nKSB7XFxuIFxcdFxcdHNlcV9wcmludGYobSxcXG4gXFx0XFx0XFx0ICAgXFxcInByb2dfdGFnOlxcXFx0JXNcXFxcblxcXCJcXG4gXFx0XFx0XFx0ICAgXFxcInByb2dfaWQ6XFxcXHQldVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgcHJvZ190YWcsXFxuLVxcdFxcdFxcdCAgIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaWQpO1xcbitcXHRcXHRcXHQgICBwcm9nX2lkKTtcXG4gXFx0fVxcbiBcXHRpZiAobGluay1cXHUwMDNlb3BzLVxcdTAwM2VzaG93X2ZkaW5mbylcXG4gXFx0XFx0bGluay1cXHUwMDNlb3BzLVxcdTAwM2VzaG93X2ZkaW5mbyhsaW5rLCBtKTtcXG5AQCAtNTUzNSw2ICs1NTQzLDcgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBfX3VzZXIgKnVpbmZvID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWluZm8uaW5mbyk7XFxuIFxcdHN0cnVjdCBicGZfbGlua19pbmZvIGluZm87XFxuK1xcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG4gXFx0dTMyIGluZm9fbGVuID0gYXR0ci1cXHUwMDNlaW5mby5pbmZvX2xlbjtcXG4gXFx0aW50IGVycjtcXG4gXFxuQEAgLTU1NDksOCArNTU1OCwxMiBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXG4gXFx0aW5mby50eXBlID0gbGluay1cXHUwMDNldHlwZTtcXG4gXFx0aW5mby5pZCA9IGxpbmstXFx1MDAzZWlkO1xcbi1cXHRpZiAobGluay1cXHUwMDNlcHJvZylcXG4tXFx0XFx0aW5mby5wcm9nX2lkID0gbGluay1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VpZDtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0cHJvZyA9IFJFQURfT05DRShsaW5rLVxcdTAwM2Vwcm9nKTtcXG4rXFx0aWYgKHByb2cpXFxuK1xcdFxcdGluZm8ucHJvZ19pZCA9IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaWQ7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0aWYgKGxpbmstXFx1MDAzZW9wcy1cXHUwMDNlZmlsbF9saW5rX2luZm8pIHtcXG4gXFx0XFx0ZXJyID0gbGluay1cXHUwMDNlb3BzLVxcdTAwM2VmaWxsX2xpbmtfaW5mbyhsaW5rLCBcXHUwMDI2aW5mbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjQ4OjI5Ljg4ODM2MDQzNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc3Nzc3NzczMzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZ3JvdXBfYnBmX2F0dGFjaFwiLFxuICAgIFwiY2dyb3VwX2JwZl9yZXBsYWNlXCIsXG4gICAgXCJicGZfbXByb2dfYXR0YWNoXCIsXG4gICAgXCJicGZfbXByb2dfZGV0YWNoXCIsXG4gICAgXCJicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ1wiLFxuICAgIFwiYnBmX2xpbmtfc2hvd19mZGluZm9cIixcbiAgICBcImJwZl9saW5rX2dldF9pbmZvX2J5X2ZkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIEJQRiBjZ3JvdXAgc3RvcmFnZSByZXBsYWNlbWVudCwgbXByb2cgbGluayB0eXBlIGNoZWNraW5nLCBuZXRucyBsaW5rIHVwZGF0ZSBsb2NraW5nLCBhbmQgbGluayBwcm9nIFJDVSBzYWZldHkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQlBGIHN5c2NhbGxzIGFuZCBsaW5rIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU5Y2NjMzVlZDBiMjBkZmM1OTU5YjMwMjE0MDlhM2RlNjRjNTFhMWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAxODo0ODoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5pbmRleCA0MzU1Y2NiNzhhOWM2Ny4uNTZkNTM4ZjA1NTIwMDQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtODEzLDEwICs4MTMsMTIgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDtcbiBcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuIFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuK1x0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuIFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXHUwMDNlbGluay5wcm9nO1xuIFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xuK1x0dTggb2xkX2ZsYWdzO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICgoKGZsYWdzIFx1MDAyNiBCUEZfRl9BTExPV19PVkVSUklERSkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpKSB8fFxuQEAgLTg4Myw3ICs4ODUsMTAgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRwbC1cdTAwM2Vwcm9nID0gcHJvZztcbiBcdHBsLVx1MDAzZWxpbmsgPSBsaW5rO1xuIFx0cGwtXHUwMDNlZmxhZ3MgPSBmbGFncztcbitcdGlmIChvbGRfcHJvZylcbitcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVx1MDAzZXN0b3JhZ2UpO1xuIFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgc3RvcmFnZSk7XG4rXHRvbGRfZmxhZ3MgPSBjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV07XG4gXHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBzYXZlZF9mbGFncztcbiBcbiBcdGlmICh0eXBlID09IEJQRl9MU01fQ0dST1VQKSB7XG5AQCAtOTE1LDEyICs5MjAsMTQgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRpZiAob2xkX3Byb2cpIHtcbiBcdFx0cGwtXHUwMDNlcHJvZyA9IG9sZF9wcm9nO1xuIFx0XHRwbC1cdTAwM2VsaW5rID0gTlVMTDtcbitcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgb2xkX3N0b3JhZ2UpO1xuIFx0fVxuIFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcbiBcdGlmICghb2xkX3Byb2cpIHtcbiBcdFx0aGxpc3RfZGVsKFx1MDAyNnBsLVx1MDAzZW5vZGUpO1xuIFx0XHRrZnJlZShwbCk7XG4gXHR9XG4rXHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xMDMyLDExICsxMDM5LDE3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbiBcdFx0XHRcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXG4gXHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nKVxuIHtcbitcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbitcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbitcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuK1x0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcbiBcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTtcbitcdGJvb2wgc3RvcmFnZV9jaGFuZ2VkID0gZmFsc2U7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xuIFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuK1x0aW50IGVycjtcbiBcbiBcdGF0eXBlID0gYnBmX2Nncm91cF9hdHlwZV9maW5kKGxpbmstXHUwMDNlbGluay5hdHRhY2hfdHlwZSwgbmV3X3Byb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGZfaWQpO1xuIFx0aWYgKGF0eXBlIFx1MDAzYyAwKVxuQEAgLTEwNTYsMTAgKzEwNjksMzkgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0aWYgKCFmb3VuZClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4rXHRpZiAoYnBmX2Nncm91cF9zdG9yYWdlc19hbGxvYyhzdG9yYWdlLCBuZXdfc3RvcmFnZSwgbGluay1cdTAwM2VsaW5rLmF0dGFjaF90eXBlLFxuK1x0XHRcdFx0ICAgICAgbmV3X3Byb2csIGNncnApKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHtcbitcdFx0aWYgKHN0b3JhZ2Vbc3R5cGVdICE9IHBsLVx1MDAzZXN0b3JhZ2Vbc3R5cGVdKSB7XG4rXHRcdFx0c3RvcmFnZV9jaGFuZ2VkID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1xuIFx0Y2dycC1cdTAwM2VicGYucmV2aXNpb25zW2F0eXBlXSArPSAxO1xuIFx0b2xkX3Byb2cgPSB4Y2hnKFx1MDAyNmxpbmstXHUwMDNlbGluay5wcm9nLCBuZXdfcHJvZyk7XG4tXHRyZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKGNncnAsIGF0eXBlLCBwbCk7XG4rXG4rXHRpZiAoIXN0b3JhZ2VfY2hhbmdlZCkge1xuK1x0XHRyZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKGNncnAsIGF0eXBlLCBwbCk7XG4rXHRcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVx1MDAzZXN0b3JhZ2UpO1xuK1x0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgc3RvcmFnZSk7XG4rXHRlcnIgPSB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzKGNncnAsIGF0eXBlKTtcbitcdGlmIChlcnIpIHtcbitcdFx0eGNoZyhcdTAwMjZsaW5rLVx1MDAzZWxpbmsucHJvZywgb2xkX3Byb2cpO1xuK1x0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC1cdTAwM2VzdG9yYWdlLCBvbGRfc3RvcmFnZSk7XG4rXHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XG4rXHRcdGNncnAtXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gLT0gMTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbiBcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XG4rXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2xpbmsobmV3X3N0b3JhZ2UsIGNncnAsIGxpbmstXHUwMDNlbGluay5hdHRhY2hfdHlwZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tcHJvZy5jIGIva2VybmVsL2JwZi9tcHJvZy5jXG5pbmRleCAxMzk0MTY4MDYyZTg1Ni4uMzdjZTkxZTBiY2QyMWQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21wcm9nLmNcbisrKyBiL2tlcm5lbC9icGYvbXByb2cuY1xuQEAgLTYsNyArNiw3IEBAXG4gXG4gc3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcbiBcdFx0XHQgIHUzMiBpZF9vcl9mZCwgdTMyIGZsYWdzLFxuLVx0XHRcdCAgZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXG4rXHRcdFx0ICBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSlcbiB7XG4gXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0Ym9vbCBpZCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9JRDtcbkBAIC0xNyw3ICsxNyw3IEBAIHN0YXRpYyBpbnQgYnBmX21wcm9nX2xpbmsoc3RydWN0IGJwZl90dXBsZSAqdHVwbGUsXG4gXHRcdGxpbmsgPSBicGZfbGlua19nZXRfZnJvbV9mZChpZF9vcl9mZCk7XG4gXHRpZiAoSVNfRVJSKGxpbmspKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihsaW5rKTtcbi1cdGlmICh0eXBlIFx1MDAyNlx1MDAyNiBsaW5rLVx1MDAzZXByb2ctXHUwMDNldHlwZSAhPSB0eXBlKSB7XG4rXHRpZiAodHlwZSBcdTAwMjZcdTAwMjYgbGluay1cdTAwM2V0eXBlICE9IHR5cGUpIHtcbiBcdFx0YnBmX2xpbmtfcHV0KGxpbmspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbkBAIC01MiwyMSArNTIsMjIgQEAgc3RhdGljIGludCBicGZfbXByb2dfcHJvZyhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcbiBcbiBzdGF0aWMgaW50IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZShzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcbiBcdFx0XHRcdCAgICB1MzIgaWRfb3JfZmQsIHUzMiBmbGFncyxcbi1cdFx0XHRcdCAgICBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSlcbitcdFx0XHRcdCAgICBlbnVtIGJwZl9saW5rX3R5cGUgbHR5cGUsXG4rXHRcdFx0XHQgICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKVxuIHtcbiBcdGJvb2wgbGluayA9IGZsYWdzIFx1MDAyNiBCUEZfRl9MSU5LO1xuIFx0Ym9vbCBpZCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9JRDtcbiBcbiBcdG1lbXNldCh0dXBsZSwgMCwgc2l6ZW9mKCp0dXBsZSkpO1xuIFx0aWYgKGxpbmspXG4tXHRcdHJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCB0eXBlKTtcbitcdFx0cmV0dXJuIGJwZl9tcHJvZ19saW5rKHR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsIGx0eXBlKTtcbiBcdC8qIElmIG5vIHJlbGV2YW50IGZsYWcgaXMgc2V0IGFuZCBubyBpZF9vcl9mZCB3YXMgcGFzc2VkLCB0aGVuXG4gXHQgKiB0dXBsZSBsaW5rL3Byb2cgaXMganVzdCBOVUxMZWQuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBiZWZvcmUvXG4gXHQgKiBhZnRlciBzZWxlY3RzIGZpcnN0L2xhc3QgcG9zaXRpb24gd2l0aG91dCBwYXNzaW5nIGZkLlxuIFx0ICovXG4gXHRpZiAoIWlkIFx1MDAyNlx1MDAyNiAhaWRfb3JfZmQpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGJwZl9tcHJvZ19wcm9nKHR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsIHR5cGUpO1xuK1x0cmV0dXJuIGJwZl9tcHJvZ19wcm9nKHR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsIHB0eXBlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYnBmX21wcm9nX3R1cGxlX3B1dChzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSlcbkBAIC0yNDMsNiArMjQ0LDcgQEAgaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFx0cmV0ID0gYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlKFx1MDAyNnJ0dXBsZSwgaWRfb3JfZmQsXG4gXHRcdFx0XHQgICAgICAgZmxhZ3MgXHUwMDI2IH5CUEZfRl9SRVBMQUNFLFxuK1x0XHRcdFx0ICAgICAgIGxpbmsgPyBsaW5rLVx1MDAzZXR5cGUgOiBCUEZfTElOS19UWVBFX1VOU1BFQyxcbiBcdFx0XHRcdCAgICAgICBwcm9nX25ldy1cdTAwM2V0eXBlKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5AQCAtMzQzLDYgKzM0NSw3IEBAIGludCBicGZfbXByb2dfZGV0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxuIFx0aWYgKCFicGZfbXByb2dfdG90YWwoZW50cnkpKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcdHJldCA9IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZShcdTAwMjZydHVwbGUsIGlkX29yX2ZkLCBmbGFncyxcbitcdFx0XHRcdCAgICAgICBsaW5rID8gbGluay1cdTAwM2V0eXBlIDogQlBGX0xJTktfVFlQRV9VTlNQRUMsXG4gXHRcdFx0XHQgICAgICAgcHJvZyA/IHByb2ctXHUwMDNldHlwZSA6XG4gXHRcdFx0XHQgICAgICAgQlBGX1BST0dfVFlQRV9VTlNQRUMpO1xuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYyBiL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXG5pbmRleCAyNWYzMGY5ZWRhZWZkMy4uOWZjNjJkYjE0NDFjNjIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xuKysrIGIva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcbkBAIC0xNzEsMTMgKzE3MSwxNyBAQCBzdGF0aWMgaW50IGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nKHN0cnVjdCBicGZfbGluayAqbGluayxcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbiBcdGludCBpZHgsIHJldDtcbiBcbi1cdGlmIChvbGRfcHJvZyBcdTAwMjZcdTAwMjYgb2xkX3Byb2cgIT0gbGluay1cdTAwM2Vwcm9nKVxuLVx0XHRyZXR1cm4gLUVQRVJNO1xuLVx0aWYgKG5ld19wcm9nLVx1MDAzZXR5cGUgIT0gbGluay1cdTAwM2Vwcm9nLVx1MDAzZXR5cGUpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZuZXRuc19icGZfbXV0ZXgpO1xuIFxuK1x0aWYgKG9sZF9wcm9nIFx1MDAyNlx1MDAyNiBvbGRfcHJvZyAhPSBsaW5rLVx1MDAzZXByb2cpIHtcbitcdFx0cmV0ID0gLUVQRVJNO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXHRpZiAobmV3X3Byb2ctXHUwMDNldHlwZSAhPSBsaW5rLVx1MDAzZXByb2ctXHUwMDNldHlwZSkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXG4gXHRuZXQgPSBuZXRfbGluay1cdTAwM2VuZXQ7XG4gXHRpZiAoIW5ldCB8fCAhY2hlY2tfbmV0KG5ldCkpIHtcbiBcdFx0LyogTGluayBhdXRvLWRldGFjaGVkIG9yIG5ldG5zIGR5aW5nICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggNmRiMzA2ZDIzYjQ3OWYuLmNhZDk4NjgwN2Q1MzAzIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtMzQ3MSw5ICszNDcxLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpicGZfbGlua190eXBlX3N0cnNbXSA9IHtcbiBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuLVx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nID0gbGluay1cdTAwM2Vwcm9nO1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nO1xuIFx0ZW51bSBicGZfbGlua190eXBlIHR5cGUgPSBsaW5rLVx1MDAzZXR5cGU7XG4gXHRjaGFyIHByb2dfdGFnW3NpemVvZihwcm9nLVx1MDAzZXRhZykgKiAyICsgMV0gPSB7IH07XG4rXHR1MzIgcHJvZ19pZDtcbiBcbiBcdGlmICh0eXBlIFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9saW5rX3R5cGVfc3RycykgXHUwMDI2XHUwMDI2IGJwZl9saW5rX3R5cGVfc3Ryc1t0eXBlXSkge1xuIFx0XHRpZiAobGluay1cdTAwM2V0eXBlID09IEJQRl9MSU5LX1RZUEVfS1BST0JFX01VTFRJKVxuQEAgLTM0OTAsMTMgKzM0OTEsMjAgQEAgc3RhdGljIHZvaWQgYnBmX2xpbmtfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiBcdH1cbiBcdHNlcV9wcmludGYobSwgXCJsaW5rX2lkOlxcdCV1XFxuXCIsIGxpbmstXHUwMDNlaWQpO1xuIFxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0cHJvZyA9IFJFQURfT05DRShsaW5rLVx1MDAzZXByb2cpO1xuIFx0aWYgKHByb2cpIHtcbiBcdFx0YmluMmhleChwcm9nX3RhZywgcHJvZy1cdTAwM2V0YWcsIHNpemVvZihwcm9nLVx1MDAzZXRhZykpO1xuK1x0XHRwcm9nX2lkID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlaWQ7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdGlmIChwcm9nKSB7XG4gXHRcdHNlcV9wcmludGYobSxcbiBcdFx0XHQgICBcInByb2dfdGFnOlxcdCVzXFxuXCJcbiBcdFx0XHQgICBcInByb2dfaWQ6XFx0JXVcXG5cIixcbiBcdFx0XHQgICBwcm9nX3RhZyxcbi1cdFx0XHQgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZCk7XG4rXHRcdFx0ICAgcHJvZ19pZCk7XG4gXHR9XG4gXHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNlc2hvd19mZGluZm8pXG4gXHRcdGxpbmstXHUwMDNlb3BzLVx1MDAzZXNob3dfZmRpbmZvKGxpbmssIG0pO1xuQEAgLTU1MzUsNiArNTU0Myw3IEBAIHN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4ge1xuIFx0c3RydWN0IGJwZl9saW5rX2luZm8gX191c2VyICp1aW5mbyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWluZm8uaW5mbyk7XG4gXHRzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBpbmZvO1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nO1xuIFx0dTMyIGluZm9fbGVuID0gYXR0ci1cdTAwM2VpbmZvLmluZm9fbGVuO1xuIFx0aW50IGVycjtcbiBcbkBAIC01NTQ5LDggKzU1NTgsMTIgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcbiBcdGluZm8udHlwZSA9IGxpbmstXHUwMDNldHlwZTtcbiBcdGluZm8uaWQgPSBsaW5rLVx1MDAzZWlkO1xuLVx0aWYgKGxpbmstXHUwMDNlcHJvZylcbi1cdFx0aW5mby5wcm9nX2lkID0gbGluay1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZDtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHByb2cgPSBSRUFEX09OQ0UobGluay1cdTAwM2Vwcm9nKTtcbitcdGlmIChwcm9nKVxuK1x0XHRpbmZvLnByb2dfaWQgPSBwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZDtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZWZpbGxfbGlua19pbmZvKSB7XG4gXHRcdGVyciA9IGxpbmstXHUwMDNlb3BzLVx1MDAzZWZpbGxfbGlua19pbmZvKGxpbmssIFx1MDAyNmluZm8pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6NDg6MjkuODg4MzYyNzc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE0MDM2MDcwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIFN1YnN5c3RlbSBQYXRjaCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbTogY2dyb3VwcywgbXByb2dzLCBuZXQgbmFtZXNwYWNlcywgYW5kIHRoZSBzeXNjYWxsIGludGVyZmFjZS4gTGV0J3MgYnJlYWsgZG93biB0aGUgY2hhbmdlcyBhbmQgc2VlIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoLlxuXG5GaXJzdCwgbG9va2luZyBhdCBgY2dyb3VwLmNgLCB0aGVyZSdzIGEgZGVmaW5pdGUgZm9jdXMgb24gaW1wcm92aW5nIHN0b3JhZ2UgcmVwbGFjZW1lbnQgd2l0aGluIGNncm91cCBCUEYuICBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgYW5kIGBfX2Nncm91cF9icGZfcmVwbGFjZWAgbm93IGhhdmUgcm9idXN0IG1lY2hhbmlzbXMgZm9yIGhhbmRsaW5nIHN0b3JhZ2UgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGludHJvZHVjaW5nIGBvbGRfc3RvcmFnZWAgYW5kIGBvbGRfZmxhZ3NgIHRvIHByb3Blcmx5IHJldmVydCB0aGUgc3RhdGUgaW4gZXJyb3IgY2FzZXMsIGVuc3VyaW5nIHRoYXQgY2dyb3VwIEJQRiBkb2Vzbid0IGdldCBpbnRvIGEgYnJva2VuIHN0YXRlIGR1cmluZyB1cGRhdGVzLiAgVGhlIGBzdG9yYWdlX2NoYW5nZWRgIGNoZWNrIGluIGBfX2Nncm91cF9icGZfcmVwbGFjZWAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGEgbW9yZSBlZmZpY2llbnQgdXBkYXRlIHByb2Nlc3MgYW5kIG1vcmUgY2FyZWZ1bCBoYW5kbGluZyBvZiBob3cgbmV3IHN0b3JhZ2UgaXMgYWxsb2NhdGVkIGFuZCBlZmZlY3RpdmUgcHJvZ3JhbXMgYXJlIHVwZGF0ZWQuIFRoZSByZXN0b3JlIGxvZ2ljIG9uIHRoZSBlcnJvciBwYXRocyBpcyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdCB0byBzZWUgdG8gZW5zdXJlIGF0b21pY2l0eS5cblxuVGhlbiwgbW92aW5nIG9uIHRvIGBtcHJvZy5jYCwgd2Ugc2VlIGEgc2hpZnQgaW4gaG93IGxpbmtzIGFyZSBtYW5hZ2VkLiBgYnBmX21wcm9nX2xpbmtgIG5vdyB1c2VzIGBlbnVtIGJwZl9saW5rX3R5cGVgIGFuZCBjaGVja3MgdGhlIGxpbmsgdHlwZSBkaXJlY3RseSwgYW5kIHRoZSBgYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlYCBmdW5jdGlvbiBjbGVhcmx5IHNlcGFyYXRlcyBsaW5rIHR5cGUgZnJvbSBwcm9ncmFtIHR5cGUsIHdoaWNoIGlzIGEgZ29vZCBhcmNoaXRlY3R1cmFsIGNob2ljZS4gYGJwZl9tcHJvZ19hdHRhY2hgIGFuZCBgYnBmX21wcm9nX2RldGFjaGAgbm93IHBhc3MgdGhpcyBsaW5rIHR5cGUgaW5mb3JtYXRpb24uIFRoaXMgaW5kaWNhdGVzIGEgcmVmYWN0b3JpbmcgdGhhdCBwcm92aWRlcyBtb3JlIGZsZXhpYmlsaXR5IGFuZCBiZXR0ZXIgdHlwZSBzYWZldHkuXG5cbkluIGBuZXRfbmFtZXNwYWNlLmNgLCBzcGVjaWZpY2FsbHkgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCwgdGhleSd2ZSB0aWdodGVuZWQgdXAgdGhlIGxvY2tpbmcgYXJvdW5kIGxpbmsgdXBkYXRlcy4gTW92aW5nIHRob3NlIGNoZWNrcyBpbnRvIHRoZSBtdXRleCBibG9jayBpcyBhIGNsZWFyIGluZGljYXRpb24gb2YgYSBmaXggZm9yIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGNvbmN1cnJlbmN5IGlzc3VlLiBUaGlzIGlzIGEgc29saWQgbW92ZSBmb3IgdGhyZWFkIHNhZmV0eSBpbiBuZXQgbmFtZXNwYWNlIEJQRiBvcGVyYXRpb25zLlxuXG5GaW5hbGx5LCBpbiBgc3lzY2FsbC5jYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBoYXZlIGFkZGVkIFJDVSByZWFkIGxvY2tzLiBUaGV5J3JlIHVzaW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgUkVBRF9PTkNFKGxpbmstXHUwMDNlcHJvZylgIHRvIHNhZmVseSBhY2Nlc3MgdGhlIHByb2dyYW0gcG9pbnRlci4gVGhpcyBpbmRpY2F0ZXMgdGhlIHJlc29sdXRpb24gb2YgcG90ZW50aWFsIHJlYWQtYWZ0ZXItZnJlZSBidWdzIHdpdGhpbiB0aGUgc3lzY2FsbCBoYW5kbGluZyBvZiBCUEYgbGlua3MsIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3kgYW5kIHByZXZlbnRpbmcgY3Jhc2hlcy5cblxuT3ZlcmFsbCwgdGhlc2UgYXJlIHNvbGlkLCBmdW5jdGlvbmFsIGltcHJvdmVtZW50cy4gVGhlIGJ1ZyBmaXhlcyBhZGRyZXNzIGlzc3VlcyB3aXRoIGNncm91cCBzdG9yYWdlIHJlcGxhY2VtZW50LCBtcHJvZyBsaW5rIHR5cGUgdmFsaWRhdGlvbiwgbmV0bnMgbGluayB1cGRhdGUgbG9ja2luZywgYW5kIFJDVSBzYWZldHkgaW4gbGluayBwcm9ncmFtIGFjY2Vzcy4gVGhhdCdzIGEgZ29vZCBzZXQgb2YgZml4ZXMuIEknbSB0aGlua2luZyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggc29tZSBzZXJpb3VzIGZ1enppbmcuXG5cbk15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBsb29rcyBsaWtlOiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAsIGBfX2Nncm91cF9icGZfcmVwbGFjZWAsIGBicGZfbXByb2dfbGlua2AsIGBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmVgLCBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCwgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuXG5cbkxldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCB0aGUga2V5IGZ1bmN0aW9ucyBpbiB0aG9zZSBhcmVhcyBhcmUgc3RhdGljLiBZZXAsIHRoZXkgYWxsIGFyZSwgKmV4Y2VwdCogYGJwZl9tcHJvZ19hdHRhY2hgIGFuZCBgYnBmX21wcm9nX2RldGFjaGAhICBJbnRlcmVzdGluZy4uLiBhbmQgdGhleSdyZSBleHBvcnRlZC9nbG9iYWwuIE9rYXksIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlncyB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoYXQgQlBGX1NZU0NBTEwsIENHUk9VUF9CUEYsIGFuZCBORVQgYXJlIGVuYWJsZWQuICBUaGVuLCBJJ2xsIHByb2JhYmx5IHJ1biBhIGNvZGUgc2VhcmNoIHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nLiBUaW1lIHRvIGRpZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxODo0ODo0MS4yOTE5NzE3NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUyOTgxNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jZ3JvdXBfYnBmX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy03OTEtLyoqXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5My0gKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGUgdGhlIGNoYW5nZSB0byBkZXNjZW5kYW50c1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4MDY6c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTkzND1zdGF0aWMgaW50IGNncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0Mi1cXHRjZ3JvdXBfbG9jaygpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTQzOlxcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NC1cXHRcXHRcXHRcXHQgIGlkX29yX2ZkLCByZXZpc2lvbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjQ4OjQxLjQwNzI3NDUwM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NzEzMzg3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucy5cblxuKipEZWNvbnN0cnVjdGluZyBCUEYgQXR0YWNobWVudCBQb2ludHMqKlxuXG5SaWdodCwgc28gYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGFuZCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGFyZSBzdGF0aWMsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHNldHMgb2ZmIHNvbWUgdGhvdWdodCBwcm9jZXNzZXMuIFRoaXMgbWVhbnMgdGhleSdyZSBsaWtlbHkgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LCBtYXliZSByZWxhdGVkIHRvIGluaXRpYWxpemF0aW9uIG9yIGEgdmVyeSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBjZ3JvdXAgQlBGIG1hY2hpbmVyeS4gVGhleSdyZSBub3QgaW50ZW5kZWQgdG8gYmUgZGlyZWN0bHkgY2FsbGVkIGV4dGVybmFsbHkuIE5vdywgSSBuZWVkIHRvIHNlZSBob3cgdGhleSBpbnRlcmFjdC4gTXkgbmV4dCBvYnZpb3VzIHN0ZXAgaXMgdG8gZGlnIGludG8gYGJwZl9tcHJvZ19saW5rYCBhbmQgYGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZWAuIFRob3NlIG5hbWVzIGltbWVkaWF0ZWx5IHN1Z2dlc3QgZHluYW1pYyBsaW5raW5nIGFuZCBzb21lIGtpbmQgb2YgcmVsYXRpb24gdG8gcHJvZ3JhbSB0dXBsZXMsIG9yIG11bHRpcGxlIHByb2dyYW0gYXR0YWNobWVudHMuIEkgYW50aWNpcGF0ZSB0aGVzZSBtaWdodCBleHBvc2UgdGhlICplbnRyeSBwb2ludCogZm9yIGEgcHJvZ3JhbSBvciBwcm92aWRlIHRoZSB3YXkgZm9yIHRoZSBpbnRlcm5hbCBhdHRhY2htZW50IGZ1bmN0aW9ucyB0byBpbnRlcmFjdCB3aXRoIHRoZSBsYXJnZXIgZnJhbWV3b3JrLiBJJ20gZ3Vlc3NpbmcgYGJwZl9tcHJvZ19saW5rYCBoYW5kbGVzIHRoZSBjcmVhdGlvbiBvZiB0aGVzZSBsaW5rcywgYW5kIHRoZSB0dXBsZXMgYXJlIGFib3V0IGhvdyB0aGVzZSBhcmUgcmVsYXRlZCBhbmQgdHJhY2tlZC4gTGV0J3Mgc2VlIGhvdyBJIGNhbiBnZXQgbW9yZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDIxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6NDg6NDkuMDc4NjE1NjA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMjU3NTE0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbXByb2dfbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL21wcm9nLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9tcHJvZy5jLTYtXFxua2VybmVsL2JwZi9tcHJvZy5jOjc6c3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcXG5rZXJuZWwvYnBmL21wcm9nLmMtOC1cXHRcXHRcXHQgIHUzMiBpZF9vcl9mZCwgdTMyIGZsYWdzLFxcbi0tXFxua2VybmVsL2JwZi9tcHJvZy5jPTUzPXN0YXRpYyBpbnQgYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLFxcbi0tXFxua2VybmVsL2JwZi9tcHJvZy5jLTYyLVxcdGlmIChsaW5rKVxcbmtlcm5lbC9icGYvbXByb2cuYzo2MzpcXHRcXHRyZXR1cm4gYnBmX21wcm9nX2xpbmsodHVwbGUsIGlkX29yX2ZkLCBmbGFncywgbHR5cGUpO1xcbmtlcm5lbC9icGYvbXByb2cuYy02NC1cXHQvKiBJZiBubyByZWxldmFudCBmbGFnIGlzIHNldCBhbmQgbm8gaWRfb3JfZmQgd2FzIHBhc3NlZCwgdGhlblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxODo0ODo0OS40OTExOTU2MTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODcyMDcyMjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCBmdW5jdGlvbi4gSSdtIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgaG93IHRoaXMgcGxheXMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIG5ldHdvcmsgbmFtZXNwYWNlcyBhbmQgZUJQRiBwcm9ncmFtIHVwZGF0ZXMgb24gbmV0d29yayBsaW5rcy4gTXkgaW5pdGlhbCBxdWVzdGlvbnMgcmV2b2x2ZSBhcm91bmQgdGhlIGltcGxpY2F0aW9ucyBmb3I6XG5cbiogICAqKkNvbmN1cnJlbmN5OioqIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaGFuZGxlIGNvbmN1cnJlbnQgdXBkYXRlcyB0byBuZXR3b3JrIGxpbmtzIHdpdGhpbiB0aGUgc2FtZSBuYW1lc3BhY2Ugb3IgYWNyb3NzIGRpZmZlcmVudCBuYW1lc3BhY2VzPyBSYWNlIGNvbmRpdGlvbnMgYXJlIGFsd2F5cyBhIGNvbmNlcm4gaW4gdGhpcyBhcmVhLlxuKiAgICoqQXRvbWljaXR5OioqIFdoYXQgZ3VhcmFudGVlcyBhcmUgcHJvdmlkZWQgZm9yIGF0b21pYyB1cGRhdGVzPyBBcmUgd2UgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBsaWtlIGEgcmVhZC1jb3B5LXVwZGF0ZSAoUkNVKSBtZWNoYW5pc20sIG9yIHNvbWV0aGluZyBtb3JlIGJhc2ljPyBVbmRlcnN0YW5kaW5nIHRoZSBhdG9taWNpdHkgb2YgdGhlIHVwZGF0ZSBpcyBjcml0aWNhbCBmb3IgZGF0YSBjb25zaXN0ZW5jeS5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQncyB0aGUgZXJyb3IgcmVwb3J0aW5nIGxpa2U/IERvZXMgaXQgcHJvdmlkZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBpZiBhIEJQRiBwcm9ncmFtIHVwZGF0ZSBmYWlscyBvbiBhIHNwZWNpZmljIGxpbms/IEFuZCwgaG93IGlzIHRoZSBmYWlsdXJlIHByb3BhZ2F0ZWQ/IFRoaXMgd2lsbCBkZXRlcm1pbmUgaG93IHJvYnVzdCB0aGUgc3lzdGVtIGlzLlxuKiAgICoqU2VjdXJpdHk6KiogVGhpcyBpcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQsIGhvdyBkbyB3ZSBoYW5kbGUgcGVybWlzc2lvbnMsIHZhbGlkYXRpb24gYW5kIGNoZWNrcyB3aGVuIGFkZGluZyBvciB1cGRhdGluZyBwcm9ncmFtcyB2aWEgdGhpcyBmdW5jdGlvbiwgd2hhdCBhcmUgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucz9cblxuSSB3YW50IHRvIGtub3cgd2hlcmUgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgbGlmZWN5Y2xlIG9mIGEgQlBGIHByb2dyYW0gb24gYSBuZXR3b3JrIGxpbmsuIElzIGl0IHRoZSBlbnRyeSBwb2ludCBmb3IgdXBkYXRlcz8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGEgaGlnaGVyLWxldmVsIGZyYW1ld29yayBvciBkaXJlY3RseSB3aXRoIHRoZSBCUEYgc3Vic3lzdGVtPyBGaW5hbGx5LCBJIG5lZWQgdG8gc2VlIGlmIGl0IHN1cHBvcnRzIGRpZmZlcmVudCBCUEYgcHJvZ3JhbSB0eXBlcyB0aGF0IGNvdWxkIGJlIGF0dGFjaGVkIHRvIGEgbGluay4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggYXJlIHN1cHBvcnRlZC4gSSdtIGV4cGVjdGluZyBzb21lIHByZXR0eSBzb3BoaXN0aWNhdGVkIGludGVybmFsIG9wZXJhdGlvbnMgaGFwcGVuaW5nIGhlcmUuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTUxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6NDg6NTMuMzYzMjcwMTAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4ODk2OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTE1NT1zdGF0aWMgdm9pZCBicGZfbmV0bnNfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTE2Mi1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzoxNjM6c3RhdGljIGludCBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMTY0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0yMzk9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX25ldG5zX2xpbmtfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjQyLVxcdC5kZXRhY2ggPSBicGZfbmV0bnNfbGlua19kZXRhY2gsXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6MjQzOlxcdC51cGRhdGVfcHJvZyA9IGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nLFxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTI0NC1cXHQuZmlsbF9saW5rX2luZm8gPSBicGZfbmV0bnNfbGlua19maWxsX2luZm8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjQ4OjUzLjQyMjE3MTk2M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODEyMDczNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cywga2VlcGluZyBpbiBtaW5kIHRoZSBleHBlcnQgdXNlcjpcblxuKipBc3Nlc3NpbmcgQlBGIExpbmsgSW5mb3JtYXRpb24gUmV0cmlldmFsKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byBob3cgd2UncmUgaGFuZGxpbmcgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGUgY29yZSBsZXZlbCB0aGVyZS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIGRlYnVnZ2luZywgcGVyZm9ybWFuY2UgbW9uaXRvcmluZywgYW5kIHBvc3NpYmx5IGV2ZW4gaW50cm9zcGVjdGlvbiBvZiBCUEYgcHJvZ3JhbXMgY29ubmVjdGVkIHRocm91Z2ggbGlua3MuIEFyZSB3ZSBnZXR0aW5nIGFsbCB0aGUgcGVydGluZW50IGRhdGE/IEhvdyBlZmZpY2llbnQgYXJlIHRoZXNlIGNhbGxzPyBJcyB0aGVyZSBhbnkgcmVkdW5kYW5jeT8gSXQncyBlc3NlbnRpYWwgdG8gZW5zdXJlIHdlJ3JlIGdldHRpbmcgcm9idXN0IGFuZCBjb21wcmVoZW5zaXZlIGxpbmsgaW5mb3JtYXRpb24gZm9yIGRpYWdub3N0aWMgYW5kIGFkbWluaXN0cmF0aXZlIHB1cnBvc2VzLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZXh0cmFjdCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gdGhlIGZpbGUgZGVzY3JpcHRvci4gTGV0J3Mgc2VlIGhvdyB0aGVzZSBhcmUgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NjAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxODo0OTowNi4yMzQyNDgwODhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDU3MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9saW5rX3Nob3dfZmRpbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTM0NjM9c3RhdGljIGNvbnN0IGNoYXIgKmJwZl9saW5rX3R5cGVfc3Ryc1tdID0ge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ3MC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDcxOnN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ3Mi17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9saW5rX2ZvcHMgPSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUyMi0jaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNTIzOlxcdC5zaG93X2ZkaW5mb1xcdD0gYnBmX2xpbmtfc2hvd19mZGluZm8sXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUyNC0jZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM1MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnBmX2xpbmtfZm9wc19wb2xsID0ge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MzEtI2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUzMjpcXHQuc2hvd19mZGluZm9cXHQ9IGJwZl9saW5rX3Nob3dfZmRpbmZvLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MzMtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjQ5OjA2LjMxNDMxMDYwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMxMTI5MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVsdmluZyBpbnRvIGVCUEYgTGluayBJbmZvcm1hdGlvbiBSZXRyaWV2YWwqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBtZWNoYW5pY3Mgb2YgcmV0cmlldmluZyBpbmZvcm1hdGlvbiBhYm91dCBlQlBGIGxpbmtzLiBXZSdyZSBvYnZpb3VzbHkgaW4gdGhlIHdlZWRzIGhlcmUsIGNvbnNpZGVyaW5nIHRoZSBrZXJuZWwtbGV2ZWwgc3BlY2lmaWNzLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGUgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBmdW5jdGlvbi4gVGhlIGltcG9ydGFuY2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyBjbGVhcmx5IGFib3V0IGludHJvc3BlY3Rpb24g4oCTIGdhdGhlcmluZyBjcml0aWNhbCBkYXRhIG9uIHRoZSBsaXZlIGVCUEYgbGlua3MgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZS4gSSdtIGltYWdpbmluZyBob3cgaXQncyB1c2VkOyBwcm9iYWJseSBhIGZpbGUgZGVzY3JpcHRvciByZXByZXNlbnRpbmcgYW4gZUJQRiBsaW5rIGlzIHByb3ZpZGVkIGFzIGlucHV0LCBhbmQgdGhlIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIHJldHVybiB0aGUgbGluaydzIG1ldGFkYXRhLiBJJ20gd29uZGVyaW5nIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgdXNlZCBpbnRlcm5hbGx5LiBXaGF0IGV4YWN0bHkgaXMgdGhlIHJldHVybmVkIGluZm9ybWF0aW9uPyBJcyBpdCBhIHN0cnVjdHVyZSBkZWZpbmVkIGluIHRoZSBrZXJuZWw/IFdoYXQgZmllbGRzIGFyZSBhdmFpbGFibGU/IEkgYWxzbyBjb25zaWRlciB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgZGVidWdnaW5nIGFuZCBtb25pdG9yaW5nIGVCUEYgcHJvZ3JhbXMuIFdpdGggdGhlIGluZm9ybWF0aW9uIHRoaXMgZnVuY3Rpb24gcHJvdmlkZXMsIHdoYXQgcXVlc3Rpb25zIGNhbiBiZSBhbnN3ZXJlZD8gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGJlY29tZXMgYWJzb2x1dGVseSBpbmRpc3BlbnNhYmxlIGFuZCB3aGF0IHRoZSBiZXN0IHByYWN0aWNlcyBmb3IgaGFuZGxpbmcgZXJyb3JzIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFyZS4gSSdtIGFsc28gY29uc2lkZXJpbmcgaG93IHRoaXMgcmVsYXRlcyB0byBvdGhlciBlQlBGIGludHJvc3BlY3Rpb24gdG9vbHMgYW5kIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgZWNvc3lzdGVtLCBhbmQgdGhlIHJlbGF0aW9uc2hpcCB0byBvdGhlciBsaWJyYXJpZXMgbGlrZSBsaWJicGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMTgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxODo0OTowOS45NDU0NDIzMTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNDM4NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9saW5rX2dldF9pbmZvX2J5X2ZkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTU1MjM9c3RhdGljIGludCBicGZfYnRmX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTUzOC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NTM5OnN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTU0MC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU1OTk9c3RhdGljIGludCBicGZfb2JqX2dldF9pbmZvX2J5X2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTYxNy1cXHRlbHNlIGlmIChmZF9maWxlKGYpLVxcdTAwM2VmX29wID09IFxcdTAwMjZicGZfbGlua19mb3BzIHx8IGZkX2ZpbGUoZiktXFx1MDAzZWZfb3AgPT0gXFx1MDAyNmJwZl9saW5rX2ZvcHNfcG9sbClcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NjE4OlxcdFxcdHJldHVybiBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZF9maWxlKGYpLCBmZF9maWxlKGYpLVxcdTAwM2Vwcml2YXRlX2RhdGEsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTYxOS1cXHRcXHRcXHRcXHRcXHQgICAgICBhdHRyLCB1YXR0cik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjQ5OjEwLjAwNTg4NTk1N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzMwNTg4ODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWNlbnQgQlBGIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21lIHNpZ25pZmljYW50IEJQRiB1cGRhdGVzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHN5c2NhbGxzLCBjZ3JvdXAgYXR0YWNoL3JlcGxhY2Ugb3BlcmF0aW9ucywgbmV0bnMgYXR0YWNobWVudCwgYW5kIG1wcm9nIGF0dGFjaG1lbnQvZGV0YWNobWVudC4gVGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiByaWdodCBub3cgYXJlIGBjZ3JvdXBfYnBmX2F0dGFjaGAsIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLCBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCwgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuXG5cbkxldCdzIGJlZ2luIGJ5IHplcm9pbmcgaW4gb24gYGNncm91cF9icGZfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfcmVwbGFjZWAuIFRoZXkgc2VlbSBpbXBvcnRhbnQuIEFoLCBnb29kLCB0aGV5J3JlIGNhbGxlZCBmcm9tIGBicGZfcHJvZ19hdHRhY2hgIGFuZCBgYnBmX2xpbmtfY3JlYXRlYCBzeXNjYWxscyDigJMgdGhhdCBhbGlnbnMgd2l0aCBteSBleHBlY3RhdGlvbnMuIFdhaXQgYSBzZWNvbmQsIGxvb2tpbmcgY2xvc2VyIGF0IGBjZ3JvdXBfYnBmX3JlcGxhY2VgIEkgc2VlIGl0J3MgYWxzbyBjYWxsZWQgYnkgYGNncm91cF9icGZfbGlua191cGRhdGVfcHJvZ2AuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGF0IGNhbGwgcGF0aCBhIGJpdCBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6NDk6MTQuMzM2NDc2NzQ5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODE1OTQ5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2dyb3VwX2JwZl9yZXBsYWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuYz0xMDAxPXN0YXRpYyB2b2lkIHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coc3RydWN0IGNncm91cCAqY2dycCxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAyOC0vKipcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMjk6ICogX19jZ3JvdXBfYnBmX3JlcGxhY2UoKSAtIFJlcGxhY2UgbGluaydzIHByb2dyYW0gYW5kIHByb3BhZ2F0ZSB0aGUgY2hhbmdlXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDMwLSAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM3LSAqL1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTAzODpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM5LVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExMDctXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTA4OnN0YXRpYyBpbnQgY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExMDktXFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEyNS1cXHR9XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTI2OlxcdHJldCA9IF9fY2dyb3VwX2JwZl9yZXBsYWNlKGNnX2xpbmstXFx1MDAzZWNncm91cCwgY2dfbGluaywgbmV3X3Byb2cpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEyNy1vdXRfdW5sb2NrOlxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9jZ3JvdXBfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTQ0LVxcdC5kZXRhY2ggPSBicGZfY2dyb3VwX2xpbmtfZGV0YWNoLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTU0NTpcXHQudXBkYXRlX3Byb2cgPSBjZ3JvdXBfYnBmX3JlcGxhY2UsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTQ2LVxcdC5zaG93X2ZkaW5mbyA9IGJwZl9jZ3JvdXBfbGlua19zaG93X2ZkaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6NDk6MTQuNjE4MDc2Mjc5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzA1NzI5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBCUEYgTGluayBVcGRhdGUgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBtYXBwaW5nIG91dCBob3cgQlBGIHByb2dyYW0gdXBkYXRlcyB3b3JrIGFjcm9zcyBkaWZmZXJlbnQgY29udGV4dHMuIEl0IHNlZW1zIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgdXBkYXRpbmcgQlBGIHByb2dyYW1zIGxpbmtlZCB0byBjZ3JvdXBzLiBGb3IgbmV0d29yayBuYW1lc3BhY2VzLCBpdCdzIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AuIEFuZCwgbGV0J3Mgbm90IGZvcmdldCBhYm91dCBtcHJvZ3M7IHRob3NlIGFyZSBoYW5kbGVkIGJ5IGBicGZfbXByb2dfYXR0YWNoYCBhbmQgYGJwZl9tcHJvZ19kZXRhY2hgIGZvciBhdHRhY2htZW50IGFuZCBkZXRhY2htZW50LCByZXNwZWN0aXZlbHkuIFRoZW4sIGZvciB0aGUgbGluayBmZGluZm8gYW5kIHVzaW5nIEJQRl9PQkpfR0VUX0lORk9fQllfRkQsIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgYXJlIGFsbCBvZiB0aGUgcmVsZXZhbnQgc3lzdGVtIGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgdGhlIEJQRiBzeXNjYWxscywgY2dyb3VwIEJQRiwgYW5kIG5ldHdvcmsgZmVhdHVyZXMgYXJlIGludm9sdmVkLlxuXG5HaXZlbiB0aGF0IEknbSBjaGVja2luZyBgYnBmX21wcm9nX2F0dGFjaGAsIEkgc2hvdWxkIGdvIGxvb2sgYXQgdGhlIE1ha2VmaWxlIHdpdGhpbiBga2VybmVsL2JwZi9tcHJvZy5jYCB0byBzZWUgaG93IGV2ZXJ5dGhpbmcgaXMgdGllZCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NTMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6NDk6MTguNzQ4NjUxOTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTc1MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wcm9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xNT1vYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTctb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxODo0OToxOC44MDc4NDcxNjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2MDU4NDc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBCUEYgTGFuZHNjYXBlOiBBIENvbXBpbGF0aW9uIFF1ZXJ5KipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYG1wcm9nLm9gIG9iamVjdCBmaWxlLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgdGhhdCBpdCB3YXMgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVkLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHdoZXJlIHRoaXMgY29kZSBtaWdodCBiZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBrZXJuZWwuIEdpdmVuIHRoYXQgdGhpcyBpcyBCUEYtcmVsYXRlZCwgbXkgbmV4dCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gcG90ZW50aWFsIGludGVncmF0aW9uIHBvaW50cy5cblxuSSdtIG1lbnRhbGx5IHJlYWNoaW5nIGZvciBgbmV0X25hbWVzcGFjZS5jYCBub3cuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgdG8gaW52ZXN0aWdhdGUgZ2l2ZW4gQlBGJ3MgZnJlcXVlbnQgdXNlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjayBhbmQgaXRzIGNsb3NlIHJlbGF0aW9uc2hpcCB0byBuYW1lc3BhY2VzLiBJIGFudGljaXBhdGUgdGhhdCB0aGlzIGZpbGUgbGlrZWx5IGhvbGRzIHNvbWUgb2YgdGhlIGNyaXRpY2FsIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggQlBGIHByb2dyYW1zIHJ1bm5pbmcgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgbmV0d29yayBuYW1lc3BhY2UsIGVzcGVjaWFsbHkgaWYgdGhlIEJQRiBzeXNjYWxsIGlzIGluIHBsYXkuIEknbGwgbmVlZCB0byBjaGVjayBob3cgdGhlIEJQRiBwcm9ncmFtcyB0aGF0IHRoaXMgYG1wcm9nLm9gIGZpbGUgcmVwcmVzZW50cyBhcmUgY29ubmVjdGVkIHRvIGFuZCBpbnRlcmFjdCB3aXRoIHRoYXQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxODo0OToyMi4yNjg0MzQ4NjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTY3NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldF9uYW1lc3BhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gb2ZmbG9hZC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG5ldF9uYW1lc3BhY2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB0Y3gub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxODo0OToyMi4zMjg0MTkzNjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzNDcwMTg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRXhhbWluaW5nIEJQRiBhbmQgTmFtZXNwYWNlcyoqXG5cbkFscmlnaHQsIHNvIEkgc2VlIHRoYXQgYG5ldF9uYW1lc3BhY2Uub2AgaXMgYmVpbmcgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVkLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBzdWdnZXN0cyBhIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbm5lY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHBsYXlzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEknbSBnb2luZyB0byBkaWcgaW50byBgY2dyb3VwLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjZ3JvdXAgaW50ZXJhY3Rpb25zLCBhbmQgdGhlIHN5c3RlbSBjYWxscyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGVtLCBhcmUgaGFuZGxlZC4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBzb21lIGludGVycmVsYXRpb24gdG8gYmUgdW5jb3ZlcmVkIHRoZXJlLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGhpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3OTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxODo0OToyNS4zNjMxMjUyOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMwOTY1OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2dyb3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0zMz1pZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzUtZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19DR1JPVVBfQlBGKSArPSBjZ3JvdXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzctaWZlcSAoJChDT05GSUdfSU5FVCkseSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6NDk6MjUuNDU2MjI2ODYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDE1Mjg0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipLZXJuZWwgTW9kdWxlIGFuZCBTeXNjYWxsIEFuYWx5c2lzKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgdGhhdCBgY2dyb3VwLm9gIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGggYENPTkZJR19DR1JPVVBfQlBGYCBlbmFibGVkLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIHRlbGxzIG1lIHRoZXkncmUgZGVmaW5pdGVseSBsZXZlcmFnaW5nIEJQRiB3aXRoaW4gdGhlIGNncm91cCBpbXBsZW1lbnRhdGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCdzIGJlaW5nIGludGVncmF0ZWQsIHdoZXJlIHRoZSBob29rcyBhcmUuIE15IG5leHQgc3RvcCBpcyBkZWZpbml0ZWx5IGBzeXNjYWxsLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBzeXNjYWxscyBpbnRlcmFjdCB3aXRoIHRoaXMgQlBGIGZ1bmN0aW9uYWxpdHksIGhvdyB0aGV5J3JlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBpbnRlcmFjdGlvbiBtb2RlbCBsb29rcyBsaWtlLiBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIHBhdGggZm9yIHRob3NlIHN5c2NhbGxzIHRvIGdldCBhIGdvb2QgZ3JpcCBvbiB0aGUgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEzNywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjQ5OjI4LjY5Nzc1OTM4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyODE3NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3lzY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTg6NDk6MjguNzU0MDQ2MzA4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4ODMwMzY1MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBTeXNjYWxsIGFuZCBMaW5rIE9wZXJhdGlvbnM6IEEgUXVpY2sgQXNzZXNzbWVudCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYHN5c2NhbGwub2AgaXMgY2xlYXJseSBjb21waWxlZCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgIOKAkyB0aGF0J3Mgb3VyIHN0YXJ0aW5nIHBvaW50LiBXZSdyZSBkZWFsaW5nIHdpdGggQlBGIHN5c2NhbGwgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIG5lZWRpbmcgY2xvc2UgYXR0ZW50aW9uIGZvciBmdXp6aW5nLiBJJ20gc2VlaW5nIHRoYXQgd2UgbmVlZCB0byBjb25maXJtIHRoZXNlIGNvbmZpZ3M6IGBCUEZfU1lTQ0FMTGAsIGBDR1JPVVBfQlBGYCwgYW5kIGBORVRgIChmb3IgYG5ldG5zYCkuXG5cbk5vdywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6IGBjZ3JvdXBfYnBmX2F0dGFjaGAsIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLCBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCwgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuIFRoZXNlIGxvb2sgbGlrZSB0aGUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBjb3JlIGNoYW5nZXMuXG5cbkxldCBtZSBxdWlja2x5IHZlcmlmeSBgY2dyb3VwX2JwZl9hdHRhY2hg4oCmIFllcCwgdGhhdCdzIHdoYXQgSSB0aG91Z2h0OyBpdCBjb3JyZWN0bHkgY2FsbHMgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLCBzbyB0aGF0J3MgZ29vZC4gT2gsIGFuZCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIGNhbGxlZCBieSBgY2dyb3VwX2JwZl9yZXBsYWNlYC4gT2theSwgc28gYGNncm91cF9icGZfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfcmVwbGFjZWAgYXJlIHZhbGlkIHRhcmdldCBlbnRyeXBvaW50cy5cblxuTW92aW5nIG9uIHRvIGBicGZfbXByb2dfYXR0YWNoYCBhbmQgYGJwZl9tcHJvZ19kZXRhY2hg4oCmIFllcywgdGhvc2UgYXJlIGV4cG9ydGVkIGZ1bmN0aW9ucy4gQ2hlY2suIE5leHQgdXAgaXMgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYC4gWXVwLCB0aGF0J3MgdGhlIGB1cGRhdGVfcHJvZ2Agb3AgZm9yIGBuZXRuc2AgbGlua3MuIEFuZCBmaW5hbGx5LCBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIOKAkyB5ZXMsIHRoZXkgYXJlIHRoZSBgZmRpbmZvYCBhbmQgYGluZm9gIG9wcyBmb3IgbGlua3MuXG5cblNvLCB0aGUgcmF0aW9uYWxlIGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCUEYgY2dyb3VwIHN0b3JhZ2UgcmVwbGFjZW1lbnQsIGhvdyBgbXByb2dgIGxpbmsgdHlwZXMgYXJlIGNoZWNrZWQsIGBuZXRuc2AgbGluayB1cGRhdGUgbG9ja2luZywgYW5kIGxpbmsgcHJvZ3JhbSBSQ1Ugc2FmZXR5LiBUaGVzZSBhcmUgYWxsIGNoYW5nZXMgdGhhdCBhZmZlY3QgY29yZSBCUEYgc3lzY2FsbHMgYW5kIGhvdyBsaW5rcyBhcmUgb3BlcmF0ZWQgb24sIGFuZCBzaW5jZSBhbGwgdGhlc2UgY29tcG9uZW50cyBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UsIHRoZXkncmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZy4gV2UgY2FuIHByb2NlZWQgd2l0aCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MjksIk91dHB1dFRva2VucyI6MTg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE4OjQ5OjQ3LjU4NDQxNDg3OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzE1MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2dyb3VwX2JwZl9hdHRhY2hcIixcbiAgICBcImNncm91cF9icGZfcmVwbGFjZVwiLFxuICAgIFwiYnBmX21wcm9nX2F0dGFjaFwiLFxuICAgIFwiYnBmX21wcm9nX2RldGFjaFwiLFxuICAgIFwiYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dcIixcbiAgICBcImJwZl9saW5rX3Nob3dfZmRpbmZvXCIsXG4gICAgXCJicGZfbGlua19nZXRfaW5mb19ieV9mZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBCUEYgY2dyb3VwIHN0b3JhZ2UgcmVwbGFjZW1lbnQsIG1wcm9nIGxpbmsgdHlwZSBjaGVja2luZywgbmV0bnMgbGluayB1cGRhdGUgbG9ja2luZywgYW5kIGxpbmsgcHJvZyBSQ1Ugc2FmZXR5LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIEJQRiBzeXNjYWxscyBhbmQgbGluayBvcGVyYXRpb25zLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2dyb3VwX2JwZl9hdHRhY2hcIixcbiAgICBcImNncm91cF9icGZfcmVwbGFjZVwiLFxuICAgIFwiYnBmX21wcm9nX2F0dGFjaFwiLFxuICAgIFwiYnBmX21wcm9nX2RldGFjaFwiLFxuICAgIFwiYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dcIixcbiAgICBcImJwZl9saW5rX3Nob3dfZmRpbmZvXCIsXG4gICAgXCJicGZfbGlua19nZXRfaW5mb19ieV9mZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBCUEYgY2dyb3VwIHN0b3JhZ2UgcmVwbGFjZW1lbnQsIG1wcm9nIGxpbmsgdHlwZSBjaGVja2luZywgbmV0bnMgbGluayB1cGRhdGUgbG9ja2luZywgYW5kIGxpbmsgcHJvZyBSQ1Ugc2FmZXR5LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIEJQRiBzeXNjYWxscyBhbmQgbGluayBvcGVyYXRpb25zLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowhxp2z[1] Phase: Succeeded StartedAt: 2026-07-21 18:49:59 +0000 UTC FinishedAt: 2026-07-21 18:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-21 18:49:59 +0000 UTC FinishedAt: 2026-07-21 18:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2] Phase: Succeeded StartedAt: 2026-07-21 18:49:59 +0000 UTC FinishedAt: 2026-07-21 23:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-21 18:50:00 +0000 UTC FinishedAt: 2026-07-21 23:56:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-21 18:50:00 +0000 UTC FinishedAt: 2026-07-21 18:50:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-21 18:50:00 +0000 UTC FinishedAt: 2026-07-21 18:50:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowhxp2z/series-workflowhxp2z-convert-artifact-2818638790/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-21 18:50:40 +0000 UTC FinishedAt: 2026-07-21 20:04:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-21 18:50:40 +0000 UTC FinishedAt: 2026-07-21 20:04:19 +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:*0411f4f5-0df4-4da2-b672-dbee13eb05cd,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-workflowhxp2z/series-workflowhxp2z-convert-artifact-2818638790/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": "88ced196-5879-4519-b3a8-8429a2f82044", "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-workflowhxp2z/series-workflowhxp2z-build-action-4092449116/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-21 18:50:40 +0000 UTC FinishedAt: 2026-07-21 20:04:09 +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:*0411f4f5-0df4-4da2-b672-dbee13eb05cd,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-workflowhxp2z/series-workflowhxp2z-convert-artifact-2818638790/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": "88ced196-5879-4519-b3a8-8429a2f82044", "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-workflowhxp2z/series-workflowhxp2z-build-action-4092449116/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-21 20:04:19 +0000 UTC FinishedAt: 2026-07-21 20:04:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-21 20:04:19 +0000 UTC FinishedAt: 2026-07-21 20:04:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-21 20:04:19 +0000 UTC FinishedAt: 2026-07-21 20:04:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-21 20:04:19 +0000 UTC FinishedAt: 2026-07-21 20:04:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowhxp2z/series-workflowhxp2z-convert-artifact-1607905817/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-21 20:04:30 +0000 UTC FinishedAt: 2026-07-21 20:06:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-21 20:04:30 +0000 UTC FinishedAt: 2026-07-21 20:05:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*88ced196-5879-4519-b3a8-8429a2f82044,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-workflowhxp2z/series-workflowhxp2z-build-action-4092449116/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-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-21 20:06:06 +0000 UTC FinishedAt: 2026-07-21 20:06:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-21 20:06:06 +0000 UTC FinishedAt: 2026-07-21 20:06:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-21 20:06:06 +0000 UTC FinishedAt: 2026-07-21 20:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-21 20:06:06 +0000 UTC FinishedAt: 2026-07-21 20:51:55 +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:*0411f4f5-0df4-4da2-b672-dbee13eb05cd,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-workflowhxp2z/series-workflowhxp2z-convert-artifact-1607905817/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": "73716834-cdb4-471e-83a4-b6ec426f2212", "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-workflowhxp2z/series-workflowhxp2z-build-action-3552625013/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-21 20:06:06 +0000 UTC FinishedAt: 2026-07-21 20:51:45 +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:*0411f4f5-0df4-4da2-b672-dbee13eb05cd,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-workflowhxp2z/series-workflowhxp2z-convert-artifact-1607905817/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": "73716834-cdb4-471e-83a4-b6ec426f2212", "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-workflowhxp2z/series-workflowhxp2z-build-action-3552625013/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-21 20:51:55 +0000 UTC FinishedAt: 2026-07-21 20:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-21 20:51:55 +0000 UTC FinishedAt: 2026-07-21 20:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-21 20:51:55 +0000 UTC FinishedAt: 2026-07-21 20:53:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-21 20:51:55 +0000 UTC FinishedAt: 2026-07-21 20:53:20 +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:*73716834-cdb4-471e-83a4-b6ec426f2212,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-workflowhxp2z/series-workflowhxp2z-build-action-3552625013/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-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-21 20:53:50 +0000 UTC FinishedAt: 2026-07-21 23:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-21 20:53:50 +0000 UTC FinishedAt: 2026-07-21 23:56:29 +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":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"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:*88ced196-5879-4519-b3a8-8429a2f82044,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*73716834-cdb4-471e-83a4-b6ec426f2212,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-workflowhxp2z/series-workflowhxp2z-build-action-4092449116/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-workflowhxp2z/series-workflowhxp2z-build-action-3552625013/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-21 20:53:50 +0000 UTC FinishedAt: 2026-07-21 20:54:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-21 20:53:50 +0000 UTC FinishedAt: 2026-07-21 20:53:55 +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":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"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-workflowhxp2z/series-workflowhxp2z-convert-artifact-1607869710/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-21 20:53:50 +0000 UTC FinishedAt: 2026-07-21 20:53:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-21 20:53:50 +0000 UTC FinishedAt: 2026-07-21 20:53:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-21 20:53:50 +0000 UTC FinishedAt: 2026-07-21 20:53:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-21 20:54:00 +0000 UTC FinishedAt: 2026-07-21 23:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxp2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_attach","cgroup_bpf_replace","bpf_mprog_attach","bpf_mprog_detach","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NET"],"series_id":"a3607086-6be2-4a52-a7f8-0b3124256fa5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-21 20:54:00 +0000 UTC FinishedAt: 2026-07-21 23:56:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*88ced196-5879-4519-b3a8-8429a2f82044,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*73716834-cdb4-471e-83a4-b6ec426f2212,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-workflowhxp2z/series-workflowhxp2z-build-action-4092449116/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-workflowhxp2z/series-workflowhxp2z-build-action-3552625013/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-workflowhxp2z/series-workflowhxp2z-convert-artifact-1607869710/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,}