Name: series-workflowf28xd Phase: Succeeded StartedAt: 2026-07-23 01:44:22 +0000 UTC FinishedAt: 2026-07-23 06:47:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[0] Phase: Succeeded StartedAt: 2026-07-23 01:44:22 +0000 UTC FinishedAt: 2026-07-23 02:16:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 01:44:22 +0000 UTC FinishedAt: 2026-07-23 02:16:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "NETKIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "NETKIT" ], "series_id": "041a68c2-1bf1-4c37-be2c-148ea09ad197" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_mprog_attach", "bpf_mprog_detach", "__cgroup_bpf_attach", "__cgroup_bpf_replace", "bpf_netns_link_update_prog", "bpf_link_show_fdinfo", "bpf_link_get_info_by_fd", "netkit_prog_attach", "tcx_prog_attach" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7TkVUS0lUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21wcm9nX2F0dGFjaCYjMzQ7LAogICAgJiMzNDticGZfbXByb2dfZGV0YWNoJiMzNDssCiAgICAmIzM0O19fY2dyb3VwX2JwZl9hdHRhY2gmIzM0OywKICAgICYjMzQ7X19jZ3JvdXBfYnBmX3JlcGxhY2UmIzM0OywKICAgICYjMzQ7YnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2hvd19mZGluZm8mIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQmIzM0OywKICAgICYjMzQ7bmV0a2l0X3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O3RjeF9wcm9nX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiBsb2dpYyBmb3IgYXR0YWNoaW5nIGFuZCBkZXRhY2hpbmcgbXVsdGktcHJvZ3MgKGJwZl9tcHJvZ19hdHRhY2gsIGJwZl9tcHJvZ19kZXRhY2gpIHRvIGVuZm9yY2UgZXhwZWN0ZWQgbGluayB0eXBlcywgc3BlY2lmaWNhbGx5IGZvciBORVRLSVQgYW5kIFRDWC4gSXQgYWxzbyB1cGRhdGVzIGNncm91cCBCUEYgYXR0YWNoL3JlcGxhY2UgbG9naWMgdG8gcHJvcGVybHkgaGFuZGxlIEJQRiBjZ3JvdXAgc3RvcmFnZSwgYW5kIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZy4gQWRkaXRpb25hbGx5LCBpdCBmaXhlcyBSQ1UgbG9ja2luZyBpbiBicGZfbGlua19zaG93X2ZkaW5mbyBhbmQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjFmNzVmMzUxODA2ODUxYmUyYjE5NGMyMDk0MGJjY2JkODIyZTBmMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDAyOjE0OjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGtpdC5jIGIvZHJpdmVycy9uZXQvbmV0a2l0LmNcbmluZGV4IGEzOTMxY2Q4MjEzMjFjLi45OWRkZjJiZWZiMjM4MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGtpdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRraXQuY1xuQEAgLTc2OCw3ICYjNDM7NzY4LDcgQEAgaW50IG5ldGtpdF9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0fVxuIFx0cmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgXHUwMDI2ZW50cnlfbmV3LCBwcm9nLCBOVUxMLCByZXBsYWNlX3Byb2csXG4gXHRcdFx0ICAgICAgIGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzLCBhdHRyLVx1MDAzZXJlbGF0aXZlX2ZkLFxuLVx0XHRcdCAgICAgICBhdHRyLVx1MDAzZWV4cGVjdGVkX3JldmlzaW9uKTtcbiYjNDM7XHRcdFx0ICAgICAgIGF0dHItXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfTkVUS0lUKTtcbiBcdGlmICghcmV0KSB7XG4gXHRcdGlmIChlbnRyeSAhPSBlbnRyeV9uZXcpIHtcbiBcdFx0XHRuZXRraXRfZW50cnlfdXBkYXRlKGRldiwgZW50cnlfbmV3KTtcbkBAIC04MDIsNyAmIzQzOzgwMiw3IEBAIGludCBuZXRraXRfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIHByb2csIE5VTEwsIGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzLFxuLVx0XHRcdCAgICAgICBhdHRyLVx1MDAzZXJlbGF0aXZlX2ZkLCBhdHRyLVx1MDAzZWV4cGVjdGVkX3JldmlzaW9uKTtcbiYjNDM7XHRcdFx0ICAgICAgIGF0dHItXHUwMDNlcmVsYXRpdmVfZmQsIGF0dHItXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfTkVUS0lUKTtcbiBcdGlmICghcmV0KSB7XG4gXHRcdGlmICghYnBmX21wcm9nX3RvdGFsKGVudHJ5X25ldykpXG4gXHRcdFx0ZW50cnlfbmV3ID0gTlVMTDtcbkBAIC04NTAsNyAmIzQzOzg1MCw3IEBAIHN0YXRpYyBpbnQgbmV0a2l0X2xpbmtfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9saW5rICpsaW5rLCB1MzIgZmxhZ3MsXG4gXHRBU1NFUlRfUlROTCgpO1xuIFx0ZW50cnkgPSBuZXRraXRfZW50cnlfZmV0Y2goZGV2LCB0cnVlKTtcbiBcdHJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksIFx1MDAyNmVudHJ5X25ldywgbGluay1cdTAwM2Vwcm9nLCBsaW5rLCBOVUxMLCBmbGFncyxcbi1cdFx0XHQgICAgICAgaWRfb3JfZmQsIHJldmlzaW9uKTtcbiYjNDM7XHRcdFx0ICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbiwgQlBGX0xJTktfVFlQRV9ORVRLSVQpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0aWYgKGVudHJ5ICE9IGVudHJ5X25ldykge1xuIFx0XHRcdG5ldGtpdF9lbnRyeV91cGRhdGUoZGV2LCBlbnRyeV9uZXcpO1xuQEAgLTg3Nyw3ICYjNDM7ODc3LDcgQEAgc3RhdGljIHZvaWQgbmV0a2l0X2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4gXHRcdHJldCA9IC1FTk9FTlQ7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuLVx0cmV0ID0gYnBmX21wcm9nX2RldGFjaChlbnRyeSwgXHUwMDI2ZW50cnlfbmV3LCBsaW5rLVx1MDAzZXByb2csIGxpbmssIDAsIDAsIDApO1xuJiM0MztcdHJldCA9IGJwZl9tcHJvZ19kZXRhY2goZW50cnksIFx1MDAyNmVudHJ5X25ldywgbGluay1cdTAwM2Vwcm9nLCBsaW5rLCAwLCAwLCAwLCBCUEZfTElOS19UWVBFX05FVEtJVCk7XG4gXHRpZiAoIXJldCkge1xuIFx0XHRpZiAoIWJwZl9tcHJvZ190b3RhbChlbnRyeV9uZXcpKVxuIFx0XHRcdGVudHJ5X25ldyA9IE5VTEw7XG5AQCAtOTE5LDkgJiM0Mzs5MTksOCBAQCBzdGF0aWMgaW50IG5ldGtpdF9saW5rX3VwZGF0ZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbnByb2csXG4gXHRcdHJldCA9IC1FTk9FTlQ7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuLVx0cmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgXHUwMDI2ZW50cnlfbmV3LCBucHJvZywgbGluaywgb3Byb2csXG4tXHRcdFx0ICAgICAgIEJQRl9GX1JFUExBQ0UgfCBCUEZfRl9JRCxcbi1cdFx0XHQgICAgICAgbGluay1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZCwgMCk7XG4mIzQzO1x0cmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgXHUwMDI2ZW50cnlfbmV3LCBucHJvZywgbGluaywgb3Byb2csIEJQRl9GX1JFUExBQ0UgfCBCUEZfRl9JRCxcbiYjNDM7XHRcdFx0ICAgICAgIGxpbmstXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlaWQsIDAsIEJQRl9MSU5LX1RZUEVfTkVUS0lUKTtcbiBcdGlmICghcmV0KSB7XG4gXHRcdFdBUk5fT05fT05DRShlbnRyeSAhPSBlbnRyeV9uZXcpO1xuIFx0XHRvcHJvZyA9IHhjaGcoXHUwMDI2bGluay1cdTAwM2Vwcm9nLCBucHJvZyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfbXByb2cuaCBiL2luY2x1ZGUvbGludXgvYnBmX21wcm9nLmhcbmluZGV4IDBiOWY0Y2FlZWIwYTMyLi4xZmJlMWE5MjM5NjhmYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX21wcm9nLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX21wcm9nLmhcbkBAIC0zMjEsMTIgJiM0MzszMjEsMTQgQEAgaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHRcdCAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldyxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dfbmV3LCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4gXHRcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nX29sZCxcbi1cdFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uKTtcbiYjNDM7XHRcdCAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbixcbiYjNDM7XHRcdCAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSk7XG4gXG4gaW50IGJwZl9tcHJvZ19kZXRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHRcdCAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldyxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfbGluayAqbGluayxcbi1cdFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uKTtcbiYjNDM7XHRcdCAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbixcbiYjNDM7XHRcdCAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSk7XG4gXG4gaW50IGJwZl9tcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cixcbiBcdFx0ICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5KTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuaW5kZXggNDM1NWNjYjc4YTljNjcuLjU2ZDUzOGYwNTUyMDA0IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuQEAgLTgxMywxMCAmIzQzOzgxMywxMiBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cgPSBOVUxMO1xuIFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4mIzQzO1x0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuIFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXHUwMDNlbGluay5wcm9nO1xuIFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xuJiM0MztcdHU4IG9sZF9mbGFncztcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAoKChmbGFncyBcdTAwMjYgQlBGX0ZfQUxMT1dfT1ZFUlJJREUpIFx1MDAyNlx1MDAyNiAoZmxhZ3MgXHUwMDI2IEJQRl9GX0FMTE9XX01VTFRJKSkgfHxcbkBAIC04ODMsNyAmIzQzOzg4NSwxMCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbiBcdHBsLVx1MDAzZXByb2cgPSBwcm9nO1xuIFx0cGwtXHUwMDNlbGluayA9IGxpbms7XG4gXHRwbC1cdTAwM2VmbGFncyA9IGZsYWdzO1xuJiM0MztcdGlmIChvbGRfcHJvZylcbiYjNDM7XHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC1cdTAwM2VzdG9yYWdlKTtcbiBcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xuJiM0MztcdG9sZF9mbGFncyA9IGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXTtcbiBcdGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IHNhdmVkX2ZsYWdzO1xuIFxuIFx0aWYgKHR5cGUgPT0gQlBGX0xTTV9DR1JPVVApIHtcbkBAIC05MTUsMTIgJiM0Mzs5MjAsMTQgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRpZiAob2xkX3Byb2cpIHtcbiBcdFx0cGwtXHUwMDNlcHJvZyA9IG9sZF9wcm9nO1xuIFx0XHRwbC1cdTAwM2VsaW5rID0gTlVMTDtcbiYjNDM7XHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcbiBcdH1cbiBcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XG4gXHRpZiAoIW9sZF9wcm9nKSB7XG4gXHRcdGhsaXN0X2RlbChcdTAwMjZwbC1cdTAwM2Vub2RlKTtcbiBcdFx0a2ZyZWUocGwpO1xuIFx0fVxuJiM0MztcdGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IG9sZF9mbGFncztcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTEwMzIsMTEgJiM0MzsxMDM5LDE3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbiBcdFx0XHRcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXG4gXHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4mIzQzO1x0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuJiM0MztcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7XG4gXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG4mIzQzO1x0Ym9vbCBzdG9yYWdlX2NoYW5nZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7XG4gXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7XG4gXHRib29sIGZvdW5kID0gZmFsc2U7XG4mIzQzO1x0aW50IGVycjtcbiBcbiBcdGF0eXBlID0gYnBmX2Nncm91cF9hdHlwZV9maW5kKGxpbmstXHUwMDNlbGluay5hdHRhY2hfdHlwZSwgbmV3X3Byb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGZfaWQpO1xuIFx0aWYgKGF0eXBlIFx1MDAzYyAwKVxuQEAgLTEwNTYsMTAgJiM0MzsxMDY5LDM5IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbiBcdGlmICghZm91bmQpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuJiM0MztcdGlmIChicGZfY2dyb3VwX3N0b3JhZ2VzX2FsbG9jKHN0b3JhZ2UsIG5ld19zdG9yYWdlLCBsaW5rLVx1MDAzZWxpbmsuYXR0YWNoX3R5cGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgbmV3X3Byb2csIGNncnApKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHtcbiYjNDM7XHRcdGlmIChzdG9yYWdlW3N0eXBlXSAhPSBwbC1cdTAwM2VzdG9yYWdlW3N0eXBlXSkge1xuJiM0MztcdFx0XHRzdG9yYWdlX2NoYW5nZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0Y2dycC1cdTAwM2VicGYucmV2aXNpb25zW2F0eXBlXSAmIzQzOz0gMTtcbiBcdG9sZF9wcm9nID0geGNoZyhcdTAwMjZsaW5rLVx1MDAzZWxpbmsucHJvZywgbmV3X3Byb2cpO1xuLVx0cmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXN0b3JhZ2VfY2hhbmdlZCkge1xuJiM0MztcdFx0cmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpO1xuJiM0MztcdFx0YnBmX3Byb2dfcHV0KG9sZF9wcm9nKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVx1MDAzZXN0b3JhZ2UpO1xuJiM0MztcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xuJiM0MztcdGVyciA9IHVwZGF0ZV9lZmZlY3RpdmVfcHJvZ3MoY2dycCwgYXR5cGUpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdHhjaGcoXHUwMDI2bGluay1cdTAwM2VsaW5rLnByb2csIG9sZF9wcm9nKTtcbiYjNDM7XHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcbiYjNDM7XHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XG4mIzQzO1x0XHRjZ3JwLVx1MDAzZWJwZi5yZXZpc2lvbnNbYXR5cGVdIC09IDE7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRicGZfcHJvZ19wdXQob2xkX3Byb2cpO1xuJiM0MztcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfbGluayhuZXdfc3RvcmFnZSwgY2dycCwgbGluay1cdTAwM2VsaW5rLmF0dGFjaF90eXBlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21wcm9nLmMgYi9rZXJuZWwvYnBmL21wcm9nLmNcbmluZGV4IDEzOTQxNjgwNjJlODU2Li5iNGExYjM1ZmY1NjkzNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvbXByb2cuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tcHJvZy5jXG5AQCAtNiw3ICYjNDM7Niw3IEBAXG4gXG4gc3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcbiBcdFx0XHQgIHUzMiBpZF9vcl9mZCwgdTMyIGZsYWdzLFxuLVx0XHRcdCAgZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXG4mIzQzO1x0XHRcdCAgZW51bSBicGZfbGlua190eXBlIHR5cGUpXG4ge1xuIFx0c3RydWN0IGJwZl9saW5rICpsaW5rID0gRVJSX1BUUigtRUlOVkFMKTtcbiBcdGJvb2wgaWQgPSBmbGFncyBcdTAwMjYgQlBGX0ZfSUQ7XG5AQCAtMTcsNyAmIzQzOzE3LDcgQEAgc3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcbiBcdFx0bGluayA9IGJwZl9saW5rX2dldF9mcm9tX2ZkKGlkX29yX2ZkKTtcbiBcdGlmIChJU19FUlIobGluaykpXG4gXHRcdHJldHVybiBQVFJfRVJSKGxpbmspO1xuLVx0aWYgKHR5cGUgXHUwMDI2XHUwMDI2IGxpbmstXHUwMDNlcHJvZy1cdTAwM2V0eXBlICE9IHR5cGUpIHtcbiYjNDM7XHRpZiAodHlwZSBcdTAwMjZcdTAwMjYgbGluay1cdTAwM2V0eXBlICE9IHR5cGUpIHtcbiBcdFx0YnBmX2xpbmtfcHV0KGxpbmspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbkBAIC01MiwyMSAmIzQzOzUyLDIyIEBAIHN0YXRpYyBpbnQgYnBmX21wcm9nX3Byb2coc3RydWN0IGJwZl90dXBsZSAqdHVwbGUsXG4gXG4gc3RhdGljIGludCBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmUoc3RydWN0IGJwZl90dXBsZSAqdHVwbGUsXG4gXHRcdFx0XHQgICAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsXG4tXHRcdFx0XHQgICAgZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXG4mIzQzO1x0XHRcdFx0ICAgIGVudW0gYnBmX2xpbmtfdHlwZSBsdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKVxuIHtcbiBcdGJvb2wgbGluayA9IGZsYWdzIFx1MDAyNiBCUEZfRl9MSU5LO1xuIFx0Ym9vbCBpZCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9JRDtcbiBcbiBcdG1lbXNldCh0dXBsZSwgMCwgc2l6ZW9mKCp0dXBsZSkpO1xuIFx0aWYgKGxpbmspXG4tXHRcdHJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCB0eXBlKTtcbiYjNDM7XHRcdHJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCBsdHlwZSk7XG4gXHQvKiBJZiBubyByZWxldmFudCBmbGFnIGlzIHNldCBhbmQgbm8gaWRfb3JfZmQgd2FzIHBhc3NlZCwgdGhlblxuIFx0ICogdHVwbGUgbGluay9wcm9nIGlzIGp1c3QgTlVMTGVkLiBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gYmVmb3JlL1xuIFx0ICogYWZ0ZXIgc2VsZWN0cyBmaXJzdC9sYXN0IHBvc2l0aW9uIHdpdGhvdXQgcGFzc2luZyBmZC5cbiBcdCAqL1xuIFx0aWYgKCFpZCBcdTAwMjZcdTAwMjYgIWlkX29yX2ZkKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBicGZfbXByb2dfcHJvZyh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCB0eXBlKTtcbiYjNDM7XHRyZXR1cm4gYnBmX21wcm9nX3Byb2codHVwbGUsIGlkX29yX2ZkLCBmbGFncywgcHR5cGUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBicGZfbXByb2dfdHVwbGVfcHV0KHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlKVxuQEAgLTIyNiw3ICYjNDM7MjI3LDggQEAgaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHRcdCAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldyxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dfbmV3LCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4gXHRcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nX29sZCxcbi1cdFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uKVxuJiM0MztcdFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uLFxuJiM0MztcdFx0ICAgICBlbnVtIGJwZl9saW5rX3R5cGUgZXhwZWN0ZWRfbGlua190eXBlKVxuIHtcbiBcdHN0cnVjdCBicGZfdHVwbGUgcnR1cGxlLCBudHVwbGUgPSB7XG4gXHRcdC5wcm9nID0gcHJvZ19uZXcsXG5AQCAtMjQzLDYgJiM0MzsyNDUsNyBAQCBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRyZXQgPSBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmUoXHUwMDI2cnR1cGxlLCBpZF9vcl9mZCxcbiBcdFx0XHRcdCAgICAgICBmbGFncyBcdTAwMjYgfkJQRl9GX1JFUExBQ0UsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGV4cGVjdGVkX2xpbmtfdHlwZSxcbiBcdFx0XHRcdCAgICAgICBwcm9nX25ldy1cdTAwM2V0eXBlKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5AQCAtMzI4LDcgJiM0MzszMzEsOCBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19mZXRjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcbiBpbnQgYnBmX21wcm9nX2RldGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LFxuIFx0XHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLVx0XHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24pXG4mIzQzO1x0XHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24sXG4mIzQzO1x0XHQgICAgIGVudW0gYnBmX2xpbmtfdHlwZSBleHBlY3RlZF9saW5rX3R5cGUpXG4ge1xuIFx0c3RydWN0IGJwZl90dXBsZSBydHVwbGUsIGR0dXBsZSA9IHtcbiBcdFx0LnByb2cgPSBwcm9nLFxuQEAgLTM0Myw4ICYjNDM7MzQ3LDkgQEAgaW50IGJwZl9tcHJvZ19kZXRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHRpZiAoIWJwZl9tcHJvZ190b3RhbChlbnRyeSkpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFx0cmV0ID0gYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlKFx1MDAyNnJ0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLFxuLVx0XHRcdFx0ICAgICAgIHByb2cgPyBwcm9nLVx1MDAzZXR5cGUgOlxuLVx0XHRcdFx0ICAgICAgIEJQRl9QUk9HX1RZUEVfVU5TUEVDKTtcbiYjNDM7XHRcdFx0XHQgICAgICAgZXhwZWN0ZWRfbGlua190eXBlLFxuJiM0MztcdFx0XHRcdCAgICAgICAvKiBVc2UgVU5TUEVDIGFzIHdpbGRjYXJkIHdoZW4gcHJvZyBpcyBOVUxMICovXG4mIzQzO1x0XHRcdFx0ICAgICAgIHByb2cgPyBwcm9nLVx1MDAzZXR5cGUgOiBCUEZfUFJPR19UWVBFX1VOU1BFQyk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0aWYgKGR0dXBsZS5wcm9nKSB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xuaW5kZXggMjVmMzBmOWVkYWVmZDMuLjlmYzYyZGIxNDQxYzYyIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXG5AQCAtMTcxLDEzICYjNDM7MTcxLDE3IEBAIHN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0aW50IGlkeCwgcmV0O1xuIFxuLVx0aWYgKG9sZF9wcm9nIFx1MDAyNlx1MDAyNiBvbGRfcHJvZyAhPSBsaW5rLVx1MDAzZXByb2cpXG4tXHRcdHJldHVybiAtRVBFUk07XG4tXHRpZiAobmV3X3Byb2ctXHUwMDNldHlwZSAhPSBsaW5rLVx1MDAzZXByb2ctXHUwMDNldHlwZSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4gXHRtdXRleF9sb2NrKFx1MDAyNm5ldG5zX2JwZl9tdXRleCk7XG4gXG4mIzQzO1x0aWYgKG9sZF9wcm9nIFx1MDAyNlx1MDAyNiBvbGRfcHJvZyAhPSBsaW5rLVx1MDAzZXByb2cpIHtcbiYjNDM7XHRcdHJldCA9IC1FUEVSTTtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKG5ld19wcm9nLVx1MDAzZXR5cGUgIT0gbGluay1cdTAwM2Vwcm9nLVx1MDAzZXR5cGUpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG5ldCA9IG5ldF9saW5rLVx1MDAzZW5ldDtcbiBcdGlmICghbmV0IHx8ICFjaGVja19uZXQobmV0KSkge1xuIFx0XHQvKiBMaW5rIGF1dG8tZGV0YWNoZWQgb3IgbmV0bnMgZHlpbmcgKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ZGIzMDZkMjNiNDc5Zi4uY2FkOTg2ODA3ZDUzMDMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC0zNDcxLDkgJiM0MzszNDcxLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpicGZfbGlua190eXBlX3N0cnNbXSA9IHtcbiBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuLVx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nID0gbGluay1cdTAwM2Vwcm9nO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbiBcdGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlID0gbGluay1cdTAwM2V0eXBlO1xuIFx0Y2hhciBwcm9nX3RhZ1tzaXplb2YocHJvZy1cdTAwM2V0YWcpICogMiAmIzQzOyAxXSA9IHsgfTtcbiYjNDM7XHR1MzIgcHJvZ19pZDtcbiBcbiBcdGlmICh0eXBlIFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9saW5rX3R5cGVfc3RycykgXHUwMDI2XHUwMDI2IGJwZl9saW5rX3R5cGVfc3Ryc1t0eXBlXSkge1xuIFx0XHRpZiAobGluay1cdTAwM2V0eXBlID09IEJQRl9MSU5LX1RZUEVfS1BST0JFX01VTFRJKVxuQEAgLTM0OTAsMTMgJiM0MzszNDkxLDIwIEBAIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXG4gXHR9XG4gXHRzZXFfcHJpbnRmKG0sIFwmIzM0O2xpbmtfaWQ6XFx0JXVcXG5cJiMzNDssIGxpbmstXHUwMDNlaWQpO1xuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRwcm9nID0gUkVBRF9PTkNFKGxpbmstXHUwMDNlcHJvZyk7XG4gXHRpZiAocHJvZykge1xuIFx0XHRiaW4yaGV4KHByb2dfdGFnLCBwcm9nLVx1MDAzZXRhZywgc2l6ZW9mKHByb2ctXHUwMDNldGFnKSk7XG4mIzQzO1x0XHRwcm9nX2lkID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlaWQ7XG4mIzQzO1x0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvZykge1xuIFx0XHRzZXFfcHJpbnRmKG0sXG4gXHRcdFx0ICAgXCYjMzQ7cHJvZ190YWc6XFx0JXNcXG5cJiMzNDtcbiBcdFx0XHQgICBcJiMzNDtwcm9nX2lkOlxcdCV1XFxuXCYjMzQ7LFxuIFx0XHRcdCAgIHByb2dfdGFnLFxuLVx0XHRcdCAgIHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkKTtcbiYjNDM7XHRcdFx0ICAgcHJvZ19pZCk7XG4gXHR9XG4gXHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNlc2hvd19mZGluZm8pXG4gXHRcdGxpbmstXHUwMDNlb3BzLVx1MDAzZXNob3dfZmRpbmZvKGxpbmssIG0pO1xuQEAgLTU1MzUsNiAmIzQzOzU1NDMsNyBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuIHtcbiBcdHN0cnVjdCBicGZfbGlua19pbmZvIF9fdXNlciAqdWluZm8gPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2VpbmZvLmluZm8pO1xuIFx0c3RydWN0IGJwZl9saW5rX2luZm8gaW5mbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4gXHR1MzIgaW5mb19sZW4gPSBhdHRyLVx1MDAzZWluZm8uaW5mb19sZW47XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTU1NDksOCAmIzQzOzU1NTgsMTIgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcbiBcdGluZm8udHlwZSA9IGxpbmstXHUwMDNldHlwZTtcbiBcdGluZm8uaWQgPSBsaW5rLVx1MDAzZWlkO1xuLVx0aWYgKGxpbmstXHUwMDNlcHJvZylcbi1cdFx0aW5mby5wcm9nX2lkID0gbGluay1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZDtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHByb2cgPSBSRUFEX09OQ0UobGluay1cdTAwM2Vwcm9nKTtcbiYjNDM7XHRpZiAocHJvZylcbiYjNDM7XHRcdGluZm8ucHJvZ19pZCA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZWZpbGxfbGlua19pbmZvKSB7XG4gXHRcdGVyciA9IGxpbmstXHUwMDNlb3BzLVx1MDAzZWZpbGxfbGlua19pbmZvKGxpbmssIFx1MDAyNmluZm8pO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdGN4LmMgYi9rZXJuZWwvYnBmL3RjeC5jXG5pbmRleCAwMmRiMDExM2I4ZTdjNi4uZjIwOGNlZjEzYTk4ZTMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3RjeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3RjeC5jXG5AQCAtMzgsNyAmIzQzOzM4LDcgQEAgaW50IHRjeF9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0fVxuIFx0cmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgXHUwMDI2ZW50cnlfbmV3LCBwcm9nLCBOVUxMLCByZXBsYWNlX3Byb2csXG4gXHRcdFx0ICAgICAgIGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzLCBhdHRyLVx1MDAzZXJlbGF0aXZlX2ZkLFxuLVx0XHRcdCAgICAgICBhdHRyLVx1MDAzZWV4cGVjdGVkX3JldmlzaW9uKTtcbiYjNDM7XHRcdFx0ICAgICAgIGF0dHItXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfVENYKTtcbiBcdGlmICghcmV0KSB7XG4gXHRcdGlmIChlbnRyeSAhPSBlbnRyeV9uZXcpIHtcbiBcdFx0XHR0Y3hfZW50cnlfdXBkYXRlKGRldiwgZW50cnlfbmV3LCBpbmdyZXNzKTtcbkBAIC03Niw3ICYjNDM7NzYsNyBAQCBpbnQgdGN4X3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFx0cmV0ID0gYnBmX21wcm9nX2RldGFjaChlbnRyeSwgXHUwMDI2ZW50cnlfbmV3LCBwcm9nLCBOVUxMLCBhdHRyLVx1MDAzZWF0dGFjaF9mbGFncyxcbi1cdFx0XHQgICAgICAgYXR0ci1cdTAwM2VyZWxhdGl2ZV9mZCwgYXR0ci1cdTAwM2VleHBlY3RlZF9yZXZpc2lvbik7XG4mIzQzO1x0XHRcdCAgICAgICBhdHRyLVx1MDAzZXJlbGF0aXZlX2ZkLCBhdHRyLVx1MDAzZWV4cGVjdGVkX3JldmlzaW9uLCBCUEZfTElOS19UWVBFX1RDWCk7XG4gXHRpZiAoIXJldCkge1xuIFx0XHRpZiAoIXRjeF9lbnRyeV9pc19hY3RpdmUoZW50cnlfbmV3KSlcbiBcdFx0XHRlbnRyeV9uZXcgPSBOVUxMO1xuQEAgLTE1Miw3ICYjNDM7MTUyLDcgQEAgc3RhdGljIGludCB0Y3hfbGlua19wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLFxuIFx0aWYgKCFlbnRyeSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIGxpbmstXHUwMDNlcHJvZywgbGluaywgTlVMTCwgZmxhZ3MsXG4tXHRcdFx0ICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbik7XG4mIzQzO1x0XHRcdCAgICAgICBpZF9vcl9mZCwgcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfVENYKTtcbiBcdGlmICghcmV0KSB7XG4gXHRcdGlmIChlbnRyeSAhPSBlbnRyeV9uZXcpIHtcbiBcdFx0XHR0Y3hfZW50cnlfdXBkYXRlKGRldiwgZW50cnlfbmV3LCBpbmdyZXNzKTtcbkBAIC0xODMsNyAmIzQzOzE4Myw3IEBAIHN0YXRpYyB2b2lkIHRjeF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxuIFx0XHRyZXQgPSAtRU5PRU5UO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbi1cdHJldCA9IGJwZl9tcHJvZ19kZXRhY2goZW50cnksIFx1MDAyNmVudHJ5X25ldywgbGluay1cdTAwM2Vwcm9nLCBsaW5rLCAwLCAwLCAwKTtcbiYjNDM7XHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIGxpbmstXHUwMDNlcHJvZywgbGluaywgMCwgMCwgMCwgQlBGX0xJTktfVFlQRV9UQ1gpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0aWYgKCF0Y3hfZW50cnlfaXNfYWN0aXZlKGVudHJ5X25ldykpXG4gXHRcdFx0ZW50cnlfbmV3ID0gTlVMTDtcbkBAIC0yMjksOSAmIzQzOzIyOSw4IEBAIHN0YXRpYyBpbnQgdGN4X2xpbmtfdXBkYXRlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpucHJvZyxcbiBcdFx0cmV0ID0gLUVOT0VOVDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4tXHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIG5wcm9nLCBsaW5rLCBvcHJvZyxcbi1cdFx0XHQgICAgICAgQlBGX0ZfUkVQTEFDRSB8IEJQRl9GX0lELFxuLVx0XHRcdCAgICAgICBsaW5rLVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWlkLCAwKTtcbiYjNDM7XHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIG5wcm9nLCBsaW5rLCBvcHJvZywgQlBGX0ZfUkVQTEFDRSB8IEJQRl9GX0lELFxuJiM0MztcdFx0XHQgICAgICAgbGluay1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZCwgMCwgQlBGX0xJTktfVFlQRV9UQ1gpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0V0FSTl9PTl9PTkNFKGVudHJ5ICE9IGVudHJ5X25ldyk7XG4gXHRcdG9wcm9nID0geGNoZyhcdTAwMjZsaW5rLVx1MDAzZXByb2csIG5wcm9nKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtORVRLSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbXByb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2JwZl9tcHJvZ19kZXRhY2gmIzM0OywKICAgICYjMzQ7X19jZ3JvdXBfYnBmX2F0dGFjaCYjMzQ7LAogICAgJiMzNDtfX2Nncm91cF9icGZfcmVwbGFjZSYjMzQ7LAogICAgJiMzNDticGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyYjMzQ7LAogICAgJiMzNDticGZfbGlua19zaG93X2ZkaW5mbyYjMzQ7LAogICAgJiMzNDticGZfbGlua19nZXRfaW5mb19ieV9mZCYjMzQ7LAogICAgJiMzNDtuZXRraXRfcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7dGN4X3Byb2dfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIGxvZ2ljIGZvciBhdHRhY2hpbmcgYW5kIGRldGFjaGluZyBtdWx0aS1wcm9ncyAoYnBmX21wcm9nX2F0dGFjaCwgYnBmX21wcm9nX2RldGFjaCkgdG8gZW5mb3JjZSBleHBlY3RlZCBsaW5rIHR5cGVzLCBzcGVjaWZpY2FsbHkgZm9yIE5FVEtJVCBhbmQgVENYLiBJdCBhbHNvIHVwZGF0ZXMgY2dyb3VwIEJQRiBhdHRhY2gvcmVwbGFjZSBsb2dpYyB0byBwcm9wZXJseSBoYW5kbGUgQlBGIGNncm91cCBzdG9yYWdlLCBhbmQgZml4ZXMgYSBsb2NraW5nIGlzc3VlIGluIGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nLiBBZGRpdGlvbmFsbHksIGl0IGZpeGVzIFJDVSBsb2NraW5nIGluIGJwZl9saW5rX3Nob3dfZmRpbmZvIGFuZCBicGZfbGlua19nZXRfaW5mb19ieV9mZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIxZjc1ZjM1MTgwNjg1MWJlMmIxOTRjMjA5NDBiY2NiZDgyMmUwZjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyMyAwMjoxNDo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGtpdC5jIGIvZHJpdmVycy9uZXQvbmV0a2l0LmMKaW5kZXggYTM5MzFjZDgyMTMyMWMuLjk5ZGRmMmJlZmIyMzgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRraXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRraXQuYwpAQCAtNzY4LDcgJiM0Mzs3NjgsNyBAQCBpbnQgbmV0a2l0X3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiAJfQogCXJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksICZhbXA7ZW50cnlfbmV3LCBwcm9nLCBOVUxMLCByZXBsYWNlX3Byb2csCiAJCQkgICAgICAgYXR0ci0mZ3Q7YXR0YWNoX2ZsYWdzLCBhdHRyLSZndDtyZWxhdGl2ZV9mZCwKLQkJCSAgICAgICBhdHRyLSZndDtleHBlY3RlZF9yZXZpc2lvbik7CiYjNDM7CQkJICAgICAgIGF0dHItJmd0O2V4cGVjdGVkX3JldmlzaW9uLCBCUEZfTElOS19UWVBFX05FVEtJVCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKGVudHJ5ICE9IGVudHJ5X25ldykgewogCQkJbmV0a2l0X2VudHJ5X3VwZGF0ZShkZXYsIGVudHJ5X25ldyk7CkBAIC04MDIsNyAmIzQzOzgwMiw3IEBAIGludCBuZXRraXRfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIAkJZ290byBvdXQ7CiAJfQogCXJldCA9IGJwZl9tcHJvZ19kZXRhY2goZW50cnksICZhbXA7ZW50cnlfbmV3LCBwcm9nLCBOVUxMLCBhdHRyLSZndDthdHRhY2hfZmxhZ3MsCi0JCQkgICAgICAgYXR0ci0mZ3Q7cmVsYXRpdmVfZmQsIGF0dHItJmd0O2V4cGVjdGVkX3JldmlzaW9uKTsKJiM0MzsJCQkgICAgICAgYXR0ci0mZ3Q7cmVsYXRpdmVfZmQsIGF0dHItJmd0O2V4cGVjdGVkX3JldmlzaW9uLCBCUEZfTElOS19UWVBFX05FVEtJVCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKCFicGZfbXByb2dfdG90YWwoZW50cnlfbmV3KSkKIAkJCWVudHJ5X25ldyA9IE5VTEw7CkBAIC04NTAsNyAmIzQzOzg1MCw3IEBAIHN0YXRpYyBpbnQgbmV0a2l0X2xpbmtfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9saW5rICpsaW5rLCB1MzIgZmxhZ3MsCiAJQVNTRVJUX1JUTkwoKTsKIAllbnRyeSA9IG5ldGtpdF9lbnRyeV9mZXRjaChkZXYsIHRydWUpOwogCXJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksICZhbXA7ZW50cnlfbmV3LCBsaW5rLSZndDtwcm9nLCBsaW5rLCBOVUxMLCBmbGFncywKLQkJCSAgICAgICBpZF9vcl9mZCwgcmV2aXNpb24pOwomIzQzOwkJCSAgICAgICBpZF9vcl9mZCwgcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfTkVUS0lUKTsKIAlpZiAoIXJldCkgewogCQlpZiAoZW50cnkgIT0gZW50cnlfbmV3KSB7CiAJCQluZXRraXRfZW50cnlfdXBkYXRlKGRldiwgZW50cnlfbmV3KTsKQEAgLTg3Nyw3ICYjNDM7ODc3LDcgQEAgc3RhdGljIHZvaWQgbmV0a2l0X2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspCiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gb3V0OwogCX0KLQlyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCAmYW1wO2VudHJ5X25ldywgbGluay0mZ3Q7cHJvZywgbGluaywgMCwgMCwgMCk7CiYjNDM7CXJldCA9IGJwZl9tcHJvZ19kZXRhY2goZW50cnksICZhbXA7ZW50cnlfbmV3LCBsaW5rLSZndDtwcm9nLCBsaW5rLCAwLCAwLCAwLCBCUEZfTElOS19UWVBFX05FVEtJVCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKCFicGZfbXByb2dfdG90YWwoZW50cnlfbmV3KSkKIAkJCWVudHJ5X25ldyA9IE5VTEw7CkBAIC05MTksOSAmIzQzOzkxOSw4IEBAIHN0YXRpYyBpbnQgbmV0a2l0X2xpbmtfdXBkYXRlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpucHJvZywKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byBvdXQ7CiAJfQotCXJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksICZhbXA7ZW50cnlfbmV3LCBucHJvZywgbGluaywgb3Byb2csCi0JCQkgICAgICAgQlBGX0ZfUkVQTEFDRSB8IEJQRl9GX0lELAotCQkJICAgICAgIGxpbmstJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7aWQsIDApOwomIzQzOwlyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCAmYW1wO2VudHJ5X25ldywgbnByb2csIGxpbmssIG9wcm9nLCBCUEZfRl9SRVBMQUNFIHwgQlBGX0ZfSUQsCiYjNDM7CQkJICAgICAgIGxpbmstJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7aWQsIDAsIEJQRl9MSU5LX1RZUEVfTkVUS0lUKTsKIAlpZiAoIXJldCkgewogCQlXQVJOX09OX09OQ0UoZW50cnkgIT0gZW50cnlfbmV3KTsKIAkJb3Byb2cgPSB4Y2hnKCZhbXA7bGluay0mZ3Q7cHJvZywgbnByb2cpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfbXByb2cuaCBiL2luY2x1ZGUvbGludXgvYnBmX21wcm9nLmgKaW5kZXggMGI5ZjRjYWVlYjBhMzIuLjFmYmUxYTkyMzk2OGZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl9tcHJvZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX21wcm9nLmgKQEAgLTMyMSwxMiAmIzQzOzMyMSwxNCBAQCBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSwKIAkJICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LAogCQkgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZ19uZXcsIHN0cnVjdCBicGZfbGluayAqbGluaywKIAkJICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dfb2xkLAotCQkgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24pOwomIzQzOwkJICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uLAomIzQzOwkJICAgICBlbnVtIGJwZl9saW5rX3R5cGUgZXhwZWN0ZWRfbGlua190eXBlKTsKIAogaW50IGJwZl9tcHJvZ19kZXRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksCiAJCSAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldywKIAkJICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfbGluayAqbGluaywKLQkJICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uKTsKJiM0MzsJCSAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbiwKJiM0MzsJCSAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSk7CiAKIGludCBicGZfbXByb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIsCiAJCSAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuYwppbmRleCA0MzU1Y2NiNzhhOWM2Ny4uNTZkNTM4ZjA1NTIwMDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuYwpAQCAtODEzLDEwICYjNDM7ODEzLDEyIEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCXN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cgPSBOVUxMOwogCXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwogCXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTsKJiM0MzsJc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwogCXN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLSZndDtsaW5rLnByb2c7CiAJZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlOwogCXN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7CiYjNDM7CXU4IG9sZF9mbGFnczsKIAlpbnQgZXJyOwogCiAJaWYgKCgoZmxhZ3MgJmFtcDsgQlBGX0ZfQUxMT1dfT1ZFUlJJREUpICZhbXA7JmFtcDsgKGZsYWdzICZhbXA7IEJQRl9GX0FMTE9XX01VTFRJKSkgfHwKQEAgLTg4Myw3ICYjNDM7ODg1LDEwIEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCXBsLSZndDtwcm9nID0gcHJvZzsKIAlwbC0mZ3Q7bGluayA9IGxpbms7CiAJcGwtJmd0O2ZsYWdzID0gZmxhZ3M7CiYjNDM7CWlmIChvbGRfcHJvZykKJiM0MzsJCWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC0mZ3Q7c3RvcmFnZSk7CiAJYnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtJmd0O3N0b3JhZ2UsIHN0b3JhZ2UpOwomIzQzOwlvbGRfZmxhZ3MgPSBjZ3JwLSZndDticGYuZmxhZ3NbYXR5cGVdOwogCWNncnAtJmd0O2JwZi5mbGFnc1thdHlwZV0gPSBzYXZlZF9mbGFnczsKIAogCWlmICh0eXBlID09IEJQRl9MU01fQ0dST1VQKSB7CkBAIC05MTUsMTIgJiM0Mzs5MjAsMTQgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJaWYgKG9sZF9wcm9nKSB7CiAJCXBsLSZndDtwcm9nID0gb2xkX3Byb2c7CiAJCXBsLSZndDtsaW5rID0gTlVMTDsKJiM0MzsJCWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLSZndDtzdG9yYWdlLCBvbGRfc3RvcmFnZSk7CiAJfQogCWJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7CiAJaWYgKCFvbGRfcHJvZykgewogCQlobGlzdF9kZWwoJmFtcDtwbC0mZ3Q7bm9kZSk7CiAJCWtmcmVlKHBsKTsKIAl9CiYjNDM7CWNncnAtJmd0O2JwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTAzMiwxMSAmIzQzOzEwMzksMTcgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCQkJCXN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssCiAJCQkJc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZykKIHsKJiM0MzsJc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwomIzQzOwlzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307CiYjNDM7CXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwomIzQzOwllbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlOwogCWVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTsKJiM0MzsJYm9vbCBzdG9yYWdlX2NoYW5nZWQgPSBmYWxzZTsKIAlzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nOwogCXN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7CiAJYm9vbCBmb3VuZCA9IGZhbHNlOwomIzQzOwlpbnQgZXJyOwogCiAJYXR5cGUgPSBicGZfY2dyb3VwX2F0eXBlX2ZpbmQobGluay0mZ3Q7bGluay5hdHRhY2hfdHlwZSwgbmV3X3Byb2ctJmd0O2F1eC0mZ3Q7YXR0YWNoX2J0Zl9pZCk7CiAJaWYgKGF0eXBlICZsdDsgMCkKQEAgLTEwNTYsMTAgJiM0MzsxMDY5LDM5IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCwKIAlpZiAoIWZvdW5kKQogCQlyZXR1cm4gLUVOT0VOVDsKIAomIzQzOwlpZiAoYnBmX2Nncm91cF9zdG9yYWdlc19hbGxvYyhzdG9yYWdlLCBuZXdfc3RvcmFnZSwgbGluay0mZ3Q7bGluay5hdHRhY2hfdHlwZSwKJiM0MzsJCQkJICAgICAgbmV3X3Byb2csIGNncnApKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHsKJiM0MzsJCWlmIChzdG9yYWdlW3N0eXBlXSAhPSBwbC0mZ3Q7c3RvcmFnZVtzdHlwZV0pIHsKJiM0MzsJCQlzdG9yYWdlX2NoYW5nZWQgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJY2dycC0mZ3Q7YnBmLnJldmlzaW9uc1thdHlwZV0gJiM0Mzs9IDE7CiAJb2xkX3Byb2cgPSB4Y2hnKCZhbXA7bGluay0mZ3Q7bGluay5wcm9nLCBuZXdfcHJvZyk7Ci0JcmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpOwomIzQzOwomIzQzOwlpZiAoIXN0b3JhZ2VfY2hhbmdlZCkgewomIzQzOwkJcmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpOwomIzQzOwkJYnBmX3Byb2dfcHV0KG9sZF9wcm9nKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC0mZ3Q7c3RvcmFnZSk7CiYjNDM7CWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLSZndDtzdG9yYWdlLCBzdG9yYWdlKTsKJiM0MzsJZXJyID0gdXBkYXRlX2VmZmVjdGl2ZV9wcm9ncyhjZ3JwLCBhdHlwZSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCXhjaGcoJmFtcDtsaW5rLSZndDtsaW5rLnByb2csIG9sZF9wcm9nKTsKJiM0MzsJCWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLSZndDtzdG9yYWdlLCBvbGRfc3RvcmFnZSk7CiYjNDM7CQlicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpOwomIzQzOwkJY2dycC0mZ3Q7YnBmLnJldmlzaW9uc1thdHlwZV0gLT0gMTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKIAlicGZfcHJvZ19wdXQob2xkX3Byb2cpOwomIzQzOwlicGZfY2dyb3VwX3N0b3JhZ2VzX2xpbmsobmV3X3N0b3JhZ2UsIGNncnAsIGxpbmstJmd0O2xpbmsuYXR0YWNoX3R5cGUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21wcm9nLmMgYi9rZXJuZWwvYnBmL21wcm9nLmMKaW5kZXggMTM5NDE2ODA2MmU4NTYuLmI0YTFiMzVmZjU2OTM2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL21wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tcHJvZy5jCkBAIC02LDcgJiM0Mzs2LDcgQEAKIAogc3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSwKIAkJCSAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsCi0JCQkgIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKQomIzQzOwkJCSAgZW51bSBicGZfbGlua190eXBlIHR5cGUpCiB7CiAJc3RydWN0IGJwZl9saW5rICpsaW5rID0gRVJSX1BUUigtRUlOVkFMKTsKIAlib29sIGlkID0gZmxhZ3MgJmFtcDsgQlBGX0ZfSUQ7CkBAIC0xNyw3ICYjNDM7MTcsNyBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19saW5rKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLAogCQlsaW5rID0gYnBmX2xpbmtfZ2V0X2Zyb21fZmQoaWRfb3JfZmQpOwogCWlmIChJU19FUlIobGluaykpCiAJCXJldHVybiBQVFJfRVJSKGxpbmspOwotCWlmICh0eXBlICZhbXA7JmFtcDsgbGluay0mZ3Q7cHJvZy0mZ3Q7dHlwZSAhPSB0eXBlKSB7CiYjNDM7CWlmICh0eXBlICZhbXA7JmFtcDsgbGluay0mZ3Q7dHlwZSAhPSB0eXBlKSB7CiAJCWJwZl9saW5rX3B1dChsaW5rKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTIsMjEgJiM0Mzs1MiwyMiBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19wcm9nKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLAogCiBzdGF0aWMgaW50IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZShzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSwKIAkJCQkgICAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsCi0JCQkJICAgIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKQomIzQzOwkJCQkgICAgZW51bSBicGZfbGlua190eXBlIGx0eXBlLAomIzQzOwkJCQkgICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKQogewogCWJvb2wgbGluayA9IGZsYWdzICZhbXA7IEJQRl9GX0xJTks7CiAJYm9vbCBpZCA9IGZsYWdzICZhbXA7IEJQRl9GX0lEOwogCiAJbWVtc2V0KHR1cGxlLCAwLCBzaXplb2YoKnR1cGxlKSk7CiAJaWYgKGxpbmspCi0JCXJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCB0eXBlKTsKJiM0MzsJCXJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCBsdHlwZSk7CiAJLyogSWYgbm8gcmVsZXZhbnQgZmxhZyBpcyBzZXQgYW5kIG5vIGlkX29yX2ZkIHdhcyBwYXNzZWQsIHRoZW4KIAkgKiB0dXBsZSBsaW5rL3Byb2cgaXMganVzdCBOVUxMZWQuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBiZWZvcmUvCiAJICogYWZ0ZXIgc2VsZWN0cyBmaXJzdC9sYXN0IHBvc2l0aW9uIHdpdGhvdXQgcGFzc2luZyBmZC4KIAkgKi8KIAlpZiAoIWlkICZhbXA7JmFtcDsgIWlkX29yX2ZkKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gYnBmX21wcm9nX3Byb2codHVwbGUsIGlkX29yX2ZkLCBmbGFncywgdHlwZSk7CiYjNDM7CXJldHVybiBicGZfbXByb2dfcHJvZyh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCBwdHlwZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGJwZl9tcHJvZ190dXBsZV9wdXQoc3RydWN0IGJwZl90dXBsZSAqdHVwbGUpCkBAIC0yMjYsNyAmIzQzOzIyNyw4IEBAIGludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LAogCQkgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsCiAJCSAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nX25ldywgc3RydWN0IGJwZl9saW5rICpsaW5rLAogCQkgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZ19vbGQsCi0JCSAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbikKJiM0MzsJCSAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbiwKJiM0MzsJCSAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSkKIHsKIAlzdHJ1Y3QgYnBmX3R1cGxlIHJ0dXBsZSwgbnR1cGxlID0gewogCQkucHJvZyA9IHByb2dfbmV3LApAQCAtMjQzLDYgJiM0MzsyNDUsNyBAQCBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSwKIAkJcmV0dXJuIC1FRVhJU1Q7CiAJcmV0ID0gYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlKCZhbXA7cnR1cGxlLCBpZF9vcl9mZCwKIAkJCQkgICAgICAgZmxhZ3MgJmFtcDsgfkJQRl9GX1JFUExBQ0UsCiYjNDM7CQkJCSAgICAgICBleHBlY3RlZF9saW5rX3R5cGUsCiAJCQkJICAgICAgIHByb2dfbmV3LSZndDt0eXBlKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMzI4LDcgJiM0MzszMzEsOCBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19mZXRjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSwKIGludCBicGZfbXByb2dfZGV0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LAogCQkgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsCiAJCSAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssCi0JCSAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbikKJiM0MzsJCSAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbiwKJiM0MzsJCSAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSkKIHsKIAlzdHJ1Y3QgYnBmX3R1cGxlIHJ0dXBsZSwgZHR1cGxlID0gewogCQkucHJvZyA9IHByb2csCkBAIC0zNDMsOCAmIzQzOzM0Nyw5IEBAIGludCBicGZfbXByb2dfZGV0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LAogCWlmICghYnBmX21wcm9nX3RvdGFsKGVudHJ5KSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJcmV0ID0gYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlKCZhbXA7cnR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsCi0JCQkJICAgICAgIHByb2cgPyBwcm9nLSZndDt0eXBlIDoKLQkJCQkgICAgICAgQlBGX1BST0dfVFlQRV9VTlNQRUMpOwomIzQzOwkJCQkgICAgICAgZXhwZWN0ZWRfbGlua190eXBlLAomIzQzOwkJCQkgICAgICAgLyogVXNlIFVOU1BFQyBhcyB3aWxkY2FyZCB3aGVuIHByb2cgaXMgTlVMTCAqLwomIzQzOwkJCQkgICAgICAgcHJvZyA/IHByb2ctJmd0O3R5cGUgOiBCUEZfUFJPR19UWVBFX1VOU1BFQyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAlpZiAoZHR1cGxlLnByb2cpIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jIGIva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMKaW5kZXggMjVmMzBmOWVkYWVmZDMuLjlmYzYyZGIxNDQxYzYyIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYwpAQCAtMTcxLDEzICYjNDM7MTcxLDE3IEBAIHN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLAogCXN0cnVjdCBuZXQgKm5ldDsKIAlpbnQgaWR4LCByZXQ7CiAKLQlpZiAob2xkX3Byb2cgJmFtcDsmYW1wOyBvbGRfcHJvZyAhPSBsaW5rLSZndDtwcm9nKQotCQlyZXR1cm4gLUVQRVJNOwotCWlmIChuZXdfcHJvZy0mZ3Q7dHlwZSAhPSBsaW5rLSZndDtwcm9nLSZndDt0eXBlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCW11dGV4X2xvY2soJmFtcDtuZXRuc19icGZfbXV0ZXgpOwogCiYjNDM7CWlmIChvbGRfcHJvZyAmYW1wOyZhbXA7IG9sZF9wcm9nICE9IGxpbmstJmd0O3Byb2cpIHsKJiM0MzsJCXJldCA9IC1FUEVSTTsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwlpZiAobmV3X3Byb2ctJmd0O3R5cGUgIT0gbGluay0mZ3Q7cHJvZy0mZ3Q7dHlwZSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwogCW5ldCA9IG5ldF9saW5rLSZndDtuZXQ7CiAJaWYgKCFuZXQgfHwgIWNoZWNrX25ldChuZXQpKSB7CiAJCS8qIExpbmsgYXV0by1kZXRhY2hlZCBvciBuZXRucyBkeWluZyAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCA2ZGIzMDZkMjNiNDc5Zi4uY2FkOTg2ODA3ZDUzMDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC0zNDcxLDkgJiM0MzszNDcxLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpicGZfbGlua190eXBlX3N0cnNbXSA9IHsKIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rID0gZmlscC0mZ3Q7cHJpdmF0ZV9kYXRhOwotCWNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGxpbmstJmd0O3Byb2c7CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZzsKIAllbnVtIGJwZl9saW5rX3R5cGUgdHlwZSA9IGxpbmstJmd0O3R5cGU7CiAJY2hhciBwcm9nX3RhZ1tzaXplb2YocHJvZy0mZ3Q7dGFnKSAqIDIgJiM0MzsgMV0gPSB7IH07CiYjNDM7CXUzMiBwcm9nX2lkOwogCiAJaWYgKHR5cGUgJmx0OyBBUlJBWV9TSVpFKGJwZl9saW5rX3R5cGVfc3RycykgJmFtcDsmYW1wOyBicGZfbGlua190eXBlX3N0cnNbdHlwZV0pIHsKIAkJaWYgKGxpbmstJmd0O3R5cGUgPT0gQlBGX0xJTktfVFlQRV9LUFJPQkVfTVVMVEkpCkBAIC0zNDkwLDEzICYjNDM7MzQ5MSwyMCBAQCBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKQogCX0KIAlzZXFfcHJpbnRmKG0sICYjMzQ7bGlua19pZDpcdCV1XG4mIzM0OywgbGluay0mZ3Q7aWQpOwogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJcHJvZyA9IFJFQURfT05DRShsaW5rLSZndDtwcm9nKTsKIAlpZiAocHJvZykgewogCQliaW4yaGV4KHByb2dfdGFnLCBwcm9nLSZndDt0YWcsIHNpemVvZihwcm9nLSZndDt0YWcpKTsKJiM0MzsJCXByb2dfaWQgPSBwcm9nLSZndDthdXgtJmd0O2lkOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAocHJvZykgewogCQlzZXFfcHJpbnRmKG0sCiAJCQkgICAmIzM0O3Byb2dfdGFnOlx0JXNcbiYjMzQ7CiAJCQkgICAmIzM0O3Byb2dfaWQ6XHQldVxuJiMzNDssCiAJCQkgICBwcm9nX3RhZywKLQkJCSAgIHByb2ctJmd0O2F1eC0mZ3Q7aWQpOwomIzQzOwkJCSAgIHByb2dfaWQpOwogCX0KIAlpZiAobGluay0mZ3Q7b3BzLSZndDtzaG93X2ZkaW5mbykKIAkJbGluay0mZ3Q7b3BzLSZndDtzaG93X2ZkaW5mbyhsaW5rLCBtKTsKQEAgLTU1MzUsNiAmIzQzOzU1NDMsNyBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLAogewogCXN0cnVjdCBicGZfbGlua19pbmZvIF9fdXNlciAqdWluZm8gPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci0mZ3Q7aW5mby5pbmZvKTsKIAlzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBpbmZvOwomIzQzOwljb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7CiAJdTMyIGluZm9fbGVuID0gYXR0ci0mZ3Q7aW5mby5pbmZvX2xlbjsKIAlpbnQgZXJyOwogCkBAIC01NTQ5LDggJiM0Mzs1NTU4LDEyIEBAIHN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsCiAKIAlpbmZvLnR5cGUgPSBsaW5rLSZndDt0eXBlOwogCWluZm8uaWQgPSBsaW5rLSZndDtpZDsKLQlpZiAobGluay0mZ3Q7cHJvZykKLQkJaW5mby5wcm9nX2lkID0gbGluay0mZ3Q7cHJvZy0mZ3Q7YXV4LSZndDtpZDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlwcm9nID0gUkVBRF9PTkNFKGxpbmstJmd0O3Byb2cpOwomIzQzOwlpZiAocHJvZykKJiM0MzsJCWluZm8ucHJvZ19pZCA9IHByb2ctJmd0O2F1eC0mZ3Q7aWQ7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKGxpbmstJmd0O29wcy0mZ3Q7ZmlsbF9saW5rX2luZm8pIHsKIAkJZXJyID0gbGluay0mZ3Q7b3BzLSZndDtmaWxsX2xpbmtfaW5mbyhsaW5rLCAmYW1wO2luZm8pOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90Y3guYyBiL2tlcm5lbC9icGYvdGN4LmMKaW5kZXggMDJkYjAxMTNiOGU3YzYuLmYyMDhjZWYxM2E5OGUzIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3RjeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdGN4LmMKQEAgLTM4LDcgJiM0MzszOCw3IEBAIGludCB0Y3hfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIAl9CiAJcmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgJmFtcDtlbnRyeV9uZXcsIHByb2csIE5VTEwsIHJlcGxhY2VfcHJvZywKIAkJCSAgICAgICBhdHRyLSZndDthdHRhY2hfZmxhZ3MsIGF0dHItJmd0O3JlbGF0aXZlX2ZkLAotCQkJICAgICAgIGF0dHItJmd0O2V4cGVjdGVkX3JldmlzaW9uKTsKJiM0MzsJCQkgICAgICAgYXR0ci0mZ3Q7ZXhwZWN0ZWRfcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfVENYKTsKIAlpZiAoIXJldCkgewogCQlpZiAoZW50cnkgIT0gZW50cnlfbmV3KSB7CiAJCQl0Y3hfZW50cnlfdXBkYXRlKGRldiwgZW50cnlfbmV3LCBpbmdyZXNzKTsKQEAgLTc2LDcgJiM0Mzs3Niw3IEBAIGludCB0Y3hfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIAkJZ290byBvdXQ7CiAJfQogCXJldCA9IGJwZl9tcHJvZ19kZXRhY2goZW50cnksICZhbXA7ZW50cnlfbmV3LCBwcm9nLCBOVUxMLCBhdHRyLSZndDthdHRhY2hfZmxhZ3MsCi0JCQkgICAgICAgYXR0ci0mZ3Q7cmVsYXRpdmVfZmQsIGF0dHItJmd0O2V4cGVjdGVkX3JldmlzaW9uKTsKJiM0MzsJCQkgICAgICAgYXR0ci0mZ3Q7cmVsYXRpdmVfZmQsIGF0dHItJmd0O2V4cGVjdGVkX3JldmlzaW9uLCBCUEZfTElOS19UWVBFX1RDWCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKCF0Y3hfZW50cnlfaXNfYWN0aXZlKGVudHJ5X25ldykpCiAJCQllbnRyeV9uZXcgPSBOVUxMOwpAQCAtMTUyLDcgJiM0MzsxNTIsNyBAQCBzdGF0aWMgaW50IHRjeF9saW5rX3Byb2dfYXR0YWNoKHN0cnVjdCBicGZfbGluayAqbGluaywgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsCiAJaWYgKCFlbnRyeSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgJmFtcDtlbnRyeV9uZXcsIGxpbmstJmd0O3Byb2csIGxpbmssIE5VTEwsIGZsYWdzLAotCQkJICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbik7CiYjNDM7CQkJICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbiwgQlBGX0xJTktfVFlQRV9UQ1gpOwogCWlmICghcmV0KSB7CiAJCWlmIChlbnRyeSAhPSBlbnRyeV9uZXcpIHsKIAkJCXRjeF9lbnRyeV91cGRhdGUoZGV2LCBlbnRyeV9uZXcsIGluZ3Jlc3MpOwpAQCAtMTgzLDcgJiM0MzsxODMsNyBAQCBzdGF0aWMgdm9pZCB0Y3hfbGlua19yZWxlYXNlKHN0cnVjdCBicGZfbGluayAqbGluaykKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byBvdXQ7CiAJfQotCXJldCA9IGJwZl9tcHJvZ19kZXRhY2goZW50cnksICZhbXA7ZW50cnlfbmV3LCBsaW5rLSZndDtwcm9nLCBsaW5rLCAwLCAwLCAwKTsKJiM0MzsJcmV0ID0gYnBmX21wcm9nX2RldGFjaChlbnRyeSwgJmFtcDtlbnRyeV9uZXcsIGxpbmstJmd0O3Byb2csIGxpbmssIDAsIDAsIDAsIEJQRl9MSU5LX1RZUEVfVENYKTsKIAlpZiAoIXJldCkgewogCQlpZiAoIXRjeF9lbnRyeV9pc19hY3RpdmUoZW50cnlfbmV3KSkKIAkJCWVudHJ5X25ldyA9IE5VTEw7CkBAIC0yMjksOSAmIzQzOzIyOSw4IEBAIHN0YXRpYyBpbnQgdGN4X2xpbmtfdXBkYXRlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpucHJvZywKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byBvdXQ7CiAJfQotCXJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksICZhbXA7ZW50cnlfbmV3LCBucHJvZywgbGluaywgb3Byb2csCi0JCQkgICAgICAgQlBGX0ZfUkVQTEFDRSB8IEJQRl9GX0lELAotCQkJICAgICAgIGxpbmstJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7aWQsIDApOwomIzQzOwlyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCAmYW1wO2VudHJ5X25ldywgbnByb2csIGxpbmssIG9wcm9nLCBCUEZfRl9SRVBMQUNFIHwgQlBGX0ZfSUQsCiYjNDM7CQkJICAgICAgIGxpbmstJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7aWQsIDAsIEJQRl9MSU5LX1RZUEVfVENYKTsKIAlpZiAoIXJldCkgewogCQlXQVJOX09OX09OQ0UoZW50cnkgIT0gZW50cnlfbmV3KTsKIAkJb3Byb2cgPSB4Y2hnKCZhbXA7bGluay0mZ3Q7cHJvZywgbnByb2cpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWNlbnQgQlBGIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc2V2ZXJhbCBrZXkgQlBGIGZ1bmN0aW9uczogYGJwZl9tcHJvZ19hdHRhY2hgLCBgYnBmX21wcm9nX2RldGFjaGAsIGBjZ3JvdXBfYnBmX2F0dGFjaGAsIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLCBgYnBmX2xpbmtfc2hvd19mZGluZm9gLCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC4gVGhlc2UgYXJlIGFsbCBjb3JlIGNvbXBvbmVudHMsIHNvIHdlIHNob3VsZCBwYXkgY2xvc2UgYXR0ZW50aW9uLiBUaGUgcHJvcG9zZWQgY2hhbmdlcyBzZWVtIHRvIGludm9sdmUgbW9kaWZpY2F0aW9ucyB0byBgYnBmX21wcm9nX2F0dGFjaGAgYW5kIGBicGZfbXByb2dfZGV0YWNoYCB0byBpbmNsdWRlIGFuIGBleHBlY3RlZF9saW5rX3R5cGVgIGFyZ3VtZW50LiBBZGRpdGlvbmFsbHksIHRoZSBzZXJpZXMgYWltcyB0byByZWZpbmUgaG93IGBicGZfY2dyb3VwX3N0b3JhZ2VgIGlzIG1hbmFnZWQgd2l0aGluIGBfX2Nncm91cF9icGZfYXR0YWNoYCBhbmQgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBkdXJpbmcgYXR0YWNobWVudCBhbmQgcmVwbGFjZW1lbnQgb3BlcmF0aW9ucy4gVGhlcmUmIzM5O3MgYWxzbyBhIG1vZGlmaWNhdGlvbiB0byBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgIHdoaWNoIGxvY2tzIHRoZSBgbmV0bnNfYnBmX211dGV4YCBlYXJsaWVyLiBBbmQgZmluYWxseSwgc29tZSBjaGFuZ2VzIHRvIGBicGZfbGlua19zaG93X2ZkaW5mb2AgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgdG8gdXNlIGBSRUFEX09OQ0UobGluay0mZ3Q7cHJvZylgIGFuZCBgcmN1X3JlYWRfbG9jaygpYCBzZWVtIHdvcnRoIHRha2luZyBhIGxvb2sgYXQuCgpNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGVzZSBhcmUgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgbG9naWMuIFRoZSBwb3RlbnRpYWwgZm9yIHJlZ3Jlc3Npb25zIG9yIHN1YnRsZSBzaWRlIGVmZmVjdHMgaXMgdGhlcmUsIHNvIHdlIHNob3VsZCBhZGQgdGhpcyB0byB0aGUgbGlzdCBvZiAmIzM0O3dvcnRoIGZ1enppbmcmIzM0OyBjYW5kaWRhdGVzLgoKTm93LCBsZXQmIzM5O3MgaXNvbGF0ZSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb246IGBicGZfbXByb2dfYXR0YWNoYCwgYGJwZl9tcHJvZ19kZXRhY2hgLCBgX19jZ3JvdXBfYnBmX2F0dGFjaGAsIGBfX2Nncm91cF9icGZfcmVwbGFjZWAsIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AsIGBicGZfbGlua19zaG93X2ZkaW5mb2AsIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgLgoKVGltZSB0byBjaGVjayB0aGUgY29uZmlnIGRlcGVuZGVuY2llcy4gV2UmIzM5O3JlIG9idmlvdXNseSBsb29raW5nIGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0NHUk9VUF9CUEZgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IGJ5IHJldmlld2luZyB0aGUgcmVsZXZhbnQgZmlsZXMsIGBrZXJuZWwvYnBmL2Nncm91cC5jYCBhbmQgYGtlcm5lbC9icGYvbXByb2cuY2AuIFllcCwgYENPTkZJR19DR1JPVVBfQlBGYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkIGZvciBgY2dyb3VwLmNgLiBBbmQgZm9yIHRoZSBuZXR3b3JraW5nIGFzcGVjdCwgYENPTkZJR19ORVRgIG1pZ2h0IGJlIG5lZWRlZCBmb3IgYG5ldF9uYW1lc3BhY2UuY2AgYW5kIGB0Y3guY2AuIFdlIGtub3cgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgbWFpbiBlbmFibGVyIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuCgpJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGxpbmtlZCB0byBgYnBmX21wcm9nX2F0dGFjaGAgb3IgYHRjeC5jYCwgd2hpY2ggbWlnaHQgcmVxdWlyZSBgQ09ORklHX05FVF9YR1JFU1NgIG9yIHNvbWUgc2ltaWxhciBkZXBlbmRlbmN5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgY29tZXMgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGN4XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0yNz1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBuZXRfbmFtZXNwYWNlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdGN4Lm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjktZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzU2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBCUEYgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG9iamVjdCBmaWxlcywgc3BlY2lmaWNhbGx5IGB0Y3gub2AgYW5kIGBuZXRfbmFtZXNwYWNlLm9gLCBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhleSYjMzk7dmUgYmVlbiBjb21waWxlZCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCB0aGF0IHNldHMgYSBiYXNlbGluZS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgYG5ldGtpdC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgdGllcyBpbnRvIHRoZSByZXN0IG9mIHRoZSBwaWN0dXJlLiBJcyBpdCB1c2luZyB0aGUgc2FtZSBmbGFncz8gSXMgaXQgaGFuZGxpbmcgQlBGIGluc3RydWN0aW9ucyBpbiBhIGNvbXBhdGlibGUgd2F5PyBGaWd1cmluZyBvdXQgdGhlIHJlbGF0aW9uIGJldHdlZW4gdGhlc2UgY29tcG9uZW50cyBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0gYXMgYSB3aG9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRraXRcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX05FVENPTlNPTEUpICYjNDM7PSBuZXRjb25zb2xlLm9cbmRyaXZlcnMvbmV0L01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19ORVRLSVQpICYjNDM7PSBuZXRraXQub1xuZHJpdmVycy9uZXQvTWFrZWZpbGUtMjYtb2JqLXkgJiM0Mzs9IHBoeS9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjQ4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTmV0a2l0IGFuZCBDZ3JvdXBzKioKClJpZ2h0LCBzbyBJIHNlZSB0aGlzIGBuZXRraXQuY2AgZmlsZSBhbmQgaW1tZWRpYXRlbHkgdGhpbmssICYjMzQ7QWgsIHRoYXQmIzM5O3MgZ29pbmcgdG8gbmVlZCBgQ09ORklHX05FVEtJVGAgZW5hYmxlZC4gTm8gc3VycHJpc2VzIHRoZXJlLiYjMzQ7IEl0JiMzOTtzIGp1c3QgYSBzdGFuZGFyZCBkZXBlbmRlbmN5LCBzbyBJJiMzOTtsbCBxdWlja2x5IGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBzZXQgcHJvcGVybHkgaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYmVmb3JlIEkgZGlnIGFueSBkZWVwZXIgaW50byB0aGUgY29kZSBpdHNlbGYuCgpOb3csIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYGNncm91cC5jYC4gVGhpcyBtaWdodCBiZSBhIHJlbGF0ZWQgYXJlYSwgZ2l2ZW4gaG93IG5ldHdvcmtzIGFyZSBvZnRlbiBtYW5hZ2VkIHdpdGhpbiB0aGUgY29uZmluZXMgb2YgcmVzb3VyY2UtY29uc3RyYWluZWQgZW52aXJvbm1lbnRzIHRoYXQgY2dyb3VwcyBhcmUgZGVzaWduZWQgZm9yLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXR3b3JraW5nIGhvb2tzIGFyZSBpbnRlcmFjdGluZyB3aXRoLCBvciBiZWluZyBzaGFwZWQgYnksIHRob3NlIGNncm91cHMuIFRpbWUgdG8ganVtcCBpbiB0aGVyZSBhbmQgc2VlIHdoYXQgdGhleSYjMzk7cmUgdXAgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0zNT1lbmRpZlxua2VybmVsL2JwZi9NYWtlZmlsZTozNjpvYmotJChDT05GSUdfQ0dST1VQX0JQRikgJiM0Mzs9IGNncm91cC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM3LWlmZXEgKCQoQ09ORklHX0lORVQpLHkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk2OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGVCUEYgYW5kIGNncm91cHMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpc+KApiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfQ0dST1VQX0JQRmAgaXMgZW5hYmxlZCwgb2J2aW91c2x5LiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLiBXaXRob3V0IHRoYXQsIEkmIzM5O20gd2FzdGluZyBteSB0aW1lLgoKQW5kIHdoYXQgYWJvdXQgYG1wcm9nLmNgPyBUaGF0IGZpbGUgYWx3YXlzIHNlZW1zIHRvIGJlIGF0IHRoZSBoZWFydCBvZiB0aGUgQlBGIGFuZCBjZ3JvdXAgaW50ZXJhY3Rpb25zIGluIHRoaXMgc3BhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGhlcmUuIElzIGl0IHBhcnQgb2YgdGhlIHNvbHV0aW9uLCBvciB0aGUgcHJvYmxlbSwgb3IgbmVpdGhlcj8gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgcmV2aWV3aW5nIHRoYXQgY29kZSwgbG9va2luZyBmb3IgcmVsZXZhbnQgaG9va3Mgb3IgaW50ZWdyYXRpb24gcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHJvZ1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTU9b2JqLSR7Q09ORklHX0JQRl9MU019XHQgICYjNDM7PSBicGZfaW5vZGVfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRpc2FzbS5vIG1wcm9nLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTctb2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyODAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBGdW5jdGlvbiBSZWFjaGFiaWxpdHkgYW5kIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIEJQRi1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zOiBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19DR1JPVVBfQlBGYCwgYW5kIGBDT05GSUdfTkVUS0lUYC4gTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgb24gYSBzcGVjaWZpYyBzZXQgb2YgZnVuY3Rpb25zOiBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLCBgYnBmX2xpbmtfc2hvd19mZGluZm9gLCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC4KClRoZSBrZXkgcXVlc3Rpb24gaXMsIGFyZSB0aGVzZSBmdW5jdGlvbnMgcmVhY2hhYmxlPyBZZXMsIGNsZWFybHksIHRoZXkgYXJlLCB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbC4gU3BlY2lmaWNhbGx5LCBgYnBmX21wcm9nX2F0dGFjaGAgaXMgcGFydCBvZiBgdGN4X3Byb2dfYXR0YWNoYCwgYW5kIGBuZXRraXRfcHJvZ19hdHRhY2hgLCBhbW9uZyBvdGhlcnMuIGBfX2Nncm91cF9icGZfYXR0YWNoYCBpcyBjYWxsZWQgZnJvbSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAuIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AgaXMgY2FsbGVkIGZyb20gYGJwZl9saW5rX3VwZGF0ZWAuIGBicGZfbGlua19zaG93X2ZkaW5mb2AgaXMgZXhwb3NlZCB2aWEgcHJvY2ZzLCBzcGVjaWZpY2FsbHkgYGZkaW5mb2AgZm9yIGJwZiBsaW5rcywgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgY29tZXMgZnJvbSBgYnBmX29ial9nZXRfaW5mb19ieV9mZGAuCgpOb3csIGJlZm9yZSBJIGRpZyBkZWVwZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgY3JpdGljYWwgZGVwZW5kZW5jaWVzLiBBaGEsIGBDT05GSUdfTkVUYCBpcyByZXF1aXJlZCBmb3IgYENPTkZJR19ORVRLSVRgLiBHb29kIHRvIGtub3cuCgpMZXQmIzM5O3Mgc3VtbWFyaXplIHRoZSBjb25maWd1cmF0aW9uIGFuZCBzeW1ib2xzOiBUaGUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgQlBGX1NZU0NBTExgLCBgQ0dST1VQX0JQRmAsIGFuZCBgTkVUS0lUYC4gQW5kIHRoZXNlIGFyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb24gc3ltYm9scyB0byBjb25zaWRlcjogYGJwZl9tcHJvZ19hdHRhY2hgLCBgYnBmX21wcm9nX2RldGFjaGAsIGBfX2Nncm91cF9icGZfYXR0YWNoYCwgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCwgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCwgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC4KCkZpbmFsbHksIGEgcXVpY2sgbm90ZSBvbiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgYSBkZXRhaWwsIGJ1dCBpdCBkb2VzbiYjMzk7dCByZXByZXNlbnQgYSBiYXJyaWVyLiBJZiB3ZSB0YXJnZXQgaXQgZGlyZWN0bHkgd2l0aCBzeXprYWxsZXIsIHdlIGNhbiByZWFjaCBpdCwgb3IsIGFsdGVybmF0aXZlbHksIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbHNvIHdvcmtzLiBJIHNob3VsZCBjaGVjayBga2VybmVsL2JwZi9jZ3JvdXAuY2AgZm9yIGBfX2Nncm91cF9icGZfYXR0YWNoYCBmb3IgbW9yZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2Nncm91cF9icGZfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTc3MT1zdGF0aWMgaW50IGluc2VydF9wbF90b19obGlzdChzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwsIHN0cnVjdCBobGlzdF9oZWFkICpwcm9ncyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5MS0vKipcbmtlcm5lbC9icGYvY2dyb3VwLmM6NzkyOiAqIF9fY2dyb3VwX2JwZl9hdHRhY2goKSAtIEF0dGFjaCB0aGUgcHJvZ3JhbSBvciB0aGUgbGluayB0byBhIGNncm91cCwgYW5kXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5My0gKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGUgdGhlIGNoYW5nZSB0byBkZXNjZW5kYW50c1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtODA1LSAqL1xua2VybmVsL2JwZi9jZ3JvdXAuYzo4MDY6c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgwNy1cdFx0XHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTkzND1zdGF0aWMgaW50IGNncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy05NDItXHRjZ3JvdXBfbG9jaygpO1xua2VybmVsL2JwZi9jZ3JvdXAuYzo5NDM6XHRyZXQgPSBfX2Nncm91cF9icGZfYXR0YWNoKGNncnAsIHByb2csIHJlcGxhY2VfcHJvZywgbGluaywgdHlwZSwgZmxhZ3MsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NC1cdFx0XHRcdCAgaWRfb3JfZmQsIHJldmlzaW9uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MzgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkFzc2Vzc2luZyBCUEYgRnVuY3Rpb24gQXR0YWNobWVudCBhbmQgUmVwbGFjZW1lbnQqKgoKUmlnaHQsIHNvIGBfX2Nncm91cF9icGZfYXR0YWNoYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgb2Z0ZW4gYSBwb2ludCBvZiBzY3J1dGlueSB3aGVuIGRlYWxpbmcgd2l0aCBCUEYuIEhvd2V2ZXIsIGl0JiMzOTtzIHBlcmZlY3RseSBhY2NlcHRhYmxlIHRvIGxpc3QgaXQgaW4gdGhpcyBjb250ZXh0LiBUaGVyZSYjMzk7cyBubyBpbmhlcmVudCBpc3N1ZSB0aGVyZS4gTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBfX2Nncm91cF9icGZfcmVwbGFjZWAuIFRoaXMgaXMgdGhlIG9uZSB3ZSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRvIGdyYXNwIHRoaXMgcGFydGljdWxhciBCUEYgaW1wbGVtZW50YXRpb24mIzM5O3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29kZSBmb3IgdGhhdCBmdW5jdGlvbiBhbmQgZGV0ZXJtaW5lIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2Nncm91cF9icGZfcmVwbGFjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYz0xMDAxPXN0YXRpYyB2b2lkIHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coc3RydWN0IGNncm91cCAqY2dycCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMjgtLyoqXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMjk6ICogX19jZ3JvdXBfYnBmX3JlcGxhY2UoKSAtIFJlcGxhY2UgbGluayYjMzk7cyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDMwLSAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNy0gKi9cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTAzODpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMzktXHRcdFx0XHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTEwOD1zdGF0aWMgaW50IGNncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTI1LVx0fVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTI2Olx0cmV0ID0gX19jZ3JvdXBfYnBmX3JlcGxhY2UoY2dfbGluay1cdTAwM2VjZ3JvdXAsIGNnX2xpbmssIG5ld19wcm9nKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEyNy1vdXRfdW5sb2NrOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI4MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGFuZCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgY29uZmlybXMgaXQ6IGBfX2Nncm91cF9icGZfcmVwbGFjZWAgaXMgaW5kZWVkIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gU3RhdGljIGltcGxpZXMgc29tZXRoaW5nIGFib3V0IHNjb3BlIGFuZCBsaW5rYWdlLCBkb2VzbiYjMzk7dCBpdD8gSXMgaXQgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LCBvciBkb2VzIGl0IGhhdmUgZXh0ZXJuYWwgbGlua2FnZSBpbiB0aGUgYnJvYWRlciBrZXJuZWwgY29udGV4dD8gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgZGVsdmUgZnVydGhlci4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHNoaWZ0IGZvY3VzIHRvIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHJlbGF0ZXMgdG8gd2hhdCBJIHdhcyBqdXN0IHRoaW5raW5nIGFib3V0LCBhbmQgaG93IGl0IGludGVyYWN0cy4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBsaW5rIGJldHdlZW4gQlBGIHByb2dyYW1zIGFuZCBuZXR3b3JrIG5hbWVzcGFjZXMsIGFuZCBtb3N0IGxpa2VseSwgdGhlIGFjdCBvZiB1cGRhdGluZyB0aGVtLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgSSBuZWVkIHRvIGxvb2sgY2xvc2VseSB0byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3by4gR2l2ZW4gdGhhdCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHN0YXRpYywgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBob3cgaXQgbWlnaHQgYmUgY2FsbGVkIGFuZCBsaW5rZWQgYnkgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYC4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBtZWFucyBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGNyaXRpY2FsIHBhdGggZm9yIEJQRiBwcm9ncmFtIHVwZGF0ZXMgYW5kIG5ldHdvcmsgbmFtZXNwYWNlIGNvbmZpZ3VyYXRpb24sIGFuZCBuZWVkIHRvIGZvbGxvdyBpdHMgaW1wbGljYXRpb25zLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtob3cgaXMgdGhpcyBzdGF0aWMgZnVuY3Rpb24gYmVpbmcgdXRpbGl6ZWQgaW4gdGhlIGJyb2FkZXIgbGlmZWN5Y2xlPyYjMzQ7IEkgc2hvdWxkIGFsc28gY29uc2lkZXIgZXJyb3IgaGFuZGxpbmcgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTE1NT1zdGF0aWMgdm9pZCBicGZfbmV0bnNfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0xNjItXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzoxNjM6c3RhdGljIGludCBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0xNjQtXHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxuLS1cbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTIzOT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfbmV0bnNfbGlua19vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjQyLVx0LmRldGFjaCA9IGJwZl9uZXRuc19saW5rX2RldGFjaCxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jOjI0MzpcdC51cGRhdGVfcHJvZyA9IGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nLFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjQ0LVx0LmZpbGxfbGlua19pbmZvID0gYnBmX25ldG5zX2xpbmtfZmlsbF9pbmZvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk3MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBvbiBTdGF0aWMgRnVuY3Rpb25zIGluIEJQRiBMaW5rIE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgc28gYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYC4uLiByaWdodCwgdGhhdCBvbmUgaXMgZGVmaW5lZCBhcyBgc3RhdGljYC4gU2hvdWxkbiYjMzk7dCBiZSBhbnkgc3VycHJpc2VzIHRoZXJlLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gY29uZmlybSBhc3N1bXB0aW9ucy4gTm93LCBsZXQmIzM5O3MgcGl2b3QgdG8gY29uZmlybWluZyB0aGUgYmVoYXZpb3Igb2YgYGJwZl9saW5rX3Nob3dfZmRpbmZvYC4gV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIGluZm9ybWF0aW9uIGlzIGJlaW5nIHByb3ZpZGVkIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzdHJ1Y3R1cmUgYW5kIGRhdGEgYXJlIGJlaGF2aW5nIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbGlua19zaG93X2ZkaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTM0NjM9c3RhdGljIGNvbnN0IGNoYXIgKmJwZl9saW5rX3R5cGVfc3Ryc1tdID0ge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0NzAtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDcxOnN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDcyLXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9saW5rX2ZvcHMgPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTIyLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUyMzpcdC5zaG93X2ZkaW5mb1x0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MjQtI2VuZGlmXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzUzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBicGZfbGlua19mb3BzX3BvbGwgPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTMxLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUzMjpcdC5zaG93X2ZkaW5mb1x0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MzMtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDkwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgTGluayBGRCBJbmZvcm1hdGlvbiBSZXRyaWV2YWwqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHdoZXRoZXIgdGhhdCYjMzk7cyBkZWNsYXJlZCBzdGF0aWMgd2l0aGluIHRoZSBjb2RlIGJhc2UuIE15IHVuZGVyc3RhbmRpbmcgaXMgaXQgaXMsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgYmVjYXVzZSBpdCBoYXMgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGFjY2Vzc2liaWxpdHkgb2YgdGhhdCBpbmZvcm1hdGlvbi4KCk5vdywgbGV0JiMzOTtzIHBpdm90IGFuZCBleGFtaW5lIGhvdyBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGZ1bmN0aW9ucy4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGNlbnRyYWwgcmV0cmlldmFsIHBvaW50IGZvciB0aGUgRkQgaW5mb3JtYXRpb24sIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgYnBmX2xpbmtfc2hvd19mZGluZm9gIHRvIGRldGVybWluZSB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9saW5rX2dldF9pbmZvX2J5X2ZkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NTUyMz1zdGF0aWMgaW50IGJwZl9idGZfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTUzOC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU1Mzk6c3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU1NDAtXHRcdFx0XHQgIHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NTk5PXN0YXRpYyBpbnQgYnBmX29ial9nZXRfaW5mb19ieV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NjE3LVx0ZWxzZSBpZiAoZmRfZmlsZShmKS1cdTAwM2VmX29wID09IFx1MDAyNmJwZl9saW5rX2ZvcHMgfHwgZmRfZmlsZShmKS1cdTAwM2VmX29wID09IFx1MDAyNmJwZl9saW5rX2ZvcHNfcG9sbClcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU2MTg6XHRcdHJldHVybiBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZF9maWxlKGYpLCBmZF9maWxlKGYpLVx1MDAzZXByaXZhdGVfZGF0YSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU2MTktXHRcdFx0XHRcdCAgICAgIGF0dHIsIHVhdHRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgQlBGIExpbmsgSW5mb3JtYXRpb24gYW5kIEF0dGFjaG1lbnQgTWVjaGFuaXNtcyoqCgpPa2F5LCBzbyBJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGlzIGluZGVlZCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cg4oCTIGhlbHBzIG5hcnJvdyBkb3duIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIGZvciB1c2FnZS4gTm93LCBJIHNob3VsZCBzaGlmdCBteSBmb2N1cyB0byBkaXNzZWN0aW5nIGhvdyBpdCB3b3JrcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYXR0YWNobWVudC9kZXRhY2htZW50LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gYGJwZl9tcHJvZ19hdHRhY2hgIGFuZCBgYnBmX21wcm9nX2RldGFjaGAgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJkZXBlbmRlbmNpZXMgYW5kIGhvdyBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGZhY3RvcnMgaW50byB0aGF0IG92ZXJhbGwgcHJvY2Vzcy4gR290dGEgbG9vayBhdCB0aGUgYmlnZ2VyIHBpY3R1cmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9tcHJvZ19hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL21wcm9nLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9tcHJvZy5jPTIxMD1zdGF0aWMgaW50IGJwZl9tcHJvZ19wb3NfYWZ0ZXIoc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4tLVxua2VybmVsL2JwZi9tcHJvZy5jLTIyNS1cbmtlcm5lbC9icGYvbXByb2cuYzoyMjY6aW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG5rZXJuZWwvYnBmL21wcm9nLmMtMjI3LVx0XHQgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzgzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEJQRiBFeHBvcnQgYW5kIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGNvbnRleHQgaW5kaWNhdGVzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGIGZ1bmN0aW9uYWxpdHkgYW5kIGl0cyBpbnRlZ3JhdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gZXhwb3J0LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY29ycmVjdDsgeWVzLCB0aGVzZSBCUEYgZWxlbWVudHMgYXJlIGJlaW5nIGV4cG9ydGVkLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGtleSBmdW5jdGlvbnMgYXQgcGxheSBoZXJlLiBUaGUgZm9jdXMgc2VlbXMgdG8gYmUgb24gYXR0YWNoaW5nIGFuZCBkZXRhY2hpbmcgQlBGIHByb2dyYW1zLCBlc3BlY2lhbGx5IHRvIGFuZCBmcm9tIGNncm91cHMuIFRoZSBjb3JlIGZ1bmN0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFyZTogYGJwZl9tcHJvZ19hdHRhY2hgLCBgYnBmX21wcm9nX2RldGFjaGAsIGBfX2Nncm91cF9icGZfYXR0YWNoYCwgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCwgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCwgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuIFRoZXNlIGFyZSB0aGUgaG9va3MgYW5kIGludGVyZmFjZXMgSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplLgoKTm93LCBvbiB0byBjb25maWd1cmF0aW9ucy4gV2UgaGF2ZSB0aHJlZSBtYWluIG9uZXMgYmVpbmcgZmxhZ2dlZDogYEJQRl9TWVNDQUxMYCwgYENHUk9VUF9CUEZgLCBhbmQgYE5FVEtJVGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGNvbmZpZ3MgbHVya2luZyBhYm91dC4KCkxldCYjMzk7cyBjb25maXJtIHRoZSBjb25maWdzIGFyZSBwcmVzZW50IGluIHRoZSBmaWxlczoKKiAgIGB0Y3guY2AgdXNlcyBgQ09ORklHX0JQRl9TWVNDQUxMYC4KKiAgIGBuZXRfbmFtZXNwYWNlLmNgIHJlbGllcyBvbiBgQ09ORklHX0JQRl9TWVNDQUxMYC4KKiAgIGBtcHJvZy5jYCB1dGlsaXplcyBgQ09ORklHX0JQRl9TWVNDQUxMYC4KKiAgIGBjZ3JvdXAuY2AgaXMgZHJpdmVuIGJ5IGBDT05GSUdfQ0dST1VQX0JQRmAuCiogICBgbmV0a2l0LmNgIGxldmVyYWdlcyBgQ09ORklHX05FVEtJVGAuCgpPa2F5LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYENPTkZJR19ORVRLSVRgIGlzIHRoZSAqb25seSogY29uZmlndXJhdGlvbiBmb3IgYG5ldGtpdC5jYCDigJMgYXMgY29uZmlybWVkIGJ5IGBvYmotJChDT05GSUdfTkVUS0lUKSAmIzQzOz0gbmV0a2l0Lm9gLiBUaGF0JiMzOTtzIGNsZWFuLgoKTm93LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgbW9kaWZpZWQgZmlsZXMuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IHRoZSByZWFsIHBpY3R1cmUuIFNvLCB3ZSYjMzk7dmUgZ290OgoKKiAgIGBpbmNsdWRlL2xpbnV4L2JwZl9tcHJvZy5oYCDigJMgdGhpcyBpcyBhIGhlYWRlciwgc28gaXQgbGlrZWx5IGRlZmluZXMgdGhlIGludGVyZmFjZXMgYW5kIHN0cnVjdHVyZXMuIE1ha2VzIHNlbnNlLgoqICAgYGRyaXZlcnMvbmV0L25ldGtpdC5jYCDigJMgdGhpcyBpcyBzdHJhaWdodGZvcndhcmQ7IGl0JiMzOTtzIGBDT05GSUdfTkVUS0lUYCBhdCB3b3JrLgoqICAgYGtlcm5lbC9icGYvY2dyb3VwLmNgIOKAkyB0aGlzIGlzIHRpZWQgdG8gYENPTkZJR19DR1JPVVBfQlBGYC4KKiAgIGBrZXJuZWwvYnBmL21wcm9nLmNgIOKAkyB0aGlzIG9uZSBpcyB1c2luZyBgQ09ORklHX0JQRl9TWVNDQUxMYC4KKiAgIGBrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY2Ag4oCTIGFsc28gdXNlcyBgQ09ORklHX0JQRl9TWVNDQUxMYC4KKiAgIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2Ag4oCTIHNhbWUsIGBDT05GSUdfQlBGX1NZU0NBTExgLgoqICAgYGtlcm5lbC9icGYvdGN4LmNgIOKAkyBhbmQgYWdhaW4sIGBDT05GSUdfQlBGX1NZU0NBTExgLgoKU28sIGNvbmZpcm1lZDogdGhlIGtleSBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5pdGVseSBgQlBGX1NZU0NBTExgLCBgQ0dST1VQX0JQRmAsIGFuZCBgTkVUS0lUYC4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBrbm93IHRoYXQgYENPTkZJR19ORVRLSVRgIGRlcGVuZHMgb24gYENPTkZJR19ORVRgLiBXaGlsZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBpdHNlbGYgbWF5IG5vdCBzdHJpY3RseSByZXF1aXJlIGBDT05GSUdfTkVUYCwgdGhlIGZpbGVzIGBuZXRfbmFtZXNwYWNlLmNgIGFuZCBgdGN4LmNgIG1pZ2h0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBNYWtlZmlsZSBmb3IgdGhlIEJQRiBjb3JlIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgYG5ldF9uYW1lc3BhY2Uub2AgYW5kIGB0Y3gub2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldF9uYW1lc3BhY2VcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG9mZmxvYWQub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBuZXRfbmFtZXNwYWNlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdGN4Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEJQRiBTeXN0ZW0gQ2FsbCBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgQlBGIHN5c3RlbSBjYWxsIHN0dWZmIGlzIGNvbXBpbGVkLiBJdCYjMzk7cyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFdhaXQgYSBtaW51dGUuLi4gSSBoYXZlIGEgc3VzcGljaW9uLiBUaGlzIGBuZXRfbmFtZXNwYWNlLmNgIGZpbGUg4oCTIGRvZXNuJiMzOTt0IHRoYXQgKnJlcXVpcmUqIGBDT05GSUdfTkVUYD8gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgZGVwZW5kZW5jeSB0byBiZSBzdXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlc2UgY29uZmlndXJhdGlvbnMgY29tcGxldGVseSBiZWZvcmUgSSBtb3ZlIG9uLiBPa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaW4gYG5ldF9uYW1lc3BhY2UuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX05FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBDb21waWxhdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgQlBGIHN5c2NhbGwgZ2V0cyBjb21waWxlZCwgYW5kIGl0IGxvb2tzIGxpa2UgYG5ldF9uYW1lc3BhY2UuY2AgaXMgZGVmaW5pdGVseSBpbnZvbHZlZCwgdHJpZ2dlcmVkIGJ5IGBDT05GSUdfQlBGX1NZU0NBTExgLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiB3aGF0IGhhcHBlbnMgaWYgdGhlIG5ldHdvcmsgc3RhY2sgaXRzZWxmIChgQ09ORklHX05FVGApIGlzIGRpc2FibGVkPyBUaGF0IHRocm93cyBhIHdyZW5jaCBpbiB0aGUgd29ya3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgY2xlYXJseS4gTGV0JiMzOTtzIGdvIGJhY2sgYW5kIGNhcmVmdWxseSByZS1leGFtaW5lIGBrZXJuZWwvYnBmL01ha2VmaWxlYCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBiZXNpZGVzIGp1c3QgYENPTkZJR19CUEZfU1lTQ0FMTGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBmdWxseSB1bmRlcnN0b29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRfbmFtZXNwYWNlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0yNj1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBvZmZsb2FkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbmV0X25hbWVzcGFjZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI4LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHRjeC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDEyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIEludmVzdGlnYXRpb246IGBuZXRfbmFtZXNwYWNlLmNgICZhbXA7IENPTkZJR19ORVQqKgoKSG1tLCBob2xkIG9uLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgYG5ldF9uYW1lc3BhY2UuY2AgYW5kIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcgcG9wcyB1cC4gVGhpcyBmaWxlIGlzIGNsZWFybHkgdXRpbGl6aW5nIHRoZSBgc3RydWN0IG5ldGAgc3RydWN0dXJlLCBhbmQgdGhhdCYjMzk7cyB1c3VhbGx5IGEgc3Ryb25nIGluZGljYXRvciBvZiBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eS4gTm93LCB0aGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgaXMgd2hldGhlciB0aGUgaW5jbHVzaW9uIG9mIHRoYXQgc3RydWN0dXJlIGluIHRoaXMgcGFydGljdWxhciBmaWxlIGlzIGNvbmRpdGlvbmFsLiBTcGVjaWZpY2FsbHksIGlzIHRoZSByZWxldmFudCBjb2RlIHNlY3Rpb24g4oCTIGxpa2VseSB0aGUgZW50aXJlIGZpbGUsIGdpdmVuIGl0cyBuYW1lIOKAkyBwcm90ZWN0ZWQgYnkgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBhbmQgdGhhdCBkaXJlY3RpdmUgaXMgZGVwZW5kZW50IG9uIGBDT05GSUdfTkVUYD8gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoaXMgZGVwZW5kZW5jeSBleGlzdHMuIElmIG5vdCwgaXQgY291bGQgc2lnbmlmeSBhIGNvbmZpZ3VyYXRpb24gb3ZlcnNpZ2h0LCBhIHBvdGVudGlhbCBwb3J0YWJpbGl0eSBpc3N1ZSwgb3IgYSBzaXR1YXRpb24gd2hlcmUgbmV0d29ya2luZyBjb2RlIGNvdWxkIGJlIGluY2x1ZGVkIHVuaW50ZW50aW9uYWxseS4gQWx0ZXJuYXRpdmVseSwgaWYgaXQgaXMgZ3VhcmRlZCBieSBDT05GSUdfTkVULCBhbGwgaXMgYXMgaXQgc2hvdWxkIGJlLiBMZXQgbWUgY2hlY2sgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGF0IHRoZSB0b3Agb2YgdGhhdCBmaWxlLCBhcyBpdCBzZWVtcyBhIHJhdGhlciBpbXBvcnRhbnQgcGllY2Ugb2YgdGhlIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX05FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGRpc3BhdGNoZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToyMzppZmVxICgkKENPTkZJR19ORVQpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI0LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRldm1hcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Nzc3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIGtlcm5lbCBkZXZlbG9wbWVudCBhbmQgYnVpbGQgc3lzdGVtczoKCioqRGVidWdnaW5nIGEgQnVpbGQgQ29uZmlndXJhdGlvbiBJc3N1ZSoqCgpSaWdodCwgc28gSSBzZWUgYSByZWZlcmVuY2UgdG8gYGlmZXEgKCQoQ09ORklHX05FVCkseSlgIGF0IGxpbmUgMjMuIFRoYXQgaW5zdGFudGx5IGZsYWdzIGEgcG90ZW50aWFsIGRlcGVuZGVuY3kgcmVsYXRlZCB0byBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIFNpbmNlIEkmIzM5O20gdmVyeSBmYW1pbGlhciB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBidWlsZCBwcm9jZXNzLCBJIGltbWVkaWF0ZWx5IGtub3cgd2hlcmUgdG8gbG9vay4gTXkgbmV4dCB0aG91Z2h0IGlzLCAmIzM0O0xldCYjMzk7cyBjaGVjayBga2VybmVsL2JwZi9NYWtlZmlsZWAgYXJvdW5kIHRoYXQgc2FtZSBsaW5lIG51bWJlci4mIzM0OyBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMgdGhlcmUgdGhhdCYjMzk7cyBsaWtlbHkgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHdoeSBgQ09ORklHX05FVGAgaXMgYmVpbmcgZXZhbHVhdGVkIGluIHRoYXQgY29udGV4dC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgYXBwcm9hY2g6IGlkZW50aWZ5IHRoZSBjb25kaXRpb24sIHRoZW4gdHJhY2UgaXQgdG8gd2hlcmUgaXQmIzM5O3MgYmVpbmcgZXZhbHVhdGVkIHRvIHNlZSBpZiBpdCBtYWtlcyBzZW5zZSBpbiB0aGUgY3VycmVudCBidWlsZCBjb25maWd1cmF0aW9uIGFuZCB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgaW4gdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgc291cmNlIGNvZGUuIEkgYmV0IHRoaXMgaXMgYSBidWlsZC10aW1lIGNvbmRpdGlvbmFsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG4gIDIxOlx0ZW5kaWZcbiAgMjI6XHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGRpc3BhdGNoZXIub1xuICAyMzpcdGlmZXEgKCQoQ09ORklHX05FVCkseSlcbiAgMjQ6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkZXZtYXAub1xuICAyNTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNwdW1hcC5vXG4gIDI2Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gb2ZmbG9hZC5vXG4gIDI3Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbmV0X25hbWVzcGFjZS5vXG4gIDI4Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdGN4Lm9cbiAgMjk6XHRlbmRpZlxuICAzMDpcdGlmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KVxuICAzMTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN0YWNrbWFwLm9cbiAgMzI6XHRlbmRpZlxuICAzMzpcdGlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXG4gIDM0Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY2dyb3VwX2l0ZXIubyBicGZfY2dycF9zdG9yYWdlLm9cbiAgMzU6XHRlbmRpZlxuICAzNjpcdG9iai0kKENPTkZJR19DR1JPVVBfQlBGKSAmIzQzOz0gY2dyb3VwLm9cbiAgMzc6XHRpZmVxICgkKENPTkZJR19JTkVUKSx5KVxuICAzODpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHJldXNlcG9ydF9hcnJheS5vXG4gIDM5Olx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NDUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzIGZvciBCUEYtUmVsYXRlZCBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gdGhlIGluaXRpYWwgaW5zcGVjdGlvbiwgaXQgbG9va3MgbGlrZSBgbmV0X25hbWVzcGFjZS5vYCBhbmQgYHRjeC5vYCBhcmUgdGllZCB0byBgQ09ORklHX05FVGAsIHdoaWNoIGluIHR1cm4gaW1wbGllcyBgQ09ORklHX05FVEtJVGAgYXMgd2VsbC4gIFNvLCBhdCBhIGJhc2UgbGV2ZWwsIHdlIGhhdmUgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfQ0dST1VQX0JQRmAsIGBDT05GSUdfTkVUYCwgYW5kIGBDT05GSUdfTkVUS0lUYCBhcyBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuCgpIb3dldmVyLCB0aGUgcHJvbXB0IGlzIGNsZWFyOiBhdm9pZCB0aGUgZXhjZXNzaXZlbHkgZ2VuZXJhbC4gV2hpbGUgYENPTkZJR19ORVRgIGlzIGNlcnRhaW5seSByZXF1aXJlZCwgaXQmIzM5O3MgdG9vIGJyb2FkIGZvciB0aGlzIHB1cnBvc2UuICBgQ09ORklHX0JQRl9TWVNDQUxMYCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHRoZSBjb3JlIGVuYWJsaW5nIGNvbmZpZyBmb3IgQlBGLCBldmVuIGlmIGdlbmVyYWxseSBhcHBsaWNhYmxlLCBzbyB0aGF0IHN0YXlzLiAgYENPTkZJR19DR1JPVVBfQlBGYCBpcyBzdWl0YWJseSBzcGVjaWZpYyB0byBiZSB1c2VmdWwsIGFuZCBzbyBpcyBgQ09ORklHX05FVEtJVGAuIFNvLCB3ZSBrZWVwIHRob3NlLgoKTm93LCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgZ2V0dGluZyBhbGwgdGhlIHJlbGV2YW50IGNvZGUuIExvb2tpbmcgYXQgdGhlIGZvY3VzIHN5bWJvbHMsIHdlIGhhdmUgYSBsaXN0IHRvIHN0YXJ0IHdpdGg6IGBicGZfbXByb2dfYXR0YWNoYCwgYGJwZl9tcHJvZ19kZXRhY2hgLCBgX19jZ3JvdXBfYnBmX2F0dGFjaGAsIGBfX2Nncm91cF9icGZfcmVwbGFjZWAsIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AsIGBicGZfbGlua19zaG93X2ZkaW5mb2AsIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgLgoKQnV0IGxldCYjMzk7cyBub3Qgc3RvcCB0aGVyZS4gV2UgbmVlZCB0byBiZSBleGhhdXN0aXZlIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgY292ZXJpbmcgdGhlIG1vZGlmaWNhdGlvbnMgbWFkZS4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbHMgaW4gYG5ldGtpdC5jYCBhbmQgYHRjeC5jYC4gQW5kIHN1cmUgZW5vdWdoLCB0aGVyZSBhcmUgc2V2ZXJhbDogYG5ldGtpdF9wcm9nX2F0dGFjaGAsIGBuZXRraXRfcHJvZ19kZXRhY2hgLCBgbmV0a2l0X2xpbmtfcHJvZ19hdHRhY2hgLCBgbmV0a2l0X2xpbmtfcmVsZWFzZWAsIGFuZCBgbmV0a2l0X2xpbmtfdXBkYXRlYCBpbiBgbmV0a2l0LmNgOyB0aGVuIGB0Y3hfcHJvZ19hdHRhY2hgLCBgdGN4X3Byb2dfZGV0YWNoYCwgYHRjeF9saW5rX3Byb2dfYXR0YWNoYCwgYHRjeF9saW5rX3JlbGVhc2VgLCBhbmQgYHRjeF9saW5rX3VwZGF0ZWAgaW4gYHRjeC5jYC4gUGx1cyBgYnBmX21wcm9nX2xpbmtgIGFuZCBgYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlYCBpbiBgbXByb2cuY2AuCgpPa2F5LCBhZGRpbmcgYG5ldGtpdF9wcm9nX2F0dGFjaGAsIGB0Y3hfcHJvZ19hdHRhY2hgIGFuZCB0aGUgbGluayB2ZXJzaW9ucyBzZWVtIGFwcHJvcHJpYXRlIHRvIGV4cGFuZCB0aGUgc3ltYm9sIGxpc3QsIHRob3VnaCB0aGUgYGJwZl9tcHJvZ19hdHRhY2hgIGJhc2UgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgdGhvc2UuCgpGaW5hbCBmb2N1cyBzeW1ib2xzOgoKYGJwZl9tcHJvZ19hdHRhY2hgCmBicGZfbXByb2dfZGV0YWNoYApgX19jZ3JvdXBfYnBmX2F0dGFjaGAKYF9fY2dyb3VwX2JwZl9yZXBsYWNlYApgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgCmBicGZfbGlua19zaG93X2ZkaW5mb2AKYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYApgbmV0a2l0X3Byb2dfYXR0YWNoYApgdGN4X3Byb2dfYXR0YWNoYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRraXRfcHJvZ19hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRraXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRraXQuYz03MTE9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRraXRfZGV2X2ZldGNoKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlmaW5kZXgsIHUzMiB3aGljaClcbi0tXG5kcml2ZXJzL25ldC9uZXRraXQuYy03NDQtXG5kcml2ZXJzL25ldC9uZXRraXQuYzo3NDU6aW50IG5ldGtpdF9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuZHJpdmVycy9uZXQvbmV0a2l0LmMtNzQ2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgRHluYW1pYyBCZWhhdmlvcioqCgpPa2F5LCBzbyB0aGlzIGlzbiYjMzk7dCBhIHN0YXRpYyBzaXR1YXRpb24uIFNvbWV0aGluZyYjMzk7cyBjbGVhcmx5IGluIGZsdXgsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZHluYW1pY3MgYXQgcGxheS4gVGhlIHBocmFzZSAmIzM0O0l0IGlzIG5vdCBzdGF0aWMmIzM0OyBpcyBhIHNpZ25hbCDigJMgaXQgbWVhbnMgSSBjYW4mIzM5O3QganVzdCBsb29rIGF0IGEgc25hcHNob3Qgb2YgdGhlIHN5c3RlbTsgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGluZ3MgY2hhbmdlIG92ZXIgdGltZS4KCkdpdmVuIHRoZSBjb250ZXh0LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGB0Y3hfcHJvZ19hdHRhY2hgLiBUaGF0IGZ1bmN0aW9uIGxpa2VseSByZXByZXNlbnRzIGEgY3JpdGljYWwgcG9pbnQgd2hlcmUgc29tZSBiZWhhdmlvciBpcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBJdCYjMzk7cyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgbGlua2luZyBhIHByb2dyYW0gb3Igc29tZSBvdGhlciBlbGVtZW50IHdpdGhpbiB0aGUgc3lzdGVtLiBVbmRlcnN0YW5kaW5nIHdoYXQgaGFwcGVucyB3aXRoaW4gYHRjeF9wcm9nX2F0dGFjaGAg4oCTIGl0cyBpbnB1dHMsIG91dHB1dHMsIHNpZGUgZWZmZWN0cywgYW5kIGNvbnRyb2wgZmxvdyDigJMgc2hvdWxkIGJlIGtleSB0byB1bnJhdmVsaW5nIHRoZSBkeW5hbWljIGFzcGVjdCBJJiMzOTttIHNlZWluZy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgZXhlY3V0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3hfcHJvZ19hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RjeC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdGN4LmMtOS1cbmtlcm5lbC9icGYvdGN4LmM6MTA6aW50IHRjeF9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxua2VybmVsL2JwZi90Y3guYy0xMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5Mjc1CgkJCQkJCQlvdXRwdXQ6IDI4NQoJCQkJCQkJdGhvdWdodHM6IDI5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpc24mIzM5O3QganVzdCBjb3NtZXRpYzsgaXQmIzM5O3MgdG91Y2hpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgQlBGIHN0dWZmLCBhbmQgdGhhdCBpbW1lZGlhdGVseSBnZXRzIG15IGF0dGVudGlvbi4gSSBzZWUgdGhhdCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggbXVsdGktcHJvZyBhdHRhY2htZW50IGFuZCBkZXRhY2htZW50IChgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCkuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIHN0cmljdGVyIGxpbmsgdHlwZSBlbmZvcmNlbWVudCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgdGhlIGBORVRLSVRgIGFuZCBgVENYYCBzdWJzeXN0ZW1zLiBNYWtlcyBzZW5zZSDigJMgdGhvc2UgYXJlIHNwZWNpYWxpemVkIHVzZSBjYXNlcywgYW5kIHlvdSAqZGVmaW5pdGVseSogd2FudCB0byBlbnN1cmUgcHJvZ3JhbXMgYXJlIGF0dGFjaGVkIGNvcnJlY3RseS4KClRoZW4gSSBzZWUgdXBkYXRlcyB0byB0aGUgY2dyb3VwIEJQRiBhdHRhY2gvcmVwbGFjZSBsb2dpYyAoYF9fY2dyb3VwX2JwZl9hdHRhY2hgLCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgKS4gVGhhdCBoaW50cyBhdCBjaGFuZ2VzIHRvIGhvdyBCUEYgY2dyb3VwIHN0b3JhZ2UgaXMgaGFuZGxlZC4gVGhhdCBjb3VsZCBoYXZlIHJpcHBsZSBlZmZlY3RzLCBzbyB3b3J0aCBhIGNsb3NlciBsb29rLiBUaGV5JiMzOTtyZSBwcm9iYWJseSBmaXhpbmcgYSBzdG9yYWdlIGxlYWsgb3Igc29tZSBzaW1pbGFyIGdvdGNoYS4KClRoZSBmaXggZm9yIHRoZSBsb2NraW5nIGlzc3VlIGluIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AgaXMgYW5vdGhlciByZWQgZmxhZy4gTG9ja2luZyBidWdzIGFyZSBvZnRlbiBoYXJkIHRvIHNwb3QsIGVzcGVjaWFsbHkgaW4gY29uY3VycmVudCBjb2RlLCBzbyB0aGF0IGZpeCBpcyBsaWtlbHkgYSBnb29kIHRoaW5nLiBBbmQgUkNVIGxvY2tpbmcgZml4ZXMgaW4gYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBpcyBlcXVhbGx5IGltcG9ydGFudCwgcGFydGljdWxhcmx5IHNpbmNlIHRoZXNlIGFyZSByZWxhdGVkIHRvIGdldHRpbmcgaW5mb3JtYXRpb24gYWJvdXQgbGlua3MsIGxpa2VseSBmb3IgdG9vbHMuCgpTbywgZnVuY3Rpb25hbGx5LCB0aGlzIGlzIGFsbCBjb3JlIGtlcm5lbCBsb2dpYywgZGlyZWN0bHkgcmVhY2hhYmxlLCBhbmQgc3ViamVjdCB0byBmdXp6ZXIgaW1wYWN0LiBMZXQmIzM5O3MgbWFrZSBzdXJlIG91ciBmdXp6ZXJzIHBpY2sgdGhpcyB1cC4gSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7TkVUS0lUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21wcm9nX2F0dGFjaCYjMzQ7LAogICAgJiMzNDticGZfbXByb2dfZGV0YWNoJiMzNDssCiAgICAmIzM0O19fY2dyb3VwX2JwZl9hdHRhY2gmIzM0OywKICAgICYjMzQ7X19jZ3JvdXBfYnBmX3JlcGxhY2UmIzM0OywKICAgICYjMzQ7YnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2hvd19mZGluZm8mIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQmIzM0OywKICAgICYjMzQ7bmV0a2l0X3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O3RjeF9wcm9nX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiBsb2dpYyBmb3IgYXR0YWNoaW5nIGFuZCBkZXRhY2hpbmcgbXVsdGktcHJvZ3MgKGJwZl9tcHJvZ19hdHRhY2gsIGJwZl9tcHJvZ19kZXRhY2gpIHRvIGVuZm9yY2UgZXhwZWN0ZWQgbGluayB0eXBlcywgc3BlY2lmaWNhbGx5IGZvciBORVRLSVQgYW5kIFRDWC4gSXQgYWxzbyB1cGRhdGVzIGNncm91cCBCUEYgYXR0YWNoL3JlcGxhY2UgbG9naWMgdG8gcHJvcGVybHkgaGFuZGxlIEJQRiBjZ3JvdXAgc3RvcmFnZSwgYW5kIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZy4gQWRkaXRpb25hbGx5LCBpdCBmaXhlcyBSQ1UgbG9ja2luZyBpbiBicGZfbGlua19zaG93X2ZkaW5mbyBhbmQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O05FVEtJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9tcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7YnBmX21wcm9nX2RldGFjaCYjMzQ7LAogICAgJiMzNDtfX2Nncm91cF9icGZfYXR0YWNoJiMzNDssCiAgICAmIzM0O19fY2dyb3VwX2JwZl9yZXBsYWNlJiMzNDssCiAgICAmIzM0O2JwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nJiMzNDssCiAgICAmIzM0O2JwZl9saW5rX3Nob3dfZmRpbmZvJiMzNDssCiAgICAmIzM0O2JwZl9saW5rX2dldF9pbmZvX2J5X2ZkJiMzNDssCiAgICAmIzM0O25ldGtpdF9wcm9nX2F0dGFjaCYjMzQ7LAogICAgJiMzNDt0Y3hfcHJvZ19hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCUEYgbG9naWMgZm9yIGF0dGFjaGluZyBhbmQgZGV0YWNoaW5nIG11bHRpLXByb2dzIChicGZfbXByb2dfYXR0YWNoLCBicGZfbXByb2dfZGV0YWNoKSB0byBlbmZvcmNlIGV4cGVjdGVkIGxpbmsgdHlwZXMsIHNwZWNpZmljYWxseSBmb3IgTkVUS0lUIGFuZCBUQ1guIEl0IGFsc28gdXBkYXRlcyBjZ3JvdXAgQlBGIGF0dGFjaC9yZXBsYWNlIGxvZ2ljIHRvIHByb3Blcmx5IGhhbmRsZSBCUEYgY2dyb3VwIHN0b3JhZ2UsIGFuZCBmaXhlcyBhIGxvY2tpbmcgaXNzdWUgaW4gYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cuIEFkZGl0aW9uYWxseSwgaXQgZml4ZXMgUkNVIGxvY2tpbmcgaW4gYnBmX2xpbmtfc2hvd19mZGluZm8gYW5kIGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE0OjQ2Ljc0MDY4MTk2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3ODA4ODE0MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJORVRLSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfbXByb2dfYXR0YWNoXCIsXG4gICAgXCJicGZfbXByb2dfZGV0YWNoXCIsXG4gICAgXCJfX2Nncm91cF9icGZfYXR0YWNoXCIsXG4gICAgXCJfX2Nncm91cF9icGZfcmVwbGFjZVwiLFxuICAgIFwiYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dcIixcbiAgICBcImJwZl9saW5rX3Nob3dfZmRpbmZvXCIsXG4gICAgXCJicGZfbGlua19nZXRfaW5mb19ieV9mZFwiLFxuICAgIFwibmV0a2l0X3Byb2dfYXR0YWNoXCIsXG4gICAgXCJ0Y3hfcHJvZ19hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiBsb2dpYyBmb3IgYXR0YWNoaW5nIGFuZCBkZXRhY2hpbmcgbXVsdGktcHJvZ3MgKGJwZl9tcHJvZ19hdHRhY2gsIGJwZl9tcHJvZ19kZXRhY2gpIHRvIGVuZm9yY2UgZXhwZWN0ZWQgbGluayB0eXBlcywgc3BlY2lmaWNhbGx5IGZvciBORVRLSVQgYW5kIFRDWC4gSXQgYWxzbyB1cGRhdGVzIGNncm91cCBCUEYgYXR0YWNoL3JlcGxhY2UgbG9naWMgdG8gcHJvcGVybHkgaGFuZGxlIEJQRiBjZ3JvdXAgc3RvcmFnZSwgYW5kIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZy4gQWRkaXRpb25hbGx5LCBpdCBmaXhlcyBSQ1UgbG9ja2luZyBpbiBicGZfbGlua19zaG93X2ZkaW5mbyBhbmQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNDo0Ni43NDA2ODk3MjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5OTQ5MTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIxZjc1ZjM1MTgwNjg1MWJlMmIxOTRjMjA5NDBiY2NiZDgyMmUwZjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMDI6MTQ6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0a2l0LmMgYi9kcml2ZXJzL25ldC9uZXRraXQuY1xcbmluZGV4IGEzOTMxY2Q4MjEzMjFjLi45OWRkZjJiZWZiMjM4MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9uZXRraXQuY1xcbisrKyBiL2RyaXZlcnMvbmV0L25ldGtpdC5jXFxuQEAgLTc2OCw3ICs3NjgsNyBAQCBpbnQgbmV0a2l0X3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuIFxcdH1cXG4gXFx0cmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgXFx1MDAyNmVudHJ5X25ldywgcHJvZywgTlVMTCwgcmVwbGFjZV9wcm9nLFxcbiBcXHRcXHRcXHQgICAgICAgYXR0ci1cXHUwMDNlYXR0YWNoX2ZsYWdzLCBhdHRyLVxcdTAwM2VyZWxhdGl2ZV9mZCxcXG4tXFx0XFx0XFx0ICAgICAgIGF0dHItXFx1MDAzZWV4cGVjdGVkX3JldmlzaW9uKTtcXG4rXFx0XFx0XFx0ICAgICAgIGF0dHItXFx1MDAzZWV4cGVjdGVkX3JldmlzaW9uLCBCUEZfTElOS19UWVBFX05FVEtJVCk7XFxuIFxcdGlmICghcmV0KSB7XFxuIFxcdFxcdGlmIChlbnRyeSAhPSBlbnRyeV9uZXcpIHtcXG4gXFx0XFx0XFx0bmV0a2l0X2VudHJ5X3VwZGF0ZShkZXYsIGVudHJ5X25ldyk7XFxuQEAgLTgwMiw3ICs4MDIsNyBAQCBpbnQgbmV0a2l0X3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcdHJldCA9IGJwZl9tcHJvZ19kZXRhY2goZW50cnksIFxcdTAwMjZlbnRyeV9uZXcsIHByb2csIE5VTEwsIGF0dHItXFx1MDAzZWF0dGFjaF9mbGFncyxcXG4tXFx0XFx0XFx0ICAgICAgIGF0dHItXFx1MDAzZXJlbGF0aXZlX2ZkLCBhdHRyLVxcdTAwM2VleHBlY3RlZF9yZXZpc2lvbik7XFxuK1xcdFxcdFxcdCAgICAgICBhdHRyLVxcdTAwM2VyZWxhdGl2ZV9mZCwgYXR0ci1cXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfTkVUS0lUKTtcXG4gXFx0aWYgKCFyZXQpIHtcXG4gXFx0XFx0aWYgKCFicGZfbXByb2dfdG90YWwoZW50cnlfbmV3KSlcXG4gXFx0XFx0XFx0ZW50cnlfbmV3ID0gTlVMTDtcXG5AQCAtODUwLDcgKzg1MCw3IEBAIHN0YXRpYyBpbnQgbmV0a2l0X2xpbmtfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9saW5rICpsaW5rLCB1MzIgZmxhZ3MsXFxuIFxcdEFTU0VSVF9SVE5MKCk7XFxuIFxcdGVudHJ5ID0gbmV0a2l0X2VudHJ5X2ZldGNoKGRldiwgdHJ1ZSk7XFxuIFxcdHJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksIFxcdTAwMjZlbnRyeV9uZXcsIGxpbmstXFx1MDAzZXByb2csIGxpbmssIE5VTEwsIGZsYWdzLFxcbi1cXHRcXHRcXHQgICAgICAgaWRfb3JfZmQsIHJldmlzaW9uKTtcXG4rXFx0XFx0XFx0ICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbiwgQlBGX0xJTktfVFlQRV9ORVRLSVQpO1xcbiBcXHRpZiAoIXJldCkge1xcbiBcXHRcXHRpZiAoZW50cnkgIT0gZW50cnlfbmV3KSB7XFxuIFxcdFxcdFxcdG5ldGtpdF9lbnRyeV91cGRhdGUoZGV2LCBlbnRyeV9uZXcpO1xcbkBAIC04NzcsNyArODc3LDcgQEAgc3RhdGljIHZvaWQgbmV0a2l0X2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuIFxcdFxcdHJldCA9IC1FTk9FTlQ7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuLVxcdHJldCA9IGJwZl9tcHJvZ19kZXRhY2goZW50cnksIFxcdTAwMjZlbnRyeV9uZXcsIGxpbmstXFx1MDAzZXByb2csIGxpbmssIDAsIDAsIDApO1xcbitcXHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcXHUwMDI2ZW50cnlfbmV3LCBsaW5rLVxcdTAwM2Vwcm9nLCBsaW5rLCAwLCAwLCAwLCBCUEZfTElOS19UWVBFX05FVEtJVCk7XFxuIFxcdGlmICghcmV0KSB7XFxuIFxcdFxcdGlmICghYnBmX21wcm9nX3RvdGFsKGVudHJ5X25ldykpXFxuIFxcdFxcdFxcdGVudHJ5X25ldyA9IE5VTEw7XFxuQEAgLTkxOSw5ICs5MTksOCBAQCBzdGF0aWMgaW50IG5ldGtpdF9saW5rX3VwZGF0ZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbnByb2csXFxuIFxcdFxcdHJldCA9IC1FTk9FTlQ7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuLVxcdHJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksIFxcdTAwMjZlbnRyeV9uZXcsIG5wcm9nLCBsaW5rLCBvcHJvZyxcXG4tXFx0XFx0XFx0ICAgICAgIEJQRl9GX1JFUExBQ0UgfCBCUEZfRl9JRCxcXG4tXFx0XFx0XFx0ICAgICAgIGxpbmstXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaWQsIDApO1xcbitcXHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcXHUwMDI2ZW50cnlfbmV3LCBucHJvZywgbGluaywgb3Byb2csIEJQRl9GX1JFUExBQ0UgfCBCUEZfRl9JRCxcXG4rXFx0XFx0XFx0ICAgICAgIGxpbmstXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaWQsIDAsIEJQRl9MSU5LX1RZUEVfTkVUS0lUKTtcXG4gXFx0aWYgKCFyZXQpIHtcXG4gXFx0XFx0V0FSTl9PTl9PTkNFKGVudHJ5ICE9IGVudHJ5X25ldyk7XFxuIFxcdFxcdG9wcm9nID0geGNoZyhcXHUwMDI2bGluay1cXHUwMDNlcHJvZywgbnByb2cpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl9tcHJvZy5oIGIvaW5jbHVkZS9saW51eC9icGZfbXByb2cuaFxcbmluZGV4IDBiOWY0Y2FlZWIwYTMyLi4xZmJlMWE5MjM5NjhmYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl9tcHJvZy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfbXByb2cuaFxcbkBAIC0zMjEsMTIgKzMyMSwxNCBAQCBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LFxcbiBcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZ19uZXcsIHN0cnVjdCBicGZfbGluayAqbGluayxcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dfb2xkLFxcbi1cXHRcXHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24pO1xcbitcXHRcXHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24sXFxuK1xcdFxcdCAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSk7XFxuIFxcbiBpbnQgYnBmX21wcm9nX2RldGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LFxcbiBcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi1cXHRcXHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24pO1xcbitcXHRcXHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24sXFxuK1xcdFxcdCAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSk7XFxuIFxcbiBpbnQgYnBmX21wcm9nX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyLFxcbiBcXHRcXHQgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnkpO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xcbmluZGV4IDQzNTVjY2I3OGE5YzY3Li41NmQ1MzhmMDU1MjAwNCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXFxuKysrIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xcbkBAIC04MTMsMTAgKzgxMywxMiBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEw7XFxuIFxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbiBcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuK1xcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXFx1MDAzZWxpbmsucHJvZztcXG4gXFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7XFxuIFxcdHN0cnVjdCBobGlzdF9oZWFkICpwcm9ncztcXG4rXFx0dTggb2xkX2ZsYWdzO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKCgoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BTExPV19PVkVSUklERSkgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpKSB8fFxcbkBAIC04ODMsNyArODg1LDEwIEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbiBcXHRwbC1cXHUwMDNlcHJvZyA9IHByb2c7XFxuIFxcdHBsLVxcdTAwM2VsaW5rID0gbGluaztcXG4gXFx0cGwtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuK1xcdGlmIChvbGRfcHJvZylcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVxcdTAwM2VzdG9yYWdlKTtcXG4gXFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xcbitcXHRvbGRfZmxhZ3MgPSBjZ3JwLVxcdTAwM2VicGYuZmxhZ3NbYXR5cGVdO1xcbiBcXHRjZ3JwLVxcdTAwM2VicGYuZmxhZ3NbYXR5cGVdID0gc2F2ZWRfZmxhZ3M7XFxuIFxcbiBcXHRpZiAodHlwZSA9PSBCUEZfTFNNX0NHUk9VUCkge1xcbkBAIC05MTUsMTIgKzkyMCwxNCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gXFx0aWYgKG9sZF9wcm9nKSB7XFxuIFxcdFxcdHBsLVxcdTAwM2Vwcm9nID0gb2xkX3Byb2c7XFxuIFxcdFxcdHBsLVxcdTAwM2VsaW5rID0gTlVMTDtcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcXG4gXFx0fVxcbiBcXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpO1xcbiBcXHRpZiAoIW9sZF9wcm9nKSB7XFxuIFxcdFxcdGhsaXN0X2RlbChcXHUwMDI2cGwtXFx1MDAzZW5vZGUpO1xcbiBcXHRcXHRrZnJlZShwbCk7XFxuIFxcdH1cXG4rXFx0Y2dycC1cXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IG9sZF9mbGFncztcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMTAzMiwxMSArMTAzOSwxNyBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cpXFxuIHtcXG4rXFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbitcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuK1xcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbitcXHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlO1xcbiBcXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XFxuK1xcdGJvb2wgc3RvcmFnZV9jaGFuZ2VkID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XFxuIFxcdHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDtcXG4gXFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xcbiBcXHRib29sIGZvdW5kID0gZmFsc2U7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHRhdHlwZSA9IGJwZl9jZ3JvdXBfYXR5cGVfZmluZChsaW5rLVxcdTAwM2VsaW5rLmF0dGFjaF90eXBlLCBuZXdfcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhdHRhY2hfYnRmX2lkKTtcXG4gXFx0aWYgKGF0eXBlIFxcdTAwM2MgMClcXG5AQCAtMTA1NiwxMCArMTA2OSwzOSBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIFxcdGlmICghZm91bmQpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG4rXFx0aWYgKGJwZl9jZ3JvdXBfc3RvcmFnZXNfYWxsb2Moc3RvcmFnZSwgbmV3X3N0b3JhZ2UsIGxpbmstXFx1MDAzZWxpbmsuYXR0YWNoX3R5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIG5ld19wcm9nLCBjZ3JwKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKSB7XFxuK1xcdFxcdGlmIChzdG9yYWdlW3N0eXBlXSAhPSBwbC1cXHUwMDNlc3RvcmFnZVtzdHlwZV0pIHtcXG4rXFx0XFx0XFx0c3RvcmFnZV9jaGFuZ2VkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0Y2dycC1cXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gKz0gMTtcXG4gXFx0b2xkX3Byb2cgPSB4Y2hnKFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKTtcXG4tXFx0cmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpO1xcbitcXG4rXFx0aWYgKCFzdG9yYWdlX2NoYW5nZWQpIHtcXG4rXFx0XFx0cmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpO1xcbitcXHRcXHRicGZfcHJvZ19wdXQob2xkX3Byb2cpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVxcdTAwM2VzdG9yYWdlKTtcXG4rXFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xcbitcXHRlcnIgPSB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzKGNncnAsIGF0eXBlKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHR4Y2hnKFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLnByb2csIG9sZF9wcm9nKTtcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcXG4rXFx0XFx0Y2dycC1cXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gLT0gMTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4gXFx0YnBmX3Byb2dfcHV0KG9sZF9wcm9nKTtcXG4rXFx0YnBmX2Nncm91cF9zdG9yYWdlc19saW5rKG5ld19zdG9yYWdlLCBjZ3JwLCBsaW5rLVxcdTAwM2VsaW5rLmF0dGFjaF90eXBlKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbXByb2cuYyBiL2tlcm5lbC9icGYvbXByb2cuY1xcbmluZGV4IDEzOTQxNjgwNjJlODU2Li5iNGExYjM1ZmY1NjkzNiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL21wcm9nLmNcXG4rKysgYi9rZXJuZWwvYnBmL21wcm9nLmNcXG5AQCAtNiw3ICs2LDcgQEBcXG4gXFxuIHN0YXRpYyBpbnQgYnBmX21wcm9nX2xpbmsoc3RydWN0IGJwZl90dXBsZSAqdHVwbGUsXFxuIFxcdFxcdFxcdCAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsXFxuLVxcdFxcdFxcdCAgZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXFxuK1xcdFxcdFxcdCAgZW51bSBicGZfbGlua190eXBlIHR5cGUpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9saW5rICpsaW5rID0gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFx0Ym9vbCBpZCA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfSUQ7XFxuQEAgLTE3LDcgKzE3LDcgQEAgc3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcXG4gXFx0XFx0bGluayA9IGJwZl9saW5rX2dldF9mcm9tX2ZkKGlkX29yX2ZkKTtcXG4gXFx0aWYgKElTX0VSUihsaW5rKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIobGluayk7XFxuLVxcdGlmICh0eXBlIFxcdTAwMjZcXHUwMDI2IGxpbmstXFx1MDAzZXByb2ctXFx1MDAzZXR5cGUgIT0gdHlwZSkge1xcbitcXHRpZiAodHlwZSBcXHUwMDI2XFx1MDAyNiBsaW5rLVxcdTAwM2V0eXBlICE9IHR5cGUpIHtcXG4gXFx0XFx0YnBmX2xpbmtfcHV0KGxpbmspO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbkBAIC01MiwyMSArNTIsMjIgQEAgc3RhdGljIGludCBicGZfbXByb2dfcHJvZyhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcXG4gXFxuIHN0YXRpYyBpbnQgYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLFxcbiBcXHRcXHRcXHRcXHQgICAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdCAgICBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSlcXG4rXFx0XFx0XFx0XFx0ICAgIGVudW0gYnBmX2xpbmtfdHlwZSBsdHlwZSxcXG4rXFx0XFx0XFx0XFx0ICAgIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSlcXG4ge1xcbiBcXHRib29sIGxpbmsgPSBmbGFncyBcXHUwMDI2IEJQRl9GX0xJTks7XFxuIFxcdGJvb2wgaWQgPSBmbGFncyBcXHUwMDI2IEJQRl9GX0lEO1xcbiBcXG4gXFx0bWVtc2V0KHR1cGxlLCAwLCBzaXplb2YoKnR1cGxlKSk7XFxuIFxcdGlmIChsaW5rKVxcbi1cXHRcXHRyZXR1cm4gYnBmX21wcm9nX2xpbmsodHVwbGUsIGlkX29yX2ZkLCBmbGFncywgdHlwZSk7XFxuK1xcdFxcdHJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCBsdHlwZSk7XFxuIFxcdC8qIElmIG5vIHJlbGV2YW50IGZsYWcgaXMgc2V0IGFuZCBubyBpZF9vcl9mZCB3YXMgcGFzc2VkLCB0aGVuXFxuIFxcdCAqIHR1cGxlIGxpbmsvcHJvZyBpcyBqdXN0IE5VTExlZC4gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIGJlZm9yZS9cXG4gXFx0ICogYWZ0ZXIgc2VsZWN0cyBmaXJzdC9sYXN0IHBvc2l0aW9uIHdpdGhvdXQgcGFzc2luZyBmZC5cXG4gXFx0ICovXFxuIFxcdGlmICghaWQgXFx1MDAyNlxcdTAwMjYgIWlkX29yX2ZkKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIGJwZl9tcHJvZ19wcm9nKHR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsIHR5cGUpO1xcbitcXHRyZXR1cm4gYnBmX21wcm9nX3Byb2codHVwbGUsIGlkX29yX2ZkLCBmbGFncywgcHR5cGUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBicGZfbXByb2dfdHVwbGVfcHV0KHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlKVxcbkBAIC0yMjYsNyArMjI3LDggQEAgaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxuIFxcdFxcdCAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldyxcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dfbmV3LCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuIFxcdFxcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nX29sZCxcXG4tXFx0XFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uKVxcbitcXHRcXHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24sXFxuK1xcdFxcdCAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3R1cGxlIHJ0dXBsZSwgbnR1cGxlID0ge1xcbiBcXHRcXHQucHJvZyA9IHByb2dfbmV3LFxcbkBAIC0yNDMsNiArMjQ1LDcgQEAgaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXHRyZXQgPSBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmUoXFx1MDAyNnJ0dXBsZSwgaWRfb3JfZmQsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBmbGFncyBcXHUwMDI2IH5CUEZfRl9SRVBMQUNFLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZXhwZWN0ZWRfbGlua190eXBlLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgcHJvZ19uZXctXFx1MDAzZXR5cGUpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbkBAIC0zMjgsNyArMzMxLDggQEAgc3RhdGljIGludCBicGZfbXByb2dfZmV0Y2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxuIGludCBicGZfbXByb2dfZGV0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxcbiBcXHRcXHQgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsXFxuIFxcdFxcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLVxcdFxcdCAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbilcXG4rXFx0XFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uLFxcbitcXHRcXHQgICAgIGVudW0gYnBmX2xpbmtfdHlwZSBleHBlY3RlZF9saW5rX3R5cGUpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl90dXBsZSBydHVwbGUsIGR0dXBsZSA9IHtcXG4gXFx0XFx0LnByb2cgPSBwcm9nLFxcbkBAIC0zNDMsOCArMzQ3LDkgQEAgaW50IGJwZl9tcHJvZ19kZXRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxuIFxcdGlmICghYnBmX21wcm9nX3RvdGFsKGVudHJ5KSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcdHJldCA9IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZShcXHUwMDI2cnR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBwcm9nID8gcHJvZy1cXHUwMDNldHlwZSA6XFxuLVxcdFxcdFxcdFxcdCAgICAgICBCUEZfUFJPR19UWVBFX1VOU1BFQyk7XFxuK1xcdFxcdFxcdFxcdCAgICAgICBleHBlY3RlZF9saW5rX3R5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICAvKiBVc2UgVU5TUEVDIGFzIHdpbGRjYXJkIHdoZW4gcHJvZyBpcyBOVUxMICovXFxuK1xcdFxcdFxcdFxcdCAgICAgICBwcm9nID8gcHJvZy1cXHUwMDNldHlwZSA6IEJQRl9QUk9HX1RZUEVfVU5TUEVDKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0aWYgKGR0dXBsZS5wcm9nKSB7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jIGIva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcXG5pbmRleCAyNWYzMGY5ZWRhZWZkMy4uOWZjNjJkYjE0NDFjNjIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcXG4rKysgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xcbkBAIC0xNzEsMTMgKzE3MSwxNyBAQCBzdGF0aWMgaW50IGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nKHN0cnVjdCBicGZfbGluayAqbGluayxcXG4gXFx0c3RydWN0IG5ldCAqbmV0O1xcbiBcXHRpbnQgaWR4LCByZXQ7XFxuIFxcbi1cXHRpZiAob2xkX3Byb2cgXFx1MDAyNlxcdTAwMjYgb2xkX3Byb2cgIT0gbGluay1cXHUwMDNlcHJvZylcXG4tXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tXFx0aWYgKG5ld19wcm9nLVxcdTAwM2V0eXBlICE9IGxpbmstXFx1MDAzZXByb2ctXFx1MDAzZXR5cGUpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmV0bnNfYnBmX211dGV4KTtcXG4gXFxuK1xcdGlmIChvbGRfcHJvZyBcXHUwMDI2XFx1MDAyNiBvbGRfcHJvZyAhPSBsaW5rLVxcdTAwM2Vwcm9nKSB7XFxuK1xcdFxcdHJldCA9IC1FUEVSTTtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHR9XFxuK1xcdGlmIChuZXdfcHJvZy1cXHUwMDNldHlwZSAhPSBsaW5rLVxcdTAwM2Vwcm9nLVxcdTAwM2V0eXBlKSB7XFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0fVxcbitcXG4gXFx0bmV0ID0gbmV0X2xpbmstXFx1MDAzZW5ldDtcXG4gXFx0aWYgKCFuZXQgfHwgIWNoZWNrX25ldChuZXQpKSB7XFxuIFxcdFxcdC8qIExpbmsgYXV0by1kZXRhY2hlZCBvciBuZXRucyBkeWluZyAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuaW5kZXggNmRiMzA2ZDIzYjQ3OWYuLmNhZDk4NjgwN2Q1MzAzIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcXG5AQCAtMzQ3MSw5ICszNDcxLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpicGZfbGlua190eXBlX3N0cnNbXSA9IHtcXG4gc3RhdGljIHZvaWQgYnBmX2xpbmtfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuLVxcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGxpbmstXFx1MDAzZXByb2c7XFxuK1xcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG4gXFx0ZW51bSBicGZfbGlua190eXBlIHR5cGUgPSBsaW5rLVxcdTAwM2V0eXBlO1xcbiBcXHRjaGFyIHByb2dfdGFnW3NpemVvZihwcm9nLVxcdTAwM2V0YWcpICogMiArIDFdID0geyB9O1xcbitcXHR1MzIgcHJvZ19pZDtcXG4gXFxuIFxcdGlmICh0eXBlIFxcdTAwM2MgQVJSQVlfU0laRShicGZfbGlua190eXBlX3N0cnMpIFxcdTAwMjZcXHUwMDI2IGJwZl9saW5rX3R5cGVfc3Ryc1t0eXBlXSkge1xcbiBcXHRcXHRpZiAobGluay1cXHUwMDNldHlwZSA9PSBCUEZfTElOS19UWVBFX0tQUk9CRV9NVUxUSSlcXG5AQCAtMzQ5MCwxMyArMzQ5MSwyMCBAQCBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxcbiBcXHR9XFxuIFxcdHNlcV9wcmludGYobSwgXFxcImxpbmtfaWQ6XFxcXHQldVxcXFxuXFxcIiwgbGluay1cXHUwMDNlaWQpO1xcbiBcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRwcm9nID0gUkVBRF9PTkNFKGxpbmstXFx1MDAzZXByb2cpO1xcbiBcXHRpZiAocHJvZykge1xcbiBcXHRcXHRiaW4yaGV4KHByb2dfdGFnLCBwcm9nLVxcdTAwM2V0YWcsIHNpemVvZihwcm9nLVxcdTAwM2V0YWcpKTtcXG4rXFx0XFx0cHJvZ19pZCA9IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaWQ7XFxuK1xcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRpZiAocHJvZykge1xcbiBcXHRcXHRzZXFfcHJpbnRmKG0sXFxuIFxcdFxcdFxcdCAgIFxcXCJwcm9nX3RhZzpcXFxcdCVzXFxcXG5cXFwiXFxuIFxcdFxcdFxcdCAgIFxcXCJwcm9nX2lkOlxcXFx0JXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgIHByb2dfdGFnLFxcbi1cXHRcXHRcXHQgICBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWlkKTtcXG4rXFx0XFx0XFx0ICAgcHJvZ19pZCk7XFxuIFxcdH1cXG4gXFx0aWYgKGxpbmstXFx1MDAzZW9wcy1cXHUwMDNlc2hvd19mZGluZm8pXFxuIFxcdFxcdGxpbmstXFx1MDAzZW9wcy1cXHUwMDNlc2hvd19mZGluZm8obGluaywgbSk7XFxuQEAgLTU1MzUsNiArNTU0Myw3IEBAIHN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9saW5rX2luZm8gX191c2VyICp1aW5mbyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2VpbmZvLmluZm8pO1xcbiBcXHRzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBpbmZvO1xcbitcXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuIFxcdHUzMiBpbmZvX2xlbiA9IGF0dHItXFx1MDAzZWluZm8uaW5mb19sZW47XFxuIFxcdGludCBlcnI7XFxuIFxcbkBAIC01NTQ5LDggKzU1NTgsMTIgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFxuIFxcdGluZm8udHlwZSA9IGxpbmstXFx1MDAzZXR5cGU7XFxuIFxcdGluZm8uaWQgPSBsaW5rLVxcdTAwM2VpZDtcXG4tXFx0aWYgKGxpbmstXFx1MDAzZXByb2cpXFxuLVxcdFxcdGluZm8ucHJvZ19pZCA9IGxpbmstXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaWQ7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHByb2cgPSBSRUFEX09OQ0UobGluay1cXHUwMDNlcHJvZyk7XFxuK1xcdGlmIChwcm9nKVxcbitcXHRcXHRpbmZvLnByb2dfaWQgPSBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWlkO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdGlmIChsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZWZpbGxfbGlua19pbmZvKSB7XFxuIFxcdFxcdGVyciA9IGxpbmstXFx1MDAzZW9wcy1cXHUwMDNlZmlsbF9saW5rX2luZm8obGluaywgXFx1MDAyNmluZm8pO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RjeC5jIGIva2VybmVsL2JwZi90Y3guY1xcbmluZGV4IDAyZGIwMTEzYjhlN2M2Li5mMjA4Y2VmMTNhOThlMyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3RjeC5jXFxuKysrIGIva2VybmVsL2JwZi90Y3guY1xcbkBAIC0zOCw3ICszOCw3IEBAIGludCB0Y3hfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4gXFx0fVxcbiBcXHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcXHUwMDI2ZW50cnlfbmV3LCBwcm9nLCBOVUxMLCByZXBsYWNlX3Byb2csXFxuIFxcdFxcdFxcdCAgICAgICBhdHRyLVxcdTAwM2VhdHRhY2hfZmxhZ3MsIGF0dHItXFx1MDAzZXJlbGF0aXZlX2ZkLFxcbi1cXHRcXHRcXHQgICAgICAgYXR0ci1cXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24pO1xcbitcXHRcXHRcXHQgICAgICAgYXR0ci1cXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfVENYKTtcXG4gXFx0aWYgKCFyZXQpIHtcXG4gXFx0XFx0aWYgKGVudHJ5ICE9IGVudHJ5X25ldykge1xcbiBcXHRcXHRcXHR0Y3hfZW50cnlfdXBkYXRlKGRldiwgZW50cnlfbmV3LCBpbmdyZXNzKTtcXG5AQCAtNzYsNyArNzYsNyBAQCBpbnQgdGN4X3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcdHJldCA9IGJwZl9tcHJvZ19kZXRhY2goZW50cnksIFxcdTAwMjZlbnRyeV9uZXcsIHByb2csIE5VTEwsIGF0dHItXFx1MDAzZWF0dGFjaF9mbGFncyxcXG4tXFx0XFx0XFx0ICAgICAgIGF0dHItXFx1MDAzZXJlbGF0aXZlX2ZkLCBhdHRyLVxcdTAwM2VleHBlY3RlZF9yZXZpc2lvbik7XFxuK1xcdFxcdFxcdCAgICAgICBhdHRyLVxcdTAwM2VyZWxhdGl2ZV9mZCwgYXR0ci1cXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfVENYKTtcXG4gXFx0aWYgKCFyZXQpIHtcXG4gXFx0XFx0aWYgKCF0Y3hfZW50cnlfaXNfYWN0aXZlKGVudHJ5X25ldykpXFxuIFxcdFxcdFxcdGVudHJ5X25ldyA9IE5VTEw7XFxuQEAgLTE1Miw3ICsxNTIsNyBAQCBzdGF0aWMgaW50IHRjeF9saW5rX3Byb2dfYXR0YWNoKHN0cnVjdCBicGZfbGluayAqbGluaywgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsXFxuIFxcdGlmICghZW50cnkpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcXHUwMDI2ZW50cnlfbmV3LCBsaW5rLVxcdTAwM2Vwcm9nLCBsaW5rLCBOVUxMLCBmbGFncyxcXG4tXFx0XFx0XFx0ICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbik7XFxuK1xcdFxcdFxcdCAgICAgICBpZF9vcl9mZCwgcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfVENYKTtcXG4gXFx0aWYgKCFyZXQpIHtcXG4gXFx0XFx0aWYgKGVudHJ5ICE9IGVudHJ5X25ldykge1xcbiBcXHRcXHRcXHR0Y3hfZW50cnlfdXBkYXRlKGRldiwgZW50cnlfbmV3LCBpbmdyZXNzKTtcXG5AQCAtMTgzLDcgKzE4Myw3IEBAIHN0YXRpYyB2b2lkIHRjeF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbiBcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbi1cXHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcXHUwMDI2ZW50cnlfbmV3LCBsaW5rLVxcdTAwM2Vwcm9nLCBsaW5rLCAwLCAwLCAwKTtcXG4rXFx0cmV0ID0gYnBmX21wcm9nX2RldGFjaChlbnRyeSwgXFx1MDAyNmVudHJ5X25ldywgbGluay1cXHUwMDNlcHJvZywgbGluaywgMCwgMCwgMCwgQlBGX0xJTktfVFlQRV9UQ1gpO1xcbiBcXHRpZiAoIXJldCkge1xcbiBcXHRcXHRpZiAoIXRjeF9lbnRyeV9pc19hY3RpdmUoZW50cnlfbmV3KSlcXG4gXFx0XFx0XFx0ZW50cnlfbmV3ID0gTlVMTDtcXG5AQCAtMjI5LDkgKzIyOSw4IEBAIHN0YXRpYyBpbnQgdGN4X2xpbmtfdXBkYXRlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpucHJvZyxcXG4gXFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4tXFx0cmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgXFx1MDAyNmVudHJ5X25ldywgbnByb2csIGxpbmssIG9wcm9nLFxcbi1cXHRcXHRcXHQgICAgICAgQlBGX0ZfUkVQTEFDRSB8IEJQRl9GX0lELFxcbi1cXHRcXHRcXHQgICAgICAgbGluay1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VpZCwgMCk7XFxuK1xcdHJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksIFxcdTAwMjZlbnRyeV9uZXcsIG5wcm9nLCBsaW5rLCBvcHJvZywgQlBGX0ZfUkVQTEFDRSB8IEJQRl9GX0lELFxcbitcXHRcXHRcXHQgICAgICAgbGluay1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VpZCwgMCwgQlBGX0xJTktfVFlQRV9UQ1gpO1xcbiBcXHRpZiAoIXJldCkge1xcbiBcXHRcXHRXQVJOX09OX09OQ0UoZW50cnkgIT0gZW50cnlfbmV3KTtcXG4gXFx0XFx0b3Byb2cgPSB4Y2hnKFxcdTAwMjZsaW5rLVxcdTAwM2Vwcm9nLCBucHJvZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE0OjQ3LjQ0MTMwNTcyM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3MTA4MTgwMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJORVRLSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfbXByb2dfYXR0YWNoXCIsXG4gICAgXCJicGZfbXByb2dfZGV0YWNoXCIsXG4gICAgXCJfX2Nncm91cF9icGZfYXR0YWNoXCIsXG4gICAgXCJfX2Nncm91cF9icGZfcmVwbGFjZVwiLFxuICAgIFwiYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dcIixcbiAgICBcImJwZl9saW5rX3Nob3dfZmRpbmZvXCIsXG4gICAgXCJicGZfbGlua19nZXRfaW5mb19ieV9mZFwiLFxuICAgIFwibmV0a2l0X3Byb2dfYXR0YWNoXCIsXG4gICAgXCJ0Y3hfcHJvZ19hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiBsb2dpYyBmb3IgYXR0YWNoaW5nIGFuZCBkZXRhY2hpbmcgbXVsdGktcHJvZ3MgKGJwZl9tcHJvZ19hdHRhY2gsIGJwZl9tcHJvZ19kZXRhY2gpIHRvIGVuZm9yY2UgZXhwZWN0ZWQgbGluayB0eXBlcywgc3BlY2lmaWNhbGx5IGZvciBORVRLSVQgYW5kIFRDWC4gSXQgYWxzbyB1cGRhdGVzIGNncm91cCBCUEYgYXR0YWNoL3JlcGxhY2UgbG9naWMgdG8gcHJvcGVybHkgaGFuZGxlIEJQRiBjZ3JvdXAgc3RvcmFnZSwgYW5kIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZy4gQWRkaXRpb25hbGx5LCBpdCBmaXhlcyBSQ1UgbG9ja2luZyBpbiBicGZfbGlua19zaG93X2ZkaW5mbyBhbmQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIxZjc1ZjM1MTgwNjg1MWJlMmIxOTRjMjA5NDBiY2NiZDgyMmUwZjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAwMjoxNDo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGtpdC5jIGIvZHJpdmVycy9uZXQvbmV0a2l0LmNcbmluZGV4IGEzOTMxY2Q4MjEzMjFjLi45OWRkZjJiZWZiMjM4MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGtpdC5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRraXQuY1xuQEAgLTc2OCw3ICs3NjgsNyBAQCBpbnQgbmV0a2l0X3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHR9XG4gXHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIHByb2csIE5VTEwsIHJlcGxhY2VfcHJvZyxcbiBcdFx0XHQgICAgICAgYXR0ci1cdTAwM2VhdHRhY2hfZmxhZ3MsIGF0dHItXHUwMDNlcmVsYXRpdmVfZmQsXG4tXHRcdFx0ICAgICAgIGF0dHItXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24pO1xuK1x0XHRcdCAgICAgICBhdHRyLVx1MDAzZWV4cGVjdGVkX3JldmlzaW9uLCBCUEZfTElOS19UWVBFX05FVEtJVCk7XG4gXHRpZiAoIXJldCkge1xuIFx0XHRpZiAoZW50cnkgIT0gZW50cnlfbmV3KSB7XG4gXHRcdFx0bmV0a2l0X2VudHJ5X3VwZGF0ZShkZXYsIGVudHJ5X25ldyk7XG5AQCAtODAyLDcgKzgwMiw3IEBAIGludCBuZXRraXRfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIHByb2csIE5VTEwsIGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzLFxuLVx0XHRcdCAgICAgICBhdHRyLVx1MDAzZXJlbGF0aXZlX2ZkLCBhdHRyLVx1MDAzZWV4cGVjdGVkX3JldmlzaW9uKTtcbitcdFx0XHQgICAgICAgYXR0ci1cdTAwM2VyZWxhdGl2ZV9mZCwgYXR0ci1cdTAwM2VleHBlY3RlZF9yZXZpc2lvbiwgQlBGX0xJTktfVFlQRV9ORVRLSVQpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0aWYgKCFicGZfbXByb2dfdG90YWwoZW50cnlfbmV3KSlcbiBcdFx0XHRlbnRyeV9uZXcgPSBOVUxMO1xuQEAgLTg1MCw3ICs4NTAsNyBAQCBzdGF0aWMgaW50IG5ldGtpdF9saW5rX3Byb2dfYXR0YWNoKHN0cnVjdCBicGZfbGluayAqbGluaywgdTMyIGZsYWdzLFxuIFx0QVNTRVJUX1JUTkwoKTtcbiBcdGVudHJ5ID0gbmV0a2l0X2VudHJ5X2ZldGNoKGRldiwgdHJ1ZSk7XG4gXHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIGxpbmstXHUwMDNlcHJvZywgbGluaywgTlVMTCwgZmxhZ3MsXG4tXHRcdFx0ICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbik7XG4rXHRcdFx0ICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbiwgQlBGX0xJTktfVFlQRV9ORVRLSVQpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0aWYgKGVudHJ5ICE9IGVudHJ5X25ldykge1xuIFx0XHRcdG5ldGtpdF9lbnRyeV91cGRhdGUoZGV2LCBlbnRyeV9uZXcpO1xuQEAgLTg3Nyw3ICs4NzcsNyBAQCBzdGF0aWMgdm9pZCBuZXRraXRfbGlua19yZWxlYXNlKHN0cnVjdCBicGZfbGluayAqbGluaylcbiBcdFx0cmV0ID0gLUVOT0VOVDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4tXHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIGxpbmstXHUwMDNlcHJvZywgbGluaywgMCwgMCwgMCk7XG4rXHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIGxpbmstXHUwMDNlcHJvZywgbGluaywgMCwgMCwgMCwgQlBGX0xJTktfVFlQRV9ORVRLSVQpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0aWYgKCFicGZfbXByb2dfdG90YWwoZW50cnlfbmV3KSlcbiBcdFx0XHRlbnRyeV9uZXcgPSBOVUxMO1xuQEAgLTkxOSw5ICs5MTksOCBAQCBzdGF0aWMgaW50IG5ldGtpdF9saW5rX3VwZGF0ZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbnByb2csXG4gXHRcdHJldCA9IC1FTk9FTlQ7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuLVx0cmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgXHUwMDI2ZW50cnlfbmV3LCBucHJvZywgbGluaywgb3Byb2csXG4tXHRcdFx0ICAgICAgIEJQRl9GX1JFUExBQ0UgfCBCUEZfRl9JRCxcbi1cdFx0XHQgICAgICAgbGluay1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZCwgMCk7XG4rXHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIG5wcm9nLCBsaW5rLCBvcHJvZywgQlBGX0ZfUkVQTEFDRSB8IEJQRl9GX0lELFxuK1x0XHRcdCAgICAgICBsaW5rLVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWlkLCAwLCBCUEZfTElOS19UWVBFX05FVEtJVCk7XG4gXHRpZiAoIXJldCkge1xuIFx0XHRXQVJOX09OX09OQ0UoZW50cnkgIT0gZW50cnlfbmV3KTtcbiBcdFx0b3Byb2cgPSB4Y2hnKFx1MDAyNmxpbmstXHUwMDNlcHJvZywgbnByb2cpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX21wcm9nLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9tcHJvZy5oXG5pbmRleCAwYjlmNGNhZWViMGEzMi4uMWZiZTFhOTIzOTY4ZmMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl9tcHJvZy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl9tcHJvZy5oXG5AQCAtMzIxLDEyICszMjEsMTQgQEAgaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHRcdCAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldyxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dfbmV3LCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4gXHRcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nX29sZCxcbi1cdFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uKTtcbitcdFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uLFxuK1x0XHQgICAgIGVudW0gYnBmX2xpbmtfdHlwZSBleHBlY3RlZF9saW5rX3R5cGUpO1xuIFxuIGludCBicGZfbXByb2dfZGV0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxuIFx0XHQgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsXG4gXHRcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tXHRcdCAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbik7XG4rXHRcdCAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbixcbitcdFx0ICAgICBlbnVtIGJwZl9saW5rX3R5cGUgZXhwZWN0ZWRfbGlua190eXBlKTtcbiBcbiBpbnQgYnBmX21wcm9nX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyLFxuIFx0XHQgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnkpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5pbmRleCA0MzU1Y2NiNzhhOWM2Ny4uNTZkNTM4ZjA1NTIwMDQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtODEzLDEwICs4MTMsMTIgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDtcbiBcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuIFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuK1x0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuIFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXHUwMDNlbGluay5wcm9nO1xuIFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xuK1x0dTggb2xkX2ZsYWdzO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICgoKGZsYWdzIFx1MDAyNiBCUEZfRl9BTExPV19PVkVSUklERSkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpKSB8fFxuQEAgLTg4Myw3ICs4ODUsMTAgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRwbC1cdTAwM2Vwcm9nID0gcHJvZztcbiBcdHBsLVx1MDAzZWxpbmsgPSBsaW5rO1xuIFx0cGwtXHUwMDNlZmxhZ3MgPSBmbGFncztcbitcdGlmIChvbGRfcHJvZylcbitcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVx1MDAzZXN0b3JhZ2UpO1xuIFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgc3RvcmFnZSk7XG4rXHRvbGRfZmxhZ3MgPSBjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV07XG4gXHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBzYXZlZF9mbGFncztcbiBcbiBcdGlmICh0eXBlID09IEJQRl9MU01fQ0dST1VQKSB7XG5AQCAtOTE1LDEyICs5MjAsMTQgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRpZiAob2xkX3Byb2cpIHtcbiBcdFx0cGwtXHUwMDNlcHJvZyA9IG9sZF9wcm9nO1xuIFx0XHRwbC1cdTAwM2VsaW5rID0gTlVMTDtcbitcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgb2xkX3N0b3JhZ2UpO1xuIFx0fVxuIFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcbiBcdGlmICghb2xkX3Byb2cpIHtcbiBcdFx0aGxpc3RfZGVsKFx1MDAyNnBsLVx1MDAzZW5vZGUpO1xuIFx0XHRrZnJlZShwbCk7XG4gXHR9XG4rXHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xMDMyLDExICsxMDM5LDE3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbiBcdFx0XHRcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXG4gXHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nKVxuIHtcbitcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbitcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbitcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuK1x0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcbiBcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTtcbitcdGJvb2wgc3RvcmFnZV9jaGFuZ2VkID0gZmFsc2U7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xuIFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuK1x0aW50IGVycjtcbiBcbiBcdGF0eXBlID0gYnBmX2Nncm91cF9hdHlwZV9maW5kKGxpbmstXHUwMDNlbGluay5hdHRhY2hfdHlwZSwgbmV3X3Byb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGZfaWQpO1xuIFx0aWYgKGF0eXBlIFx1MDAzYyAwKVxuQEAgLTEwNTYsMTAgKzEwNjksMzkgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0aWYgKCFmb3VuZClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4rXHRpZiAoYnBmX2Nncm91cF9zdG9yYWdlc19hbGxvYyhzdG9yYWdlLCBuZXdfc3RvcmFnZSwgbGluay1cdTAwM2VsaW5rLmF0dGFjaF90eXBlLFxuK1x0XHRcdFx0ICAgICAgbmV3X3Byb2csIGNncnApKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHtcbitcdFx0aWYgKHN0b3JhZ2Vbc3R5cGVdICE9IHBsLVx1MDAzZXN0b3JhZ2Vbc3R5cGVdKSB7XG4rXHRcdFx0c3RvcmFnZV9jaGFuZ2VkID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1xuIFx0Y2dycC1cdTAwM2VicGYucmV2aXNpb25zW2F0eXBlXSArPSAxO1xuIFx0b2xkX3Byb2cgPSB4Y2hnKFx1MDAyNmxpbmstXHUwMDNlbGluay5wcm9nLCBuZXdfcHJvZyk7XG4tXHRyZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKGNncnAsIGF0eXBlLCBwbCk7XG4rXG4rXHRpZiAoIXN0b3JhZ2VfY2hhbmdlZCkge1xuK1x0XHRyZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKGNncnAsIGF0eXBlLCBwbCk7XG4rXHRcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVx1MDAzZXN0b3JhZ2UpO1xuK1x0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgc3RvcmFnZSk7XG4rXHRlcnIgPSB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzKGNncnAsIGF0eXBlKTtcbitcdGlmIChlcnIpIHtcbitcdFx0eGNoZyhcdTAwMjZsaW5rLVx1MDAzZWxpbmsucHJvZywgb2xkX3Byb2cpO1xuK1x0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC1cdTAwM2VzdG9yYWdlLCBvbGRfc3RvcmFnZSk7XG4rXHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XG4rXHRcdGNncnAtXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gLT0gMTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbiBcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XG4rXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2xpbmsobmV3X3N0b3JhZ2UsIGNncnAsIGxpbmstXHUwMDNlbGluay5hdHRhY2hfdHlwZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tcHJvZy5jIGIva2VybmVsL2JwZi9tcHJvZy5jXG5pbmRleCAxMzk0MTY4MDYyZTg1Ni4uYjRhMWIzNWZmNTY5MzYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21wcm9nLmNcbisrKyBiL2tlcm5lbC9icGYvbXByb2cuY1xuQEAgLTYsNyArNiw3IEBAXG4gXG4gc3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcbiBcdFx0XHQgIHUzMiBpZF9vcl9mZCwgdTMyIGZsYWdzLFxuLVx0XHRcdCAgZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXG4rXHRcdFx0ICBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSlcbiB7XG4gXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0Ym9vbCBpZCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9JRDtcbkBAIC0xNyw3ICsxNyw3IEBAIHN0YXRpYyBpbnQgYnBmX21wcm9nX2xpbmsoc3RydWN0IGJwZl90dXBsZSAqdHVwbGUsXG4gXHRcdGxpbmsgPSBicGZfbGlua19nZXRfZnJvbV9mZChpZF9vcl9mZCk7XG4gXHRpZiAoSVNfRVJSKGxpbmspKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihsaW5rKTtcbi1cdGlmICh0eXBlIFx1MDAyNlx1MDAyNiBsaW5rLVx1MDAzZXByb2ctXHUwMDNldHlwZSAhPSB0eXBlKSB7XG4rXHRpZiAodHlwZSBcdTAwMjZcdTAwMjYgbGluay1cdTAwM2V0eXBlICE9IHR5cGUpIHtcbiBcdFx0YnBmX2xpbmtfcHV0KGxpbmspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbkBAIC01MiwyMSArNTIsMjIgQEAgc3RhdGljIGludCBicGZfbXByb2dfcHJvZyhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcbiBcbiBzdGF0aWMgaW50IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZShzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcbiBcdFx0XHRcdCAgICB1MzIgaWRfb3JfZmQsIHUzMiBmbGFncyxcbi1cdFx0XHRcdCAgICBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSlcbitcdFx0XHRcdCAgICBlbnVtIGJwZl9saW5rX3R5cGUgbHR5cGUsXG4rXHRcdFx0XHQgICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKVxuIHtcbiBcdGJvb2wgbGluayA9IGZsYWdzIFx1MDAyNiBCUEZfRl9MSU5LO1xuIFx0Ym9vbCBpZCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9JRDtcbiBcbiBcdG1lbXNldCh0dXBsZSwgMCwgc2l6ZW9mKCp0dXBsZSkpO1xuIFx0aWYgKGxpbmspXG4tXHRcdHJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCB0eXBlKTtcbitcdFx0cmV0dXJuIGJwZl9tcHJvZ19saW5rKHR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsIGx0eXBlKTtcbiBcdC8qIElmIG5vIHJlbGV2YW50IGZsYWcgaXMgc2V0IGFuZCBubyBpZF9vcl9mZCB3YXMgcGFzc2VkLCB0aGVuXG4gXHQgKiB0dXBsZSBsaW5rL3Byb2cgaXMganVzdCBOVUxMZWQuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBiZWZvcmUvXG4gXHQgKiBhZnRlciBzZWxlY3RzIGZpcnN0L2xhc3QgcG9zaXRpb24gd2l0aG91dCBwYXNzaW5nIGZkLlxuIFx0ICovXG4gXHRpZiAoIWlkIFx1MDAyNlx1MDAyNiAhaWRfb3JfZmQpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGJwZl9tcHJvZ19wcm9nKHR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsIHR5cGUpO1xuK1x0cmV0dXJuIGJwZl9tcHJvZ19wcm9nKHR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsIHB0eXBlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYnBmX21wcm9nX3R1cGxlX3B1dChzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSlcbkBAIC0yMjYsNyArMjI3LDggQEAgaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHRcdCAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldyxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dfbmV3LCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4gXHRcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nX29sZCxcbi1cdFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uKVxuK1x0XHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24sXG4rXHRcdCAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSlcbiB7XG4gXHRzdHJ1Y3QgYnBmX3R1cGxlIHJ0dXBsZSwgbnR1cGxlID0ge1xuIFx0XHQucHJvZyA9IHByb2dfbmV3LFxuQEAgLTI0Myw2ICsyNDUsNyBAQCBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRyZXQgPSBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmUoXHUwMDI2cnR1cGxlLCBpZF9vcl9mZCxcbiBcdFx0XHRcdCAgICAgICBmbGFncyBcdTAwMjYgfkJQRl9GX1JFUExBQ0UsXG4rXHRcdFx0XHQgICAgICAgZXhwZWN0ZWRfbGlua190eXBlLFxuIFx0XHRcdFx0ICAgICAgIHByb2dfbmV3LVx1MDAzZXR5cGUpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbkBAIC0zMjgsNyArMzMxLDggQEAgc3RhdGljIGludCBicGZfbXByb2dfZmV0Y2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gaW50IGJwZl9tcHJvZ19kZXRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHRcdCAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldyxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfbGluayAqbGluayxcbi1cdFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uKVxuK1x0XHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24sXG4rXHRcdCAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSlcbiB7XG4gXHRzdHJ1Y3QgYnBmX3R1cGxlIHJ0dXBsZSwgZHR1cGxlID0ge1xuIFx0XHQucHJvZyA9IHByb2csXG5AQCAtMzQzLDggKzM0Nyw5IEBAIGludCBicGZfbXByb2dfZGV0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxuIFx0aWYgKCFicGZfbXByb2dfdG90YWwoZW50cnkpKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcdHJldCA9IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZShcdTAwMjZydHVwbGUsIGlkX29yX2ZkLCBmbGFncyxcbi1cdFx0XHRcdCAgICAgICBwcm9nID8gcHJvZy1cdTAwM2V0eXBlIDpcbi1cdFx0XHRcdCAgICAgICBCUEZfUFJPR19UWVBFX1VOU1BFQyk7XG4rXHRcdFx0XHQgICAgICAgZXhwZWN0ZWRfbGlua190eXBlLFxuK1x0XHRcdFx0ICAgICAgIC8qIFVzZSBVTlNQRUMgYXMgd2lsZGNhcmQgd2hlbiBwcm9nIGlzIE5VTEwgKi9cbitcdFx0XHRcdCAgICAgICBwcm9nID8gcHJvZy1cdTAwM2V0eXBlIDogQlBGX1BST0dfVFlQRV9VTlNQRUMpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcdGlmIChkdHVwbGUucHJvZykge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jIGIva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcbmluZGV4IDI1ZjMwZjllZGFlZmQzLi45ZmM2MmRiMTQ0MWM2MiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXG4rKysgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xuQEAgLTE3MSwxMyArMTcxLDE3IEBAIHN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0aW50IGlkeCwgcmV0O1xuIFxuLVx0aWYgKG9sZF9wcm9nIFx1MDAyNlx1MDAyNiBvbGRfcHJvZyAhPSBsaW5rLVx1MDAzZXByb2cpXG4tXHRcdHJldHVybiAtRVBFUk07XG4tXHRpZiAobmV3X3Byb2ctXHUwMDNldHlwZSAhPSBsaW5rLVx1MDAzZXByb2ctXHUwMDNldHlwZSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4gXHRtdXRleF9sb2NrKFx1MDAyNm5ldG5zX2JwZl9tdXRleCk7XG4gXG4rXHRpZiAob2xkX3Byb2cgXHUwMDI2XHUwMDI2IG9sZF9wcm9nICE9IGxpbmstXHUwMDNlcHJvZykge1xuK1x0XHRyZXQgPSAtRVBFUk07XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcdGlmIChuZXdfcHJvZy1cdTAwM2V0eXBlICE9IGxpbmstXHUwMDNlcHJvZy1cdTAwM2V0eXBlKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbiBcdG5ldCA9IG5ldF9saW5rLVx1MDAzZW5ldDtcbiBcdGlmICghbmV0IHx8ICFjaGVja19uZXQobmV0KSkge1xuIFx0XHQvKiBMaW5rIGF1dG8tZGV0YWNoZWQgb3IgbmV0bnMgZHlpbmcgKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ZGIzMDZkMjNiNDc5Zi4uY2FkOTg2ODA3ZDUzMDMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC0zNDcxLDkgKzM0NzEsMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmJwZl9saW5rX3R5cGVfc3Ryc1tdID0ge1xuIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4tXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBsaW5rLVx1MDAzZXByb2c7XG4rXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4gXHRlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSA9IGxpbmstXHUwMDNldHlwZTtcbiBcdGNoYXIgcHJvZ190YWdbc2l6ZW9mKHByb2ctXHUwMDNldGFnKSAqIDIgKyAxXSA9IHsgfTtcbitcdHUzMiBwcm9nX2lkO1xuIFxuIFx0aWYgKHR5cGUgXHUwMDNjIEFSUkFZX1NJWkUoYnBmX2xpbmtfdHlwZV9zdHJzKSBcdTAwMjZcdTAwMjYgYnBmX2xpbmtfdHlwZV9zdHJzW3R5cGVdKSB7XG4gXHRcdGlmIChsaW5rLVx1MDAzZXR5cGUgPT0gQlBGX0xJTktfVFlQRV9LUFJPQkVfTVVMVEkpXG5AQCAtMzQ5MCwxMyArMzQ5MSwyMCBAQCBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxuIFx0fVxuIFx0c2VxX3ByaW50ZihtLCBcImxpbmtfaWQ6XFx0JXVcXG5cIiwgbGluay1cdTAwM2VpZCk7XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRwcm9nID0gUkVBRF9PTkNFKGxpbmstXHUwMDNlcHJvZyk7XG4gXHRpZiAocHJvZykge1xuIFx0XHRiaW4yaGV4KHByb2dfdGFnLCBwcm9nLVx1MDAzZXRhZywgc2l6ZW9mKHByb2ctXHUwMDNldGFnKSk7XG4rXHRcdHByb2dfaWQgPSBwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZDtcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0aWYgKHByb2cpIHtcbiBcdFx0c2VxX3ByaW50ZihtLFxuIFx0XHRcdCAgIFwicHJvZ190YWc6XFx0JXNcXG5cIlxuIFx0XHRcdCAgIFwicHJvZ19pZDpcXHQldVxcblwiLFxuIFx0XHRcdCAgIHByb2dfdGFnLFxuLVx0XHRcdCAgIHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkKTtcbitcdFx0XHQgICBwcm9nX2lkKTtcbiBcdH1cbiBcdGlmIChsaW5rLVx1MDAzZW9wcy1cdTAwM2VzaG93X2ZkaW5mbylcbiBcdFx0bGluay1cdTAwM2VvcHMtXHUwMDNlc2hvd19mZGluZm8obGluaywgbSk7XG5AQCAtNTUzNSw2ICs1NTQzLDcgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiB7XG4gXHRzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBfX3VzZXIgKnVpbmZvID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlaW5mby5pbmZvKTtcbiBcdHN0cnVjdCBicGZfbGlua19pbmZvIGluZm87XG4rXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4gXHR1MzIgaW5mb19sZW4gPSBhdHRyLVx1MDAzZWluZm8uaW5mb19sZW47XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTU1NDksOCArNTU1OCwxMiBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuIFxuIFx0aW5mby50eXBlID0gbGluay1cdTAwM2V0eXBlO1xuIFx0aW5mby5pZCA9IGxpbmstXHUwMDNlaWQ7XG4tXHRpZiAobGluay1cdTAwM2Vwcm9nKVxuLVx0XHRpbmZvLnByb2dfaWQgPSBsaW5rLVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWlkO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0cHJvZyA9IFJFQURfT05DRShsaW5rLVx1MDAzZXByb2cpO1xuK1x0aWYgKHByb2cpXG4rXHRcdGluZm8ucHJvZ19pZCA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNlZmlsbF9saW5rX2luZm8pIHtcbiBcdFx0ZXJyID0gbGluay1cdTAwM2VvcHMtXHUwMDNlZmlsbF9saW5rX2luZm8obGluaywgXHUwMDI2aW5mbyk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90Y3guYyBiL2tlcm5lbC9icGYvdGN4LmNcbmluZGV4IDAyZGIwMTEzYjhlN2M2Li5mMjA4Y2VmMTNhOThlMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdGN4LmNcbisrKyBiL2tlcm5lbC9icGYvdGN4LmNcbkBAIC0zOCw3ICszOCw3IEBAIGludCB0Y3hfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdH1cbiBcdHJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksIFx1MDAyNmVudHJ5X25ldywgcHJvZywgTlVMTCwgcmVwbGFjZV9wcm9nLFxuIFx0XHRcdCAgICAgICBhdHRyLVx1MDAzZWF0dGFjaF9mbGFncywgYXR0ci1cdTAwM2VyZWxhdGl2ZV9mZCxcbi1cdFx0XHQgICAgICAgYXR0ci1cdTAwM2VleHBlY3RlZF9yZXZpc2lvbik7XG4rXHRcdFx0ICAgICAgIGF0dHItXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfVENYKTtcbiBcdGlmICghcmV0KSB7XG4gXHRcdGlmIChlbnRyeSAhPSBlbnRyeV9uZXcpIHtcbiBcdFx0XHR0Y3hfZW50cnlfdXBkYXRlKGRldiwgZW50cnlfbmV3LCBpbmdyZXNzKTtcbkBAIC03Niw3ICs3Niw3IEBAIGludCB0Y3hfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIHByb2csIE5VTEwsIGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzLFxuLVx0XHRcdCAgICAgICBhdHRyLVx1MDAzZXJlbGF0aXZlX2ZkLCBhdHRyLVx1MDAzZWV4cGVjdGVkX3JldmlzaW9uKTtcbitcdFx0XHQgICAgICAgYXR0ci1cdTAwM2VyZWxhdGl2ZV9mZCwgYXR0ci1cdTAwM2VleHBlY3RlZF9yZXZpc2lvbiwgQlBGX0xJTktfVFlQRV9UQ1gpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0aWYgKCF0Y3hfZW50cnlfaXNfYWN0aXZlKGVudHJ5X25ldykpXG4gXHRcdFx0ZW50cnlfbmV3ID0gTlVMTDtcbkBAIC0xNTIsNyArMTUyLDcgQEAgc3RhdGljIGludCB0Y3hfbGlua19wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLFxuIFx0aWYgKCFlbnRyeSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIGxpbmstXHUwMDNlcHJvZywgbGluaywgTlVMTCwgZmxhZ3MsXG4tXHRcdFx0ICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbik7XG4rXHRcdFx0ICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbiwgQlBGX0xJTktfVFlQRV9UQ1gpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0aWYgKGVudHJ5ICE9IGVudHJ5X25ldykge1xuIFx0XHRcdHRjeF9lbnRyeV91cGRhdGUoZGV2LCBlbnRyeV9uZXcsIGluZ3Jlc3MpO1xuQEAgLTE4Myw3ICsxODMsNyBAQCBzdGF0aWMgdm9pZCB0Y3hfbGlua19yZWxlYXNlKHN0cnVjdCBicGZfbGluayAqbGluaylcbiBcdFx0cmV0ID0gLUVOT0VOVDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4tXHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIGxpbmstXHUwMDNlcHJvZywgbGluaywgMCwgMCwgMCk7XG4rXHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIGxpbmstXHUwMDNlcHJvZywgbGluaywgMCwgMCwgMCwgQlBGX0xJTktfVFlQRV9UQ1gpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0aWYgKCF0Y3hfZW50cnlfaXNfYWN0aXZlKGVudHJ5X25ldykpXG4gXHRcdFx0ZW50cnlfbmV3ID0gTlVMTDtcbkBAIC0yMjksOSArMjI5LDggQEAgc3RhdGljIGludCB0Y3hfbGlua191cGRhdGUoc3RydWN0IGJwZl9saW5rICpsaW5rLCBzdHJ1Y3QgYnBmX3Byb2cgKm5wcm9nLFxuIFx0XHRyZXQgPSAtRU5PRU5UO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbi1cdHJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksIFx1MDAyNmVudHJ5X25ldywgbnByb2csIGxpbmssIG9wcm9nLFxuLVx0XHRcdCAgICAgICBCUEZfRl9SRVBMQUNFIHwgQlBGX0ZfSUQsXG4tXHRcdFx0ICAgICAgIGxpbmstXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlaWQsIDApO1xuK1x0cmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgXHUwMDI2ZW50cnlfbmV3LCBucHJvZywgbGluaywgb3Byb2csIEJQRl9GX1JFUExBQ0UgfCBCUEZfRl9JRCxcbitcdFx0XHQgICAgICAgbGluay1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZCwgMCwgQlBGX0xJTktfVFlQRV9UQ1gpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0V0FSTl9PTl9PTkNFKGVudHJ5ICE9IGVudHJ5X25ldyk7XG4gXHRcdG9wcm9nID0geGNoZyhcdTAwMjZsaW5rLVx1MDAzZXByb2csIG5wcm9nKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE0OjQ3LjQ0MTMwODE5MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5MjM3MzYwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJlY2VudCBCUEYgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBzZXZlcmFsIGtleSBCUEYgZnVuY3Rpb25zOiBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYGNncm91cF9icGZfYXR0YWNoYCwgYGNncm91cF9icGZfcmVwbGFjZWAsIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AsIGBicGZfbGlua19zaG93X2ZkaW5mb2AsIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgLiBUaGVzZSBhcmUgYWxsIGNvcmUgY29tcG9uZW50cywgc28gd2Ugc2hvdWxkIHBheSBjbG9zZSBhdHRlbnRpb24uIFRoZSBwcm9wb3NlZCBjaGFuZ2VzIHNlZW0gdG8gaW52b2x2ZSBtb2RpZmljYXRpb25zIHRvIGBicGZfbXByb2dfYXR0YWNoYCBhbmQgYGJwZl9tcHJvZ19kZXRhY2hgIHRvIGluY2x1ZGUgYW4gYGV4cGVjdGVkX2xpbmtfdHlwZWAgYXJndW1lbnQuIEFkZGl0aW9uYWxseSwgdGhlIHNlcmllcyBhaW1zIHRvIHJlZmluZSBob3cgYGJwZl9jZ3JvdXBfc3RvcmFnZWAgaXMgbWFuYWdlZCB3aXRoaW4gYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGFuZCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGR1cmluZyBhdHRhY2htZW50IGFuZCByZXBsYWNlbWVudCBvcGVyYXRpb25zLiBUaGVyZSdzIGFsc28gYSBtb2RpZmljYXRpb24gdG8gYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCB3aGljaCBsb2NrcyB0aGUgYG5ldG5zX2JwZl9tdXRleGAgZWFybGllci4gQW5kIGZpbmFsbHksIHNvbWUgY2hhbmdlcyB0byBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIHRvIHVzZSBgUkVBRF9PTkNFKGxpbmstXHUwMDNlcHJvZylgIGFuZCBgcmN1X3JlYWRfbG9jaygpYCBzZWVtIHdvcnRoIHRha2luZyBhIGxvb2sgYXQuXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGFyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBsb2dpYy4gVGhlIHBvdGVudGlhbCBmb3IgcmVncmVzc2lvbnMgb3Igc3VidGxlIHNpZGUgZWZmZWN0cyBpcyB0aGVyZSwgc28gd2Ugc2hvdWxkIGFkZCB0aGlzIHRvIHRoZSBsaXN0IG9mIFwid29ydGggZnV6emluZ1wiIGNhbmRpZGF0ZXMuXG5cbk5vdywgbGV0J3MgaXNvbGF0ZSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb246IGBicGZfbXByb2dfYXR0YWNoYCwgYGJwZl9tcHJvZ19kZXRhY2hgLCBgX19jZ3JvdXBfYnBmX2F0dGFjaGAsIGBfX2Nncm91cF9icGZfcmVwbGFjZWAsIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AsIGBicGZfbGlua19zaG93X2ZkaW5mb2AsIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgLlxuXG5UaW1lIHRvIGNoZWNrIHRoZSBjb25maWcgZGVwZW5kZW5jaWVzLiBXZSdyZSBvYnZpb3VzbHkgbG9va2luZyBhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19DR1JPVVBfQlBGYC4gTGV0J3MgY29uZmlybSB0aGF0IGJ5IHJldmlld2luZyB0aGUgcmVsZXZhbnQgZmlsZXMsIGBrZXJuZWwvYnBmL2Nncm91cC5jYCBhbmQgYGtlcm5lbC9icGYvbXByb2cuY2AuIFllcCwgYENPTkZJR19DR1JPVVBfQlBGYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkIGZvciBgY2dyb3VwLmNgLiBBbmQgZm9yIHRoZSBuZXR3b3JraW5nIGFzcGVjdCwgYENPTkZJR19ORVRgIG1pZ2h0IGJlIG5lZWRlZCBmb3IgYG5ldF9uYW1lc3BhY2UuY2AgYW5kIGB0Y3guY2AuIFdlIGtub3cgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgbWFpbiBlbmFibGVyIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuXG5cbkknbGwgdXNlIGBncmVwcGVyYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBsaW5rZWQgdG8gYGJwZl9tcHJvZ19hdHRhY2hgIG9yIGB0Y3guY2AsIHdoaWNoIG1pZ2h0IHJlcXVpcmUgYENPTkZJR19ORVRfWEdSRVNTYCBvciBzb21lIHNpbWlsYXIgZGVwZW5kZW5jeS4gTGV0J3Mgc2VlIHdoYXQgY29tZXMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNDMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNDo1NS4zNjUwNDc2OTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1OTE5NTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjeFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Mjc9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBuZXRfbmFtZXNwYWNlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdGN4Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI5LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE0OjU1LjQ3MDk3Mzg4MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzUyMDkzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gQlBGIENvbXBpbGF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Ugb2JqZWN0IGZpbGVzLCBzcGVjaWZpY2FsbHkgYHRjeC5vYCBhbmQgYG5ldF9uYW1lc3BhY2Uub2AsIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGFwcGFyZW50IHRoZXkndmUgYmVlbiBjb21waWxlZCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQuIFRoYXQncyBnb29kIHRvIGtub3csIHRoYXQgc2V0cyBhIGJhc2VsaW5lLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBgbmV0a2l0LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyB0aWVzIGludG8gdGhlIHJlc3Qgb2YgdGhlIHBpY3R1cmUuIElzIGl0IHVzaW5nIHRoZSBzYW1lIGZsYWdzPyBJcyBpdCBoYW5kbGluZyBCUEYgaW5zdHJ1Y3Rpb25zIGluIGEgY29tcGF0aWJsZSB3YXk/IEZpZ3VyaW5nIG91dCB0aGUgcmVsYXRpb24gYmV0d2VlbiB0aGVzZSBjb21wb25lbnRzIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSBhcyBhIHdob2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzU2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6MTQ6NTkuMzQ2MTg1ODk5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTE4MzM2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRraXRcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX05FVENPTlNPTEUpICs9IG5ldGNvbnNvbGUub1xcbmRyaXZlcnMvbmV0L01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19ORVRLSVQpICs9IG5ldGtpdC5vXFxuZHJpdmVycy9uZXQvTWFrZWZpbGUtMjYtb2JqLXkgKz0gcGh5L1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNDo1OS40NjUzNzM4MjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTYyNDQzMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldGtpdCBhbmQgQ2dyb3VwcyoqXG5cblJpZ2h0LCBzbyBJIHNlZSB0aGlzIGBuZXRraXQuY2AgZmlsZSBhbmQgaW1tZWRpYXRlbHkgdGhpbmssIFwiQWgsIHRoYXQncyBnb2luZyB0byBuZWVkIGBDT05GSUdfTkVUS0lUYCBlbmFibGVkLiBObyBzdXJwcmlzZXMgdGhlcmUuXCIgSXQncyBqdXN0IGEgc3RhbmRhcmQgZGVwZW5kZW5jeSwgc28gSSdsbCBxdWlja2x5IGNvbmZpcm0gdGhhdCBpdCdzIHNldCBwcm9wZXJseSBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBiZWZvcmUgSSBkaWcgYW55IGRlZXBlciBpbnRvIHRoZSBjb2RlIGl0c2VsZi5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gd2l0aCBgY2dyb3VwLmNgLiBUaGlzIG1pZ2h0IGJlIGEgcmVsYXRlZCBhcmVhLCBnaXZlbiBob3cgbmV0d29ya3MgYXJlIG9mdGVuIG1hbmFnZWQgd2l0aGluIHRoZSBjb25maW5lcyBvZiByZXNvdXJjZS1jb25zdHJhaW5lZCBlbnZpcm9ubWVudHMgdGhhdCBjZ3JvdXBzIGFyZSBkZXNpZ25lZCBmb3IuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV0d29ya2luZyBob29rcyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCwgb3IgYmVpbmcgc2hhcGVkIGJ5LCB0aG9zZSBjZ3JvdXBzLiBUaW1lIHRvIGp1bXAgaW4gdGhlcmUgYW5kIHNlZSB3aGF0IHRoZXkncmUgdXAgdG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NDgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNTowMi42Mjc4MTk5MjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MDkzOTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNncm91cFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MzU9ZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19DR1JPVVBfQlBGKSArPSBjZ3JvdXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzctaWZlcSAoJChDT05GSUdfSU5FVCkseSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6MTU6MDIuNzY2OTE5NDAyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwMzU5NjY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBlQlBGIGFuZCBjZ3JvdXBzKipcblxuUmlnaHQsIHNvIEknbSBkaXZpbmcgaW50byB0aGlz4oCmIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19DR1JPVVBfQlBGYCBpcyBlbmFibGVkLCBvYnZpb3VzbHkuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jay4gV2l0aG91dCB0aGF0LCBJJ20gd2FzdGluZyBteSB0aW1lLlxuXG5BbmQgd2hhdCBhYm91dCBgbXByb2cuY2A/IFRoYXQgZmlsZSBhbHdheXMgc2VlbXMgdG8gYmUgYXQgdGhlIGhlYXJ0IG9mIHRoZSBCUEYgYW5kIGNncm91cCBpbnRlcmFjdGlvbnMgaW4gdGhpcyBzcGFjZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaGVyZS4gSXMgaXQgcGFydCBvZiB0aGUgc29sdXRpb24sIG9yIHRoZSBwcm9ibGVtLCBvciBuZWl0aGVyPyBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSByZXZpZXdpbmcgdGhhdCBjb2RlLCBsb29raW5nIGZvciByZWxldmFudCBob29rcyBvciBpbnRlZ3JhdGlvbiBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NjksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNTowNS44NzA1MTk0NzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTY2Mzc4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHJvZ1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTU9b2JqLSR7Q09ORklHX0JQRl9MU019XFx0ICArPSBicGZfaW5vZGVfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRpc2FzbS5vIG1wcm9nLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE3LW9iai0kKENPTkZJR19CUEZfSklUKSArPSB0cmFtcG9saW5lLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6MTU6MDUuOTc2MTkyNTUyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NzEzNTU0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBGdW5jdGlvbiBSZWFjaGFiaWxpdHkgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBCUEYtcmVsYXRlZCBjb25maWd1cmF0aW9uczogYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfQ0dST1VQX0JQRmAsIGFuZCBgQ09ORklHX05FVEtJVGAuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIGEgc3BlY2lmaWMgc2V0IG9mIGZ1bmN0aW9uczogYGJwZl9tcHJvZ19hdHRhY2hgLCBgYnBmX21wcm9nX2RldGFjaGAsIGBfX2Nncm91cF9icGZfYXR0YWNoYCwgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCwgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCwgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXMsIGFyZSB0aGVzZSBmdW5jdGlvbnMgcmVhY2hhYmxlPyBZZXMsIGNsZWFybHksIHRoZXkgYXJlLCB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbC4gU3BlY2lmaWNhbGx5LCBgYnBmX21wcm9nX2F0dGFjaGAgaXMgcGFydCBvZiBgdGN4X3Byb2dfYXR0YWNoYCwgYW5kIGBuZXRraXRfcHJvZ19hdHRhY2hgLCBhbW9uZyBvdGhlcnMuIGBfX2Nncm91cF9icGZfYXR0YWNoYCBpcyBjYWxsZWQgZnJvbSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAuIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AgaXMgY2FsbGVkIGZyb20gYGJwZl9saW5rX3VwZGF0ZWAuIGBicGZfbGlua19zaG93X2ZkaW5mb2AgaXMgZXhwb3NlZCB2aWEgcHJvY2ZzLCBzcGVjaWZpY2FsbHkgYGZkaW5mb2AgZm9yIGJwZiBsaW5rcywgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgY29tZXMgZnJvbSBgYnBmX29ial9nZXRfaW5mb19ieV9mZGAuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGNyaXRpY2FsIGRlcGVuZGVuY2llcy4gQWhhLCBgQ09ORklHX05FVGAgaXMgcmVxdWlyZWQgZm9yIGBDT05GSUdfTkVUS0lUYC4gR29vZCB0byBrbm93LlxuXG5MZXQncyBzdW1tYXJpemUgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHN5bWJvbHM6IFRoZSBpbXBvcnRhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBCUEZfU1lTQ0FMTGAsIGBDR1JPVVBfQlBGYCwgYW5kIGBORVRLSVRgLiBBbmQgdGhlc2UgYXJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBzeW1ib2xzIHRvIGNvbnNpZGVyOiBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLCBgYnBmX2xpbmtfc2hvd19mZGluZm9gLCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgLlxuXG5GaW5hbGx5LCBhIHF1aWNrIG5vdGUgb24gYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBJdCdzIHN0YXRpYywgd2hpY2ggaXMgYSBkZXRhaWwsIGJ1dCBpdCBkb2Vzbid0IHJlcHJlc2VudCBhIGJhcnJpZXIuIElmIHdlIHRhcmdldCBpdCBkaXJlY3RseSB3aXRoIHN5emthbGxlciwgd2UgY2FuIHJlYWNoIGl0LCBvciwgYWx0ZXJuYXRpdmVseSwgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFsc28gd29ya3MuIEkgc2hvdWxkIGNoZWNrIGBrZXJuZWwvYnBmL2Nncm91cC5jYCBmb3IgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGZvciBtb3JlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjgwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjEzLjQ0NzU1MTYzOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEyNzc1MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jZ3JvdXBfYnBmX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy03OTEtLyoqXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5My0gKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGUgdGhlIGNoYW5nZSB0byBkZXNjZW5kYW50c1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4MDY6c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTkzND1zdGF0aWMgaW50IGNncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0Mi1cXHRjZ3JvdXBfbG9jaygpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTQzOlxcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NC1cXHRcXHRcXHRcXHQgIGlkX29yX2ZkLCByZXZpc2lvbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjEzLjUzODgzNjMyNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTUxMTEwMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkFzc2Vzc2luZyBCUEYgRnVuY3Rpb24gQXR0YWNobWVudCBhbmQgUmVwbGFjZW1lbnQqKlxuXG5SaWdodCwgc28gYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBvZnRlbiBhIHBvaW50IG9mIHNjcnV0aW55IHdoZW4gZGVhbGluZyB3aXRoIEJQRi4gSG93ZXZlciwgaXQncyBwZXJmZWN0bHkgYWNjZXB0YWJsZSB0byBsaXN0IGl0IGluIHRoaXMgY29udGV4dC4gVGhlcmUncyBubyBpbmhlcmVudCBpc3N1ZSB0aGVyZS4gTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYF9fY2dyb3VwX2JwZl9yZXBsYWNlYC4gVGhpcyBpcyB0aGUgb25lIHdlIHJlYWxseSBuZWVkIHRvIHVuZGVyc3RhbmQgdG8gZ3Jhc3AgdGhpcyBwYXJ0aWN1bGFyIEJQRiBpbXBsZW1lbnRhdGlvbidzIGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgZm9yIHRoYXQgZnVuY3Rpb24gYW5kIGRldGVybWluZSBpdHMgcm9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MzgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNToxNy4wODk5NTA0MzRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODA1NTE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2Nncm91cF9icGZfcmVwbGFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9MTAwMT1zdGF0aWMgdm9pZCByZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMjgtLyoqXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDI5OiAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsncyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzMC0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNy0gKi9cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMzg6c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzOS1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMTA4PXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEyNS1cXHR9XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTI2OlxcdHJldCA9IF9fY2dyb3VwX2JwZl9yZXBsYWNlKGNnX2xpbmstXFx1MDAzZWNncm91cCwgY2dfbGluaywgbmV3X3Byb2cpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEyNy1vdXRfdW5sb2NrOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNToxNy4xOTgwMTIxM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQ2MTIzOTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBhbmQgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCoqXG5cblJpZ2h0LCBsZXQncyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBjb25maXJtcyBpdDogYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFN0YXRpYyBpbXBsaWVzIHNvbWV0aGluZyBhYm91dCBzY29wZSBhbmQgbGlua2FnZSwgZG9lc24ndCBpdD8gSXMgaXQgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LCBvciBkb2VzIGl0IGhhdmUgZXh0ZXJuYWwgbGlua2FnZSBpbiB0aGUgYnJvYWRlciBrZXJuZWwgY29udGV4dD8gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgZGVsdmUgZnVydGhlci5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gc2hpZnQgZm9jdXMgdG8gYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcmVsYXRlcyB0byB3aGF0IEkgd2FzIGp1c3QgdGhpbmtpbmcgYWJvdXQsIGFuZCBob3cgaXQgaW50ZXJhY3RzLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGxpbmsgYmV0d2VlbiBCUEYgcHJvZ3JhbXMgYW5kIG5ldHdvcmsgbmFtZXNwYWNlcywgYW5kIG1vc3QgbGlrZWx5LCB0aGUgYWN0IG9mIHVwZGF0aW5nIHRoZW0uIEknbSBndWVzc2luZyB0aGF0IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgdG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uIEdpdmVuIHRoYXQgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBzdGF0aWMsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBob3cgaXQgbWlnaHQgYmUgY2FsbGVkIGFuZCBsaW5rZWQgYnkgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBUaGlzIG1lYW5zIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBjcml0aWNhbCBwYXRoIGZvciBCUEYgcHJvZ3JhbSB1cGRhdGVzIGFuZCBuZXR3b3JrIG5hbWVzcGFjZSBjb25maWd1cmF0aW9uLCBhbmQgbmVlZCB0byBmb2xsb3cgaXRzIGltcGxpY2F0aW9ucy4gRXNzZW50aWFsbHksIEknbSB0aGlua2luZywgXCJob3cgaXMgdGhpcyBzdGF0aWMgZnVuY3Rpb24gYmVpbmcgdXRpbGl6ZWQgaW4gdGhlIGJyb2FkZXIgbGlmZWN5Y2xlP1wiIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgZXJyb3IgaGFuZGxpbmcgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI4MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjIwLjk0NDEzOTc0M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMjQ3MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTE1NT1zdGF0aWMgdm9pZCBicGZfbmV0bnNfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTE2Mi1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzoxNjM6c3RhdGljIGludCBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMTY0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0yMzk9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX25ldG5zX2xpbmtfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjQyLVxcdC5kZXRhY2ggPSBicGZfbmV0bnNfbGlua19kZXRhY2gsXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6MjQzOlxcdC51cGRhdGVfcHJvZyA9IGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nLFxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTI0NC1cXHQuZmlsbF9saW5rX2luZm8gPSBicGZfbmV0bnNfbGlua19maWxsX2luZm8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjIxLjA2NDM5NDcxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA3Mjk3NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBvbiBTdGF0aWMgRnVuY3Rpb25zIGluIEJQRiBMaW5rIE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBzbyBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLi4uIHJpZ2h0LCB0aGF0IG9uZSBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLiBTaG91bGRuJ3QgYmUgYW55IHN1cnByaXNlcyB0aGVyZSwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gY29uZmlybSBhc3N1bXB0aW9ucy4gTm93LCBsZXQncyBwaXZvdCB0byBjb25maXJtaW5nIHRoZSBiZWhhdmlvciBvZiBgYnBmX2xpbmtfc2hvd19mZGluZm9gLiBXZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgaW5mb3JtYXRpb24gaXMgYmVpbmcgcHJvdmlkZWQgYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHN0cnVjdHVyZSBhbmQgZGF0YSBhcmUgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTcxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6MTU6MjQuMDcxNjk0OTY1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU1NjY5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2xpbmtfc2hvd19mZGluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9MzQ2Mz1zdGF0aWMgY29uc3QgY2hhciAqYnBmX2xpbmtfdHlwZV9zdHJzW10gPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDcwLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0NzE6c3RhdGljIHZvaWQgYnBmX2xpbmtfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDcyLXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM1MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnBmX2xpbmtfZm9wcyA9IHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTIyLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM1MjM6XFx0LnNob3dfZmRpbmZvXFx0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTI0LSNlbmRpZlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzUzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBicGZfbGlua19mb3BzX3BvbGwgPSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUzMS0jaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNTMyOlxcdC5zaG93X2ZkaW5mb1xcdD0gYnBmX2xpbmtfc2hvd19mZGluZm8sXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUzMy0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6MTU6MjQuMTg3MjY5OTUxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDI4MDY0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgTGluayBGRCBJbmZvcm1hdGlvbiBSZXRyaWV2YWwqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSB3aGV0aGVyIHRoYXQncyBkZWNsYXJlZCBzdGF0aWMgd2l0aGluIHRoZSBjb2RlIGJhc2UuIE15IHVuZGVyc3RhbmRpbmcgaXMgaXQgaXMsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ20gZG91YmxlLWNoZWNraW5nIGJlY2F1c2UgaXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBhY2Nlc3NpYmlsaXR5IG9mIHRoYXQgaW5mb3JtYXRpb24uXG5cbk5vdywgbGV0J3MgcGl2b3QgYW5kIGV4YW1pbmUgaG93IGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgZnVuY3Rpb25zLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY2VudHJhbCByZXRyaWV2YWwgcG9pbnQgZm9yIHRoZSBGRCBpbmZvcm1hdGlvbiwgYnV0IEknbGwgbmVlZCB0byBjb25maXJtIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCB0byBkZXRlcm1pbmUgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ5MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjI4LjA5MDA4MTg1OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNDk1NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9saW5rX2dldF9pbmZvX2J5X2ZkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTU1MjM9c3RhdGljIGludCBicGZfYnRmX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTUzOC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NTM5OnN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTU0MC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU1OTk9c3RhdGljIGludCBicGZfb2JqX2dldF9pbmZvX2J5X2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTYxNy1cXHRlbHNlIGlmIChmZF9maWxlKGYpLVxcdTAwM2VmX29wID09IFxcdTAwMjZicGZfbGlua19mb3BzIHx8IGZkX2ZpbGUoZiktXFx1MDAzZWZfb3AgPT0gXFx1MDAyNmJwZl9saW5rX2ZvcHNfcG9sbClcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NjE4OlxcdFxcdHJldHVybiBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZF9maWxlKGYpLCBmZF9maWxlKGYpLVxcdTAwM2Vwcml2YXRlX2RhdGEsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTYxOS1cXHRcXHRcXHRcXHRcXHQgICAgICBhdHRyLCB1YXR0cik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjI4LjI1MTU4MzA4NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIyMDQ0NjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgQlBGIExpbmsgSW5mb3JtYXRpb24gYW5kIEF0dGFjaG1lbnQgTWVjaGFuaXNtcyoqXG5cbk9rYXksIHNvIEknbSBjb25maXJtaW5nIHRoYXQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBnb29kIHRvIGtub3cg4oCTIGhlbHBzIG5hcnJvdyBkb3duIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIGZvciB1c2FnZS4gTm93LCBJIHNob3VsZCBzaGlmdCBteSBmb2N1cyB0byBkaXNzZWN0aW5nIGhvdyBpdCB3b3JrcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYXR0YWNobWVudC9kZXRhY2htZW50LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gYGJwZl9tcHJvZ19hdHRhY2hgIGFuZCBgYnBmX21wcm9nX2RldGFjaGAgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJkZXBlbmRlbmNpZXMgYW5kIGhvdyBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGZhY3RvcnMgaW50byB0aGF0IG92ZXJhbGwgcHJvY2Vzcy4gR290dGEgbG9vayBhdCB0aGUgYmlnZ2VyIHBpY3R1cmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDIyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6MTU6MzEuMjczNjMxNTY5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE2MjYzOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX21wcm9nX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL21wcm9nLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9tcHJvZy5jPTIxMD1zdGF0aWMgaW50IGJwZl9tcHJvZ19wb3NfYWZ0ZXIoc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxuLS1cXG5rZXJuZWwvYnBmL21wcm9nLmMtMjI1LVxcbmtlcm5lbC9icGYvbXByb2cuYzoyMjY6aW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxua2VybmVsL2JwZi9tcHJvZy5jLTIyNy1cXHRcXHQgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjMxLjM4NTI2NTYyNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDYwNDgzNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJQRiBFeHBvcnQgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29udGV4dCBpbmRpY2F0ZXMgd2UncmUgZGVhbGluZyB3aXRoIEJQRiBmdW5jdGlvbmFsaXR5IGFuZCBpdHMgaW50ZWdyYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGV4cG9ydC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3Q7IHllcywgdGhlc2UgQlBGIGVsZW1lbnRzIGFyZSBiZWluZyBleHBvcnRlZC5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUga2V5IGZ1bmN0aW9ucyBhdCBwbGF5IGhlcmUuIFRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiBhdHRhY2hpbmcgYW5kIGRldGFjaGluZyBCUEYgcHJvZ3JhbXMsIGVzcGVjaWFsbHkgdG8gYW5kIGZyb20gY2dyb3Vwcy4gVGhlIGNvcmUgZnVuY3Rpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYXJlOiBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLCBgYnBmX2xpbmtfc2hvd19mZGluZm9gLCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC4gVGhlc2UgYXJlIHRoZSBob29rcyBhbmQgaW50ZXJmYWNlcyBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZS5cblxuTm93LCBvbiB0byBjb25maWd1cmF0aW9ucy4gV2UgaGF2ZSB0aHJlZSBtYWluIG9uZXMgYmVpbmcgZmxhZ2dlZDogYEJQRl9TWVNDQUxMYCwgYENHUk9VUF9CUEZgLCBhbmQgYE5FVEtJVGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UuIExldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBjb25maWdzIGx1cmtpbmcgYWJvdXQuXG5cbkxldCdzIGNvbmZpcm0gdGhlIGNvbmZpZ3MgYXJlIHByZXNlbnQgaW4gdGhlIGZpbGVzOlxuKiAgIGB0Y3guY2AgdXNlcyBgQ09ORklHX0JQRl9TWVNDQUxMYC5cbiogICBgbmV0X25hbWVzcGFjZS5jYCByZWxpZXMgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAuXG4qICAgYG1wcm9nLmNgIHV0aWxpemVzIGBDT05GSUdfQlBGX1NZU0NBTExgLlxuKiAgIGBjZ3JvdXAuY2AgaXMgZHJpdmVuIGJ5IGBDT05GSUdfQ0dST1VQX0JQRmAuXG4qICAgYG5ldGtpdC5jYCBsZXZlcmFnZXMgYENPTkZJR19ORVRLSVRgLlxuXG5Pa2F5LCBJJ20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBgQ09ORklHX05FVEtJVGAgaXMgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIGZvciBgbmV0a2l0LmNgIOKAkyBhcyBjb25maXJtZWQgYnkgYG9iai0kKENPTkZJR19ORVRLSVQpICs9IG5ldGtpdC5vYC4gVGhhdCdzIGNsZWFuLlxuXG5Ob3csIGxldCdzIGV4YW1pbmUgdGhlIG1vZGlmaWVkIGZpbGVzLiBUaGlzIGlzIHdoZXJlIEknbGwgZ2V0IHRoZSByZWFsIHBpY3R1cmUuIFNvLCB3ZSd2ZSBnb3Q6XG5cbiogICBgaW5jbHVkZS9saW51eC9icGZfbXByb2cuaGAg4oCTIHRoaXMgaXMgYSBoZWFkZXIsIHNvIGl0IGxpa2VseSBkZWZpbmVzIHRoZSBpbnRlcmZhY2VzIGFuZCBzdHJ1Y3R1cmVzLiBNYWtlcyBzZW5zZS5cbiogICBgZHJpdmVycy9uZXQvbmV0a2l0LmNgIOKAkyB0aGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBgQ09ORklHX05FVEtJVGAgYXQgd29yay5cbiogICBga2VybmVsL2JwZi9jZ3JvdXAuY2Ag4oCTIHRoaXMgaXMgdGllZCB0byBgQ09ORklHX0NHUk9VUF9CUEZgLlxuKiAgIGBrZXJuZWwvYnBmL21wcm9nLmNgIOKAkyB0aGlzIG9uZSBpcyB1c2luZyBgQ09ORklHX0JQRl9TWVNDQUxMYC5cbiogICBga2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNgIOKAkyBhbHNvIHVzZXMgYENPTkZJR19CUEZfU1lTQ0FMTGAuXG4qICAgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCDigJMgc2FtZSwgYENPTkZJR19CUEZfU1lTQ0FMTGAuXG4qICAgYGtlcm5lbC9icGYvdGN4LmNgIOKAkyBhbmQgYWdhaW4sIGBDT05GSUdfQlBGX1NZU0NBTExgLlxuXG5TbywgY29uZmlybWVkOiB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbml0ZWx5IGBCUEZfU1lTQ0FMTGAsIGBDR1JPVVBfQlBGYCwgYW5kIGBORVRLSVRgLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkga25vdyB0aGF0IGBDT05GSUdfTkVUS0lUYCBkZXBlbmRzIG9uIGBDT05GSUdfTkVUYC4gV2hpbGUgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXRzZWxmIG1heSBub3Qgc3RyaWN0bHkgcmVxdWlyZSBgQ09ORklHX05FVGAsIHRoZSBmaWxlcyBgbmV0X25hbWVzcGFjZS5jYCBhbmQgYHRjeC5jYCBtaWdodC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBNYWtlZmlsZSBmb3IgdGhlIEJQRiBjb3JlIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgYG5ldF9uYW1lc3BhY2Uub2AgYW5kIGB0Y3gub2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzgzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjM5Ljg0NTc1MTQ4MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MTM4NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldF9uYW1lc3BhY2VcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gb2ZmbG9hZC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG5ldF9uYW1lc3BhY2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB0Y3gub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNTozOS45NzA4OTY4NjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4OTYwMjYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEJQRiBTeXN0ZW0gQ2FsbCBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIEJQRiBzeXN0ZW0gY2FsbCBzdHVmZiBpcyBjb21waWxlZC4gSXQncyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFdhaXQgYSBtaW51dGUuLi4gSSBoYXZlIGEgc3VzcGljaW9uLiBUaGlzIGBuZXRfbmFtZXNwYWNlLmNgIGZpbGUg4oCTIGRvZXNuJ3QgdGhhdCAqcmVxdWlyZSogYENPTkZJR19ORVRgPyBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBkZXBlbmRlbmN5IHRvIGJlIHN1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGVzZSBjb25maWd1cmF0aW9ucyBjb21wbGV0ZWx5IGJlZm9yZSBJIG1vdmUgb24uIE9rYXksIGxldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgaW4gYG5ldF9uYW1lc3BhY2UuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODQ0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6MTU6NDMuNTYwNTAxNTk0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTg1Nzc2NDgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19ORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjQzLjk1OTA5MDc3MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM4NjExMDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIENvbXBpbGF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgQlBGIHN5c2NhbGwgZ2V0cyBjb21waWxlZCwgYW5kIGl0IGxvb2tzIGxpa2UgYG5ldF9uYW1lc3BhY2UuY2AgaXMgZGVmaW5pdGVseSBpbnZvbHZlZCwgdHJpZ2dlcmVkIGJ5IGBDT05GSUdfQlBGX1NZU0NBTExgLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiB3aGF0IGhhcHBlbnMgaWYgdGhlIG5ldHdvcmsgc3RhY2sgaXRzZWxmIChgQ09ORklHX05FVGApIGlzIGRpc2FibGVkPyBUaGF0IHRocm93cyBhIHdyZW5jaCBpbiB0aGUgd29ya3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgY2xlYXJseS4gTGV0J3MgZ28gYmFjayBhbmQgY2FyZWZ1bGx5IHJlLWV4YW1pbmUgYGtlcm5lbC9icGYvTWFrZWZpbGVgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGJlc2lkZXMganVzdCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlIGZ1bGx5IHVuZGVyc3Rvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDcwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6MTU6NDcuMDk3NzA2NTIzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI4NDQ5NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0X25hbWVzcGFjZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBvZmZsb2FkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbmV0X25hbWVzcGFjZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHRjeC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjQ3LjI1MDU2MTI1OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ1MjI1MDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgSW52ZXN0aWdhdGlvbjogYG5ldF9uYW1lc3BhY2UuY2AgXHUwMDI2IENPTkZJR19ORVQqKlxuXG5IbW0sIGhvbGQgb24uIEknbSB0YWtpbmcgYSBsb29rIGF0IGBuZXRfbmFtZXNwYWNlLmNgIGFuZCBpbW1lZGlhdGVseSBhIHJlZCBmbGFnIHBvcHMgdXAuIFRoaXMgZmlsZSBpcyBjbGVhcmx5IHV0aWxpemluZyB0aGUgYHN0cnVjdCBuZXRgIHN0cnVjdHVyZSwgYW5kIHRoYXQncyB1c3VhbGx5IGEgc3Ryb25nIGluZGljYXRvciBvZiBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eS4gTm93LCB0aGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgaXMgd2hldGhlciB0aGUgaW5jbHVzaW9uIG9mIHRoYXQgc3RydWN0dXJlIGluIHRoaXMgcGFydGljdWxhciBmaWxlIGlzIGNvbmRpdGlvbmFsLiBTcGVjaWZpY2FsbHksIGlzIHRoZSByZWxldmFudCBjb2RlIHNlY3Rpb24g4oCTIGxpa2VseSB0aGUgZW50aXJlIGZpbGUsIGdpdmVuIGl0cyBuYW1lIOKAkyBwcm90ZWN0ZWQgYnkgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBhbmQgdGhhdCBkaXJlY3RpdmUgaXMgZGVwZW5kZW50IG9uIGBDT05GSUdfTkVUYD8gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoaXMgZGVwZW5kZW5jeSBleGlzdHMuIElmIG5vdCwgaXQgY291bGQgc2lnbmlmeSBhIGNvbmZpZ3VyYXRpb24gb3ZlcnNpZ2h0LCBhIHBvdGVudGlhbCBwb3J0YWJpbGl0eSBpc3N1ZSwgb3IgYSBzaXR1YXRpb24gd2hlcmUgbmV0d29ya2luZyBjb2RlIGNvdWxkIGJlIGluY2x1ZGVkIHVuaW50ZW50aW9uYWxseS4gQWx0ZXJuYXRpdmVseSwgaWYgaXQgaXMgZ3VhcmRlZCBieSBDT05GSUdfTkVULCBhbGwgaXMgYXMgaXQgc2hvdWxkIGJlLiBMZXQgbWUgY2hlY2sgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGF0IHRoZSB0b3Agb2YgdGhhdCBmaWxlLCBhcyBpdCBzZWVtcyBhIHJhdGhlciBpbXBvcnRhbnQgcGllY2Ugb2YgdGhlIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MTIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNTo1MC42OTU3OTAzMjFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzQ1NTc3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfQlBGX0pJVCkgKz0gZGlzcGF0Y2hlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyMzppZmVxICgkKENPTkZJR19ORVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yNC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRldm1hcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjUwLjg0OTI1MzUwNloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM5NjI0NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4ga2VybmVsIGRldmVsb3BtZW50IGFuZCBidWlsZCBzeXN0ZW1zOlxuXG4qKkRlYnVnZ2luZyBhIEJ1aWxkIENvbmZpZ3VyYXRpb24gSXNzdWUqKlxuXG5SaWdodCwgc28gSSBzZWUgYSByZWZlcmVuY2UgdG8gYGlmZXEgKCQoQ09ORklHX05FVCkseSlgIGF0IGxpbmUgMjMuIFRoYXQgaW5zdGFudGx5IGZsYWdzIGEgcG90ZW50aWFsIGRlcGVuZGVuY3kgcmVsYXRlZCB0byBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIFNpbmNlIEknbSB2ZXJ5IGZhbWlsaWFyIHdpdGggdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgYnVpbGQgcHJvY2VzcywgSSBpbW1lZGlhdGVseSBrbm93IHdoZXJlIHRvIGxvb2suIE15IG5leHQgdGhvdWdodCBpcywgXCJMZXQncyBjaGVjayBga2VybmVsL2JwZi9NYWtlZmlsZWAgYXJvdW5kIHRoYXQgc2FtZSBsaW5lIG51bWJlci5cIiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyB0aGVyZSB0aGF0J3MgbGlrZWx5IHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB3aHkgYENPTkZJR19ORVRgIGlzIGJlaW5nIGV2YWx1YXRlZCBpbiB0aGF0IGNvbnRleHQuIEl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgYXBwcm9hY2g6IGlkZW50aWZ5IHRoZSBjb25kaXRpb24sIHRoZW4gdHJhY2UgaXQgdG8gd2hlcmUgaXQncyBiZWluZyBldmFsdWF0ZWQgdG8gc2VlIGlmIGl0IG1ha2VzIHNlbnNlIGluIHRoZSBjdXJyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBpbiB0aGlzIHBhcnQgb2YgdGhlIGtlcm5lbCBzb3VyY2UgY29kZS4gSSBiZXQgdGhpcyBpcyBhIGJ1aWxkLXRpbWUgY29uZGl0aW9uYWwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc3NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjU0Ljc4ODg4Mjc5M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXFxuICAyMTpcXHRlbmRpZlxcbiAgMjI6XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGRpc3BhdGNoZXIub1xcbiAgMjM6XFx0aWZlcSAoJChDT05GSUdfTkVUKSx5KVxcbiAgMjQ6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkZXZtYXAub1xcbiAgMjU6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcHVtYXAub1xcbiAgMjY6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBvZmZsb2FkLm9cXG4gIDI3OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbmV0X25hbWVzcGFjZS5vXFxuICAyODpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHRjeC5vXFxuICAyOTpcXHRlbmRpZlxcbiAgMzA6XFx0aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXFxuICAzMTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN0YWNrbWFwLm9cXG4gIDMyOlxcdGVuZGlmXFxuICAzMzpcXHRpZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxcbiAgMzQ6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xcbiAgMzU6XFx0ZW5kaWZcXG4gIDM2OlxcdG9iai0kKENPTkZJR19DR1JPVVBfQlBGKSArPSBjZ3JvdXAub1xcbiAgMzc6XFx0aWZlcSAoJChDT05GSUdfSU5FVCkseSlcXG4gIDM4OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmV1c2Vwb3J0X2FycmF5Lm9cXG4gIDM5OlxcdGVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjU0Ljc4OTAwNDQxM1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTUxMDg3ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyBmb3IgQlBGLVJlbGF0ZWQgQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgaW5pdGlhbCBpbnNwZWN0aW9uLCBpdCBsb29rcyBsaWtlIGBuZXRfbmFtZXNwYWNlLm9gIGFuZCBgdGN4Lm9gIGFyZSB0aWVkIHRvIGBDT05GSUdfTkVUYCwgd2hpY2ggaW4gdHVybiBpbXBsaWVzIGBDT05GSUdfTkVUS0lUYCBhcyB3ZWxsLiAgU28sIGF0IGEgYmFzZSBsZXZlbCwgd2UgaGF2ZSBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19DR1JPVVBfQlBGYCwgYENPTkZJR19ORVRgLCBhbmQgYENPTkZJR19ORVRLSVRgIGFzIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy5cblxuSG93ZXZlciwgdGhlIHByb21wdCBpcyBjbGVhcjogYXZvaWQgdGhlIGV4Y2Vzc2l2ZWx5IGdlbmVyYWwuIFdoaWxlIGBDT05GSUdfTkVUYCBpcyBjZXJ0YWlubHkgcmVxdWlyZWQsIGl0J3MgdG9vIGJyb2FkIGZvciB0aGlzIHB1cnBvc2UuICBgQ09ORklHX0JQRl9TWVNDQUxMYCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHRoZSBjb3JlIGVuYWJsaW5nIGNvbmZpZyBmb3IgQlBGLCBldmVuIGlmIGdlbmVyYWxseSBhcHBsaWNhYmxlLCBzbyB0aGF0IHN0YXlzLiAgYENPTkZJR19DR1JPVVBfQlBGYCBpcyBzdWl0YWJseSBzcGVjaWZpYyB0byBiZSB1c2VmdWwsIGFuZCBzbyBpcyBgQ09ORklHX05FVEtJVGAuIFNvLCB3ZSBrZWVwIHRob3NlLlxuXG5Ob3csIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3JlIGdldHRpbmcgYWxsIHRoZSByZWxldmFudCBjb2RlLiBMb29raW5nIGF0IHRoZSBmb2N1cyBzeW1ib2xzLCB3ZSBoYXZlIGEgbGlzdCB0byBzdGFydCB3aXRoOiBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLCBgYnBmX2xpbmtfc2hvd19mZGluZm9gLCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC5cblxuQnV0IGxldCdzIG5vdCBzdG9wIHRoZXJlLiBXZSBuZWVkIHRvIGJlIGV4aGF1c3RpdmUgdG8gbWFrZSBzdXJlIHdlJ3JlIGNvdmVyaW5nIHRoZSBtb2RpZmljYXRpb25zIG1hZGUuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxzIGluIGBuZXRraXQuY2AgYW5kIGB0Y3guY2AuIEFuZCBzdXJlIGVub3VnaCwgdGhlcmUgYXJlIHNldmVyYWw6IGBuZXRraXRfcHJvZ19hdHRhY2hgLCBgbmV0a2l0X3Byb2dfZGV0YWNoYCwgYG5ldGtpdF9saW5rX3Byb2dfYXR0YWNoYCwgYG5ldGtpdF9saW5rX3JlbGVhc2VgLCBhbmQgYG5ldGtpdF9saW5rX3VwZGF0ZWAgaW4gYG5ldGtpdC5jYDsgdGhlbiBgdGN4X3Byb2dfYXR0YWNoYCwgYHRjeF9wcm9nX2RldGFjaGAsIGB0Y3hfbGlua19wcm9nX2F0dGFjaGAsIGB0Y3hfbGlua19yZWxlYXNlYCwgYW5kIGB0Y3hfbGlua191cGRhdGVgIGluIGB0Y3guY2AuIFBsdXMgYGJwZl9tcHJvZ19saW5rYCBhbmQgYGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZWAgaW4gYG1wcm9nLmNgLlxuXG5Pa2F5LCBhZGRpbmcgYG5ldGtpdF9wcm9nX2F0dGFjaGAsIGB0Y3hfcHJvZ19hdHRhY2hgIGFuZCB0aGUgbGluayB2ZXJzaW9ucyBzZWVtIGFwcHJvcHJpYXRlIHRvIGV4cGFuZCB0aGUgc3ltYm9sIGxpc3QsIHRob3VnaCB0aGUgYGJwZl9tcHJvZ19hdHRhY2hgIGJhc2UgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgdGhvc2UuXG5cbkZpbmFsIGZvY3VzIHN5bWJvbHM6XG5cbmBicGZfbXByb2dfYXR0YWNoYFxuYGJwZl9tcHJvZ19kZXRhY2hgXG5gX19jZ3JvdXBfYnBmX2F0dGFjaGBcbmBfX2Nncm91cF9icGZfcmVwbGFjZWBcbmBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2BcbmBicGZfbGlua19zaG93X2ZkaW5mb2BcbmBicGZfbGlua19nZXRfaW5mb19ieV9mZGBcbmBuZXRraXRfcHJvZ19hdHRhY2hgXG5gdGN4X3Byb2dfYXR0YWNoYFxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ0NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE2OjAzLjc0MDExNTI0MloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0NTIxODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGtpdF9wcm9nX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRraXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRraXQuYz03MTE9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRraXRfZGV2X2ZldGNoKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlmaW5kZXgsIHUzMiB3aGljaClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTc0NC1cXG5kcml2ZXJzL25ldC9uZXRraXQuYzo3NDU6aW50IG5ldGtpdF9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTc0Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE2OjAzLjg2NDY1MzYzOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTAzMDg3ODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgRHluYW1pYyBCZWhhdmlvcioqXG5cbk9rYXksIHNvIHRoaXMgaXNuJ3QgYSBzdGF0aWMgc2l0dWF0aW9uLiBTb21ldGhpbmcncyBjbGVhcmx5IGluIGZsdXgsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZHluYW1pY3MgYXQgcGxheS4gVGhlIHBocmFzZSBcIkl0IGlzIG5vdCBzdGF0aWNcIiBpcyBhIHNpZ25hbCDigJMgaXQgbWVhbnMgSSBjYW4ndCBqdXN0IGxvb2sgYXQgYSBzbmFwc2hvdCBvZiB0aGUgc3lzdGVtOyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaW5ncyBjaGFuZ2Ugb3ZlciB0aW1lLlxuXG5HaXZlbiB0aGUgY29udGV4dCwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byBgdGN4X3Byb2dfYXR0YWNoYC4gVGhhdCBmdW5jdGlvbiBsaWtlbHkgcmVwcmVzZW50cyBhIGNyaXRpY2FsIHBvaW50IHdoZXJlIHNvbWUgYmVoYXZpb3IgaXMgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gSXQncyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgbGlua2luZyBhIHByb2dyYW0gb3Igc29tZSBvdGhlciBlbGVtZW50IHdpdGhpbiB0aGUgc3lzdGVtLiBVbmRlcnN0YW5kaW5nIHdoYXQgaGFwcGVucyB3aXRoaW4gYHRjeF9wcm9nX2F0dGFjaGAg4oCTIGl0cyBpbnB1dHMsIG91dHB1dHMsIHNpZGUgZWZmZWN0cywgYW5kIGNvbnRyb2wgZmxvdyDigJMgc2hvdWxkIGJlIGtleSB0byB1bnJhdmVsaW5nIHRoZSBkeW5hbWljIGFzcGVjdCBJJ20gc2VlaW5nLiBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIGV4ZWN1dGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wYWN0IHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNjowNi45Njc3NDQzOTFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjUzNTQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3hfcHJvZ19hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90Y3guY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3RjeC5jLTktXFxua2VybmVsL2JwZi90Y3guYzoxMDppbnQgdGN4X3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxua2VybmVsL2JwZi90Y3guYy0xMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE2OjA3LjA3NDI4NDk1N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjQzMDE1MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXNuJ3QganVzdCBjb3NtZXRpYzsgaXQncyB0b3VjaGluZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBCUEYgc3R1ZmYsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IGdldHMgbXkgYXR0ZW50aW9uLiBJIHNlZSB0aGF0IGl0J3MgZGVhbGluZyB3aXRoIG11bHRpLXByb2cgYXR0YWNobWVudCBhbmQgZGV0YWNobWVudCAoYGJwZl9tcHJvZ19hdHRhY2hgLCBgYnBmX21wcm9nX2RldGFjaGApLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGFkZGluZyBzdHJpY3RlciBsaW5rIHR5cGUgZW5mb3JjZW1lbnQsIHdoaWNoIGlzIGNydWNpYWwgZm9yIHRoZSBgTkVUS0lUYCBhbmQgYFRDWGAgc3Vic3lzdGVtcy4gTWFrZXMgc2Vuc2Ug4oCTIHRob3NlIGFyZSBzcGVjaWFsaXplZCB1c2UgY2FzZXMsIGFuZCB5b3UgKmRlZmluaXRlbHkqIHdhbnQgdG8gZW5zdXJlIHByb2dyYW1zIGFyZSBhdHRhY2hlZCBjb3JyZWN0bHkuXG5cblRoZW4gSSBzZWUgdXBkYXRlcyB0byB0aGUgY2dyb3VwIEJQRiBhdHRhY2gvcmVwbGFjZSBsb2dpYyAoYF9fY2dyb3VwX2JwZl9hdHRhY2hgLCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgKS4gVGhhdCBoaW50cyBhdCBjaGFuZ2VzIHRvIGhvdyBCUEYgY2dyb3VwIHN0b3JhZ2UgaXMgaGFuZGxlZC4gVGhhdCBjb3VsZCBoYXZlIHJpcHBsZSBlZmZlY3RzLCBzbyB3b3J0aCBhIGNsb3NlciBsb29rLiBUaGV5J3JlIHByb2JhYmx5IGZpeGluZyBhIHN0b3JhZ2UgbGVhayBvciBzb21lIHNpbWlsYXIgZ290Y2hhLlxuXG5UaGUgZml4IGZvciB0aGUgbG9ja2luZyBpc3N1ZSBpbiBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgIGlzIGFub3RoZXIgcmVkIGZsYWcuIExvY2tpbmcgYnVncyBhcmUgb2Z0ZW4gaGFyZCB0byBzcG90LCBlc3BlY2lhbGx5IGluIGNvbmN1cnJlbnQgY29kZSwgc28gdGhhdCBmaXggaXMgbGlrZWx5IGEgZ29vZCB0aGluZy4gQW5kIFJDVSBsb2NraW5nIGZpeGVzIGluIGBicGZfbGlua19zaG93X2ZkaW5mb2AgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgaXMgZXF1YWxseSBpbXBvcnRhbnQsIHBhcnRpY3VsYXJseSBzaW5jZSB0aGVzZSBhcmUgcmVsYXRlZCB0byBnZXR0aW5nIGluZm9ybWF0aW9uIGFib3V0IGxpbmtzLCBsaWtlbHkgZm9yIHRvb2xzLlxuXG5TbywgZnVuY3Rpb25hbGx5LCB0aGlzIGlzIGFsbCBjb3JlIGtlcm5lbCBsb2dpYywgZGlyZWN0bHkgcmVhY2hhYmxlLCBhbmQgc3ViamVjdCB0byBmdXp6ZXIgaW1wYWN0LiBMZXQncyBtYWtlIHN1cmUgb3VyIGZ1enplcnMgcGljayB0aGlzIHVwLiBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI3NSwiT3V0cHV0VG9rZW5zIjoyODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6MTY6MTQuMzE3MzA0MzIxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMTc1NzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiTkVUS0lUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX21wcm9nX2F0dGFjaFwiLFxuICAgIFwiYnBmX21wcm9nX2RldGFjaFwiLFxuICAgIFwiX19jZ3JvdXBfYnBmX2F0dGFjaFwiLFxuICAgIFwiX19jZ3JvdXBfYnBmX3JlcGxhY2VcIixcbiAgICBcImJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nXCIsXG4gICAgXCJicGZfbGlua19zaG93X2ZkaW5mb1wiLFxuICAgIFwiYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRcIixcbiAgICBcIm5ldGtpdF9wcm9nX2F0dGFjaFwiLFxuICAgIFwidGN4X3Byb2dfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCUEYgbG9naWMgZm9yIGF0dGFjaGluZyBhbmQgZGV0YWNoaW5nIG11bHRpLXByb2dzIChicGZfbXByb2dfYXR0YWNoLCBicGZfbXByb2dfZGV0YWNoKSB0byBlbmZvcmNlIGV4cGVjdGVkIGxpbmsgdHlwZXMsIHNwZWNpZmljYWxseSBmb3IgTkVUS0lUIGFuZCBUQ1guIEl0IGFsc28gdXBkYXRlcyBjZ3JvdXAgQlBGIGF0dGFjaC9yZXBsYWNlIGxvZ2ljIHRvIHByb3Blcmx5IGhhbmRsZSBCUEYgY2dyb3VwIHN0b3JhZ2UsIGFuZCBmaXhlcyBhIGxvY2tpbmcgaXNzdWUgaW4gYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cuIEFkZGl0aW9uYWxseSwgaXQgZml4ZXMgUkNVIGxvY2tpbmcgaW4gYnBmX2xpbmtfc2hvd19mZGluZm8gYW5kIGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiTkVUS0lUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX21wcm9nX2F0dGFjaFwiLFxuICAgIFwiYnBmX21wcm9nX2RldGFjaFwiLFxuICAgIFwiX19jZ3JvdXBfYnBmX2F0dGFjaFwiLFxuICAgIFwiX19jZ3JvdXBfYnBmX3JlcGxhY2VcIixcbiAgICBcImJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nXCIsXG4gICAgXCJicGZfbGlua19zaG93X2ZkaW5mb1wiLFxuICAgIFwiYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRcIixcbiAgICBcIm5ldGtpdF9wcm9nX2F0dGFjaFwiLFxuICAgIFwidGN4X3Byb2dfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCUEYgbG9naWMgZm9yIGF0dGFjaGluZyBhbmQgZGV0YWNoaW5nIG11bHRpLXByb2dzIChicGZfbXByb2dfYXR0YWNoLCBicGZfbXByb2dfZGV0YWNoKSB0byBlbmZvcmNlIGV4cGVjdGVkIGxpbmsgdHlwZXMsIHNwZWNpZmljYWxseSBmb3IgTkVUS0lUIGFuZCBUQ1guIEl0IGFsc28gdXBkYXRlcyBjZ3JvdXAgQlBGIGF0dGFjaC9yZXBsYWNlIGxvZ2ljIHRvIHByb3Blcmx5IGhhbmRsZSBCUEYgY2dyb3VwIHN0b3JhZ2UsIGFuZCBmaXhlcyBhIGxvY2tpbmcgaXNzdWUgaW4gYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cuIEFkZGl0aW9uYWxseSwgaXQgZml4ZXMgUkNVIGxvY2tpbmcgaW4gYnBmX2xpbmtfc2hvd19mZGluZm8gYW5kIGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowf28xd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 01:44:22 +0000 UTC FinishedAt: 2026-07-23 02:16:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "NETKIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "NETKIT" ], "series_id": "041a68c2-1bf1-4c37-be2c-148ea09ad197" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_mprog_attach", "bpf_mprog_detach", "__cgroup_bpf_attach", "__cgroup_bpf_replace", "bpf_netns_link_update_prog", "bpf_link_show_fdinfo", "bpf_link_get_info_by_fd", "netkit_prog_attach", "tcx_prog_attach" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7TkVUS0lUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21wcm9nX2F0dGFjaCYjMzQ7LAogICAgJiMzNDticGZfbXByb2dfZGV0YWNoJiMzNDssCiAgICAmIzM0O19fY2dyb3VwX2JwZl9hdHRhY2gmIzM0OywKICAgICYjMzQ7X19jZ3JvdXBfYnBmX3JlcGxhY2UmIzM0OywKICAgICYjMzQ7YnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2hvd19mZGluZm8mIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQmIzM0OywKICAgICYjMzQ7bmV0a2l0X3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O3RjeF9wcm9nX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiBsb2dpYyBmb3IgYXR0YWNoaW5nIGFuZCBkZXRhY2hpbmcgbXVsdGktcHJvZ3MgKGJwZl9tcHJvZ19hdHRhY2gsIGJwZl9tcHJvZ19kZXRhY2gpIHRvIGVuZm9yY2UgZXhwZWN0ZWQgbGluayB0eXBlcywgc3BlY2lmaWNhbGx5IGZvciBORVRLSVQgYW5kIFRDWC4gSXQgYWxzbyB1cGRhdGVzIGNncm91cCBCUEYgYXR0YWNoL3JlcGxhY2UgbG9naWMgdG8gcHJvcGVybHkgaGFuZGxlIEJQRiBjZ3JvdXAgc3RvcmFnZSwgYW5kIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZy4gQWRkaXRpb25hbGx5LCBpdCBmaXhlcyBSQ1UgbG9ja2luZyBpbiBicGZfbGlua19zaG93X2ZkaW5mbyBhbmQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjFmNzVmMzUxODA2ODUxYmUyYjE5NGMyMDk0MGJjY2JkODIyZTBmMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDAyOjE0OjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGtpdC5jIGIvZHJpdmVycy9uZXQvbmV0a2l0LmNcbmluZGV4IGEzOTMxY2Q4MjEzMjFjLi45OWRkZjJiZWZiMjM4MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGtpdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRraXQuY1xuQEAgLTc2OCw3ICYjNDM7NzY4LDcgQEAgaW50IG5ldGtpdF9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0fVxuIFx0cmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgXHUwMDI2ZW50cnlfbmV3LCBwcm9nLCBOVUxMLCByZXBsYWNlX3Byb2csXG4gXHRcdFx0ICAgICAgIGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzLCBhdHRyLVx1MDAzZXJlbGF0aXZlX2ZkLFxuLVx0XHRcdCAgICAgICBhdHRyLVx1MDAzZWV4cGVjdGVkX3JldmlzaW9uKTtcbiYjNDM7XHRcdFx0ICAgICAgIGF0dHItXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfTkVUS0lUKTtcbiBcdGlmICghcmV0KSB7XG4gXHRcdGlmIChlbnRyeSAhPSBlbnRyeV9uZXcpIHtcbiBcdFx0XHRuZXRraXRfZW50cnlfdXBkYXRlKGRldiwgZW50cnlfbmV3KTtcbkBAIC04MDIsNyAmIzQzOzgwMiw3IEBAIGludCBuZXRraXRfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIHByb2csIE5VTEwsIGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzLFxuLVx0XHRcdCAgICAgICBhdHRyLVx1MDAzZXJlbGF0aXZlX2ZkLCBhdHRyLVx1MDAzZWV4cGVjdGVkX3JldmlzaW9uKTtcbiYjNDM7XHRcdFx0ICAgICAgIGF0dHItXHUwMDNlcmVsYXRpdmVfZmQsIGF0dHItXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfTkVUS0lUKTtcbiBcdGlmICghcmV0KSB7XG4gXHRcdGlmICghYnBmX21wcm9nX3RvdGFsKGVudHJ5X25ldykpXG4gXHRcdFx0ZW50cnlfbmV3ID0gTlVMTDtcbkBAIC04NTAsNyAmIzQzOzg1MCw3IEBAIHN0YXRpYyBpbnQgbmV0a2l0X2xpbmtfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9saW5rICpsaW5rLCB1MzIgZmxhZ3MsXG4gXHRBU1NFUlRfUlROTCgpO1xuIFx0ZW50cnkgPSBuZXRraXRfZW50cnlfZmV0Y2goZGV2LCB0cnVlKTtcbiBcdHJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksIFx1MDAyNmVudHJ5X25ldywgbGluay1cdTAwM2Vwcm9nLCBsaW5rLCBOVUxMLCBmbGFncyxcbi1cdFx0XHQgICAgICAgaWRfb3JfZmQsIHJldmlzaW9uKTtcbiYjNDM7XHRcdFx0ICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbiwgQlBGX0xJTktfVFlQRV9ORVRLSVQpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0aWYgKGVudHJ5ICE9IGVudHJ5X25ldykge1xuIFx0XHRcdG5ldGtpdF9lbnRyeV91cGRhdGUoZGV2LCBlbnRyeV9uZXcpO1xuQEAgLTg3Nyw3ICYjNDM7ODc3LDcgQEAgc3RhdGljIHZvaWQgbmV0a2l0X2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4gXHRcdHJldCA9IC1FTk9FTlQ7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuLVx0cmV0ID0gYnBmX21wcm9nX2RldGFjaChlbnRyeSwgXHUwMDI2ZW50cnlfbmV3LCBsaW5rLVx1MDAzZXByb2csIGxpbmssIDAsIDAsIDApO1xuJiM0MztcdHJldCA9IGJwZl9tcHJvZ19kZXRhY2goZW50cnksIFx1MDAyNmVudHJ5X25ldywgbGluay1cdTAwM2Vwcm9nLCBsaW5rLCAwLCAwLCAwLCBCUEZfTElOS19UWVBFX05FVEtJVCk7XG4gXHRpZiAoIXJldCkge1xuIFx0XHRpZiAoIWJwZl9tcHJvZ190b3RhbChlbnRyeV9uZXcpKVxuIFx0XHRcdGVudHJ5X25ldyA9IE5VTEw7XG5AQCAtOTE5LDkgJiM0Mzs5MTksOCBAQCBzdGF0aWMgaW50IG5ldGtpdF9saW5rX3VwZGF0ZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbnByb2csXG4gXHRcdHJldCA9IC1FTk9FTlQ7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuLVx0cmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgXHUwMDI2ZW50cnlfbmV3LCBucHJvZywgbGluaywgb3Byb2csXG4tXHRcdFx0ICAgICAgIEJQRl9GX1JFUExBQ0UgfCBCUEZfRl9JRCxcbi1cdFx0XHQgICAgICAgbGluay1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZCwgMCk7XG4mIzQzO1x0cmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgXHUwMDI2ZW50cnlfbmV3LCBucHJvZywgbGluaywgb3Byb2csIEJQRl9GX1JFUExBQ0UgfCBCUEZfRl9JRCxcbiYjNDM7XHRcdFx0ICAgICAgIGxpbmstXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlaWQsIDAsIEJQRl9MSU5LX1RZUEVfTkVUS0lUKTtcbiBcdGlmICghcmV0KSB7XG4gXHRcdFdBUk5fT05fT05DRShlbnRyeSAhPSBlbnRyeV9uZXcpO1xuIFx0XHRvcHJvZyA9IHhjaGcoXHUwMDI2bGluay1cdTAwM2Vwcm9nLCBucHJvZyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfbXByb2cuaCBiL2luY2x1ZGUvbGludXgvYnBmX21wcm9nLmhcbmluZGV4IDBiOWY0Y2FlZWIwYTMyLi4xZmJlMWE5MjM5NjhmYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX21wcm9nLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX21wcm9nLmhcbkBAIC0zMjEsMTIgJiM0MzszMjEsMTQgQEAgaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHRcdCAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldyxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dfbmV3LCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4gXHRcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nX29sZCxcbi1cdFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uKTtcbiYjNDM7XHRcdCAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbixcbiYjNDM7XHRcdCAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSk7XG4gXG4gaW50IGJwZl9tcHJvZ19kZXRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHRcdCAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldyxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfbGluayAqbGluayxcbi1cdFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uKTtcbiYjNDM7XHRcdCAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbixcbiYjNDM7XHRcdCAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSk7XG4gXG4gaW50IGJwZl9tcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cixcbiBcdFx0ICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5KTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuaW5kZXggNDM1NWNjYjc4YTljNjcuLjU2ZDUzOGYwNTUyMDA0IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuQEAgLTgxMywxMCAmIzQzOzgxMywxMiBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cgPSBOVUxMO1xuIFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4mIzQzO1x0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuIFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXHUwMDNlbGluay5wcm9nO1xuIFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xuJiM0MztcdHU4IG9sZF9mbGFncztcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAoKChmbGFncyBcdTAwMjYgQlBGX0ZfQUxMT1dfT1ZFUlJJREUpIFx1MDAyNlx1MDAyNiAoZmxhZ3MgXHUwMDI2IEJQRl9GX0FMTE9XX01VTFRJKSkgfHxcbkBAIC04ODMsNyAmIzQzOzg4NSwxMCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbiBcdHBsLVx1MDAzZXByb2cgPSBwcm9nO1xuIFx0cGwtXHUwMDNlbGluayA9IGxpbms7XG4gXHRwbC1cdTAwM2VmbGFncyA9IGZsYWdzO1xuJiM0MztcdGlmIChvbGRfcHJvZylcbiYjNDM7XHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC1cdTAwM2VzdG9yYWdlKTtcbiBcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xuJiM0MztcdG9sZF9mbGFncyA9IGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXTtcbiBcdGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IHNhdmVkX2ZsYWdzO1xuIFxuIFx0aWYgKHR5cGUgPT0gQlBGX0xTTV9DR1JPVVApIHtcbkBAIC05MTUsMTIgJiM0Mzs5MjAsMTQgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRpZiAob2xkX3Byb2cpIHtcbiBcdFx0cGwtXHUwMDNlcHJvZyA9IG9sZF9wcm9nO1xuIFx0XHRwbC1cdTAwM2VsaW5rID0gTlVMTDtcbiYjNDM7XHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcbiBcdH1cbiBcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XG4gXHRpZiAoIW9sZF9wcm9nKSB7XG4gXHRcdGhsaXN0X2RlbChcdTAwMjZwbC1cdTAwM2Vub2RlKTtcbiBcdFx0a2ZyZWUocGwpO1xuIFx0fVxuJiM0MztcdGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IG9sZF9mbGFncztcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTEwMzIsMTEgJiM0MzsxMDM5LDE3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbiBcdFx0XHRcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXG4gXHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4mIzQzO1x0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuJiM0MztcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7XG4gXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG4mIzQzO1x0Ym9vbCBzdG9yYWdlX2NoYW5nZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7XG4gXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7XG4gXHRib29sIGZvdW5kID0gZmFsc2U7XG4mIzQzO1x0aW50IGVycjtcbiBcbiBcdGF0eXBlID0gYnBmX2Nncm91cF9hdHlwZV9maW5kKGxpbmstXHUwMDNlbGluay5hdHRhY2hfdHlwZSwgbmV3X3Byb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGZfaWQpO1xuIFx0aWYgKGF0eXBlIFx1MDAzYyAwKVxuQEAgLTEwNTYsMTAgJiM0MzsxMDY5LDM5IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbiBcdGlmICghZm91bmQpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuJiM0MztcdGlmIChicGZfY2dyb3VwX3N0b3JhZ2VzX2FsbG9jKHN0b3JhZ2UsIG5ld19zdG9yYWdlLCBsaW5rLVx1MDAzZWxpbmsuYXR0YWNoX3R5cGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgbmV3X3Byb2csIGNncnApKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHtcbiYjNDM7XHRcdGlmIChzdG9yYWdlW3N0eXBlXSAhPSBwbC1cdTAwM2VzdG9yYWdlW3N0eXBlXSkge1xuJiM0MztcdFx0XHRzdG9yYWdlX2NoYW5nZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0Y2dycC1cdTAwM2VicGYucmV2aXNpb25zW2F0eXBlXSAmIzQzOz0gMTtcbiBcdG9sZF9wcm9nID0geGNoZyhcdTAwMjZsaW5rLVx1MDAzZWxpbmsucHJvZywgbmV3X3Byb2cpO1xuLVx0cmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXN0b3JhZ2VfY2hhbmdlZCkge1xuJiM0MztcdFx0cmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpO1xuJiM0MztcdFx0YnBmX3Byb2dfcHV0KG9sZF9wcm9nKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVx1MDAzZXN0b3JhZ2UpO1xuJiM0MztcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xuJiM0MztcdGVyciA9IHVwZGF0ZV9lZmZlY3RpdmVfcHJvZ3MoY2dycCwgYXR5cGUpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdHhjaGcoXHUwMDI2bGluay1cdTAwM2VsaW5rLnByb2csIG9sZF9wcm9nKTtcbiYjNDM7XHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcbiYjNDM7XHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XG4mIzQzO1x0XHRjZ3JwLVx1MDAzZWJwZi5yZXZpc2lvbnNbYXR5cGVdIC09IDE7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRicGZfcHJvZ19wdXQob2xkX3Byb2cpO1xuJiM0MztcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfbGluayhuZXdfc3RvcmFnZSwgY2dycCwgbGluay1cdTAwM2VsaW5rLmF0dGFjaF90eXBlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21wcm9nLmMgYi9rZXJuZWwvYnBmL21wcm9nLmNcbmluZGV4IDEzOTQxNjgwNjJlODU2Li5iNGExYjM1ZmY1NjkzNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvbXByb2cuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tcHJvZy5jXG5AQCAtNiw3ICYjNDM7Niw3IEBAXG4gXG4gc3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcbiBcdFx0XHQgIHUzMiBpZF9vcl9mZCwgdTMyIGZsYWdzLFxuLVx0XHRcdCAgZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXG4mIzQzO1x0XHRcdCAgZW51bSBicGZfbGlua190eXBlIHR5cGUpXG4ge1xuIFx0c3RydWN0IGJwZl9saW5rICpsaW5rID0gRVJSX1BUUigtRUlOVkFMKTtcbiBcdGJvb2wgaWQgPSBmbGFncyBcdTAwMjYgQlBGX0ZfSUQ7XG5AQCAtMTcsNyAmIzQzOzE3LDcgQEAgc3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcbiBcdFx0bGluayA9IGJwZl9saW5rX2dldF9mcm9tX2ZkKGlkX29yX2ZkKTtcbiBcdGlmIChJU19FUlIobGluaykpXG4gXHRcdHJldHVybiBQVFJfRVJSKGxpbmspO1xuLVx0aWYgKHR5cGUgXHUwMDI2XHUwMDI2IGxpbmstXHUwMDNlcHJvZy1cdTAwM2V0eXBlICE9IHR5cGUpIHtcbiYjNDM7XHRpZiAodHlwZSBcdTAwMjZcdTAwMjYgbGluay1cdTAwM2V0eXBlICE9IHR5cGUpIHtcbiBcdFx0YnBmX2xpbmtfcHV0KGxpbmspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbkBAIC01MiwyMSAmIzQzOzUyLDIyIEBAIHN0YXRpYyBpbnQgYnBmX21wcm9nX3Byb2coc3RydWN0IGJwZl90dXBsZSAqdHVwbGUsXG4gXG4gc3RhdGljIGludCBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmUoc3RydWN0IGJwZl90dXBsZSAqdHVwbGUsXG4gXHRcdFx0XHQgICAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsXG4tXHRcdFx0XHQgICAgZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXG4mIzQzO1x0XHRcdFx0ICAgIGVudW0gYnBmX2xpbmtfdHlwZSBsdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKVxuIHtcbiBcdGJvb2wgbGluayA9IGZsYWdzIFx1MDAyNiBCUEZfRl9MSU5LO1xuIFx0Ym9vbCBpZCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9JRDtcbiBcbiBcdG1lbXNldCh0dXBsZSwgMCwgc2l6ZW9mKCp0dXBsZSkpO1xuIFx0aWYgKGxpbmspXG4tXHRcdHJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCB0eXBlKTtcbiYjNDM7XHRcdHJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCBsdHlwZSk7XG4gXHQvKiBJZiBubyByZWxldmFudCBmbGFnIGlzIHNldCBhbmQgbm8gaWRfb3JfZmQgd2FzIHBhc3NlZCwgdGhlblxuIFx0ICogdHVwbGUgbGluay9wcm9nIGlzIGp1c3QgTlVMTGVkLiBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gYmVmb3JlL1xuIFx0ICogYWZ0ZXIgc2VsZWN0cyBmaXJzdC9sYXN0IHBvc2l0aW9uIHdpdGhvdXQgcGFzc2luZyBmZC5cbiBcdCAqL1xuIFx0aWYgKCFpZCBcdTAwMjZcdTAwMjYgIWlkX29yX2ZkKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBicGZfbXByb2dfcHJvZyh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCB0eXBlKTtcbiYjNDM7XHRyZXR1cm4gYnBmX21wcm9nX3Byb2codHVwbGUsIGlkX29yX2ZkLCBmbGFncywgcHR5cGUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBicGZfbXByb2dfdHVwbGVfcHV0KHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlKVxuQEAgLTIyNiw3ICYjNDM7MjI3LDggQEAgaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHRcdCAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldyxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dfbmV3LCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4gXHRcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nX29sZCxcbi1cdFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uKVxuJiM0MztcdFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uLFxuJiM0MztcdFx0ICAgICBlbnVtIGJwZl9saW5rX3R5cGUgZXhwZWN0ZWRfbGlua190eXBlKVxuIHtcbiBcdHN0cnVjdCBicGZfdHVwbGUgcnR1cGxlLCBudHVwbGUgPSB7XG4gXHRcdC5wcm9nID0gcHJvZ19uZXcsXG5AQCAtMjQzLDYgJiM0MzsyNDUsNyBAQCBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRyZXQgPSBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmUoXHUwMDI2cnR1cGxlLCBpZF9vcl9mZCxcbiBcdFx0XHRcdCAgICAgICBmbGFncyBcdTAwMjYgfkJQRl9GX1JFUExBQ0UsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGV4cGVjdGVkX2xpbmtfdHlwZSxcbiBcdFx0XHRcdCAgICAgICBwcm9nX25ldy1cdTAwM2V0eXBlKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5AQCAtMzI4LDcgJiM0MzszMzEsOCBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19mZXRjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcbiBpbnQgYnBmX21wcm9nX2RldGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LFxuIFx0XHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLVx0XHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24pXG4mIzQzO1x0XHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24sXG4mIzQzO1x0XHQgICAgIGVudW0gYnBmX2xpbmtfdHlwZSBleHBlY3RlZF9saW5rX3R5cGUpXG4ge1xuIFx0c3RydWN0IGJwZl90dXBsZSBydHVwbGUsIGR0dXBsZSA9IHtcbiBcdFx0LnByb2cgPSBwcm9nLFxuQEAgLTM0Myw4ICYjNDM7MzQ3LDkgQEAgaW50IGJwZl9tcHJvZ19kZXRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHRpZiAoIWJwZl9tcHJvZ190b3RhbChlbnRyeSkpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFx0cmV0ID0gYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlKFx1MDAyNnJ0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLFxuLVx0XHRcdFx0ICAgICAgIHByb2cgPyBwcm9nLVx1MDAzZXR5cGUgOlxuLVx0XHRcdFx0ICAgICAgIEJQRl9QUk9HX1RZUEVfVU5TUEVDKTtcbiYjNDM7XHRcdFx0XHQgICAgICAgZXhwZWN0ZWRfbGlua190eXBlLFxuJiM0MztcdFx0XHRcdCAgICAgICAvKiBVc2UgVU5TUEVDIGFzIHdpbGRjYXJkIHdoZW4gcHJvZyBpcyBOVUxMICovXG4mIzQzO1x0XHRcdFx0ICAgICAgIHByb2cgPyBwcm9nLVx1MDAzZXR5cGUgOiBCUEZfUFJPR19UWVBFX1VOU1BFQyk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0aWYgKGR0dXBsZS5wcm9nKSB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xuaW5kZXggMjVmMzBmOWVkYWVmZDMuLjlmYzYyZGIxNDQxYzYyIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXG5AQCAtMTcxLDEzICYjNDM7MTcxLDE3IEBAIHN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0aW50IGlkeCwgcmV0O1xuIFxuLVx0aWYgKG9sZF9wcm9nIFx1MDAyNlx1MDAyNiBvbGRfcHJvZyAhPSBsaW5rLVx1MDAzZXByb2cpXG4tXHRcdHJldHVybiAtRVBFUk07XG4tXHRpZiAobmV3X3Byb2ctXHUwMDNldHlwZSAhPSBsaW5rLVx1MDAzZXByb2ctXHUwMDNldHlwZSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4gXHRtdXRleF9sb2NrKFx1MDAyNm5ldG5zX2JwZl9tdXRleCk7XG4gXG4mIzQzO1x0aWYgKG9sZF9wcm9nIFx1MDAyNlx1MDAyNiBvbGRfcHJvZyAhPSBsaW5rLVx1MDAzZXByb2cpIHtcbiYjNDM7XHRcdHJldCA9IC1FUEVSTTtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKG5ld19wcm9nLVx1MDAzZXR5cGUgIT0gbGluay1cdTAwM2Vwcm9nLVx1MDAzZXR5cGUpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG5ldCA9IG5ldF9saW5rLVx1MDAzZW5ldDtcbiBcdGlmICghbmV0IHx8ICFjaGVja19uZXQobmV0KSkge1xuIFx0XHQvKiBMaW5rIGF1dG8tZGV0YWNoZWQgb3IgbmV0bnMgZHlpbmcgKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ZGIzMDZkMjNiNDc5Zi4uY2FkOTg2ODA3ZDUzMDMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC0zNDcxLDkgJiM0MzszNDcxLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpicGZfbGlua190eXBlX3N0cnNbXSA9IHtcbiBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuLVx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nID0gbGluay1cdTAwM2Vwcm9nO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbiBcdGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlID0gbGluay1cdTAwM2V0eXBlO1xuIFx0Y2hhciBwcm9nX3RhZ1tzaXplb2YocHJvZy1cdTAwM2V0YWcpICogMiAmIzQzOyAxXSA9IHsgfTtcbiYjNDM7XHR1MzIgcHJvZ19pZDtcbiBcbiBcdGlmICh0eXBlIFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9saW5rX3R5cGVfc3RycykgXHUwMDI2XHUwMDI2IGJwZl9saW5rX3R5cGVfc3Ryc1t0eXBlXSkge1xuIFx0XHRpZiAobGluay1cdTAwM2V0eXBlID09IEJQRl9MSU5LX1RZUEVfS1BST0JFX01VTFRJKVxuQEAgLTM0OTAsMTMgJiM0MzszNDkxLDIwIEBAIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXG4gXHR9XG4gXHRzZXFfcHJpbnRmKG0sIFwmIzM0O2xpbmtfaWQ6XFx0JXVcXG5cJiMzNDssIGxpbmstXHUwMDNlaWQpO1xuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRwcm9nID0gUkVBRF9PTkNFKGxpbmstXHUwMDNlcHJvZyk7XG4gXHRpZiAocHJvZykge1xuIFx0XHRiaW4yaGV4KHByb2dfdGFnLCBwcm9nLVx1MDAzZXRhZywgc2l6ZW9mKHByb2ctXHUwMDNldGFnKSk7XG4mIzQzO1x0XHRwcm9nX2lkID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlaWQ7XG4mIzQzO1x0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvZykge1xuIFx0XHRzZXFfcHJpbnRmKG0sXG4gXHRcdFx0ICAgXCYjMzQ7cHJvZ190YWc6XFx0JXNcXG5cJiMzNDtcbiBcdFx0XHQgICBcJiMzNDtwcm9nX2lkOlxcdCV1XFxuXCYjMzQ7LFxuIFx0XHRcdCAgIHByb2dfdGFnLFxuLVx0XHRcdCAgIHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkKTtcbiYjNDM7XHRcdFx0ICAgcHJvZ19pZCk7XG4gXHR9XG4gXHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNlc2hvd19mZGluZm8pXG4gXHRcdGxpbmstXHUwMDNlb3BzLVx1MDAzZXNob3dfZmRpbmZvKGxpbmssIG0pO1xuQEAgLTU1MzUsNiAmIzQzOzU1NDMsNyBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuIHtcbiBcdHN0cnVjdCBicGZfbGlua19pbmZvIF9fdXNlciAqdWluZm8gPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2VpbmZvLmluZm8pO1xuIFx0c3RydWN0IGJwZl9saW5rX2luZm8gaW5mbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4gXHR1MzIgaW5mb19sZW4gPSBhdHRyLVx1MDAzZWluZm8uaW5mb19sZW47XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTU1NDksOCAmIzQzOzU1NTgsMTIgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcbiBcdGluZm8udHlwZSA9IGxpbmstXHUwMDNldHlwZTtcbiBcdGluZm8uaWQgPSBsaW5rLVx1MDAzZWlkO1xuLVx0aWYgKGxpbmstXHUwMDNlcHJvZylcbi1cdFx0aW5mby5wcm9nX2lkID0gbGluay1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZDtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHByb2cgPSBSRUFEX09OQ0UobGluay1cdTAwM2Vwcm9nKTtcbiYjNDM7XHRpZiAocHJvZylcbiYjNDM7XHRcdGluZm8ucHJvZ19pZCA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZWZpbGxfbGlua19pbmZvKSB7XG4gXHRcdGVyciA9IGxpbmstXHUwMDNlb3BzLVx1MDAzZWZpbGxfbGlua19pbmZvKGxpbmssIFx1MDAyNmluZm8pO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdGN4LmMgYi9rZXJuZWwvYnBmL3RjeC5jXG5pbmRleCAwMmRiMDExM2I4ZTdjNi4uZjIwOGNlZjEzYTk4ZTMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3RjeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3RjeC5jXG5AQCAtMzgsNyAmIzQzOzM4LDcgQEAgaW50IHRjeF9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0fVxuIFx0cmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgXHUwMDI2ZW50cnlfbmV3LCBwcm9nLCBOVUxMLCByZXBsYWNlX3Byb2csXG4gXHRcdFx0ICAgICAgIGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzLCBhdHRyLVx1MDAzZXJlbGF0aXZlX2ZkLFxuLVx0XHRcdCAgICAgICBhdHRyLVx1MDAzZWV4cGVjdGVkX3JldmlzaW9uKTtcbiYjNDM7XHRcdFx0ICAgICAgIGF0dHItXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfVENYKTtcbiBcdGlmICghcmV0KSB7XG4gXHRcdGlmIChlbnRyeSAhPSBlbnRyeV9uZXcpIHtcbiBcdFx0XHR0Y3hfZW50cnlfdXBkYXRlKGRldiwgZW50cnlfbmV3LCBpbmdyZXNzKTtcbkBAIC03Niw3ICYjNDM7NzYsNyBAQCBpbnQgdGN4X3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFx0cmV0ID0gYnBmX21wcm9nX2RldGFjaChlbnRyeSwgXHUwMDI2ZW50cnlfbmV3LCBwcm9nLCBOVUxMLCBhdHRyLVx1MDAzZWF0dGFjaF9mbGFncyxcbi1cdFx0XHQgICAgICAgYXR0ci1cdTAwM2VyZWxhdGl2ZV9mZCwgYXR0ci1cdTAwM2VleHBlY3RlZF9yZXZpc2lvbik7XG4mIzQzO1x0XHRcdCAgICAgICBhdHRyLVx1MDAzZXJlbGF0aXZlX2ZkLCBhdHRyLVx1MDAzZWV4cGVjdGVkX3JldmlzaW9uLCBCUEZfTElOS19UWVBFX1RDWCk7XG4gXHRpZiAoIXJldCkge1xuIFx0XHRpZiAoIXRjeF9lbnRyeV9pc19hY3RpdmUoZW50cnlfbmV3KSlcbiBcdFx0XHRlbnRyeV9uZXcgPSBOVUxMO1xuQEAgLTE1Miw3ICYjNDM7MTUyLDcgQEAgc3RhdGljIGludCB0Y3hfbGlua19wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLFxuIFx0aWYgKCFlbnRyeSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIGxpbmstXHUwMDNlcHJvZywgbGluaywgTlVMTCwgZmxhZ3MsXG4tXHRcdFx0ICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbik7XG4mIzQzO1x0XHRcdCAgICAgICBpZF9vcl9mZCwgcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfVENYKTtcbiBcdGlmICghcmV0KSB7XG4gXHRcdGlmIChlbnRyeSAhPSBlbnRyeV9uZXcpIHtcbiBcdFx0XHR0Y3hfZW50cnlfdXBkYXRlKGRldiwgZW50cnlfbmV3LCBpbmdyZXNzKTtcbkBAIC0xODMsNyAmIzQzOzE4Myw3IEBAIHN0YXRpYyB2b2lkIHRjeF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxuIFx0XHRyZXQgPSAtRU5PRU5UO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbi1cdHJldCA9IGJwZl9tcHJvZ19kZXRhY2goZW50cnksIFx1MDAyNmVudHJ5X25ldywgbGluay1cdTAwM2Vwcm9nLCBsaW5rLCAwLCAwLCAwKTtcbiYjNDM7XHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIGxpbmstXHUwMDNlcHJvZywgbGluaywgMCwgMCwgMCwgQlBGX0xJTktfVFlQRV9UQ1gpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0aWYgKCF0Y3hfZW50cnlfaXNfYWN0aXZlKGVudHJ5X25ldykpXG4gXHRcdFx0ZW50cnlfbmV3ID0gTlVMTDtcbkBAIC0yMjksOSAmIzQzOzIyOSw4IEBAIHN0YXRpYyBpbnQgdGN4X2xpbmtfdXBkYXRlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpucHJvZyxcbiBcdFx0cmV0ID0gLUVOT0VOVDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4tXHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIG5wcm9nLCBsaW5rLCBvcHJvZyxcbi1cdFx0XHQgICAgICAgQlBGX0ZfUkVQTEFDRSB8IEJQRl9GX0lELFxuLVx0XHRcdCAgICAgICBsaW5rLVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWlkLCAwKTtcbiYjNDM7XHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIG5wcm9nLCBsaW5rLCBvcHJvZywgQlBGX0ZfUkVQTEFDRSB8IEJQRl9GX0lELFxuJiM0MztcdFx0XHQgICAgICAgbGluay1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZCwgMCwgQlBGX0xJTktfVFlQRV9UQ1gpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0V0FSTl9PTl9PTkNFKGVudHJ5ICE9IGVudHJ5X25ldyk7XG4gXHRcdG9wcm9nID0geGNoZyhcdTAwMjZsaW5rLVx1MDAzZXByb2csIG5wcm9nKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtORVRLSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbXByb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2JwZl9tcHJvZ19kZXRhY2gmIzM0OywKICAgICYjMzQ7X19jZ3JvdXBfYnBmX2F0dGFjaCYjMzQ7LAogICAgJiMzNDtfX2Nncm91cF9icGZfcmVwbGFjZSYjMzQ7LAogICAgJiMzNDticGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyYjMzQ7LAogICAgJiMzNDticGZfbGlua19zaG93X2ZkaW5mbyYjMzQ7LAogICAgJiMzNDticGZfbGlua19nZXRfaW5mb19ieV9mZCYjMzQ7LAogICAgJiMzNDtuZXRraXRfcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7dGN4X3Byb2dfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIGxvZ2ljIGZvciBhdHRhY2hpbmcgYW5kIGRldGFjaGluZyBtdWx0aS1wcm9ncyAoYnBmX21wcm9nX2F0dGFjaCwgYnBmX21wcm9nX2RldGFjaCkgdG8gZW5mb3JjZSBleHBlY3RlZCBsaW5rIHR5cGVzLCBzcGVjaWZpY2FsbHkgZm9yIE5FVEtJVCBhbmQgVENYLiBJdCBhbHNvIHVwZGF0ZXMgY2dyb3VwIEJQRiBhdHRhY2gvcmVwbGFjZSBsb2dpYyB0byBwcm9wZXJseSBoYW5kbGUgQlBGIGNncm91cCBzdG9yYWdlLCBhbmQgZml4ZXMgYSBsb2NraW5nIGlzc3VlIGluIGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nLiBBZGRpdGlvbmFsbHksIGl0IGZpeGVzIFJDVSBsb2NraW5nIGluIGJwZl9saW5rX3Nob3dfZmRpbmZvIGFuZCBicGZfbGlua19nZXRfaW5mb19ieV9mZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIxZjc1ZjM1MTgwNjg1MWJlMmIxOTRjMjA5NDBiY2NiZDgyMmUwZjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyMyAwMjoxNDo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGtpdC5jIGIvZHJpdmVycy9uZXQvbmV0a2l0LmMKaW5kZXggYTM5MzFjZDgyMTMyMWMuLjk5ZGRmMmJlZmIyMzgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRraXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRraXQuYwpAQCAtNzY4LDcgJiM0Mzs3NjgsNyBAQCBpbnQgbmV0a2l0X3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiAJfQogCXJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksICZhbXA7ZW50cnlfbmV3LCBwcm9nLCBOVUxMLCByZXBsYWNlX3Byb2csCiAJCQkgICAgICAgYXR0ci0mZ3Q7YXR0YWNoX2ZsYWdzLCBhdHRyLSZndDtyZWxhdGl2ZV9mZCwKLQkJCSAgICAgICBhdHRyLSZndDtleHBlY3RlZF9yZXZpc2lvbik7CiYjNDM7CQkJICAgICAgIGF0dHItJmd0O2V4cGVjdGVkX3JldmlzaW9uLCBCUEZfTElOS19UWVBFX05FVEtJVCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKGVudHJ5ICE9IGVudHJ5X25ldykgewogCQkJbmV0a2l0X2VudHJ5X3VwZGF0ZShkZXYsIGVudHJ5X25ldyk7CkBAIC04MDIsNyAmIzQzOzgwMiw3IEBAIGludCBuZXRraXRfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIAkJZ290byBvdXQ7CiAJfQogCXJldCA9IGJwZl9tcHJvZ19kZXRhY2goZW50cnksICZhbXA7ZW50cnlfbmV3LCBwcm9nLCBOVUxMLCBhdHRyLSZndDthdHRhY2hfZmxhZ3MsCi0JCQkgICAgICAgYXR0ci0mZ3Q7cmVsYXRpdmVfZmQsIGF0dHItJmd0O2V4cGVjdGVkX3JldmlzaW9uKTsKJiM0MzsJCQkgICAgICAgYXR0ci0mZ3Q7cmVsYXRpdmVfZmQsIGF0dHItJmd0O2V4cGVjdGVkX3JldmlzaW9uLCBCUEZfTElOS19UWVBFX05FVEtJVCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKCFicGZfbXByb2dfdG90YWwoZW50cnlfbmV3KSkKIAkJCWVudHJ5X25ldyA9IE5VTEw7CkBAIC04NTAsNyAmIzQzOzg1MCw3IEBAIHN0YXRpYyBpbnQgbmV0a2l0X2xpbmtfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9saW5rICpsaW5rLCB1MzIgZmxhZ3MsCiAJQVNTRVJUX1JUTkwoKTsKIAllbnRyeSA9IG5ldGtpdF9lbnRyeV9mZXRjaChkZXYsIHRydWUpOwogCXJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksICZhbXA7ZW50cnlfbmV3LCBsaW5rLSZndDtwcm9nLCBsaW5rLCBOVUxMLCBmbGFncywKLQkJCSAgICAgICBpZF9vcl9mZCwgcmV2aXNpb24pOwomIzQzOwkJCSAgICAgICBpZF9vcl9mZCwgcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfTkVUS0lUKTsKIAlpZiAoIXJldCkgewogCQlpZiAoZW50cnkgIT0gZW50cnlfbmV3KSB7CiAJCQluZXRraXRfZW50cnlfdXBkYXRlKGRldiwgZW50cnlfbmV3KTsKQEAgLTg3Nyw3ICYjNDM7ODc3LDcgQEAgc3RhdGljIHZvaWQgbmV0a2l0X2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspCiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gb3V0OwogCX0KLQlyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCAmYW1wO2VudHJ5X25ldywgbGluay0mZ3Q7cHJvZywgbGluaywgMCwgMCwgMCk7CiYjNDM7CXJldCA9IGJwZl9tcHJvZ19kZXRhY2goZW50cnksICZhbXA7ZW50cnlfbmV3LCBsaW5rLSZndDtwcm9nLCBsaW5rLCAwLCAwLCAwLCBCUEZfTElOS19UWVBFX05FVEtJVCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKCFicGZfbXByb2dfdG90YWwoZW50cnlfbmV3KSkKIAkJCWVudHJ5X25ldyA9IE5VTEw7CkBAIC05MTksOSAmIzQzOzkxOSw4IEBAIHN0YXRpYyBpbnQgbmV0a2l0X2xpbmtfdXBkYXRlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpucHJvZywKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byBvdXQ7CiAJfQotCXJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksICZhbXA7ZW50cnlfbmV3LCBucHJvZywgbGluaywgb3Byb2csCi0JCQkgICAgICAgQlBGX0ZfUkVQTEFDRSB8IEJQRl9GX0lELAotCQkJICAgICAgIGxpbmstJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7aWQsIDApOwomIzQzOwlyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCAmYW1wO2VudHJ5X25ldywgbnByb2csIGxpbmssIG9wcm9nLCBCUEZfRl9SRVBMQUNFIHwgQlBGX0ZfSUQsCiYjNDM7CQkJICAgICAgIGxpbmstJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7aWQsIDAsIEJQRl9MSU5LX1RZUEVfTkVUS0lUKTsKIAlpZiAoIXJldCkgewogCQlXQVJOX09OX09OQ0UoZW50cnkgIT0gZW50cnlfbmV3KTsKIAkJb3Byb2cgPSB4Y2hnKCZhbXA7bGluay0mZ3Q7cHJvZywgbnByb2cpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfbXByb2cuaCBiL2luY2x1ZGUvbGludXgvYnBmX21wcm9nLmgKaW5kZXggMGI5ZjRjYWVlYjBhMzIuLjFmYmUxYTkyMzk2OGZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl9tcHJvZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX21wcm9nLmgKQEAgLTMyMSwxMiAmIzQzOzMyMSwxNCBAQCBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSwKIAkJICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LAogCQkgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZ19uZXcsIHN0cnVjdCBicGZfbGluayAqbGluaywKIAkJICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dfb2xkLAotCQkgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24pOwomIzQzOwkJICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uLAomIzQzOwkJICAgICBlbnVtIGJwZl9saW5rX3R5cGUgZXhwZWN0ZWRfbGlua190eXBlKTsKIAogaW50IGJwZl9tcHJvZ19kZXRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksCiAJCSAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldywKIAkJICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfbGluayAqbGluaywKLQkJICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uKTsKJiM0MzsJCSAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbiwKJiM0MzsJCSAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSk7CiAKIGludCBicGZfbXByb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIsCiAJCSAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuYwppbmRleCA0MzU1Y2NiNzhhOWM2Ny4uNTZkNTM4ZjA1NTIwMDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuYwpAQCAtODEzLDEwICYjNDM7ODEzLDEyIEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCXN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cgPSBOVUxMOwogCXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwogCXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTsKJiM0MzsJc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwogCXN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLSZndDtsaW5rLnByb2c7CiAJZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlOwogCXN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7CiYjNDM7CXU4IG9sZF9mbGFnczsKIAlpbnQgZXJyOwogCiAJaWYgKCgoZmxhZ3MgJmFtcDsgQlBGX0ZfQUxMT1dfT1ZFUlJJREUpICZhbXA7JmFtcDsgKGZsYWdzICZhbXA7IEJQRl9GX0FMTE9XX01VTFRJKSkgfHwKQEAgLTg4Myw3ICYjNDM7ODg1LDEwIEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCXBsLSZndDtwcm9nID0gcHJvZzsKIAlwbC0mZ3Q7bGluayA9IGxpbms7CiAJcGwtJmd0O2ZsYWdzID0gZmxhZ3M7CiYjNDM7CWlmIChvbGRfcHJvZykKJiM0MzsJCWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC0mZ3Q7c3RvcmFnZSk7CiAJYnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtJmd0O3N0b3JhZ2UsIHN0b3JhZ2UpOwomIzQzOwlvbGRfZmxhZ3MgPSBjZ3JwLSZndDticGYuZmxhZ3NbYXR5cGVdOwogCWNncnAtJmd0O2JwZi5mbGFnc1thdHlwZV0gPSBzYXZlZF9mbGFnczsKIAogCWlmICh0eXBlID09IEJQRl9MU01fQ0dST1VQKSB7CkBAIC05MTUsMTIgJiM0Mzs5MjAsMTQgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJaWYgKG9sZF9wcm9nKSB7CiAJCXBsLSZndDtwcm9nID0gb2xkX3Byb2c7CiAJCXBsLSZndDtsaW5rID0gTlVMTDsKJiM0MzsJCWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLSZndDtzdG9yYWdlLCBvbGRfc3RvcmFnZSk7CiAJfQogCWJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7CiAJaWYgKCFvbGRfcHJvZykgewogCQlobGlzdF9kZWwoJmFtcDtwbC0mZ3Q7bm9kZSk7CiAJCWtmcmVlKHBsKTsKIAl9CiYjNDM7CWNncnAtJmd0O2JwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTAzMiwxMSAmIzQzOzEwMzksMTcgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCQkJCXN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssCiAJCQkJc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZykKIHsKJiM0MzsJc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwomIzQzOwlzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307CiYjNDM7CXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwomIzQzOwllbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlOwogCWVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTsKJiM0MzsJYm9vbCBzdG9yYWdlX2NoYW5nZWQgPSBmYWxzZTsKIAlzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nOwogCXN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7CiAJYm9vbCBmb3VuZCA9IGZhbHNlOwomIzQzOwlpbnQgZXJyOwogCiAJYXR5cGUgPSBicGZfY2dyb3VwX2F0eXBlX2ZpbmQobGluay0mZ3Q7bGluay5hdHRhY2hfdHlwZSwgbmV3X3Byb2ctJmd0O2F1eC0mZ3Q7YXR0YWNoX2J0Zl9pZCk7CiAJaWYgKGF0eXBlICZsdDsgMCkKQEAgLTEwNTYsMTAgJiM0MzsxMDY5LDM5IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCwKIAlpZiAoIWZvdW5kKQogCQlyZXR1cm4gLUVOT0VOVDsKIAomIzQzOwlpZiAoYnBmX2Nncm91cF9zdG9yYWdlc19hbGxvYyhzdG9yYWdlLCBuZXdfc3RvcmFnZSwgbGluay0mZ3Q7bGluay5hdHRhY2hfdHlwZSwKJiM0MzsJCQkJICAgICAgbmV3X3Byb2csIGNncnApKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHsKJiM0MzsJCWlmIChzdG9yYWdlW3N0eXBlXSAhPSBwbC0mZ3Q7c3RvcmFnZVtzdHlwZV0pIHsKJiM0MzsJCQlzdG9yYWdlX2NoYW5nZWQgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJY2dycC0mZ3Q7YnBmLnJldmlzaW9uc1thdHlwZV0gJiM0Mzs9IDE7CiAJb2xkX3Byb2cgPSB4Y2hnKCZhbXA7bGluay0mZ3Q7bGluay5wcm9nLCBuZXdfcHJvZyk7Ci0JcmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpOwomIzQzOwomIzQzOwlpZiAoIXN0b3JhZ2VfY2hhbmdlZCkgewomIzQzOwkJcmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpOwomIzQzOwkJYnBmX3Byb2dfcHV0KG9sZF9wcm9nKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC0mZ3Q7c3RvcmFnZSk7CiYjNDM7CWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLSZndDtzdG9yYWdlLCBzdG9yYWdlKTsKJiM0MzsJZXJyID0gdXBkYXRlX2VmZmVjdGl2ZV9wcm9ncyhjZ3JwLCBhdHlwZSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCXhjaGcoJmFtcDtsaW5rLSZndDtsaW5rLnByb2csIG9sZF9wcm9nKTsKJiM0MzsJCWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLSZndDtzdG9yYWdlLCBvbGRfc3RvcmFnZSk7CiYjNDM7CQlicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpOwomIzQzOwkJY2dycC0mZ3Q7YnBmLnJldmlzaW9uc1thdHlwZV0gLT0gMTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKIAlicGZfcHJvZ19wdXQob2xkX3Byb2cpOwomIzQzOwlicGZfY2dyb3VwX3N0b3JhZ2VzX2xpbmsobmV3X3N0b3JhZ2UsIGNncnAsIGxpbmstJmd0O2xpbmsuYXR0YWNoX3R5cGUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21wcm9nLmMgYi9rZXJuZWwvYnBmL21wcm9nLmMKaW5kZXggMTM5NDE2ODA2MmU4NTYuLmI0YTFiMzVmZjU2OTM2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL21wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tcHJvZy5jCkBAIC02LDcgJiM0Mzs2LDcgQEAKIAogc3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSwKIAkJCSAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsCi0JCQkgIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKQomIzQzOwkJCSAgZW51bSBicGZfbGlua190eXBlIHR5cGUpCiB7CiAJc3RydWN0IGJwZl9saW5rICpsaW5rID0gRVJSX1BUUigtRUlOVkFMKTsKIAlib29sIGlkID0gZmxhZ3MgJmFtcDsgQlBGX0ZfSUQ7CkBAIC0xNyw3ICYjNDM7MTcsNyBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19saW5rKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLAogCQlsaW5rID0gYnBmX2xpbmtfZ2V0X2Zyb21fZmQoaWRfb3JfZmQpOwogCWlmIChJU19FUlIobGluaykpCiAJCXJldHVybiBQVFJfRVJSKGxpbmspOwotCWlmICh0eXBlICZhbXA7JmFtcDsgbGluay0mZ3Q7cHJvZy0mZ3Q7dHlwZSAhPSB0eXBlKSB7CiYjNDM7CWlmICh0eXBlICZhbXA7JmFtcDsgbGluay0mZ3Q7dHlwZSAhPSB0eXBlKSB7CiAJCWJwZl9saW5rX3B1dChsaW5rKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTIsMjEgJiM0Mzs1MiwyMiBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19wcm9nKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLAogCiBzdGF0aWMgaW50IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZShzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSwKIAkJCQkgICAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsCi0JCQkJICAgIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKQomIzQzOwkJCQkgICAgZW51bSBicGZfbGlua190eXBlIGx0eXBlLAomIzQzOwkJCQkgICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKQogewogCWJvb2wgbGluayA9IGZsYWdzICZhbXA7IEJQRl9GX0xJTks7CiAJYm9vbCBpZCA9IGZsYWdzICZhbXA7IEJQRl9GX0lEOwogCiAJbWVtc2V0KHR1cGxlLCAwLCBzaXplb2YoKnR1cGxlKSk7CiAJaWYgKGxpbmspCi0JCXJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCB0eXBlKTsKJiM0MzsJCXJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCBsdHlwZSk7CiAJLyogSWYgbm8gcmVsZXZhbnQgZmxhZyBpcyBzZXQgYW5kIG5vIGlkX29yX2ZkIHdhcyBwYXNzZWQsIHRoZW4KIAkgKiB0dXBsZSBsaW5rL3Byb2cgaXMganVzdCBOVUxMZWQuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBiZWZvcmUvCiAJICogYWZ0ZXIgc2VsZWN0cyBmaXJzdC9sYXN0IHBvc2l0aW9uIHdpdGhvdXQgcGFzc2luZyBmZC4KIAkgKi8KIAlpZiAoIWlkICZhbXA7JmFtcDsgIWlkX29yX2ZkKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gYnBmX21wcm9nX3Byb2codHVwbGUsIGlkX29yX2ZkLCBmbGFncywgdHlwZSk7CiYjNDM7CXJldHVybiBicGZfbXByb2dfcHJvZyh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCBwdHlwZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGJwZl9tcHJvZ190dXBsZV9wdXQoc3RydWN0IGJwZl90dXBsZSAqdHVwbGUpCkBAIC0yMjYsNyAmIzQzOzIyNyw4IEBAIGludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LAogCQkgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsCiAJCSAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nX25ldywgc3RydWN0IGJwZl9saW5rICpsaW5rLAogCQkgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZ19vbGQsCi0JCSAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbikKJiM0MzsJCSAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbiwKJiM0MzsJCSAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSkKIHsKIAlzdHJ1Y3QgYnBmX3R1cGxlIHJ0dXBsZSwgbnR1cGxlID0gewogCQkucHJvZyA9IHByb2dfbmV3LApAQCAtMjQzLDYgJiM0MzsyNDUsNyBAQCBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSwKIAkJcmV0dXJuIC1FRVhJU1Q7CiAJcmV0ID0gYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlKCZhbXA7cnR1cGxlLCBpZF9vcl9mZCwKIAkJCQkgICAgICAgZmxhZ3MgJmFtcDsgfkJQRl9GX1JFUExBQ0UsCiYjNDM7CQkJCSAgICAgICBleHBlY3RlZF9saW5rX3R5cGUsCiAJCQkJICAgICAgIHByb2dfbmV3LSZndDt0eXBlKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMzI4LDcgJiM0MzszMzEsOCBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19mZXRjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSwKIGludCBicGZfbXByb2dfZGV0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LAogCQkgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsCiAJCSAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssCi0JCSAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbikKJiM0MzsJCSAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbiwKJiM0MzsJCSAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSkKIHsKIAlzdHJ1Y3QgYnBmX3R1cGxlIHJ0dXBsZSwgZHR1cGxlID0gewogCQkucHJvZyA9IHByb2csCkBAIC0zNDMsOCAmIzQzOzM0Nyw5IEBAIGludCBicGZfbXByb2dfZGV0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LAogCWlmICghYnBmX21wcm9nX3RvdGFsKGVudHJ5KSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJcmV0ID0gYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlKCZhbXA7cnR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsCi0JCQkJICAgICAgIHByb2cgPyBwcm9nLSZndDt0eXBlIDoKLQkJCQkgICAgICAgQlBGX1BST0dfVFlQRV9VTlNQRUMpOwomIzQzOwkJCQkgICAgICAgZXhwZWN0ZWRfbGlua190eXBlLAomIzQzOwkJCQkgICAgICAgLyogVXNlIFVOU1BFQyBhcyB3aWxkY2FyZCB3aGVuIHByb2cgaXMgTlVMTCAqLwomIzQzOwkJCQkgICAgICAgcHJvZyA/IHByb2ctJmd0O3R5cGUgOiBCUEZfUFJPR19UWVBFX1VOU1BFQyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAlpZiAoZHR1cGxlLnByb2cpIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jIGIva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMKaW5kZXggMjVmMzBmOWVkYWVmZDMuLjlmYzYyZGIxNDQxYzYyIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYwpAQCAtMTcxLDEzICYjNDM7MTcxLDE3IEBAIHN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLAogCXN0cnVjdCBuZXQgKm5ldDsKIAlpbnQgaWR4LCByZXQ7CiAKLQlpZiAob2xkX3Byb2cgJmFtcDsmYW1wOyBvbGRfcHJvZyAhPSBsaW5rLSZndDtwcm9nKQotCQlyZXR1cm4gLUVQRVJNOwotCWlmIChuZXdfcHJvZy0mZ3Q7dHlwZSAhPSBsaW5rLSZndDtwcm9nLSZndDt0eXBlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCW11dGV4X2xvY2soJmFtcDtuZXRuc19icGZfbXV0ZXgpOwogCiYjNDM7CWlmIChvbGRfcHJvZyAmYW1wOyZhbXA7IG9sZF9wcm9nICE9IGxpbmstJmd0O3Byb2cpIHsKJiM0MzsJCXJldCA9IC1FUEVSTTsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwlpZiAobmV3X3Byb2ctJmd0O3R5cGUgIT0gbGluay0mZ3Q7cHJvZy0mZ3Q7dHlwZSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwogCW5ldCA9IG5ldF9saW5rLSZndDtuZXQ7CiAJaWYgKCFuZXQgfHwgIWNoZWNrX25ldChuZXQpKSB7CiAJCS8qIExpbmsgYXV0by1kZXRhY2hlZCBvciBuZXRucyBkeWluZyAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCA2ZGIzMDZkMjNiNDc5Zi4uY2FkOTg2ODA3ZDUzMDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC0zNDcxLDkgJiM0MzszNDcxLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpicGZfbGlua190eXBlX3N0cnNbXSA9IHsKIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rID0gZmlscC0mZ3Q7cHJpdmF0ZV9kYXRhOwotCWNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGxpbmstJmd0O3Byb2c7CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZzsKIAllbnVtIGJwZl9saW5rX3R5cGUgdHlwZSA9IGxpbmstJmd0O3R5cGU7CiAJY2hhciBwcm9nX3RhZ1tzaXplb2YocHJvZy0mZ3Q7dGFnKSAqIDIgJiM0MzsgMV0gPSB7IH07CiYjNDM7CXUzMiBwcm9nX2lkOwogCiAJaWYgKHR5cGUgJmx0OyBBUlJBWV9TSVpFKGJwZl9saW5rX3R5cGVfc3RycykgJmFtcDsmYW1wOyBicGZfbGlua190eXBlX3N0cnNbdHlwZV0pIHsKIAkJaWYgKGxpbmstJmd0O3R5cGUgPT0gQlBGX0xJTktfVFlQRV9LUFJPQkVfTVVMVEkpCkBAIC0zNDkwLDEzICYjNDM7MzQ5MSwyMCBAQCBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKQogCX0KIAlzZXFfcHJpbnRmKG0sICYjMzQ7bGlua19pZDpcdCV1XG4mIzM0OywgbGluay0mZ3Q7aWQpOwogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJcHJvZyA9IFJFQURfT05DRShsaW5rLSZndDtwcm9nKTsKIAlpZiAocHJvZykgewogCQliaW4yaGV4KHByb2dfdGFnLCBwcm9nLSZndDt0YWcsIHNpemVvZihwcm9nLSZndDt0YWcpKTsKJiM0MzsJCXByb2dfaWQgPSBwcm9nLSZndDthdXgtJmd0O2lkOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAocHJvZykgewogCQlzZXFfcHJpbnRmKG0sCiAJCQkgICAmIzM0O3Byb2dfdGFnOlx0JXNcbiYjMzQ7CiAJCQkgICAmIzM0O3Byb2dfaWQ6XHQldVxuJiMzNDssCiAJCQkgICBwcm9nX3RhZywKLQkJCSAgIHByb2ctJmd0O2F1eC0mZ3Q7aWQpOwomIzQzOwkJCSAgIHByb2dfaWQpOwogCX0KIAlpZiAobGluay0mZ3Q7b3BzLSZndDtzaG93X2ZkaW5mbykKIAkJbGluay0mZ3Q7b3BzLSZndDtzaG93X2ZkaW5mbyhsaW5rLCBtKTsKQEAgLTU1MzUsNiAmIzQzOzU1NDMsNyBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLAogewogCXN0cnVjdCBicGZfbGlua19pbmZvIF9fdXNlciAqdWluZm8gPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci0mZ3Q7aW5mby5pbmZvKTsKIAlzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBpbmZvOwomIzQzOwljb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7CiAJdTMyIGluZm9fbGVuID0gYXR0ci0mZ3Q7aW5mby5pbmZvX2xlbjsKIAlpbnQgZXJyOwogCkBAIC01NTQ5LDggJiM0Mzs1NTU4LDEyIEBAIHN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsCiAKIAlpbmZvLnR5cGUgPSBsaW5rLSZndDt0eXBlOwogCWluZm8uaWQgPSBsaW5rLSZndDtpZDsKLQlpZiAobGluay0mZ3Q7cHJvZykKLQkJaW5mby5wcm9nX2lkID0gbGluay0mZ3Q7cHJvZy0mZ3Q7YXV4LSZndDtpZDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlwcm9nID0gUkVBRF9PTkNFKGxpbmstJmd0O3Byb2cpOwomIzQzOwlpZiAocHJvZykKJiM0MzsJCWluZm8ucHJvZ19pZCA9IHByb2ctJmd0O2F1eC0mZ3Q7aWQ7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKGxpbmstJmd0O29wcy0mZ3Q7ZmlsbF9saW5rX2luZm8pIHsKIAkJZXJyID0gbGluay0mZ3Q7b3BzLSZndDtmaWxsX2xpbmtfaW5mbyhsaW5rLCAmYW1wO2luZm8pOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90Y3guYyBiL2tlcm5lbC9icGYvdGN4LmMKaW5kZXggMDJkYjAxMTNiOGU3YzYuLmYyMDhjZWYxM2E5OGUzIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3RjeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdGN4LmMKQEAgLTM4LDcgJiM0MzszOCw3IEBAIGludCB0Y3hfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIAl9CiAJcmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgJmFtcDtlbnRyeV9uZXcsIHByb2csIE5VTEwsIHJlcGxhY2VfcHJvZywKIAkJCSAgICAgICBhdHRyLSZndDthdHRhY2hfZmxhZ3MsIGF0dHItJmd0O3JlbGF0aXZlX2ZkLAotCQkJICAgICAgIGF0dHItJmd0O2V4cGVjdGVkX3JldmlzaW9uKTsKJiM0MzsJCQkgICAgICAgYXR0ci0mZ3Q7ZXhwZWN0ZWRfcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfVENYKTsKIAlpZiAoIXJldCkgewogCQlpZiAoZW50cnkgIT0gZW50cnlfbmV3KSB7CiAJCQl0Y3hfZW50cnlfdXBkYXRlKGRldiwgZW50cnlfbmV3LCBpbmdyZXNzKTsKQEAgLTc2LDcgJiM0Mzs3Niw3IEBAIGludCB0Y3hfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIAkJZ290byBvdXQ7CiAJfQogCXJldCA9IGJwZl9tcHJvZ19kZXRhY2goZW50cnksICZhbXA7ZW50cnlfbmV3LCBwcm9nLCBOVUxMLCBhdHRyLSZndDthdHRhY2hfZmxhZ3MsCi0JCQkgICAgICAgYXR0ci0mZ3Q7cmVsYXRpdmVfZmQsIGF0dHItJmd0O2V4cGVjdGVkX3JldmlzaW9uKTsKJiM0MzsJCQkgICAgICAgYXR0ci0mZ3Q7cmVsYXRpdmVfZmQsIGF0dHItJmd0O2V4cGVjdGVkX3JldmlzaW9uLCBCUEZfTElOS19UWVBFX1RDWCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKCF0Y3hfZW50cnlfaXNfYWN0aXZlKGVudHJ5X25ldykpCiAJCQllbnRyeV9uZXcgPSBOVUxMOwpAQCAtMTUyLDcgJiM0MzsxNTIsNyBAQCBzdGF0aWMgaW50IHRjeF9saW5rX3Byb2dfYXR0YWNoKHN0cnVjdCBicGZfbGluayAqbGluaywgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsCiAJaWYgKCFlbnRyeSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgJmFtcDtlbnRyeV9uZXcsIGxpbmstJmd0O3Byb2csIGxpbmssIE5VTEwsIGZsYWdzLAotCQkJICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbik7CiYjNDM7CQkJICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbiwgQlBGX0xJTktfVFlQRV9UQ1gpOwogCWlmICghcmV0KSB7CiAJCWlmIChlbnRyeSAhPSBlbnRyeV9uZXcpIHsKIAkJCXRjeF9lbnRyeV91cGRhdGUoZGV2LCBlbnRyeV9uZXcsIGluZ3Jlc3MpOwpAQCAtMTgzLDcgJiM0MzsxODMsNyBAQCBzdGF0aWMgdm9pZCB0Y3hfbGlua19yZWxlYXNlKHN0cnVjdCBicGZfbGluayAqbGluaykKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byBvdXQ7CiAJfQotCXJldCA9IGJwZl9tcHJvZ19kZXRhY2goZW50cnksICZhbXA7ZW50cnlfbmV3LCBsaW5rLSZndDtwcm9nLCBsaW5rLCAwLCAwLCAwKTsKJiM0MzsJcmV0ID0gYnBmX21wcm9nX2RldGFjaChlbnRyeSwgJmFtcDtlbnRyeV9uZXcsIGxpbmstJmd0O3Byb2csIGxpbmssIDAsIDAsIDAsIEJQRl9MSU5LX1RZUEVfVENYKTsKIAlpZiAoIXJldCkgewogCQlpZiAoIXRjeF9lbnRyeV9pc19hY3RpdmUoZW50cnlfbmV3KSkKIAkJCWVudHJ5X25ldyA9IE5VTEw7CkBAIC0yMjksOSAmIzQzOzIyOSw4IEBAIHN0YXRpYyBpbnQgdGN4X2xpbmtfdXBkYXRlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpucHJvZywKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byBvdXQ7CiAJfQotCXJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksICZhbXA7ZW50cnlfbmV3LCBucHJvZywgbGluaywgb3Byb2csCi0JCQkgICAgICAgQlBGX0ZfUkVQTEFDRSB8IEJQRl9GX0lELAotCQkJICAgICAgIGxpbmstJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7aWQsIDApOwomIzQzOwlyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCAmYW1wO2VudHJ5X25ldywgbnByb2csIGxpbmssIG9wcm9nLCBCUEZfRl9SRVBMQUNFIHwgQlBGX0ZfSUQsCiYjNDM7CQkJICAgICAgIGxpbmstJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7aWQsIDAsIEJQRl9MSU5LX1RZUEVfVENYKTsKIAlpZiAoIXJldCkgewogCQlXQVJOX09OX09OQ0UoZW50cnkgIT0gZW50cnlfbmV3KTsKIAkJb3Byb2cgPSB4Y2hnKCZhbXA7bGluay0mZ3Q7cHJvZywgbnByb2cpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWNlbnQgQlBGIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc2V2ZXJhbCBrZXkgQlBGIGZ1bmN0aW9uczogYGJwZl9tcHJvZ19hdHRhY2hgLCBgYnBmX21wcm9nX2RldGFjaGAsIGBjZ3JvdXBfYnBmX2F0dGFjaGAsIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLCBgYnBmX2xpbmtfc2hvd19mZGluZm9gLCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC4gVGhlc2UgYXJlIGFsbCBjb3JlIGNvbXBvbmVudHMsIHNvIHdlIHNob3VsZCBwYXkgY2xvc2UgYXR0ZW50aW9uLiBUaGUgcHJvcG9zZWQgY2hhbmdlcyBzZWVtIHRvIGludm9sdmUgbW9kaWZpY2F0aW9ucyB0byBgYnBmX21wcm9nX2F0dGFjaGAgYW5kIGBicGZfbXByb2dfZGV0YWNoYCB0byBpbmNsdWRlIGFuIGBleHBlY3RlZF9saW5rX3R5cGVgIGFyZ3VtZW50LiBBZGRpdGlvbmFsbHksIHRoZSBzZXJpZXMgYWltcyB0byByZWZpbmUgaG93IGBicGZfY2dyb3VwX3N0b3JhZ2VgIGlzIG1hbmFnZWQgd2l0aGluIGBfX2Nncm91cF9icGZfYXR0YWNoYCBhbmQgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBkdXJpbmcgYXR0YWNobWVudCBhbmQgcmVwbGFjZW1lbnQgb3BlcmF0aW9ucy4gVGhlcmUmIzM5O3MgYWxzbyBhIG1vZGlmaWNhdGlvbiB0byBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgIHdoaWNoIGxvY2tzIHRoZSBgbmV0bnNfYnBmX211dGV4YCBlYXJsaWVyLiBBbmQgZmluYWxseSwgc29tZSBjaGFuZ2VzIHRvIGBicGZfbGlua19zaG93X2ZkaW5mb2AgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgdG8gdXNlIGBSRUFEX09OQ0UobGluay0mZ3Q7cHJvZylgIGFuZCBgcmN1X3JlYWRfbG9jaygpYCBzZWVtIHdvcnRoIHRha2luZyBhIGxvb2sgYXQuCgpNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGVzZSBhcmUgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgbG9naWMuIFRoZSBwb3RlbnRpYWwgZm9yIHJlZ3Jlc3Npb25zIG9yIHN1YnRsZSBzaWRlIGVmZmVjdHMgaXMgdGhlcmUsIHNvIHdlIHNob3VsZCBhZGQgdGhpcyB0byB0aGUgbGlzdCBvZiAmIzM0O3dvcnRoIGZ1enppbmcmIzM0OyBjYW5kaWRhdGVzLgoKTm93LCBsZXQmIzM5O3MgaXNvbGF0ZSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb246IGBicGZfbXByb2dfYXR0YWNoYCwgYGJwZl9tcHJvZ19kZXRhY2hgLCBgX19jZ3JvdXBfYnBmX2F0dGFjaGAsIGBfX2Nncm91cF9icGZfcmVwbGFjZWAsIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AsIGBicGZfbGlua19zaG93X2ZkaW5mb2AsIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgLgoKVGltZSB0byBjaGVjayB0aGUgY29uZmlnIGRlcGVuZGVuY2llcy4gV2UmIzM5O3JlIG9idmlvdXNseSBsb29raW5nIGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0NHUk9VUF9CUEZgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IGJ5IHJldmlld2luZyB0aGUgcmVsZXZhbnQgZmlsZXMsIGBrZXJuZWwvYnBmL2Nncm91cC5jYCBhbmQgYGtlcm5lbC9icGYvbXByb2cuY2AuIFllcCwgYENPTkZJR19DR1JPVVBfQlBGYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkIGZvciBgY2dyb3VwLmNgLiBBbmQgZm9yIHRoZSBuZXR3b3JraW5nIGFzcGVjdCwgYENPTkZJR19ORVRgIG1pZ2h0IGJlIG5lZWRlZCBmb3IgYG5ldF9uYW1lc3BhY2UuY2AgYW5kIGB0Y3guY2AuIFdlIGtub3cgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgbWFpbiBlbmFibGVyIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuCgpJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGxpbmtlZCB0byBgYnBmX21wcm9nX2F0dGFjaGAgb3IgYHRjeC5jYCwgd2hpY2ggbWlnaHQgcmVxdWlyZSBgQ09ORklHX05FVF9YR1JFU1NgIG9yIHNvbWUgc2ltaWxhciBkZXBlbmRlbmN5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgY29tZXMgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGN4XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0yNz1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBuZXRfbmFtZXNwYWNlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdGN4Lm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjktZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzU2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBCUEYgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG9iamVjdCBmaWxlcywgc3BlY2lmaWNhbGx5IGB0Y3gub2AgYW5kIGBuZXRfbmFtZXNwYWNlLm9gLCBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhleSYjMzk7dmUgYmVlbiBjb21waWxlZCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCB0aGF0IHNldHMgYSBiYXNlbGluZS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgYG5ldGtpdC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgdGllcyBpbnRvIHRoZSByZXN0IG9mIHRoZSBwaWN0dXJlLiBJcyBpdCB1c2luZyB0aGUgc2FtZSBmbGFncz8gSXMgaXQgaGFuZGxpbmcgQlBGIGluc3RydWN0aW9ucyBpbiBhIGNvbXBhdGlibGUgd2F5PyBGaWd1cmluZyBvdXQgdGhlIHJlbGF0aW9uIGJldHdlZW4gdGhlc2UgY29tcG9uZW50cyBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0gYXMgYSB3aG9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRraXRcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX05FVENPTlNPTEUpICYjNDM7PSBuZXRjb25zb2xlLm9cbmRyaXZlcnMvbmV0L01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19ORVRLSVQpICYjNDM7PSBuZXRraXQub1xuZHJpdmVycy9uZXQvTWFrZWZpbGUtMjYtb2JqLXkgJiM0Mzs9IHBoeS9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjQ4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTmV0a2l0IGFuZCBDZ3JvdXBzKioKClJpZ2h0LCBzbyBJIHNlZSB0aGlzIGBuZXRraXQuY2AgZmlsZSBhbmQgaW1tZWRpYXRlbHkgdGhpbmssICYjMzQ7QWgsIHRoYXQmIzM5O3MgZ29pbmcgdG8gbmVlZCBgQ09ORklHX05FVEtJVGAgZW5hYmxlZC4gTm8gc3VycHJpc2VzIHRoZXJlLiYjMzQ7IEl0JiMzOTtzIGp1c3QgYSBzdGFuZGFyZCBkZXBlbmRlbmN5LCBzbyBJJiMzOTtsbCBxdWlja2x5IGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBzZXQgcHJvcGVybHkgaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYmVmb3JlIEkgZGlnIGFueSBkZWVwZXIgaW50byB0aGUgY29kZSBpdHNlbGYuCgpOb3csIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYGNncm91cC5jYC4gVGhpcyBtaWdodCBiZSBhIHJlbGF0ZWQgYXJlYSwgZ2l2ZW4gaG93IG5ldHdvcmtzIGFyZSBvZnRlbiBtYW5hZ2VkIHdpdGhpbiB0aGUgY29uZmluZXMgb2YgcmVzb3VyY2UtY29uc3RyYWluZWQgZW52aXJvbm1lbnRzIHRoYXQgY2dyb3VwcyBhcmUgZGVzaWduZWQgZm9yLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXR3b3JraW5nIGhvb2tzIGFyZSBpbnRlcmFjdGluZyB3aXRoLCBvciBiZWluZyBzaGFwZWQgYnksIHRob3NlIGNncm91cHMuIFRpbWUgdG8ganVtcCBpbiB0aGVyZSBhbmQgc2VlIHdoYXQgdGhleSYjMzk7cmUgdXAgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0zNT1lbmRpZlxua2VybmVsL2JwZi9NYWtlZmlsZTozNjpvYmotJChDT05GSUdfQ0dST1VQX0JQRikgJiM0Mzs9IGNncm91cC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM3LWlmZXEgKCQoQ09ORklHX0lORVQpLHkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk2OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGVCUEYgYW5kIGNncm91cHMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpc+KApiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfQ0dST1VQX0JQRmAgaXMgZW5hYmxlZCwgb2J2aW91c2x5LiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLiBXaXRob3V0IHRoYXQsIEkmIzM5O20gd2FzdGluZyBteSB0aW1lLgoKQW5kIHdoYXQgYWJvdXQgYG1wcm9nLmNgPyBUaGF0IGZpbGUgYWx3YXlzIHNlZW1zIHRvIGJlIGF0IHRoZSBoZWFydCBvZiB0aGUgQlBGIGFuZCBjZ3JvdXAgaW50ZXJhY3Rpb25zIGluIHRoaXMgc3BhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGhlcmUuIElzIGl0IHBhcnQgb2YgdGhlIHNvbHV0aW9uLCBvciB0aGUgcHJvYmxlbSwgb3IgbmVpdGhlcj8gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgcmV2aWV3aW5nIHRoYXQgY29kZSwgbG9va2luZyBmb3IgcmVsZXZhbnQgaG9va3Mgb3IgaW50ZWdyYXRpb24gcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHJvZ1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTU9b2JqLSR7Q09ORklHX0JQRl9MU019XHQgICYjNDM7PSBicGZfaW5vZGVfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRpc2FzbS5vIG1wcm9nLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTctb2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyODAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBGdW5jdGlvbiBSZWFjaGFiaWxpdHkgYW5kIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIEJQRi1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zOiBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19DR1JPVVBfQlBGYCwgYW5kIGBDT05GSUdfTkVUS0lUYC4gTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgb24gYSBzcGVjaWZpYyBzZXQgb2YgZnVuY3Rpb25zOiBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLCBgYnBmX2xpbmtfc2hvd19mZGluZm9gLCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC4KClRoZSBrZXkgcXVlc3Rpb24gaXMsIGFyZSB0aGVzZSBmdW5jdGlvbnMgcmVhY2hhYmxlPyBZZXMsIGNsZWFybHksIHRoZXkgYXJlLCB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbC4gU3BlY2lmaWNhbGx5LCBgYnBmX21wcm9nX2F0dGFjaGAgaXMgcGFydCBvZiBgdGN4X3Byb2dfYXR0YWNoYCwgYW5kIGBuZXRraXRfcHJvZ19hdHRhY2hgLCBhbW9uZyBvdGhlcnMuIGBfX2Nncm91cF9icGZfYXR0YWNoYCBpcyBjYWxsZWQgZnJvbSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAuIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AgaXMgY2FsbGVkIGZyb20gYGJwZl9saW5rX3VwZGF0ZWAuIGBicGZfbGlua19zaG93X2ZkaW5mb2AgaXMgZXhwb3NlZCB2aWEgcHJvY2ZzLCBzcGVjaWZpY2FsbHkgYGZkaW5mb2AgZm9yIGJwZiBsaW5rcywgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgY29tZXMgZnJvbSBgYnBmX29ial9nZXRfaW5mb19ieV9mZGAuCgpOb3csIGJlZm9yZSBJIGRpZyBkZWVwZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgY3JpdGljYWwgZGVwZW5kZW5jaWVzLiBBaGEsIGBDT05GSUdfTkVUYCBpcyByZXF1aXJlZCBmb3IgYENPTkZJR19ORVRLSVRgLiBHb29kIHRvIGtub3cuCgpMZXQmIzM5O3Mgc3VtbWFyaXplIHRoZSBjb25maWd1cmF0aW9uIGFuZCBzeW1ib2xzOiBUaGUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgQlBGX1NZU0NBTExgLCBgQ0dST1VQX0JQRmAsIGFuZCBgTkVUS0lUYC4gQW5kIHRoZXNlIGFyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb24gc3ltYm9scyB0byBjb25zaWRlcjogYGJwZl9tcHJvZ19hdHRhY2hgLCBgYnBmX21wcm9nX2RldGFjaGAsIGBfX2Nncm91cF9icGZfYXR0YWNoYCwgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCwgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCwgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC4KCkZpbmFsbHksIGEgcXVpY2sgbm90ZSBvbiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgYSBkZXRhaWwsIGJ1dCBpdCBkb2VzbiYjMzk7dCByZXByZXNlbnQgYSBiYXJyaWVyLiBJZiB3ZSB0YXJnZXQgaXQgZGlyZWN0bHkgd2l0aCBzeXprYWxsZXIsIHdlIGNhbiByZWFjaCBpdCwgb3IsIGFsdGVybmF0aXZlbHksIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbHNvIHdvcmtzLiBJIHNob3VsZCBjaGVjayBga2VybmVsL2JwZi9jZ3JvdXAuY2AgZm9yIGBfX2Nncm91cF9icGZfYXR0YWNoYCBmb3IgbW9yZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2Nncm91cF9icGZfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTc3MT1zdGF0aWMgaW50IGluc2VydF9wbF90b19obGlzdChzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwsIHN0cnVjdCBobGlzdF9oZWFkICpwcm9ncyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5MS0vKipcbmtlcm5lbC9icGYvY2dyb3VwLmM6NzkyOiAqIF9fY2dyb3VwX2JwZl9hdHRhY2goKSAtIEF0dGFjaCB0aGUgcHJvZ3JhbSBvciB0aGUgbGluayB0byBhIGNncm91cCwgYW5kXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5My0gKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGUgdGhlIGNoYW5nZSB0byBkZXNjZW5kYW50c1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtODA1LSAqL1xua2VybmVsL2JwZi9jZ3JvdXAuYzo4MDY6c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgwNy1cdFx0XHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTkzND1zdGF0aWMgaW50IGNncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy05NDItXHRjZ3JvdXBfbG9jaygpO1xua2VybmVsL2JwZi9jZ3JvdXAuYzo5NDM6XHRyZXQgPSBfX2Nncm91cF9icGZfYXR0YWNoKGNncnAsIHByb2csIHJlcGxhY2VfcHJvZywgbGluaywgdHlwZSwgZmxhZ3MsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NC1cdFx0XHRcdCAgaWRfb3JfZmQsIHJldmlzaW9uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MzgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkFzc2Vzc2luZyBCUEYgRnVuY3Rpb24gQXR0YWNobWVudCBhbmQgUmVwbGFjZW1lbnQqKgoKUmlnaHQsIHNvIGBfX2Nncm91cF9icGZfYXR0YWNoYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgb2Z0ZW4gYSBwb2ludCBvZiBzY3J1dGlueSB3aGVuIGRlYWxpbmcgd2l0aCBCUEYuIEhvd2V2ZXIsIGl0JiMzOTtzIHBlcmZlY3RseSBhY2NlcHRhYmxlIHRvIGxpc3QgaXQgaW4gdGhpcyBjb250ZXh0LiBUaGVyZSYjMzk7cyBubyBpbmhlcmVudCBpc3N1ZSB0aGVyZS4gTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBfX2Nncm91cF9icGZfcmVwbGFjZWAuIFRoaXMgaXMgdGhlIG9uZSB3ZSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRvIGdyYXNwIHRoaXMgcGFydGljdWxhciBCUEYgaW1wbGVtZW50YXRpb24mIzM5O3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29kZSBmb3IgdGhhdCBmdW5jdGlvbiBhbmQgZGV0ZXJtaW5lIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2Nncm91cF9icGZfcmVwbGFjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYz0xMDAxPXN0YXRpYyB2b2lkIHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coc3RydWN0IGNncm91cCAqY2dycCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMjgtLyoqXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMjk6ICogX19jZ3JvdXBfYnBmX3JlcGxhY2UoKSAtIFJlcGxhY2UgbGluayYjMzk7cyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDMwLSAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNy0gKi9cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTAzODpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMzktXHRcdFx0XHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTEwOD1zdGF0aWMgaW50IGNncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTI1LVx0fVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTI2Olx0cmV0ID0gX19jZ3JvdXBfYnBmX3JlcGxhY2UoY2dfbGluay1cdTAwM2VjZ3JvdXAsIGNnX2xpbmssIG5ld19wcm9nKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEyNy1vdXRfdW5sb2NrOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI4MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGFuZCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgY29uZmlybXMgaXQ6IGBfX2Nncm91cF9icGZfcmVwbGFjZWAgaXMgaW5kZWVkIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gU3RhdGljIGltcGxpZXMgc29tZXRoaW5nIGFib3V0IHNjb3BlIGFuZCBsaW5rYWdlLCBkb2VzbiYjMzk7dCBpdD8gSXMgaXQgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LCBvciBkb2VzIGl0IGhhdmUgZXh0ZXJuYWwgbGlua2FnZSBpbiB0aGUgYnJvYWRlciBrZXJuZWwgY29udGV4dD8gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgZGVsdmUgZnVydGhlci4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHNoaWZ0IGZvY3VzIHRvIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHJlbGF0ZXMgdG8gd2hhdCBJIHdhcyBqdXN0IHRoaW5raW5nIGFib3V0LCBhbmQgaG93IGl0IGludGVyYWN0cy4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBsaW5rIGJldHdlZW4gQlBGIHByb2dyYW1zIGFuZCBuZXR3b3JrIG5hbWVzcGFjZXMsIGFuZCBtb3N0IGxpa2VseSwgdGhlIGFjdCBvZiB1cGRhdGluZyB0aGVtLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgSSBuZWVkIHRvIGxvb2sgY2xvc2VseSB0byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3by4gR2l2ZW4gdGhhdCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHN0YXRpYywgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBob3cgaXQgbWlnaHQgYmUgY2FsbGVkIGFuZCBsaW5rZWQgYnkgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYC4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBtZWFucyBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGNyaXRpY2FsIHBhdGggZm9yIEJQRiBwcm9ncmFtIHVwZGF0ZXMgYW5kIG5ldHdvcmsgbmFtZXNwYWNlIGNvbmZpZ3VyYXRpb24sIGFuZCBuZWVkIHRvIGZvbGxvdyBpdHMgaW1wbGljYXRpb25zLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtob3cgaXMgdGhpcyBzdGF0aWMgZnVuY3Rpb24gYmVpbmcgdXRpbGl6ZWQgaW4gdGhlIGJyb2FkZXIgbGlmZWN5Y2xlPyYjMzQ7IEkgc2hvdWxkIGFsc28gY29uc2lkZXIgZXJyb3IgaGFuZGxpbmcgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTE1NT1zdGF0aWMgdm9pZCBicGZfbmV0bnNfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0xNjItXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzoxNjM6c3RhdGljIGludCBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0xNjQtXHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxuLS1cbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTIzOT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfbmV0bnNfbGlua19vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjQyLVx0LmRldGFjaCA9IGJwZl9uZXRuc19saW5rX2RldGFjaCxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jOjI0MzpcdC51cGRhdGVfcHJvZyA9IGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nLFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjQ0LVx0LmZpbGxfbGlua19pbmZvID0gYnBmX25ldG5zX2xpbmtfZmlsbF9pbmZvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk3MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBvbiBTdGF0aWMgRnVuY3Rpb25zIGluIEJQRiBMaW5rIE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgc28gYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYC4uLiByaWdodCwgdGhhdCBvbmUgaXMgZGVmaW5lZCBhcyBgc3RhdGljYC4gU2hvdWxkbiYjMzk7dCBiZSBhbnkgc3VycHJpc2VzIHRoZXJlLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gY29uZmlybSBhc3N1bXB0aW9ucy4gTm93LCBsZXQmIzM5O3MgcGl2b3QgdG8gY29uZmlybWluZyB0aGUgYmVoYXZpb3Igb2YgYGJwZl9saW5rX3Nob3dfZmRpbmZvYC4gV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIGluZm9ybWF0aW9uIGlzIGJlaW5nIHByb3ZpZGVkIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzdHJ1Y3R1cmUgYW5kIGRhdGEgYXJlIGJlaGF2aW5nIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbGlua19zaG93X2ZkaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTM0NjM9c3RhdGljIGNvbnN0IGNoYXIgKmJwZl9saW5rX3R5cGVfc3Ryc1tdID0ge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0NzAtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDcxOnN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDcyLXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9saW5rX2ZvcHMgPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTIyLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUyMzpcdC5zaG93X2ZkaW5mb1x0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MjQtI2VuZGlmXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzUzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBicGZfbGlua19mb3BzX3BvbGwgPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTMxLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUzMjpcdC5zaG93X2ZkaW5mb1x0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MzMtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDkwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgTGluayBGRCBJbmZvcm1hdGlvbiBSZXRyaWV2YWwqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHdoZXRoZXIgdGhhdCYjMzk7cyBkZWNsYXJlZCBzdGF0aWMgd2l0aGluIHRoZSBjb2RlIGJhc2UuIE15IHVuZGVyc3RhbmRpbmcgaXMgaXQgaXMsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgYmVjYXVzZSBpdCBoYXMgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGFjY2Vzc2liaWxpdHkgb2YgdGhhdCBpbmZvcm1hdGlvbi4KCk5vdywgbGV0JiMzOTtzIHBpdm90IGFuZCBleGFtaW5lIGhvdyBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGZ1bmN0aW9ucy4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGNlbnRyYWwgcmV0cmlldmFsIHBvaW50IGZvciB0aGUgRkQgaW5mb3JtYXRpb24sIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgYnBmX2xpbmtfc2hvd19mZGluZm9gIHRvIGRldGVybWluZSB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9saW5rX2dldF9pbmZvX2J5X2ZkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NTUyMz1zdGF0aWMgaW50IGJwZl9idGZfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTUzOC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU1Mzk6c3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU1NDAtXHRcdFx0XHQgIHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NTk5PXN0YXRpYyBpbnQgYnBmX29ial9nZXRfaW5mb19ieV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NjE3LVx0ZWxzZSBpZiAoZmRfZmlsZShmKS1cdTAwM2VmX29wID09IFx1MDAyNmJwZl9saW5rX2ZvcHMgfHwgZmRfZmlsZShmKS1cdTAwM2VmX29wID09IFx1MDAyNmJwZl9saW5rX2ZvcHNfcG9sbClcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU2MTg6XHRcdHJldHVybiBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZF9maWxlKGYpLCBmZF9maWxlKGYpLVx1MDAzZXByaXZhdGVfZGF0YSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU2MTktXHRcdFx0XHRcdCAgICAgIGF0dHIsIHVhdHRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgQlBGIExpbmsgSW5mb3JtYXRpb24gYW5kIEF0dGFjaG1lbnQgTWVjaGFuaXNtcyoqCgpPa2F5LCBzbyBJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGlzIGluZGVlZCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cg4oCTIGhlbHBzIG5hcnJvdyBkb3duIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIGZvciB1c2FnZS4gTm93LCBJIHNob3VsZCBzaGlmdCBteSBmb2N1cyB0byBkaXNzZWN0aW5nIGhvdyBpdCB3b3JrcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYXR0YWNobWVudC9kZXRhY2htZW50LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gYGJwZl9tcHJvZ19hdHRhY2hgIGFuZCBgYnBmX21wcm9nX2RldGFjaGAgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJkZXBlbmRlbmNpZXMgYW5kIGhvdyBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGZhY3RvcnMgaW50byB0aGF0IG92ZXJhbGwgcHJvY2Vzcy4gR290dGEgbG9vayBhdCB0aGUgYmlnZ2VyIHBpY3R1cmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9tcHJvZ19hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL21wcm9nLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9tcHJvZy5jPTIxMD1zdGF0aWMgaW50IGJwZl9tcHJvZ19wb3NfYWZ0ZXIoc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4tLVxua2VybmVsL2JwZi9tcHJvZy5jLTIyNS1cbmtlcm5lbC9icGYvbXByb2cuYzoyMjY6aW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG5rZXJuZWwvYnBmL21wcm9nLmMtMjI3LVx0XHQgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzgzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEJQRiBFeHBvcnQgYW5kIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGNvbnRleHQgaW5kaWNhdGVzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGIGZ1bmN0aW9uYWxpdHkgYW5kIGl0cyBpbnRlZ3JhdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gZXhwb3J0LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY29ycmVjdDsgeWVzLCB0aGVzZSBCUEYgZWxlbWVudHMgYXJlIGJlaW5nIGV4cG9ydGVkLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGtleSBmdW5jdGlvbnMgYXQgcGxheSBoZXJlLiBUaGUgZm9jdXMgc2VlbXMgdG8gYmUgb24gYXR0YWNoaW5nIGFuZCBkZXRhY2hpbmcgQlBGIHByb2dyYW1zLCBlc3BlY2lhbGx5IHRvIGFuZCBmcm9tIGNncm91cHMuIFRoZSBjb3JlIGZ1bmN0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFyZTogYGJwZl9tcHJvZ19hdHRhY2hgLCBgYnBmX21wcm9nX2RldGFjaGAsIGBfX2Nncm91cF9icGZfYXR0YWNoYCwgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCwgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCwgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuIFRoZXNlIGFyZSB0aGUgaG9va3MgYW5kIGludGVyZmFjZXMgSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplLgoKTm93LCBvbiB0byBjb25maWd1cmF0aW9ucy4gV2UgaGF2ZSB0aHJlZSBtYWluIG9uZXMgYmVpbmcgZmxhZ2dlZDogYEJQRl9TWVNDQUxMYCwgYENHUk9VUF9CUEZgLCBhbmQgYE5FVEtJVGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGNvbmZpZ3MgbHVya2luZyBhYm91dC4KCkxldCYjMzk7cyBjb25maXJtIHRoZSBjb25maWdzIGFyZSBwcmVzZW50IGluIHRoZSBmaWxlczoKKiAgIGB0Y3guY2AgdXNlcyBgQ09ORklHX0JQRl9TWVNDQUxMYC4KKiAgIGBuZXRfbmFtZXNwYWNlLmNgIHJlbGllcyBvbiBgQ09ORklHX0JQRl9TWVNDQUxMYC4KKiAgIGBtcHJvZy5jYCB1dGlsaXplcyBgQ09ORklHX0JQRl9TWVNDQUxMYC4KKiAgIGBjZ3JvdXAuY2AgaXMgZHJpdmVuIGJ5IGBDT05GSUdfQ0dST1VQX0JQRmAuCiogICBgbmV0a2l0LmNgIGxldmVyYWdlcyBgQ09ORklHX05FVEtJVGAuCgpPa2F5LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYENPTkZJR19ORVRLSVRgIGlzIHRoZSAqb25seSogY29uZmlndXJhdGlvbiBmb3IgYG5ldGtpdC5jYCDigJMgYXMgY29uZmlybWVkIGJ5IGBvYmotJChDT05GSUdfTkVUS0lUKSAmIzQzOz0gbmV0a2l0Lm9gLiBUaGF0JiMzOTtzIGNsZWFuLgoKTm93LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgbW9kaWZpZWQgZmlsZXMuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IHRoZSByZWFsIHBpY3R1cmUuIFNvLCB3ZSYjMzk7dmUgZ290OgoKKiAgIGBpbmNsdWRlL2xpbnV4L2JwZl9tcHJvZy5oYCDigJMgdGhpcyBpcyBhIGhlYWRlciwgc28gaXQgbGlrZWx5IGRlZmluZXMgdGhlIGludGVyZmFjZXMgYW5kIHN0cnVjdHVyZXMuIE1ha2VzIHNlbnNlLgoqICAgYGRyaXZlcnMvbmV0L25ldGtpdC5jYCDigJMgdGhpcyBpcyBzdHJhaWdodGZvcndhcmQ7IGl0JiMzOTtzIGBDT05GSUdfTkVUS0lUYCBhdCB3b3JrLgoqICAgYGtlcm5lbC9icGYvY2dyb3VwLmNgIOKAkyB0aGlzIGlzIHRpZWQgdG8gYENPTkZJR19DR1JPVVBfQlBGYC4KKiAgIGBrZXJuZWwvYnBmL21wcm9nLmNgIOKAkyB0aGlzIG9uZSBpcyB1c2luZyBgQ09ORklHX0JQRl9TWVNDQUxMYC4KKiAgIGBrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY2Ag4oCTIGFsc28gdXNlcyBgQ09ORklHX0JQRl9TWVNDQUxMYC4KKiAgIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2Ag4oCTIHNhbWUsIGBDT05GSUdfQlBGX1NZU0NBTExgLgoqICAgYGtlcm5lbC9icGYvdGN4LmNgIOKAkyBhbmQgYWdhaW4sIGBDT05GSUdfQlBGX1NZU0NBTExgLgoKU28sIGNvbmZpcm1lZDogdGhlIGtleSBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5pdGVseSBgQlBGX1NZU0NBTExgLCBgQ0dST1VQX0JQRmAsIGFuZCBgTkVUS0lUYC4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBrbm93IHRoYXQgYENPTkZJR19ORVRLSVRgIGRlcGVuZHMgb24gYENPTkZJR19ORVRgLiBXaGlsZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBpdHNlbGYgbWF5IG5vdCBzdHJpY3RseSByZXF1aXJlIGBDT05GSUdfTkVUYCwgdGhlIGZpbGVzIGBuZXRfbmFtZXNwYWNlLmNgIGFuZCBgdGN4LmNgIG1pZ2h0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBNYWtlZmlsZSBmb3IgdGhlIEJQRiBjb3JlIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgYG5ldF9uYW1lc3BhY2Uub2AgYW5kIGB0Y3gub2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldF9uYW1lc3BhY2VcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG9mZmxvYWQub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBuZXRfbmFtZXNwYWNlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdGN4Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEJQRiBTeXN0ZW0gQ2FsbCBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgQlBGIHN5c3RlbSBjYWxsIHN0dWZmIGlzIGNvbXBpbGVkLiBJdCYjMzk7cyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFdhaXQgYSBtaW51dGUuLi4gSSBoYXZlIGEgc3VzcGljaW9uLiBUaGlzIGBuZXRfbmFtZXNwYWNlLmNgIGZpbGUg4oCTIGRvZXNuJiMzOTt0IHRoYXQgKnJlcXVpcmUqIGBDT05GSUdfTkVUYD8gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgZGVwZW5kZW5jeSB0byBiZSBzdXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlc2UgY29uZmlndXJhdGlvbnMgY29tcGxldGVseSBiZWZvcmUgSSBtb3ZlIG9uLiBPa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaW4gYG5ldF9uYW1lc3BhY2UuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX05FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBDb21waWxhdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgQlBGIHN5c2NhbGwgZ2V0cyBjb21waWxlZCwgYW5kIGl0IGxvb2tzIGxpa2UgYG5ldF9uYW1lc3BhY2UuY2AgaXMgZGVmaW5pdGVseSBpbnZvbHZlZCwgdHJpZ2dlcmVkIGJ5IGBDT05GSUdfQlBGX1NZU0NBTExgLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiB3aGF0IGhhcHBlbnMgaWYgdGhlIG5ldHdvcmsgc3RhY2sgaXRzZWxmIChgQ09ORklHX05FVGApIGlzIGRpc2FibGVkPyBUaGF0IHRocm93cyBhIHdyZW5jaCBpbiB0aGUgd29ya3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgY2xlYXJseS4gTGV0JiMzOTtzIGdvIGJhY2sgYW5kIGNhcmVmdWxseSByZS1leGFtaW5lIGBrZXJuZWwvYnBmL01ha2VmaWxlYCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBiZXNpZGVzIGp1c3QgYENPTkZJR19CUEZfU1lTQ0FMTGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBmdWxseSB1bmRlcnN0b29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRfbmFtZXNwYWNlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0yNj1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBvZmZsb2FkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbmV0X25hbWVzcGFjZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI4LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHRjeC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDEyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIEludmVzdGlnYXRpb246IGBuZXRfbmFtZXNwYWNlLmNgICZhbXA7IENPTkZJR19ORVQqKgoKSG1tLCBob2xkIG9uLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgYG5ldF9uYW1lc3BhY2UuY2AgYW5kIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcgcG9wcyB1cC4gVGhpcyBmaWxlIGlzIGNsZWFybHkgdXRpbGl6aW5nIHRoZSBgc3RydWN0IG5ldGAgc3RydWN0dXJlLCBhbmQgdGhhdCYjMzk7cyB1c3VhbGx5IGEgc3Ryb25nIGluZGljYXRvciBvZiBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eS4gTm93LCB0aGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgaXMgd2hldGhlciB0aGUgaW5jbHVzaW9uIG9mIHRoYXQgc3RydWN0dXJlIGluIHRoaXMgcGFydGljdWxhciBmaWxlIGlzIGNvbmRpdGlvbmFsLiBTcGVjaWZpY2FsbHksIGlzIHRoZSByZWxldmFudCBjb2RlIHNlY3Rpb24g4oCTIGxpa2VseSB0aGUgZW50aXJlIGZpbGUsIGdpdmVuIGl0cyBuYW1lIOKAkyBwcm90ZWN0ZWQgYnkgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBhbmQgdGhhdCBkaXJlY3RpdmUgaXMgZGVwZW5kZW50IG9uIGBDT05GSUdfTkVUYD8gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoaXMgZGVwZW5kZW5jeSBleGlzdHMuIElmIG5vdCwgaXQgY291bGQgc2lnbmlmeSBhIGNvbmZpZ3VyYXRpb24gb3ZlcnNpZ2h0LCBhIHBvdGVudGlhbCBwb3J0YWJpbGl0eSBpc3N1ZSwgb3IgYSBzaXR1YXRpb24gd2hlcmUgbmV0d29ya2luZyBjb2RlIGNvdWxkIGJlIGluY2x1ZGVkIHVuaW50ZW50aW9uYWxseS4gQWx0ZXJuYXRpdmVseSwgaWYgaXQgaXMgZ3VhcmRlZCBieSBDT05GSUdfTkVULCBhbGwgaXMgYXMgaXQgc2hvdWxkIGJlLiBMZXQgbWUgY2hlY2sgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGF0IHRoZSB0b3Agb2YgdGhhdCBmaWxlLCBhcyBpdCBzZWVtcyBhIHJhdGhlciBpbXBvcnRhbnQgcGllY2Ugb2YgdGhlIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX05FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGRpc3BhdGNoZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToyMzppZmVxICgkKENPTkZJR19ORVQpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI0LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRldm1hcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Nzc3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIGtlcm5lbCBkZXZlbG9wbWVudCBhbmQgYnVpbGQgc3lzdGVtczoKCioqRGVidWdnaW5nIGEgQnVpbGQgQ29uZmlndXJhdGlvbiBJc3N1ZSoqCgpSaWdodCwgc28gSSBzZWUgYSByZWZlcmVuY2UgdG8gYGlmZXEgKCQoQ09ORklHX05FVCkseSlgIGF0IGxpbmUgMjMuIFRoYXQgaW5zdGFudGx5IGZsYWdzIGEgcG90ZW50aWFsIGRlcGVuZGVuY3kgcmVsYXRlZCB0byBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIFNpbmNlIEkmIzM5O20gdmVyeSBmYW1pbGlhciB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBidWlsZCBwcm9jZXNzLCBJIGltbWVkaWF0ZWx5IGtub3cgd2hlcmUgdG8gbG9vay4gTXkgbmV4dCB0aG91Z2h0IGlzLCAmIzM0O0xldCYjMzk7cyBjaGVjayBga2VybmVsL2JwZi9NYWtlZmlsZWAgYXJvdW5kIHRoYXQgc2FtZSBsaW5lIG51bWJlci4mIzM0OyBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMgdGhlcmUgdGhhdCYjMzk7cyBsaWtlbHkgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHdoeSBgQ09ORklHX05FVGAgaXMgYmVpbmcgZXZhbHVhdGVkIGluIHRoYXQgY29udGV4dC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgYXBwcm9hY2g6IGlkZW50aWZ5IHRoZSBjb25kaXRpb24sIHRoZW4gdHJhY2UgaXQgdG8gd2hlcmUgaXQmIzM5O3MgYmVpbmcgZXZhbHVhdGVkIHRvIHNlZSBpZiBpdCBtYWtlcyBzZW5zZSBpbiB0aGUgY3VycmVudCBidWlsZCBjb25maWd1cmF0aW9uIGFuZCB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgaW4gdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgc291cmNlIGNvZGUuIEkgYmV0IHRoaXMgaXMgYSBidWlsZC10aW1lIGNvbmRpdGlvbmFsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG4gIDIxOlx0ZW5kaWZcbiAgMjI6XHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGRpc3BhdGNoZXIub1xuICAyMzpcdGlmZXEgKCQoQ09ORklHX05FVCkseSlcbiAgMjQ6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkZXZtYXAub1xuICAyNTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNwdW1hcC5vXG4gIDI2Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gb2ZmbG9hZC5vXG4gIDI3Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbmV0X25hbWVzcGFjZS5vXG4gIDI4Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdGN4Lm9cbiAgMjk6XHRlbmRpZlxuICAzMDpcdGlmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KVxuICAzMTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN0YWNrbWFwLm9cbiAgMzI6XHRlbmRpZlxuICAzMzpcdGlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXG4gIDM0Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY2dyb3VwX2l0ZXIubyBicGZfY2dycF9zdG9yYWdlLm9cbiAgMzU6XHRlbmRpZlxuICAzNjpcdG9iai0kKENPTkZJR19DR1JPVVBfQlBGKSAmIzQzOz0gY2dyb3VwLm9cbiAgMzc6XHRpZmVxICgkKENPTkZJR19JTkVUKSx5KVxuICAzODpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHJldXNlcG9ydF9hcnJheS5vXG4gIDM5Olx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NDUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzIGZvciBCUEYtUmVsYXRlZCBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gdGhlIGluaXRpYWwgaW5zcGVjdGlvbiwgaXQgbG9va3MgbGlrZSBgbmV0X25hbWVzcGFjZS5vYCBhbmQgYHRjeC5vYCBhcmUgdGllZCB0byBgQ09ORklHX05FVGAsIHdoaWNoIGluIHR1cm4gaW1wbGllcyBgQ09ORklHX05FVEtJVGAgYXMgd2VsbC4gIFNvLCBhdCBhIGJhc2UgbGV2ZWwsIHdlIGhhdmUgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfQ0dST1VQX0JQRmAsIGBDT05GSUdfTkVUYCwgYW5kIGBDT05GSUdfTkVUS0lUYCBhcyBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuCgpIb3dldmVyLCB0aGUgcHJvbXB0IGlzIGNsZWFyOiBhdm9pZCB0aGUgZXhjZXNzaXZlbHkgZ2VuZXJhbC4gV2hpbGUgYENPTkZJR19ORVRgIGlzIGNlcnRhaW5seSByZXF1aXJlZCwgaXQmIzM5O3MgdG9vIGJyb2FkIGZvciB0aGlzIHB1cnBvc2UuICBgQ09ORklHX0JQRl9TWVNDQUxMYCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHRoZSBjb3JlIGVuYWJsaW5nIGNvbmZpZyBmb3IgQlBGLCBldmVuIGlmIGdlbmVyYWxseSBhcHBsaWNhYmxlLCBzbyB0aGF0IHN0YXlzLiAgYENPTkZJR19DR1JPVVBfQlBGYCBpcyBzdWl0YWJseSBzcGVjaWZpYyB0byBiZSB1c2VmdWwsIGFuZCBzbyBpcyBgQ09ORklHX05FVEtJVGAuIFNvLCB3ZSBrZWVwIHRob3NlLgoKTm93LCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgZ2V0dGluZyBhbGwgdGhlIHJlbGV2YW50IGNvZGUuIExvb2tpbmcgYXQgdGhlIGZvY3VzIHN5bWJvbHMsIHdlIGhhdmUgYSBsaXN0IHRvIHN0YXJ0IHdpdGg6IGBicGZfbXByb2dfYXR0YWNoYCwgYGJwZl9tcHJvZ19kZXRhY2hgLCBgX19jZ3JvdXBfYnBmX2F0dGFjaGAsIGBfX2Nncm91cF9icGZfcmVwbGFjZWAsIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AsIGBicGZfbGlua19zaG93X2ZkaW5mb2AsIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgLgoKQnV0IGxldCYjMzk7cyBub3Qgc3RvcCB0aGVyZS4gV2UgbmVlZCB0byBiZSBleGhhdXN0aXZlIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgY292ZXJpbmcgdGhlIG1vZGlmaWNhdGlvbnMgbWFkZS4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbHMgaW4gYG5ldGtpdC5jYCBhbmQgYHRjeC5jYC4gQW5kIHN1cmUgZW5vdWdoLCB0aGVyZSBhcmUgc2V2ZXJhbDogYG5ldGtpdF9wcm9nX2F0dGFjaGAsIGBuZXRraXRfcHJvZ19kZXRhY2hgLCBgbmV0a2l0X2xpbmtfcHJvZ19hdHRhY2hgLCBgbmV0a2l0X2xpbmtfcmVsZWFzZWAsIGFuZCBgbmV0a2l0X2xpbmtfdXBkYXRlYCBpbiBgbmV0a2l0LmNgOyB0aGVuIGB0Y3hfcHJvZ19hdHRhY2hgLCBgdGN4X3Byb2dfZGV0YWNoYCwgYHRjeF9saW5rX3Byb2dfYXR0YWNoYCwgYHRjeF9saW5rX3JlbGVhc2VgLCBhbmQgYHRjeF9saW5rX3VwZGF0ZWAgaW4gYHRjeC5jYC4gUGx1cyBgYnBmX21wcm9nX2xpbmtgIGFuZCBgYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlYCBpbiBgbXByb2cuY2AuCgpPa2F5LCBhZGRpbmcgYG5ldGtpdF9wcm9nX2F0dGFjaGAsIGB0Y3hfcHJvZ19hdHRhY2hgIGFuZCB0aGUgbGluayB2ZXJzaW9ucyBzZWVtIGFwcHJvcHJpYXRlIHRvIGV4cGFuZCB0aGUgc3ltYm9sIGxpc3QsIHRob3VnaCB0aGUgYGJwZl9tcHJvZ19hdHRhY2hgIGJhc2UgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgdGhvc2UuCgpGaW5hbCBmb2N1cyBzeW1ib2xzOgoKYGJwZl9tcHJvZ19hdHRhY2hgCmBicGZfbXByb2dfZGV0YWNoYApgX19jZ3JvdXBfYnBmX2F0dGFjaGAKYF9fY2dyb3VwX2JwZl9yZXBsYWNlYApgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgCmBicGZfbGlua19zaG93X2ZkaW5mb2AKYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYApgbmV0a2l0X3Byb2dfYXR0YWNoYApgdGN4X3Byb2dfYXR0YWNoYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRraXRfcHJvZ19hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRraXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRraXQuYz03MTE9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRraXRfZGV2X2ZldGNoKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlmaW5kZXgsIHUzMiB3aGljaClcbi0tXG5kcml2ZXJzL25ldC9uZXRraXQuYy03NDQtXG5kcml2ZXJzL25ldC9uZXRraXQuYzo3NDU6aW50IG5ldGtpdF9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuZHJpdmVycy9uZXQvbmV0a2l0LmMtNzQ2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgRHluYW1pYyBCZWhhdmlvcioqCgpPa2F5LCBzbyB0aGlzIGlzbiYjMzk7dCBhIHN0YXRpYyBzaXR1YXRpb24uIFNvbWV0aGluZyYjMzk7cyBjbGVhcmx5IGluIGZsdXgsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZHluYW1pY3MgYXQgcGxheS4gVGhlIHBocmFzZSAmIzM0O0l0IGlzIG5vdCBzdGF0aWMmIzM0OyBpcyBhIHNpZ25hbCDigJMgaXQgbWVhbnMgSSBjYW4mIzM5O3QganVzdCBsb29rIGF0IGEgc25hcHNob3Qgb2YgdGhlIHN5c3RlbTsgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGluZ3MgY2hhbmdlIG92ZXIgdGltZS4KCkdpdmVuIHRoZSBjb250ZXh0LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGB0Y3hfcHJvZ19hdHRhY2hgLiBUaGF0IGZ1bmN0aW9uIGxpa2VseSByZXByZXNlbnRzIGEgY3JpdGljYWwgcG9pbnQgd2hlcmUgc29tZSBiZWhhdmlvciBpcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBJdCYjMzk7cyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgbGlua2luZyBhIHByb2dyYW0gb3Igc29tZSBvdGhlciBlbGVtZW50IHdpdGhpbiB0aGUgc3lzdGVtLiBVbmRlcnN0YW5kaW5nIHdoYXQgaGFwcGVucyB3aXRoaW4gYHRjeF9wcm9nX2F0dGFjaGAg4oCTIGl0cyBpbnB1dHMsIG91dHB1dHMsIHNpZGUgZWZmZWN0cywgYW5kIGNvbnRyb2wgZmxvdyDigJMgc2hvdWxkIGJlIGtleSB0byB1bnJhdmVsaW5nIHRoZSBkeW5hbWljIGFzcGVjdCBJJiMzOTttIHNlZWluZy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgZXhlY3V0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3hfcHJvZ19hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RjeC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdGN4LmMtOS1cbmtlcm5lbC9icGYvdGN4LmM6MTA6aW50IHRjeF9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxua2VybmVsL2JwZi90Y3guYy0xMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5Mjc1CgkJCQkJCQlvdXRwdXQ6IDI4NQoJCQkJCQkJdGhvdWdodHM6IDI5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpc24mIzM5O3QganVzdCBjb3NtZXRpYzsgaXQmIzM5O3MgdG91Y2hpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgQlBGIHN0dWZmLCBhbmQgdGhhdCBpbW1lZGlhdGVseSBnZXRzIG15IGF0dGVudGlvbi4gSSBzZWUgdGhhdCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggbXVsdGktcHJvZyBhdHRhY2htZW50IGFuZCBkZXRhY2htZW50IChgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCkuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIHN0cmljdGVyIGxpbmsgdHlwZSBlbmZvcmNlbWVudCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgdGhlIGBORVRLSVRgIGFuZCBgVENYYCBzdWJzeXN0ZW1zLiBNYWtlcyBzZW5zZSDigJMgdGhvc2UgYXJlIHNwZWNpYWxpemVkIHVzZSBjYXNlcywgYW5kIHlvdSAqZGVmaW5pdGVseSogd2FudCB0byBlbnN1cmUgcHJvZ3JhbXMgYXJlIGF0dGFjaGVkIGNvcnJlY3RseS4KClRoZW4gSSBzZWUgdXBkYXRlcyB0byB0aGUgY2dyb3VwIEJQRiBhdHRhY2gvcmVwbGFjZSBsb2dpYyAoYF9fY2dyb3VwX2JwZl9hdHRhY2hgLCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgKS4gVGhhdCBoaW50cyBhdCBjaGFuZ2VzIHRvIGhvdyBCUEYgY2dyb3VwIHN0b3JhZ2UgaXMgaGFuZGxlZC4gVGhhdCBjb3VsZCBoYXZlIHJpcHBsZSBlZmZlY3RzLCBzbyB3b3J0aCBhIGNsb3NlciBsb29rLiBUaGV5JiMzOTtyZSBwcm9iYWJseSBmaXhpbmcgYSBzdG9yYWdlIGxlYWsgb3Igc29tZSBzaW1pbGFyIGdvdGNoYS4KClRoZSBmaXggZm9yIHRoZSBsb2NraW5nIGlzc3VlIGluIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AgaXMgYW5vdGhlciByZWQgZmxhZy4gTG9ja2luZyBidWdzIGFyZSBvZnRlbiBoYXJkIHRvIHNwb3QsIGVzcGVjaWFsbHkgaW4gY29uY3VycmVudCBjb2RlLCBzbyB0aGF0IGZpeCBpcyBsaWtlbHkgYSBnb29kIHRoaW5nLiBBbmQgUkNVIGxvY2tpbmcgZml4ZXMgaW4gYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBpcyBlcXVhbGx5IGltcG9ydGFudCwgcGFydGljdWxhcmx5IHNpbmNlIHRoZXNlIGFyZSByZWxhdGVkIHRvIGdldHRpbmcgaW5mb3JtYXRpb24gYWJvdXQgbGlua3MsIGxpa2VseSBmb3IgdG9vbHMuCgpTbywgZnVuY3Rpb25hbGx5LCB0aGlzIGlzIGFsbCBjb3JlIGtlcm5lbCBsb2dpYywgZGlyZWN0bHkgcmVhY2hhYmxlLCBhbmQgc3ViamVjdCB0byBmdXp6ZXIgaW1wYWN0LiBMZXQmIzM5O3MgbWFrZSBzdXJlIG91ciBmdXp6ZXJzIHBpY2sgdGhpcyB1cC4gSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7TkVUS0lUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21wcm9nX2F0dGFjaCYjMzQ7LAogICAgJiMzNDticGZfbXByb2dfZGV0YWNoJiMzNDssCiAgICAmIzM0O19fY2dyb3VwX2JwZl9hdHRhY2gmIzM0OywKICAgICYjMzQ7X19jZ3JvdXBfYnBmX3JlcGxhY2UmIzM0OywKICAgICYjMzQ7YnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2hvd19mZGluZm8mIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQmIzM0OywKICAgICYjMzQ7bmV0a2l0X3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O3RjeF9wcm9nX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiBsb2dpYyBmb3IgYXR0YWNoaW5nIGFuZCBkZXRhY2hpbmcgbXVsdGktcHJvZ3MgKGJwZl9tcHJvZ19hdHRhY2gsIGJwZl9tcHJvZ19kZXRhY2gpIHRvIGVuZm9yY2UgZXhwZWN0ZWQgbGluayB0eXBlcywgc3BlY2lmaWNhbGx5IGZvciBORVRLSVQgYW5kIFRDWC4gSXQgYWxzbyB1cGRhdGVzIGNncm91cCBCUEYgYXR0YWNoL3JlcGxhY2UgbG9naWMgdG8gcHJvcGVybHkgaGFuZGxlIEJQRiBjZ3JvdXAgc3RvcmFnZSwgYW5kIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZy4gQWRkaXRpb25hbGx5LCBpdCBmaXhlcyBSQ1UgbG9ja2luZyBpbiBicGZfbGlua19zaG93X2ZkaW5mbyBhbmQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O05FVEtJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9tcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7YnBmX21wcm9nX2RldGFjaCYjMzQ7LAogICAgJiMzNDtfX2Nncm91cF9icGZfYXR0YWNoJiMzNDssCiAgICAmIzM0O19fY2dyb3VwX2JwZl9yZXBsYWNlJiMzNDssCiAgICAmIzM0O2JwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nJiMzNDssCiAgICAmIzM0O2JwZl9saW5rX3Nob3dfZmRpbmZvJiMzNDssCiAgICAmIzM0O2JwZl9saW5rX2dldF9pbmZvX2J5X2ZkJiMzNDssCiAgICAmIzM0O25ldGtpdF9wcm9nX2F0dGFjaCYjMzQ7LAogICAgJiMzNDt0Y3hfcHJvZ19hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCUEYgbG9naWMgZm9yIGF0dGFjaGluZyBhbmQgZGV0YWNoaW5nIG11bHRpLXByb2dzIChicGZfbXByb2dfYXR0YWNoLCBicGZfbXByb2dfZGV0YWNoKSB0byBlbmZvcmNlIGV4cGVjdGVkIGxpbmsgdHlwZXMsIHNwZWNpZmljYWxseSBmb3IgTkVUS0lUIGFuZCBUQ1guIEl0IGFsc28gdXBkYXRlcyBjZ3JvdXAgQlBGIGF0dGFjaC9yZXBsYWNlIGxvZ2ljIHRvIHByb3Blcmx5IGhhbmRsZSBCUEYgY2dyb3VwIHN0b3JhZ2UsIGFuZCBmaXhlcyBhIGxvY2tpbmcgaXNzdWUgaW4gYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cuIEFkZGl0aW9uYWxseSwgaXQgZml4ZXMgUkNVIGxvY2tpbmcgaW4gYnBmX2xpbmtfc2hvd19mZGluZm8gYW5kIGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE0OjQ2Ljc0MDY4MTk2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3ODA4ODE0MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJORVRLSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfbXByb2dfYXR0YWNoXCIsXG4gICAgXCJicGZfbXByb2dfZGV0YWNoXCIsXG4gICAgXCJfX2Nncm91cF9icGZfYXR0YWNoXCIsXG4gICAgXCJfX2Nncm91cF9icGZfcmVwbGFjZVwiLFxuICAgIFwiYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dcIixcbiAgICBcImJwZl9saW5rX3Nob3dfZmRpbmZvXCIsXG4gICAgXCJicGZfbGlua19nZXRfaW5mb19ieV9mZFwiLFxuICAgIFwibmV0a2l0X3Byb2dfYXR0YWNoXCIsXG4gICAgXCJ0Y3hfcHJvZ19hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiBsb2dpYyBmb3IgYXR0YWNoaW5nIGFuZCBkZXRhY2hpbmcgbXVsdGktcHJvZ3MgKGJwZl9tcHJvZ19hdHRhY2gsIGJwZl9tcHJvZ19kZXRhY2gpIHRvIGVuZm9yY2UgZXhwZWN0ZWQgbGluayB0eXBlcywgc3BlY2lmaWNhbGx5IGZvciBORVRLSVQgYW5kIFRDWC4gSXQgYWxzbyB1cGRhdGVzIGNncm91cCBCUEYgYXR0YWNoL3JlcGxhY2UgbG9naWMgdG8gcHJvcGVybHkgaGFuZGxlIEJQRiBjZ3JvdXAgc3RvcmFnZSwgYW5kIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZy4gQWRkaXRpb25hbGx5LCBpdCBmaXhlcyBSQ1UgbG9ja2luZyBpbiBicGZfbGlua19zaG93X2ZkaW5mbyBhbmQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNDo0Ni43NDA2ODk3MjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5OTQ5MTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIxZjc1ZjM1MTgwNjg1MWJlMmIxOTRjMjA5NDBiY2NiZDgyMmUwZjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMDI6MTQ6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0a2l0LmMgYi9kcml2ZXJzL25ldC9uZXRraXQuY1xcbmluZGV4IGEzOTMxY2Q4MjEzMjFjLi45OWRkZjJiZWZiMjM4MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9uZXRraXQuY1xcbisrKyBiL2RyaXZlcnMvbmV0L25ldGtpdC5jXFxuQEAgLTc2OCw3ICs3NjgsNyBAQCBpbnQgbmV0a2l0X3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuIFxcdH1cXG4gXFx0cmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgXFx1MDAyNmVudHJ5X25ldywgcHJvZywgTlVMTCwgcmVwbGFjZV9wcm9nLFxcbiBcXHRcXHRcXHQgICAgICAgYXR0ci1cXHUwMDNlYXR0YWNoX2ZsYWdzLCBhdHRyLVxcdTAwM2VyZWxhdGl2ZV9mZCxcXG4tXFx0XFx0XFx0ICAgICAgIGF0dHItXFx1MDAzZWV4cGVjdGVkX3JldmlzaW9uKTtcXG4rXFx0XFx0XFx0ICAgICAgIGF0dHItXFx1MDAzZWV4cGVjdGVkX3JldmlzaW9uLCBCUEZfTElOS19UWVBFX05FVEtJVCk7XFxuIFxcdGlmICghcmV0KSB7XFxuIFxcdFxcdGlmIChlbnRyeSAhPSBlbnRyeV9uZXcpIHtcXG4gXFx0XFx0XFx0bmV0a2l0X2VudHJ5X3VwZGF0ZShkZXYsIGVudHJ5X25ldyk7XFxuQEAgLTgwMiw3ICs4MDIsNyBAQCBpbnQgbmV0a2l0X3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcdHJldCA9IGJwZl9tcHJvZ19kZXRhY2goZW50cnksIFxcdTAwMjZlbnRyeV9uZXcsIHByb2csIE5VTEwsIGF0dHItXFx1MDAzZWF0dGFjaF9mbGFncyxcXG4tXFx0XFx0XFx0ICAgICAgIGF0dHItXFx1MDAzZXJlbGF0aXZlX2ZkLCBhdHRyLVxcdTAwM2VleHBlY3RlZF9yZXZpc2lvbik7XFxuK1xcdFxcdFxcdCAgICAgICBhdHRyLVxcdTAwM2VyZWxhdGl2ZV9mZCwgYXR0ci1cXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfTkVUS0lUKTtcXG4gXFx0aWYgKCFyZXQpIHtcXG4gXFx0XFx0aWYgKCFicGZfbXByb2dfdG90YWwoZW50cnlfbmV3KSlcXG4gXFx0XFx0XFx0ZW50cnlfbmV3ID0gTlVMTDtcXG5AQCAtODUwLDcgKzg1MCw3IEBAIHN0YXRpYyBpbnQgbmV0a2l0X2xpbmtfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9saW5rICpsaW5rLCB1MzIgZmxhZ3MsXFxuIFxcdEFTU0VSVF9SVE5MKCk7XFxuIFxcdGVudHJ5ID0gbmV0a2l0X2VudHJ5X2ZldGNoKGRldiwgdHJ1ZSk7XFxuIFxcdHJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksIFxcdTAwMjZlbnRyeV9uZXcsIGxpbmstXFx1MDAzZXByb2csIGxpbmssIE5VTEwsIGZsYWdzLFxcbi1cXHRcXHRcXHQgICAgICAgaWRfb3JfZmQsIHJldmlzaW9uKTtcXG4rXFx0XFx0XFx0ICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbiwgQlBGX0xJTktfVFlQRV9ORVRLSVQpO1xcbiBcXHRpZiAoIXJldCkge1xcbiBcXHRcXHRpZiAoZW50cnkgIT0gZW50cnlfbmV3KSB7XFxuIFxcdFxcdFxcdG5ldGtpdF9lbnRyeV91cGRhdGUoZGV2LCBlbnRyeV9uZXcpO1xcbkBAIC04NzcsNyArODc3LDcgQEAgc3RhdGljIHZvaWQgbmV0a2l0X2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuIFxcdFxcdHJldCA9IC1FTk9FTlQ7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuLVxcdHJldCA9IGJwZl9tcHJvZ19kZXRhY2goZW50cnksIFxcdTAwMjZlbnRyeV9uZXcsIGxpbmstXFx1MDAzZXByb2csIGxpbmssIDAsIDAsIDApO1xcbitcXHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcXHUwMDI2ZW50cnlfbmV3LCBsaW5rLVxcdTAwM2Vwcm9nLCBsaW5rLCAwLCAwLCAwLCBCUEZfTElOS19UWVBFX05FVEtJVCk7XFxuIFxcdGlmICghcmV0KSB7XFxuIFxcdFxcdGlmICghYnBmX21wcm9nX3RvdGFsKGVudHJ5X25ldykpXFxuIFxcdFxcdFxcdGVudHJ5X25ldyA9IE5VTEw7XFxuQEAgLTkxOSw5ICs5MTksOCBAQCBzdGF0aWMgaW50IG5ldGtpdF9saW5rX3VwZGF0ZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbnByb2csXFxuIFxcdFxcdHJldCA9IC1FTk9FTlQ7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuLVxcdHJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksIFxcdTAwMjZlbnRyeV9uZXcsIG5wcm9nLCBsaW5rLCBvcHJvZyxcXG4tXFx0XFx0XFx0ICAgICAgIEJQRl9GX1JFUExBQ0UgfCBCUEZfRl9JRCxcXG4tXFx0XFx0XFx0ICAgICAgIGxpbmstXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaWQsIDApO1xcbitcXHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcXHUwMDI2ZW50cnlfbmV3LCBucHJvZywgbGluaywgb3Byb2csIEJQRl9GX1JFUExBQ0UgfCBCUEZfRl9JRCxcXG4rXFx0XFx0XFx0ICAgICAgIGxpbmstXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaWQsIDAsIEJQRl9MSU5LX1RZUEVfTkVUS0lUKTtcXG4gXFx0aWYgKCFyZXQpIHtcXG4gXFx0XFx0V0FSTl9PTl9PTkNFKGVudHJ5ICE9IGVudHJ5X25ldyk7XFxuIFxcdFxcdG9wcm9nID0geGNoZyhcXHUwMDI2bGluay1cXHUwMDNlcHJvZywgbnByb2cpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl9tcHJvZy5oIGIvaW5jbHVkZS9saW51eC9icGZfbXByb2cuaFxcbmluZGV4IDBiOWY0Y2FlZWIwYTMyLi4xZmJlMWE5MjM5NjhmYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl9tcHJvZy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfbXByb2cuaFxcbkBAIC0zMjEsMTIgKzMyMSwxNCBAQCBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LFxcbiBcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZ19uZXcsIHN0cnVjdCBicGZfbGluayAqbGluayxcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dfb2xkLFxcbi1cXHRcXHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24pO1xcbitcXHRcXHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24sXFxuK1xcdFxcdCAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSk7XFxuIFxcbiBpbnQgYnBmX21wcm9nX2RldGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LFxcbiBcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi1cXHRcXHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24pO1xcbitcXHRcXHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24sXFxuK1xcdFxcdCAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSk7XFxuIFxcbiBpbnQgYnBmX21wcm9nX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyLFxcbiBcXHRcXHQgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnkpO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xcbmluZGV4IDQzNTVjY2I3OGE5YzY3Li41NmQ1MzhmMDU1MjAwNCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXFxuKysrIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xcbkBAIC04MTMsMTAgKzgxMywxMiBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEw7XFxuIFxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbiBcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuK1xcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXFx1MDAzZWxpbmsucHJvZztcXG4gXFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7XFxuIFxcdHN0cnVjdCBobGlzdF9oZWFkICpwcm9ncztcXG4rXFx0dTggb2xkX2ZsYWdzO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKCgoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BTExPV19PVkVSUklERSkgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpKSB8fFxcbkBAIC04ODMsNyArODg1LDEwIEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbiBcXHRwbC1cXHUwMDNlcHJvZyA9IHByb2c7XFxuIFxcdHBsLVxcdTAwM2VsaW5rID0gbGluaztcXG4gXFx0cGwtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuK1xcdGlmIChvbGRfcHJvZylcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVxcdTAwM2VzdG9yYWdlKTtcXG4gXFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xcbitcXHRvbGRfZmxhZ3MgPSBjZ3JwLVxcdTAwM2VicGYuZmxhZ3NbYXR5cGVdO1xcbiBcXHRjZ3JwLVxcdTAwM2VicGYuZmxhZ3NbYXR5cGVdID0gc2F2ZWRfZmxhZ3M7XFxuIFxcbiBcXHRpZiAodHlwZSA9PSBCUEZfTFNNX0NHUk9VUCkge1xcbkBAIC05MTUsMTIgKzkyMCwxNCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gXFx0aWYgKG9sZF9wcm9nKSB7XFxuIFxcdFxcdHBsLVxcdTAwM2Vwcm9nID0gb2xkX3Byb2c7XFxuIFxcdFxcdHBsLVxcdTAwM2VsaW5rID0gTlVMTDtcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcXG4gXFx0fVxcbiBcXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpO1xcbiBcXHRpZiAoIW9sZF9wcm9nKSB7XFxuIFxcdFxcdGhsaXN0X2RlbChcXHUwMDI2cGwtXFx1MDAzZW5vZGUpO1xcbiBcXHRcXHRrZnJlZShwbCk7XFxuIFxcdH1cXG4rXFx0Y2dycC1cXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IG9sZF9mbGFncztcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMTAzMiwxMSArMTAzOSwxNyBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cpXFxuIHtcXG4rXFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbitcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuK1xcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbitcXHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlO1xcbiBcXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XFxuK1xcdGJvb2wgc3RvcmFnZV9jaGFuZ2VkID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XFxuIFxcdHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDtcXG4gXFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xcbiBcXHRib29sIGZvdW5kID0gZmFsc2U7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHRhdHlwZSA9IGJwZl9jZ3JvdXBfYXR5cGVfZmluZChsaW5rLVxcdTAwM2VsaW5rLmF0dGFjaF90eXBlLCBuZXdfcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhdHRhY2hfYnRmX2lkKTtcXG4gXFx0aWYgKGF0eXBlIFxcdTAwM2MgMClcXG5AQCAtMTA1NiwxMCArMTA2OSwzOSBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIFxcdGlmICghZm91bmQpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG4rXFx0aWYgKGJwZl9jZ3JvdXBfc3RvcmFnZXNfYWxsb2Moc3RvcmFnZSwgbmV3X3N0b3JhZ2UsIGxpbmstXFx1MDAzZWxpbmsuYXR0YWNoX3R5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIG5ld19wcm9nLCBjZ3JwKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKSB7XFxuK1xcdFxcdGlmIChzdG9yYWdlW3N0eXBlXSAhPSBwbC1cXHUwMDNlc3RvcmFnZVtzdHlwZV0pIHtcXG4rXFx0XFx0XFx0c3RvcmFnZV9jaGFuZ2VkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0Y2dycC1cXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gKz0gMTtcXG4gXFx0b2xkX3Byb2cgPSB4Y2hnKFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKTtcXG4tXFx0cmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpO1xcbitcXG4rXFx0aWYgKCFzdG9yYWdlX2NoYW5nZWQpIHtcXG4rXFx0XFx0cmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpO1xcbitcXHRcXHRicGZfcHJvZ19wdXQob2xkX3Byb2cpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVxcdTAwM2VzdG9yYWdlKTtcXG4rXFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xcbitcXHRlcnIgPSB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzKGNncnAsIGF0eXBlKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHR4Y2hnKFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLnByb2csIG9sZF9wcm9nKTtcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcXG4rXFx0XFx0Y2dycC1cXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gLT0gMTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4gXFx0YnBmX3Byb2dfcHV0KG9sZF9wcm9nKTtcXG4rXFx0YnBmX2Nncm91cF9zdG9yYWdlc19saW5rKG5ld19zdG9yYWdlLCBjZ3JwLCBsaW5rLVxcdTAwM2VsaW5rLmF0dGFjaF90eXBlKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbXByb2cuYyBiL2tlcm5lbC9icGYvbXByb2cuY1xcbmluZGV4IDEzOTQxNjgwNjJlODU2Li5iNGExYjM1ZmY1NjkzNiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL21wcm9nLmNcXG4rKysgYi9rZXJuZWwvYnBmL21wcm9nLmNcXG5AQCAtNiw3ICs2LDcgQEBcXG4gXFxuIHN0YXRpYyBpbnQgYnBmX21wcm9nX2xpbmsoc3RydWN0IGJwZl90dXBsZSAqdHVwbGUsXFxuIFxcdFxcdFxcdCAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsXFxuLVxcdFxcdFxcdCAgZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXFxuK1xcdFxcdFxcdCAgZW51bSBicGZfbGlua190eXBlIHR5cGUpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9saW5rICpsaW5rID0gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFx0Ym9vbCBpZCA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfSUQ7XFxuQEAgLTE3LDcgKzE3LDcgQEAgc3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcXG4gXFx0XFx0bGluayA9IGJwZl9saW5rX2dldF9mcm9tX2ZkKGlkX29yX2ZkKTtcXG4gXFx0aWYgKElTX0VSUihsaW5rKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIobGluayk7XFxuLVxcdGlmICh0eXBlIFxcdTAwMjZcXHUwMDI2IGxpbmstXFx1MDAzZXByb2ctXFx1MDAzZXR5cGUgIT0gdHlwZSkge1xcbitcXHRpZiAodHlwZSBcXHUwMDI2XFx1MDAyNiBsaW5rLVxcdTAwM2V0eXBlICE9IHR5cGUpIHtcXG4gXFx0XFx0YnBmX2xpbmtfcHV0KGxpbmspO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbkBAIC01MiwyMSArNTIsMjIgQEAgc3RhdGljIGludCBicGZfbXByb2dfcHJvZyhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcXG4gXFxuIHN0YXRpYyBpbnQgYnBmX21wcm9nX3R1cGxlX3JlbGF0aXZlKHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlLFxcbiBcXHRcXHRcXHRcXHQgICAgdTMyIGlkX29yX2ZkLCB1MzIgZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdCAgICBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSlcXG4rXFx0XFx0XFx0XFx0ICAgIGVudW0gYnBmX2xpbmtfdHlwZSBsdHlwZSxcXG4rXFx0XFx0XFx0XFx0ICAgIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSlcXG4ge1xcbiBcXHRib29sIGxpbmsgPSBmbGFncyBcXHUwMDI2IEJQRl9GX0xJTks7XFxuIFxcdGJvb2wgaWQgPSBmbGFncyBcXHUwMDI2IEJQRl9GX0lEO1xcbiBcXG4gXFx0bWVtc2V0KHR1cGxlLCAwLCBzaXplb2YoKnR1cGxlKSk7XFxuIFxcdGlmIChsaW5rKVxcbi1cXHRcXHRyZXR1cm4gYnBmX21wcm9nX2xpbmsodHVwbGUsIGlkX29yX2ZkLCBmbGFncywgdHlwZSk7XFxuK1xcdFxcdHJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCBsdHlwZSk7XFxuIFxcdC8qIElmIG5vIHJlbGV2YW50IGZsYWcgaXMgc2V0IGFuZCBubyBpZF9vcl9mZCB3YXMgcGFzc2VkLCB0aGVuXFxuIFxcdCAqIHR1cGxlIGxpbmsvcHJvZyBpcyBqdXN0IE5VTExlZC4gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIGJlZm9yZS9cXG4gXFx0ICogYWZ0ZXIgc2VsZWN0cyBmaXJzdC9sYXN0IHBvc2l0aW9uIHdpdGhvdXQgcGFzc2luZyBmZC5cXG4gXFx0ICovXFxuIFxcdGlmICghaWQgXFx1MDAyNlxcdTAwMjYgIWlkX29yX2ZkKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIGJwZl9tcHJvZ19wcm9nKHR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsIHR5cGUpO1xcbitcXHRyZXR1cm4gYnBmX21wcm9nX3Byb2codHVwbGUsIGlkX29yX2ZkLCBmbGFncywgcHR5cGUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBicGZfbXByb2dfdHVwbGVfcHV0KHN0cnVjdCBicGZfdHVwbGUgKnR1cGxlKVxcbkBAIC0yMjYsNyArMjI3LDggQEAgaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxuIFxcdFxcdCAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldyxcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dfbmV3LCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuIFxcdFxcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nX29sZCxcXG4tXFx0XFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uKVxcbitcXHRcXHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24sXFxuK1xcdFxcdCAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3R1cGxlIHJ0dXBsZSwgbnR1cGxlID0ge1xcbiBcXHRcXHQucHJvZyA9IHByb2dfbmV3LFxcbkBAIC0yNDMsNiArMjQ1LDcgQEAgaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXHRyZXQgPSBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmUoXFx1MDAyNnJ0dXBsZSwgaWRfb3JfZmQsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBmbGFncyBcXHUwMDI2IH5CUEZfRl9SRVBMQUNFLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZXhwZWN0ZWRfbGlua190eXBlLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgcHJvZ19uZXctXFx1MDAzZXR5cGUpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbkBAIC0zMjgsNyArMzMxLDggQEAgc3RhdGljIGludCBicGZfbXByb2dfZmV0Y2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxuIGludCBicGZfbXByb2dfZGV0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxcbiBcXHRcXHQgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsXFxuIFxcdFxcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLVxcdFxcdCAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbilcXG4rXFx0XFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uLFxcbitcXHRcXHQgICAgIGVudW0gYnBmX2xpbmtfdHlwZSBleHBlY3RlZF9saW5rX3R5cGUpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl90dXBsZSBydHVwbGUsIGR0dXBsZSA9IHtcXG4gXFx0XFx0LnByb2cgPSBwcm9nLFxcbkBAIC0zNDMsOCArMzQ3LDkgQEAgaW50IGJwZl9tcHJvZ19kZXRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxuIFxcdGlmICghYnBmX21wcm9nX3RvdGFsKGVudHJ5KSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcdHJldCA9IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZShcXHUwMDI2cnR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBwcm9nID8gcHJvZy1cXHUwMDNldHlwZSA6XFxuLVxcdFxcdFxcdFxcdCAgICAgICBCUEZfUFJPR19UWVBFX1VOU1BFQyk7XFxuK1xcdFxcdFxcdFxcdCAgICAgICBleHBlY3RlZF9saW5rX3R5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICAvKiBVc2UgVU5TUEVDIGFzIHdpbGRjYXJkIHdoZW4gcHJvZyBpcyBOVUxMICovXFxuK1xcdFxcdFxcdFxcdCAgICAgICBwcm9nID8gcHJvZy1cXHUwMDNldHlwZSA6IEJQRl9QUk9HX1RZUEVfVU5TUEVDKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0aWYgKGR0dXBsZS5wcm9nKSB7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jIGIva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcXG5pbmRleCAyNWYzMGY5ZWRhZWZkMy4uOWZjNjJkYjE0NDFjNjIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcXG4rKysgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xcbkBAIC0xNzEsMTMgKzE3MSwxNyBAQCBzdGF0aWMgaW50IGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nKHN0cnVjdCBicGZfbGluayAqbGluayxcXG4gXFx0c3RydWN0IG5ldCAqbmV0O1xcbiBcXHRpbnQgaWR4LCByZXQ7XFxuIFxcbi1cXHRpZiAob2xkX3Byb2cgXFx1MDAyNlxcdTAwMjYgb2xkX3Byb2cgIT0gbGluay1cXHUwMDNlcHJvZylcXG4tXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tXFx0aWYgKG5ld19wcm9nLVxcdTAwM2V0eXBlICE9IGxpbmstXFx1MDAzZXByb2ctXFx1MDAzZXR5cGUpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmV0bnNfYnBmX211dGV4KTtcXG4gXFxuK1xcdGlmIChvbGRfcHJvZyBcXHUwMDI2XFx1MDAyNiBvbGRfcHJvZyAhPSBsaW5rLVxcdTAwM2Vwcm9nKSB7XFxuK1xcdFxcdHJldCA9IC1FUEVSTTtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHR9XFxuK1xcdGlmIChuZXdfcHJvZy1cXHUwMDNldHlwZSAhPSBsaW5rLVxcdTAwM2Vwcm9nLVxcdTAwM2V0eXBlKSB7XFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0fVxcbitcXG4gXFx0bmV0ID0gbmV0X2xpbmstXFx1MDAzZW5ldDtcXG4gXFx0aWYgKCFuZXQgfHwgIWNoZWNrX25ldChuZXQpKSB7XFxuIFxcdFxcdC8qIExpbmsgYXV0by1kZXRhY2hlZCBvciBuZXRucyBkeWluZyAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuaW5kZXggNmRiMzA2ZDIzYjQ3OWYuLmNhZDk4NjgwN2Q1MzAzIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcXG5AQCAtMzQ3MSw5ICszNDcxLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpicGZfbGlua190eXBlX3N0cnNbXSA9IHtcXG4gc3RhdGljIHZvaWQgYnBmX2xpbmtfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuLVxcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGxpbmstXFx1MDAzZXByb2c7XFxuK1xcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG4gXFx0ZW51bSBicGZfbGlua190eXBlIHR5cGUgPSBsaW5rLVxcdTAwM2V0eXBlO1xcbiBcXHRjaGFyIHByb2dfdGFnW3NpemVvZihwcm9nLVxcdTAwM2V0YWcpICogMiArIDFdID0geyB9O1xcbitcXHR1MzIgcHJvZ19pZDtcXG4gXFxuIFxcdGlmICh0eXBlIFxcdTAwM2MgQVJSQVlfU0laRShicGZfbGlua190eXBlX3N0cnMpIFxcdTAwMjZcXHUwMDI2IGJwZl9saW5rX3R5cGVfc3Ryc1t0eXBlXSkge1xcbiBcXHRcXHRpZiAobGluay1cXHUwMDNldHlwZSA9PSBCUEZfTElOS19UWVBFX0tQUk9CRV9NVUxUSSlcXG5AQCAtMzQ5MCwxMyArMzQ5MSwyMCBAQCBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxcbiBcXHR9XFxuIFxcdHNlcV9wcmludGYobSwgXFxcImxpbmtfaWQ6XFxcXHQldVxcXFxuXFxcIiwgbGluay1cXHUwMDNlaWQpO1xcbiBcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRwcm9nID0gUkVBRF9PTkNFKGxpbmstXFx1MDAzZXByb2cpO1xcbiBcXHRpZiAocHJvZykge1xcbiBcXHRcXHRiaW4yaGV4KHByb2dfdGFnLCBwcm9nLVxcdTAwM2V0YWcsIHNpemVvZihwcm9nLVxcdTAwM2V0YWcpKTtcXG4rXFx0XFx0cHJvZ19pZCA9IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaWQ7XFxuK1xcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRpZiAocHJvZykge1xcbiBcXHRcXHRzZXFfcHJpbnRmKG0sXFxuIFxcdFxcdFxcdCAgIFxcXCJwcm9nX3RhZzpcXFxcdCVzXFxcXG5cXFwiXFxuIFxcdFxcdFxcdCAgIFxcXCJwcm9nX2lkOlxcXFx0JXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgIHByb2dfdGFnLFxcbi1cXHRcXHRcXHQgICBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWlkKTtcXG4rXFx0XFx0XFx0ICAgcHJvZ19pZCk7XFxuIFxcdH1cXG4gXFx0aWYgKGxpbmstXFx1MDAzZW9wcy1cXHUwMDNlc2hvd19mZGluZm8pXFxuIFxcdFxcdGxpbmstXFx1MDAzZW9wcy1cXHUwMDNlc2hvd19mZGluZm8obGluaywgbSk7XFxuQEAgLTU1MzUsNiArNTU0Myw3IEBAIHN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9saW5rX2luZm8gX191c2VyICp1aW5mbyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2VpbmZvLmluZm8pO1xcbiBcXHRzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBpbmZvO1xcbitcXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuIFxcdHUzMiBpbmZvX2xlbiA9IGF0dHItXFx1MDAzZWluZm8uaW5mb19sZW47XFxuIFxcdGludCBlcnI7XFxuIFxcbkBAIC01NTQ5LDggKzU1NTgsMTIgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFxuIFxcdGluZm8udHlwZSA9IGxpbmstXFx1MDAzZXR5cGU7XFxuIFxcdGluZm8uaWQgPSBsaW5rLVxcdTAwM2VpZDtcXG4tXFx0aWYgKGxpbmstXFx1MDAzZXByb2cpXFxuLVxcdFxcdGluZm8ucHJvZ19pZCA9IGxpbmstXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaWQ7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHByb2cgPSBSRUFEX09OQ0UobGluay1cXHUwMDNlcHJvZyk7XFxuK1xcdGlmIChwcm9nKVxcbitcXHRcXHRpbmZvLnByb2dfaWQgPSBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWlkO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdGlmIChsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZWZpbGxfbGlua19pbmZvKSB7XFxuIFxcdFxcdGVyciA9IGxpbmstXFx1MDAzZW9wcy1cXHUwMDNlZmlsbF9saW5rX2luZm8obGluaywgXFx1MDAyNmluZm8pO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RjeC5jIGIva2VybmVsL2JwZi90Y3guY1xcbmluZGV4IDAyZGIwMTEzYjhlN2M2Li5mMjA4Y2VmMTNhOThlMyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3RjeC5jXFxuKysrIGIva2VybmVsL2JwZi90Y3guY1xcbkBAIC0zOCw3ICszOCw3IEBAIGludCB0Y3hfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4gXFx0fVxcbiBcXHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcXHUwMDI2ZW50cnlfbmV3LCBwcm9nLCBOVUxMLCByZXBsYWNlX3Byb2csXFxuIFxcdFxcdFxcdCAgICAgICBhdHRyLVxcdTAwM2VhdHRhY2hfZmxhZ3MsIGF0dHItXFx1MDAzZXJlbGF0aXZlX2ZkLFxcbi1cXHRcXHRcXHQgICAgICAgYXR0ci1cXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24pO1xcbitcXHRcXHRcXHQgICAgICAgYXR0ci1cXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfVENYKTtcXG4gXFx0aWYgKCFyZXQpIHtcXG4gXFx0XFx0aWYgKGVudHJ5ICE9IGVudHJ5X25ldykge1xcbiBcXHRcXHRcXHR0Y3hfZW50cnlfdXBkYXRlKGRldiwgZW50cnlfbmV3LCBpbmdyZXNzKTtcXG5AQCAtNzYsNyArNzYsNyBAQCBpbnQgdGN4X3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcdHJldCA9IGJwZl9tcHJvZ19kZXRhY2goZW50cnksIFxcdTAwMjZlbnRyeV9uZXcsIHByb2csIE5VTEwsIGF0dHItXFx1MDAzZWF0dGFjaF9mbGFncyxcXG4tXFx0XFx0XFx0ICAgICAgIGF0dHItXFx1MDAzZXJlbGF0aXZlX2ZkLCBhdHRyLVxcdTAwM2VleHBlY3RlZF9yZXZpc2lvbik7XFxuK1xcdFxcdFxcdCAgICAgICBhdHRyLVxcdTAwM2VyZWxhdGl2ZV9mZCwgYXR0ci1cXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfVENYKTtcXG4gXFx0aWYgKCFyZXQpIHtcXG4gXFx0XFx0aWYgKCF0Y3hfZW50cnlfaXNfYWN0aXZlKGVudHJ5X25ldykpXFxuIFxcdFxcdFxcdGVudHJ5X25ldyA9IE5VTEw7XFxuQEAgLTE1Miw3ICsxNTIsNyBAQCBzdGF0aWMgaW50IHRjeF9saW5rX3Byb2dfYXR0YWNoKHN0cnVjdCBicGZfbGluayAqbGluaywgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsXFxuIFxcdGlmICghZW50cnkpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcXHUwMDI2ZW50cnlfbmV3LCBsaW5rLVxcdTAwM2Vwcm9nLCBsaW5rLCBOVUxMLCBmbGFncyxcXG4tXFx0XFx0XFx0ICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbik7XFxuK1xcdFxcdFxcdCAgICAgICBpZF9vcl9mZCwgcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfVENYKTtcXG4gXFx0aWYgKCFyZXQpIHtcXG4gXFx0XFx0aWYgKGVudHJ5ICE9IGVudHJ5X25ldykge1xcbiBcXHRcXHRcXHR0Y3hfZW50cnlfdXBkYXRlKGRldiwgZW50cnlfbmV3LCBpbmdyZXNzKTtcXG5AQCAtMTgzLDcgKzE4Myw3IEBAIHN0YXRpYyB2b2lkIHRjeF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbiBcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbi1cXHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcXHUwMDI2ZW50cnlfbmV3LCBsaW5rLVxcdTAwM2Vwcm9nLCBsaW5rLCAwLCAwLCAwKTtcXG4rXFx0cmV0ID0gYnBmX21wcm9nX2RldGFjaChlbnRyeSwgXFx1MDAyNmVudHJ5X25ldywgbGluay1cXHUwMDNlcHJvZywgbGluaywgMCwgMCwgMCwgQlBGX0xJTktfVFlQRV9UQ1gpO1xcbiBcXHRpZiAoIXJldCkge1xcbiBcXHRcXHRpZiAoIXRjeF9lbnRyeV9pc19hY3RpdmUoZW50cnlfbmV3KSlcXG4gXFx0XFx0XFx0ZW50cnlfbmV3ID0gTlVMTDtcXG5AQCAtMjI5LDkgKzIyOSw4IEBAIHN0YXRpYyBpbnQgdGN4X2xpbmtfdXBkYXRlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpucHJvZyxcXG4gXFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4tXFx0cmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgXFx1MDAyNmVudHJ5X25ldywgbnByb2csIGxpbmssIG9wcm9nLFxcbi1cXHRcXHRcXHQgICAgICAgQlBGX0ZfUkVQTEFDRSB8IEJQRl9GX0lELFxcbi1cXHRcXHRcXHQgICAgICAgbGluay1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VpZCwgMCk7XFxuK1xcdHJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksIFxcdTAwMjZlbnRyeV9uZXcsIG5wcm9nLCBsaW5rLCBvcHJvZywgQlBGX0ZfUkVQTEFDRSB8IEJQRl9GX0lELFxcbitcXHRcXHRcXHQgICAgICAgbGluay1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VpZCwgMCwgQlBGX0xJTktfVFlQRV9UQ1gpO1xcbiBcXHRpZiAoIXJldCkge1xcbiBcXHRcXHRXQVJOX09OX09OQ0UoZW50cnkgIT0gZW50cnlfbmV3KTtcXG4gXFx0XFx0b3Byb2cgPSB4Y2hnKFxcdTAwMjZsaW5rLVxcdTAwM2Vwcm9nLCBucHJvZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE0OjQ3LjQ0MTMwNTcyM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3MTA4MTgwMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJORVRLSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfbXByb2dfYXR0YWNoXCIsXG4gICAgXCJicGZfbXByb2dfZGV0YWNoXCIsXG4gICAgXCJfX2Nncm91cF9icGZfYXR0YWNoXCIsXG4gICAgXCJfX2Nncm91cF9icGZfcmVwbGFjZVwiLFxuICAgIFwiYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dcIixcbiAgICBcImJwZl9saW5rX3Nob3dfZmRpbmZvXCIsXG4gICAgXCJicGZfbGlua19nZXRfaW5mb19ieV9mZFwiLFxuICAgIFwibmV0a2l0X3Byb2dfYXR0YWNoXCIsXG4gICAgXCJ0Y3hfcHJvZ19hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiBsb2dpYyBmb3IgYXR0YWNoaW5nIGFuZCBkZXRhY2hpbmcgbXVsdGktcHJvZ3MgKGJwZl9tcHJvZ19hdHRhY2gsIGJwZl9tcHJvZ19kZXRhY2gpIHRvIGVuZm9yY2UgZXhwZWN0ZWQgbGluayB0eXBlcywgc3BlY2lmaWNhbGx5IGZvciBORVRLSVQgYW5kIFRDWC4gSXQgYWxzbyB1cGRhdGVzIGNncm91cCBCUEYgYXR0YWNoL3JlcGxhY2UgbG9naWMgdG8gcHJvcGVybHkgaGFuZGxlIEJQRiBjZ3JvdXAgc3RvcmFnZSwgYW5kIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZy4gQWRkaXRpb25hbGx5LCBpdCBmaXhlcyBSQ1UgbG9ja2luZyBpbiBicGZfbGlua19zaG93X2ZkaW5mbyBhbmQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIxZjc1ZjM1MTgwNjg1MWJlMmIxOTRjMjA5NDBiY2NiZDgyMmUwZjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAwMjoxNDo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGtpdC5jIGIvZHJpdmVycy9uZXQvbmV0a2l0LmNcbmluZGV4IGEzOTMxY2Q4MjEzMjFjLi45OWRkZjJiZWZiMjM4MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGtpdC5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRraXQuY1xuQEAgLTc2OCw3ICs3NjgsNyBAQCBpbnQgbmV0a2l0X3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHR9XG4gXHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIHByb2csIE5VTEwsIHJlcGxhY2VfcHJvZyxcbiBcdFx0XHQgICAgICAgYXR0ci1cdTAwM2VhdHRhY2hfZmxhZ3MsIGF0dHItXHUwMDNlcmVsYXRpdmVfZmQsXG4tXHRcdFx0ICAgICAgIGF0dHItXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24pO1xuK1x0XHRcdCAgICAgICBhdHRyLVx1MDAzZWV4cGVjdGVkX3JldmlzaW9uLCBCUEZfTElOS19UWVBFX05FVEtJVCk7XG4gXHRpZiAoIXJldCkge1xuIFx0XHRpZiAoZW50cnkgIT0gZW50cnlfbmV3KSB7XG4gXHRcdFx0bmV0a2l0X2VudHJ5X3VwZGF0ZShkZXYsIGVudHJ5X25ldyk7XG5AQCAtODAyLDcgKzgwMiw3IEBAIGludCBuZXRraXRfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIHByb2csIE5VTEwsIGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzLFxuLVx0XHRcdCAgICAgICBhdHRyLVx1MDAzZXJlbGF0aXZlX2ZkLCBhdHRyLVx1MDAzZWV4cGVjdGVkX3JldmlzaW9uKTtcbitcdFx0XHQgICAgICAgYXR0ci1cdTAwM2VyZWxhdGl2ZV9mZCwgYXR0ci1cdTAwM2VleHBlY3RlZF9yZXZpc2lvbiwgQlBGX0xJTktfVFlQRV9ORVRLSVQpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0aWYgKCFicGZfbXByb2dfdG90YWwoZW50cnlfbmV3KSlcbiBcdFx0XHRlbnRyeV9uZXcgPSBOVUxMO1xuQEAgLTg1MCw3ICs4NTAsNyBAQCBzdGF0aWMgaW50IG5ldGtpdF9saW5rX3Byb2dfYXR0YWNoKHN0cnVjdCBicGZfbGluayAqbGluaywgdTMyIGZsYWdzLFxuIFx0QVNTRVJUX1JUTkwoKTtcbiBcdGVudHJ5ID0gbmV0a2l0X2VudHJ5X2ZldGNoKGRldiwgdHJ1ZSk7XG4gXHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIGxpbmstXHUwMDNlcHJvZywgbGluaywgTlVMTCwgZmxhZ3MsXG4tXHRcdFx0ICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbik7XG4rXHRcdFx0ICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbiwgQlBGX0xJTktfVFlQRV9ORVRLSVQpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0aWYgKGVudHJ5ICE9IGVudHJ5X25ldykge1xuIFx0XHRcdG5ldGtpdF9lbnRyeV91cGRhdGUoZGV2LCBlbnRyeV9uZXcpO1xuQEAgLTg3Nyw3ICs4NzcsNyBAQCBzdGF0aWMgdm9pZCBuZXRraXRfbGlua19yZWxlYXNlKHN0cnVjdCBicGZfbGluayAqbGluaylcbiBcdFx0cmV0ID0gLUVOT0VOVDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4tXHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIGxpbmstXHUwMDNlcHJvZywgbGluaywgMCwgMCwgMCk7XG4rXHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIGxpbmstXHUwMDNlcHJvZywgbGluaywgMCwgMCwgMCwgQlBGX0xJTktfVFlQRV9ORVRLSVQpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0aWYgKCFicGZfbXByb2dfdG90YWwoZW50cnlfbmV3KSlcbiBcdFx0XHRlbnRyeV9uZXcgPSBOVUxMO1xuQEAgLTkxOSw5ICs5MTksOCBAQCBzdGF0aWMgaW50IG5ldGtpdF9saW5rX3VwZGF0ZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbnByb2csXG4gXHRcdHJldCA9IC1FTk9FTlQ7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuLVx0cmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgXHUwMDI2ZW50cnlfbmV3LCBucHJvZywgbGluaywgb3Byb2csXG4tXHRcdFx0ICAgICAgIEJQRl9GX1JFUExBQ0UgfCBCUEZfRl9JRCxcbi1cdFx0XHQgICAgICAgbGluay1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZCwgMCk7XG4rXHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIG5wcm9nLCBsaW5rLCBvcHJvZywgQlBGX0ZfUkVQTEFDRSB8IEJQRl9GX0lELFxuK1x0XHRcdCAgICAgICBsaW5rLVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWlkLCAwLCBCUEZfTElOS19UWVBFX05FVEtJVCk7XG4gXHRpZiAoIXJldCkge1xuIFx0XHRXQVJOX09OX09OQ0UoZW50cnkgIT0gZW50cnlfbmV3KTtcbiBcdFx0b3Byb2cgPSB4Y2hnKFx1MDAyNmxpbmstXHUwMDNlcHJvZywgbnByb2cpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX21wcm9nLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9tcHJvZy5oXG5pbmRleCAwYjlmNGNhZWViMGEzMi4uMWZiZTFhOTIzOTY4ZmMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl9tcHJvZy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl9tcHJvZy5oXG5AQCAtMzIxLDEyICszMjEsMTQgQEAgaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHRcdCAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldyxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dfbmV3LCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4gXHRcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nX29sZCxcbi1cdFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uKTtcbitcdFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uLFxuK1x0XHQgICAgIGVudW0gYnBmX2xpbmtfdHlwZSBleHBlY3RlZF9saW5rX3R5cGUpO1xuIFxuIGludCBicGZfbXByb2dfZGV0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxuIFx0XHQgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsXG4gXHRcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tXHRcdCAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbik7XG4rXHRcdCAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbixcbitcdFx0ICAgICBlbnVtIGJwZl9saW5rX3R5cGUgZXhwZWN0ZWRfbGlua190eXBlKTtcbiBcbiBpbnQgYnBmX21wcm9nX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyLFxuIFx0XHQgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnkpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5pbmRleCA0MzU1Y2NiNzhhOWM2Ny4uNTZkNTM4ZjA1NTIwMDQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtODEzLDEwICs4MTMsMTIgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDtcbiBcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuIFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuK1x0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuIFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXHUwMDNlbGluay5wcm9nO1xuIFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xuK1x0dTggb2xkX2ZsYWdzO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICgoKGZsYWdzIFx1MDAyNiBCUEZfRl9BTExPV19PVkVSUklERSkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpKSB8fFxuQEAgLTg4Myw3ICs4ODUsMTAgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRwbC1cdTAwM2Vwcm9nID0gcHJvZztcbiBcdHBsLVx1MDAzZWxpbmsgPSBsaW5rO1xuIFx0cGwtXHUwMDNlZmxhZ3MgPSBmbGFncztcbitcdGlmIChvbGRfcHJvZylcbitcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVx1MDAzZXN0b3JhZ2UpO1xuIFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgc3RvcmFnZSk7XG4rXHRvbGRfZmxhZ3MgPSBjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV07XG4gXHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBzYXZlZF9mbGFncztcbiBcbiBcdGlmICh0eXBlID09IEJQRl9MU01fQ0dST1VQKSB7XG5AQCAtOTE1LDEyICs5MjAsMTQgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRpZiAob2xkX3Byb2cpIHtcbiBcdFx0cGwtXHUwMDNlcHJvZyA9IG9sZF9wcm9nO1xuIFx0XHRwbC1cdTAwM2VsaW5rID0gTlVMTDtcbitcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgb2xkX3N0b3JhZ2UpO1xuIFx0fVxuIFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcbiBcdGlmICghb2xkX3Byb2cpIHtcbiBcdFx0aGxpc3RfZGVsKFx1MDAyNnBsLVx1MDAzZW5vZGUpO1xuIFx0XHRrZnJlZShwbCk7XG4gXHR9XG4rXHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xMDMyLDExICsxMDM5LDE3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbiBcdFx0XHRcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXG4gXHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nKVxuIHtcbitcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbitcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbitcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuK1x0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcbiBcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTtcbitcdGJvb2wgc3RvcmFnZV9jaGFuZ2VkID0gZmFsc2U7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xuIFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuK1x0aW50IGVycjtcbiBcbiBcdGF0eXBlID0gYnBmX2Nncm91cF9hdHlwZV9maW5kKGxpbmstXHUwMDNlbGluay5hdHRhY2hfdHlwZSwgbmV3X3Byb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGZfaWQpO1xuIFx0aWYgKGF0eXBlIFx1MDAzYyAwKVxuQEAgLTEwNTYsMTAgKzEwNjksMzkgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0aWYgKCFmb3VuZClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4rXHRpZiAoYnBmX2Nncm91cF9zdG9yYWdlc19hbGxvYyhzdG9yYWdlLCBuZXdfc3RvcmFnZSwgbGluay1cdTAwM2VsaW5rLmF0dGFjaF90eXBlLFxuK1x0XHRcdFx0ICAgICAgbmV3X3Byb2csIGNncnApKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHtcbitcdFx0aWYgKHN0b3JhZ2Vbc3R5cGVdICE9IHBsLVx1MDAzZXN0b3JhZ2Vbc3R5cGVdKSB7XG4rXHRcdFx0c3RvcmFnZV9jaGFuZ2VkID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1xuIFx0Y2dycC1cdTAwM2VicGYucmV2aXNpb25zW2F0eXBlXSArPSAxO1xuIFx0b2xkX3Byb2cgPSB4Y2hnKFx1MDAyNmxpbmstXHUwMDNlbGluay5wcm9nLCBuZXdfcHJvZyk7XG4tXHRyZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKGNncnAsIGF0eXBlLCBwbCk7XG4rXG4rXHRpZiAoIXN0b3JhZ2VfY2hhbmdlZCkge1xuK1x0XHRyZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKGNncnAsIGF0eXBlLCBwbCk7XG4rXHRcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVx1MDAzZXN0b3JhZ2UpO1xuK1x0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgc3RvcmFnZSk7XG4rXHRlcnIgPSB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzKGNncnAsIGF0eXBlKTtcbitcdGlmIChlcnIpIHtcbitcdFx0eGNoZyhcdTAwMjZsaW5rLVx1MDAzZWxpbmsucHJvZywgb2xkX3Byb2cpO1xuK1x0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC1cdTAwM2VzdG9yYWdlLCBvbGRfc3RvcmFnZSk7XG4rXHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XG4rXHRcdGNncnAtXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gLT0gMTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbiBcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XG4rXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2xpbmsobmV3X3N0b3JhZ2UsIGNncnAsIGxpbmstXHUwMDNlbGluay5hdHRhY2hfdHlwZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tcHJvZy5jIGIva2VybmVsL2JwZi9tcHJvZy5jXG5pbmRleCAxMzk0MTY4MDYyZTg1Ni4uYjRhMWIzNWZmNTY5MzYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21wcm9nLmNcbisrKyBiL2tlcm5lbC9icGYvbXByb2cuY1xuQEAgLTYsNyArNiw3IEBAXG4gXG4gc3RhdGljIGludCBicGZfbXByb2dfbGluayhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcbiBcdFx0XHQgIHUzMiBpZF9vcl9mZCwgdTMyIGZsYWdzLFxuLVx0XHRcdCAgZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXG4rXHRcdFx0ICBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSlcbiB7XG4gXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0Ym9vbCBpZCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9JRDtcbkBAIC0xNyw3ICsxNyw3IEBAIHN0YXRpYyBpbnQgYnBmX21wcm9nX2xpbmsoc3RydWN0IGJwZl90dXBsZSAqdHVwbGUsXG4gXHRcdGxpbmsgPSBicGZfbGlua19nZXRfZnJvbV9mZChpZF9vcl9mZCk7XG4gXHRpZiAoSVNfRVJSKGxpbmspKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihsaW5rKTtcbi1cdGlmICh0eXBlIFx1MDAyNlx1MDAyNiBsaW5rLVx1MDAzZXByb2ctXHUwMDNldHlwZSAhPSB0eXBlKSB7XG4rXHRpZiAodHlwZSBcdTAwMjZcdTAwMjYgbGluay1cdTAwM2V0eXBlICE9IHR5cGUpIHtcbiBcdFx0YnBmX2xpbmtfcHV0KGxpbmspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbkBAIC01MiwyMSArNTIsMjIgQEAgc3RhdGljIGludCBicGZfbXByb2dfcHJvZyhzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcbiBcbiBzdGF0aWMgaW50IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZShzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSxcbiBcdFx0XHRcdCAgICB1MzIgaWRfb3JfZmQsIHUzMiBmbGFncyxcbi1cdFx0XHRcdCAgICBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSlcbitcdFx0XHRcdCAgICBlbnVtIGJwZl9saW5rX3R5cGUgbHR5cGUsXG4rXHRcdFx0XHQgICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKVxuIHtcbiBcdGJvb2wgbGluayA9IGZsYWdzIFx1MDAyNiBCUEZfRl9MSU5LO1xuIFx0Ym9vbCBpZCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9JRDtcbiBcbiBcdG1lbXNldCh0dXBsZSwgMCwgc2l6ZW9mKCp0dXBsZSkpO1xuIFx0aWYgKGxpbmspXG4tXHRcdHJldHVybiBicGZfbXByb2dfbGluayh0dXBsZSwgaWRfb3JfZmQsIGZsYWdzLCB0eXBlKTtcbitcdFx0cmV0dXJuIGJwZl9tcHJvZ19saW5rKHR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsIGx0eXBlKTtcbiBcdC8qIElmIG5vIHJlbGV2YW50IGZsYWcgaXMgc2V0IGFuZCBubyBpZF9vcl9mZCB3YXMgcGFzc2VkLCB0aGVuXG4gXHQgKiB0dXBsZSBsaW5rL3Byb2cgaXMganVzdCBOVUxMZWQuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBiZWZvcmUvXG4gXHQgKiBhZnRlciBzZWxlY3RzIGZpcnN0L2xhc3QgcG9zaXRpb24gd2l0aG91dCBwYXNzaW5nIGZkLlxuIFx0ICovXG4gXHRpZiAoIWlkIFx1MDAyNlx1MDAyNiAhaWRfb3JfZmQpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGJwZl9tcHJvZ19wcm9nKHR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsIHR5cGUpO1xuK1x0cmV0dXJuIGJwZl9tcHJvZ19wcm9nKHR1cGxlLCBpZF9vcl9mZCwgZmxhZ3MsIHB0eXBlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYnBmX21wcm9nX3R1cGxlX3B1dChzdHJ1Y3QgYnBmX3R1cGxlICp0dXBsZSlcbkBAIC0yMjYsNyArMjI3LDggQEAgaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHRcdCAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldyxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dfbmV3LCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4gXHRcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nX29sZCxcbi1cdFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uKVxuK1x0XHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24sXG4rXHRcdCAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSlcbiB7XG4gXHRzdHJ1Y3QgYnBmX3R1cGxlIHJ0dXBsZSwgbnR1cGxlID0ge1xuIFx0XHQucHJvZyA9IHByb2dfbmV3LFxuQEAgLTI0Myw2ICsyNDUsNyBAQCBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRyZXQgPSBicGZfbXByb2dfdHVwbGVfcmVsYXRpdmUoXHUwMDI2cnR1cGxlLCBpZF9vcl9mZCxcbiBcdFx0XHRcdCAgICAgICBmbGFncyBcdTAwMjYgfkJQRl9GX1JFUExBQ0UsXG4rXHRcdFx0XHQgICAgICAgZXhwZWN0ZWRfbGlua190eXBlLFxuIFx0XHRcdFx0ICAgICAgIHByb2dfbmV3LVx1MDAzZXR5cGUpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbkBAIC0zMjgsNyArMzMxLDggQEAgc3RhdGljIGludCBicGZfbXByb2dfZmV0Y2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gaW50IGJwZl9tcHJvZ19kZXRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHRcdCAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldyxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfbGluayAqbGluayxcbi1cdFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uKVxuK1x0XHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24sXG4rXHRcdCAgICAgZW51bSBicGZfbGlua190eXBlIGV4cGVjdGVkX2xpbmtfdHlwZSlcbiB7XG4gXHRzdHJ1Y3QgYnBmX3R1cGxlIHJ0dXBsZSwgZHR1cGxlID0ge1xuIFx0XHQucHJvZyA9IHByb2csXG5AQCAtMzQzLDggKzM0Nyw5IEBAIGludCBicGZfbXByb2dfZGV0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxuIFx0aWYgKCFicGZfbXByb2dfdG90YWwoZW50cnkpKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcdHJldCA9IGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZShcdTAwMjZydHVwbGUsIGlkX29yX2ZkLCBmbGFncyxcbi1cdFx0XHRcdCAgICAgICBwcm9nID8gcHJvZy1cdTAwM2V0eXBlIDpcbi1cdFx0XHRcdCAgICAgICBCUEZfUFJPR19UWVBFX1VOU1BFQyk7XG4rXHRcdFx0XHQgICAgICAgZXhwZWN0ZWRfbGlua190eXBlLFxuK1x0XHRcdFx0ICAgICAgIC8qIFVzZSBVTlNQRUMgYXMgd2lsZGNhcmQgd2hlbiBwcm9nIGlzIE5VTEwgKi9cbitcdFx0XHRcdCAgICAgICBwcm9nID8gcHJvZy1cdTAwM2V0eXBlIDogQlBGX1BST0dfVFlQRV9VTlNQRUMpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcdGlmIChkdHVwbGUucHJvZykge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jIGIva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcbmluZGV4IDI1ZjMwZjllZGFlZmQzLi45ZmM2MmRiMTQ0MWM2MiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXG4rKysgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xuQEAgLTE3MSwxMyArMTcxLDE3IEBAIHN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0aW50IGlkeCwgcmV0O1xuIFxuLVx0aWYgKG9sZF9wcm9nIFx1MDAyNlx1MDAyNiBvbGRfcHJvZyAhPSBsaW5rLVx1MDAzZXByb2cpXG4tXHRcdHJldHVybiAtRVBFUk07XG4tXHRpZiAobmV3X3Byb2ctXHUwMDNldHlwZSAhPSBsaW5rLVx1MDAzZXByb2ctXHUwMDNldHlwZSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4gXHRtdXRleF9sb2NrKFx1MDAyNm5ldG5zX2JwZl9tdXRleCk7XG4gXG4rXHRpZiAob2xkX3Byb2cgXHUwMDI2XHUwMDI2IG9sZF9wcm9nICE9IGxpbmstXHUwMDNlcHJvZykge1xuK1x0XHRyZXQgPSAtRVBFUk07XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcdGlmIChuZXdfcHJvZy1cdTAwM2V0eXBlICE9IGxpbmstXHUwMDNlcHJvZy1cdTAwM2V0eXBlKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbiBcdG5ldCA9IG5ldF9saW5rLVx1MDAzZW5ldDtcbiBcdGlmICghbmV0IHx8ICFjaGVja19uZXQobmV0KSkge1xuIFx0XHQvKiBMaW5rIGF1dG8tZGV0YWNoZWQgb3IgbmV0bnMgZHlpbmcgKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ZGIzMDZkMjNiNDc5Zi4uY2FkOTg2ODA3ZDUzMDMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC0zNDcxLDkgKzM0NzEsMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmJwZl9saW5rX3R5cGVfc3Ryc1tdID0ge1xuIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4tXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBsaW5rLVx1MDAzZXByb2c7XG4rXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4gXHRlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSA9IGxpbmstXHUwMDNldHlwZTtcbiBcdGNoYXIgcHJvZ190YWdbc2l6ZW9mKHByb2ctXHUwMDNldGFnKSAqIDIgKyAxXSA9IHsgfTtcbitcdHUzMiBwcm9nX2lkO1xuIFxuIFx0aWYgKHR5cGUgXHUwMDNjIEFSUkFZX1NJWkUoYnBmX2xpbmtfdHlwZV9zdHJzKSBcdTAwMjZcdTAwMjYgYnBmX2xpbmtfdHlwZV9zdHJzW3R5cGVdKSB7XG4gXHRcdGlmIChsaW5rLVx1MDAzZXR5cGUgPT0gQlBGX0xJTktfVFlQRV9LUFJPQkVfTVVMVEkpXG5AQCAtMzQ5MCwxMyArMzQ5MSwyMCBAQCBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxuIFx0fVxuIFx0c2VxX3ByaW50ZihtLCBcImxpbmtfaWQ6XFx0JXVcXG5cIiwgbGluay1cdTAwM2VpZCk7XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRwcm9nID0gUkVBRF9PTkNFKGxpbmstXHUwMDNlcHJvZyk7XG4gXHRpZiAocHJvZykge1xuIFx0XHRiaW4yaGV4KHByb2dfdGFnLCBwcm9nLVx1MDAzZXRhZywgc2l6ZW9mKHByb2ctXHUwMDNldGFnKSk7XG4rXHRcdHByb2dfaWQgPSBwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZDtcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0aWYgKHByb2cpIHtcbiBcdFx0c2VxX3ByaW50ZihtLFxuIFx0XHRcdCAgIFwicHJvZ190YWc6XFx0JXNcXG5cIlxuIFx0XHRcdCAgIFwicHJvZ19pZDpcXHQldVxcblwiLFxuIFx0XHRcdCAgIHByb2dfdGFnLFxuLVx0XHRcdCAgIHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkKTtcbitcdFx0XHQgICBwcm9nX2lkKTtcbiBcdH1cbiBcdGlmIChsaW5rLVx1MDAzZW9wcy1cdTAwM2VzaG93X2ZkaW5mbylcbiBcdFx0bGluay1cdTAwM2VvcHMtXHUwMDNlc2hvd19mZGluZm8obGluaywgbSk7XG5AQCAtNTUzNSw2ICs1NTQzLDcgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiB7XG4gXHRzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBfX3VzZXIgKnVpbmZvID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlaW5mby5pbmZvKTtcbiBcdHN0cnVjdCBicGZfbGlua19pbmZvIGluZm87XG4rXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4gXHR1MzIgaW5mb19sZW4gPSBhdHRyLVx1MDAzZWluZm8uaW5mb19sZW47XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTU1NDksOCArNTU1OCwxMiBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuIFxuIFx0aW5mby50eXBlID0gbGluay1cdTAwM2V0eXBlO1xuIFx0aW5mby5pZCA9IGxpbmstXHUwMDNlaWQ7XG4tXHRpZiAobGluay1cdTAwM2Vwcm9nKVxuLVx0XHRpbmZvLnByb2dfaWQgPSBsaW5rLVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWlkO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0cHJvZyA9IFJFQURfT05DRShsaW5rLVx1MDAzZXByb2cpO1xuK1x0aWYgKHByb2cpXG4rXHRcdGluZm8ucHJvZ19pZCA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNlZmlsbF9saW5rX2luZm8pIHtcbiBcdFx0ZXJyID0gbGluay1cdTAwM2VvcHMtXHUwMDNlZmlsbF9saW5rX2luZm8obGluaywgXHUwMDI2aW5mbyk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90Y3guYyBiL2tlcm5lbC9icGYvdGN4LmNcbmluZGV4IDAyZGIwMTEzYjhlN2M2Li5mMjA4Y2VmMTNhOThlMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdGN4LmNcbisrKyBiL2tlcm5lbC9icGYvdGN4LmNcbkBAIC0zOCw3ICszOCw3IEBAIGludCB0Y3hfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdH1cbiBcdHJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksIFx1MDAyNmVudHJ5X25ldywgcHJvZywgTlVMTCwgcmVwbGFjZV9wcm9nLFxuIFx0XHRcdCAgICAgICBhdHRyLVx1MDAzZWF0dGFjaF9mbGFncywgYXR0ci1cdTAwM2VyZWxhdGl2ZV9mZCxcbi1cdFx0XHQgICAgICAgYXR0ci1cdTAwM2VleHBlY3RlZF9yZXZpc2lvbik7XG4rXHRcdFx0ICAgICAgIGF0dHItXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24sIEJQRl9MSU5LX1RZUEVfVENYKTtcbiBcdGlmICghcmV0KSB7XG4gXHRcdGlmIChlbnRyeSAhPSBlbnRyeV9uZXcpIHtcbiBcdFx0XHR0Y3hfZW50cnlfdXBkYXRlKGRldiwgZW50cnlfbmV3LCBpbmdyZXNzKTtcbkBAIC03Niw3ICs3Niw3IEBAIGludCB0Y3hfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIHByb2csIE5VTEwsIGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzLFxuLVx0XHRcdCAgICAgICBhdHRyLVx1MDAzZXJlbGF0aXZlX2ZkLCBhdHRyLVx1MDAzZWV4cGVjdGVkX3JldmlzaW9uKTtcbitcdFx0XHQgICAgICAgYXR0ci1cdTAwM2VyZWxhdGl2ZV9mZCwgYXR0ci1cdTAwM2VleHBlY3RlZF9yZXZpc2lvbiwgQlBGX0xJTktfVFlQRV9UQ1gpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0aWYgKCF0Y3hfZW50cnlfaXNfYWN0aXZlKGVudHJ5X25ldykpXG4gXHRcdFx0ZW50cnlfbmV3ID0gTlVMTDtcbkBAIC0xNTIsNyArMTUyLDcgQEAgc3RhdGljIGludCB0Y3hfbGlua19wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLFxuIFx0aWYgKCFlbnRyeSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRyZXQgPSBicGZfbXByb2dfYXR0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIGxpbmstXHUwMDNlcHJvZywgbGluaywgTlVMTCwgZmxhZ3MsXG4tXHRcdFx0ICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbik7XG4rXHRcdFx0ICAgICAgIGlkX29yX2ZkLCByZXZpc2lvbiwgQlBGX0xJTktfVFlQRV9UQ1gpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0aWYgKGVudHJ5ICE9IGVudHJ5X25ldykge1xuIFx0XHRcdHRjeF9lbnRyeV91cGRhdGUoZGV2LCBlbnRyeV9uZXcsIGluZ3Jlc3MpO1xuQEAgLTE4Myw3ICsxODMsNyBAQCBzdGF0aWMgdm9pZCB0Y3hfbGlua19yZWxlYXNlKHN0cnVjdCBicGZfbGluayAqbGluaylcbiBcdFx0cmV0ID0gLUVOT0VOVDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4tXHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIGxpbmstXHUwMDNlcHJvZywgbGluaywgMCwgMCwgMCk7XG4rXHRyZXQgPSBicGZfbXByb2dfZGV0YWNoKGVudHJ5LCBcdTAwMjZlbnRyeV9uZXcsIGxpbmstXHUwMDNlcHJvZywgbGluaywgMCwgMCwgMCwgQlBGX0xJTktfVFlQRV9UQ1gpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0aWYgKCF0Y3hfZW50cnlfaXNfYWN0aXZlKGVudHJ5X25ldykpXG4gXHRcdFx0ZW50cnlfbmV3ID0gTlVMTDtcbkBAIC0yMjksOSArMjI5LDggQEAgc3RhdGljIGludCB0Y3hfbGlua191cGRhdGUoc3RydWN0IGJwZl9saW5rICpsaW5rLCBzdHJ1Y3QgYnBmX3Byb2cgKm5wcm9nLFxuIFx0XHRyZXQgPSAtRU5PRU5UO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbi1cdHJldCA9IGJwZl9tcHJvZ19hdHRhY2goZW50cnksIFx1MDAyNmVudHJ5X25ldywgbnByb2csIGxpbmssIG9wcm9nLFxuLVx0XHRcdCAgICAgICBCUEZfRl9SRVBMQUNFIHwgQlBGX0ZfSUQsXG4tXHRcdFx0ICAgICAgIGxpbmstXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlaWQsIDApO1xuK1x0cmV0ID0gYnBmX21wcm9nX2F0dGFjaChlbnRyeSwgXHUwMDI2ZW50cnlfbmV3LCBucHJvZywgbGluaywgb3Byb2csIEJQRl9GX1JFUExBQ0UgfCBCUEZfRl9JRCxcbitcdFx0XHQgICAgICAgbGluay1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZCwgMCwgQlBGX0xJTktfVFlQRV9UQ1gpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0V0FSTl9PTl9PTkNFKGVudHJ5ICE9IGVudHJ5X25ldyk7XG4gXHRcdG9wcm9nID0geGNoZyhcdTAwMjZsaW5rLVx1MDAzZXByb2csIG5wcm9nKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE0OjQ3LjQ0MTMwODE5MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5MjM3MzYwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJlY2VudCBCUEYgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBzZXZlcmFsIGtleSBCUEYgZnVuY3Rpb25zOiBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYGNncm91cF9icGZfYXR0YWNoYCwgYGNncm91cF9icGZfcmVwbGFjZWAsIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AsIGBicGZfbGlua19zaG93X2ZkaW5mb2AsIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgLiBUaGVzZSBhcmUgYWxsIGNvcmUgY29tcG9uZW50cywgc28gd2Ugc2hvdWxkIHBheSBjbG9zZSBhdHRlbnRpb24uIFRoZSBwcm9wb3NlZCBjaGFuZ2VzIHNlZW0gdG8gaW52b2x2ZSBtb2RpZmljYXRpb25zIHRvIGBicGZfbXByb2dfYXR0YWNoYCBhbmQgYGJwZl9tcHJvZ19kZXRhY2hgIHRvIGluY2x1ZGUgYW4gYGV4cGVjdGVkX2xpbmtfdHlwZWAgYXJndW1lbnQuIEFkZGl0aW9uYWxseSwgdGhlIHNlcmllcyBhaW1zIHRvIHJlZmluZSBob3cgYGJwZl9jZ3JvdXBfc3RvcmFnZWAgaXMgbWFuYWdlZCB3aXRoaW4gYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGFuZCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIGR1cmluZyBhdHRhY2htZW50IGFuZCByZXBsYWNlbWVudCBvcGVyYXRpb25zLiBUaGVyZSdzIGFsc28gYSBtb2RpZmljYXRpb24gdG8gYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCB3aGljaCBsb2NrcyB0aGUgYG5ldG5zX2JwZl9tdXRleGAgZWFybGllci4gQW5kIGZpbmFsbHksIHNvbWUgY2hhbmdlcyB0byBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIHRvIHVzZSBgUkVBRF9PTkNFKGxpbmstXHUwMDNlcHJvZylgIGFuZCBgcmN1X3JlYWRfbG9jaygpYCBzZWVtIHdvcnRoIHRha2luZyBhIGxvb2sgYXQuXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGFyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBsb2dpYy4gVGhlIHBvdGVudGlhbCBmb3IgcmVncmVzc2lvbnMgb3Igc3VidGxlIHNpZGUgZWZmZWN0cyBpcyB0aGVyZSwgc28gd2Ugc2hvdWxkIGFkZCB0aGlzIHRvIHRoZSBsaXN0IG9mIFwid29ydGggZnV6emluZ1wiIGNhbmRpZGF0ZXMuXG5cbk5vdywgbGV0J3MgaXNvbGF0ZSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb246IGBicGZfbXByb2dfYXR0YWNoYCwgYGJwZl9tcHJvZ19kZXRhY2hgLCBgX19jZ3JvdXBfYnBmX2F0dGFjaGAsIGBfX2Nncm91cF9icGZfcmVwbGFjZWAsIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AsIGBicGZfbGlua19zaG93X2ZkaW5mb2AsIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgLlxuXG5UaW1lIHRvIGNoZWNrIHRoZSBjb25maWcgZGVwZW5kZW5jaWVzLiBXZSdyZSBvYnZpb3VzbHkgbG9va2luZyBhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19DR1JPVVBfQlBGYC4gTGV0J3MgY29uZmlybSB0aGF0IGJ5IHJldmlld2luZyB0aGUgcmVsZXZhbnQgZmlsZXMsIGBrZXJuZWwvYnBmL2Nncm91cC5jYCBhbmQgYGtlcm5lbC9icGYvbXByb2cuY2AuIFllcCwgYENPTkZJR19DR1JPVVBfQlBGYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkIGZvciBgY2dyb3VwLmNgLiBBbmQgZm9yIHRoZSBuZXR3b3JraW5nIGFzcGVjdCwgYENPTkZJR19ORVRgIG1pZ2h0IGJlIG5lZWRlZCBmb3IgYG5ldF9uYW1lc3BhY2UuY2AgYW5kIGB0Y3guY2AuIFdlIGtub3cgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgbWFpbiBlbmFibGVyIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuXG5cbkknbGwgdXNlIGBncmVwcGVyYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBsaW5rZWQgdG8gYGJwZl9tcHJvZ19hdHRhY2hgIG9yIGB0Y3guY2AsIHdoaWNoIG1pZ2h0IHJlcXVpcmUgYENPTkZJR19ORVRfWEdSRVNTYCBvciBzb21lIHNpbWlsYXIgZGVwZW5kZW5jeS4gTGV0J3Mgc2VlIHdoYXQgY29tZXMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNDMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNDo1NS4zNjUwNDc2OTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1OTE5NTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjeFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Mjc9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBuZXRfbmFtZXNwYWNlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdGN4Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI5LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE0OjU1LjQ3MDk3Mzg4MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzUyMDkzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gQlBGIENvbXBpbGF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Ugb2JqZWN0IGZpbGVzLCBzcGVjaWZpY2FsbHkgYHRjeC5vYCBhbmQgYG5ldF9uYW1lc3BhY2Uub2AsIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGFwcGFyZW50IHRoZXkndmUgYmVlbiBjb21waWxlZCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQuIFRoYXQncyBnb29kIHRvIGtub3csIHRoYXQgc2V0cyBhIGJhc2VsaW5lLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBgbmV0a2l0LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyB0aWVzIGludG8gdGhlIHJlc3Qgb2YgdGhlIHBpY3R1cmUuIElzIGl0IHVzaW5nIHRoZSBzYW1lIGZsYWdzPyBJcyBpdCBoYW5kbGluZyBCUEYgaW5zdHJ1Y3Rpb25zIGluIGEgY29tcGF0aWJsZSB3YXk/IEZpZ3VyaW5nIG91dCB0aGUgcmVsYXRpb24gYmV0d2VlbiB0aGVzZSBjb21wb25lbnRzIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSBhcyBhIHdob2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzU2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6MTQ6NTkuMzQ2MTg1ODk5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTE4MzM2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRraXRcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX05FVENPTlNPTEUpICs9IG5ldGNvbnNvbGUub1xcbmRyaXZlcnMvbmV0L01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19ORVRLSVQpICs9IG5ldGtpdC5vXFxuZHJpdmVycy9uZXQvTWFrZWZpbGUtMjYtb2JqLXkgKz0gcGh5L1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNDo1OS40NjUzNzM4MjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTYyNDQzMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldGtpdCBhbmQgQ2dyb3VwcyoqXG5cblJpZ2h0LCBzbyBJIHNlZSB0aGlzIGBuZXRraXQuY2AgZmlsZSBhbmQgaW1tZWRpYXRlbHkgdGhpbmssIFwiQWgsIHRoYXQncyBnb2luZyB0byBuZWVkIGBDT05GSUdfTkVUS0lUYCBlbmFibGVkLiBObyBzdXJwcmlzZXMgdGhlcmUuXCIgSXQncyBqdXN0IGEgc3RhbmRhcmQgZGVwZW5kZW5jeSwgc28gSSdsbCBxdWlja2x5IGNvbmZpcm0gdGhhdCBpdCdzIHNldCBwcm9wZXJseSBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBiZWZvcmUgSSBkaWcgYW55IGRlZXBlciBpbnRvIHRoZSBjb2RlIGl0c2VsZi5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gd2l0aCBgY2dyb3VwLmNgLiBUaGlzIG1pZ2h0IGJlIGEgcmVsYXRlZCBhcmVhLCBnaXZlbiBob3cgbmV0d29ya3MgYXJlIG9mdGVuIG1hbmFnZWQgd2l0aGluIHRoZSBjb25maW5lcyBvZiByZXNvdXJjZS1jb25zdHJhaW5lZCBlbnZpcm9ubWVudHMgdGhhdCBjZ3JvdXBzIGFyZSBkZXNpZ25lZCBmb3IuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV0d29ya2luZyBob29rcyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCwgb3IgYmVpbmcgc2hhcGVkIGJ5LCB0aG9zZSBjZ3JvdXBzLiBUaW1lIHRvIGp1bXAgaW4gdGhlcmUgYW5kIHNlZSB3aGF0IHRoZXkncmUgdXAgdG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NDgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNTowMi42Mjc4MTk5MjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MDkzOTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNncm91cFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MzU9ZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19DR1JPVVBfQlBGKSArPSBjZ3JvdXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzctaWZlcSAoJChDT05GSUdfSU5FVCkseSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6MTU6MDIuNzY2OTE5NDAyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwMzU5NjY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBlQlBGIGFuZCBjZ3JvdXBzKipcblxuUmlnaHQsIHNvIEknbSBkaXZpbmcgaW50byB0aGlz4oCmIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19DR1JPVVBfQlBGYCBpcyBlbmFibGVkLCBvYnZpb3VzbHkuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jay4gV2l0aG91dCB0aGF0LCBJJ20gd2FzdGluZyBteSB0aW1lLlxuXG5BbmQgd2hhdCBhYm91dCBgbXByb2cuY2A/IFRoYXQgZmlsZSBhbHdheXMgc2VlbXMgdG8gYmUgYXQgdGhlIGhlYXJ0IG9mIHRoZSBCUEYgYW5kIGNncm91cCBpbnRlcmFjdGlvbnMgaW4gdGhpcyBzcGFjZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaGVyZS4gSXMgaXQgcGFydCBvZiB0aGUgc29sdXRpb24sIG9yIHRoZSBwcm9ibGVtLCBvciBuZWl0aGVyPyBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSByZXZpZXdpbmcgdGhhdCBjb2RlLCBsb29raW5nIGZvciByZWxldmFudCBob29rcyBvciBpbnRlZ3JhdGlvbiBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NjksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNTowNS44NzA1MTk0NzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTY2Mzc4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHJvZ1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTU9b2JqLSR7Q09ORklHX0JQRl9MU019XFx0ICArPSBicGZfaW5vZGVfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRpc2FzbS5vIG1wcm9nLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE3LW9iai0kKENPTkZJR19CUEZfSklUKSArPSB0cmFtcG9saW5lLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6MTU6MDUuOTc2MTkyNTUyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NzEzNTU0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBGdW5jdGlvbiBSZWFjaGFiaWxpdHkgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBCUEYtcmVsYXRlZCBjb25maWd1cmF0aW9uczogYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfQ0dST1VQX0JQRmAsIGFuZCBgQ09ORklHX05FVEtJVGAuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIGEgc3BlY2lmaWMgc2V0IG9mIGZ1bmN0aW9uczogYGJwZl9tcHJvZ19hdHRhY2hgLCBgYnBmX21wcm9nX2RldGFjaGAsIGBfX2Nncm91cF9icGZfYXR0YWNoYCwgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCwgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCwgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCwgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXMsIGFyZSB0aGVzZSBmdW5jdGlvbnMgcmVhY2hhYmxlPyBZZXMsIGNsZWFybHksIHRoZXkgYXJlLCB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbC4gU3BlY2lmaWNhbGx5LCBgYnBmX21wcm9nX2F0dGFjaGAgaXMgcGFydCBvZiBgdGN4X3Byb2dfYXR0YWNoYCwgYW5kIGBuZXRraXRfcHJvZ19hdHRhY2hgLCBhbW9uZyBvdGhlcnMuIGBfX2Nncm91cF9icGZfYXR0YWNoYCBpcyBjYWxsZWQgZnJvbSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAuIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AgaXMgY2FsbGVkIGZyb20gYGJwZl9saW5rX3VwZGF0ZWAuIGBicGZfbGlua19zaG93X2ZkaW5mb2AgaXMgZXhwb3NlZCB2aWEgcHJvY2ZzLCBzcGVjaWZpY2FsbHkgYGZkaW5mb2AgZm9yIGJwZiBsaW5rcywgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgY29tZXMgZnJvbSBgYnBmX29ial9nZXRfaW5mb19ieV9mZGAuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGNyaXRpY2FsIGRlcGVuZGVuY2llcy4gQWhhLCBgQ09ORklHX05FVGAgaXMgcmVxdWlyZWQgZm9yIGBDT05GSUdfTkVUS0lUYC4gR29vZCB0byBrbm93LlxuXG5MZXQncyBzdW1tYXJpemUgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHN5bWJvbHM6IFRoZSBpbXBvcnRhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBCUEZfU1lTQ0FMTGAsIGBDR1JPVVBfQlBGYCwgYW5kIGBORVRLSVRgLiBBbmQgdGhlc2UgYXJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBzeW1ib2xzIHRvIGNvbnNpZGVyOiBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLCBgYnBmX2xpbmtfc2hvd19mZGluZm9gLCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgLlxuXG5GaW5hbGx5LCBhIHF1aWNrIG5vdGUgb24gYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBJdCdzIHN0YXRpYywgd2hpY2ggaXMgYSBkZXRhaWwsIGJ1dCBpdCBkb2Vzbid0IHJlcHJlc2VudCBhIGJhcnJpZXIuIElmIHdlIHRhcmdldCBpdCBkaXJlY3RseSB3aXRoIHN5emthbGxlciwgd2UgY2FuIHJlYWNoIGl0LCBvciwgYWx0ZXJuYXRpdmVseSwgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFsc28gd29ya3MuIEkgc2hvdWxkIGNoZWNrIGBrZXJuZWwvYnBmL2Nncm91cC5jYCBmb3IgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGZvciBtb3JlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjgwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjEzLjQ0NzU1MTYzOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEyNzc1MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jZ3JvdXBfYnBmX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy03OTEtLyoqXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5My0gKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGUgdGhlIGNoYW5nZSB0byBkZXNjZW5kYW50c1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4MDY6c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTkzND1zdGF0aWMgaW50IGNncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0Mi1cXHRjZ3JvdXBfbG9jaygpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTQzOlxcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NC1cXHRcXHRcXHRcXHQgIGlkX29yX2ZkLCByZXZpc2lvbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjEzLjUzODgzNjMyNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTUxMTEwMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkFzc2Vzc2luZyBCUEYgRnVuY3Rpb24gQXR0YWNobWVudCBhbmQgUmVwbGFjZW1lbnQqKlxuXG5SaWdodCwgc28gYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBvZnRlbiBhIHBvaW50IG9mIHNjcnV0aW55IHdoZW4gZGVhbGluZyB3aXRoIEJQRi4gSG93ZXZlciwgaXQncyBwZXJmZWN0bHkgYWNjZXB0YWJsZSB0byBsaXN0IGl0IGluIHRoaXMgY29udGV4dC4gVGhlcmUncyBubyBpbmhlcmVudCBpc3N1ZSB0aGVyZS4gTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYF9fY2dyb3VwX2JwZl9yZXBsYWNlYC4gVGhpcyBpcyB0aGUgb25lIHdlIHJlYWxseSBuZWVkIHRvIHVuZGVyc3RhbmQgdG8gZ3Jhc3AgdGhpcyBwYXJ0aWN1bGFyIEJQRiBpbXBsZW1lbnRhdGlvbidzIGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgZm9yIHRoYXQgZnVuY3Rpb24gYW5kIGRldGVybWluZSBpdHMgcm9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MzgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNToxNy4wODk5NTA0MzRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODA1NTE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2Nncm91cF9icGZfcmVwbGFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9MTAwMT1zdGF0aWMgdm9pZCByZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMjgtLyoqXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDI5OiAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsncyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzMC0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNy0gKi9cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMzg6c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzOS1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMTA4PXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEyNS1cXHR9XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTI2OlxcdHJldCA9IF9fY2dyb3VwX2JwZl9yZXBsYWNlKGNnX2xpbmstXFx1MDAzZWNncm91cCwgY2dfbGluaywgbmV3X3Byb2cpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEyNy1vdXRfdW5sb2NrOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNToxNy4xOTgwMTIxM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQ2MTIzOTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBhbmQgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCoqXG5cblJpZ2h0LCBsZXQncyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBjb25maXJtcyBpdDogYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFN0YXRpYyBpbXBsaWVzIHNvbWV0aGluZyBhYm91dCBzY29wZSBhbmQgbGlua2FnZSwgZG9lc24ndCBpdD8gSXMgaXQgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LCBvciBkb2VzIGl0IGhhdmUgZXh0ZXJuYWwgbGlua2FnZSBpbiB0aGUgYnJvYWRlciBrZXJuZWwgY29udGV4dD8gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgZGVsdmUgZnVydGhlci5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gc2hpZnQgZm9jdXMgdG8gYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcmVsYXRlcyB0byB3aGF0IEkgd2FzIGp1c3QgdGhpbmtpbmcgYWJvdXQsIGFuZCBob3cgaXQgaW50ZXJhY3RzLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGxpbmsgYmV0d2VlbiBCUEYgcHJvZ3JhbXMgYW5kIG5ldHdvcmsgbmFtZXNwYWNlcywgYW5kIG1vc3QgbGlrZWx5LCB0aGUgYWN0IG9mIHVwZGF0aW5nIHRoZW0uIEknbSBndWVzc2luZyB0aGF0IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgdG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uIEdpdmVuIHRoYXQgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBzdGF0aWMsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBob3cgaXQgbWlnaHQgYmUgY2FsbGVkIGFuZCBsaW5rZWQgYnkgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBUaGlzIG1lYW5zIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBjcml0aWNhbCBwYXRoIGZvciBCUEYgcHJvZ3JhbSB1cGRhdGVzIGFuZCBuZXR3b3JrIG5hbWVzcGFjZSBjb25maWd1cmF0aW9uLCBhbmQgbmVlZCB0byBmb2xsb3cgaXRzIGltcGxpY2F0aW9ucy4gRXNzZW50aWFsbHksIEknbSB0aGlua2luZywgXCJob3cgaXMgdGhpcyBzdGF0aWMgZnVuY3Rpb24gYmVpbmcgdXRpbGl6ZWQgaW4gdGhlIGJyb2FkZXIgbGlmZWN5Y2xlP1wiIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgZXJyb3IgaGFuZGxpbmcgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI4MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjIwLjk0NDEzOTc0M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMjQ3MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTE1NT1zdGF0aWMgdm9pZCBicGZfbmV0bnNfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTE2Mi1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzoxNjM6c3RhdGljIGludCBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMTY0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0yMzk9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX25ldG5zX2xpbmtfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjQyLVxcdC5kZXRhY2ggPSBicGZfbmV0bnNfbGlua19kZXRhY2gsXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6MjQzOlxcdC51cGRhdGVfcHJvZyA9IGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nLFxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTI0NC1cXHQuZmlsbF9saW5rX2luZm8gPSBicGZfbmV0bnNfbGlua19maWxsX2luZm8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjIxLjA2NDM5NDcxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA3Mjk3NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBvbiBTdGF0aWMgRnVuY3Rpb25zIGluIEJQRiBMaW5rIE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBzbyBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLi4uIHJpZ2h0LCB0aGF0IG9uZSBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLiBTaG91bGRuJ3QgYmUgYW55IHN1cnByaXNlcyB0aGVyZSwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gY29uZmlybSBhc3N1bXB0aW9ucy4gTm93LCBsZXQncyBwaXZvdCB0byBjb25maXJtaW5nIHRoZSBiZWhhdmlvciBvZiBgYnBmX2xpbmtfc2hvd19mZGluZm9gLiBXZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgaW5mb3JtYXRpb24gaXMgYmVpbmcgcHJvdmlkZWQgYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHN0cnVjdHVyZSBhbmQgZGF0YSBhcmUgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTcxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6MTU6MjQuMDcxNjk0OTY1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU1NjY5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2xpbmtfc2hvd19mZGluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9MzQ2Mz1zdGF0aWMgY29uc3QgY2hhciAqYnBmX2xpbmtfdHlwZV9zdHJzW10gPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDcwLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0NzE6c3RhdGljIHZvaWQgYnBmX2xpbmtfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDcyLXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM1MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnBmX2xpbmtfZm9wcyA9IHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTIyLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM1MjM6XFx0LnNob3dfZmRpbmZvXFx0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTI0LSNlbmRpZlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzUzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBicGZfbGlua19mb3BzX3BvbGwgPSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUzMS0jaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNTMyOlxcdC5zaG93X2ZkaW5mb1xcdD0gYnBmX2xpbmtfc2hvd19mZGluZm8sXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUzMy0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6MTU6MjQuMTg3MjY5OTUxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDI4MDY0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgTGluayBGRCBJbmZvcm1hdGlvbiBSZXRyaWV2YWwqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSB3aGV0aGVyIHRoYXQncyBkZWNsYXJlZCBzdGF0aWMgd2l0aGluIHRoZSBjb2RlIGJhc2UuIE15IHVuZGVyc3RhbmRpbmcgaXMgaXQgaXMsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ20gZG91YmxlLWNoZWNraW5nIGJlY2F1c2UgaXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBhY2Nlc3NpYmlsaXR5IG9mIHRoYXQgaW5mb3JtYXRpb24uXG5cbk5vdywgbGV0J3MgcGl2b3QgYW5kIGV4YW1pbmUgaG93IGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgZnVuY3Rpb25zLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY2VudHJhbCByZXRyaWV2YWwgcG9pbnQgZm9yIHRoZSBGRCBpbmZvcm1hdGlvbiwgYnV0IEknbGwgbmVlZCB0byBjb25maXJtIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCB0byBkZXRlcm1pbmUgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ5MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjI4LjA5MDA4MTg1OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNDk1NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9saW5rX2dldF9pbmZvX2J5X2ZkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTU1MjM9c3RhdGljIGludCBicGZfYnRmX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTUzOC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NTM5OnN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTU0MC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU1OTk9c3RhdGljIGludCBicGZfb2JqX2dldF9pbmZvX2J5X2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTYxNy1cXHRlbHNlIGlmIChmZF9maWxlKGYpLVxcdTAwM2VmX29wID09IFxcdTAwMjZicGZfbGlua19mb3BzIHx8IGZkX2ZpbGUoZiktXFx1MDAzZWZfb3AgPT0gXFx1MDAyNmJwZl9saW5rX2ZvcHNfcG9sbClcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NjE4OlxcdFxcdHJldHVybiBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZF9maWxlKGYpLCBmZF9maWxlKGYpLVxcdTAwM2Vwcml2YXRlX2RhdGEsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTYxOS1cXHRcXHRcXHRcXHRcXHQgICAgICBhdHRyLCB1YXR0cik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjI4LjI1MTU4MzA4NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIyMDQ0NjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgQlBGIExpbmsgSW5mb3JtYXRpb24gYW5kIEF0dGFjaG1lbnQgTWVjaGFuaXNtcyoqXG5cbk9rYXksIHNvIEknbSBjb25maXJtaW5nIHRoYXQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBnb29kIHRvIGtub3cg4oCTIGhlbHBzIG5hcnJvdyBkb3duIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIGZvciB1c2FnZS4gTm93LCBJIHNob3VsZCBzaGlmdCBteSBmb2N1cyB0byBkaXNzZWN0aW5nIGhvdyBpdCB3b3JrcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYXR0YWNobWVudC9kZXRhY2htZW50LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gYGJwZl9tcHJvZ19hdHRhY2hgIGFuZCBgYnBmX21wcm9nX2RldGFjaGAgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJkZXBlbmRlbmNpZXMgYW5kIGhvdyBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGZhY3RvcnMgaW50byB0aGF0IG92ZXJhbGwgcHJvY2Vzcy4gR290dGEgbG9vayBhdCB0aGUgYmlnZ2VyIHBpY3R1cmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDIyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6MTU6MzEuMjczNjMxNTY5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE2MjYzOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX21wcm9nX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL21wcm9nLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9tcHJvZy5jPTIxMD1zdGF0aWMgaW50IGJwZl9tcHJvZ19wb3NfYWZ0ZXIoc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxuLS1cXG5rZXJuZWwvYnBmL21wcm9nLmMtMjI1LVxcbmtlcm5lbC9icGYvbXByb2cuYzoyMjY6aW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxua2VybmVsL2JwZi9tcHJvZy5jLTIyNy1cXHRcXHQgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjMxLjM4NTI2NTYyNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDYwNDgzNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJQRiBFeHBvcnQgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29udGV4dCBpbmRpY2F0ZXMgd2UncmUgZGVhbGluZyB3aXRoIEJQRiBmdW5jdGlvbmFsaXR5IGFuZCBpdHMgaW50ZWdyYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGV4cG9ydC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3Q7IHllcywgdGhlc2UgQlBGIGVsZW1lbnRzIGFyZSBiZWluZyBleHBvcnRlZC5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUga2V5IGZ1bmN0aW9ucyBhdCBwbGF5IGhlcmUuIFRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiBhdHRhY2hpbmcgYW5kIGRldGFjaGluZyBCUEYgcHJvZ3JhbXMsIGVzcGVjaWFsbHkgdG8gYW5kIGZyb20gY2dyb3Vwcy4gVGhlIGNvcmUgZnVuY3Rpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYXJlOiBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLCBgYnBmX2xpbmtfc2hvd19mZGluZm9gLCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC4gVGhlc2UgYXJlIHRoZSBob29rcyBhbmQgaW50ZXJmYWNlcyBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZS5cblxuTm93LCBvbiB0byBjb25maWd1cmF0aW9ucy4gV2UgaGF2ZSB0aHJlZSBtYWluIG9uZXMgYmVpbmcgZmxhZ2dlZDogYEJQRl9TWVNDQUxMYCwgYENHUk9VUF9CUEZgLCBhbmQgYE5FVEtJVGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UuIExldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBjb25maWdzIGx1cmtpbmcgYWJvdXQuXG5cbkxldCdzIGNvbmZpcm0gdGhlIGNvbmZpZ3MgYXJlIHByZXNlbnQgaW4gdGhlIGZpbGVzOlxuKiAgIGB0Y3guY2AgdXNlcyBgQ09ORklHX0JQRl9TWVNDQUxMYC5cbiogICBgbmV0X25hbWVzcGFjZS5jYCByZWxpZXMgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAuXG4qICAgYG1wcm9nLmNgIHV0aWxpemVzIGBDT05GSUdfQlBGX1NZU0NBTExgLlxuKiAgIGBjZ3JvdXAuY2AgaXMgZHJpdmVuIGJ5IGBDT05GSUdfQ0dST1VQX0JQRmAuXG4qICAgYG5ldGtpdC5jYCBsZXZlcmFnZXMgYENPTkZJR19ORVRLSVRgLlxuXG5Pa2F5LCBJJ20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBgQ09ORklHX05FVEtJVGAgaXMgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIGZvciBgbmV0a2l0LmNgIOKAkyBhcyBjb25maXJtZWQgYnkgYG9iai0kKENPTkZJR19ORVRLSVQpICs9IG5ldGtpdC5vYC4gVGhhdCdzIGNsZWFuLlxuXG5Ob3csIGxldCdzIGV4YW1pbmUgdGhlIG1vZGlmaWVkIGZpbGVzLiBUaGlzIGlzIHdoZXJlIEknbGwgZ2V0IHRoZSByZWFsIHBpY3R1cmUuIFNvLCB3ZSd2ZSBnb3Q6XG5cbiogICBgaW5jbHVkZS9saW51eC9icGZfbXByb2cuaGAg4oCTIHRoaXMgaXMgYSBoZWFkZXIsIHNvIGl0IGxpa2VseSBkZWZpbmVzIHRoZSBpbnRlcmZhY2VzIGFuZCBzdHJ1Y3R1cmVzLiBNYWtlcyBzZW5zZS5cbiogICBgZHJpdmVycy9uZXQvbmV0a2l0LmNgIOKAkyB0aGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBgQ09ORklHX05FVEtJVGAgYXQgd29yay5cbiogICBga2VybmVsL2JwZi9jZ3JvdXAuY2Ag4oCTIHRoaXMgaXMgdGllZCB0byBgQ09ORklHX0NHUk9VUF9CUEZgLlxuKiAgIGBrZXJuZWwvYnBmL21wcm9nLmNgIOKAkyB0aGlzIG9uZSBpcyB1c2luZyBgQ09ORklHX0JQRl9TWVNDQUxMYC5cbiogICBga2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNgIOKAkyBhbHNvIHVzZXMgYENPTkZJR19CUEZfU1lTQ0FMTGAuXG4qICAgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCDigJMgc2FtZSwgYENPTkZJR19CUEZfU1lTQ0FMTGAuXG4qICAgYGtlcm5lbC9icGYvdGN4LmNgIOKAkyBhbmQgYWdhaW4sIGBDT05GSUdfQlBGX1NZU0NBTExgLlxuXG5TbywgY29uZmlybWVkOiB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbml0ZWx5IGBCUEZfU1lTQ0FMTGAsIGBDR1JPVVBfQlBGYCwgYW5kIGBORVRLSVRgLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkga25vdyB0aGF0IGBDT05GSUdfTkVUS0lUYCBkZXBlbmRzIG9uIGBDT05GSUdfTkVUYC4gV2hpbGUgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXRzZWxmIG1heSBub3Qgc3RyaWN0bHkgcmVxdWlyZSBgQ09ORklHX05FVGAsIHRoZSBmaWxlcyBgbmV0X25hbWVzcGFjZS5jYCBhbmQgYHRjeC5jYCBtaWdodC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBNYWtlZmlsZSBmb3IgdGhlIEJQRiBjb3JlIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgYG5ldF9uYW1lc3BhY2Uub2AgYW5kIGB0Y3gub2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzgzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjM5Ljg0NTc1MTQ4MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MTM4NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldF9uYW1lc3BhY2VcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gb2ZmbG9hZC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG5ldF9uYW1lc3BhY2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB0Y3gub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNTozOS45NzA4OTY4NjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4OTYwMjYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEJQRiBTeXN0ZW0gQ2FsbCBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIEJQRiBzeXN0ZW0gY2FsbCBzdHVmZiBpcyBjb21waWxlZC4gSXQncyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFdhaXQgYSBtaW51dGUuLi4gSSBoYXZlIGEgc3VzcGljaW9uLiBUaGlzIGBuZXRfbmFtZXNwYWNlLmNgIGZpbGUg4oCTIGRvZXNuJ3QgdGhhdCAqcmVxdWlyZSogYENPTkZJR19ORVRgPyBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBkZXBlbmRlbmN5IHRvIGJlIHN1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGVzZSBjb25maWd1cmF0aW9ucyBjb21wbGV0ZWx5IGJlZm9yZSBJIG1vdmUgb24uIE9rYXksIGxldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgaW4gYG5ldF9uYW1lc3BhY2UuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODQ0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6MTU6NDMuNTYwNTAxNTk0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTg1Nzc2NDgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19ORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjQzLjk1OTA5MDc3MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM4NjExMDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIENvbXBpbGF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgQlBGIHN5c2NhbGwgZ2V0cyBjb21waWxlZCwgYW5kIGl0IGxvb2tzIGxpa2UgYG5ldF9uYW1lc3BhY2UuY2AgaXMgZGVmaW5pdGVseSBpbnZvbHZlZCwgdHJpZ2dlcmVkIGJ5IGBDT05GSUdfQlBGX1NZU0NBTExgLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiB3aGF0IGhhcHBlbnMgaWYgdGhlIG5ldHdvcmsgc3RhY2sgaXRzZWxmIChgQ09ORklHX05FVGApIGlzIGRpc2FibGVkPyBUaGF0IHRocm93cyBhIHdyZW5jaCBpbiB0aGUgd29ya3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgY2xlYXJseS4gTGV0J3MgZ28gYmFjayBhbmQgY2FyZWZ1bGx5IHJlLWV4YW1pbmUgYGtlcm5lbC9icGYvTWFrZWZpbGVgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGJlc2lkZXMganVzdCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlIGZ1bGx5IHVuZGVyc3Rvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDcwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6MTU6NDcuMDk3NzA2NTIzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI4NDQ5NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0X25hbWVzcGFjZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBvZmZsb2FkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbmV0X25hbWVzcGFjZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHRjeC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjQ3LjI1MDU2MTI1OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ1MjI1MDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgSW52ZXN0aWdhdGlvbjogYG5ldF9uYW1lc3BhY2UuY2AgXHUwMDI2IENPTkZJR19ORVQqKlxuXG5IbW0sIGhvbGQgb24uIEknbSB0YWtpbmcgYSBsb29rIGF0IGBuZXRfbmFtZXNwYWNlLmNgIGFuZCBpbW1lZGlhdGVseSBhIHJlZCBmbGFnIHBvcHMgdXAuIFRoaXMgZmlsZSBpcyBjbGVhcmx5IHV0aWxpemluZyB0aGUgYHN0cnVjdCBuZXRgIHN0cnVjdHVyZSwgYW5kIHRoYXQncyB1c3VhbGx5IGEgc3Ryb25nIGluZGljYXRvciBvZiBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eS4gTm93LCB0aGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgaXMgd2hldGhlciB0aGUgaW5jbHVzaW9uIG9mIHRoYXQgc3RydWN0dXJlIGluIHRoaXMgcGFydGljdWxhciBmaWxlIGlzIGNvbmRpdGlvbmFsLiBTcGVjaWZpY2FsbHksIGlzIHRoZSByZWxldmFudCBjb2RlIHNlY3Rpb24g4oCTIGxpa2VseSB0aGUgZW50aXJlIGZpbGUsIGdpdmVuIGl0cyBuYW1lIOKAkyBwcm90ZWN0ZWQgYnkgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBhbmQgdGhhdCBkaXJlY3RpdmUgaXMgZGVwZW5kZW50IG9uIGBDT05GSUdfTkVUYD8gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoaXMgZGVwZW5kZW5jeSBleGlzdHMuIElmIG5vdCwgaXQgY291bGQgc2lnbmlmeSBhIGNvbmZpZ3VyYXRpb24gb3ZlcnNpZ2h0LCBhIHBvdGVudGlhbCBwb3J0YWJpbGl0eSBpc3N1ZSwgb3IgYSBzaXR1YXRpb24gd2hlcmUgbmV0d29ya2luZyBjb2RlIGNvdWxkIGJlIGluY2x1ZGVkIHVuaW50ZW50aW9uYWxseS4gQWx0ZXJuYXRpdmVseSwgaWYgaXQgaXMgZ3VhcmRlZCBieSBDT05GSUdfTkVULCBhbGwgaXMgYXMgaXQgc2hvdWxkIGJlLiBMZXQgbWUgY2hlY2sgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGF0IHRoZSB0b3Agb2YgdGhhdCBmaWxlLCBhcyBpdCBzZWVtcyBhIHJhdGhlciBpbXBvcnRhbnQgcGllY2Ugb2YgdGhlIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MTIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNTo1MC42OTU3OTAzMjFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzQ1NTc3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfQlBGX0pJVCkgKz0gZGlzcGF0Y2hlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyMzppZmVxICgkKENPTkZJR19ORVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yNC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRldm1hcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjUwLjg0OTI1MzUwNloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM5NjI0NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4ga2VybmVsIGRldmVsb3BtZW50IGFuZCBidWlsZCBzeXN0ZW1zOlxuXG4qKkRlYnVnZ2luZyBhIEJ1aWxkIENvbmZpZ3VyYXRpb24gSXNzdWUqKlxuXG5SaWdodCwgc28gSSBzZWUgYSByZWZlcmVuY2UgdG8gYGlmZXEgKCQoQ09ORklHX05FVCkseSlgIGF0IGxpbmUgMjMuIFRoYXQgaW5zdGFudGx5IGZsYWdzIGEgcG90ZW50aWFsIGRlcGVuZGVuY3kgcmVsYXRlZCB0byBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIFNpbmNlIEknbSB2ZXJ5IGZhbWlsaWFyIHdpdGggdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgYnVpbGQgcHJvY2VzcywgSSBpbW1lZGlhdGVseSBrbm93IHdoZXJlIHRvIGxvb2suIE15IG5leHQgdGhvdWdodCBpcywgXCJMZXQncyBjaGVjayBga2VybmVsL2JwZi9NYWtlZmlsZWAgYXJvdW5kIHRoYXQgc2FtZSBsaW5lIG51bWJlci5cIiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyB0aGVyZSB0aGF0J3MgbGlrZWx5IHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB3aHkgYENPTkZJR19ORVRgIGlzIGJlaW5nIGV2YWx1YXRlZCBpbiB0aGF0IGNvbnRleHQuIEl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgYXBwcm9hY2g6IGlkZW50aWZ5IHRoZSBjb25kaXRpb24sIHRoZW4gdHJhY2UgaXQgdG8gd2hlcmUgaXQncyBiZWluZyBldmFsdWF0ZWQgdG8gc2VlIGlmIGl0IG1ha2VzIHNlbnNlIGluIHRoZSBjdXJyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBpbiB0aGlzIHBhcnQgb2YgdGhlIGtlcm5lbCBzb3VyY2UgY29kZS4gSSBiZXQgdGhpcyBpcyBhIGJ1aWxkLXRpbWUgY29uZGl0aW9uYWwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc3NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjU0Ljc4ODg4Mjc5M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXFxuICAyMTpcXHRlbmRpZlxcbiAgMjI6XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGRpc3BhdGNoZXIub1xcbiAgMjM6XFx0aWZlcSAoJChDT05GSUdfTkVUKSx5KVxcbiAgMjQ6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkZXZtYXAub1xcbiAgMjU6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcHVtYXAub1xcbiAgMjY6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBvZmZsb2FkLm9cXG4gIDI3OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbmV0X25hbWVzcGFjZS5vXFxuICAyODpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHRjeC5vXFxuICAyOTpcXHRlbmRpZlxcbiAgMzA6XFx0aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXFxuICAzMTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN0YWNrbWFwLm9cXG4gIDMyOlxcdGVuZGlmXFxuICAzMzpcXHRpZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxcbiAgMzQ6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xcbiAgMzU6XFx0ZW5kaWZcXG4gIDM2OlxcdG9iai0kKENPTkZJR19DR1JPVVBfQlBGKSArPSBjZ3JvdXAub1xcbiAgMzc6XFx0aWZlcSAoJChDT05GSUdfSU5FVCkseSlcXG4gIDM4OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmV1c2Vwb3J0X2FycmF5Lm9cXG4gIDM5OlxcdGVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE1OjU0Ljc4OTAwNDQxM1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTUxMDg3ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyBmb3IgQlBGLVJlbGF0ZWQgQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgaW5pdGlhbCBpbnNwZWN0aW9uLCBpdCBsb29rcyBsaWtlIGBuZXRfbmFtZXNwYWNlLm9gIGFuZCBgdGN4Lm9gIGFyZSB0aWVkIHRvIGBDT05GSUdfTkVUYCwgd2hpY2ggaW4gdHVybiBpbXBsaWVzIGBDT05GSUdfTkVUS0lUYCBhcyB3ZWxsLiAgU28sIGF0IGEgYmFzZSBsZXZlbCwgd2UgaGF2ZSBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19DR1JPVVBfQlBGYCwgYENPTkZJR19ORVRgLCBhbmQgYENPTkZJR19ORVRLSVRgIGFzIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy5cblxuSG93ZXZlciwgdGhlIHByb21wdCBpcyBjbGVhcjogYXZvaWQgdGhlIGV4Y2Vzc2l2ZWx5IGdlbmVyYWwuIFdoaWxlIGBDT05GSUdfTkVUYCBpcyBjZXJ0YWlubHkgcmVxdWlyZWQsIGl0J3MgdG9vIGJyb2FkIGZvciB0aGlzIHB1cnBvc2UuICBgQ09ORklHX0JQRl9TWVNDQUxMYCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHRoZSBjb3JlIGVuYWJsaW5nIGNvbmZpZyBmb3IgQlBGLCBldmVuIGlmIGdlbmVyYWxseSBhcHBsaWNhYmxlLCBzbyB0aGF0IHN0YXlzLiAgYENPTkZJR19DR1JPVVBfQlBGYCBpcyBzdWl0YWJseSBzcGVjaWZpYyB0byBiZSB1c2VmdWwsIGFuZCBzbyBpcyBgQ09ORklHX05FVEtJVGAuIFNvLCB3ZSBrZWVwIHRob3NlLlxuXG5Ob3csIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3JlIGdldHRpbmcgYWxsIHRoZSByZWxldmFudCBjb2RlLiBMb29raW5nIGF0IHRoZSBmb2N1cyBzeW1ib2xzLCB3ZSBoYXZlIGEgbGlzdCB0byBzdGFydCB3aXRoOiBgYnBmX21wcm9nX2F0dGFjaGAsIGBicGZfbXByb2dfZGV0YWNoYCwgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLCBgYnBmX2xpbmtfc2hvd19mZGluZm9gLCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC5cblxuQnV0IGxldCdzIG5vdCBzdG9wIHRoZXJlLiBXZSBuZWVkIHRvIGJlIGV4aGF1c3RpdmUgdG8gbWFrZSBzdXJlIHdlJ3JlIGNvdmVyaW5nIHRoZSBtb2RpZmljYXRpb25zIG1hZGUuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxzIGluIGBuZXRraXQuY2AgYW5kIGB0Y3guY2AuIEFuZCBzdXJlIGVub3VnaCwgdGhlcmUgYXJlIHNldmVyYWw6IGBuZXRraXRfcHJvZ19hdHRhY2hgLCBgbmV0a2l0X3Byb2dfZGV0YWNoYCwgYG5ldGtpdF9saW5rX3Byb2dfYXR0YWNoYCwgYG5ldGtpdF9saW5rX3JlbGVhc2VgLCBhbmQgYG5ldGtpdF9saW5rX3VwZGF0ZWAgaW4gYG5ldGtpdC5jYDsgdGhlbiBgdGN4X3Byb2dfYXR0YWNoYCwgYHRjeF9wcm9nX2RldGFjaGAsIGB0Y3hfbGlua19wcm9nX2F0dGFjaGAsIGB0Y3hfbGlua19yZWxlYXNlYCwgYW5kIGB0Y3hfbGlua191cGRhdGVgIGluIGB0Y3guY2AuIFBsdXMgYGJwZl9tcHJvZ19saW5rYCBhbmQgYGJwZl9tcHJvZ190dXBsZV9yZWxhdGl2ZWAgaW4gYG1wcm9nLmNgLlxuXG5Pa2F5LCBhZGRpbmcgYG5ldGtpdF9wcm9nX2F0dGFjaGAsIGB0Y3hfcHJvZ19hdHRhY2hgIGFuZCB0aGUgbGluayB2ZXJzaW9ucyBzZWVtIGFwcHJvcHJpYXRlIHRvIGV4cGFuZCB0aGUgc3ltYm9sIGxpc3QsIHRob3VnaCB0aGUgYGJwZl9tcHJvZ19hdHRhY2hgIGJhc2UgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgdGhvc2UuXG5cbkZpbmFsIGZvY3VzIHN5bWJvbHM6XG5cbmBicGZfbXByb2dfYXR0YWNoYFxuYGJwZl9tcHJvZ19kZXRhY2hgXG5gX19jZ3JvdXBfYnBmX2F0dGFjaGBcbmBfX2Nncm91cF9icGZfcmVwbGFjZWBcbmBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2BcbmBicGZfbGlua19zaG93X2ZkaW5mb2BcbmBicGZfbGlua19nZXRfaW5mb19ieV9mZGBcbmBuZXRraXRfcHJvZ19hdHRhY2hgXG5gdGN4X3Byb2dfYXR0YWNoYFxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ0NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE2OjAzLjc0MDExNTI0MloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0NTIxODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGtpdF9wcm9nX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRraXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRraXQuYz03MTE9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRraXRfZGV2X2ZldGNoKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlmaW5kZXgsIHUzMiB3aGljaClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTc0NC1cXG5kcml2ZXJzL25ldC9uZXRraXQuYzo3NDU6aW50IG5ldGtpdF9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTc0Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE2OjAzLjg2NDY1MzYzOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTAzMDg3ODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgRHluYW1pYyBCZWhhdmlvcioqXG5cbk9rYXksIHNvIHRoaXMgaXNuJ3QgYSBzdGF0aWMgc2l0dWF0aW9uLiBTb21ldGhpbmcncyBjbGVhcmx5IGluIGZsdXgsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZHluYW1pY3MgYXQgcGxheS4gVGhlIHBocmFzZSBcIkl0IGlzIG5vdCBzdGF0aWNcIiBpcyBhIHNpZ25hbCDigJMgaXQgbWVhbnMgSSBjYW4ndCBqdXN0IGxvb2sgYXQgYSBzbmFwc2hvdCBvZiB0aGUgc3lzdGVtOyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaW5ncyBjaGFuZ2Ugb3ZlciB0aW1lLlxuXG5HaXZlbiB0aGUgY29udGV4dCwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byBgdGN4X3Byb2dfYXR0YWNoYC4gVGhhdCBmdW5jdGlvbiBsaWtlbHkgcmVwcmVzZW50cyBhIGNyaXRpY2FsIHBvaW50IHdoZXJlIHNvbWUgYmVoYXZpb3IgaXMgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gSXQncyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgbGlua2luZyBhIHByb2dyYW0gb3Igc29tZSBvdGhlciBlbGVtZW50IHdpdGhpbiB0aGUgc3lzdGVtLiBVbmRlcnN0YW5kaW5nIHdoYXQgaGFwcGVucyB3aXRoaW4gYHRjeF9wcm9nX2F0dGFjaGAg4oCTIGl0cyBpbnB1dHMsIG91dHB1dHMsIHNpZGUgZWZmZWN0cywgYW5kIGNvbnRyb2wgZmxvdyDigJMgc2hvdWxkIGJlIGtleSB0byB1bnJhdmVsaW5nIHRoZSBkeW5hbWljIGFzcGVjdCBJJ20gc2VlaW5nLiBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIGV4ZWN1dGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wYWN0IHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoxNjowNi45Njc3NDQzOTFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjUzNTQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3hfcHJvZ19hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90Y3guY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3RjeC5jLTktXFxua2VybmVsL2JwZi90Y3guYzoxMDppbnQgdGN4X3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxua2VybmVsL2JwZi90Y3guYy0xMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjE2OjA3LjA3NDI4NDk1N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjQzMDE1MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXNuJ3QganVzdCBjb3NtZXRpYzsgaXQncyB0b3VjaGluZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBCUEYgc3R1ZmYsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IGdldHMgbXkgYXR0ZW50aW9uLiBJIHNlZSB0aGF0IGl0J3MgZGVhbGluZyB3aXRoIG11bHRpLXByb2cgYXR0YWNobWVudCBhbmQgZGV0YWNobWVudCAoYGJwZl9tcHJvZ19hdHRhY2hgLCBgYnBmX21wcm9nX2RldGFjaGApLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGFkZGluZyBzdHJpY3RlciBsaW5rIHR5cGUgZW5mb3JjZW1lbnQsIHdoaWNoIGlzIGNydWNpYWwgZm9yIHRoZSBgTkVUS0lUYCBhbmQgYFRDWGAgc3Vic3lzdGVtcy4gTWFrZXMgc2Vuc2Ug4oCTIHRob3NlIGFyZSBzcGVjaWFsaXplZCB1c2UgY2FzZXMsIGFuZCB5b3UgKmRlZmluaXRlbHkqIHdhbnQgdG8gZW5zdXJlIHByb2dyYW1zIGFyZSBhdHRhY2hlZCBjb3JyZWN0bHkuXG5cblRoZW4gSSBzZWUgdXBkYXRlcyB0byB0aGUgY2dyb3VwIEJQRiBhdHRhY2gvcmVwbGFjZSBsb2dpYyAoYF9fY2dyb3VwX2JwZl9hdHRhY2hgLCBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgKS4gVGhhdCBoaW50cyBhdCBjaGFuZ2VzIHRvIGhvdyBCUEYgY2dyb3VwIHN0b3JhZ2UgaXMgaGFuZGxlZC4gVGhhdCBjb3VsZCBoYXZlIHJpcHBsZSBlZmZlY3RzLCBzbyB3b3J0aCBhIGNsb3NlciBsb29rLiBUaGV5J3JlIHByb2JhYmx5IGZpeGluZyBhIHN0b3JhZ2UgbGVhayBvciBzb21lIHNpbWlsYXIgZ290Y2hhLlxuXG5UaGUgZml4IGZvciB0aGUgbG9ja2luZyBpc3N1ZSBpbiBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgIGlzIGFub3RoZXIgcmVkIGZsYWcuIExvY2tpbmcgYnVncyBhcmUgb2Z0ZW4gaGFyZCB0byBzcG90LCBlc3BlY2lhbGx5IGluIGNvbmN1cnJlbnQgY29kZSwgc28gdGhhdCBmaXggaXMgbGlrZWx5IGEgZ29vZCB0aGluZy4gQW5kIFJDVSBsb2NraW5nIGZpeGVzIGluIGBicGZfbGlua19zaG93X2ZkaW5mb2AgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgaXMgZXF1YWxseSBpbXBvcnRhbnQsIHBhcnRpY3VsYXJseSBzaW5jZSB0aGVzZSBhcmUgcmVsYXRlZCB0byBnZXR0aW5nIGluZm9ybWF0aW9uIGFib3V0IGxpbmtzLCBsaWtlbHkgZm9yIHRvb2xzLlxuXG5TbywgZnVuY3Rpb25hbGx5LCB0aGlzIGlzIGFsbCBjb3JlIGtlcm5lbCBsb2dpYywgZGlyZWN0bHkgcmVhY2hhYmxlLCBhbmQgc3ViamVjdCB0byBmdXp6ZXIgaW1wYWN0LiBMZXQncyBtYWtlIHN1cmUgb3VyIGZ1enplcnMgcGljayB0aGlzIHVwLiBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI3NSwiT3V0cHV0VG9rZW5zIjoyODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6MTY6MTQuMzE3MzA0MzIxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMTc1NzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiTkVUS0lUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX21wcm9nX2F0dGFjaFwiLFxuICAgIFwiYnBmX21wcm9nX2RldGFjaFwiLFxuICAgIFwiX19jZ3JvdXBfYnBmX2F0dGFjaFwiLFxuICAgIFwiX19jZ3JvdXBfYnBmX3JlcGxhY2VcIixcbiAgICBcImJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nXCIsXG4gICAgXCJicGZfbGlua19zaG93X2ZkaW5mb1wiLFxuICAgIFwiYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRcIixcbiAgICBcIm5ldGtpdF9wcm9nX2F0dGFjaFwiLFxuICAgIFwidGN4X3Byb2dfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCUEYgbG9naWMgZm9yIGF0dGFjaGluZyBhbmQgZGV0YWNoaW5nIG11bHRpLXByb2dzIChicGZfbXByb2dfYXR0YWNoLCBicGZfbXByb2dfZGV0YWNoKSB0byBlbmZvcmNlIGV4cGVjdGVkIGxpbmsgdHlwZXMsIHNwZWNpZmljYWxseSBmb3IgTkVUS0lUIGFuZCBUQ1guIEl0IGFsc28gdXBkYXRlcyBjZ3JvdXAgQlBGIGF0dGFjaC9yZXBsYWNlIGxvZ2ljIHRvIHByb3Blcmx5IGhhbmRsZSBCUEYgY2dyb3VwIHN0b3JhZ2UsIGFuZCBmaXhlcyBhIGxvY2tpbmcgaXNzdWUgaW4gYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cuIEFkZGl0aW9uYWxseSwgaXQgZml4ZXMgUkNVIGxvY2tpbmcgaW4gYnBmX2xpbmtfc2hvd19mZGluZm8gYW5kIGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiTkVUS0lUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX21wcm9nX2F0dGFjaFwiLFxuICAgIFwiYnBmX21wcm9nX2RldGFjaFwiLFxuICAgIFwiX19jZ3JvdXBfYnBmX2F0dGFjaFwiLFxuICAgIFwiX19jZ3JvdXBfYnBmX3JlcGxhY2VcIixcbiAgICBcImJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nXCIsXG4gICAgXCJicGZfbGlua19zaG93X2ZkaW5mb1wiLFxuICAgIFwiYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRcIixcbiAgICBcIm5ldGtpdF9wcm9nX2F0dGFjaFwiLFxuICAgIFwidGN4X3Byb2dfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCUEYgbG9naWMgZm9yIGF0dGFjaGluZyBhbmQgZGV0YWNoaW5nIG11bHRpLXByb2dzIChicGZfbXByb2dfYXR0YWNoLCBicGZfbXByb2dfZGV0YWNoKSB0byBlbmZvcmNlIGV4cGVjdGVkIGxpbmsgdHlwZXMsIHNwZWNpZmljYWxseSBmb3IgTkVUS0lUIGFuZCBUQ1guIEl0IGFsc28gdXBkYXRlcyBjZ3JvdXAgQlBGIGF0dGFjaC9yZXBsYWNlIGxvZ2ljIHRvIHByb3Blcmx5IGhhbmRsZSBCUEYgY2dyb3VwIHN0b3JhZ2UsIGFuZCBmaXhlcyBhIGxvY2tpbmcgaXNzdWUgaW4gYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cuIEFkZGl0aW9uYWxseSwgaXQgZml4ZXMgUkNVIGxvY2tpbmcgaW4gYnBmX2xpbmtfc2hvd19mZGluZm8gYW5kIGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowf28xd[1] Phase: Succeeded StartedAt: 2026-07-23 02:16:25 +0000 UTC FinishedAt: 2026-07-23 02:16:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-23 02:16:25 +0000 UTC FinishedAt: 2026-07-23 02:16:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2] Phase: Succeeded StartedAt: 2026-07-23 02:16:25 +0000 UTC FinishedAt: 2026-07-23 06:47:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-23 02:16:25 +0000 UTC FinishedAt: 2026-07-23 06:47:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-23 02:16:25 +0000 UTC FinishedAt: 2026-07-23 02:16:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-23 02:16:25 +0000 UTC FinishedAt: 2026-07-23 02:16:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowf28xd/series-workflowf28xd-convert-artifact-623306423/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-23 02:16:46 +0000 UTC FinishedAt: 2026-07-23 02:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-23 02:16:46 +0000 UTC FinishedAt: 2026-07-23 02:58:29 +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:*afc4b4ff-a781-4fa4-9249-6d5084ee79ca,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-workflowf28xd/series-workflowf28xd-convert-artifact-623306423/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": "7b50d03d-ef2b-4693-9fcb-c852c245f6af", "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-workflowf28xd/series-workflowf28xd-build-action-1313621517/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-23 02:16:46 +0000 UTC FinishedAt: 2026-07-23 02:57:50 +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:*afc4b4ff-a781-4fa4-9249-6d5084ee79ca,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-workflowf28xd/series-workflowf28xd-convert-artifact-623306423/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": "7b50d03d-ef2b-4693-9fcb-c852c245f6af", "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-workflowf28xd/series-workflowf28xd-build-action-1313621517/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-23 02:58:29 +0000 UTC FinishedAt: 2026-07-23 02:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-23 02:58:29 +0000 UTC FinishedAt: 2026-07-23 02:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-23 02:58:29 +0000 UTC FinishedAt: 2026-07-23 02:58:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-23 02:58:29 +0000 UTC FinishedAt: 2026-07-23 02:58:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowf28xd/series-workflowf28xd-convert-artifact-1975967206/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-23 02:58:40 +0000 UTC FinishedAt: 2026-07-23 03:00:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-23 02:58:40 +0000 UTC FinishedAt: 2026-07-23 03:00:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7b50d03d-ef2b-4693-9fcb-c852c245f6af,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-workflowf28xd/series-workflowf28xd-build-action-1313621517/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-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-23 03:00:52 +0000 UTC FinishedAt: 2026-07-23 03:00:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-23 03:00:52 +0000 UTC FinishedAt: 2026-07-23 03:00:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-23 03:00:52 +0000 UTC FinishedAt: 2026-07-23 03:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-23 03:00:52 +0000 UTC FinishedAt: 2026-07-23 03:42:57 +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:*afc4b4ff-a781-4fa4-9249-6d5084ee79ca,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-workflowf28xd/series-workflowf28xd-convert-artifact-1975967206/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": "80773e45-f2e0-4045-8ab5-fce78018dfd0", "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-workflowf28xd/series-workflowf28xd-build-action-1721734058/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-23 03:00:52 +0000 UTC FinishedAt: 2026-07-23 03:42:38 +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:*afc4b4ff-a781-4fa4-9249-6d5084ee79ca,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-workflowf28xd/series-workflowf28xd-convert-artifact-1975967206/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": "80773e45-f2e0-4045-8ab5-fce78018dfd0", "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-workflowf28xd/series-workflowf28xd-build-action-1721734058/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-23 03:42:57 +0000 UTC FinishedAt: 2026-07-23 03:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-23 03:42:57 +0000 UTC FinishedAt: 2026-07-23 03:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-23 03:42:57 +0000 UTC FinishedAt: 2026-07-23 03:45:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-23 03:42:57 +0000 UTC FinishedAt: 2026-07-23 03:44:54 +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:*80773e45-f2e0-4045-8ab5-fce78018dfd0,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-workflowf28xd/series-workflowf28xd-build-action-1721734058/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-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-23 03:45:03 +0000 UTC FinishedAt: 2026-07-23 06:47:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-23 03:45:03 +0000 UTC FinishedAt: 2026-07-23 06:47:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"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:*7b50d03d-ef2b-4693-9fcb-c852c245f6af,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*80773e45-f2e0-4045-8ab5-fce78018dfd0,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-workflowf28xd/series-workflowf28xd-build-action-1313621517/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-workflowf28xd/series-workflowf28xd-build-action-1721734058/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-23 03:45:03 +0000 UTC FinishedAt: 2026-07-23 03:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-23 03:45:03 +0000 UTC FinishedAt: 2026-07-23 03:45:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"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-workflowf28xd/series-workflowf28xd-convert-artifact-216031019/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-23 03:45:03 +0000 UTC FinishedAt: 2026-07-23 03:45:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-23 03:45:03 +0000 UTC FinishedAt: 2026-07-23 03:45:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-23 03:45:03 +0000 UTC FinishedAt: 2026-07-23 03:45:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-23 03:45:13 +0000 UTC FinishedAt: 2026-07-23 06:47:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf28xd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mprog_attach","bpf_mprog_detach","__cgroup_bpf_attach","__cgroup_bpf_replace","bpf_netns_link_update_prog","bpf_link_show_fdinfo","bpf_link_get_info_by_fd","netkit_prog_attach","tcx_prog_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","NETKIT"],"series_id":"041a68c2-1bf1-4c37-be2c-148ea09ad197","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-23 03:45:13 +0000 UTC FinishedAt: 2026-07-23 06:47:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7b50d03d-ef2b-4693-9fcb-c852c245f6af,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*80773e45-f2e0-4045-8ab5-fce78018dfd0,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-workflowf28xd/series-workflowf28xd-build-action-1313621517/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-workflowf28xd/series-workflowf28xd-build-action-1721734058/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-workflowf28xd/series-workflowf28xd-convert-artifact-216031019/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,}