Name: series-workflowfpsnq Phase: Succeeded StartedAt: 2026-07-08 15:22:57 +0000 UTC FinishedAt: 2026-07-08 16:55:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[0] Phase: Succeeded StartedAt: 2026-07-08 15:22:57 +0000 UTC FinishedAt: 2026-07-08 15:45:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 15:22:57 +0000 UTC FinishedAt: 2026-07-08 15:45:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "481329ec5b31d2c48ac6b8b703c8008133884c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "481329ec5b31d2c48ac6b8b703c8008133884c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "4d53aa7e-898d-41fa-acfd-6f9840d3d5e5" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_riscv_vcpu_set_interrupt", "kvm_riscv_vcpu_unset_interrupt", "kvm_riscv_vcpu_general_set_csr", "kvm_riscv_vcpu_aia_set_csr" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzciYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc3BpbmxvY2sgdG8gc2VyaWFsaXplIHVwZGF0ZXMgdG8gdGhlIGBpcnFzX3BlbmRpbmdgIGFuZCBgaXJxc19wZW5kaW5nX21hc2tgIGJpdG1hcHMgaW4gdGhlIFJJU0MtViBLVk0gYXJjaGl0ZWN0dXJlLCByZXBsYWNpbmcgYSBsb2NrbGVzcyBhcHByb2FjaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgdkNQVSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGZ1bmN0aW9ucyB0aGF0IHNldC91bnNldCBpbnRlcnJ1cHRzIGFuZCBtb2RpZnkgQ1NScywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgaW50ZXJhY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmYzMTBiMDJmNTcxMDU5MWE3NzRhNzY0YTdjY2Q1M2Y5MDNhYjJiZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMTU6NDM6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCA3NWIwYTk1MWMxYmM2Zi4uOTdlNDI2NDVjYmFiZWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTIwNywxMyAmIzQzOzIwNywxMyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XG4gXHQvKlxuIFx0ICogVkNQVSBpbnRlcnJ1cHRzXG4gXHQgKlxuLVx0ICogV2UgaGF2ZSBhIGxvY2tsZXNzIGFwcHJvYWNoIGZvciB0cmFja2luZyBwZW5kaW5nIFZDUFUgaW50ZXJydXB0c1xuLVx0ICogaW1wbGVtZW50ZWQgdXNpbmcgYXRvbWljIGJpdG9wcy4gVGhlIGlycXNfcGVuZGluZyBiaXRtYXAgcmVwcmVzZW50XG4tXHQgKiBwZW5kaW5nIGludGVycnVwdHMgd2hlcmVhcyBpcnFzX3BlbmRpbmdfbWFzayByZXByZXNlbnQgYml0cyBjaGFuZ2VkXG4tXHQgKiBpbiBpcnFzX3BlbmRpbmcuIE91ciBhcHByb2FjaCBpcyBtb2RlbGVkIGFyb3VuZCBtdWx0aXBsZSBwcm9kdWNlclxuLVx0ICogYW5kIHNpbmdsZSBjb25zdW1lciBwcm9ibGVtIHdoZXJlIHRoZSBjb25zdW1lciBpcyB0aGUgVkNQVSBpdHNlbGYuXG4mIzQzO1x0ICogVGhlIGlycXNfcGVuZGluZyBiaXRtYXAgcmVwcmVzZW50cyBwZW5kaW5nIGludGVycnVwdHMgd2hlcmVhc1xuJiM0MztcdCAqIGlycXNfcGVuZGluZ19tYXNrIHJlcHJlc2VudHMgYml0cyBjaGFuZ2VkIGluIGlycXNfcGVuZGluZy4gVXBkYXRlc1xuJiM0MztcdCAqIHRvIHRoZXNlIGJpdG1hcHMgYXJlIHNlcmlhbGl6ZWQgc28gdmNwdSBpbnRlcnJ1cHQgc3luYy9mbHVzaCBjYW5ub3RcbiYjNDM7XHQgKiBkcm9wIGEgbmV3bHkgaW5qZWN0ZWQgaW50ZXJydXB0IHdoaWxlIHN5bmNpbmcgZ3Vlc3QtdmlzaWJsZSBIVklQLlxuIFx0ICovXG4gI2RlZmluZSBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTXHQ2NFxuJiM0MztcdHJhd19zcGlubG9ja190IGlycXNfcGVuZGluZ19sb2NrO1xuIFx0REVDTEFSRV9CSVRNQVAoaXJxc19wZW5kaW5nLCBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTKTtcbiBcdERFQ0xBUkVfQklUTUFQKGlycXNfcGVuZGluZ19tYXNrLCBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9haWEuYyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXG5pbmRleCA1ZWM1MDMyODg1NTVkMS4uODIxZDJjYjZkNmE2ZDkgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vYWlhLmNcbkBAIC01MCwxNyAmIzQzOzUwLDIxIEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdV9haWFfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guYWlhX2NvbnRleHQuZ3Vlc3RfY3NyO1xuIFx0dW5zaWduZWQgbG9uZyBtYXNrLCB2YWw7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGlmICgha3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKFJFQURfT05DRSh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0pKSB7XG4tXHRcdG1hc2sgPSB4Y2hnX2FjcXVpcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdLCAwKTtcbi1cdFx0dmFsID0gUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMV0pIFx1MDAyNiBtYXNrO1xuJiM0MztcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRtYXNrID0gdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdO1xuJiM0MztcdGlmIChtYXNrKSB7XG4mIzQzO1x0XHR2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0gPSAwO1xuJiM0MztcdFx0dmFsID0gdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1sxXSBcdTAwMjYgbWFzaztcbiBcbiBcdFx0Y3NyLVx1MDAzZWh2aXBoIFx1MDAyNj0gfm1hc2s7XG4gXHRcdGNzci1cdTAwM2VodmlwaCB8PSB2YWw7XG4gXHR9XG4mIzQzO1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gfVxuIFxuIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtMjA1LDYgJiM0MzsyMDksOSBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdV9haWFfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guYWlhX2NvbnRleHQuZ3Vlc3RfY3NyO1xuIFx0dW5zaWduZWQgbG9uZyByZWdzX21heCA9IHNpemVvZihzdHJ1Y3Qga3ZtX3Jpc2N2X2FpYV9jc3IpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xuJiM0MzsjaWZkZWYgQ09ORklHXzMyQklUXG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7I2VuZGlmXG4gXG4gXHRpZiAoIXJpc2N2X2lzYV9leHRlbnNpb25fYXZhaWxhYmxlKHZjcHUtXHUwMDNlYXJjaC5pc2EsIFNTQUlBKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG5AQCAtMjE0LDExICYjNDM7MjIxLDE4IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRyZWdfbnVtID0gYXJyYXlfaW5kZXhfbm9zcGVjKHJlZ19udW0sIHJlZ3NfbWF4KTtcbiBcbiBcdGlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKSB7XG4tXHRcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7XG4tXG4gI2lmZGVmIENPTkZJR18zMkJJVFxuLVx0XHRpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9BSUFfUkVHKHNpcGgpKVxuLVx0XHRcdFdSSVRFX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdLCAwKTtcbiYjNDM7XHRcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX0FJQV9SRUcoc2lwaCkpIHtcbiYjNDM7XHRcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xuJiM0MztcdFx0XHR2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0gPSAwO1xuJiM0MztcdFx0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGZsYWdzKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7XG4mIzQzO1x0XHR9XG4mIzQzOyNlbHNlXG4mIzQzO1x0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xuICNlbmRpZlxuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuYyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuY1xuaW5kZXggYTczNjkwZWRhODRiNWEuLmIwNDczMGNjZDYyY2VkIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1LmNcbkBAIC04MCw2ICYjNDM7ODAsNyBAQCBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfdmNwdV9jb250ZXh0X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wga3ZtX3NiaV9yZXNldClcbiB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGJvb2wgbG9hZGVkO1xuIFxuIFx0LyoqXG5AQCAtMTA0LDggJiM0MzsxMDUsMTAgQEAgc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3Jlc2V0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGt2bV9zYmlfcmVzZXQpXG4gXG4gXHRrdm1fcmlzY3ZfdmNwdV9haWFfcmVzZXQodmNwdSk7XG4gXG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFx0Yml0bWFwX3plcm8odmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XG4gXHRiaXRtYXBfemVybyh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2ssIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpO1xuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFxuIFx0a3ZtX3Jpc2N2X3ZjcHVfcG11X3Jlc2V0KHZjcHUpO1xuIFxuQEAgLTE1MSw2ICYjNDM7MTU0LDcgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdC8qIFNldHVwIFZDUFUgaGZlbmNlIHF1ZXVlICovXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaGZlbmNlX2xvY2spO1xuJiM0MztcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2spO1xuIFxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnJlc2V0X3N0YXRlLmxvY2spO1xuIFxuQEAgLTM1MiwxNCAmIzQzOzM1NiwxOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdV9jc3IgKmNzciA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5ndWVzdF9jc3I7XG4gXHR1bnNpZ25lZCBsb25nIG1hc2ssIHZhbDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0aWYgKFJFQURfT05DRSh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF0pKSB7XG4tXHRcdG1hc2sgPSB4Y2hnX2FjcXVpcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdLCAwKTtcbi1cdFx0dmFsID0gUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMF0pIFx1MDAyNiBtYXNrO1xuJiM0MztcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRtYXNrID0gdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdO1xuJiM0MztcdGlmIChtYXNrKSB7XG4mIzQzO1x0XHR2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF0gPSAwO1xuJiM0MztcdFx0dmFsID0gdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1swXSBcdTAwMjYgbWFzaztcbiBcbiBcdFx0Y3NyLVx1MDAzZWh2aXAgXHUwMDI2PSB+bWFzaztcbiBcdFx0Y3NyLVx1MDAzZWh2aXAgfD0gdmFsO1xuIFx0fVxuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFxuIFx0LyogRmx1c2ggQUlBIGhpZ2ggaW50ZXJydXB0cyAqL1xuIFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX2ZsdXNoX2ludGVycnVwdHModmNwdSk7XG5AQCAtMzY4LDYgJiM0MzszNzYsNyBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGh2aXA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHN0cnVjdCBrdm1fdmNwdV9hcmNoICp2ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoO1xuIFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2NzcjtcbiBcbkBAIC0zNzYsNiAmIzQzOzM4NSw3IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdC8qIFN5bmMtdXAgSFZJUC5WU1NJUCBiaXQgY2hhbmdlcyBkb2VzIGJ5IEd1ZXN0ICovXG4gXHRodmlwID0gbmNzcl9yZWFkKENTUl9IVklQKTtcbiYjNDM7XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2di1cdTAwM2VpcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFx0aWYgKChjc3ItXHUwMDNlaHZpcCBeIGh2aXApIFx1MDAyNiAoMVVMIFx1MDAzY1x1MDAzYyBJUlFfVlNfU09GVCkpIHtcbiBcdFx0aWYgKGh2aXAgXHUwMDI2ICgxVUwgXHUwMDNjXHUwMDNjIElSUV9WU19TT0ZUKSkge1xuIFx0XHRcdGlmICghdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcbkBAIC0zOTQsNiAmIzQzOzQwNCw3IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0ICAgICF0ZXN0X2FuZF9zZXRfYml0KElSUV9QTVVfT1ZGLCB2LVx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcbiBcdFx0XHRjbGVhcl9iaXQoSVJRX1BNVV9PVkYsIHYtXHUwMDNlaXJxc19wZW5kaW5nKTtcbiBcdH1cbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2LVx1MDAzZWlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXG4gXHQvKiBTeW5jLXVwIEFJQSBoaWdoIGludGVycnVwdHMgKi9cbiBcdGt2bV9yaXNjdl92Y3B1X2FpYV9zeW5jX2ludGVycnVwdHModmNwdSk7XG5AQCAtNDA0LDYgJiM0Mzs0MTUsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBXZSBvbmx5IGFsbG93IFZTLW1vZGUgc29mdHdhcmUsIHRpbWVyLCBhbmQgZXh0ZXJuYWxcbiBcdCAqIGludGVycnVwdHMgd2hlbiBpcnEgaXMgb25lIG9mIHRoZSBsb2NhbCBpbnRlcnJ1cHRzXG5AQCAtNDE2LDkgJiM0Mzs0MjksMTAgQEAgaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIFx0ICAgIGlycSAhPSBJUlFfUE1VX09WRilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFx0c2V0X2JpdChpcnEsIHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmcpO1xuLVx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRzZXRfYml0KGlycSwgdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrKTtcbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiBcbiBcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG4gXG5AQCAtNDI3LDYgJiM0Mzs0NDEsOCBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXG4gXG4gaW50IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFdlIG9ubHkgYWxsb3cgVlMtbW9kZSBzb2Z0d2FyZSwgdGltZXIsIGNvdW50ZXIgb3ZlcmZsb3cgYW5kIGV4dGVybmFsXG4gXHQgKiBpbnRlcnJ1cHRzIHdoZW4gaXJxIGlzIG9uZSBvZiB0aGUgbG9jYWwgaW50ZXJydXB0c1xuQEAgLTQzOSw5ICYjNDM7NDU1LDEwIEBAIGludCBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIFx0ICAgIGlycSAhPSBJUlFfUE1VX09WRilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFx0Y2xlYXJfYml0KGlycSwgdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZyk7XG4tXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdHNldF9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2spO1xuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXG5pbmRleCBiYjkyMGU4OTIzYzkzMC4uY2JhMzY4Mjk0NGI2OTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXG5AQCAtMjk4LDYgJiM0MzsyOTgsNyBAQCBzdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2NzcjtcbiBcdHVuc2lnbmVkIGxvbmcgcmVnc19tYXggPSBzaXplb2Yoc3RydWN0IGt2bV9yaXNjdl9jc3IpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRpZiAocmVnX251bSBcdTAwM2U9IHJlZ3NfbWF4KVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbkBAIC0zMDksMTAgJiM0MzszMTAsMTQgQEAgc3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRyZWdfdmFsIFx1MDAzY1x1MDAzYz0gVlNJUF9UT19IVklQX1NISUZUO1xuIFx0fVxuIFxuLVx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHJlZ192YWw7XG4tXG4tXHRpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9SRUcoc2lwKSlcbi1cdFx0V1JJVEVfT05DRSh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF0sIDApO1xuJiM0MztcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX1JFRyhzaXApKSB7XG4mIzQzO1x0XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gcmVnX3ZhbDtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSA9IDA7XG4mIzQzO1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHJlZ192YWw7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzciYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc3BpbmxvY2sgdG8gc2VyaWFsaXplIHVwZGF0ZXMgdG8gdGhlIGBpcnFzX3BlbmRpbmdgIGFuZCBgaXJxc19wZW5kaW5nX21hc2tgIGJpdG1hcHMgaW4gdGhlIFJJU0MtViBLVk0gYXJjaGl0ZWN0dXJlLCByZXBsYWNpbmcgYSBsb2NrbGVzcyBhcHByb2FjaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgdkNQVSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGZ1bmN0aW9ucyB0aGF0IHNldC91bnNldCBpbnRlcnJ1cHRzIGFuZCBtb2RpZnkgQ1NScywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgaW50ZXJhY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyZjMxMGIwMmY1NzEwNTkxYTc3NGE3NjRhN2NjZDUzZjkwM2FiMmJmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAxNTo0Mzo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA3NWIwYTk1MWMxYmM2Zi4uOTdlNDI2NDVjYmFiZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTIwNywxMyAmIzQzOzIwNywxMyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAJLyoKIAkgKiBWQ1BVIGludGVycnVwdHMKIAkgKgotCSAqIFdlIGhhdmUgYSBsb2NrbGVzcyBhcHByb2FjaCBmb3IgdHJhY2tpbmcgcGVuZGluZyBWQ1BVIGludGVycnVwdHMKLQkgKiBpbXBsZW1lbnRlZCB1c2luZyBhdG9taWMgYml0b3BzLiBUaGUgaXJxc19wZW5kaW5nIGJpdG1hcCByZXByZXNlbnQKLQkgKiBwZW5kaW5nIGludGVycnVwdHMgd2hlcmVhcyBpcnFzX3BlbmRpbmdfbWFzayByZXByZXNlbnQgYml0cyBjaGFuZ2VkCi0JICogaW4gaXJxc19wZW5kaW5nLiBPdXIgYXBwcm9hY2ggaXMgbW9kZWxlZCBhcm91bmQgbXVsdGlwbGUgcHJvZHVjZXIKLQkgKiBhbmQgc2luZ2xlIGNvbnN1bWVyIHByb2JsZW0gd2hlcmUgdGhlIGNvbnN1bWVyIGlzIHRoZSBWQ1BVIGl0c2VsZi4KJiM0MzsJICogVGhlIGlycXNfcGVuZGluZyBiaXRtYXAgcmVwcmVzZW50cyBwZW5kaW5nIGludGVycnVwdHMgd2hlcmVhcwomIzQzOwkgKiBpcnFzX3BlbmRpbmdfbWFzayByZXByZXNlbnRzIGJpdHMgY2hhbmdlZCBpbiBpcnFzX3BlbmRpbmcuIFVwZGF0ZXMKJiM0MzsJICogdG8gdGhlc2UgYml0bWFwcyBhcmUgc2VyaWFsaXplZCBzbyB2Y3B1IGludGVycnVwdCBzeW5jL2ZsdXNoIGNhbm5vdAomIzQzOwkgKiBkcm9wIGEgbmV3bHkgaW5qZWN0ZWQgaW50ZXJydXB0IHdoaWxlIHN5bmNpbmcgZ3Vlc3QtdmlzaWJsZSBIVklQLgogCSAqLwogI2RlZmluZSBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTCTY0CiYjNDM7CXJhd19zcGlubG9ja190IGlycXNfcGVuZGluZ19sb2NrOwogCURFQ0xBUkVfQklUTUFQKGlycXNfcGVuZGluZywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7CiAJREVDTEFSRV9CSVRNQVAoaXJxc19wZW5kaW5nX21hc2ssIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9haWEuYyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jCmluZGV4IDVlYzUwMzI4ODU1NWQxLi44MjFkMmNiNmQ2YTZkOSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vYWlhLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vYWlhLmMKQEAgLTUwLDE3ICYjNDM7NTAsMjEgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9haWFfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bV92Y3B1X2FpYV9jc3IgKmNzciA9ICZhbXA7dmNwdS0mZ3Q7YXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3I7CiAJdW5zaWduZWQgbG9uZyBtYXNrLCB2YWw7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIWt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpCiAJCXJldHVybjsKIAotCWlmIChSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSkpIHsKLQkJbWFzayA9IHhjaGdfYWNxdWlyZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2tbMV0sIDApOwotCQl2YWwgPSBSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdbMV0pICZhbXA7IG1hc2s7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKJiM0MzsJbWFzayA9IHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2tbMV07CiYjNDM7CWlmIChtYXNrKSB7CiYjNDM7CQl2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdID0gMDsKJiM0MzsJCXZhbCA9IHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nWzFdICZhbXA7IG1hc2s7CiAKIAkJY3NyLSZndDtodmlwaCAmYW1wOz0gfm1hc2s7CiAJCWNzci0mZ3Q7aHZpcGggfD0gdmFsOwogCX0KJiM0MzsJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0yMDUsNiAmIzQzOzIwOSw5IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiB7CiAJc3RydWN0IGt2bV92Y3B1X2FpYV9jc3IgKmNzciA9ICZhbXA7dmNwdS0mZ3Q7YXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3I7CiAJdW5zaWduZWQgbG9uZyByZWdzX21heCA9IHNpemVvZihzdHJ1Y3Qga3ZtX3Jpc2N2X2FpYV9jc3IpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwomIzQzOyNpZmRlZiBDT05GSUdfMzJCSVQKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsjZW5kaWYKIAogCWlmICghcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUodmNwdS0mZ3Q7YXJjaC5pc2EsIFNTQUlBKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0yMTQsMTEgJiM0MzsyMjEsMTggQEAgaW50IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAlyZWdfbnVtID0gYXJyYXlfaW5kZXhfbm9zcGVjKHJlZ19udW0sIHJlZ3NfbWF4KTsKIAogCWlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKSB7Ci0JCSgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7Ci0KICNpZmRlZiBDT05GSUdfMzJCSVQKLQkJaWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfQUlBX1JFRyhzaXBoKSkKLQkJCVdSSVRFX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSwgMCk7CiYjNDM7CQlpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9BSUFfUkVHKHNpcGgpKSB7CiYjNDM7CQkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpOwomIzQzOwkJCSgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7CiYjNDM7CQkJdmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSA9IDA7CiYjNDM7CQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLAomIzQzOwkJCQkJCSAgIGZsYWdzKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJKCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHZhbDsKJiM0MzsJCX0KJiM0MzsjZWxzZQomIzQzOwkJKCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHZhbDsKICNlbmRpZgogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jCmluZGV4IGE3MzY5MGVkYTg0YjVhLi5iMDQ3MzBjY2Q2MmNlZCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuYwpAQCAtODAsNiAmIzQzOzgwLDcgQEAgc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfY29udGV4dF9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAKIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBrdm1fc2JpX3Jlc2V0KQogewomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWJvb2wgbG9hZGVkOwogCiAJLyoqCkBAIC0xMDQsOCAmIzQzOzEwNSwxMCBAQCBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wga3ZtX3NiaV9yZXNldCkKIAogCWt2bV9yaXNjdl92Y3B1X2FpYV9yZXNldCh2Y3B1KTsKIAomIzQzOwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiAJYml0bWFwX3plcm8odmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmcsIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpOwogCWJpdG1hcF96ZXJvKHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2ssIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKIAogCWt2bV9yaXNjdl92Y3B1X3BtdV9yZXNldCh2Y3B1KTsKIApAQCAtMTUxLDYgJiM0MzsxNTQsNyBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJLyogU2V0dXAgVkNQVSBoZmVuY2UgcXVldWUgKi8KIAlzcGluX2xvY2tfaW5pdCgmYW1wO3ZjcHUtJmd0O2FyY2guaGZlbmNlX2xvY2spOwomIzQzOwlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrKTsKIAogCXNwaW5fbG9ja19pbml0KCZhbXA7dmNwdS0mZ3Q7YXJjaC5yZXNldF9zdGF0ZS5sb2NrKTsKIApAQCAtMzUyLDE0ICYjNDM7MzU2LDE4IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gJmFtcDt2Y3B1LSZndDthcmNoLmd1ZXN0X2NzcjsKIAl1bnNpZ25lZCBsb25nIG1hc2ssIHZhbDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSkpIHsKLQkJbWFzayA9IHhjaGdfYWNxdWlyZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2tbMF0sIDApOwotCQl2YWwgPSBSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdbMF0pICZhbXA7IG1hc2s7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKJiM0MzsJbWFzayA9IHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2tbMF07CiYjNDM7CWlmIChtYXNrKSB7CiYjNDM7CQl2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdID0gMDsKJiM0MzsJCXZhbCA9IHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nWzBdICZhbXA7IG1hc2s7CiAKIAkJY3NyLSZndDtodmlwICZhbXA7PSB+bWFzazsKIAkJY3NyLSZndDtodmlwIHw9IHZhbDsKIAl9CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpOwogCiAJLyogRmx1c2ggQUlBIGhpZ2ggaW50ZXJydXB0cyAqLwogCWt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzKHZjcHUpOwpAQCAtMzY4LDYgJiM0MzszNzYsNyBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogdm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgaHZpcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCAqdiA9ICZhbXA7dmNwdS0mZ3Q7YXJjaDsKIAlzdHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSAmYW1wO3ZjcHUtJmd0O2FyY2guZ3Vlc3RfY3NyOwogCkBAIC0zNzYsNiAmIzQzOzM4NSw3IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogCS8qIFN5bmMtdXAgSFZJUC5WU1NJUCBiaXQgY2hhbmdlcyBkb2VzIGJ5IEd1ZXN0ICovCiAJaHZpcCA9IG5jc3JfcmVhZChDU1JfSFZJUCk7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3YtJmd0O2lycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiAJaWYgKChjc3ItJmd0O2h2aXAgXiBodmlwKSAmYW1wOyAoMVVMICZsdDsmbHQ7IElSUV9WU19TT0ZUKSkgewogCQlpZiAoaHZpcCAmYW1wOyAoMVVMICZsdDsmbHQ7IElSUV9WU19TT0ZUKSkgewogCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KElSUV9WU19TT0ZULApAQCAtMzk0LDYgJiM0Mzs0MDQsNyBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCSAgICAhdGVzdF9hbmRfc2V0X2JpdChJUlFfUE1VX09WRiwgdi0mZ3Q7aXJxc19wZW5kaW5nX21hc2spKQogCQkJY2xlYXJfYml0KElSUV9QTVVfT1ZGLCB2LSZndDtpcnFzX3BlbmRpbmcpOwogCX0KJiM0MzsJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2LSZndDtpcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpOwogCiAJLyogU3luYy11cCBBSUEgaGlnaCBpbnRlcnJ1cHRzICovCiAJa3ZtX3Jpc2N2X3ZjcHVfYWlhX3N5bmNfaW50ZXJydXB0cyh2Y3B1KTsKQEAgLTQwNCw2ICYjNDM7NDE1LDggQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBpbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiAJLyoKIAkgKiBXZSBvbmx5IGFsbG93IFZTLW1vZGUgc29mdHdhcmUsIHRpbWVyLCBhbmQgZXh0ZXJuYWwKIAkgKiBpbnRlcnJ1cHRzIHdoZW4gaXJxIGlzIG9uZSBvZiB0aGUgbG9jYWwgaW50ZXJydXB0cwpAQCAtNDE2LDkgJiM0Mzs0MjksMTAgQEAgaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKQogCSAgICBpcnEgIT0gSVJRX1BNVV9PVkYpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKIAlzZXRfYml0KGlycSwgdmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmcpOwotCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCXNldF9iaXQoaXJxLCB2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19tYXNrKTsKJiM0MzsJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiAKIAlrdm1fdmNwdV9raWNrKHZjcHUpOwogCkBAIC00MjcsNiAmIzQzOzQ0MSw4IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSkKIAogaW50IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiAJLyoKIAkgKiBXZSBvbmx5IGFsbG93IFZTLW1vZGUgc29mdHdhcmUsIHRpbWVyLCBjb3VudGVyIG92ZXJmbG93IGFuZCBleHRlcm5hbAogCSAqIGludGVycnVwdHMgd2hlbiBpcnEgaXMgb25lIG9mIHRoZSBsb2NhbCBpbnRlcnJ1cHRzCkBAIC00MzksOSAmIzQzOzQ1NSwxMCBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSkKIAkgICAgaXJxICE9IElSUV9QTVVfT1ZGKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiAJY2xlYXJfYml0KGlycSwgdmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmcpOwotCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCXNldF9iaXQoaXJxLCB2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19tYXNrKTsKJiM0MzsJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jCmluZGV4IGJiOTIwZTg5MjNjOTMwLi5jYmEzNjgyOTQ0YjY5NCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jCkBAIC0yOTgsNiAmIzQzOzI5OCw3IEBAIHN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIHsKIAlzdHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSAmYW1wO3ZjcHUtJmd0O2FyY2guZ3Vlc3RfY3NyOwogCXVuc2lnbmVkIGxvbmcgcmVnc19tYXggPSBzaXplb2Yoc3RydWN0IGt2bV9yaXNjdl9jc3IpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHJlZ19udW0gJmd0Oz0gcmVnc19tYXgpCiAJCXJldHVybiAtRU5PRU5UOwpAQCAtMzA5LDEwICYjNDM7MzEwLDE0IEBAIHN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJcmVnX3ZhbCAmbHQ7Jmx0Oz0gVlNJUF9UT19IVklQX1NISUZUOwogCX0KIAotCSgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSByZWdfdmFsOwotCi0JaWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfUkVHKHNpcCkpCi0JCVdSSVRFX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSwgMCk7CiYjNDM7CWlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX1JFRyhzaXApKSB7CiYjNDM7CQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiYjNDM7CQkoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gcmVnX3ZhbDsKJiM0MzsJCXZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2tbMF0gPSAwOwomIzQzOwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gcmVnX3ZhbDsKJiM0MzsJfQogCiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSSVNDLVYgS1ZNIFNwaW5sb2NrIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBpbnRyb2R1Y2luZyBhIGByYXdfc3BpbmxvY2tfdGAgY2FsbGVkIGBpcnFzX3BlbmRpbmdfbG9ja2Agd2l0aGluIGBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaGAgc3BlY2lmaWNhbGx5IGZvciBSSVNDLVYgS1ZNLiBFc3NlbnRpYWxseSwgaXQmIzM5O3Mgc3dhcHBpbmcgb3V0IHRoZSBleGlzdGluZyBsb2NrbGVzcyBhcHByb2FjaCwgd2hpY2ggcmVsaWVkIG9uIHRoaW5ncyBsaWtlIGB4Y2hnX2FjcXVpcmVgIGFuZCBtZW1vcnkgYmFycmllcnMgYmVmb3JlIGF0b21pYyBvcGVyYXRpb25zLCBmb3IgYSBtb3JlIHRyYWRpdGlvbmFsIHNwaW5sb2NrLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgYXJjaGl0ZWN0dXJhbCBzaGlmdC4gVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIFJJU0MtViBLVk0gYXJjaGl0ZWN0dXJlLCBzbyB3ZSBuZWVkIHRvIGJlIHZlcnkgdGhvcm91Z2guCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gvcmlzY3Yva3ZtL2FpYS5jYCwgYGFyY2gvcmlzY3Yva3ZtL3ZjcHUuY2AsIGFuZCBgYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuY2AsIG1lYW5pbmcgaXQmIzM5O3MgbGlrZWx5IGltcGFjdGluZyBjcml0aWNhbCBhcmVhcyByZWxhdGVkIHRvIGludGVycnVwdCBoYW5kbGluZyBhbmQgdkNQVSBtYW5hZ2VtZW50LiBXZSBuZWVkIHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciwgZXZlbiB3b3JzZSwgaW50cm9kdWNlIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgZGVzcGl0ZSB0aGUgaW50ZW50IG9mIHRoZSBsb2NrLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0JiMzOTtzIFJJU0MtViBLVk0sIHNvIGNsZWFybHkgYENPTkZJR19LVk1gIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIFJJU0MtVi4gQnV0IEkgc2hvdWxkIGxvb2sgY2xvc2VyIGF0IGFueSBSSVNDLVYgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnMuIFRoZSBkaWZmIG1lbnRpb25zIGBDT05GSUdfMzJCSVRgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBXaGlsZSBSSVNDLVYgS1ZNIGlzIHByaW1hcmlseSBmb2N1c2VkIG9uIDY0LWJpdCBzeXN0ZW1zLCB0aGUgbWVudGlvbiBvZiAzMi1iaXQgc3VnZ2VzdHMgdGhlcmUgbWlnaHQgYmUgc29tZSBjb25kaXRpb25hbCBsb2dpYyBhdCBwbGF5LiBMZXQgbWUgcHVsbCB1cCBgYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSByZWxhdGVkIGNvbmRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIG9yIGlmIGBDT05GSUdfMzJCSVRgIGl0c2VsZiBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIHNwaW5sb2NrIGlzIGJlaW5nIGNvbmRpdGlvbmFsbHkgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIzOQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIHZDUFUgSW50ZXJydXB0IEhhbmRsaW5nIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIGFyZWEgd2UmIzM5O3JlIGxvb2tpbmcgYXQgaGVyZSBpcyBLVk0gY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0aW5nIHRvIHRoZSBSSVNDLVYgdkNQVS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gQXJlIHRoZXJlIG90aGVyIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIEtWTSBzZXR1cCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gTGV0IG1lIHRoaW5rLgoKUmlnaHQsIEkmIzM5O3ZlIGdvdCBhIGxpc3Qgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYGt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYCwgYGt2bV9yaXNjdl9yZXNldF92Y3B1YCwgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgLCBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCwgYW5kIGBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JgLiBUaGVzZSBhcmUga2V5IHBsYXllcnMgaW4gaG93IEtWTSBoYW5kbGVzIGludGVycnVwdHMgd2l0aGluIHRoZSBSSVNDLVYgdkNQVS4gQ29uc2lkZXJpbmcgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gaW50ZXJydXB0IGhhbmRsaW5nLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGlzc3VlcyBpbiBpbnRlcnJ1cHQgbWFuYWdlbWVudCwgSSYjMzk7dmUgZ290IHRvIHByaW9yaXRpemUgdGhlIGtleSBzeW1ib2xzIGZvciBmdXp6aW5nLiBUaGUgbGlzdCBzaG91bGQgYmU6IGBrdm1fcmlzY3ZfdmNwdV9haWFfZmx1c2hfaW50ZXJydXB0c2AsIGBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcmAsIGBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0c2AsIGBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0YCwgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGAsIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyYC4KCkhvbGQgb24uIGBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzYCBhbmQgYGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0c2AgYXJlIGludGVyZXN0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIHBhdGhzIHRvIHNlZSBob3cgZnJlcXVlbnRseSB0aGV5IGFyZSBjYWxsZWQuIE15IGd1dCB0ZWxscyBtZSB0aGVzZSBjb3VsZCBiZSBob3QtcGF0aCBmdW5jdGlvbnMsIHBvc3NpYmx5IGNhbGxlZCBvbiBldmVyeSBWTSBleGl0IG9yIGVudHJ5LCBtYWtpbmcgdGhlbSBwYXJ0aWN1bGFybHkgY3J1Y2lhbCBmb3IgZnV6emluZy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgY2FsbCBncmFwaCB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vdmNwdS5jPTM1MD1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcmVncyAqcmVncylcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMzU0LVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjM1NTp2b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTM1Ni17XG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTg0Nj1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy05MzEtXHRcdCAqL1xuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjkzMjpcdFx0a3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyh2Y3B1KTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy05MzMtXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYz0yNzM9c3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX2dldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtMjg1LVx0aWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfUkVHKHNpcCkpIHtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM6Mjg2Olx0XHRrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzKHZjcHUpO1xuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYy0yODctXHRcdCpvdXRfdmFsID0gKGNzci1cdTAwM2VodmlwIFx1MDAzZVx1MDAzZSBWU0lQX1RPX0hWSVBfU0hJRlQpIFx1MDAyNiBWU0lQX1ZBTElEX01BU0s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYxNAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludGVycnVwdCBTeW5jaHJvbml6YXRpb24gaW4gdGhlIFJJU0MtViBLVk0gdkNQVSBSdW4gTG9vcCoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBpbnRlcnJ1cHQgaGFuZGxpbmcgd2l0aGluIHRoZSBLVk0gUklTQy1WIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSByZWNhbGxpbmcgdGhhdCBga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0c2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgd2l0aGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHZDUFUmIzM5O3MgZXhlY3V0aW9uIGN5Y2xlLCBzbyBpdCBtYWtlcyBzZW5zZSB0aGF0IGludGVycnVwdCBmbHVzaGluZyB3b3VsZCBoYXBwZW4gdGhlcmUsIGVuc3VyaW5nIGEgY2xlYW4gc2xhdGUgYmVmb3JlIGVhY2ggcnVuLiBUaGUgcXVlc3Rpb24gSSYjMzk7bSB0dXJuaW5nIG92ZXIgbm93LCB0aG91Z2gsIGlzIGFib3V0IGBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHNgLiBXaGVyZSBkb2VzICp0aGF0KiBmaXQgaW50byB0aGUgcGljdHVyZT8gV2hhdCYjMzk7cyBpdHMgcm9sZSBhbmQgcmVsYXRpb25zaGlwIHRvIHRoZSBmbHVzaCBmdW5jdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHNlcXVlbmNlIG9mIGV2ZW50cyB0byBtYWtlIHN1cmUgaW50ZXJydXB0IGluamVjdGlvbiBhbmQgaGFuZGxpbmcgYXJlIGltcGxlbWVudGVkIGNvcnJlY3RseSBhbmQgZWZmaWNpZW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL3ZjcHUuYz0zNTU9dm9pZCBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMzc1LVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjM3Njp2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMzc3LXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM9ODQ2PWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTk2NC1cdFx0LyogU3luY3VwIGludGVycnVwdHMgc3RhdGUgd2l0aCBIVyAqL1xuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjk2NTpcdFx0a3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHZjcHUpO1xuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTk2Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTc1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipBbmFseXppbmcgS1ZNIEhvdC1QYXRoIEZ1bmN0aW9uIENhbGxzKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBwZXJmb3JtYW5jZS1jcml0aWNhbCBzZWN0aW9ucyBvZiB0aGUgS1ZNIGNvZGUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIFJJU0MtViB2aXJ0dWFsaXphdGlvbi4gVGhlIG9ic2VydmF0aW9uIGFib3V0IGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgYmVpbmcgYSBob3QtcGF0aCBmdW5jdGlvbiBpcyBzcG90IG9uLCB0aGF0JiMzOTtzIGV4cGVjdGVkLiBJdCYjMzk7cyB0aGUgY29yZSBsb29wIHdoZXJlIHRoZSBndWVzdCYjMzk7cyBleGVjdXRpb24gaXMgZW11bGF0ZWQuIFRoZSBmYWN0IHRoYXQgd2UmIzM5O3JlIHpvb21pbmcgaW4gb24gaXQgc3VnZ2VzdHMgd2UgYXJlIGxvb2tpbmcgZm9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gd2l0aGluIHRoYXQgY3JpdGljYWwgc2VjdGlvbi4KClRoZSBtb3JlIGludGVyZXN0aW5nIHF1ZXN0aW9uIG5vdywgaG93ZXZlciwgaXMgd2hldGhlciBga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdGAgYW5kIGBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHRgIGFyZSBhbHNvIGhvdC1wYXRoIGZ1bmN0aW9ucy4gSW50ZXJydXB0IGhhbmRsaW5nIGlzIGFsd2F5cyBhIGNyaXRpY2FsIGFyZWEgaW4gdmlydHVhbGl6YXRpb24sIHNpbmNlIGZyZXF1ZW50LCBlZmZpY2llbnQgaGFuZGxpbmcgaXMgaW1wb3J0YW50LCBhbmQgdGhlc2UgcGFydGljdWxhciBmdW5jdGlvbnMgYXJlIGNsZWFybHkgaW52b2x2ZWQgaW4gbWFuYWdpbmcgaW50ZXJydXB0IGluamVjdGlvbiBhbmQgY2xlYXJpbmcsIHdoaWNoIGNvdWxkIGRpcmVjdGx5IGltcGFjdCBndWVzdCByZXNwb25zaXZlbmVzcyBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZS4KCldlIG5lZWQgdG8gY29uc2lkZXIgaG93IGZyZXF1ZW50bHkgdGhvc2UgaW50ZXJydXB0IGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCB0aGUgY29tcGxleGl0eSBvZiB0aGVpciBvcGVyYXRpb25zLCBhbmQgdGhlaXIgaW1wYWN0IG9uIHRoZSB2Q1BVJiMzOTtzIGV4ZWN1dGlvbiBmbG93LiBUaGV5IGNvdWxkIGJlIHRoZSBzb3VyY2Ugb2Ygc2lnbmlmaWNhbnQgb3ZlcmhlYWQsIG9yIHRoZXkgY291bGQgYmUgb3B0aW1pemVkIHF1aXRlIHdlbGwuIEl0JiMzOTtzIGRlZmluaXRlbHkgYW4gYXJlYSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jPTYxND1zdGF0aWMgdm9pZCBpbXNpY19zd2ZpbGVfZXh0aXJxX3VwZGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmMtNjI5LVx0ICAgIGltc2ljX21yaWZfdG9wZWkobXJpZiwgaW1zaWMtXHUwMDNlbnJfZWl4LCBpbXNpYy1cdTAwM2Vucl9tc2lzKSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jOjYzMDpcdFx0a3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfVlNfRVhUKTtcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jLTYzMS1cdGVsc2Vcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM9MjQ5PWxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0yNjEtXHRcdGlmIChpcnEuaXJxID09IEtWTV9JTlRFUlJVUFRfU0VUKVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjI2MjpcdFx0XHRyZXR1cm4ga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfVlNfRVhUKTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0yNjMtXHRcdGVsc2Vcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM9Mzc2PXZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtNDE1LVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjQxNjppbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtNDE3LXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jPTI5Mz1zdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcG11X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpwZXJmX2V2ZW50LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmMtMzI4LVx0c2V0X2JpdChwbWMtXHUwMDNlaWR4LCBrdnBtdS1cdTAwM2VwbWNfb3ZlcmZsb3duKTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmM6MzI5Olx0a3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfUE1VX09WRik7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jLTMzMC1cbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9yZXBsYWNlLmM9NDU9c3RhdGljIGludCBrdm1fc2JpX2V4dF9pcGlfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4sXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfcmVwbGFjZS5jLTcxLVx0XHR9XG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9yZXBsYWNlLmM6NzI6XHRcdHJldCA9IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodG1wLCBJUlFfVlNfU09GVCk7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9yZXBsYWNlLmMtNzMtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmM9MTY9c3RhdGljIGludCBrdm1fc2JpX2V4dF92MDFfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4sXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmMtNTktXHRcdFx0XHRjb250aW51ZTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jOjYwOlx0XHRcdHJldCA9IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQocnZjcHUsIElSUV9WU19TT0ZUKTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jLTYxLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jPTQzPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBrdm1fcmlzY3ZfdmNwdV9ocnRpbWVyX2V4cGlyZWQoc3RydWN0IGhydGltZXIgKmgpXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jLTU2LVx0dC1cdTAwM2VuZXh0X3NldCA9IGZhbHNlO1xuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jOjU3Olx0a3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfVlNfVElNRVIpO1xuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jLTU4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjM1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEludGVycnVwdHMgYW5kIENTUiBNYW5pcHVsYXRpb24gaW4gS1ZNL1JJU0MtVioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBtYW5hZ2luZyBpbnRlcnJ1cHRzIGFuZCBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXJzIChDU1JzKSB3aXRoaW4gdGhlIEtWTS9SSVNDLVYgZW52aXJvbm1lbnQuIFNwZWNpZmljYWxseSwgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgIHNlZW1zIHRvIGJlIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGZvciAqc2V0dGluZyogaW50ZXJydXB0cyDigJMgaXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCAoUE1VKSBvdmVyZmxvd3MsIHRpbWVyIGV4cGlyYXRpb25zLCBJbnRlci1Qcm9jZXNzb3IgSW50ZXJydXB0cyAoSVBJcyksIGFuZCB0aHJvdWdoIGlvY3RsIGNhbGxzLiBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHJlc3BvbnNpYmxlIGZvciAqY2xlYXJpbmcqIGludGVycnVwdHMsIGNvbWluZyBpbnRvIHBsYXkgd2l0aCBpb2N0bCBhbmQgdGltZXJzLgoKVGhlbiwgZm9yIENTUiBtYW5pcHVsYXRpb24sIHdlIGhhdmUgYGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcmAg4oCTIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgaW9jdGwgb3BlcmF0aW9ucyB2aWEgYHNldF9vbmVfcmVnYCBhbmQgaXMgbGlrZWx5IHVzZWQgZm9yIHNldHRpbmcgZ2VuZXJhbC1wdXJwb3NlIENTUnMuIEFuZCBmaW5hbGx5LCB0aGVyZSYjMzk7cyBga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JgLCBhZ2FpbiBkcml2ZW4gYnkgaW9jdGwmIzM5O3MgYHNldF9vbmVfcmVnYCB0byBtYW5hZ2UgQ1NScyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKS4KClNvLCBnaXZlbiB0aGlzIGNhbGwgZ3JhcGggYW5hbHlzaXMsIHRoZSBjcml0aWNhbCBhcmVhcyBJIG5lZWQgdG8gem9vbSBpbiBvbiBhcmUgdGhlc2UgZm91ciBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpbnRlcnJ1cHRzIGFyZSBpbmplY3RlZCBhbmQgY2xlYXJlZCwgYW5kIGhvdyBDU1JzLCBlc3BlY2lhbGx5IHRoZSBBSUEtc3BlY2lmaWMgb25lcywgYXJlIG1vZGlmaWVkLiBNeSBmb2N1cyBub3cgaXMgb24gYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYCBhbmQgYGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcmAgdG8gdW5kZXJzdGFuZCB0aGUgQ1NSIHNldCBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9haWEuYz0xODU9aW50IGt2bV9yaXNjdl92Y3B1X2FpYV9nZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWEuYy0yMDUtXG5hcmNoL3Jpc2N2L2t2bS9haWEuYzoyMDY6aW50IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvcmlzY3Yva3ZtL2FpYS5jLTIwNy1cdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyByZWdfbnVtLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM9NDAyPXN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X3JlZ19jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtNDI1LVx0Y2FzZSBLVk1fUkVHX1JJU0NWX0NTUl9BSUE6XG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jOjQyNjpcdFx0cmMgPSBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2Nzcih2Y3B1LCByZWdfbnVtLCByZWdfdmFsKTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtNDI3LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQb3RlbnRpYWw6IEEgUklTQy1WIEtWTSBEaXZlKioKCk9rYXksIHNvIHRoZSBga3ZtX3Jpc2N2X3ZjcHVfc2V0X3JlZ19jc3JgIGZ1bmN0aW9uLCBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfb25lX3JlZ2AsIHByZXNlbnRzIGEgcGVyZmVjdCBlbnRyeSBwb2ludCBmb3IgZnV6emluZy4gVGhlIHBvdGVudGlhbCBpcyBkZWZpbml0ZWx5IHRoZXJlLiBJIGNhbiBzZWUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgY2FsbCBjaGFpbiBhbmQgaG93IHRoaXMgY291bGQgYmUgZXhwbG9pdGVkIHRvIGZpbmQgc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzLgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZW52aXJvbm1lbnQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgdGhhdCB3b3VsZCBpbXBhY3Qgb3VyIGFiaWxpdHkgdG8gZnV6eiBlZmZlY3RpdmVseT8gSSBzYXcgYENPTkZJR18zMkJJVGAgbWVudGlvbmVkIGluIGBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcmAsIGJ1dCB0aGUgUklTQy1WIEtWTSBpbXBsZW1lbnRhdGlvbiBpcyBsYXJnZWx5IDY0LWJpdCwgc28gc3BlY2lmeWluZyBgS1ZNYCBzaG91bGQgYmUgc3VmZmljaWVudCwgcmF0aGVyIHRoYW4gYWxzbyBzcGVjaWZ5aW5nIGBDT05GSUdfMzJCSVRgLgoKQWgsIHJpZ2h0LiBgQ09ORklHXzMyQklUYCBpcyBhbiAqYXJjaGl0ZWN0dXJlKiBjb25maWd1cmF0aW9uLCBub3Qgc29tZXRoaW5nIEkgbmVlZCB0byBleHBsaWNpdGx5IHNldCBhdCB0aGlzIGxldmVsLiBObyBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoYXQgcGFydGljdWxhciBvbmUuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIHBlcnRpbmVudCBjb25maWd1cmF0aW9ucyB0byBjb25zaWRlci4gVGltZSB0byBnbyBiYWNrIHRvIHRoZSBzb3VyY2UgYW5kIGV4YW1pbmUgYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgIGFnYWluLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vS2NvbmZpZz02PXNvdXJjZSBcJiMzNDt2aXJ0L2t2bS9LY29uZmlnXCYjMzQ7XG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTctXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy05LVx0Ym9vbCBcJiMzNDtWaXJ0dWFsaXphdGlvblwmIzM0O1xuLS1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBSSVNDLVYgSW50ZXJydXB0IEhhbmRsaW5nKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYEtWTWAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gaW4gcGxheSBoZXJlLiBMZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHVuZGVyc3RhbmQgdGhlIGNvcmUgc3ltYm9scyByZWxhdGVkIHRvIGludGVycnVwdCBoYW5kbGluZy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZXNlIGZ1bmN0aW9uczogYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgLCBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCwgYGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcmAsIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JgLgoKTm93LCBjb25zaWRlcmluZyBteSBleHBlcmllbmNlIGluIHRoaXMgc3BhY2UsIHRoZXNlIGFyZW4mIzM5O3QgdHlwaWNhbGx5IGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhleSYjMzk7cmUgdXN1YWxseSB0cmlnZ2VyZWQgYnkgc3BlY2lmaWMgZXZlbnRzLiBUaW1lciBldmVudHMsIHBlcmZvcm1hbmNlIG1vbml0b3IgdW5pdCAoUE1VKSBhY3Rpdml0eSwgb3IgZXZlbiBgaW9jdGxgIGNhbGxzIHdvdWxkIGJlIHByaW1lIGV4YW1wbGVzLCB3aGljaCBhY3R1YWxseSBtYWtlcyB0aGVtIGRlY2VudCB0YXJnZXRzIGZvciBmdXp6aW5nLiBIb3dldmVyLCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzYCBhcmUgY2FsbGVkIG9uIGV2ZXJ5IFZNIGVudHJ5L2V4aXQuIFRoYXQmIzM5O3MgaG90LXBhdGggY29kZSwgYW5kIEkgbmVlZCB0byBhdm9pZCBnZXR0aW5nIGJvZ2dlZCBkb3duIGluIHRob3NlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCBpcyBjYWxsZWQgZnJvbSBhbnkgb3RoZXIgbG9jYXRpb25zIHdpdGhpbiB0aGUgY29kZS4gVGhpcyBjb3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgaXMgd2lyZWQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYz02MTQ9c3RhdGljIHZvaWQgaW1zaWNfc3dmaWxlX2V4dGlycV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jLTYzMS1cdGVsc2VcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jOjYzMjpcdFx0a3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9WU19FWFQpO1xuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmMtNjMzLVxuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jPTYzNz1zdGF0aWMgdm9pZCBpbXNpY19zd2ZpbGVfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgY2xlYXIsXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmMtNjUxLVx0XHRtZW1zZXQoaW1zaWMtXHUwMDNlc3dmaWxlLCAwLCBzaXplb2YoKmltc2ljLVx1MDAzZXN3ZmlsZSkpO1xuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmM6NjUyOlx0XHRrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX0VYVCk7XG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYy02NTMtXHR9XG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTI0OT1sb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMjYzLVx0XHRlbHNlXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6MjY0Olx0XHRcdHJldHVybiBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX0VYVCk7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMjY1LVx0fVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz00MTY9aW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy00NDEtXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6NDQyOmludCBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTQ0My17XG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmM9MTY9c3RhdGljIGludCBrdm1fc2JpX2V4dF92MDFfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4sXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmMtNDUtXHRjYXNlIFNCSV9FWFRfMF8xX0NMRUFSX0lQSTpcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jOjQ2Olx0XHRyZXQgPSBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX1NPRlQpO1xuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmMtNDctXHRcdGJyZWFrO1xuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYz04NT1zdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X3VwZGF0ZV9ocnRpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG5jeWNsZXMpXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jLTkzLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jOjk0Olx0a3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9WU19USU1FUik7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmMtOTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjMwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZGlzdGlsbGluZyB0aGVtIGludG8gYSBtb3JlIGNvbXBsZXRlIG1lbnRhbCBtb2RlbDoKCioqUmVmbGVjdGluZyBvbiBGb2N1cyBTeW1ib2xzIGluIEtWTS9SSVNDLVYgQ29udGV4dCoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgdmFyaW91cyBlbnRyeSBwb2ludHMgb3Igc2lnbmlmaWNhbnQgYXJlYXMgcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIHBpZWNlIG9mIGNvZGUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHN5c3RlbSBvY2N1ciB0aHJvdWdoIGBpb2N0bGAsIHRoZSB0aW1lciBtZWNoYW5pc21zLCBTQkkgKFN5c3RlbSBCaW5hcnkgSW50ZXJmYWNlKSwgYW5kIHRoZSBJTVNJQyAoSW50ZXJydXB0IE1hbmFnZW1lbnQgU3lzdGVtIEludGVyZmFjZSBDb250cm9sbGVyKS4gVGhvc2Ugc2VlbSBsaWtlIHJlYWxseSBnb29kLCBmb2N1c2VkIHN5bWJvbHMgdG8gY2VudGVyIG15IHVuZGVyc3RhbmRpbmcgYXJvdW5kLCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93LgoKTm93LCBiZWZvcmUgSSBkaWcgaW4gdG9vIGRlZXAsIGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgZnVsbCBwaWN0dXJlLiBBcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGlzIGNvZGUgcGF0aD8gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmNoL3Jpc2N2L2t2bS9haWEuY2AuIEFoLCBgYWlhLmNgLiBOb3cgSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNvbXBpbGF0aW9uIG9mIGBhaWEuY2AgaXRzZWxmIGlzIGRlcGVuZGVudCBvbiBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBzaW5jZSB0aGF0IHdvdWxkIGhhdmUgYSBzaWduaWZpY2FudCBpbXBhY3Qgb24gaG93IGFuZCB3aGVyZSB0aGlzIGNvZGUgcnVucy4gR290dGEgYmUgc3VyZSBJJiMzOTttIHRha2luZyBhbGwgcG9zc2libGUgY29uZmlndXJhdGlvbnMgaW50byBhY2NvdW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthaWEubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19LVk0pICYjNDM7PSBrdm0ub1xuLS1cbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlLTEyLSMgT3JkZXJlZCBhbHBoYWJldGljYWxseVxuYXJjaC9yaXNjdi9rdm0vTWFrZWZpbGU6MTM6a3ZtLXkgJiM0Mzs9IGFpYS5vXG5hcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZS0xNC1rdm0teSAmIzQzOz0gYWlhX2FwbGljLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNjkKCQkJCQkJCW91dHB1dDogMTg0CgkJCQkJCQl0aG91Z2h0czogMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gUklTQy1WIEludGVycnVwdCBIYW5kbGluZyBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBpc24mIzM5O3QgY29uZGl0aW9uYWwgY29tcGlsYXRpb247IGl0JiMzOTtzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aGVuIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLiBUaGUgcmVsZXZhbnQgY29uZmlnIGhlcmUgaXMganVzdCBgS1ZNYC4gR290IGl0LgoKTXkgcHJpbWFyeSBmb2N1cywgYXMgZXhwZWN0ZWQsIGlzIG9uIHRoZSBjb3JlIGludGVycnVwdCBoYW5kbGluZyBsb2dpYyB3aXRoaW4gdGhlIFJJU0MtViBLVk0gYXJjaGl0ZWN0dXJlLiBUaGUga2V5IHN5bWJvbHMgdG8gc2NydXRpbml6ZSBhcmU6IGBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0YCwgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGAsIGBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JgLCBhbmQgYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhaywgaW4gdGVybXMgb2YgaW50ZXJydXB0IGluamVjdGlvbiBhbmQgY29udHJvbC4KClRoZSBtZWF0IG9mIHRoZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIHNwaW5sb2NrIHRvIHNlcmlhbGl6ZSB1cGRhdGVzIHRvIHRoZSBgaXJxc19wZW5kaW5nYCBhbmQgYGlycXNfcGVuZGluZ19tYXNrYCBiaXRtYXBzLiBQcmV2aW91c2x5IGxvY2tsZXNzLCBub3cgcHJvdGVjdGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvcmUgdkNQVSBpbnRlcnJ1cHQgaGFuZGxpbmcgaGVyZS4gU28sIGZ1enppbmcgaXMgKmFic29sdXRlbHkqIHRoZSByaWdodCBhcHByb2FjaC4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgbXkgZnV6emluZyBjYW1wYWlnbiBuZWVkcyB0byB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IGhvdyB0aGV5JiMzOTtyZSByZWFjaGVkLiBUaGlzIG1lYW5zIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGludGVyYWN0aW9ucyB0aGF0IHVsdGltYXRlbHkgdHJpZ2dlciB0aGVzZSByb3V0aW5lcywgYXMgdGhhdCYjMzk7cyB0aGUgYXR0YWNrIHN1cmZhY2UuCgpMZXQmIzM5O3MgY2FsbCB0aGF0IGFwcHJvYWNoIGBzZXQtcmVzdWx0c2AuIFdlJiMzOTtsbCB1c2UgdGhlIHJlc3VsdHMgdG8gYnVpbGQgb3VyIHRlc3QgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3ImIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNwaW5sb2NrIHRvIHNlcmlhbGl6ZSB1cGRhdGVzIHRvIHRoZSBgaXJxc19wZW5kaW5nYCBhbmQgYGlycXNfcGVuZGluZ19tYXNrYCBiaXRtYXBzIGluIHRoZSBSSVNDLVYgS1ZNIGFyY2hpdGVjdHVyZSwgcmVwbGFjaW5nIGEgbG9ja2xlc3MgYXBwcm9hY2guIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIHZDUFUgaW50ZXJydXB0IGhhbmRsaW5nIGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBmdW5jdGlvbnMgdGhhdCBzZXQvdW5zZXQgaW50ZXJydXB0cyBhbmQgbW9kaWZ5IENTUnMsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGludGVyYWN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBzcGlubG9jayB0byBzZXJpYWxpemUgdXBkYXRlcyB0byB0aGUgYGlycXNfcGVuZGluZ2AgYW5kIGBpcnFzX3BlbmRpbmdfbWFza2AgYml0bWFwcyBpbiB0aGUgUklTQy1WIEtWTSBhcmNoaXRlY3R1cmUsIHJlcGxhY2luZyBhIGxvY2tsZXNzIGFwcHJvYWNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSB2Q1BVIGludGVycnVwdCBoYW5kbGluZyBsb2dpYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gZnVuY3Rpb25zIHRoYXQgc2V0L3Vuc2V0IGludGVycnVwdHMgYW5kIG1vZGlmeSBDU1JzLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBpbnRlcmFjdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNTo0Mzo1Ni4zMzExMTY5NjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzY0MTAzNjU1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0XCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHRcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzclwiLFxuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc3BpbmxvY2sgdG8gc2VyaWFsaXplIHVwZGF0ZXMgdG8gdGhlIGBpcnFzX3BlbmRpbmdgIGFuZCBgaXJxc19wZW5kaW5nX21hc2tgIGJpdG1hcHMgaW4gdGhlIFJJU0MtViBLVk0gYXJjaGl0ZWN0dXJlLCByZXBsYWNpbmcgYSBsb2NrbGVzcyBhcHByb2FjaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgdkNQVSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGZ1bmN0aW9ucyB0aGF0IHNldC91bnNldCBpbnRlcnJ1cHRzIGFuZCBtb2RpZnkgQ1NScywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgaW50ZXJhY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNTo0Mzo1Ni4zMzExMjk1MzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTA3NDEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJmMzEwYjAyZjU3MTA1OTFhNzc0YTc2NGE3Y2NkNTNmOTAzYWIyYmZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgOCAxNTo0Mzo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCA3NWIwYTk1MWMxYmM2Zi4uOTdlNDI2NDVjYmFiZWUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTIwNywxMyArMjA3LDEzIEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcXG4gXFx0LypcXG4gXFx0ICogVkNQVSBpbnRlcnJ1cHRzXFxuIFxcdCAqXFxuLVxcdCAqIFdlIGhhdmUgYSBsb2NrbGVzcyBhcHByb2FjaCBmb3IgdHJhY2tpbmcgcGVuZGluZyBWQ1BVIGludGVycnVwdHNcXG4tXFx0ICogaW1wbGVtZW50ZWQgdXNpbmcgYXRvbWljIGJpdG9wcy4gVGhlIGlycXNfcGVuZGluZyBiaXRtYXAgcmVwcmVzZW50XFxuLVxcdCAqIHBlbmRpbmcgaW50ZXJydXB0cyB3aGVyZWFzIGlycXNfcGVuZGluZ19tYXNrIHJlcHJlc2VudCBiaXRzIGNoYW5nZWRcXG4tXFx0ICogaW4gaXJxc19wZW5kaW5nLiBPdXIgYXBwcm9hY2ggaXMgbW9kZWxlZCBhcm91bmQgbXVsdGlwbGUgcHJvZHVjZXJcXG4tXFx0ICogYW5kIHNpbmdsZSBjb25zdW1lciBwcm9ibGVtIHdoZXJlIHRoZSBjb25zdW1lciBpcyB0aGUgVkNQVSBpdHNlbGYuXFxuK1xcdCAqIFRoZSBpcnFzX3BlbmRpbmcgYml0bWFwIHJlcHJlc2VudHMgcGVuZGluZyBpbnRlcnJ1cHRzIHdoZXJlYXNcXG4rXFx0ICogaXJxc19wZW5kaW5nX21hc2sgcmVwcmVzZW50cyBiaXRzIGNoYW5nZWQgaW4gaXJxc19wZW5kaW5nLiBVcGRhdGVzXFxuK1xcdCAqIHRvIHRoZXNlIGJpdG1hcHMgYXJlIHNlcmlhbGl6ZWQgc28gdmNwdSBpbnRlcnJ1cHQgc3luYy9mbHVzaCBjYW5ub3RcXG4rXFx0ICogZHJvcCBhIG5ld2x5IGluamVjdGVkIGludGVycnVwdCB3aGlsZSBzeW5jaW5nIGd1ZXN0LXZpc2libGUgSFZJUC5cXG4gXFx0ICovXFxuICNkZWZpbmUgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRU1xcdDY0XFxuK1xcdHJhd19zcGlubG9ja190IGlycXNfcGVuZGluZ19sb2NrO1xcbiBcXHRERUNMQVJFX0JJVE1BUChpcnFzX3BlbmRpbmcsIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpO1xcbiBcXHRERUNMQVJFX0JJVE1BUChpcnFzX3BlbmRpbmdfbWFzaywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9haWEuYyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXFxuaW5kZXggNWVjNTAzMjg4NTU1ZDEuLjgyMWQyY2I2ZDZhNmQ5IDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vYWlhLmNcXG5AQCAtNTAsMTcgKzUwLDIxIEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9haWFfY3NyICpjc3IgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3I7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbWFzaywgdmFsO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4gXFx0aWYgKCFrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRpZiAoUkVBRF9PTkNFKHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0pKSB7XFxuLVxcdFxcdG1hc2sgPSB4Y2hnX2FjcXVpcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0sIDApO1xcbi1cXHRcXHR2YWwgPSBSRUFEX09OQ0UodmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMV0pIFxcdTAwMjYgbWFzaztcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuK1xcdG1hc2sgPSB2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdO1xcbitcXHRpZiAobWFzaykge1xcbitcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdID0gMDtcXG4rXFx0XFx0dmFsID0gdmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMV0gXFx1MDAyNiBtYXNrO1xcbiBcXG4gXFx0XFx0Y3NyLVxcdTAwM2VodmlwaCBcXHUwMDI2PSB+bWFzaztcXG4gXFx0XFx0Y3NyLVxcdTAwM2VodmlwaCB8PSB2YWw7XFxuIFxcdH1cXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcXG4gfVxcbiBcXG4gdm9pZCBrdm1fcmlzY3ZfdmNwdV9haWFfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5AQCAtMjA1LDYgKzIwOSw5IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1X2FpYV9jc3IgKmNzciA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmFpYV9jb250ZXh0Lmd1ZXN0X2NzcjtcXG4gXFx0dW5zaWduZWQgbG9uZyByZWdzX21heCA9IHNpemVvZihzdHJ1Y3Qga3ZtX3Jpc2N2X2FpYV9jc3IpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xcbisjaWZkZWYgQ09ORklHXzMyQklUXFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuKyNlbmRpZlxcbiBcXG4gXFx0aWYgKCFyaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZSh2Y3B1LVxcdTAwM2VhcmNoLmlzYSwgU1NBSUEpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5AQCAtMjE0LDExICsyMjEsMTggQEAgaW50IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0cmVnX251bSA9IGFycmF5X2luZGV4X25vc3BlYyhyZWdfbnVtLCByZWdzX21heCk7XFxuIFxcbiBcXHRpZiAoa3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSkge1xcbi1cXHRcXHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xcbi1cXG4gI2lmZGVmIENPTkZJR18zMkJJVFxcbi1cXHRcXHRpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9BSUFfUkVHKHNpcGgpKVxcbi1cXHRcXHRcXHRXUklURV9PTkNFKHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0sIDApO1xcbitcXHRcXHRpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9BSUFfUkVHKHNpcGgpKSB7XFxuK1xcdFxcdFxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xcbitcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdID0gMDtcXG4rXFx0XFx0XFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIGZsYWdzKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHZhbDtcXG4rXFx0XFx0fVxcbisjZWxzZVxcbitcXHRcXHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xcbiAjZW5kaWZcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jXFxuaW5kZXggYTczNjkwZWRhODRiNWEuLmIwNDczMGNjZDYyY2VkIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuY1xcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuY1xcbkBAIC04MCw2ICs4MCw3IEBAIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl92Y3B1X2NvbnRleHRfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXG4gc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3Jlc2V0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGt2bV9zYmlfcmVzZXQpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0Ym9vbCBsb2FkZWQ7XFxuIFxcbiBcXHQvKipcXG5AQCAtMTA0LDggKzEwNSwxMCBAQCBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wga3ZtX3NiaV9yZXNldClcXG4gXFxuIFxcdGt2bV9yaXNjdl92Y3B1X2FpYV9yZXNldCh2Y3B1KTtcXG4gXFxuK1xcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xcbiBcXHRiaXRtYXBfemVybyh2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XFxuIFxcdGJpdG1hcF96ZXJvKHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2ssIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpO1xcbitcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0a3ZtX3Jpc2N2X3ZjcHVfcG11X3Jlc2V0KHZjcHUpO1xcbiBcXG5AQCAtMTUxLDYgKzE1NCw3IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBcXHQvKiBTZXR1cCBWQ1BVIGhmZW5jZSBxdWV1ZSAqL1xcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5oZmVuY2VfbG9jayk7XFxuK1xcdHJhd19zcGluX2xvY2tfaW5pdChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jayk7XFxuIFxcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5yZXNldF9zdGF0ZS5sb2NrKTtcXG4gXFxuQEAgLTM1MiwxNCArMzU2LDE4IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfY3NyO1xcbiBcXHR1bnNpZ25lZCBsb25nIG1hc2ssIHZhbDtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuLVxcdGlmIChSRUFEX09OQ0UodmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSkpIHtcXG4tXFx0XFx0bWFzayA9IHhjaGdfYWNxdWlyZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSwgMCk7XFxuLVxcdFxcdHZhbCA9IFJFQURfT05DRSh2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ1swXSkgXFx1MDAyNiBtYXNrO1xcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcXG4rXFx0bWFzayA9IHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF07XFxuK1xcdGlmIChtYXNrKSB7XFxuK1xcdFxcdHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF0gPSAwO1xcbitcXHRcXHR2YWwgPSB2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ1swXSBcXHUwMDI2IG1hc2s7XFxuIFxcbiBcXHRcXHRjc3ItXFx1MDAzZWh2aXAgXFx1MDAyNj0gfm1hc2s7XFxuIFxcdFxcdGNzci1cXHUwMDNlaHZpcCB8PSB2YWw7XFxuIFxcdH1cXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdC8qIEZsdXNoIEFJQSBoaWdoIGludGVycnVwdHMgKi9cXG4gXFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX2ZsdXNoX2ludGVycnVwdHModmNwdSk7XFxuQEAgLTM2OCw2ICszNzYsNyBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBodmlwO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCAqdiA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5ndWVzdF9jc3I7XFxuIFxcbkBAIC0zNzYsNiArMzg1LDcgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gXFx0LyogU3luYy11cCBIVklQLlZTU0lQIGJpdCBjaGFuZ2VzIGRvZXMgYnkgR3Vlc3QgKi9cXG4gXFx0aHZpcCA9IG5jc3JfcmVhZChDU1JfSFZJUCk7XFxuK1xcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2di1cXHUwMDNlaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcXG4gXFx0aWYgKChjc3ItXFx1MDAzZWh2aXAgXiBodmlwKSBcXHUwMDI2ICgxVUwgXFx1MDAzY1xcdTAwM2MgSVJRX1ZTX1NPRlQpKSB7XFxuIFxcdFxcdGlmIChodmlwIFxcdTAwMjYgKDFVTCBcXHUwMDNjXFx1MDAzYyBJUlFfVlNfU09GVCkpIHtcXG4gXFx0XFx0XFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KElSUV9WU19TT0ZULFxcbkBAIC0zOTQsNiArNDA0LDcgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHQgICAgIXRlc3RfYW5kX3NldF9iaXQoSVJRX1BNVV9PVkYsIHYtXFx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcXG4gXFx0XFx0XFx0Y2xlYXJfYml0KElSUV9QTVVfT1ZGLCB2LVxcdTAwM2VpcnFzX3BlbmRpbmcpO1xcbiBcXHR9XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2LVxcdTAwM2VpcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0LyogU3luYy11cCBBSUEgaGlnaCBpbnRlcnJ1cHRzICovXFxuIFxcdGt2bV9yaXNjdl92Y3B1X2FpYV9zeW5jX2ludGVycnVwdHModmNwdSk7XFxuQEAgLTQwNCw2ICs0MTUsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBpbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFdlIG9ubHkgYWxsb3cgVlMtbW9kZSBzb2Z0d2FyZSwgdGltZXIsIGFuZCBleHRlcm5hbFxcbiBcXHQgKiBpbnRlcnJ1cHRzIHdoZW4gaXJxIGlzIG9uZSBvZiB0aGUgbG9jYWwgaW50ZXJydXB0c1xcbkBAIC00MTYsOSArNDI5LDEwIEBAIGludCBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSlcXG4gXFx0ICAgIGlycSAhPSBJUlFfUE1VX09WRilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcXG4gXFx0c2V0X2JpdChpcnEsIHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nKTtcXG4tXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIFxcdHNldF9iaXQoaXJxLCB2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrKTtcXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdGt2bV92Y3B1X2tpY2sodmNwdSk7XFxuIFxcbkBAIC00MjcsNiArNDQxLDggQEAgaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxcbiBcXG4gaW50IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFdlIG9ubHkgYWxsb3cgVlMtbW9kZSBzb2Z0d2FyZSwgdGltZXIsIGNvdW50ZXIgb3ZlcmZsb3cgYW5kIGV4dGVybmFsXFxuIFxcdCAqIGludGVycnVwdHMgd2hlbiBpcnEgaXMgb25lIG9mIHRoZSBsb2NhbCBpbnRlcnJ1cHRzXFxuQEAgLTQzOSw5ICs0NTUsMTAgQEAgaW50IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXFxuIFxcdCAgICBpcnEgIT0gSVJRX1BNVV9PVkYpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuIFxcdGNsZWFyX2JpdChpcnEsIHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nKTtcXG4tXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIFxcdHNldF9iaXQoaXJxLCB2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrKTtcXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXFxuaW5kZXggYmI5MjBlODkyM2M5MzAuLmNiYTM2ODI5NDRiNjk0IDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmNcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXFxuQEAgLTI5OCw2ICsyOTgsNyBAQCBzdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfY3NyO1xcbiBcXHR1bnNpZ25lZCBsb25nIHJlZ3NfbWF4ID0gc2l6ZW9mKHN0cnVjdCBrdm1fcmlzY3ZfY3NyKSAvIHNpemVvZih1bnNpZ25lZCBsb25nKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdGlmIChyZWdfbnVtIFxcdTAwM2U9IHJlZ3NfbWF4KVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5AQCAtMzA5LDEwICszMTAsMTQgQEAgc3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRyZWdfdmFsIFxcdTAwM2NcXHUwMDNjPSBWU0lQX1RPX0hWSVBfU0hJRlQ7XFxuIFxcdH1cXG4gXFxuLVxcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSByZWdfdmFsO1xcbi1cXG4tXFx0aWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfUkVHKHNpcCkpXFxuLVxcdFxcdFdSSVRFX09OQ0UodmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSwgMCk7XFxuK1xcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX1JFRyhzaXApKSB7XFxuK1xcdFxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gcmVnX3ZhbDtcXG4rXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSA9IDA7XFxuK1xcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSByZWdfdmFsO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNTo0Mzo1Ni45NDA5NjkzOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzcwMzExNzI1MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdFwiLFxuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0XCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNwaW5sb2NrIHRvIHNlcmlhbGl6ZSB1cGRhdGVzIHRvIHRoZSBgaXJxc19wZW5kaW5nYCBhbmQgYGlycXNfcGVuZGluZ19tYXNrYCBiaXRtYXBzIGluIHRoZSBSSVNDLVYgS1ZNIGFyY2hpdGVjdHVyZSwgcmVwbGFjaW5nIGEgbG9ja2xlc3MgYXBwcm9hY2guIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIHZDUFUgaW50ZXJydXB0IGhhbmRsaW5nIGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBmdW5jdGlvbnMgdGhhdCBzZXQvdW5zZXQgaW50ZXJydXB0cyBhbmQgbW9kaWZ5IENTUnMsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGludGVyYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyZjMxMGIwMmY1NzEwNTkxYTc3NGE3NjRhN2NjZDUzZjkwM2FiMmJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAxNTo0Mzo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggNzViMGE5NTFjMWJjNmYuLjk3ZTQyNjQ1Y2JhYmVlIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0yMDcsMTMgKzIwNywxMyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XG4gXHQvKlxuIFx0ICogVkNQVSBpbnRlcnJ1cHRzXG4gXHQgKlxuLVx0ICogV2UgaGF2ZSBhIGxvY2tsZXNzIGFwcHJvYWNoIGZvciB0cmFja2luZyBwZW5kaW5nIFZDUFUgaW50ZXJydXB0c1xuLVx0ICogaW1wbGVtZW50ZWQgdXNpbmcgYXRvbWljIGJpdG9wcy4gVGhlIGlycXNfcGVuZGluZyBiaXRtYXAgcmVwcmVzZW50XG4tXHQgKiBwZW5kaW5nIGludGVycnVwdHMgd2hlcmVhcyBpcnFzX3BlbmRpbmdfbWFzayByZXByZXNlbnQgYml0cyBjaGFuZ2VkXG4tXHQgKiBpbiBpcnFzX3BlbmRpbmcuIE91ciBhcHByb2FjaCBpcyBtb2RlbGVkIGFyb3VuZCBtdWx0aXBsZSBwcm9kdWNlclxuLVx0ICogYW5kIHNpbmdsZSBjb25zdW1lciBwcm9ibGVtIHdoZXJlIHRoZSBjb25zdW1lciBpcyB0aGUgVkNQVSBpdHNlbGYuXG4rXHQgKiBUaGUgaXJxc19wZW5kaW5nIGJpdG1hcCByZXByZXNlbnRzIHBlbmRpbmcgaW50ZXJydXB0cyB3aGVyZWFzXG4rXHQgKiBpcnFzX3BlbmRpbmdfbWFzayByZXByZXNlbnRzIGJpdHMgY2hhbmdlZCBpbiBpcnFzX3BlbmRpbmcuIFVwZGF0ZXNcbitcdCAqIHRvIHRoZXNlIGJpdG1hcHMgYXJlIHNlcmlhbGl6ZWQgc28gdmNwdSBpbnRlcnJ1cHQgc3luYy9mbHVzaCBjYW5ub3RcbitcdCAqIGRyb3AgYSBuZXdseSBpbmplY3RlZCBpbnRlcnJ1cHQgd2hpbGUgc3luY2luZyBndWVzdC12aXNpYmxlIEhWSVAuXG4gXHQgKi9cbiAjZGVmaW5lIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVNcdDY0XG4rXHRyYXdfc3BpbmxvY2tfdCBpcnFzX3BlbmRpbmdfbG9jaztcbiBcdERFQ0xBUkVfQklUTUFQKGlycXNfcGVuZGluZywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XG4gXHRERUNMQVJFX0JJVE1BUChpcnFzX3BlbmRpbmdfbWFzaywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vYWlhLmMgYi9hcmNoL3Jpc2N2L2t2bS9haWEuY1xuaW5kZXggNWVjNTAzMjg4NTU1ZDEuLjgyMWQyY2I2ZDZhNmQ5IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vYWlhLmNcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXG5AQCAtNTAsMTcgKzUwLDIxIEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdV9haWFfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guYWlhX2NvbnRleHQuZ3Vlc3RfY3NyO1xuIFx0dW5zaWduZWQgbG9uZyBtYXNrLCB2YWw7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKCFrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSkpIHtcbi1cdFx0bWFzayA9IHhjaGdfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0sIDApO1xuLVx0XHR2YWwgPSBSRUFEX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1sxXSkgXHUwMDI2IG1hc2s7XG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4rXHRtYXNrID0gdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdO1xuK1x0aWYgKG1hc2spIHtcbitcdFx0dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdID0gMDtcbitcdFx0dmFsID0gdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1sxXSBcdTAwMjYgbWFzaztcbiBcbiBcdFx0Y3NyLVx1MDAzZWh2aXBoIFx1MDAyNj0gfm1hc2s7XG4gXHRcdGNzci1cdTAwM2VodmlwaCB8PSB2YWw7XG4gXHR9XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiB9XG4gXG4gdm9pZCBrdm1fcmlzY3ZfdmNwdV9haWFfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC0yMDUsNiArMjA5LDkgQEAgaW50IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfYWlhX2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmFpYV9jb250ZXh0Lmd1ZXN0X2NzcjtcbiBcdHVuc2lnbmVkIGxvbmcgcmVnc19tYXggPSBzaXplb2Yoc3RydWN0IGt2bV9yaXNjdl9haWFfY3NyKSAvIHNpemVvZih1bnNpZ25lZCBsb25nKTtcbisjaWZkZWYgQ09ORklHXzMyQklUXG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuKyNlbmRpZlxuIFxuIFx0aWYgKCFyaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZSh2Y3B1LVx1MDAzZWFyY2guaXNhLCBTU0FJQSkpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuQEAgLTIxNCwxMSArMjIxLDE4IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRyZWdfbnVtID0gYXJyYXlfaW5kZXhfbm9zcGVjKHJlZ19udW0sIHJlZ3NfbWF4KTtcbiBcbiBcdGlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKSB7XG4tXHRcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7XG4tXG4gI2lmZGVmIENPTkZJR18zMkJJVFxuLVx0XHRpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9BSUFfUkVHKHNpcGgpKVxuLVx0XHRcdFdSSVRFX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdLCAwKTtcbitcdFx0aWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfQUlBX1JFRyhzaXBoKSkge1xuK1x0XHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbitcdFx0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xuK1x0XHRcdHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSA9IDA7XG4rXHRcdFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLFxuK1x0XHRcdFx0XHRcdCAgIGZsYWdzKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xuK1x0XHR9XG4rI2Vsc2VcbitcdFx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHZhbDtcbiAjZW5kaWZcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92Y3B1LmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1LmNcbmluZGV4IGE3MzY5MGVkYTg0YjVhLi5iMDQ3MzBjY2Q2MmNlZCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jXG5AQCAtODAsNiArODAsNyBAQCBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfdmNwdV9jb250ZXh0X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wga3ZtX3NiaV9yZXNldClcbiB7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0Ym9vbCBsb2FkZWQ7XG4gXG4gXHQvKipcbkBAIC0xMDQsOCArMTA1LDEwIEBAIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBrdm1fc2JpX3Jlc2V0KVxuIFxuIFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX3Jlc2V0KHZjcHUpO1xuIFxuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFx0Yml0bWFwX3plcm8odmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XG4gXHRiaXRtYXBfemVybyh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2ssIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpO1xuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXG4gXHRrdm1fcmlzY3ZfdmNwdV9wbXVfcmVzZXQodmNwdSk7XG4gXG5AQCAtMTUxLDYgKzE1NCw3IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHQvKiBTZXR1cCBWQ1BVIGhmZW5jZSBxdWV1ZSAqL1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmhmZW5jZV9sb2NrKTtcbitcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2spO1xuIFxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnJlc2V0X3N0YXRlLmxvY2spO1xuIFxuQEAgLTM1MiwxNCArMzU2LDE4IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2NzcjtcbiBcdHVuc2lnbmVkIGxvbmcgbWFzaywgdmFsO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdGlmIChSRUFEX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdKSkge1xuLVx0XHRtYXNrID0geGNoZ19hY3F1aXJlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSwgMCk7XG4tXHRcdHZhbCA9IFJFQURfT05DRSh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzBdKSBcdTAwMjYgbWFzaztcbitcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbitcdG1hc2sgPSB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF07XG4rXHRpZiAobWFzaykge1xuK1x0XHR2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF0gPSAwO1xuK1x0XHR2YWwgPSB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzBdIFx1MDAyNiBtYXNrO1xuIFxuIFx0XHRjc3ItXHUwMDNlaHZpcCBcdTAwMjY9IH5tYXNrO1xuIFx0XHRjc3ItXHUwMDNlaHZpcCB8PSB2YWw7XG4gXHR9XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiBcbiBcdC8qIEZsdXNoIEFJQSBoaWdoIGludGVycnVwdHMgKi9cbiBcdGt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzKHZjcHUpO1xuQEAgLTM2OCw2ICszNzYsNyBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGh2aXA7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IGt2bV92Y3B1X2FyY2ggKnYgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2g7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfY3NyO1xuIFxuQEAgLTM3Niw2ICszODUsNyBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHQvKiBTeW5jLXVwIEhWSVAuVlNTSVAgYml0IGNoYW5nZXMgZG9lcyBieSBHdWVzdCAqL1xuIFx0aHZpcCA9IG5jc3JfcmVhZChDU1JfSFZJUCk7XG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2di1cdTAwM2VpcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFx0aWYgKChjc3ItXHUwMDNlaHZpcCBeIGh2aXApIFx1MDAyNiAoMVVMIFx1MDAzY1x1MDAzYyBJUlFfVlNfU09GVCkpIHtcbiBcdFx0aWYgKGh2aXAgXHUwMDI2ICgxVUwgXHUwMDNjXHUwMDNjIElSUV9WU19TT0ZUKSkge1xuIFx0XHRcdGlmICghdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcbkBAIC0zOTQsNiArNDA0LDcgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQgICAgIXRlc3RfYW5kX3NldF9iaXQoSVJRX1BNVV9PVkYsIHYtXHUwMDNlaXJxc19wZW5kaW5nX21hc2spKVxuIFx0XHRcdGNsZWFyX2JpdChJUlFfUE1VX09WRiwgdi1cdTAwM2VpcnFzX3BlbmRpbmcpO1xuIFx0fVxuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2di1cdTAwM2VpcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFxuIFx0LyogU3luYy11cCBBSUEgaGlnaCBpbnRlcnJ1cHRzICovXG4gXHRrdm1fcmlzY3ZfdmNwdV9haWFfc3luY19pbnRlcnJ1cHRzKHZjcHUpO1xuQEAgLTQwNCw2ICs0MTUsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4gXHQvKlxuIFx0ICogV2Ugb25seSBhbGxvdyBWUy1tb2RlIHNvZnR3YXJlLCB0aW1lciwgYW5kIGV4dGVybmFsXG4gXHQgKiBpbnRlcnJ1cHRzIHdoZW4gaXJxIGlzIG9uZSBvZiB0aGUgbG9jYWwgaW50ZXJydXB0c1xuQEAgLTQxNiw5ICs0MjksMTAgQEAgaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIFx0ICAgIGlycSAhPSBJUlFfUE1VX09WRilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXHRzZXRfYml0KGlycSwgdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZyk7XG4tXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdHNldF9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2spO1xuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXG4gXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIFxuQEAgLTQyNyw2ICs0NDEsOCBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXG4gXG4gaW50IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbiBcdC8qXG4gXHQgKiBXZSBvbmx5IGFsbG93IFZTLW1vZGUgc29mdHdhcmUsIHRpbWVyLCBjb3VudGVyIG92ZXJmbG93IGFuZCBleHRlcm5hbFxuIFx0ICogaW50ZXJydXB0cyB3aGVuIGlycSBpcyBvbmUgb2YgdGhlIGxvY2FsIGludGVycnVwdHNcbkBAIC00MzksOSArNDU1LDEwIEBAIGludCBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIFx0ICAgIGlycSAhPSBJUlFfUE1VX09WRilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXHRjbGVhcl9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nKTtcbi1cdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuIFx0c2V0X2JpdChpcnEsIHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFzayk7XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuY1xuaW5kZXggYmI5MjBlODkyM2M5MzAuLmNiYTM2ODI5NDRiNjk0IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuY1xuQEAgLTI5OCw2ICsyOTgsNyBAQCBzdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2NzcjtcbiBcdHVuc2lnbmVkIGxvbmcgcmVnc19tYXggPSBzaXplb2Yoc3RydWN0IGt2bV9yaXNjdl9jc3IpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGlmIChyZWdfbnVtIFx1MDAzZT0gcmVnc19tYXgpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuQEAgLTMwOSwxMCArMzEwLDE0IEBAIHN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0cmVnX3ZhbCBcdTAwM2NcdTAwM2M9IFZTSVBfVE9fSFZJUF9TSElGVDtcbiBcdH1cbiBcbi1cdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSByZWdfdmFsO1xuLVxuLVx0aWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfUkVHKHNpcCkpXG4tXHRcdFdSSVRFX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdLCAwKTtcbitcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX1JFRyhzaXApKSB7XG4rXHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbitcdFx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHJlZ192YWw7XG4rXHRcdHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSA9IDA7XG4rXHRcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuK1x0fSBlbHNlIHtcbitcdFx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHJlZ192YWw7XG4rXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNTo0Mzo1Ni45NDA5NzA4N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzY3NjYzMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUklTQy1WIEtWTSBTcGlubG9jayBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgaW50cm9kdWNpbmcgYSBgcmF3X3NwaW5sb2NrX3RgIGNhbGxlZCBgaXJxc19wZW5kaW5nX2xvY2tgIHdpdGhpbiBgc3RydWN0IGt2bV92Y3B1X2FyY2hgIHNwZWNpZmljYWxseSBmb3IgUklTQy1WIEtWTS4gRXNzZW50aWFsbHksIGl0J3Mgc3dhcHBpbmcgb3V0IHRoZSBleGlzdGluZyBsb2NrbGVzcyBhcHByb2FjaCwgd2hpY2ggcmVsaWVkIG9uIHRoaW5ncyBsaWtlIGB4Y2hnX2FjcXVpcmVgIGFuZCBtZW1vcnkgYmFycmllcnMgYmVmb3JlIGF0b21pYyBvcGVyYXRpb25zLCBmb3IgYSBtb3JlIHRyYWRpdGlvbmFsIHNwaW5sb2NrLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgYXJjaGl0ZWN0dXJhbCBzaGlmdC4gVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIFJJU0MtViBLVk0gYXJjaGl0ZWN0dXJlLCBzbyB3ZSBuZWVkIHRvIGJlIHZlcnkgdGhvcm91Z2guXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC9yaXNjdi9rdm0vYWlhLmNgLCBgYXJjaC9yaXNjdi9rdm0vdmNwdS5jYCwgYW5kIGBhcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jYCwgbWVhbmluZyBpdCdzIGxpa2VseSBpbXBhY3RpbmcgY3JpdGljYWwgYXJlYXMgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaGFuZGxpbmcgYW5kIHZDUFUgbWFuYWdlbWVudC4gV2UgbmVlZCB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciwgZXZlbiB3b3JzZSwgaW50cm9kdWNlIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgZGVzcGl0ZSB0aGUgaW50ZW50IG9mIHRoZSBsb2NrLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQncyBSSVNDLVYgS1ZNLCBzbyBjbGVhcmx5IGBDT05GSUdfS1ZNYCBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBSSVNDLVYuIEJ1dCBJIHNob3VsZCBsb29rIGNsb3NlciBhdCBhbnkgUklTQy1WIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zLiBUaGUgZGlmZiBtZW50aW9ucyBgQ09ORklHXzMyQklUYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gV2hpbGUgUklTQy1WIEtWTSBpcyBwcmltYXJpbHkgZm9jdXNlZCBvbiA2NC1iaXQgc3lzdGVtcywgdGhlIG1lbnRpb24gb2YgMzItYml0IHN1Z2dlc3RzIHRoZXJlIG1pZ2h0IGJlIHNvbWUgY29uZGl0aW9uYWwgbG9naWMgYXQgcGxheS4gTGV0IG1lIHB1bGwgdXAgYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSByZWxhdGVkIGNvbmRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIG9yIGlmIGBDT05GSUdfMzJCSVRgIGl0c2VsZiBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIHNwaW5sb2NrIGlzIGJlaW5nIGNvbmRpdGlvbmFsbHkgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ0OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ0OjMxLjMwODYzNjM3MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjU4MDA3ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6NDQ6MzEuNzM0NDQ3MjQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM4NDE4ODU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIHZDUFUgSW50ZXJydXB0IEhhbmRsaW5nIGZvciBGdXp6aW5nKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgYXJlYSB3ZSdyZSBsb29raW5nIGF0IGhlcmUgaXMgS1ZNIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGluZyB0byB0aGUgUklTQy1WIHZDUFUuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIEFyZSB0aGVyZSBvdGhlciBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoZSBLVk0gc2V0dXAgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IExldCBtZSB0aGluay5cblxuUmlnaHQsIEkndmUgZ290IGEgbGlzdCBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zOiBga3ZtX3Jpc2N2X3ZjcHVfYWlhX2ZsdXNoX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JgLCBga3ZtX3Jpc2N2X3Jlc2V0X3ZjcHVgLCBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLCBga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0c2AsIGBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdGAsIGBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHRgLCBhbmQgYGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcmAuIFRoZXNlIGFyZSBrZXkgcGxheWVycyBpbiBob3cgS1ZNIGhhbmRsZXMgaW50ZXJydXB0cyB3aXRoaW4gdGhlIFJJU0MtViB2Q1BVLiBDb25zaWRlcmluZyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaGFuZGxpbmcsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuXG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBpc3N1ZXMgaW4gaW50ZXJydXB0IG1hbmFnZW1lbnQsIEkndmUgZ290IHRvIHByaW9yaXRpemUgdGhlIGtleSBzeW1ib2xzIGZvciBmdXp6aW5nLiBUaGUgbGlzdCBzaG91bGQgYmU6IGBrdm1fcmlzY3ZfdmNwdV9haWFfZmx1c2hfaW50ZXJydXB0c2AsIGBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcmAsIGBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0c2AsIGBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0YCwgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGAsIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyYC5cblxuSG9sZCBvbi4gYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzYCBhcmUgaW50ZXJlc3RpbmcuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBwYXRocyB0byBzZWUgaG93IGZyZXF1ZW50bHkgdGhleSBhcmUgY2FsbGVkLiBNeSBndXQgdGVsbHMgbWUgdGhlc2UgY291bGQgYmUgaG90LXBhdGggZnVuY3Rpb25zLCBwb3NzaWJseSBjYWxsZWQgb24gZXZlcnkgVk0gZXhpdCBvciBlbnRyeSwgbWFraW5nIHRoZW0gcGFydGljdWxhcmx5IGNydWNpYWwgZm9yIGZ1enppbmcuIExldCdzIGRpZyBpbnRvIHRoYXQgY2FsbCBncmFwaCB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjM5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ0OjM4LjExODYzODk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2Nzg2ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz0zNTA9aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMzU0LVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzozNTU6dm9pZCBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMzU2LXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz04NDY9aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy05MzEtXFx0XFx0ICovXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjkzMjpcXHRcXHRrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzKHZjcHUpO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy05MzMtXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jPTI3Mz1zdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfZ2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jLTI4NS1cXHRpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9SRUcoc2lwKSkge1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM6Mjg2OlxcdFxcdGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHModmNwdSk7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYy0yODctXFx0XFx0Km91dF92YWwgPSAoY3NyLVxcdTAwM2VodmlwIFxcdTAwM2VcXHUwMDNlIFZTSVBfVE9fSFZJUF9TSElGVCkgXFx1MDAyNiBWU0lQX1ZBTElEX01BU0s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ0OjM4LjE4NTQzNDc1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODI4NjU4ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludGVycnVwdCBTeW5jaHJvbml6YXRpb24gaW4gdGhlIFJJU0MtViBLVk0gdkNQVSBSdW4gTG9vcCoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaW50ZXJydXB0IGhhbmRsaW5nIHdpdGhpbiB0aGUgS1ZNIFJJU0MtViBhcmNoaXRlY3R1cmUuIEknbSByZWNhbGxpbmcgdGhhdCBga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0c2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgd2l0aGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgdkNQVSdzIGV4ZWN1dGlvbiBjeWNsZSwgc28gaXQgbWFrZXMgc2Vuc2UgdGhhdCBpbnRlcnJ1cHQgZmx1c2hpbmcgd291bGQgaGFwcGVuIHRoZXJlLCBlbnN1cmluZyBhIGNsZWFuIHNsYXRlIGJlZm9yZSBlYWNoIHJ1bi4gVGhlIHF1ZXN0aW9uIEknbSB0dXJuaW5nIG92ZXIgbm93LCB0aG91Z2gsIGlzIGFib3V0IGBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHNgLiBXaGVyZSBkb2VzICp0aGF0KiBmaXQgaW50byB0aGUgcGljdHVyZT8gV2hhdCdzIGl0cyByb2xlIGFuZCByZWxhdGlvbnNoaXAgdG8gdGhlIGZsdXNoIGZ1bmN0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgc2VxdWVuY2Ugb2YgZXZlbnRzIHRvIG1ha2Ugc3VyZSBpbnRlcnJ1cHQgaW5qZWN0aW9uIGFuZCBoYW5kbGluZyBhcmUgaW1wbGVtZW50ZWQgY29ycmVjdGx5IGFuZCBlZmZpY2llbnRseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYxNCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ0OjQxLjc2ODMwMzAzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNzQ1MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTM1NT12b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTM3NS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6Mzc2OnZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMzc3LXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz04NDY9aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy05NjQtXFx0XFx0LyogU3luY3VwIGludGVycnVwdHMgc3RhdGUgd2l0aCBIVyAqL1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzo5NjU6XFx0XFx0a3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHZjcHUpO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy05NjYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ0OjQxLjgzMTA1NDgyN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTg1ODA0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQW5hbHl6aW5nIEtWTSBIb3QtUGF0aCBGdW5jdGlvbiBDYWxscyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IHBlcmZvcm1hbmNlLWNyaXRpY2FsIHNlY3Rpb25zIG9mIHRoZSBLVk0gY29kZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gUklTQy1WIHZpcnR1YWxpemF0aW9uLiBUaGUgb2JzZXJ2YXRpb24gYWJvdXQgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCBiZWluZyBhIGhvdC1wYXRoIGZ1bmN0aW9uIGlzIHNwb3Qgb24sIHRoYXQncyBleHBlY3RlZC4gSXQncyB0aGUgY29yZSBsb29wIHdoZXJlIHRoZSBndWVzdCdzIGV4ZWN1dGlvbiBpcyBlbXVsYXRlZC4gVGhlIGZhY3QgdGhhdCB3ZSdyZSB6b29taW5nIGluIG9uIGl0IHN1Z2dlc3RzIHdlIGFyZSBsb29raW5nIGZvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIHdpdGhpbiB0aGF0IGNyaXRpY2FsIHNlY3Rpb24uXG5cblRoZSBtb3JlIGludGVyZXN0aW5nIHF1ZXN0aW9uIG5vdywgaG93ZXZlciwgaXMgd2hldGhlciBga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdGAgYW5kIGBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHRgIGFyZSBhbHNvIGhvdC1wYXRoIGZ1bmN0aW9ucy4gSW50ZXJydXB0IGhhbmRsaW5nIGlzIGFsd2F5cyBhIGNyaXRpY2FsIGFyZWEgaW4gdmlydHVhbGl6YXRpb24sIHNpbmNlIGZyZXF1ZW50LCBlZmZpY2llbnQgaGFuZGxpbmcgaXMgaW1wb3J0YW50LCBhbmQgdGhlc2UgcGFydGljdWxhciBmdW5jdGlvbnMgYXJlIGNsZWFybHkgaW52b2x2ZWQgaW4gbWFuYWdpbmcgaW50ZXJydXB0IGluamVjdGlvbiBhbmQgY2xlYXJpbmcsIHdoaWNoIGNvdWxkIGRpcmVjdGx5IGltcGFjdCBndWVzdCByZXNwb25zaXZlbmVzcyBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZS5cblxuV2UgbmVlZCB0byBjb25zaWRlciBob3cgZnJlcXVlbnRseSB0aG9zZSBpbnRlcnJ1cHQgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIHRoZSBjb21wbGV4aXR5IG9mIHRoZWlyIG9wZXJhdGlvbnMsIGFuZCB0aGVpciBpbXBhY3Qgb24gdGhlIHZDUFUncyBleGVjdXRpb24gZmxvdy4gVGhleSBjb3VsZCBiZSB0aGUgc291cmNlIG9mIHNpZ25pZmljYW50IG92ZXJoZWFkLCBvciB0aGV5IGNvdWxkIGJlIG9wdGltaXplZCBxdWl0ZSB3ZWxsLiBJdCdzIGRlZmluaXRlbHkgYW4gYXJlYSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTc1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6NDQ6NDYuMjI5NjM3ODRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNDE4MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jPTYxND1zdGF0aWMgdm9pZCBpbXNpY19zd2ZpbGVfZXh0aXJxX3VwZGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYy02MjktXFx0ICAgIGltc2ljX21yaWZfdG9wZWkobXJpZiwgaW1zaWMtXFx1MDAzZW5yX2VpeCwgaW1zaWMtXFx1MDAzZW5yX21zaXMpKVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jOjYzMDpcXHRcXHRrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9WU19FWFQpO1xcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jLTYzMS1cXHRlbHNlXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM9MjQ5PWxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTI2MS1cXHRcXHRpZiAoaXJxLmlycSA9PSBLVk1fSU5URVJSVVBUX1NFVClcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6MjYyOlxcdFxcdFxcdHJldHVybiBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9WU19FWFQpO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0yNjMtXFx0XFx0ZWxzZVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTM3Nj12b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtNDE1LVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzo0MTY6aW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy00MTcte1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYz0yOTM9c3RhdGljIHZvaWQga3ZtX3Jpc2N2X3BtdV9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqcGVyZl9ldmVudCxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmMtMzI4LVxcdHNldF9iaXQocG1jLVxcdTAwM2VpZHgsIGt2cG11LVxcdTAwM2VwbWNfb3ZlcmZsb3duKTtcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jOjMyOTpcXHRrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9QTVVfT1ZGKTtcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jLTMzMC1cXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3JlcGxhY2UuYz00NT1zdGF0aWMgaW50IGt2bV9zYmlfZXh0X2lwaV9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bixcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3JlcGxhY2UuYy03MS1cXHRcXHR9XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfcmVwbGFjZS5jOjcyOlxcdFxcdHJldCA9IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodG1wLCBJUlFfVlNfU09GVCk7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfcmVwbGFjZS5jLTczLVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmM9MTY9c3RhdGljIGludCBrdm1fc2JpX2V4dF92MDFfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4sXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYy01OS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYzo2MDpcXHRcXHRcXHRyZXQgPSBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHJ2Y3B1LCBJUlFfVlNfU09GVCk7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmMtNjEtXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmM9NDM9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGt2bV9yaXNjdl92Y3B1X2hydGltZXJfZXhwaXJlZChzdHJ1Y3QgaHJ0aW1lciAqaClcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYy01Ni1cXHR0LVxcdTAwM2VuZXh0X3NldCA9IGZhbHNlO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYzo1NzpcXHRrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9WU19USU1FUik7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jLTU4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNTo0NDo0Ni4yOTEwNjI1MjdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ5Mzk4ODg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBJbnRlcnJ1cHRzIGFuZCBDU1IgTWFuaXB1bGF0aW9uIGluIEtWTS9SSVNDLVYqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gbWFuYWdpbmcgaW50ZXJydXB0cyBhbmQgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVycyAoQ1NScykgd2l0aGluIHRoZSBLVk0vUklTQy1WIGVudmlyb25tZW50LiBTcGVjaWZpY2FsbHksIGBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0YCBzZWVtcyB0byBiZSB0aGUgY2VudHJhbCBmdW5jdGlvbiBmb3IgKnNldHRpbmcqIGludGVycnVwdHMg4oCTIGl0J3MgdHJpZ2dlcmVkIGJ5IFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCAoUE1VKSBvdmVyZmxvd3MsIHRpbWVyIGV4cGlyYXRpb25zLCBJbnRlci1Qcm9jZXNzb3IgSW50ZXJydXB0cyAoSVBJcyksIGFuZCB0aHJvdWdoIGlvY3RsIGNhbGxzLiBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHJlc3BvbnNpYmxlIGZvciAqY2xlYXJpbmcqIGludGVycnVwdHMsIGNvbWluZyBpbnRvIHBsYXkgd2l0aCBpb2N0bCBhbmQgdGltZXJzLlxuXG5UaGVuLCBmb3IgQ1NSIG1hbmlwdWxhdGlvbiwgd2UgaGF2ZSBga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyYCDigJMgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBpb2N0bCBvcGVyYXRpb25zIHZpYSBgc2V0X29uZV9yZWdgIGFuZCBpcyBsaWtlbHkgdXNlZCBmb3Igc2V0dGluZyBnZW5lcmFsLXB1cnBvc2UgQ1NScy4gQW5kIGZpbmFsbHksIHRoZXJlJ3MgYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYCwgYWdhaW4gZHJpdmVuIGJ5IGlvY3RsJ3MgYHNldF9vbmVfcmVnYCB0byBtYW5hZ2UgQ1NScyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKS5cblxuU28sIGdpdmVuIHRoaXMgY2FsbCBncmFwaCBhbmFseXNpcywgdGhlIGNyaXRpY2FsIGFyZWFzIEkgbmVlZCB0byB6b29tIGluIG9uIGFyZSB0aGVzZSBmb3VyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGludGVycnVwdHMgYXJlIGluamVjdGVkIGFuZCBjbGVhcmVkLCBhbmQgaG93IENTUnMsIGVzcGVjaWFsbHkgdGhlIEFJQS1zcGVjaWZpYyBvbmVzLCBhcmUgbW9kaWZpZWQuIE15IGZvY3VzIG5vdyBpcyBvbiBga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JgIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyYCB0byB1bmRlcnN0YW5kIHRoZSBDU1Igc2V0IG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MzUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6NDQ6NTEuNzg1MDU0NjI0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDkzNzM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vYWlhLmM9MTg1PWludCBrdm1fcmlzY3ZfdmNwdV9haWFfZ2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWEuYy0yMDUtXFxuYXJjaC9yaXNjdi9rdm0vYWlhLmM6MjA2OmludCBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9yaXNjdi9rdm0vYWlhLmMtMjA3LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIHJlZ19udW0sXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jPTQwMj1zdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X3NldF9yZWdfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtNDI1LVxcdGNhc2UgS1ZNX1JFR19SSVNDVl9DU1JfQUlBOlxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM6NDI2OlxcdFxcdHJjID0ga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3IodmNwdSwgcmVnX251bSwgcmVnX3ZhbCk7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYy00MjctXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ0OjUxLjg0NTk5OTUxMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjU3NjgwMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUG90ZW50aWFsOiBBIFJJU0MtViBLVk0gRGl2ZSoqXG5cbk9rYXksIHNvIHRoZSBga3ZtX3Jpc2N2X3ZjcHVfc2V0X3JlZ19jc3JgIGZ1bmN0aW9uLCBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfb25lX3JlZ2AsIHByZXNlbnRzIGEgcGVyZmVjdCBlbnRyeSBwb2ludCBmb3IgZnV6emluZy4gVGhlIHBvdGVudGlhbCBpcyBkZWZpbml0ZWx5IHRoZXJlLiBJIGNhbiBzZWUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgY2FsbCBjaGFpbiBhbmQgaG93IHRoaXMgY291bGQgYmUgZXhwbG9pdGVkIHRvIGZpbmQgc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBlbnZpcm9ubWVudC4gQXJlIHRoZXJlIGFueSBvdGhlciByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0aGF0IHdvdWxkIGltcGFjdCBvdXIgYWJpbGl0eSB0byBmdXp6IGVmZmVjdGl2ZWx5PyBJIHNhdyBgQ09ORklHXzMyQklUYCBtZW50aW9uZWQgaW4gYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYCwgYnV0IHRoZSBSSVNDLVYgS1ZNIGltcGxlbWVudGF0aW9uIGlzIGxhcmdlbHkgNjQtYml0LCBzbyBzcGVjaWZ5aW5nIGBLVk1gIHNob3VsZCBiZSBzdWZmaWNpZW50LCByYXRoZXIgdGhhbiBhbHNvIHNwZWNpZnlpbmcgYENPTkZJR18zMkJJVGAuXG5cbkFoLCByaWdodC4gYENPTkZJR18zMkJJVGAgaXMgYW4gKmFyY2hpdGVjdHVyZSogY29uZmlndXJhdGlvbiwgbm90IHNvbWV0aGluZyBJIG5lZWQgdG8gZXhwbGljaXRseSBzZXQgYXQgdGhpcyBsZXZlbC4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0IHBhcnRpY3VsYXIgb25lLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIHBlcnRpbmVudCBjb25maWd1cmF0aW9ucyB0byBjb25zaWRlci4gVGltZSB0byBnbyBiYWNrIHRvIHRoZSBzb3VyY2UgYW5kIGV4YW1pbmUgYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgIGFnYWluLiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6NDQ6NTcuNTAzNjgzMzM2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzg0NTQ3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL0tjb25maWc9Nj1zb3VyY2UgXFxcInZpcnQva3ZtL0tjb25maWdcXFwiXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy03LVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy05LVxcdGJvb2wgXFxcIlZpcnR1YWxpemF0aW9uXFxcIlxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNTo0NDo1Ny44ODIxNDUwMzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE2MTkwMjg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIFJJU0MtViBJbnRlcnJ1cHQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBLVk1gIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIHBsYXkgaGVyZS4gTGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHVuZGVyc3RhbmQgdGhlIGNvcmUgc3ltYm9scyByZWxhdGVkIHRvIGludGVycnVwdCBoYW5kbGluZy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZXNlIGZ1bmN0aW9uczogYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgLCBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCwgYGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcmAsIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JgLlxuXG5Ob3csIGNvbnNpZGVyaW5nIG15IGV4cGVyaWVuY2UgaW4gdGhpcyBzcGFjZSwgdGhlc2UgYXJlbid0IHR5cGljYWxseSBob3QtcGF0aCBmdW5jdGlvbnMuIFRoZXkncmUgdXN1YWxseSB0cmlnZ2VyZWQgYnkgc3BlY2lmaWMgZXZlbnRzLiBUaW1lciBldmVudHMsIHBlcmZvcm1hbmNlIG1vbml0b3IgdW5pdCAoUE1VKSBhY3Rpdml0eSwgb3IgZXZlbiBgaW9jdGxgIGNhbGxzIHdvdWxkIGJlIHByaW1lIGV4YW1wbGVzLCB3aGljaCBhY3R1YWxseSBtYWtlcyB0aGVtIGRlY2VudCB0YXJnZXRzIGZvciBmdXp6aW5nLiBIb3dldmVyLCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzYCBhcmUgY2FsbGVkIG9uIGV2ZXJ5IFZNIGVudHJ5L2V4aXQuIFRoYXQncyBob3QtcGF0aCBjb2RlLCBhbmQgSSBuZWVkIHRvIGF2b2lkIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gdGhvc2UuXG5cbk15IG5leHQgc3RlcCBpcyB0byBzZWUgaWYgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGAgaXMgY2FsbGVkIGZyb20gYW55IG90aGVyIGxvY2F0aW9ucyB3aXRoaW4gdGhlIGNvZGUuIFRoaXMgY291bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIGlzIHdpcmVkIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIxMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNTo0NTowMy4wNDQwNTEwNzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MTM2MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmM9NjE0PXN0YXRpYyB2b2lkIGltc2ljX3N3ZmlsZV9leHRpcnFfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jLTYzMS1cXHRlbHNlXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmM6NjMyOlxcdFxcdGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfVlNfRVhUKTtcXG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYy02MzMtXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYz02Mzc9c3RhdGljIHZvaWQgaW1zaWNfc3dmaWxlX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGNsZWFyLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmMtNjUxLVxcdFxcdG1lbXNldChpbXNpYy1cXHUwMDNlc3dmaWxlLCAwLCBzaXplb2YoKmltc2ljLVxcdTAwM2Vzd2ZpbGUpKTtcXG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYzo2NTI6XFx0XFx0a3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9WU19FWFQpO1xcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jLTY1My1cXHR9XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM9MjQ5PWxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTI2My1cXHRcXHRlbHNlXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjI2NDpcXHRcXHRcXHRyZXR1cm4ga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9WU19FWFQpO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0yNjUtXFx0fVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTQxNj1pbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtNDQxLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzo0NDI6aW50IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTQ0My17XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYz0xNj1zdGF0aWMgaW50IGt2bV9zYmlfZXh0X3YwMV9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bixcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jLTQ1LVxcdGNhc2UgU0JJX0VYVF8wXzFfQ0xFQVJfSVBJOlxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jOjQ2OlxcdFxcdHJldCA9IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfVlNfU09GVCk7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmMtNDctXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmM9ODU9c3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV91cGRhdGVfaHJ0aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBuY3ljbGVzKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jLTkzLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYzo5NDpcXHRrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX1RJTUVSKTtcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmMtOTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ1OjAzLjEwOTE5NTMzNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODY2MDgyMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZGlzdGlsbGluZyB0aGVtIGludG8gYSBtb3JlIGNvbXBsZXRlIG1lbnRhbCBtb2RlbDpcblxuKipSZWZsZWN0aW5nIG9uIEZvY3VzIFN5bWJvbHMgaW4gS1ZNL1JJU0MtViBDb250ZXh0KipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgdmFyaW91cyBlbnRyeSBwb2ludHMgb3Igc2lnbmlmaWNhbnQgYXJlYXMgcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIHBpZWNlIG9mIGNvZGUuIEl0J3MgY2xlYXIgdGhhdCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc3lzdGVtIG9jY3VyIHRocm91Z2ggYGlvY3RsYCwgdGhlIHRpbWVyIG1lY2hhbmlzbXMsIFNCSSAoU3lzdGVtIEJpbmFyeSBJbnRlcmZhY2UpLCBhbmQgdGhlIElNU0lDIChJbnRlcnJ1cHQgTWFuYWdlbWVudCBTeXN0ZW0gSW50ZXJmYWNlIENvbnRyb2xsZXIpLiBUaG9zZSBzZWVtIGxpa2UgcmVhbGx5IGdvb2QsIGZvY3VzZWQgc3ltYm9scyB0byBjZW50ZXIgbXkgdW5kZXJzdGFuZGluZyBhcm91bmQsIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGluIHRvbyBkZWVwLCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIGZ1bGwgcGljdHVyZS4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgdGhhdCBtaWdodCBhZmZlY3QgdGhpcyBjb2RlIHBhdGg/IFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC9yaXNjdi9rdm0vYWlhLmNgLiBBaCwgYGFpYS5jYC4gTm93IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoZSBjb21waWxhdGlvbiBvZiBgYWlhLmNgIGl0c2VsZiBpcyBkZXBlbmRlbnQgb24gc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgc2luY2UgdGhhdCB3b3VsZCBoYXZlIGEgc2lnbmlmaWNhbnQgaW1wYWN0IG9uIGhvdyBhbmQgd2hlcmUgdGhpcyBjb2RlIHJ1bnMuIEdvdHRhIGJlIHN1cmUgSSdtIHRha2luZyBhbGwgcG9zc2libGUgY29uZmlndXJhdGlvbnMgaW50byBhY2NvdW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYzMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ1OjA3Ljk3NTI4MTg2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM4NDAzODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWlhLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX0tWTSkgKz0ga3ZtLm9cXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlLTEyLSMgT3JkZXJlZCBhbHBoYWJldGljYWxseVxcbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlOjEzOmt2bS15ICs9IGFpYS5vXFxuYXJjaC9yaXNjdi9rdm0vTWFrZWZpbGUtMTQta3ZtLXkgKz0gYWlhX2FwbGljLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6NDU6MDguMDM5MTI5NTUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NDEwNjEzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBSSVNDLVYgSW50ZXJydXB0IEhhbmRsaW5nIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgaXNuJ3QgY29uZGl0aW9uYWwgY29tcGlsYXRpb247IGl0J3MgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQuIFRoZSByZWxldmFudCBjb25maWcgaGVyZSBpcyBqdXN0IGBLVk1gLiBHb3QgaXQuXG5cbk15IHByaW1hcnkgZm9jdXMsIGFzIGV4cGVjdGVkLCBpcyBvbiB0aGUgY29yZSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMgd2l0aGluIHRoZSBSSVNDLVYgS1ZNIGFyY2hpdGVjdHVyZS4gVGhlIGtleSBzeW1ib2xzIHRvIHNjcnV0aW5pemUgYXJlOiBga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdGAsIGBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHRgLCBga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyYCwgYW5kIGBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcmAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgc28gdG8gc3BlYWssIGluIHRlcm1zIG9mIGludGVycnVwdCBpbmplY3Rpb24gYW5kIGNvbnRyb2wuXG5cblRoZSBtZWF0IG9mIHRoZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIHNwaW5sb2NrIHRvIHNlcmlhbGl6ZSB1cGRhdGVzIHRvIHRoZSBgaXJxc19wZW5kaW5nYCBhbmQgYGlycXNfcGVuZGluZ19tYXNrYCBiaXRtYXBzLiBQcmV2aW91c2x5IGxvY2tsZXNzLCBub3cgcHJvdGVjdGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IHdlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSB2Q1BVIGludGVycnVwdCBoYW5kbGluZyBoZXJlLiBTbywgZnV6emluZyBpcyAqYWJzb2x1dGVseSogdGhlIHJpZ2h0IGFwcHJvYWNoLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UsIG15IGZ1enppbmcgY2FtcGFpZ24gbmVlZHMgdG8gemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSBob3cgdGhleSdyZSByZWFjaGVkLiBUaGlzIG1lYW5zIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGludGVyYWN0aW9ucyB0aGF0IHVsdGltYXRlbHkgdHJpZ2dlciB0aGVzZSByb3V0aW5lcywgYXMgdGhhdCdzIHRoZSBhdHRhY2sgc3VyZmFjZS5cblxuTGV0J3MgY2FsbCB0aGF0IGFwcHJvYWNoIGBzZXQtcmVzdWx0c2AuIFdlJ2xsIHVzZSB0aGUgcmVzdWx0cyB0byBidWlsZCBvdXIgdGVzdCBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNjksIk91dHB1dFRva2VucyI6MTg0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ1OjEzLjg4MDE5NDQ0OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxOTQxMDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0XCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHRcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzclwiLFxuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc3BpbmxvY2sgdG8gc2VyaWFsaXplIHVwZGF0ZXMgdG8gdGhlIGBpcnFzX3BlbmRpbmdgIGFuZCBgaXJxc19wZW5kaW5nX21hc2tgIGJpdG1hcHMgaW4gdGhlIFJJU0MtViBLVk0gYXJjaGl0ZWN0dXJlLCByZXBsYWNpbmcgYSBsb2NrbGVzcyBhcHByb2FjaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgdkNQVSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGZ1bmN0aW9ucyB0aGF0IHNldC91bnNldCBpbnRlcnJ1cHRzIGFuZCBtb2RpZnkgQ1NScywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgaW50ZXJhY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdFwiLFxuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyXCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzcGlubG9jayB0byBzZXJpYWxpemUgdXBkYXRlcyB0byB0aGUgYGlycXNfcGVuZGluZ2AgYW5kIGBpcnFzX3BlbmRpbmdfbWFza2AgYml0bWFwcyBpbiB0aGUgUklTQy1WIEtWTSBhcmNoaXRlY3R1cmUsIHJlcGxhY2luZyBhIGxvY2tsZXNzIGFwcHJvYWNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSB2Q1BVIGludGVycnVwdCBoYW5kbGluZyBsb2dpYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gZnVuY3Rpb25zIHRoYXQgc2V0L3Vuc2V0IGludGVycnVwdHMgYW5kIG1vZGlmeSBDU1JzLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBpbnRlcmFjdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpsnq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 15:22:57 +0000 UTC FinishedAt: 2026-07-08 15:45:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "481329ec5b31d2c48ac6b8b703c8008133884c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "481329ec5b31d2c48ac6b8b703c8008133884c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "4d53aa7e-898d-41fa-acfd-6f9840d3d5e5" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_riscv_vcpu_set_interrupt", "kvm_riscv_vcpu_unset_interrupt", "kvm_riscv_vcpu_general_set_csr", "kvm_riscv_vcpu_aia_set_csr" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzciYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc3BpbmxvY2sgdG8gc2VyaWFsaXplIHVwZGF0ZXMgdG8gdGhlIGBpcnFzX3BlbmRpbmdgIGFuZCBgaXJxc19wZW5kaW5nX21hc2tgIGJpdG1hcHMgaW4gdGhlIFJJU0MtViBLVk0gYXJjaGl0ZWN0dXJlLCByZXBsYWNpbmcgYSBsb2NrbGVzcyBhcHByb2FjaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgdkNQVSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGZ1bmN0aW9ucyB0aGF0IHNldC91bnNldCBpbnRlcnJ1cHRzIGFuZCBtb2RpZnkgQ1NScywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgaW50ZXJhY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmYzMTBiMDJmNTcxMDU5MWE3NzRhNzY0YTdjY2Q1M2Y5MDNhYjJiZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMTU6NDM6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCA3NWIwYTk1MWMxYmM2Zi4uOTdlNDI2NDVjYmFiZWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTIwNywxMyAmIzQzOzIwNywxMyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XG4gXHQvKlxuIFx0ICogVkNQVSBpbnRlcnJ1cHRzXG4gXHQgKlxuLVx0ICogV2UgaGF2ZSBhIGxvY2tsZXNzIGFwcHJvYWNoIGZvciB0cmFja2luZyBwZW5kaW5nIFZDUFUgaW50ZXJydXB0c1xuLVx0ICogaW1wbGVtZW50ZWQgdXNpbmcgYXRvbWljIGJpdG9wcy4gVGhlIGlycXNfcGVuZGluZyBiaXRtYXAgcmVwcmVzZW50XG4tXHQgKiBwZW5kaW5nIGludGVycnVwdHMgd2hlcmVhcyBpcnFzX3BlbmRpbmdfbWFzayByZXByZXNlbnQgYml0cyBjaGFuZ2VkXG4tXHQgKiBpbiBpcnFzX3BlbmRpbmcuIE91ciBhcHByb2FjaCBpcyBtb2RlbGVkIGFyb3VuZCBtdWx0aXBsZSBwcm9kdWNlclxuLVx0ICogYW5kIHNpbmdsZSBjb25zdW1lciBwcm9ibGVtIHdoZXJlIHRoZSBjb25zdW1lciBpcyB0aGUgVkNQVSBpdHNlbGYuXG4mIzQzO1x0ICogVGhlIGlycXNfcGVuZGluZyBiaXRtYXAgcmVwcmVzZW50cyBwZW5kaW5nIGludGVycnVwdHMgd2hlcmVhc1xuJiM0MztcdCAqIGlycXNfcGVuZGluZ19tYXNrIHJlcHJlc2VudHMgYml0cyBjaGFuZ2VkIGluIGlycXNfcGVuZGluZy4gVXBkYXRlc1xuJiM0MztcdCAqIHRvIHRoZXNlIGJpdG1hcHMgYXJlIHNlcmlhbGl6ZWQgc28gdmNwdSBpbnRlcnJ1cHQgc3luYy9mbHVzaCBjYW5ub3RcbiYjNDM7XHQgKiBkcm9wIGEgbmV3bHkgaW5qZWN0ZWQgaW50ZXJydXB0IHdoaWxlIHN5bmNpbmcgZ3Vlc3QtdmlzaWJsZSBIVklQLlxuIFx0ICovXG4gI2RlZmluZSBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTXHQ2NFxuJiM0MztcdHJhd19zcGlubG9ja190IGlycXNfcGVuZGluZ19sb2NrO1xuIFx0REVDTEFSRV9CSVRNQVAoaXJxc19wZW5kaW5nLCBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTKTtcbiBcdERFQ0xBUkVfQklUTUFQKGlycXNfcGVuZGluZ19tYXNrLCBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9haWEuYyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXG5pbmRleCA1ZWM1MDMyODg1NTVkMS4uODIxZDJjYjZkNmE2ZDkgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vYWlhLmNcbkBAIC01MCwxNyAmIzQzOzUwLDIxIEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdV9haWFfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guYWlhX2NvbnRleHQuZ3Vlc3RfY3NyO1xuIFx0dW5zaWduZWQgbG9uZyBtYXNrLCB2YWw7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGlmICgha3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKFJFQURfT05DRSh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0pKSB7XG4tXHRcdG1hc2sgPSB4Y2hnX2FjcXVpcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdLCAwKTtcbi1cdFx0dmFsID0gUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMV0pIFx1MDAyNiBtYXNrO1xuJiM0MztcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRtYXNrID0gdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdO1xuJiM0MztcdGlmIChtYXNrKSB7XG4mIzQzO1x0XHR2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0gPSAwO1xuJiM0MztcdFx0dmFsID0gdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1sxXSBcdTAwMjYgbWFzaztcbiBcbiBcdFx0Y3NyLVx1MDAzZWh2aXBoIFx1MDAyNj0gfm1hc2s7XG4gXHRcdGNzci1cdTAwM2VodmlwaCB8PSB2YWw7XG4gXHR9XG4mIzQzO1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gfVxuIFxuIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtMjA1LDYgJiM0MzsyMDksOSBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdV9haWFfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guYWlhX2NvbnRleHQuZ3Vlc3RfY3NyO1xuIFx0dW5zaWduZWQgbG9uZyByZWdzX21heCA9IHNpemVvZihzdHJ1Y3Qga3ZtX3Jpc2N2X2FpYV9jc3IpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xuJiM0MzsjaWZkZWYgQ09ORklHXzMyQklUXG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7I2VuZGlmXG4gXG4gXHRpZiAoIXJpc2N2X2lzYV9leHRlbnNpb25fYXZhaWxhYmxlKHZjcHUtXHUwMDNlYXJjaC5pc2EsIFNTQUlBKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG5AQCAtMjE0LDExICYjNDM7MjIxLDE4IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRyZWdfbnVtID0gYXJyYXlfaW5kZXhfbm9zcGVjKHJlZ19udW0sIHJlZ3NfbWF4KTtcbiBcbiBcdGlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKSB7XG4tXHRcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7XG4tXG4gI2lmZGVmIENPTkZJR18zMkJJVFxuLVx0XHRpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9BSUFfUkVHKHNpcGgpKVxuLVx0XHRcdFdSSVRFX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdLCAwKTtcbiYjNDM7XHRcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX0FJQV9SRUcoc2lwaCkpIHtcbiYjNDM7XHRcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xuJiM0MztcdFx0XHR2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0gPSAwO1xuJiM0MztcdFx0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGZsYWdzKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7XG4mIzQzO1x0XHR9XG4mIzQzOyNlbHNlXG4mIzQzO1x0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xuICNlbmRpZlxuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuYyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuY1xuaW5kZXggYTczNjkwZWRhODRiNWEuLmIwNDczMGNjZDYyY2VkIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1LmNcbkBAIC04MCw2ICYjNDM7ODAsNyBAQCBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfdmNwdV9jb250ZXh0X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wga3ZtX3NiaV9yZXNldClcbiB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGJvb2wgbG9hZGVkO1xuIFxuIFx0LyoqXG5AQCAtMTA0LDggJiM0MzsxMDUsMTAgQEAgc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3Jlc2V0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGt2bV9zYmlfcmVzZXQpXG4gXG4gXHRrdm1fcmlzY3ZfdmNwdV9haWFfcmVzZXQodmNwdSk7XG4gXG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFx0Yml0bWFwX3plcm8odmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XG4gXHRiaXRtYXBfemVybyh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2ssIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpO1xuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFxuIFx0a3ZtX3Jpc2N2X3ZjcHVfcG11X3Jlc2V0KHZjcHUpO1xuIFxuQEAgLTE1MSw2ICYjNDM7MTU0LDcgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdC8qIFNldHVwIFZDUFUgaGZlbmNlIHF1ZXVlICovXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaGZlbmNlX2xvY2spO1xuJiM0MztcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2spO1xuIFxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnJlc2V0X3N0YXRlLmxvY2spO1xuIFxuQEAgLTM1MiwxNCAmIzQzOzM1NiwxOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdV9jc3IgKmNzciA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5ndWVzdF9jc3I7XG4gXHR1bnNpZ25lZCBsb25nIG1hc2ssIHZhbDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0aWYgKFJFQURfT05DRSh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF0pKSB7XG4tXHRcdG1hc2sgPSB4Y2hnX2FjcXVpcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdLCAwKTtcbi1cdFx0dmFsID0gUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMF0pIFx1MDAyNiBtYXNrO1xuJiM0MztcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRtYXNrID0gdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdO1xuJiM0MztcdGlmIChtYXNrKSB7XG4mIzQzO1x0XHR2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF0gPSAwO1xuJiM0MztcdFx0dmFsID0gdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1swXSBcdTAwMjYgbWFzaztcbiBcbiBcdFx0Y3NyLVx1MDAzZWh2aXAgXHUwMDI2PSB+bWFzaztcbiBcdFx0Y3NyLVx1MDAzZWh2aXAgfD0gdmFsO1xuIFx0fVxuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFxuIFx0LyogRmx1c2ggQUlBIGhpZ2ggaW50ZXJydXB0cyAqL1xuIFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX2ZsdXNoX2ludGVycnVwdHModmNwdSk7XG5AQCAtMzY4LDYgJiM0MzszNzYsNyBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGh2aXA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHN0cnVjdCBrdm1fdmNwdV9hcmNoICp2ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoO1xuIFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2NzcjtcbiBcbkBAIC0zNzYsNiAmIzQzOzM4NSw3IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdC8qIFN5bmMtdXAgSFZJUC5WU1NJUCBiaXQgY2hhbmdlcyBkb2VzIGJ5IEd1ZXN0ICovXG4gXHRodmlwID0gbmNzcl9yZWFkKENTUl9IVklQKTtcbiYjNDM7XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2di1cdTAwM2VpcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFx0aWYgKChjc3ItXHUwMDNlaHZpcCBeIGh2aXApIFx1MDAyNiAoMVVMIFx1MDAzY1x1MDAzYyBJUlFfVlNfU09GVCkpIHtcbiBcdFx0aWYgKGh2aXAgXHUwMDI2ICgxVUwgXHUwMDNjXHUwMDNjIElSUV9WU19TT0ZUKSkge1xuIFx0XHRcdGlmICghdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcbkBAIC0zOTQsNiAmIzQzOzQwNCw3IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0ICAgICF0ZXN0X2FuZF9zZXRfYml0KElSUV9QTVVfT1ZGLCB2LVx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcbiBcdFx0XHRjbGVhcl9iaXQoSVJRX1BNVV9PVkYsIHYtXHUwMDNlaXJxc19wZW5kaW5nKTtcbiBcdH1cbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2LVx1MDAzZWlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXG4gXHQvKiBTeW5jLXVwIEFJQSBoaWdoIGludGVycnVwdHMgKi9cbiBcdGt2bV9yaXNjdl92Y3B1X2FpYV9zeW5jX2ludGVycnVwdHModmNwdSk7XG5AQCAtNDA0LDYgJiM0Mzs0MTUsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBXZSBvbmx5IGFsbG93IFZTLW1vZGUgc29mdHdhcmUsIHRpbWVyLCBhbmQgZXh0ZXJuYWxcbiBcdCAqIGludGVycnVwdHMgd2hlbiBpcnEgaXMgb25lIG9mIHRoZSBsb2NhbCBpbnRlcnJ1cHRzXG5AQCAtNDE2LDkgJiM0Mzs0MjksMTAgQEAgaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIFx0ICAgIGlycSAhPSBJUlFfUE1VX09WRilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFx0c2V0X2JpdChpcnEsIHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmcpO1xuLVx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRzZXRfYml0KGlycSwgdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrKTtcbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiBcbiBcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG4gXG5AQCAtNDI3LDYgJiM0Mzs0NDEsOCBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXG4gXG4gaW50IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFdlIG9ubHkgYWxsb3cgVlMtbW9kZSBzb2Z0d2FyZSwgdGltZXIsIGNvdW50ZXIgb3ZlcmZsb3cgYW5kIGV4dGVybmFsXG4gXHQgKiBpbnRlcnJ1cHRzIHdoZW4gaXJxIGlzIG9uZSBvZiB0aGUgbG9jYWwgaW50ZXJydXB0c1xuQEAgLTQzOSw5ICYjNDM7NDU1LDEwIEBAIGludCBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIFx0ICAgIGlycSAhPSBJUlFfUE1VX09WRilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFx0Y2xlYXJfYml0KGlycSwgdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZyk7XG4tXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdHNldF9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2spO1xuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXG5pbmRleCBiYjkyMGU4OTIzYzkzMC4uY2JhMzY4Mjk0NGI2OTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXG5AQCAtMjk4LDYgJiM0MzsyOTgsNyBAQCBzdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2NzcjtcbiBcdHVuc2lnbmVkIGxvbmcgcmVnc19tYXggPSBzaXplb2Yoc3RydWN0IGt2bV9yaXNjdl9jc3IpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRpZiAocmVnX251bSBcdTAwM2U9IHJlZ3NfbWF4KVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbkBAIC0zMDksMTAgJiM0MzszMTAsMTQgQEAgc3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRyZWdfdmFsIFx1MDAzY1x1MDAzYz0gVlNJUF9UT19IVklQX1NISUZUO1xuIFx0fVxuIFxuLVx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHJlZ192YWw7XG4tXG4tXHRpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9SRUcoc2lwKSlcbi1cdFx0V1JJVEVfT05DRSh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF0sIDApO1xuJiM0MztcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX1JFRyhzaXApKSB7XG4mIzQzO1x0XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gcmVnX3ZhbDtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSA9IDA7XG4mIzQzO1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHJlZ192YWw7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzciYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc3BpbmxvY2sgdG8gc2VyaWFsaXplIHVwZGF0ZXMgdG8gdGhlIGBpcnFzX3BlbmRpbmdgIGFuZCBgaXJxc19wZW5kaW5nX21hc2tgIGJpdG1hcHMgaW4gdGhlIFJJU0MtViBLVk0gYXJjaGl0ZWN0dXJlLCByZXBsYWNpbmcgYSBsb2NrbGVzcyBhcHByb2FjaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgdkNQVSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGZ1bmN0aW9ucyB0aGF0IHNldC91bnNldCBpbnRlcnJ1cHRzIGFuZCBtb2RpZnkgQ1NScywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgaW50ZXJhY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyZjMxMGIwMmY1NzEwNTkxYTc3NGE3NjRhN2NjZDUzZjkwM2FiMmJmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAxNTo0Mzo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA3NWIwYTk1MWMxYmM2Zi4uOTdlNDI2NDVjYmFiZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTIwNywxMyAmIzQzOzIwNywxMyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAJLyoKIAkgKiBWQ1BVIGludGVycnVwdHMKIAkgKgotCSAqIFdlIGhhdmUgYSBsb2NrbGVzcyBhcHByb2FjaCBmb3IgdHJhY2tpbmcgcGVuZGluZyBWQ1BVIGludGVycnVwdHMKLQkgKiBpbXBsZW1lbnRlZCB1c2luZyBhdG9taWMgYml0b3BzLiBUaGUgaXJxc19wZW5kaW5nIGJpdG1hcCByZXByZXNlbnQKLQkgKiBwZW5kaW5nIGludGVycnVwdHMgd2hlcmVhcyBpcnFzX3BlbmRpbmdfbWFzayByZXByZXNlbnQgYml0cyBjaGFuZ2VkCi0JICogaW4gaXJxc19wZW5kaW5nLiBPdXIgYXBwcm9hY2ggaXMgbW9kZWxlZCBhcm91bmQgbXVsdGlwbGUgcHJvZHVjZXIKLQkgKiBhbmQgc2luZ2xlIGNvbnN1bWVyIHByb2JsZW0gd2hlcmUgdGhlIGNvbnN1bWVyIGlzIHRoZSBWQ1BVIGl0c2VsZi4KJiM0MzsJICogVGhlIGlycXNfcGVuZGluZyBiaXRtYXAgcmVwcmVzZW50cyBwZW5kaW5nIGludGVycnVwdHMgd2hlcmVhcwomIzQzOwkgKiBpcnFzX3BlbmRpbmdfbWFzayByZXByZXNlbnRzIGJpdHMgY2hhbmdlZCBpbiBpcnFzX3BlbmRpbmcuIFVwZGF0ZXMKJiM0MzsJICogdG8gdGhlc2UgYml0bWFwcyBhcmUgc2VyaWFsaXplZCBzbyB2Y3B1IGludGVycnVwdCBzeW5jL2ZsdXNoIGNhbm5vdAomIzQzOwkgKiBkcm9wIGEgbmV3bHkgaW5qZWN0ZWQgaW50ZXJydXB0IHdoaWxlIHN5bmNpbmcgZ3Vlc3QtdmlzaWJsZSBIVklQLgogCSAqLwogI2RlZmluZSBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTCTY0CiYjNDM7CXJhd19zcGlubG9ja190IGlycXNfcGVuZGluZ19sb2NrOwogCURFQ0xBUkVfQklUTUFQKGlycXNfcGVuZGluZywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7CiAJREVDTEFSRV9CSVRNQVAoaXJxc19wZW5kaW5nX21hc2ssIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9haWEuYyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jCmluZGV4IDVlYzUwMzI4ODU1NWQxLi44MjFkMmNiNmQ2YTZkOSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vYWlhLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vYWlhLmMKQEAgLTUwLDE3ICYjNDM7NTAsMjEgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9haWFfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bV92Y3B1X2FpYV9jc3IgKmNzciA9ICZhbXA7dmNwdS0mZ3Q7YXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3I7CiAJdW5zaWduZWQgbG9uZyBtYXNrLCB2YWw7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIWt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpCiAJCXJldHVybjsKIAotCWlmIChSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSkpIHsKLQkJbWFzayA9IHhjaGdfYWNxdWlyZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2tbMV0sIDApOwotCQl2YWwgPSBSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdbMV0pICZhbXA7IG1hc2s7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKJiM0MzsJbWFzayA9IHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2tbMV07CiYjNDM7CWlmIChtYXNrKSB7CiYjNDM7CQl2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdID0gMDsKJiM0MzsJCXZhbCA9IHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nWzFdICZhbXA7IG1hc2s7CiAKIAkJY3NyLSZndDtodmlwaCAmYW1wOz0gfm1hc2s7CiAJCWNzci0mZ3Q7aHZpcGggfD0gdmFsOwogCX0KJiM0MzsJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0yMDUsNiAmIzQzOzIwOSw5IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiB7CiAJc3RydWN0IGt2bV92Y3B1X2FpYV9jc3IgKmNzciA9ICZhbXA7dmNwdS0mZ3Q7YXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3I7CiAJdW5zaWduZWQgbG9uZyByZWdzX21heCA9IHNpemVvZihzdHJ1Y3Qga3ZtX3Jpc2N2X2FpYV9jc3IpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwomIzQzOyNpZmRlZiBDT05GSUdfMzJCSVQKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsjZW5kaWYKIAogCWlmICghcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUodmNwdS0mZ3Q7YXJjaC5pc2EsIFNTQUlBKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0yMTQsMTEgJiM0MzsyMjEsMTggQEAgaW50IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAlyZWdfbnVtID0gYXJyYXlfaW5kZXhfbm9zcGVjKHJlZ19udW0sIHJlZ3NfbWF4KTsKIAogCWlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKSB7Ci0JCSgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7Ci0KICNpZmRlZiBDT05GSUdfMzJCSVQKLQkJaWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfQUlBX1JFRyhzaXBoKSkKLQkJCVdSSVRFX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSwgMCk7CiYjNDM7CQlpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9BSUFfUkVHKHNpcGgpKSB7CiYjNDM7CQkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpOwomIzQzOwkJCSgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7CiYjNDM7CQkJdmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSA9IDA7CiYjNDM7CQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLAomIzQzOwkJCQkJCSAgIGZsYWdzKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJKCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHZhbDsKJiM0MzsJCX0KJiM0MzsjZWxzZQomIzQzOwkJKCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHZhbDsKICNlbmRpZgogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jCmluZGV4IGE3MzY5MGVkYTg0YjVhLi5iMDQ3MzBjY2Q2MmNlZCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuYwpAQCAtODAsNiAmIzQzOzgwLDcgQEAgc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfY29udGV4dF9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAKIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBrdm1fc2JpX3Jlc2V0KQogewomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWJvb2wgbG9hZGVkOwogCiAJLyoqCkBAIC0xMDQsOCAmIzQzOzEwNSwxMCBAQCBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wga3ZtX3NiaV9yZXNldCkKIAogCWt2bV9yaXNjdl92Y3B1X2FpYV9yZXNldCh2Y3B1KTsKIAomIzQzOwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiAJYml0bWFwX3plcm8odmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmcsIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpOwogCWJpdG1hcF96ZXJvKHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2ssIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKIAogCWt2bV9yaXNjdl92Y3B1X3BtdV9yZXNldCh2Y3B1KTsKIApAQCAtMTUxLDYgJiM0MzsxNTQsNyBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJLyogU2V0dXAgVkNQVSBoZmVuY2UgcXVldWUgKi8KIAlzcGluX2xvY2tfaW5pdCgmYW1wO3ZjcHUtJmd0O2FyY2guaGZlbmNlX2xvY2spOwomIzQzOwlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrKTsKIAogCXNwaW5fbG9ja19pbml0KCZhbXA7dmNwdS0mZ3Q7YXJjaC5yZXNldF9zdGF0ZS5sb2NrKTsKIApAQCAtMzUyLDE0ICYjNDM7MzU2LDE4IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gJmFtcDt2Y3B1LSZndDthcmNoLmd1ZXN0X2NzcjsKIAl1bnNpZ25lZCBsb25nIG1hc2ssIHZhbDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSkpIHsKLQkJbWFzayA9IHhjaGdfYWNxdWlyZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2tbMF0sIDApOwotCQl2YWwgPSBSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdbMF0pICZhbXA7IG1hc2s7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKJiM0MzsJbWFzayA9IHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2tbMF07CiYjNDM7CWlmIChtYXNrKSB7CiYjNDM7CQl2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdID0gMDsKJiM0MzsJCXZhbCA9IHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nWzBdICZhbXA7IG1hc2s7CiAKIAkJY3NyLSZndDtodmlwICZhbXA7PSB+bWFzazsKIAkJY3NyLSZndDtodmlwIHw9IHZhbDsKIAl9CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpOwogCiAJLyogRmx1c2ggQUlBIGhpZ2ggaW50ZXJydXB0cyAqLwogCWt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzKHZjcHUpOwpAQCAtMzY4LDYgJiM0MzszNzYsNyBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogdm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgaHZpcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCAqdiA9ICZhbXA7dmNwdS0mZ3Q7YXJjaDsKIAlzdHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSAmYW1wO3ZjcHUtJmd0O2FyY2guZ3Vlc3RfY3NyOwogCkBAIC0zNzYsNiAmIzQzOzM4NSw3IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogCS8qIFN5bmMtdXAgSFZJUC5WU1NJUCBiaXQgY2hhbmdlcyBkb2VzIGJ5IEd1ZXN0ICovCiAJaHZpcCA9IG5jc3JfcmVhZChDU1JfSFZJUCk7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3YtJmd0O2lycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiAJaWYgKChjc3ItJmd0O2h2aXAgXiBodmlwKSAmYW1wOyAoMVVMICZsdDsmbHQ7IElSUV9WU19TT0ZUKSkgewogCQlpZiAoaHZpcCAmYW1wOyAoMVVMICZsdDsmbHQ7IElSUV9WU19TT0ZUKSkgewogCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KElSUV9WU19TT0ZULApAQCAtMzk0LDYgJiM0Mzs0MDQsNyBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCSAgICAhdGVzdF9hbmRfc2V0X2JpdChJUlFfUE1VX09WRiwgdi0mZ3Q7aXJxc19wZW5kaW5nX21hc2spKQogCQkJY2xlYXJfYml0KElSUV9QTVVfT1ZGLCB2LSZndDtpcnFzX3BlbmRpbmcpOwogCX0KJiM0MzsJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2LSZndDtpcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpOwogCiAJLyogU3luYy11cCBBSUEgaGlnaCBpbnRlcnJ1cHRzICovCiAJa3ZtX3Jpc2N2X3ZjcHVfYWlhX3N5bmNfaW50ZXJydXB0cyh2Y3B1KTsKQEAgLTQwNCw2ICYjNDM7NDE1LDggQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBpbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiAJLyoKIAkgKiBXZSBvbmx5IGFsbG93IFZTLW1vZGUgc29mdHdhcmUsIHRpbWVyLCBhbmQgZXh0ZXJuYWwKIAkgKiBpbnRlcnJ1cHRzIHdoZW4gaXJxIGlzIG9uZSBvZiB0aGUgbG9jYWwgaW50ZXJydXB0cwpAQCAtNDE2LDkgJiM0Mzs0MjksMTAgQEAgaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKQogCSAgICBpcnEgIT0gSVJRX1BNVV9PVkYpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKIAlzZXRfYml0KGlycSwgdmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmcpOwotCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCXNldF9iaXQoaXJxLCB2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19tYXNrKTsKJiM0MzsJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiAKIAlrdm1fdmNwdV9raWNrKHZjcHUpOwogCkBAIC00MjcsNiAmIzQzOzQ0MSw4IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSkKIAogaW50IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiAJLyoKIAkgKiBXZSBvbmx5IGFsbG93IFZTLW1vZGUgc29mdHdhcmUsIHRpbWVyLCBjb3VudGVyIG92ZXJmbG93IGFuZCBleHRlcm5hbAogCSAqIGludGVycnVwdHMgd2hlbiBpcnEgaXMgb25lIG9mIHRoZSBsb2NhbCBpbnRlcnJ1cHRzCkBAIC00MzksOSAmIzQzOzQ1NSwxMCBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSkKIAkgICAgaXJxICE9IElSUV9QTVVfT1ZGKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiAJY2xlYXJfYml0KGlycSwgdmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmcpOwotCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCXNldF9iaXQoaXJxLCB2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19tYXNrKTsKJiM0MzsJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jCmluZGV4IGJiOTIwZTg5MjNjOTMwLi5jYmEzNjgyOTQ0YjY5NCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jCkBAIC0yOTgsNiAmIzQzOzI5OCw3IEBAIHN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIHsKIAlzdHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSAmYW1wO3ZjcHUtJmd0O2FyY2guZ3Vlc3RfY3NyOwogCXVuc2lnbmVkIGxvbmcgcmVnc19tYXggPSBzaXplb2Yoc3RydWN0IGt2bV9yaXNjdl9jc3IpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHJlZ19udW0gJmd0Oz0gcmVnc19tYXgpCiAJCXJldHVybiAtRU5PRU5UOwpAQCAtMzA5LDEwICYjNDM7MzEwLDE0IEBAIHN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJcmVnX3ZhbCAmbHQ7Jmx0Oz0gVlNJUF9UT19IVklQX1NISUZUOwogCX0KIAotCSgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSByZWdfdmFsOwotCi0JaWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfUkVHKHNpcCkpCi0JCVdSSVRFX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSwgMCk7CiYjNDM7CWlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX1JFRyhzaXApKSB7CiYjNDM7CQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiYjNDM7CQkoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gcmVnX3ZhbDsKJiM0MzsJCXZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2tbMF0gPSAwOwomIzQzOwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gcmVnX3ZhbDsKJiM0MzsJfQogCiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSSVNDLVYgS1ZNIFNwaW5sb2NrIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBpbnRyb2R1Y2luZyBhIGByYXdfc3BpbmxvY2tfdGAgY2FsbGVkIGBpcnFzX3BlbmRpbmdfbG9ja2Agd2l0aGluIGBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaGAgc3BlY2lmaWNhbGx5IGZvciBSSVNDLVYgS1ZNLiBFc3NlbnRpYWxseSwgaXQmIzM5O3Mgc3dhcHBpbmcgb3V0IHRoZSBleGlzdGluZyBsb2NrbGVzcyBhcHByb2FjaCwgd2hpY2ggcmVsaWVkIG9uIHRoaW5ncyBsaWtlIGB4Y2hnX2FjcXVpcmVgIGFuZCBtZW1vcnkgYmFycmllcnMgYmVmb3JlIGF0b21pYyBvcGVyYXRpb25zLCBmb3IgYSBtb3JlIHRyYWRpdGlvbmFsIHNwaW5sb2NrLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgYXJjaGl0ZWN0dXJhbCBzaGlmdC4gVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIFJJU0MtViBLVk0gYXJjaGl0ZWN0dXJlLCBzbyB3ZSBuZWVkIHRvIGJlIHZlcnkgdGhvcm91Z2guCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gvcmlzY3Yva3ZtL2FpYS5jYCwgYGFyY2gvcmlzY3Yva3ZtL3ZjcHUuY2AsIGFuZCBgYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuY2AsIG1lYW5pbmcgaXQmIzM5O3MgbGlrZWx5IGltcGFjdGluZyBjcml0aWNhbCBhcmVhcyByZWxhdGVkIHRvIGludGVycnVwdCBoYW5kbGluZyBhbmQgdkNQVSBtYW5hZ2VtZW50LiBXZSBuZWVkIHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciwgZXZlbiB3b3JzZSwgaW50cm9kdWNlIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgZGVzcGl0ZSB0aGUgaW50ZW50IG9mIHRoZSBsb2NrLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0JiMzOTtzIFJJU0MtViBLVk0sIHNvIGNsZWFybHkgYENPTkZJR19LVk1gIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIFJJU0MtVi4gQnV0IEkgc2hvdWxkIGxvb2sgY2xvc2VyIGF0IGFueSBSSVNDLVYgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnMuIFRoZSBkaWZmIG1lbnRpb25zIGBDT05GSUdfMzJCSVRgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBXaGlsZSBSSVNDLVYgS1ZNIGlzIHByaW1hcmlseSBmb2N1c2VkIG9uIDY0LWJpdCBzeXN0ZW1zLCB0aGUgbWVudGlvbiBvZiAzMi1iaXQgc3VnZ2VzdHMgdGhlcmUgbWlnaHQgYmUgc29tZSBjb25kaXRpb25hbCBsb2dpYyBhdCBwbGF5LiBMZXQgbWUgcHVsbCB1cCBgYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSByZWxhdGVkIGNvbmRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIG9yIGlmIGBDT05GSUdfMzJCSVRgIGl0c2VsZiBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIHNwaW5sb2NrIGlzIGJlaW5nIGNvbmRpdGlvbmFsbHkgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIzOQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIHZDUFUgSW50ZXJydXB0IEhhbmRsaW5nIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIGFyZWEgd2UmIzM5O3JlIGxvb2tpbmcgYXQgaGVyZSBpcyBLVk0gY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0aW5nIHRvIHRoZSBSSVNDLVYgdkNQVS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gQXJlIHRoZXJlIG90aGVyIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIEtWTSBzZXR1cCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gTGV0IG1lIHRoaW5rLgoKUmlnaHQsIEkmIzM5O3ZlIGdvdCBhIGxpc3Qgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYGt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYCwgYGt2bV9yaXNjdl9yZXNldF92Y3B1YCwgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgLCBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCwgYW5kIGBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JgLiBUaGVzZSBhcmUga2V5IHBsYXllcnMgaW4gaG93IEtWTSBoYW5kbGVzIGludGVycnVwdHMgd2l0aGluIHRoZSBSSVNDLVYgdkNQVS4gQ29uc2lkZXJpbmcgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gaW50ZXJydXB0IGhhbmRsaW5nLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGlzc3VlcyBpbiBpbnRlcnJ1cHQgbWFuYWdlbWVudCwgSSYjMzk7dmUgZ290IHRvIHByaW9yaXRpemUgdGhlIGtleSBzeW1ib2xzIGZvciBmdXp6aW5nLiBUaGUgbGlzdCBzaG91bGQgYmU6IGBrdm1fcmlzY3ZfdmNwdV9haWFfZmx1c2hfaW50ZXJydXB0c2AsIGBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcmAsIGBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0c2AsIGBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0YCwgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGAsIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyYC4KCkhvbGQgb24uIGBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzYCBhbmQgYGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0c2AgYXJlIGludGVyZXN0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIHBhdGhzIHRvIHNlZSBob3cgZnJlcXVlbnRseSB0aGV5IGFyZSBjYWxsZWQuIE15IGd1dCB0ZWxscyBtZSB0aGVzZSBjb3VsZCBiZSBob3QtcGF0aCBmdW5jdGlvbnMsIHBvc3NpYmx5IGNhbGxlZCBvbiBldmVyeSBWTSBleGl0IG9yIGVudHJ5LCBtYWtpbmcgdGhlbSBwYXJ0aWN1bGFybHkgY3J1Y2lhbCBmb3IgZnV6emluZy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgY2FsbCBncmFwaCB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vdmNwdS5jPTM1MD1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcmVncyAqcmVncylcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMzU0LVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjM1NTp2b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTM1Ni17XG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTg0Nj1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy05MzEtXHRcdCAqL1xuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjkzMjpcdFx0a3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyh2Y3B1KTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy05MzMtXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYz0yNzM9c3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX2dldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtMjg1LVx0aWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfUkVHKHNpcCkpIHtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM6Mjg2Olx0XHRrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzKHZjcHUpO1xuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYy0yODctXHRcdCpvdXRfdmFsID0gKGNzci1cdTAwM2VodmlwIFx1MDAzZVx1MDAzZSBWU0lQX1RPX0hWSVBfU0hJRlQpIFx1MDAyNiBWU0lQX1ZBTElEX01BU0s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYxNAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludGVycnVwdCBTeW5jaHJvbml6YXRpb24gaW4gdGhlIFJJU0MtViBLVk0gdkNQVSBSdW4gTG9vcCoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBpbnRlcnJ1cHQgaGFuZGxpbmcgd2l0aGluIHRoZSBLVk0gUklTQy1WIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSByZWNhbGxpbmcgdGhhdCBga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0c2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgd2l0aGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHZDUFUmIzM5O3MgZXhlY3V0aW9uIGN5Y2xlLCBzbyBpdCBtYWtlcyBzZW5zZSB0aGF0IGludGVycnVwdCBmbHVzaGluZyB3b3VsZCBoYXBwZW4gdGhlcmUsIGVuc3VyaW5nIGEgY2xlYW4gc2xhdGUgYmVmb3JlIGVhY2ggcnVuLiBUaGUgcXVlc3Rpb24gSSYjMzk7bSB0dXJuaW5nIG92ZXIgbm93LCB0aG91Z2gsIGlzIGFib3V0IGBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHNgLiBXaGVyZSBkb2VzICp0aGF0KiBmaXQgaW50byB0aGUgcGljdHVyZT8gV2hhdCYjMzk7cyBpdHMgcm9sZSBhbmQgcmVsYXRpb25zaGlwIHRvIHRoZSBmbHVzaCBmdW5jdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHNlcXVlbmNlIG9mIGV2ZW50cyB0byBtYWtlIHN1cmUgaW50ZXJydXB0IGluamVjdGlvbiBhbmQgaGFuZGxpbmcgYXJlIGltcGxlbWVudGVkIGNvcnJlY3RseSBhbmQgZWZmaWNpZW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL3ZjcHUuYz0zNTU9dm9pZCBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMzc1LVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjM3Njp2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMzc3LXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM9ODQ2PWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTk2NC1cdFx0LyogU3luY3VwIGludGVycnVwdHMgc3RhdGUgd2l0aCBIVyAqL1xuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjk2NTpcdFx0a3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHZjcHUpO1xuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTk2Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTc1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipBbmFseXppbmcgS1ZNIEhvdC1QYXRoIEZ1bmN0aW9uIENhbGxzKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBwZXJmb3JtYW5jZS1jcml0aWNhbCBzZWN0aW9ucyBvZiB0aGUgS1ZNIGNvZGUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIFJJU0MtViB2aXJ0dWFsaXphdGlvbi4gVGhlIG9ic2VydmF0aW9uIGFib3V0IGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgYmVpbmcgYSBob3QtcGF0aCBmdW5jdGlvbiBpcyBzcG90IG9uLCB0aGF0JiMzOTtzIGV4cGVjdGVkLiBJdCYjMzk7cyB0aGUgY29yZSBsb29wIHdoZXJlIHRoZSBndWVzdCYjMzk7cyBleGVjdXRpb24gaXMgZW11bGF0ZWQuIFRoZSBmYWN0IHRoYXQgd2UmIzM5O3JlIHpvb21pbmcgaW4gb24gaXQgc3VnZ2VzdHMgd2UgYXJlIGxvb2tpbmcgZm9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gd2l0aGluIHRoYXQgY3JpdGljYWwgc2VjdGlvbi4KClRoZSBtb3JlIGludGVyZXN0aW5nIHF1ZXN0aW9uIG5vdywgaG93ZXZlciwgaXMgd2hldGhlciBga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdGAgYW5kIGBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHRgIGFyZSBhbHNvIGhvdC1wYXRoIGZ1bmN0aW9ucy4gSW50ZXJydXB0IGhhbmRsaW5nIGlzIGFsd2F5cyBhIGNyaXRpY2FsIGFyZWEgaW4gdmlydHVhbGl6YXRpb24sIHNpbmNlIGZyZXF1ZW50LCBlZmZpY2llbnQgaGFuZGxpbmcgaXMgaW1wb3J0YW50LCBhbmQgdGhlc2UgcGFydGljdWxhciBmdW5jdGlvbnMgYXJlIGNsZWFybHkgaW52b2x2ZWQgaW4gbWFuYWdpbmcgaW50ZXJydXB0IGluamVjdGlvbiBhbmQgY2xlYXJpbmcsIHdoaWNoIGNvdWxkIGRpcmVjdGx5IGltcGFjdCBndWVzdCByZXNwb25zaXZlbmVzcyBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZS4KCldlIG5lZWQgdG8gY29uc2lkZXIgaG93IGZyZXF1ZW50bHkgdGhvc2UgaW50ZXJydXB0IGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCB0aGUgY29tcGxleGl0eSBvZiB0aGVpciBvcGVyYXRpb25zLCBhbmQgdGhlaXIgaW1wYWN0IG9uIHRoZSB2Q1BVJiMzOTtzIGV4ZWN1dGlvbiBmbG93LiBUaGV5IGNvdWxkIGJlIHRoZSBzb3VyY2Ugb2Ygc2lnbmlmaWNhbnQgb3ZlcmhlYWQsIG9yIHRoZXkgY291bGQgYmUgb3B0aW1pemVkIHF1aXRlIHdlbGwuIEl0JiMzOTtzIGRlZmluaXRlbHkgYW4gYXJlYSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jPTYxND1zdGF0aWMgdm9pZCBpbXNpY19zd2ZpbGVfZXh0aXJxX3VwZGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmMtNjI5LVx0ICAgIGltc2ljX21yaWZfdG9wZWkobXJpZiwgaW1zaWMtXHUwMDNlbnJfZWl4LCBpbXNpYy1cdTAwM2Vucl9tc2lzKSlcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jOjYzMDpcdFx0a3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfVlNfRVhUKTtcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jLTYzMS1cdGVsc2Vcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM9MjQ5PWxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0yNjEtXHRcdGlmIChpcnEuaXJxID09IEtWTV9JTlRFUlJVUFRfU0VUKVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjI2MjpcdFx0XHRyZXR1cm4ga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfVlNfRVhUKTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0yNjMtXHRcdGVsc2Vcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM9Mzc2PXZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtNDE1LVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjQxNjppbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtNDE3LXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jPTI5Mz1zdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcG11X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpwZXJmX2V2ZW50LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmMtMzI4LVx0c2V0X2JpdChwbWMtXHUwMDNlaWR4LCBrdnBtdS1cdTAwM2VwbWNfb3ZlcmZsb3duKTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmM6MzI5Olx0a3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfUE1VX09WRik7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jLTMzMC1cbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9yZXBsYWNlLmM9NDU9c3RhdGljIGludCBrdm1fc2JpX2V4dF9pcGlfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4sXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfcmVwbGFjZS5jLTcxLVx0XHR9XG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9yZXBsYWNlLmM6NzI6XHRcdHJldCA9IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodG1wLCBJUlFfVlNfU09GVCk7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9yZXBsYWNlLmMtNzMtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmM9MTY9c3RhdGljIGludCBrdm1fc2JpX2V4dF92MDFfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4sXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmMtNTktXHRcdFx0XHRjb250aW51ZTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jOjYwOlx0XHRcdHJldCA9IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQocnZjcHUsIElSUV9WU19TT0ZUKTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jLTYxLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jPTQzPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBrdm1fcmlzY3ZfdmNwdV9ocnRpbWVyX2V4cGlyZWQoc3RydWN0IGhydGltZXIgKmgpXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jLTU2LVx0dC1cdTAwM2VuZXh0X3NldCA9IGZhbHNlO1xuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jOjU3Olx0a3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfVlNfVElNRVIpO1xuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jLTU4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjM1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEludGVycnVwdHMgYW5kIENTUiBNYW5pcHVsYXRpb24gaW4gS1ZNL1JJU0MtVioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBtYW5hZ2luZyBpbnRlcnJ1cHRzIGFuZCBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXJzIChDU1JzKSB3aXRoaW4gdGhlIEtWTS9SSVNDLVYgZW52aXJvbm1lbnQuIFNwZWNpZmljYWxseSwgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgIHNlZW1zIHRvIGJlIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGZvciAqc2V0dGluZyogaW50ZXJydXB0cyDigJMgaXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCAoUE1VKSBvdmVyZmxvd3MsIHRpbWVyIGV4cGlyYXRpb25zLCBJbnRlci1Qcm9jZXNzb3IgSW50ZXJydXB0cyAoSVBJcyksIGFuZCB0aHJvdWdoIGlvY3RsIGNhbGxzLiBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHJlc3BvbnNpYmxlIGZvciAqY2xlYXJpbmcqIGludGVycnVwdHMsIGNvbWluZyBpbnRvIHBsYXkgd2l0aCBpb2N0bCBhbmQgdGltZXJzLgoKVGhlbiwgZm9yIENTUiBtYW5pcHVsYXRpb24sIHdlIGhhdmUgYGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcmAg4oCTIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgaW9jdGwgb3BlcmF0aW9ucyB2aWEgYHNldF9vbmVfcmVnYCBhbmQgaXMgbGlrZWx5IHVzZWQgZm9yIHNldHRpbmcgZ2VuZXJhbC1wdXJwb3NlIENTUnMuIEFuZCBmaW5hbGx5LCB0aGVyZSYjMzk7cyBga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JgLCBhZ2FpbiBkcml2ZW4gYnkgaW9jdGwmIzM5O3MgYHNldF9vbmVfcmVnYCB0byBtYW5hZ2UgQ1NScyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKS4KClNvLCBnaXZlbiB0aGlzIGNhbGwgZ3JhcGggYW5hbHlzaXMsIHRoZSBjcml0aWNhbCBhcmVhcyBJIG5lZWQgdG8gem9vbSBpbiBvbiBhcmUgdGhlc2UgZm91ciBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpbnRlcnJ1cHRzIGFyZSBpbmplY3RlZCBhbmQgY2xlYXJlZCwgYW5kIGhvdyBDU1JzLCBlc3BlY2lhbGx5IHRoZSBBSUEtc3BlY2lmaWMgb25lcywgYXJlIG1vZGlmaWVkLiBNeSBmb2N1cyBub3cgaXMgb24gYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYCBhbmQgYGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcmAgdG8gdW5kZXJzdGFuZCB0aGUgQ1NSIHNldCBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9haWEuYz0xODU9aW50IGt2bV9yaXNjdl92Y3B1X2FpYV9nZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWEuYy0yMDUtXG5hcmNoL3Jpc2N2L2t2bS9haWEuYzoyMDY6aW50IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvcmlzY3Yva3ZtL2FpYS5jLTIwNy1cdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyByZWdfbnVtLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM9NDAyPXN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X3JlZ19jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtNDI1LVx0Y2FzZSBLVk1fUkVHX1JJU0NWX0NTUl9BSUE6XG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jOjQyNjpcdFx0cmMgPSBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2Nzcih2Y3B1LCByZWdfbnVtLCByZWdfdmFsKTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtNDI3LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQb3RlbnRpYWw6IEEgUklTQy1WIEtWTSBEaXZlKioKCk9rYXksIHNvIHRoZSBga3ZtX3Jpc2N2X3ZjcHVfc2V0X3JlZ19jc3JgIGZ1bmN0aW9uLCBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfb25lX3JlZ2AsIHByZXNlbnRzIGEgcGVyZmVjdCBlbnRyeSBwb2ludCBmb3IgZnV6emluZy4gVGhlIHBvdGVudGlhbCBpcyBkZWZpbml0ZWx5IHRoZXJlLiBJIGNhbiBzZWUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgY2FsbCBjaGFpbiBhbmQgaG93IHRoaXMgY291bGQgYmUgZXhwbG9pdGVkIHRvIGZpbmQgc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzLgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZW52aXJvbm1lbnQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgdGhhdCB3b3VsZCBpbXBhY3Qgb3VyIGFiaWxpdHkgdG8gZnV6eiBlZmZlY3RpdmVseT8gSSBzYXcgYENPTkZJR18zMkJJVGAgbWVudGlvbmVkIGluIGBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcmAsIGJ1dCB0aGUgUklTQy1WIEtWTSBpbXBsZW1lbnRhdGlvbiBpcyBsYXJnZWx5IDY0LWJpdCwgc28gc3BlY2lmeWluZyBgS1ZNYCBzaG91bGQgYmUgc3VmZmljaWVudCwgcmF0aGVyIHRoYW4gYWxzbyBzcGVjaWZ5aW5nIGBDT05GSUdfMzJCSVRgLgoKQWgsIHJpZ2h0LiBgQ09ORklHXzMyQklUYCBpcyBhbiAqYXJjaGl0ZWN0dXJlKiBjb25maWd1cmF0aW9uLCBub3Qgc29tZXRoaW5nIEkgbmVlZCB0byBleHBsaWNpdGx5IHNldCBhdCB0aGlzIGxldmVsLiBObyBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoYXQgcGFydGljdWxhciBvbmUuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIHBlcnRpbmVudCBjb25maWd1cmF0aW9ucyB0byBjb25zaWRlci4gVGltZSB0byBnbyBiYWNrIHRvIHRoZSBzb3VyY2UgYW5kIGV4YW1pbmUgYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgIGFnYWluLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vS2NvbmZpZz02PXNvdXJjZSBcJiMzNDt2aXJ0L2t2bS9LY29uZmlnXCYjMzQ7XG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTctXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy05LVx0Ym9vbCBcJiMzNDtWaXJ0dWFsaXphdGlvblwmIzM0O1xuLS1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBSSVNDLVYgSW50ZXJydXB0IEhhbmRsaW5nKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYEtWTWAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gaW4gcGxheSBoZXJlLiBMZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHVuZGVyc3RhbmQgdGhlIGNvcmUgc3ltYm9scyByZWxhdGVkIHRvIGludGVycnVwdCBoYW5kbGluZy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZXNlIGZ1bmN0aW9uczogYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgLCBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCwgYGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcmAsIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JgLgoKTm93LCBjb25zaWRlcmluZyBteSBleHBlcmllbmNlIGluIHRoaXMgc3BhY2UsIHRoZXNlIGFyZW4mIzM5O3QgdHlwaWNhbGx5IGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhleSYjMzk7cmUgdXN1YWxseSB0cmlnZ2VyZWQgYnkgc3BlY2lmaWMgZXZlbnRzLiBUaW1lciBldmVudHMsIHBlcmZvcm1hbmNlIG1vbml0b3IgdW5pdCAoUE1VKSBhY3Rpdml0eSwgb3IgZXZlbiBgaW9jdGxgIGNhbGxzIHdvdWxkIGJlIHByaW1lIGV4YW1wbGVzLCB3aGljaCBhY3R1YWxseSBtYWtlcyB0aGVtIGRlY2VudCB0YXJnZXRzIGZvciBmdXp6aW5nLiBIb3dldmVyLCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzYCBhcmUgY2FsbGVkIG9uIGV2ZXJ5IFZNIGVudHJ5L2V4aXQuIFRoYXQmIzM5O3MgaG90LXBhdGggY29kZSwgYW5kIEkgbmVlZCB0byBhdm9pZCBnZXR0aW5nIGJvZ2dlZCBkb3duIGluIHRob3NlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCBpcyBjYWxsZWQgZnJvbSBhbnkgb3RoZXIgbG9jYXRpb25zIHdpdGhpbiB0aGUgY29kZS4gVGhpcyBjb3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgaXMgd2lyZWQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYz02MTQ9c3RhdGljIHZvaWQgaW1zaWNfc3dmaWxlX2V4dGlycV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jLTYzMS1cdGVsc2VcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jOjYzMjpcdFx0a3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9WU19FWFQpO1xuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmMtNjMzLVxuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jPTYzNz1zdGF0aWMgdm9pZCBpbXNpY19zd2ZpbGVfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgY2xlYXIsXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmMtNjUxLVx0XHRtZW1zZXQoaW1zaWMtXHUwMDNlc3dmaWxlLCAwLCBzaXplb2YoKmltc2ljLVx1MDAzZXN3ZmlsZSkpO1xuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmM6NjUyOlx0XHRrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX0VYVCk7XG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYy02NTMtXHR9XG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTI0OT1sb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMjYzLVx0XHRlbHNlXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6MjY0Olx0XHRcdHJldHVybiBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX0VYVCk7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMjY1LVx0fVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz00MTY9aW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy00NDEtXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6NDQyOmludCBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTQ0My17XG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmM9MTY9c3RhdGljIGludCBrdm1fc2JpX2V4dF92MDFfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4sXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmMtNDUtXHRjYXNlIFNCSV9FWFRfMF8xX0NMRUFSX0lQSTpcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jOjQ2Olx0XHRyZXQgPSBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX1NPRlQpO1xuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmMtNDctXHRcdGJyZWFrO1xuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYz04NT1zdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X3VwZGF0ZV9ocnRpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG5jeWNsZXMpXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jLTkzLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jOjk0Olx0a3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9WU19USU1FUik7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmMtOTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjMwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZGlzdGlsbGluZyB0aGVtIGludG8gYSBtb3JlIGNvbXBsZXRlIG1lbnRhbCBtb2RlbDoKCioqUmVmbGVjdGluZyBvbiBGb2N1cyBTeW1ib2xzIGluIEtWTS9SSVNDLVYgQ29udGV4dCoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgdmFyaW91cyBlbnRyeSBwb2ludHMgb3Igc2lnbmlmaWNhbnQgYXJlYXMgcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIHBpZWNlIG9mIGNvZGUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHN5c3RlbSBvY2N1ciB0aHJvdWdoIGBpb2N0bGAsIHRoZSB0aW1lciBtZWNoYW5pc21zLCBTQkkgKFN5c3RlbSBCaW5hcnkgSW50ZXJmYWNlKSwgYW5kIHRoZSBJTVNJQyAoSW50ZXJydXB0IE1hbmFnZW1lbnQgU3lzdGVtIEludGVyZmFjZSBDb250cm9sbGVyKS4gVGhvc2Ugc2VlbSBsaWtlIHJlYWxseSBnb29kLCBmb2N1c2VkIHN5bWJvbHMgdG8gY2VudGVyIG15IHVuZGVyc3RhbmRpbmcgYXJvdW5kLCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93LgoKTm93LCBiZWZvcmUgSSBkaWcgaW4gdG9vIGRlZXAsIGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgZnVsbCBwaWN0dXJlLiBBcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGlzIGNvZGUgcGF0aD8gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmNoL3Jpc2N2L2t2bS9haWEuY2AuIEFoLCBgYWlhLmNgLiBOb3cgSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNvbXBpbGF0aW9uIG9mIGBhaWEuY2AgaXRzZWxmIGlzIGRlcGVuZGVudCBvbiBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBzaW5jZSB0aGF0IHdvdWxkIGhhdmUgYSBzaWduaWZpY2FudCBpbXBhY3Qgb24gaG93IGFuZCB3aGVyZSB0aGlzIGNvZGUgcnVucy4gR290dGEgYmUgc3VyZSBJJiMzOTttIHRha2luZyBhbGwgcG9zc2libGUgY29uZmlndXJhdGlvbnMgaW50byBhY2NvdW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthaWEubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19LVk0pICYjNDM7PSBrdm0ub1xuLS1cbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlLTEyLSMgT3JkZXJlZCBhbHBoYWJldGljYWxseVxuYXJjaC9yaXNjdi9rdm0vTWFrZWZpbGU6MTM6a3ZtLXkgJiM0Mzs9IGFpYS5vXG5hcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZS0xNC1rdm0teSAmIzQzOz0gYWlhX2FwbGljLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNjkKCQkJCQkJCW91dHB1dDogMTg0CgkJCQkJCQl0aG91Z2h0czogMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gUklTQy1WIEludGVycnVwdCBIYW5kbGluZyBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBpc24mIzM5O3QgY29uZGl0aW9uYWwgY29tcGlsYXRpb247IGl0JiMzOTtzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aGVuIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLiBUaGUgcmVsZXZhbnQgY29uZmlnIGhlcmUgaXMganVzdCBgS1ZNYC4gR290IGl0LgoKTXkgcHJpbWFyeSBmb2N1cywgYXMgZXhwZWN0ZWQsIGlzIG9uIHRoZSBjb3JlIGludGVycnVwdCBoYW5kbGluZyBsb2dpYyB3aXRoaW4gdGhlIFJJU0MtViBLVk0gYXJjaGl0ZWN0dXJlLiBUaGUga2V5IHN5bWJvbHMgdG8gc2NydXRpbml6ZSBhcmU6IGBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0YCwgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGAsIGBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JgLCBhbmQgYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhaywgaW4gdGVybXMgb2YgaW50ZXJydXB0IGluamVjdGlvbiBhbmQgY29udHJvbC4KClRoZSBtZWF0IG9mIHRoZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIHNwaW5sb2NrIHRvIHNlcmlhbGl6ZSB1cGRhdGVzIHRvIHRoZSBgaXJxc19wZW5kaW5nYCBhbmQgYGlycXNfcGVuZGluZ19tYXNrYCBiaXRtYXBzLiBQcmV2aW91c2x5IGxvY2tsZXNzLCBub3cgcHJvdGVjdGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvcmUgdkNQVSBpbnRlcnJ1cHQgaGFuZGxpbmcgaGVyZS4gU28sIGZ1enppbmcgaXMgKmFic29sdXRlbHkqIHRoZSByaWdodCBhcHByb2FjaC4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgbXkgZnV6emluZyBjYW1wYWlnbiBuZWVkcyB0byB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IGhvdyB0aGV5JiMzOTtyZSByZWFjaGVkLiBUaGlzIG1lYW5zIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGludGVyYWN0aW9ucyB0aGF0IHVsdGltYXRlbHkgdHJpZ2dlciB0aGVzZSByb3V0aW5lcywgYXMgdGhhdCYjMzk7cyB0aGUgYXR0YWNrIHN1cmZhY2UuCgpMZXQmIzM5O3MgY2FsbCB0aGF0IGFwcHJvYWNoIGBzZXQtcmVzdWx0c2AuIFdlJiMzOTtsbCB1c2UgdGhlIHJlc3VsdHMgdG8gYnVpbGQgb3VyIHRlc3QgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3ImIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNwaW5sb2NrIHRvIHNlcmlhbGl6ZSB1cGRhdGVzIHRvIHRoZSBgaXJxc19wZW5kaW5nYCBhbmQgYGlycXNfcGVuZGluZ19tYXNrYCBiaXRtYXBzIGluIHRoZSBSSVNDLVYgS1ZNIGFyY2hpdGVjdHVyZSwgcmVwbGFjaW5nIGEgbG9ja2xlc3MgYXBwcm9hY2guIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIHZDUFUgaW50ZXJydXB0IGhhbmRsaW5nIGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBmdW5jdGlvbnMgdGhhdCBzZXQvdW5zZXQgaW50ZXJydXB0cyBhbmQgbW9kaWZ5IENTUnMsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGludGVyYWN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBzcGlubG9jayB0byBzZXJpYWxpemUgdXBkYXRlcyB0byB0aGUgYGlycXNfcGVuZGluZ2AgYW5kIGBpcnFzX3BlbmRpbmdfbWFza2AgYml0bWFwcyBpbiB0aGUgUklTQy1WIEtWTSBhcmNoaXRlY3R1cmUsIHJlcGxhY2luZyBhIGxvY2tsZXNzIGFwcHJvYWNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSB2Q1BVIGludGVycnVwdCBoYW5kbGluZyBsb2dpYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gZnVuY3Rpb25zIHRoYXQgc2V0L3Vuc2V0IGludGVycnVwdHMgYW5kIG1vZGlmeSBDU1JzLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBpbnRlcmFjdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNTo0Mzo1Ni4zMzExMTY5NjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzY0MTAzNjU1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0XCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHRcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzclwiLFxuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc3BpbmxvY2sgdG8gc2VyaWFsaXplIHVwZGF0ZXMgdG8gdGhlIGBpcnFzX3BlbmRpbmdgIGFuZCBgaXJxc19wZW5kaW5nX21hc2tgIGJpdG1hcHMgaW4gdGhlIFJJU0MtViBLVk0gYXJjaGl0ZWN0dXJlLCByZXBsYWNpbmcgYSBsb2NrbGVzcyBhcHByb2FjaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgdkNQVSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGZ1bmN0aW9ucyB0aGF0IHNldC91bnNldCBpbnRlcnJ1cHRzIGFuZCBtb2RpZnkgQ1NScywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgaW50ZXJhY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNTo0Mzo1Ni4zMzExMjk1MzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTA3NDEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJmMzEwYjAyZjU3MTA1OTFhNzc0YTc2NGE3Y2NkNTNmOTAzYWIyYmZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgOCAxNTo0Mzo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCA3NWIwYTk1MWMxYmM2Zi4uOTdlNDI2NDVjYmFiZWUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTIwNywxMyArMjA3LDEzIEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcXG4gXFx0LypcXG4gXFx0ICogVkNQVSBpbnRlcnJ1cHRzXFxuIFxcdCAqXFxuLVxcdCAqIFdlIGhhdmUgYSBsb2NrbGVzcyBhcHByb2FjaCBmb3IgdHJhY2tpbmcgcGVuZGluZyBWQ1BVIGludGVycnVwdHNcXG4tXFx0ICogaW1wbGVtZW50ZWQgdXNpbmcgYXRvbWljIGJpdG9wcy4gVGhlIGlycXNfcGVuZGluZyBiaXRtYXAgcmVwcmVzZW50XFxuLVxcdCAqIHBlbmRpbmcgaW50ZXJydXB0cyB3aGVyZWFzIGlycXNfcGVuZGluZ19tYXNrIHJlcHJlc2VudCBiaXRzIGNoYW5nZWRcXG4tXFx0ICogaW4gaXJxc19wZW5kaW5nLiBPdXIgYXBwcm9hY2ggaXMgbW9kZWxlZCBhcm91bmQgbXVsdGlwbGUgcHJvZHVjZXJcXG4tXFx0ICogYW5kIHNpbmdsZSBjb25zdW1lciBwcm9ibGVtIHdoZXJlIHRoZSBjb25zdW1lciBpcyB0aGUgVkNQVSBpdHNlbGYuXFxuK1xcdCAqIFRoZSBpcnFzX3BlbmRpbmcgYml0bWFwIHJlcHJlc2VudHMgcGVuZGluZyBpbnRlcnJ1cHRzIHdoZXJlYXNcXG4rXFx0ICogaXJxc19wZW5kaW5nX21hc2sgcmVwcmVzZW50cyBiaXRzIGNoYW5nZWQgaW4gaXJxc19wZW5kaW5nLiBVcGRhdGVzXFxuK1xcdCAqIHRvIHRoZXNlIGJpdG1hcHMgYXJlIHNlcmlhbGl6ZWQgc28gdmNwdSBpbnRlcnJ1cHQgc3luYy9mbHVzaCBjYW5ub3RcXG4rXFx0ICogZHJvcCBhIG5ld2x5IGluamVjdGVkIGludGVycnVwdCB3aGlsZSBzeW5jaW5nIGd1ZXN0LXZpc2libGUgSFZJUC5cXG4gXFx0ICovXFxuICNkZWZpbmUgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRU1xcdDY0XFxuK1xcdHJhd19zcGlubG9ja190IGlycXNfcGVuZGluZ19sb2NrO1xcbiBcXHRERUNMQVJFX0JJVE1BUChpcnFzX3BlbmRpbmcsIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpO1xcbiBcXHRERUNMQVJFX0JJVE1BUChpcnFzX3BlbmRpbmdfbWFzaywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9haWEuYyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXFxuaW5kZXggNWVjNTAzMjg4NTU1ZDEuLjgyMWQyY2I2ZDZhNmQ5IDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vYWlhLmNcXG5AQCAtNTAsMTcgKzUwLDIxIEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9haWFfY3NyICpjc3IgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3I7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbWFzaywgdmFsO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4gXFx0aWYgKCFrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRpZiAoUkVBRF9PTkNFKHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0pKSB7XFxuLVxcdFxcdG1hc2sgPSB4Y2hnX2FjcXVpcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0sIDApO1xcbi1cXHRcXHR2YWwgPSBSRUFEX09OQ0UodmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMV0pIFxcdTAwMjYgbWFzaztcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuK1xcdG1hc2sgPSB2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdO1xcbitcXHRpZiAobWFzaykge1xcbitcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdID0gMDtcXG4rXFx0XFx0dmFsID0gdmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMV0gXFx1MDAyNiBtYXNrO1xcbiBcXG4gXFx0XFx0Y3NyLVxcdTAwM2VodmlwaCBcXHUwMDI2PSB+bWFzaztcXG4gXFx0XFx0Y3NyLVxcdTAwM2VodmlwaCB8PSB2YWw7XFxuIFxcdH1cXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcXG4gfVxcbiBcXG4gdm9pZCBrdm1fcmlzY3ZfdmNwdV9haWFfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5AQCAtMjA1LDYgKzIwOSw5IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1X2FpYV9jc3IgKmNzciA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmFpYV9jb250ZXh0Lmd1ZXN0X2NzcjtcXG4gXFx0dW5zaWduZWQgbG9uZyByZWdzX21heCA9IHNpemVvZihzdHJ1Y3Qga3ZtX3Jpc2N2X2FpYV9jc3IpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xcbisjaWZkZWYgQ09ORklHXzMyQklUXFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuKyNlbmRpZlxcbiBcXG4gXFx0aWYgKCFyaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZSh2Y3B1LVxcdTAwM2VhcmNoLmlzYSwgU1NBSUEpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5AQCAtMjE0LDExICsyMjEsMTggQEAgaW50IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0cmVnX251bSA9IGFycmF5X2luZGV4X25vc3BlYyhyZWdfbnVtLCByZWdzX21heCk7XFxuIFxcbiBcXHRpZiAoa3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSkge1xcbi1cXHRcXHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xcbi1cXG4gI2lmZGVmIENPTkZJR18zMkJJVFxcbi1cXHRcXHRpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9BSUFfUkVHKHNpcGgpKVxcbi1cXHRcXHRcXHRXUklURV9PTkNFKHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0sIDApO1xcbitcXHRcXHRpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9BSUFfUkVHKHNpcGgpKSB7XFxuK1xcdFxcdFxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xcbitcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdID0gMDtcXG4rXFx0XFx0XFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIGZsYWdzKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHZhbDtcXG4rXFx0XFx0fVxcbisjZWxzZVxcbitcXHRcXHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xcbiAjZW5kaWZcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jXFxuaW5kZXggYTczNjkwZWRhODRiNWEuLmIwNDczMGNjZDYyY2VkIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuY1xcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuY1xcbkBAIC04MCw2ICs4MCw3IEBAIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl92Y3B1X2NvbnRleHRfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXG4gc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3Jlc2V0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGt2bV9zYmlfcmVzZXQpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0Ym9vbCBsb2FkZWQ7XFxuIFxcbiBcXHQvKipcXG5AQCAtMTA0LDggKzEwNSwxMCBAQCBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wga3ZtX3NiaV9yZXNldClcXG4gXFxuIFxcdGt2bV9yaXNjdl92Y3B1X2FpYV9yZXNldCh2Y3B1KTtcXG4gXFxuK1xcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xcbiBcXHRiaXRtYXBfemVybyh2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XFxuIFxcdGJpdG1hcF96ZXJvKHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2ssIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpO1xcbitcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0a3ZtX3Jpc2N2X3ZjcHVfcG11X3Jlc2V0KHZjcHUpO1xcbiBcXG5AQCAtMTUxLDYgKzE1NCw3IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBcXHQvKiBTZXR1cCBWQ1BVIGhmZW5jZSBxdWV1ZSAqL1xcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5oZmVuY2VfbG9jayk7XFxuK1xcdHJhd19zcGluX2xvY2tfaW5pdChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jayk7XFxuIFxcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5yZXNldF9zdGF0ZS5sb2NrKTtcXG4gXFxuQEAgLTM1MiwxNCArMzU2LDE4IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfY3NyO1xcbiBcXHR1bnNpZ25lZCBsb25nIG1hc2ssIHZhbDtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuLVxcdGlmIChSRUFEX09OQ0UodmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSkpIHtcXG4tXFx0XFx0bWFzayA9IHhjaGdfYWNxdWlyZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSwgMCk7XFxuLVxcdFxcdHZhbCA9IFJFQURfT05DRSh2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ1swXSkgXFx1MDAyNiBtYXNrO1xcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcXG4rXFx0bWFzayA9IHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF07XFxuK1xcdGlmIChtYXNrKSB7XFxuK1xcdFxcdHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF0gPSAwO1xcbitcXHRcXHR2YWwgPSB2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ1swXSBcXHUwMDI2IG1hc2s7XFxuIFxcbiBcXHRcXHRjc3ItXFx1MDAzZWh2aXAgXFx1MDAyNj0gfm1hc2s7XFxuIFxcdFxcdGNzci1cXHUwMDNlaHZpcCB8PSB2YWw7XFxuIFxcdH1cXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdC8qIEZsdXNoIEFJQSBoaWdoIGludGVycnVwdHMgKi9cXG4gXFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX2ZsdXNoX2ludGVycnVwdHModmNwdSk7XFxuQEAgLTM2OCw2ICszNzYsNyBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBodmlwO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCAqdiA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5ndWVzdF9jc3I7XFxuIFxcbkBAIC0zNzYsNiArMzg1LDcgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gXFx0LyogU3luYy11cCBIVklQLlZTU0lQIGJpdCBjaGFuZ2VzIGRvZXMgYnkgR3Vlc3QgKi9cXG4gXFx0aHZpcCA9IG5jc3JfcmVhZChDU1JfSFZJUCk7XFxuK1xcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2di1cXHUwMDNlaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcXG4gXFx0aWYgKChjc3ItXFx1MDAzZWh2aXAgXiBodmlwKSBcXHUwMDI2ICgxVUwgXFx1MDAzY1xcdTAwM2MgSVJRX1ZTX1NPRlQpKSB7XFxuIFxcdFxcdGlmIChodmlwIFxcdTAwMjYgKDFVTCBcXHUwMDNjXFx1MDAzYyBJUlFfVlNfU09GVCkpIHtcXG4gXFx0XFx0XFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KElSUV9WU19TT0ZULFxcbkBAIC0zOTQsNiArNDA0LDcgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHQgICAgIXRlc3RfYW5kX3NldF9iaXQoSVJRX1BNVV9PVkYsIHYtXFx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcXG4gXFx0XFx0XFx0Y2xlYXJfYml0KElSUV9QTVVfT1ZGLCB2LVxcdTAwM2VpcnFzX3BlbmRpbmcpO1xcbiBcXHR9XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2LVxcdTAwM2VpcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0LyogU3luYy11cCBBSUEgaGlnaCBpbnRlcnJ1cHRzICovXFxuIFxcdGt2bV9yaXNjdl92Y3B1X2FpYV9zeW5jX2ludGVycnVwdHModmNwdSk7XFxuQEAgLTQwNCw2ICs0MTUsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBpbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFdlIG9ubHkgYWxsb3cgVlMtbW9kZSBzb2Z0d2FyZSwgdGltZXIsIGFuZCBleHRlcm5hbFxcbiBcXHQgKiBpbnRlcnJ1cHRzIHdoZW4gaXJxIGlzIG9uZSBvZiB0aGUgbG9jYWwgaW50ZXJydXB0c1xcbkBAIC00MTYsOSArNDI5LDEwIEBAIGludCBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSlcXG4gXFx0ICAgIGlycSAhPSBJUlFfUE1VX09WRilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcXG4gXFx0c2V0X2JpdChpcnEsIHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nKTtcXG4tXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIFxcdHNldF9iaXQoaXJxLCB2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrKTtcXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdGt2bV92Y3B1X2tpY2sodmNwdSk7XFxuIFxcbkBAIC00MjcsNiArNDQxLDggQEAgaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxcbiBcXG4gaW50IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFdlIG9ubHkgYWxsb3cgVlMtbW9kZSBzb2Z0d2FyZSwgdGltZXIsIGNvdW50ZXIgb3ZlcmZsb3cgYW5kIGV4dGVybmFsXFxuIFxcdCAqIGludGVycnVwdHMgd2hlbiBpcnEgaXMgb25lIG9mIHRoZSBsb2NhbCBpbnRlcnJ1cHRzXFxuQEAgLTQzOSw5ICs0NTUsMTAgQEAgaW50IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXFxuIFxcdCAgICBpcnEgIT0gSVJRX1BNVV9PVkYpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuIFxcdGNsZWFyX2JpdChpcnEsIHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nKTtcXG4tXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIFxcdHNldF9iaXQoaXJxLCB2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrKTtcXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXFxuaW5kZXggYmI5MjBlODkyM2M5MzAuLmNiYTM2ODI5NDRiNjk0IDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmNcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXFxuQEAgLTI5OCw2ICsyOTgsNyBAQCBzdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfY3NyO1xcbiBcXHR1bnNpZ25lZCBsb25nIHJlZ3NfbWF4ID0gc2l6ZW9mKHN0cnVjdCBrdm1fcmlzY3ZfY3NyKSAvIHNpemVvZih1bnNpZ25lZCBsb25nKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdGlmIChyZWdfbnVtIFxcdTAwM2U9IHJlZ3NfbWF4KVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5AQCAtMzA5LDEwICszMTAsMTQgQEAgc3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRyZWdfdmFsIFxcdTAwM2NcXHUwMDNjPSBWU0lQX1RPX0hWSVBfU0hJRlQ7XFxuIFxcdH1cXG4gXFxuLVxcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSByZWdfdmFsO1xcbi1cXG4tXFx0aWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfUkVHKHNpcCkpXFxuLVxcdFxcdFdSSVRFX09OQ0UodmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSwgMCk7XFxuK1xcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX1JFRyhzaXApKSB7XFxuK1xcdFxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gcmVnX3ZhbDtcXG4rXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSA9IDA7XFxuK1xcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSByZWdfdmFsO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNTo0Mzo1Ni45NDA5NjkzOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzcwMzExNzI1MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdFwiLFxuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0XCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNwaW5sb2NrIHRvIHNlcmlhbGl6ZSB1cGRhdGVzIHRvIHRoZSBgaXJxc19wZW5kaW5nYCBhbmQgYGlycXNfcGVuZGluZ19tYXNrYCBiaXRtYXBzIGluIHRoZSBSSVNDLVYgS1ZNIGFyY2hpdGVjdHVyZSwgcmVwbGFjaW5nIGEgbG9ja2xlc3MgYXBwcm9hY2guIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIHZDUFUgaW50ZXJydXB0IGhhbmRsaW5nIGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBmdW5jdGlvbnMgdGhhdCBzZXQvdW5zZXQgaW50ZXJydXB0cyBhbmQgbW9kaWZ5IENTUnMsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGludGVyYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyZjMxMGIwMmY1NzEwNTkxYTc3NGE3NjRhN2NjZDUzZjkwM2FiMmJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAxNTo0Mzo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggNzViMGE5NTFjMWJjNmYuLjk3ZTQyNjQ1Y2JhYmVlIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0yMDcsMTMgKzIwNywxMyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XG4gXHQvKlxuIFx0ICogVkNQVSBpbnRlcnJ1cHRzXG4gXHQgKlxuLVx0ICogV2UgaGF2ZSBhIGxvY2tsZXNzIGFwcHJvYWNoIGZvciB0cmFja2luZyBwZW5kaW5nIFZDUFUgaW50ZXJydXB0c1xuLVx0ICogaW1wbGVtZW50ZWQgdXNpbmcgYXRvbWljIGJpdG9wcy4gVGhlIGlycXNfcGVuZGluZyBiaXRtYXAgcmVwcmVzZW50XG4tXHQgKiBwZW5kaW5nIGludGVycnVwdHMgd2hlcmVhcyBpcnFzX3BlbmRpbmdfbWFzayByZXByZXNlbnQgYml0cyBjaGFuZ2VkXG4tXHQgKiBpbiBpcnFzX3BlbmRpbmcuIE91ciBhcHByb2FjaCBpcyBtb2RlbGVkIGFyb3VuZCBtdWx0aXBsZSBwcm9kdWNlclxuLVx0ICogYW5kIHNpbmdsZSBjb25zdW1lciBwcm9ibGVtIHdoZXJlIHRoZSBjb25zdW1lciBpcyB0aGUgVkNQVSBpdHNlbGYuXG4rXHQgKiBUaGUgaXJxc19wZW5kaW5nIGJpdG1hcCByZXByZXNlbnRzIHBlbmRpbmcgaW50ZXJydXB0cyB3aGVyZWFzXG4rXHQgKiBpcnFzX3BlbmRpbmdfbWFzayByZXByZXNlbnRzIGJpdHMgY2hhbmdlZCBpbiBpcnFzX3BlbmRpbmcuIFVwZGF0ZXNcbitcdCAqIHRvIHRoZXNlIGJpdG1hcHMgYXJlIHNlcmlhbGl6ZWQgc28gdmNwdSBpbnRlcnJ1cHQgc3luYy9mbHVzaCBjYW5ub3RcbitcdCAqIGRyb3AgYSBuZXdseSBpbmplY3RlZCBpbnRlcnJ1cHQgd2hpbGUgc3luY2luZyBndWVzdC12aXNpYmxlIEhWSVAuXG4gXHQgKi9cbiAjZGVmaW5lIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVNcdDY0XG4rXHRyYXdfc3BpbmxvY2tfdCBpcnFzX3BlbmRpbmdfbG9jaztcbiBcdERFQ0xBUkVfQklUTUFQKGlycXNfcGVuZGluZywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XG4gXHRERUNMQVJFX0JJVE1BUChpcnFzX3BlbmRpbmdfbWFzaywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vYWlhLmMgYi9hcmNoL3Jpc2N2L2t2bS9haWEuY1xuaW5kZXggNWVjNTAzMjg4NTU1ZDEuLjgyMWQyY2I2ZDZhNmQ5IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vYWlhLmNcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXG5AQCAtNTAsMTcgKzUwLDIxIEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdV9haWFfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guYWlhX2NvbnRleHQuZ3Vlc3RfY3NyO1xuIFx0dW5zaWduZWQgbG9uZyBtYXNrLCB2YWw7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKCFrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSkpIHtcbi1cdFx0bWFzayA9IHhjaGdfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0sIDApO1xuLVx0XHR2YWwgPSBSRUFEX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1sxXSkgXHUwMDI2IG1hc2s7XG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4rXHRtYXNrID0gdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdO1xuK1x0aWYgKG1hc2spIHtcbitcdFx0dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdID0gMDtcbitcdFx0dmFsID0gdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1sxXSBcdTAwMjYgbWFzaztcbiBcbiBcdFx0Y3NyLVx1MDAzZWh2aXBoIFx1MDAyNj0gfm1hc2s7XG4gXHRcdGNzci1cdTAwM2VodmlwaCB8PSB2YWw7XG4gXHR9XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiB9XG4gXG4gdm9pZCBrdm1fcmlzY3ZfdmNwdV9haWFfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC0yMDUsNiArMjA5LDkgQEAgaW50IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfYWlhX2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmFpYV9jb250ZXh0Lmd1ZXN0X2NzcjtcbiBcdHVuc2lnbmVkIGxvbmcgcmVnc19tYXggPSBzaXplb2Yoc3RydWN0IGt2bV9yaXNjdl9haWFfY3NyKSAvIHNpemVvZih1bnNpZ25lZCBsb25nKTtcbisjaWZkZWYgQ09ORklHXzMyQklUXG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuKyNlbmRpZlxuIFxuIFx0aWYgKCFyaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZSh2Y3B1LVx1MDAzZWFyY2guaXNhLCBTU0FJQSkpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuQEAgLTIxNCwxMSArMjIxLDE4IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRyZWdfbnVtID0gYXJyYXlfaW5kZXhfbm9zcGVjKHJlZ19udW0sIHJlZ3NfbWF4KTtcbiBcbiBcdGlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKSB7XG4tXHRcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7XG4tXG4gI2lmZGVmIENPTkZJR18zMkJJVFxuLVx0XHRpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9BSUFfUkVHKHNpcGgpKVxuLVx0XHRcdFdSSVRFX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdLCAwKTtcbitcdFx0aWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfQUlBX1JFRyhzaXBoKSkge1xuK1x0XHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbitcdFx0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xuK1x0XHRcdHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSA9IDA7XG4rXHRcdFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLFxuK1x0XHRcdFx0XHRcdCAgIGZsYWdzKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xuK1x0XHR9XG4rI2Vsc2VcbitcdFx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHZhbDtcbiAjZW5kaWZcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92Y3B1LmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1LmNcbmluZGV4IGE3MzY5MGVkYTg0YjVhLi5iMDQ3MzBjY2Q2MmNlZCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jXG5AQCAtODAsNiArODAsNyBAQCBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfdmNwdV9jb250ZXh0X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wga3ZtX3NiaV9yZXNldClcbiB7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0Ym9vbCBsb2FkZWQ7XG4gXG4gXHQvKipcbkBAIC0xMDQsOCArMTA1LDEwIEBAIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBrdm1fc2JpX3Jlc2V0KVxuIFxuIFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX3Jlc2V0KHZjcHUpO1xuIFxuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFx0Yml0bWFwX3plcm8odmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XG4gXHRiaXRtYXBfemVybyh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2ssIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpO1xuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXG4gXHRrdm1fcmlzY3ZfdmNwdV9wbXVfcmVzZXQodmNwdSk7XG4gXG5AQCAtMTUxLDYgKzE1NCw3IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHQvKiBTZXR1cCBWQ1BVIGhmZW5jZSBxdWV1ZSAqL1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmhmZW5jZV9sb2NrKTtcbitcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2spO1xuIFxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnJlc2V0X3N0YXRlLmxvY2spO1xuIFxuQEAgLTM1MiwxNCArMzU2LDE4IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2NzcjtcbiBcdHVuc2lnbmVkIGxvbmcgbWFzaywgdmFsO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdGlmIChSRUFEX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdKSkge1xuLVx0XHRtYXNrID0geGNoZ19hY3F1aXJlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSwgMCk7XG4tXHRcdHZhbCA9IFJFQURfT05DRSh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzBdKSBcdTAwMjYgbWFzaztcbitcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbitcdG1hc2sgPSB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF07XG4rXHRpZiAobWFzaykge1xuK1x0XHR2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF0gPSAwO1xuK1x0XHR2YWwgPSB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzBdIFx1MDAyNiBtYXNrO1xuIFxuIFx0XHRjc3ItXHUwMDNlaHZpcCBcdTAwMjY9IH5tYXNrO1xuIFx0XHRjc3ItXHUwMDNlaHZpcCB8PSB2YWw7XG4gXHR9XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiBcbiBcdC8qIEZsdXNoIEFJQSBoaWdoIGludGVycnVwdHMgKi9cbiBcdGt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzKHZjcHUpO1xuQEAgLTM2OCw2ICszNzYsNyBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGh2aXA7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IGt2bV92Y3B1X2FyY2ggKnYgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2g7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfY3NyO1xuIFxuQEAgLTM3Niw2ICszODUsNyBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHQvKiBTeW5jLXVwIEhWSVAuVlNTSVAgYml0IGNoYW5nZXMgZG9lcyBieSBHdWVzdCAqL1xuIFx0aHZpcCA9IG5jc3JfcmVhZChDU1JfSFZJUCk7XG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2di1cdTAwM2VpcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFx0aWYgKChjc3ItXHUwMDNlaHZpcCBeIGh2aXApIFx1MDAyNiAoMVVMIFx1MDAzY1x1MDAzYyBJUlFfVlNfU09GVCkpIHtcbiBcdFx0aWYgKGh2aXAgXHUwMDI2ICgxVUwgXHUwMDNjXHUwMDNjIElSUV9WU19TT0ZUKSkge1xuIFx0XHRcdGlmICghdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcbkBAIC0zOTQsNiArNDA0LDcgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQgICAgIXRlc3RfYW5kX3NldF9iaXQoSVJRX1BNVV9PVkYsIHYtXHUwMDNlaXJxc19wZW5kaW5nX21hc2spKVxuIFx0XHRcdGNsZWFyX2JpdChJUlFfUE1VX09WRiwgdi1cdTAwM2VpcnFzX3BlbmRpbmcpO1xuIFx0fVxuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2di1cdTAwM2VpcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFxuIFx0LyogU3luYy11cCBBSUEgaGlnaCBpbnRlcnJ1cHRzICovXG4gXHRrdm1fcmlzY3ZfdmNwdV9haWFfc3luY19pbnRlcnJ1cHRzKHZjcHUpO1xuQEAgLTQwNCw2ICs0MTUsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4gXHQvKlxuIFx0ICogV2Ugb25seSBhbGxvdyBWUy1tb2RlIHNvZnR3YXJlLCB0aW1lciwgYW5kIGV4dGVybmFsXG4gXHQgKiBpbnRlcnJ1cHRzIHdoZW4gaXJxIGlzIG9uZSBvZiB0aGUgbG9jYWwgaW50ZXJydXB0c1xuQEAgLTQxNiw5ICs0MjksMTAgQEAgaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIFx0ICAgIGlycSAhPSBJUlFfUE1VX09WRilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXHRzZXRfYml0KGlycSwgdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZyk7XG4tXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdHNldF9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2spO1xuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXG4gXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIFxuQEAgLTQyNyw2ICs0NDEsOCBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXG4gXG4gaW50IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbiBcdC8qXG4gXHQgKiBXZSBvbmx5IGFsbG93IFZTLW1vZGUgc29mdHdhcmUsIHRpbWVyLCBjb3VudGVyIG92ZXJmbG93IGFuZCBleHRlcm5hbFxuIFx0ICogaW50ZXJydXB0cyB3aGVuIGlycSBpcyBvbmUgb2YgdGhlIGxvY2FsIGludGVycnVwdHNcbkBAIC00MzksOSArNDU1LDEwIEBAIGludCBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIFx0ICAgIGlycSAhPSBJUlFfUE1VX09WRilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXHRjbGVhcl9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nKTtcbi1cdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuIFx0c2V0X2JpdChpcnEsIHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFzayk7XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuY1xuaW5kZXggYmI5MjBlODkyM2M5MzAuLmNiYTM2ODI5NDRiNjk0IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuY1xuQEAgLTI5OCw2ICsyOTgsNyBAQCBzdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2NzcjtcbiBcdHVuc2lnbmVkIGxvbmcgcmVnc19tYXggPSBzaXplb2Yoc3RydWN0IGt2bV9yaXNjdl9jc3IpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGlmIChyZWdfbnVtIFx1MDAzZT0gcmVnc19tYXgpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuQEAgLTMwOSwxMCArMzEwLDE0IEBAIHN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0cmVnX3ZhbCBcdTAwM2NcdTAwM2M9IFZTSVBfVE9fSFZJUF9TSElGVDtcbiBcdH1cbiBcbi1cdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSByZWdfdmFsO1xuLVxuLVx0aWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfUkVHKHNpcCkpXG4tXHRcdFdSSVRFX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdLCAwKTtcbitcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX1JFRyhzaXApKSB7XG4rXHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbitcdFx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHJlZ192YWw7XG4rXHRcdHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSA9IDA7XG4rXHRcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuK1x0fSBlbHNlIHtcbitcdFx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHJlZ192YWw7XG4rXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNTo0Mzo1Ni45NDA5NzA4N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzY3NjYzMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUklTQy1WIEtWTSBTcGlubG9jayBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgaW50cm9kdWNpbmcgYSBgcmF3X3NwaW5sb2NrX3RgIGNhbGxlZCBgaXJxc19wZW5kaW5nX2xvY2tgIHdpdGhpbiBgc3RydWN0IGt2bV92Y3B1X2FyY2hgIHNwZWNpZmljYWxseSBmb3IgUklTQy1WIEtWTS4gRXNzZW50aWFsbHksIGl0J3Mgc3dhcHBpbmcgb3V0IHRoZSBleGlzdGluZyBsb2NrbGVzcyBhcHByb2FjaCwgd2hpY2ggcmVsaWVkIG9uIHRoaW5ncyBsaWtlIGB4Y2hnX2FjcXVpcmVgIGFuZCBtZW1vcnkgYmFycmllcnMgYmVmb3JlIGF0b21pYyBvcGVyYXRpb25zLCBmb3IgYSBtb3JlIHRyYWRpdGlvbmFsIHNwaW5sb2NrLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgYXJjaGl0ZWN0dXJhbCBzaGlmdC4gVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIFJJU0MtViBLVk0gYXJjaGl0ZWN0dXJlLCBzbyB3ZSBuZWVkIHRvIGJlIHZlcnkgdGhvcm91Z2guXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC9yaXNjdi9rdm0vYWlhLmNgLCBgYXJjaC9yaXNjdi9rdm0vdmNwdS5jYCwgYW5kIGBhcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jYCwgbWVhbmluZyBpdCdzIGxpa2VseSBpbXBhY3RpbmcgY3JpdGljYWwgYXJlYXMgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaGFuZGxpbmcgYW5kIHZDUFUgbWFuYWdlbWVudC4gV2UgbmVlZCB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciwgZXZlbiB3b3JzZSwgaW50cm9kdWNlIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgZGVzcGl0ZSB0aGUgaW50ZW50IG9mIHRoZSBsb2NrLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQncyBSSVNDLVYgS1ZNLCBzbyBjbGVhcmx5IGBDT05GSUdfS1ZNYCBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBSSVNDLVYuIEJ1dCBJIHNob3VsZCBsb29rIGNsb3NlciBhdCBhbnkgUklTQy1WIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zLiBUaGUgZGlmZiBtZW50aW9ucyBgQ09ORklHXzMyQklUYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gV2hpbGUgUklTQy1WIEtWTSBpcyBwcmltYXJpbHkgZm9jdXNlZCBvbiA2NC1iaXQgc3lzdGVtcywgdGhlIG1lbnRpb24gb2YgMzItYml0IHN1Z2dlc3RzIHRoZXJlIG1pZ2h0IGJlIHNvbWUgY29uZGl0aW9uYWwgbG9naWMgYXQgcGxheS4gTGV0IG1lIHB1bGwgdXAgYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSByZWxhdGVkIGNvbmRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIG9yIGlmIGBDT05GSUdfMzJCSVRgIGl0c2VsZiBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIHNwaW5sb2NrIGlzIGJlaW5nIGNvbmRpdGlvbmFsbHkgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ0OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ0OjMxLjMwODYzNjM3MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjU4MDA3ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6NDQ6MzEuNzM0NDQ3MjQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM4NDE4ODU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIHZDUFUgSW50ZXJydXB0IEhhbmRsaW5nIGZvciBGdXp6aW5nKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgYXJlYSB3ZSdyZSBsb29raW5nIGF0IGhlcmUgaXMgS1ZNIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGluZyB0byB0aGUgUklTQy1WIHZDUFUuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIEFyZSB0aGVyZSBvdGhlciBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoZSBLVk0gc2V0dXAgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IExldCBtZSB0aGluay5cblxuUmlnaHQsIEkndmUgZ290IGEgbGlzdCBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zOiBga3ZtX3Jpc2N2X3ZjcHVfYWlhX2ZsdXNoX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JgLCBga3ZtX3Jpc2N2X3Jlc2V0X3ZjcHVgLCBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLCBga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0c2AsIGBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdGAsIGBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHRgLCBhbmQgYGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcmAuIFRoZXNlIGFyZSBrZXkgcGxheWVycyBpbiBob3cgS1ZNIGhhbmRsZXMgaW50ZXJydXB0cyB3aXRoaW4gdGhlIFJJU0MtViB2Q1BVLiBDb25zaWRlcmluZyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaGFuZGxpbmcsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuXG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBpc3N1ZXMgaW4gaW50ZXJydXB0IG1hbmFnZW1lbnQsIEkndmUgZ290IHRvIHByaW9yaXRpemUgdGhlIGtleSBzeW1ib2xzIGZvciBmdXp6aW5nLiBUaGUgbGlzdCBzaG91bGQgYmU6IGBrdm1fcmlzY3ZfdmNwdV9haWFfZmx1c2hfaW50ZXJydXB0c2AsIGBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcmAsIGBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0c2AsIGBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0YCwgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGAsIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyYC5cblxuSG9sZCBvbi4gYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzYCBhcmUgaW50ZXJlc3RpbmcuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBwYXRocyB0byBzZWUgaG93IGZyZXF1ZW50bHkgdGhleSBhcmUgY2FsbGVkLiBNeSBndXQgdGVsbHMgbWUgdGhlc2UgY291bGQgYmUgaG90LXBhdGggZnVuY3Rpb25zLCBwb3NzaWJseSBjYWxsZWQgb24gZXZlcnkgVk0gZXhpdCBvciBlbnRyeSwgbWFraW5nIHRoZW0gcGFydGljdWxhcmx5IGNydWNpYWwgZm9yIGZ1enppbmcuIExldCdzIGRpZyBpbnRvIHRoYXQgY2FsbCBncmFwaCB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjM5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ0OjM4LjExODYzODk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2Nzg2ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz0zNTA9aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMzU0LVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzozNTU6dm9pZCBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMzU2LXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz04NDY9aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy05MzEtXFx0XFx0ICovXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjkzMjpcXHRcXHRrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzKHZjcHUpO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy05MzMtXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jPTI3Mz1zdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfZ2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jLTI4NS1cXHRpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9SRUcoc2lwKSkge1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM6Mjg2OlxcdFxcdGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHModmNwdSk7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYy0yODctXFx0XFx0Km91dF92YWwgPSAoY3NyLVxcdTAwM2VodmlwIFxcdTAwM2VcXHUwMDNlIFZTSVBfVE9fSFZJUF9TSElGVCkgXFx1MDAyNiBWU0lQX1ZBTElEX01BU0s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ0OjM4LjE4NTQzNDc1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODI4NjU4ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludGVycnVwdCBTeW5jaHJvbml6YXRpb24gaW4gdGhlIFJJU0MtViBLVk0gdkNQVSBSdW4gTG9vcCoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaW50ZXJydXB0IGhhbmRsaW5nIHdpdGhpbiB0aGUgS1ZNIFJJU0MtViBhcmNoaXRlY3R1cmUuIEknbSByZWNhbGxpbmcgdGhhdCBga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0c2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgd2l0aGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgdkNQVSdzIGV4ZWN1dGlvbiBjeWNsZSwgc28gaXQgbWFrZXMgc2Vuc2UgdGhhdCBpbnRlcnJ1cHQgZmx1c2hpbmcgd291bGQgaGFwcGVuIHRoZXJlLCBlbnN1cmluZyBhIGNsZWFuIHNsYXRlIGJlZm9yZSBlYWNoIHJ1bi4gVGhlIHF1ZXN0aW9uIEknbSB0dXJuaW5nIG92ZXIgbm93LCB0aG91Z2gsIGlzIGFib3V0IGBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHNgLiBXaGVyZSBkb2VzICp0aGF0KiBmaXQgaW50byB0aGUgcGljdHVyZT8gV2hhdCdzIGl0cyByb2xlIGFuZCByZWxhdGlvbnNoaXAgdG8gdGhlIGZsdXNoIGZ1bmN0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgc2VxdWVuY2Ugb2YgZXZlbnRzIHRvIG1ha2Ugc3VyZSBpbnRlcnJ1cHQgaW5qZWN0aW9uIGFuZCBoYW5kbGluZyBhcmUgaW1wbGVtZW50ZWQgY29ycmVjdGx5IGFuZCBlZmZpY2llbnRseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYxNCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ0OjQxLjc2ODMwMzAzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNzQ1MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTM1NT12b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTM3NS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6Mzc2OnZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMzc3LXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz04NDY9aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy05NjQtXFx0XFx0LyogU3luY3VwIGludGVycnVwdHMgc3RhdGUgd2l0aCBIVyAqL1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzo5NjU6XFx0XFx0a3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHZjcHUpO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy05NjYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ0OjQxLjgzMTA1NDgyN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTg1ODA0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQW5hbHl6aW5nIEtWTSBIb3QtUGF0aCBGdW5jdGlvbiBDYWxscyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IHBlcmZvcm1hbmNlLWNyaXRpY2FsIHNlY3Rpb25zIG9mIHRoZSBLVk0gY29kZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gUklTQy1WIHZpcnR1YWxpemF0aW9uLiBUaGUgb2JzZXJ2YXRpb24gYWJvdXQgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCBiZWluZyBhIGhvdC1wYXRoIGZ1bmN0aW9uIGlzIHNwb3Qgb24sIHRoYXQncyBleHBlY3RlZC4gSXQncyB0aGUgY29yZSBsb29wIHdoZXJlIHRoZSBndWVzdCdzIGV4ZWN1dGlvbiBpcyBlbXVsYXRlZC4gVGhlIGZhY3QgdGhhdCB3ZSdyZSB6b29taW5nIGluIG9uIGl0IHN1Z2dlc3RzIHdlIGFyZSBsb29raW5nIGZvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIHdpdGhpbiB0aGF0IGNyaXRpY2FsIHNlY3Rpb24uXG5cblRoZSBtb3JlIGludGVyZXN0aW5nIHF1ZXN0aW9uIG5vdywgaG93ZXZlciwgaXMgd2hldGhlciBga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdGAgYW5kIGBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHRgIGFyZSBhbHNvIGhvdC1wYXRoIGZ1bmN0aW9ucy4gSW50ZXJydXB0IGhhbmRsaW5nIGlzIGFsd2F5cyBhIGNyaXRpY2FsIGFyZWEgaW4gdmlydHVhbGl6YXRpb24sIHNpbmNlIGZyZXF1ZW50LCBlZmZpY2llbnQgaGFuZGxpbmcgaXMgaW1wb3J0YW50LCBhbmQgdGhlc2UgcGFydGljdWxhciBmdW5jdGlvbnMgYXJlIGNsZWFybHkgaW52b2x2ZWQgaW4gbWFuYWdpbmcgaW50ZXJydXB0IGluamVjdGlvbiBhbmQgY2xlYXJpbmcsIHdoaWNoIGNvdWxkIGRpcmVjdGx5IGltcGFjdCBndWVzdCByZXNwb25zaXZlbmVzcyBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZS5cblxuV2UgbmVlZCB0byBjb25zaWRlciBob3cgZnJlcXVlbnRseSB0aG9zZSBpbnRlcnJ1cHQgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIHRoZSBjb21wbGV4aXR5IG9mIHRoZWlyIG9wZXJhdGlvbnMsIGFuZCB0aGVpciBpbXBhY3Qgb24gdGhlIHZDUFUncyBleGVjdXRpb24gZmxvdy4gVGhleSBjb3VsZCBiZSB0aGUgc291cmNlIG9mIHNpZ25pZmljYW50IG92ZXJoZWFkLCBvciB0aGV5IGNvdWxkIGJlIG9wdGltaXplZCBxdWl0ZSB3ZWxsLiBJdCdzIGRlZmluaXRlbHkgYW4gYXJlYSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTc1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6NDQ6NDYuMjI5NjM3ODRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNDE4MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jPTYxND1zdGF0aWMgdm9pZCBpbXNpY19zd2ZpbGVfZXh0aXJxX3VwZGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYy02MjktXFx0ICAgIGltc2ljX21yaWZfdG9wZWkobXJpZiwgaW1zaWMtXFx1MDAzZW5yX2VpeCwgaW1zaWMtXFx1MDAzZW5yX21zaXMpKVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jOjYzMDpcXHRcXHRrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9WU19FWFQpO1xcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jLTYzMS1cXHRlbHNlXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM9MjQ5PWxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTI2MS1cXHRcXHRpZiAoaXJxLmlycSA9PSBLVk1fSU5URVJSVVBUX1NFVClcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6MjYyOlxcdFxcdFxcdHJldHVybiBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9WU19FWFQpO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0yNjMtXFx0XFx0ZWxzZVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTM3Nj12b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtNDE1LVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzo0MTY6aW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy00MTcte1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYz0yOTM9c3RhdGljIHZvaWQga3ZtX3Jpc2N2X3BtdV9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqcGVyZl9ldmVudCxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmMtMzI4LVxcdHNldF9iaXQocG1jLVxcdTAwM2VpZHgsIGt2cG11LVxcdTAwM2VwbWNfb3ZlcmZsb3duKTtcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jOjMyOTpcXHRrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9QTVVfT1ZGKTtcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jLTMzMC1cXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3JlcGxhY2UuYz00NT1zdGF0aWMgaW50IGt2bV9zYmlfZXh0X2lwaV9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bixcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3JlcGxhY2UuYy03MS1cXHRcXHR9XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfcmVwbGFjZS5jOjcyOlxcdFxcdHJldCA9IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodG1wLCBJUlFfVlNfU09GVCk7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfcmVwbGFjZS5jLTczLVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmM9MTY9c3RhdGljIGludCBrdm1fc2JpX2V4dF92MDFfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4sXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYy01OS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYzo2MDpcXHRcXHRcXHRyZXQgPSBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHJ2Y3B1LCBJUlFfVlNfU09GVCk7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmMtNjEtXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmM9NDM9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGt2bV9yaXNjdl92Y3B1X2hydGltZXJfZXhwaXJlZChzdHJ1Y3QgaHJ0aW1lciAqaClcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYy01Ni1cXHR0LVxcdTAwM2VuZXh0X3NldCA9IGZhbHNlO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYzo1NzpcXHRrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9WU19USU1FUik7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jLTU4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNTo0NDo0Ni4yOTEwNjI1MjdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ5Mzk4ODg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBJbnRlcnJ1cHRzIGFuZCBDU1IgTWFuaXB1bGF0aW9uIGluIEtWTS9SSVNDLVYqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gbWFuYWdpbmcgaW50ZXJydXB0cyBhbmQgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVycyAoQ1NScykgd2l0aGluIHRoZSBLVk0vUklTQy1WIGVudmlyb25tZW50LiBTcGVjaWZpY2FsbHksIGBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0YCBzZWVtcyB0byBiZSB0aGUgY2VudHJhbCBmdW5jdGlvbiBmb3IgKnNldHRpbmcqIGludGVycnVwdHMg4oCTIGl0J3MgdHJpZ2dlcmVkIGJ5IFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCAoUE1VKSBvdmVyZmxvd3MsIHRpbWVyIGV4cGlyYXRpb25zLCBJbnRlci1Qcm9jZXNzb3IgSW50ZXJydXB0cyAoSVBJcyksIGFuZCB0aHJvdWdoIGlvY3RsIGNhbGxzLiBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHJlc3BvbnNpYmxlIGZvciAqY2xlYXJpbmcqIGludGVycnVwdHMsIGNvbWluZyBpbnRvIHBsYXkgd2l0aCBpb2N0bCBhbmQgdGltZXJzLlxuXG5UaGVuLCBmb3IgQ1NSIG1hbmlwdWxhdGlvbiwgd2UgaGF2ZSBga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyYCDigJMgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBpb2N0bCBvcGVyYXRpb25zIHZpYSBgc2V0X29uZV9yZWdgIGFuZCBpcyBsaWtlbHkgdXNlZCBmb3Igc2V0dGluZyBnZW5lcmFsLXB1cnBvc2UgQ1NScy4gQW5kIGZpbmFsbHksIHRoZXJlJ3MgYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYCwgYWdhaW4gZHJpdmVuIGJ5IGlvY3RsJ3MgYHNldF9vbmVfcmVnYCB0byBtYW5hZ2UgQ1NScyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKS5cblxuU28sIGdpdmVuIHRoaXMgY2FsbCBncmFwaCBhbmFseXNpcywgdGhlIGNyaXRpY2FsIGFyZWFzIEkgbmVlZCB0byB6b29tIGluIG9uIGFyZSB0aGVzZSBmb3VyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGludGVycnVwdHMgYXJlIGluamVjdGVkIGFuZCBjbGVhcmVkLCBhbmQgaG93IENTUnMsIGVzcGVjaWFsbHkgdGhlIEFJQS1zcGVjaWZpYyBvbmVzLCBhcmUgbW9kaWZpZWQuIE15IGZvY3VzIG5vdyBpcyBvbiBga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JgIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyYCB0byB1bmRlcnN0YW5kIHRoZSBDU1Igc2V0IG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MzUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6NDQ6NTEuNzg1MDU0NjI0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDkzNzM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vYWlhLmM9MTg1PWludCBrdm1fcmlzY3ZfdmNwdV9haWFfZ2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWEuYy0yMDUtXFxuYXJjaC9yaXNjdi9rdm0vYWlhLmM6MjA2OmludCBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9yaXNjdi9rdm0vYWlhLmMtMjA3LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIHJlZ19udW0sXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jPTQwMj1zdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X3NldF9yZWdfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtNDI1LVxcdGNhc2UgS1ZNX1JFR19SSVNDVl9DU1JfQUlBOlxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM6NDI2OlxcdFxcdHJjID0ga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3IodmNwdSwgcmVnX251bSwgcmVnX3ZhbCk7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYy00MjctXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ0OjUxLjg0NTk5OTUxMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjU3NjgwMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUG90ZW50aWFsOiBBIFJJU0MtViBLVk0gRGl2ZSoqXG5cbk9rYXksIHNvIHRoZSBga3ZtX3Jpc2N2X3ZjcHVfc2V0X3JlZ19jc3JgIGZ1bmN0aW9uLCBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfb25lX3JlZ2AsIHByZXNlbnRzIGEgcGVyZmVjdCBlbnRyeSBwb2ludCBmb3IgZnV6emluZy4gVGhlIHBvdGVudGlhbCBpcyBkZWZpbml0ZWx5IHRoZXJlLiBJIGNhbiBzZWUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgY2FsbCBjaGFpbiBhbmQgaG93IHRoaXMgY291bGQgYmUgZXhwbG9pdGVkIHRvIGZpbmQgc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBlbnZpcm9ubWVudC4gQXJlIHRoZXJlIGFueSBvdGhlciByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0aGF0IHdvdWxkIGltcGFjdCBvdXIgYWJpbGl0eSB0byBmdXp6IGVmZmVjdGl2ZWx5PyBJIHNhdyBgQ09ORklHXzMyQklUYCBtZW50aW9uZWQgaW4gYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYCwgYnV0IHRoZSBSSVNDLVYgS1ZNIGltcGxlbWVudGF0aW9uIGlzIGxhcmdlbHkgNjQtYml0LCBzbyBzcGVjaWZ5aW5nIGBLVk1gIHNob3VsZCBiZSBzdWZmaWNpZW50LCByYXRoZXIgdGhhbiBhbHNvIHNwZWNpZnlpbmcgYENPTkZJR18zMkJJVGAuXG5cbkFoLCByaWdodC4gYENPTkZJR18zMkJJVGAgaXMgYW4gKmFyY2hpdGVjdHVyZSogY29uZmlndXJhdGlvbiwgbm90IHNvbWV0aGluZyBJIG5lZWQgdG8gZXhwbGljaXRseSBzZXQgYXQgdGhpcyBsZXZlbC4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0IHBhcnRpY3VsYXIgb25lLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIHBlcnRpbmVudCBjb25maWd1cmF0aW9ucyB0byBjb25zaWRlci4gVGltZSB0byBnbyBiYWNrIHRvIHRoZSBzb3VyY2UgYW5kIGV4YW1pbmUgYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgIGFnYWluLiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6NDQ6NTcuNTAzNjgzMzM2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzg0NTQ3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL0tjb25maWc9Nj1zb3VyY2UgXFxcInZpcnQva3ZtL0tjb25maWdcXFwiXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy03LVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy05LVxcdGJvb2wgXFxcIlZpcnR1YWxpemF0aW9uXFxcIlxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNTo0NDo1Ny44ODIxNDUwMzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE2MTkwMjg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIFJJU0MtViBJbnRlcnJ1cHQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBLVk1gIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIHBsYXkgaGVyZS4gTGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHVuZGVyc3RhbmQgdGhlIGNvcmUgc3ltYm9scyByZWxhdGVkIHRvIGludGVycnVwdCBoYW5kbGluZy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZXNlIGZ1bmN0aW9uczogYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgLCBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCwgYGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcmAsIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JgLlxuXG5Ob3csIGNvbnNpZGVyaW5nIG15IGV4cGVyaWVuY2UgaW4gdGhpcyBzcGFjZSwgdGhlc2UgYXJlbid0IHR5cGljYWxseSBob3QtcGF0aCBmdW5jdGlvbnMuIFRoZXkncmUgdXN1YWxseSB0cmlnZ2VyZWQgYnkgc3BlY2lmaWMgZXZlbnRzLiBUaW1lciBldmVudHMsIHBlcmZvcm1hbmNlIG1vbml0b3IgdW5pdCAoUE1VKSBhY3Rpdml0eSwgb3IgZXZlbiBgaW9jdGxgIGNhbGxzIHdvdWxkIGJlIHByaW1lIGV4YW1wbGVzLCB3aGljaCBhY3R1YWxseSBtYWtlcyB0aGVtIGRlY2VudCB0YXJnZXRzIGZvciBmdXp6aW5nLiBIb3dldmVyLCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzYCBhcmUgY2FsbGVkIG9uIGV2ZXJ5IFZNIGVudHJ5L2V4aXQuIFRoYXQncyBob3QtcGF0aCBjb2RlLCBhbmQgSSBuZWVkIHRvIGF2b2lkIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gdGhvc2UuXG5cbk15IG5leHQgc3RlcCBpcyB0byBzZWUgaWYgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGAgaXMgY2FsbGVkIGZyb20gYW55IG90aGVyIGxvY2F0aW9ucyB3aXRoaW4gdGhlIGNvZGUuIFRoaXMgY291bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIGlzIHdpcmVkIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIxMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNTo0NTowMy4wNDQwNTEwNzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MTM2MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmM9NjE0PXN0YXRpYyB2b2lkIGltc2ljX3N3ZmlsZV9leHRpcnFfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jLTYzMS1cXHRlbHNlXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmM6NjMyOlxcdFxcdGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfVlNfRVhUKTtcXG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYy02MzMtXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYz02Mzc9c3RhdGljIHZvaWQgaW1zaWNfc3dmaWxlX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGNsZWFyLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmMtNjUxLVxcdFxcdG1lbXNldChpbXNpYy1cXHUwMDNlc3dmaWxlLCAwLCBzaXplb2YoKmltc2ljLVxcdTAwM2Vzd2ZpbGUpKTtcXG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYzo2NTI6XFx0XFx0a3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9WU19FWFQpO1xcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jLTY1My1cXHR9XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM9MjQ5PWxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTI2My1cXHRcXHRlbHNlXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjI2NDpcXHRcXHRcXHRyZXR1cm4ga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9WU19FWFQpO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0yNjUtXFx0fVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTQxNj1pbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtNDQxLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzo0NDI6aW50IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTQ0My17XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYz0xNj1zdGF0aWMgaW50IGt2bV9zYmlfZXh0X3YwMV9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bixcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jLTQ1LVxcdGNhc2UgU0JJX0VYVF8wXzFfQ0xFQVJfSVBJOlxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jOjQ2OlxcdFxcdHJldCA9IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfVlNfU09GVCk7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmMtNDctXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmM9ODU9c3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV91cGRhdGVfaHJ0aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBuY3ljbGVzKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jLTkzLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYzo5NDpcXHRrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX1RJTUVSKTtcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmMtOTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ1OjAzLjEwOTE5NTMzNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODY2MDgyMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZGlzdGlsbGluZyB0aGVtIGludG8gYSBtb3JlIGNvbXBsZXRlIG1lbnRhbCBtb2RlbDpcblxuKipSZWZsZWN0aW5nIG9uIEZvY3VzIFN5bWJvbHMgaW4gS1ZNL1JJU0MtViBDb250ZXh0KipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgdmFyaW91cyBlbnRyeSBwb2ludHMgb3Igc2lnbmlmaWNhbnQgYXJlYXMgcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIHBpZWNlIG9mIGNvZGUuIEl0J3MgY2xlYXIgdGhhdCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc3lzdGVtIG9jY3VyIHRocm91Z2ggYGlvY3RsYCwgdGhlIHRpbWVyIG1lY2hhbmlzbXMsIFNCSSAoU3lzdGVtIEJpbmFyeSBJbnRlcmZhY2UpLCBhbmQgdGhlIElNU0lDIChJbnRlcnJ1cHQgTWFuYWdlbWVudCBTeXN0ZW0gSW50ZXJmYWNlIENvbnRyb2xsZXIpLiBUaG9zZSBzZWVtIGxpa2UgcmVhbGx5IGdvb2QsIGZvY3VzZWQgc3ltYm9scyB0byBjZW50ZXIgbXkgdW5kZXJzdGFuZGluZyBhcm91bmQsIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGluIHRvbyBkZWVwLCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIGZ1bGwgcGljdHVyZS4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgdGhhdCBtaWdodCBhZmZlY3QgdGhpcyBjb2RlIHBhdGg/IFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC9yaXNjdi9rdm0vYWlhLmNgLiBBaCwgYGFpYS5jYC4gTm93IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoZSBjb21waWxhdGlvbiBvZiBgYWlhLmNgIGl0c2VsZiBpcyBkZXBlbmRlbnQgb24gc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgc2luY2UgdGhhdCB3b3VsZCBoYXZlIGEgc2lnbmlmaWNhbnQgaW1wYWN0IG9uIGhvdyBhbmQgd2hlcmUgdGhpcyBjb2RlIHJ1bnMuIEdvdHRhIGJlIHN1cmUgSSdtIHRha2luZyBhbGwgcG9zc2libGUgY29uZmlndXJhdGlvbnMgaW50byBhY2NvdW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYzMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ1OjA3Ljk3NTI4MTg2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM4NDAzODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWlhLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX0tWTSkgKz0ga3ZtLm9cXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlLTEyLSMgT3JkZXJlZCBhbHBoYWJldGljYWxseVxcbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlOjEzOmt2bS15ICs9IGFpYS5vXFxuYXJjaC9yaXNjdi9rdm0vTWFrZWZpbGUtMTQta3ZtLXkgKz0gYWlhX2FwbGljLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6NDU6MDguMDM5MTI5NTUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NDEwNjEzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBSSVNDLVYgSW50ZXJydXB0IEhhbmRsaW5nIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgaXNuJ3QgY29uZGl0aW9uYWwgY29tcGlsYXRpb247IGl0J3MgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQuIFRoZSByZWxldmFudCBjb25maWcgaGVyZSBpcyBqdXN0IGBLVk1gLiBHb3QgaXQuXG5cbk15IHByaW1hcnkgZm9jdXMsIGFzIGV4cGVjdGVkLCBpcyBvbiB0aGUgY29yZSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMgd2l0aGluIHRoZSBSSVNDLVYgS1ZNIGFyY2hpdGVjdHVyZS4gVGhlIGtleSBzeW1ib2xzIHRvIHNjcnV0aW5pemUgYXJlOiBga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdGAsIGBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHRgLCBga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyYCwgYW5kIGBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcmAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgc28gdG8gc3BlYWssIGluIHRlcm1zIG9mIGludGVycnVwdCBpbmplY3Rpb24gYW5kIGNvbnRyb2wuXG5cblRoZSBtZWF0IG9mIHRoZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIHNwaW5sb2NrIHRvIHNlcmlhbGl6ZSB1cGRhdGVzIHRvIHRoZSBgaXJxc19wZW5kaW5nYCBhbmQgYGlycXNfcGVuZGluZ19tYXNrYCBiaXRtYXBzLiBQcmV2aW91c2x5IGxvY2tsZXNzLCBub3cgcHJvdGVjdGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IHdlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSB2Q1BVIGludGVycnVwdCBoYW5kbGluZyBoZXJlLiBTbywgZnV6emluZyBpcyAqYWJzb2x1dGVseSogdGhlIHJpZ2h0IGFwcHJvYWNoLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UsIG15IGZ1enppbmcgY2FtcGFpZ24gbmVlZHMgdG8gemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSBob3cgdGhleSdyZSByZWFjaGVkLiBUaGlzIG1lYW5zIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGludGVyYWN0aW9ucyB0aGF0IHVsdGltYXRlbHkgdHJpZ2dlciB0aGVzZSByb3V0aW5lcywgYXMgdGhhdCdzIHRoZSBhdHRhY2sgc3VyZmFjZS5cblxuTGV0J3MgY2FsbCB0aGF0IGFwcHJvYWNoIGBzZXQtcmVzdWx0c2AuIFdlJ2xsIHVzZSB0aGUgcmVzdWx0cyB0byBidWlsZCBvdXIgdGVzdCBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNjksIk91dHB1dFRva2VucyI6MTg0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjQ1OjEzLjg4MDE5NDQ0OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxOTQxMDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0XCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHRcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzclwiLFxuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc3BpbmxvY2sgdG8gc2VyaWFsaXplIHVwZGF0ZXMgdG8gdGhlIGBpcnFzX3BlbmRpbmdgIGFuZCBgaXJxc19wZW5kaW5nX21hc2tgIGJpdG1hcHMgaW4gdGhlIFJJU0MtViBLVk0gYXJjaGl0ZWN0dXJlLCByZXBsYWNpbmcgYSBsb2NrbGVzcyBhcHByb2FjaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgdkNQVSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGZ1bmN0aW9ucyB0aGF0IHNldC91bnNldCBpbnRlcnJ1cHRzIGFuZCBtb2RpZnkgQ1NScywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgaW50ZXJhY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdFwiLFxuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyXCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzcGlubG9jayB0byBzZXJpYWxpemUgdXBkYXRlcyB0byB0aGUgYGlycXNfcGVuZGluZ2AgYW5kIGBpcnFzX3BlbmRpbmdfbWFza2AgYml0bWFwcyBpbiB0aGUgUklTQy1WIEtWTSBhcmNoaXRlY3R1cmUsIHJlcGxhY2luZyBhIGxvY2tsZXNzIGFwcHJvYWNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSB2Q1BVIGludGVycnVwdCBoYW5kbGluZyBsb2dpYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gZnVuY3Rpb25zIHRoYXQgc2V0L3Vuc2V0IGludGVycnVwdHMgYW5kIG1vZGlmeSBDU1JzLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBpbnRlcmFjdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpsnq[1] Phase: Succeeded StartedAt: 2026-07-08 15:45:25 +0000 UTC FinishedAt: 2026-07-08 15:45:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-08 15:45:25 +0000 UTC FinishedAt: 2026-07-08 15:45:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2] Phase: Succeeded StartedAt: 2026-07-08 15:45:25 +0000 UTC FinishedAt: 2026-07-08 16:55:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-08 15:45:25 +0000 UTC FinishedAt: 2026-07-08 16:55:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-08 15:45:25 +0000 UTC FinishedAt: 2026-07-08 15:45:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-08 15:45:25 +0000 UTC FinishedAt: 2026-07-08 15:45:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfpsnq/series-workflowfpsnq-convert-artifact-798124509/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-08 15:45:46 +0000 UTC FinishedAt: 2026-07-08 16:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-08 15:45:46 +0000 UTC FinishedAt: 2026-07-08 16:12:03 +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:*603abd71-5f56-4b95-ad6a-20637ce81086,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-workflowfpsnq/series-workflowfpsnq-convert-artifact-798124509/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": "80858c39-86bc-4103-85b1-f4f075fe2f5c", "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-workflowfpsnq/series-workflowfpsnq-build-action-1008024851/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-08 15:45:46 +0000 UTC FinishedAt: 2026-07-08 16:11:53 +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:*603abd71-5f56-4b95-ad6a-20637ce81086,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-workflowfpsnq/series-workflowfpsnq-convert-artifact-798124509/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": "80858c39-86bc-4103-85b1-f4f075fe2f5c", "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-workflowfpsnq/series-workflowfpsnq-build-action-1008024851/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-08 16:12:03 +0000 UTC FinishedAt: 2026-07-08 16:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-08 16:12:03 +0000 UTC FinishedAt: 2026-07-08 16:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-08 16:12:03 +0000 UTC FinishedAt: 2026-07-08 16:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-08 16:12:03 +0000 UTC FinishedAt: 2026-07-08 16:12:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfpsnq/series-workflowfpsnq-convert-artifact-3056192952/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-08 16:12:13 +0000 UTC FinishedAt: 2026-07-08 16:14:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-08 16:12:13 +0000 UTC FinishedAt: 2026-07-08 16:13:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*80858c39-86bc-4103-85b1-f4f075fe2f5c,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-workflowfpsnq/series-workflowfpsnq-build-action-1008024851/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-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-08 16:14:04 +0000 UTC FinishedAt: 2026-07-08 16:14:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-08 16:14:04 +0000 UTC FinishedAt: 2026-07-08 16:14:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-08 16:14:04 +0000 UTC FinishedAt: 2026-07-08 16:48:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-08 16:14:04 +0000 UTC FinishedAt: 2026-07-08 16:48:46 +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:*603abd71-5f56-4b95-ad6a-20637ce81086,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-workflowfpsnq/series-workflowfpsnq-convert-artifact-3056192952/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": "dcb3ba23-7c39-42b3-98a0-c752337e966d", "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-workflowfpsnq/series-workflowfpsnq-build-action-1681778340/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-08 16:14:04 +0000 UTC FinishedAt: 2026-07-08 16:48:36 +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:*603abd71-5f56-4b95-ad6a-20637ce81086,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-workflowfpsnq/series-workflowfpsnq-convert-artifact-3056192952/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": "dcb3ba23-7c39-42b3-98a0-c752337e966d", "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-workflowfpsnq/series-workflowfpsnq-build-action-1681778340/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-08 16:48:46 +0000 UTC FinishedAt: 2026-07-08 16:48:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-08 16:48:46 +0000 UTC FinishedAt: 2026-07-08 16:48:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-08 16:48:46 +0000 UTC FinishedAt: 2026-07-08 16:50:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-08 16:48:46 +0000 UTC FinishedAt: 2026-07-08 16:50:39 +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:*dcb3ba23-7c39-42b3-98a0-c752337e966d,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-workflowfpsnq/series-workflowfpsnq-build-action-1681778340/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-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-08 16:50:49 +0000 UTC FinishedAt: 2026-07-08 16:55:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-08 16:50:49 +0000 UTC FinishedAt: 2026-07-08 16:55:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"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:*80858c39-86bc-4103-85b1-f4f075fe2f5c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dcb3ba23-7c39-42b3-98a0-c752337e966d,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-workflowfpsnq/series-workflowfpsnq-build-action-1008024851/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-workflowfpsnq/series-workflowfpsnq-build-action-1681778340/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-08 16:50:49 +0000 UTC FinishedAt: 2026-07-08 16:52:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-08 16:50:49 +0000 UTC FinishedAt: 2026-07-08 16:52:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"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-workflowfpsnq/series-workflowfpsnq-convert-artifact-3574577425/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-08 16:50:49 +0000 UTC FinishedAt: 2026-07-08 16:50:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-08 16:50:49 +0000 UTC FinishedAt: 2026-07-08 16:50:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-08 16:50:49 +0000 UTC FinishedAt: 2026-07-08 16:50:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-08 16:52:23 +0000 UTC FinishedAt: 2026-07-08 16:55:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpsnq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_aia_set_csr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"481329ec5b31d2c48ac6b8b703c8008133884c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d53aa7e-898d-41fa-acfd-6f9840d3d5e5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-08 16:52:23 +0000 UTC FinishedAt: 2026-07-08 16:54:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*80858c39-86bc-4103-85b1-f4f075fe2f5c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dcb3ba23-7c39-42b3-98a0-c752337e966d,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-workflowfpsnq/series-workflowfpsnq-build-action-1008024851/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-workflowfpsnq/series-workflowfpsnq-build-action-1681778340/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-workflowfpsnq/series-workflowfpsnq-convert-artifact-3574577425/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,}