Name: series-workflow4hmr2 Phase: Succeeded StartedAt: 2026-07-10 01:13:58 +0000 UTC FinishedAt: 2026-07-10 05:57:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[0] Phase: Succeeded StartedAt: 2026-07-10 01:13:58 +0000 UTC FinishedAt: 2026-07-10 01:29:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 01:13:58 +0000 UTC FinishedAt: 2026-07-10 01:29:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NET_IPIP", "IPV6_SIT", "IPV6_TUNNEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NET_IPIP", "IPV6_SIT", "IPV6_TUNNEL" ], "series_id": "6642fb72-c08f-4d5b-9289-8aa8bf20bb05" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ipip6_tunnel_fill_forward_path", "nf_flow_tunnel_ip_push", "nf_flow_tunnel_ip6_push", "nf_flow_tunnel_push", "nf_flow_offload_lookup", "nf_flow_offload_ipv6_lookup", "nf_flow_offload_ip_hook", "nf_flow_offload_ipv6_hook", "nft_dev_fill_forward_path", "nft_flow_tunnel_update_route" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-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+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkVUX0lQSVAmIzM0OywKICAgICYjMzQ7SVBWNl9TSVQmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcGlwNl90dW5uZWxfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7bmZfZmxvd190dW5uZWxfaXBfcHVzaCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3R1bm5lbF9pcDZfcHVzaCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3R1bm5lbF9wdXNoJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9sb29rdXAmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2smIzM0OywKICAgICYjMzQ7bmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7LAogICAgJiMzNDtuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgSVAtaW4tSVAsIFNJVCAoSVB2Ni1pbi1JUHY0KSwgYW5kIElQdjYtaW4tSVB2NiB0dW5uZWxzIGluIHRoZSBuZXRmaWx0ZXIgZmxvd3RhYmxlIG9mZmxvYWQuIEl0IG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBsb2dpYyBhbmQgdHVubmVsIGRyaXZlcnMgdG8gc3VwcG9ydCBmaWxsaW5nIHRoZSBmb3J3YXJkIHBhdGggYW5kIHB1c2hpbmcgdHVubmVsIGhlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDE6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZTY5MjgyM2QwYzBkYzJlZmQ4YWYwOTRkNzBlODljYTA4MDFmZTczXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDE6Mjg6MzAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbmluZGV4IGU3Yzc4MjkzMDAyYWJiLi4wNmQxMjhjNjdjOGM0NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbkBAIC0yNzYsNyAmIzQzOzI3Niw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X21hbmdsZV9pcHY0KGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLFxuJiM0MztzdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCB1OCAqYWRkciwgX19iZTE2IGV0aGVyX3R5cGUsXG4gXHRcdFx0XHQgICAgc3RydWN0IGFpcm9oYV93ZG1hX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayBzdGFjaztcbkBAIC0yODcsNyAmIzQzOzI4OCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLFxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGVyciA9IGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGFkZHIsIFx1MDAyNnN0YWNrKTtcbiYjNDM7XHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBldGhlcl90eXBlLCBcdTAwMjZzdGFjayk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG5AQCAtMzMxLDcgJiM0MzszMzIsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiBcdFx0XHRcdFx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgKmh3ZSxcbiBcdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHR5cGUsXG4gXHRcdFx0XHRcdHN0cnVjdCBhaXJvaGFfZmxvd19kYXRhICpkYXRhLFxuLVx0XHRcdFx0XHRpbnQgbDRwcm90bylcbiYjNDM7XHRcdFx0XHRcdF9fYmUxNiBldGhlcl90eXBlLCBpbnQgbDRwcm90bylcbiB7XG4gXHR1MzIgcWRhdGEgPSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfU0hBUEVSX0lELCAweDdmKSwgcG9ydHNfcGFkLCB2YWw7XG4gXHRpbnQgd2xhbl9ldHlwZSA9IC1FSU5WQUwsIGRzYV9wb3J0ID0gYWlyb2hhX2dldF9kc2FfcG9ydChcdTAwMjZuZXRkZXYpO1xuQEAgLTM1NCw3ICYjNDM7MzU1LDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdHN0cnVjdCBhaXJvaGFfd2RtYV9pbmZvIGluZm8gPSB7fTtcbiBcbiBcdFx0aWYgKCFhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8obmV0ZGV2LCBkYXRhLVx1MDAzZWV0aC5oX2Rlc3QsXG4tXHRcdFx0XHRcdCAgICAgIFx1MDAyNmluZm8pKSB7XG4mIzQzO1x0XHRcdFx0XHQgICAgICBldGhlcl90eXBlLCBcdTAwMjZpbmZvKSkge1xuIFx0XHRcdHZhbCB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfSUIyX05CUSwgaW5mby5pZHgpIHxcbiBcdFx0XHQgICAgICAgRklFTERfUFJFUChBSVJPSEFfRk9FX0lCMl9QU0VfUE9SVCxcbiBcdFx0XHRcdFx0ICBGRV9QU0VfUE9SVF9DRE00KTtcbkBAIC0xMDgxLDYgJiM0MzsxMDgyLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdDtcbiBcdHN0cnVjdCBhaXJvaGFfZm9lX2VudHJ5IGh3ZTtcbiBcdGludCBlcnIsIGksIG9mZmxvYWRfdHlwZTtcbiYjNDM7XHRfX2JlMTYgZXRoZXJfdHlwZSA9IDA7XG4gXHR1MTYgYWRkcl90eXBlID0gMDtcbiBcdHU4IGw0cHJvdG8gPSAwO1xuIFxuQEAgLTExMDcsNiAmIzQzOzExMDksNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiBcdFx0c3RydWN0IGZsb3dfbWF0Y2hfYmFzaWMgbWF0Y2g7XG4gXG4gXHRcdGZsb3dfcnVsZV9tYXRjaF9iYXNpYyhydWxlLCBcdTAwMjZtYXRjaCk7XG4mIzQzO1x0XHRldGhlcl90eXBlID0gbWF0Y2gua2V5LVx1MDAzZW5fcHJvdG87XG4gXHRcdGw0cHJvdG8gPSBtYXRjaC5rZXktXHUwMDNlaXBfcHJvdG87XG4gXHR9IGVsc2Uge1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5AQCAtMTE3Nyw3ICYjNDM7MTE4MCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCBcdTAwMjZod2UsIG9kZXYsIG9mZmxvYWRfdHlwZSxcbi1cdFx0XHRcdFx0ICAgXHUwMDI2ZGF0YSwgbDRwcm90byk7XG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjZkYXRhLCBldGhlcl90eXBlLCBsNHByb3RvKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuaW5kZXggY2M4YzRlZjgwMzhmMzAuLjI2MDFjMTdiMjljOGI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXG5AQCAtODksNyAmIzQzOzg5LDggQEAgbXRrX2Zsb3dfb2ZmbG9hZF9tYW5nbGVfZXRoKGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0LCB2b2lkICpldGgpXG4gfVxuIFxuIHN0YXRpYyBpbnRcbi1tdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbXRrX3dkbWFfaW5mbyAqaW5mbylcbiYjNDM7bXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcbiYjNDM7XHRcdCAgICAgICBfX2JlMTYgZXRoZXJfdHlwZSwgc3RydWN0IG10a193ZG1hX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayBzdGFjaztcbiBcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG5AQCAtMTAyLDcgJiM0MzsxMDMsNyBAQCBtdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbXRrX3dkbWFfaVxuIFx0XHRyZXR1cm4gLTE7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcdTAwMjZzdGFjayk7XG4mIzQzO1x0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgZXRoZXJfdHlwZSwgXHUwMDI2c3RhY2spO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTE5MCwxMiAmIzQzOzE5MSwxMiBAQCBtdGtfZmxvd19nZXRfZHNhX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKipkZXYpXG4gc3RhdGljIGludFxuIG10a19mbG93X3NldF9vdXRwdXRfZGV2aWNlKHN0cnVjdCBtdGtfZXRoICpldGgsIHN0cnVjdCBtdGtfZm9lX2VudHJ5ICpmb2UsXG4gXHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRlc3RfbWFjLFxuLVx0XHRcdCAgIGludCAqd2VkX2luZGV4KVxuJiM0MztcdFx0XHQgICBfX2JlMTYgZXRoZXJfdHlwZSwgaW50ICp3ZWRfaW5kZXgpXG4ge1xuIFx0c3RydWN0IG10a193ZG1hX2luZm8gaW5mbyA9IHt9O1xuIFx0aW50IHBzZV9wb3J0LCBkc2FfcG9ydCwgcXVldWU7XG4gXG4tXHRpZiAobXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhkZXYsIGRlc3RfbWFjLCBcdTAwMjZpbmZvKSA9PSAwKSB7XG4mIzQzO1x0aWYgKG10a19mbG93X2dldF93ZG1hX2luZm8oZGV2LCBkZXN0X21hYywgZXRoZXJfdHlwZSwgXHUwMDI2aW5mbykgPT0gMCkge1xuIFx0XHRtdGtfZm9lX2VudHJ5X3NldF93ZG1hKGV0aCwgZm9lLCBpbmZvLndkbWFfaWR4LCBpbmZvLnF1ZXVlLFxuIFx0XHRcdFx0ICAgICAgIGluZm8uYnNzLCBpbmZvLndjaWQsIGluZm8uYW1zZHUpO1xuIFx0XHRpZiAobXRrX2lzX25ldHN5c192Ml9vcl9ncmVhdGVyKGV0aCkpIHtcbkBAIC0yNzMsNiAmIzQzOzI3NCw3IEBAIG10a19mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqZixcbiBcdHN0cnVjdCBtdGtfZmxvd19kYXRhIGRhdGEgPSB7fTtcbiBcdHN0cnVjdCBtdGtfZm9lX2VudHJ5IGZvZTtcbiBcdHN0cnVjdCBtdGtfZmxvd19lbnRyeSAqZW50cnk7XG4mIzQzO1x0X19iZTE2IGV0aGVyX3R5cGUgPSAwO1xuIFx0aW50IG9mZmxvYWRfdHlwZSA9IDA7XG4gXHRpbnQgd2VkX2luZGV4ID0gLTE7XG4gXHR1MTYgYWRkcl90eXBlID0gMDtcbkBAIC0zMTksNiAmIzQzOzMyMSw3IEBAIG10a19mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqZixcbiBcdFx0c3RydWN0IGZsb3dfbWF0Y2hfYmFzaWMgbWF0Y2g7XG4gXG4gXHRcdGZsb3dfcnVsZV9tYXRjaF9iYXNpYyhydWxlLCBcdTAwMjZtYXRjaCk7XG4mIzQzO1x0XHRldGhlcl90eXBlID0gbWF0Y2gua2V5LVx1MDAzZW5fcHJvdG87XG4gXHRcdGw0cHJvdG8gPSBtYXRjaC5rZXktXHUwMDNlaXBfcHJvdG87XG4gXHR9IGVsc2Uge1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5AQCAtNDgxLDcgJiM0Mzs0ODQsNyBAQCBtdGtfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmYsXG4gXHRcdG10a19mb2VfZW50cnlfc2V0X3BwcG9lKGV0aCwgXHUwMDI2Zm9lLCBkYXRhLnBwcG9lLnNpZCk7XG4gXG4gXHRlcnIgPSBtdGtfZmxvd19zZXRfb3V0cHV0X2RldmljZShldGgsIFx1MDAyNmZvZSwgb2RldiwgZGF0YS5ldGguaF9kZXN0LFxuLVx0XHRcdFx0XHQgXHUwMDI2d2VkX2luZGV4KTtcbiYjNDM7XHRcdFx0XHRcdCBldGhlcl90eXBlLCBcdTAwMjZ3ZWRfaW5kZXgpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NDYuLjQ1ZDk5ZTExYjA2ZTJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTkwMiw2ICYjNDM7OTAyLDcgQEAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCB7XG4gXHRcdFx0fTtcbiBcbiBcdFx0XHR1OFx0bDNfcHJvdG87XG4mIzQzO1x0XHRcdHU4XHRlbmNhcF9wcm90bztcbiBcdFx0fSB0dW47XG4gXHRcdHN0cnVjdCB7XG4gXHRcdFx0ZW51bSB7XG5AQCAtOTM4LDYgJiM0Mzs5MzksNyBAQCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHtcbiBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCB7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0dThcdFx0XHRkYWRkcltFVEhfQUxFTl07XG4mIzQzO1x0X19iZTE2XHRcdFx0ZXRoZXJfdHlwZTtcbiBcbiBcdGludFx0XHRcdG51bV92bGFucztcbiBcdHN0cnVjdCB7XG5AQCAtMzQyMCw3ICYjNDM7MzQyMiw4IEBAIHZvaWQgZGV2X3JlbW92ZV9vZmZsb2FkKHN0cnVjdCBwYWNrZXRfb2ZmbG9hZCAqcG8pO1xuIFxuIGludCBkZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuJiM0MztpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgY29uc3QgdTggKmRhZGRyLCBfX2JlMTYgZXRoZXJfdHlwZSxcbiBcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XG4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZV9yY3Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuaW5kZXggN2IyM2IyNDVhNWE4NmEuLjRkNDA2ODAxZWM5MDE1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuQEAgLTExOCw2ICYjNDM7MTE4LDcgQEAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWwge1xuIFx0fTtcbiBcbiBcdHU4XHRsM19wcm90bztcbiYjNDM7XHR1OFx0ZW5jYXBfcHJvdG87XG4gfTtcbiBcbiBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA0YjNkNWNmZGY2ZTAwZi4uOWY1YTJkYTllOWY3NzQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC03NTAsMTIgJiM0Mzs3NTAsMTQgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKmRldl9md2RfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiBcdHJldHVybiBcdTAwMjZzdGFjay1cdTAwM2VwYXRoW2tdO1xuIH1cbiBcbi1pbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbiYjNDM7aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHQgIGNvbnN0IHU4ICpkYWRkciwgX19iZTE2IGV0aGVyX3R5cGUsXG4gXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXY7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4tXHRcdC5kZXZcdD0gZGV2LFxuJiM0MztcdFx0LmRldlx0XHQ9IGRldixcbiYjNDM7XHRcdC5ldGhlcl90eXBlXHQ9IGV0aGVyX3R5cGUsXG4gXHR9O1xuIFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcbiBcdGludCByZXQgPSAwO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuY1xuaW5kZXggYjY0MzE5NGY1N2QyOWYuLjlmN2IyYmRhYmVmMDZiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBpcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcGlwLmNcbkBAIC0zNjksNiAmIzQzOzM2OSw3IEBAIHN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0cGF0aC1cdTAwM2V0dW4uc3JjX3Y0LnNfYWRkciA9IHRpcGgtXHUwMDNlc2FkZHI7XG4gXHRwYXRoLVx1MDAzZXR1bi5kc3RfdjQuc19hZGRyID0gdGlwaC1cdTAwM2VkYWRkcjtcbiBcdHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQO1xuJiM0MztcdHBhdGgtXHUwMDNldHVuLmVuY2FwX3Byb3RvID0gQUZfSU5FVDtcbiBcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcbiBcdGN0eC1cdTAwM2VkZXYgPSBydC1cdTAwM2Vkc3QuZGV2O1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuaW5kZXggYmY4ZTQwYWY2MGIwODMuLmExMjFmNzE1YWZkMmNkIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbkBAIC0xODYzLDcgJiM0MzsxODYzLDExIEBAIHN0YXRpYyBpbnQgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9UVU47XG4gXHRcdHBhdGgtXHUwMDNldHVuLnNyY192NiA9IHQtXHUwMDNlcGFybXMubGFkZHI7XG4gXHRcdHBhdGgtXHUwMDNldHVuLmRzdF92NiA9IHQtXHUwMDNlcGFybXMucmFkZHI7XG4tXHRcdHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2O1xuJiM0MztcdFx0cGF0aC1cdTAwM2V0dW4uZW5jYXBfcHJvdG8gPSBBRl9JTkVUNjtcbiYjNDM7XHRcdGlmIChjdHgtXHUwMDNlZXRoZXJfdHlwZSA9PSBjcHVfdG9fYmUxNihFVEhfUF9JUCkpXG4mIzQzO1x0XHRcdHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRwYXRoLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjtcbiBcdFx0cGF0aC1cdTAwM2VkZXYgPSBjdHgtXHUwMDNlZGV2O1xuIFx0XHRjdHgtXHUwMDNlZGV2ID0gZHN0LVx1MDAzZWRldjtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jXG5pbmRleCBhMzhiMjRmYjgzODQyNC4uZWFkMzI3YzMyZGYyNDUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9zaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvc2l0LmNcbkBAIC0xMzY1LDYgJiM0MzsxMzY1LDU2IEBAIGlwaXA2X3R1bm5lbF9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAsXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGlwaXA2X3R1bm5lbF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoY3R4LVx1MDAzZWRldik7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlwaGRyICp0aXBoID0gXHUwMDI2dHVubmVsLVx1MDAzZXBhcm1zLmlwaDtcbiYjNDM7XHRzdHJ1Y3QgcnRhYmxlICpydDtcbiYjNDM7XG4mIzQzO1x0LyogTkJNQSB0dW5uZWxzIChJU0FUQVAsIDZ0bzQsIDZyZCkgcmVzb2x2ZSB0aGUgb3V0ZXIgZGVzdGluYXRpb25cbiYjNDM7XHQgKiBwZXItcGFja2V0IGZyb20gdGhlIGlubmVyIElQdjYgYWRkcmVzczsgbm90IG9mZmxvYWRhYmxlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghdGlwaC1cdTAwM2VkYWRkcilcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0LyogRk9VL0dVRSBlbmNhcHN1bGF0aW9uIGlzIGhhbmRsZWQgaW4gdGhlIHNsb3cgcGF0aCBieVxuJiM0MztcdCAqIGlwX3R1bm5lbF9lbmNhcCgpOyB0aGUgZmFzdCBwYXRoIG9ubHkgcHVzaGVzIGEgcGxhaW5cbiYjNDM7XHQgKiBJUHY0IGhlYWRlciBhbmQgd291bGQgc2tpcCB0aGUgVURQIGVuY2Fwc3VsYXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHR1bm5lbC1cdTAwM2VlbmNhcC50eXBlICE9IFRVTk5FTF9FTkNBUF9OT05FKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRydCA9IGlwX3JvdXRlX291dHB1dChkZXZfbmV0KGN0eC1cdTAwM2VkZXYpLCB0aXBoLVx1MDAzZWRhZGRyLCB0aXBoLVx1MDAzZXNhZGRyLFxuJiM0MztcdFx0XHQgICAgIGluZXRfZHNmaWVsZF90b19kc2NwKHRpcGgtXHUwMDNldG9zKSxcbiYjNDM7XHRcdFx0ICAgICB0dW5uZWwtXHUwMDNlcGFybXMubGluaywgUlRfU0NPUEVfVU5JVkVSU0UpO1xuJiM0MztcdGlmIChJU19FUlIocnQpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocnQpO1xuJiM0MztcbiYjNDM7XHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9UVU47XG4mIzQzO1x0cGF0aC1cdTAwM2V0dW4uc3JjX3Y0LnNfYWRkciA9IHRpcGgtXHUwMDNlc2FkZHI7XG4mIzQzO1x0cGF0aC1cdTAwM2V0dW4uZHN0X3Y0LnNfYWRkciA9IHRpcGgtXHUwMDNlZGFkZHI7XG4mIzQzO1x0cGF0aC1cdTAwM2V0dW4uZW5jYXBfcHJvdG8gPSBBRl9JTkVUO1xuJiM0MztcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChjdHgtXHUwMDNlZXRoZXJfdHlwZSkge1xuJiM0MztcdGNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOlxuJiM0MztcdFx0cGF0aC1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQSVA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQVjYpOlxuJiM0MztcdFx0cGF0aC1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0aXBfcnRfcHV0KHJ0KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VkZXYgPSBydC1cdTAwM2Vkc3QuZGV2O1xuJiM0MztcdGlwX3J0X3B1dChydCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnRcbiBpcGlwNl90dW5uZWxfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsXG4gXHRcdFx0ICAgIHZvaWQgX191c2VyICpkYXRhLCBpbnQgY21kKVxuQEAgLTE0MDEsNiAmIzQzOzE0NTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwaXA2X25ldGRldl9vcHMgPSB7XG4gXHQubmRvX3Npb2NkZXZwcml2YXRlID0gaXBpcDZfdHVubmVsX3Npb2NkZXZwcml2YXRlLFxuIFx0Lm5kb19nZXRfaWZsaW5rID0gaXBfdHVubmVsX2dldF9pZmxpbmssXG4gXHQubmRvX3R1bm5lbF9jdGwgPSBpcGlwNl90dW5uZWxfY3RsLFxuJiM0MztcdC5uZG9fZmlsbF9mb3J3YXJkX3BhdGggPSBpcGlwNl90dW5uZWxfZmlsbF9mb3J3YXJkX3BhdGgsXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBpcGlwNl9kZXZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG5pbmRleCA5OWM1YjlkNjcxYTBjYS4uMThmODllNmZiNDM1NGQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG5AQCAtNzYsOSAmIzQzOzc2LDE0IEBAIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dfb2ZmbG9hZF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqY3QpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hbGxvYyk7XG4gXG4tc3RhdGljIHUzMiBmbG93X29mZmxvYWRfZHN0X2Nvb2tpZShzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpmbG93X3R1cGxlKVxuJiM0MztzdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9kc3RfY29va2llKHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZsb3dfdHVwbGUsXG4mIzQzO1x0XHRcdFx0ICAgdTggdHVuX2VuY2FwX3Byb3RvKVxuIHtcbi1cdGlmIChmbG93X3R1cGxlLVx1MDAzZWwzcHJvdG8gPT0gTkZQUk9UT19JUFY2KVxuJiM0MztcdGJvb2wgZHN0X3Y2O1xuJiM0MztcbiYjNDM7XHRkc3RfdjYgPSB0dW5fZW5jYXBfcHJvdG8gPyB0dW5fZW5jYXBfcHJvdG8gPT0gTkZQUk9UT19JUFY2XG4mIzQzO1x0XHRcdFx0IDogZmxvd190dXBsZS1cdTAwM2VsM3Byb3RvID09IE5GUFJPVE9fSVBWNjtcbiYjNDM7XHRpZiAoZHN0X3Y2KVxuIFx0XHRyZXR1cm4gcnQ2X2dldF9jb29raWUoZHN0X3J0Nl9pbmZvKGZsb3dfdHVwbGUtXHUwMDNlZHN0X2NhY2hlKSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC05OSwxMCAmIzQzOzEwNCwxMiBAQCBzdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4gXHRcdFx0XHQgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxuIHtcbiBcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZsb3dfdHVwbGUgPSBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlO1xuJiM0MztcdHU4IGwzcHJvdG8sIGVuY2FwX3Byb3RvID0gcm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmVuY2FwX3Byb3RvO1xuIFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gbmZ0X3JvdXRlX2RzdF9mZXRjaChyb3V0ZSwgZGlyKTtcbiBcdGludCBpLCBqID0gMDtcbiBcbi1cdHN3aXRjaCAoZmxvd190dXBsZS1cdTAwM2VsM3Byb3RvKSB7XG4mIzQzO1x0bDNwcm90byA9IGVuY2FwX3Byb3RvID8gZW5jYXBfcHJvdG8gOiBmbG93X3R1cGxlLVx1MDAzZWwzcHJvdG87XG4mIzQzO1x0c3dpdGNoIChsM3Byb3RvKSB7XG4gXHRjYXNlIE5GUFJPVE9fSVBWNDpcbiBcdFx0Zmxvd190dXBsZS1cdTAwM2VtdHUgPSBpcF9kc3RfbXR1X21heWJlX2ZvcndhcmQoZHN0LCB0cnVlKTtcbiBcdFx0YnJlYWs7XG5AQCAtMTM4LDcgJiM0MzsxNDUsOCBAQCBzdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4gXHRjYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIOlxuIFx0XHRmbG93X3R1cGxlLVx1MDAzZWlmaWR4ID0gcm91dGUtXHUwMDNldHVwbGVbZGlyXS5vdXQuaWZpbmRleDtcbiBcdFx0Zmxvd190dXBsZS1cdTAwM2Vkc3RfY2FjaGUgPSBkc3Q7XG4tXHRcdGZsb3dfdHVwbGUtXHUwMDNlZHN0X2Nvb2tpZSA9IGZsb3dfb2ZmbG9hZF9kc3RfY29va2llKGZsb3dfdHVwbGUpO1xuJiM0MztcdFx0Zmxvd190dXBsZS1cdTAwM2Vkc3RfY29va2llID0gZmxvd19vZmZsb2FkX2RzdF9jb29raWUoZmxvd190dXBsZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCBlbmNhcF9wcm90byk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0V0FSTl9PTl9PTkNFKDEpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbmluZGV4IDI5ZTkzYWMxZTJlNDAwLi40NDk4MThkY2VmM2M3ZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuQEAgLTE5MSwyNSAmIzQzOzE5MSwyNyBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X3R1cGxlX2VuY2FwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0c3dpdGNoIChpbm5lcl9wcm90bykge1xuLVx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4tXHRcdGlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgb2Zmc2V0KTtcbi1cdFx0aWYgKGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQKSB7XG4mIzQzO1x0aWYgKGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQIHx8IGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7XG4mIzQzO1x0XHRzd2l0Y2ggKGlubmVyX3Byb3RvKSB7XG4mIzQzO1x0XHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbiYjNDM7XHRcdFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzO1xuJiM0MztcdFx0XHRcdFx0ICAgICAgIG9mZnNldCk7XG4gXHRcdFx0dHVwbGUtXHUwMDNldHVuLmRzdF92NC5zX2FkZHIgPSBpcGgtXHUwMDNlZGFkZHI7XG4gXHRcdFx0dHVwbGUtXHUwMDNldHVuLnNyY192NC5zX2FkZHIgPSBpcGgtXHUwMDNlc2FkZHI7XG4tXHRcdFx0dHVwbGUtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQO1xuLVx0XHR9XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbi1cdFx0aXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBvZmZzZXQpO1xuLVx0XHRpZiAoY3R4LVx1MDAzZXR1bi5wcm90byA9PSBJUFBST1RPX0lQVjYpIHtcbiYjNDM7XHRcdFx0dHVwbGUtXHUwMDNldHVuLmwzX3Byb3RvID0gY3R4LVx1MDAzZXR1bi5wcm90bztcbiYjNDM7XHRcdFx0dHVwbGUtXHUwMDNldHVuLmVuY2FwX3Byb3RvID0gQUZfSU5FVDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuJiM0MztcdFx0XHRpcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7XG4mIzQzO1x0XHRcdFx0XHRcdCAgb2Zmc2V0KTtcbiBcdFx0XHR0dXBsZS1cdTAwM2V0dW4uZHN0X3Y2ID0gaXA2aC1cdTAwM2VkYWRkcjtcbiBcdFx0XHR0dXBsZS1cdTAwM2V0dW4uc3JjX3Y2ID0gaXA2aC1cdTAwM2VzYWRkcjtcbi1cdFx0XHR0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7XG4mIzQzO1x0XHRcdHR1cGxlLVx1MDAzZXR1bi5sM19wcm90byA9IGN0eC1cdTAwM2V0dW4ucHJvdG87XG4mIzQzO1x0XHRcdHR1cGxlLVx1MDAzZXR1bi5lbmNhcF9wcm90byA9IEFGX0lORVQ2O1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0YnJlYWs7XG4gXHR9XG4gfVxuIFxuQEAgLTMzNiw3ICYjNDM7MzM4LDcgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRpZiAoaXBoLVx1MDAzZXR0bCBcdTAwM2M9IDEpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUElQKSB7XG4mIzQzO1x0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lQSVAgfHwgaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSVBWNikge1xuIFx0XHRjdHgtXHUwMDNldHVuLnByb3RvID0gaXBoLVx1MDAzZXByb3RvY29sO1xuIFx0XHRjdHgtXHUwMDNldHVuLmhkcl9zaXplID0gc2l6ZTtcbiBcdFx0Y3R4LVx1MDAzZW9mZnNldCAmIzQzOz0gY3R4LVx1MDAzZXR1bi5oZHJfc2l6ZTtcbkBAIC0zNjEsNyAmIzQzOzM2Myw3IEBAIHN0YXRpYyBib29sIG5mX2Zsb3dfaXA2X3R1bm5lbF9wcm90byhzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0aWYgKGlwdjZfZXh0X2hkcihpcDZoLVx1MDAzZW5leHRoZHIpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAoaXA2aC1cdTAwM2VuZXh0aGRyID09IElQUFJPVE9fSVBWNikge1xuJiM0MztcdGlmIChpcDZoLVx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JUElQIHx8IGlwNmgtXHUwMDNlbmV4dGhkciA9PSBJUFBST1RPX0lQVjYpIHtcbiBcdFx0Y3R4LVx1MDAzZXR1bi5wcm90byA9IGlwNmgtXHUwMDNlbmV4dGhkcjtcbiBcdFx0Y3R4LVx1MDAzZXR1bi5oZHJfc2l6ZSA9IHNpemVvZigqaXA2aCk7XG4gXHRcdGN0eC1cdTAwM2VvZmZzZXQgJiM0Mzs9IGN0eC1cdTAwM2V0dW4uaGRyX3NpemU7XG5AQCAtMzgyLDYgJiM0MzszODQsMTAgQEAgc3RhdGljIHZvaWQgbmZfZmxvd19pcF90dW5uZWxfcG9wKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXG4gXHRza2JfcHVsbChza2IsIGN0eC1cdTAwM2V0dW4uaGRyX3NpemUpO1xuIFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4mIzQzO1x0aWYgKGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQKVxuJiM0MztcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuQEAgLTQ1OCwyMSAmIzQzOzQ2NCw2IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfZW5jYXBfcG9wKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdG5mX2Zsb3dfaXBfdHVubmVsX3BvcChjdHgsIHNrYik7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcbi1uZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4tXHRcdCAgICAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLXtcbi1cdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcbi1cbi1cdGlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woY3R4LCBza2IsIGh0b25zKEVUSF9QX0lQKSkpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0aWYgKG5mX2Zsb3dfdHVwbGVfaXAoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcdTAwMjZ0dXBsZSk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXG5AQCAtNDg3LDggJiM0Mzs0NzgsMTYgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbiBcbiBcdG10dSA9IGZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICYjNDM7IGN0eC1cdTAwM2VvZmZzZXQ7XG4tXHRpZiAoZmxvdy1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcbiYjNDM7XHRzd2l0Y2ggKGZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bi5lbmNhcF9wcm90bykge1xuJiM0MztcdGNhc2UgQUZfSU5FVDpcbiBcdFx0bXR1IC09IHNpemVvZigqaXBoKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUZfSU5FVDY6XG4mIzQzO1x0XHRtdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4gXG4gXHRpZiAodW5saWtlbHkobmZfZmxvd19leGNlZWRzX210dShza2IsIG10dSkpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC01ODgsMjMgJiM0Mzs1ODcsMzcgQEAgc3RhdGljIGludCBuZl9mbG93X3BwcG9lX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGlkLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBpcF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbi1cdFx0XHRcdCAgICBfX2JlMzIgKmlwX2RhZGRyKVxuJiM0MztzdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwX3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXG4mIzQzO1x0XHRcdFx0ICBfX2JlMzIgKmlwX2RhZGRyKVxuIHtcbi1cdHN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0c3RydWN0IHJ0YWJsZSAqcnQgPSBkc3RfcnRhYmxlKHR1cGxlLVx1MDAzZWRzdF9jYWNoZSk7XG4tXHR1OCB0b3MgPSBpcGgtXHUwMDNldG9zLCB0dGwgPSBpcGgtXHUwMDNldHRsO1xuLVx0X19iZTE2IGZyYWdfb2ZmID0gaXBoLVx1MDAzZWZyYWdfb2ZmO1xuLVx0dTMyIGhlYWRyb29tID0gc2l6ZW9mKCppcGgpO1xuJiM0MztcdF9fYmUxNiBmcmFnX29mZiA9IDA7XG4mIzQzO1x0c3RydWN0IGlwaGRyICppcGg7XG4mIzQzO1x0dTggdG9zID0gMCwgdHRsO1xuJiM0MztcdHUzMiBoZWFkcm9vbTtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKHR1cGxlLVx1MDAzZXR1bi5sM19wcm90byA9PSBJUFBST1RPX0lQVjYpIHtcbiYjNDM7XHRcdHN0cnVjdCBpcHY2aGRyICppcDZoO1xuJiM0MztcbiYjNDM7XHRcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbiYjNDM7XHRcdHRvcyA9IGlwdjZfZ2V0X2RzZmllbGQoaXA2aCk7XG4mIzQzO1x0XHR0dGwgPSBpcDZoLVx1MDAzZWhvcF9saW1pdDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuJiM0MztcdFx0ZnJhZ19vZmYgPSBpcGgtXHUwMDNlZnJhZ19vZmY7XG4mIzQzO1x0XHR0b3MgPSBpcGgtXHUwMDNldG9zO1xuJiM0MztcdFx0dHRsID0gaXBoLVx1MDAzZXR0bDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZXJyID0gaXB0dW5uZWxfaGFuZGxlX29mZmxvYWRzKHNrYiwgU0tCX0dTT19JUFhJUDQpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdHNrYl9zZXRfaW5uZXJfaXBwcm90byhza2IsIElQUFJPVE9fSVBJUCk7XG4tXHRoZWFkcm9vbSAmIzQzOz0gTExfUkVTRVJWRURfU1BBQ0UocnQtXHUwMDNlZHN0LmRldikgJiM0MzsgcnQtXHUwMDNlZHN0LmhlYWRlcl9sZW47XG4mIzQzO1x0c2tiX3NldF9pbm5lcl9pcHByb3RvKHNrYiwgdHVwbGUtXHUwMDNldHVuLmwzX3Byb3RvKTtcbiYjNDM7XHRoZWFkcm9vbSA9IHNpemVvZigqaXBoKSAmIzQzOyBMTF9SRVNFUlZFRF9TUEFDRShydC1cdTAwM2Vkc3QuZGV2KSAmIzQzO1xuJiM0MztcdFx0ICAgcnQtXHUwMDNlZHN0LmhlYWRlcl9sZW47XG4gXHRlcnIgPSBza2JfY293X2hlYWQoc2tiLCBoZWFkcm9vbSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTYxNSw2ICYjNDM7NjI4LDcgQEAgc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcGlwX3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0LyogUHVzaCBkb3duIGFuZCBpbnN0YWxsIHRoZSBJUCBoZWFkZXIuICovXG4gXHRza2JfcHVzaChza2IsIHNpemVvZigqaXBoKSk7XG4gXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiYjNDM7XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XG4gXG4gXHRpcGggPSBpcF9oZHIoc2tiKTtcbiBcdGlwaC1cdTAwM2V2ZXJzaW9uXHQ9IDQ7XG5AQCAtNjM0LDU2ICYjNDM7NjQ4LDU3IEBAIHN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBpcF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX3Y0X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbi1cdFx0XHRcdCAgX19iZTMyICppcF9kYWRkcilcbi17XG4tXHRpZiAodHVwbGUtXHUwMDNldHVuX251bSlcbi1cdFx0cmV0dXJuIG5mX2Zsb3dfdHVubmVsX2lwaXBfcHVzaChuZXQsIHNrYiwgdHVwbGUsIGlwX2RhZGRyKTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwNmlwNl9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxuLVx0XHRcdFx0ICAgICAgc3RydWN0IGluNl9hZGRyICoqaXA2X2RhZGRyKVxuJiM0MztzdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwNl9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgaW42X2FkZHIgKippcDZfZGFkZHIpXG4ge1xuLVx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbi1cdHN0cnVjdCBydGFibGUgKnJ0ID0gZHN0X3J0YWJsZSh0dXBsZS1cdTAwM2Vkc3RfY2FjaGUpO1xuLVx0X191OCBkc2ZpZWxkID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKTtcbiYjNDM7XHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSB0dXBsZS1cdTAwM2Vkc3RfY2FjaGU7XG4gXHRzdHJ1Y3QgZmxvd2k2IGZsNiA9IHtcbiBcdFx0LmRhZGRyID0gdHVwbGUtXHUwMDNldHVuLnNyY192NixcbiBcdFx0LnNhZGRyID0gdHVwbGUtXHUwMDNldHVuLmRzdF92NixcbiBcdFx0LmZsb3dpNl9wcm90byA9IElQUFJPVE9fSVBWNixcbiBcdH07XG4tXHR1OCBob3BfbGltaXQgPSBpcDZoLVx1MDAzZWhvcF9saW1pdDtcbiYjNDM7XHR1OCBob3BfbGltaXQsIGRzZmllbGQ7XG4mIzQzO1x0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4gXHRpbnQgZXJyLCBtdHU7XG4gXHR1MzIgaGVhZHJvb207XG4gXG4mIzQzO1x0aWYgKHR1cGxlLVx1MDAzZXR1bi5sM19wcm90byA9PSBJUFBST1RPX0lQSVApIHtcbiYjNDM7XHRcdHN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuJiM0MztcbiYjNDM7XHRcdGRzZmllbGQgPSBpcHY0X2dldF9kc2ZpZWxkKGlwaCk7XG4mIzQzO1x0XHRob3BfbGltaXQgPSBpcGgtXHUwMDNldHRsO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpcDZoID0gKHN0cnVjdCBpcHY2aGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4mIzQzO1x0XHRkc2ZpZWxkID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKTtcbiYjNDM7XHRcdGhvcF9saW1pdCA9IGlwNmgtXHUwMDNlaG9wX2xpbWl0O1xuJiM0MztcdH1cbiYjNDM7XG4gXHRlcnIgPSBpcHR1bm5lbF9oYW5kbGVfb2ZmbG9hZHMoc2tiLCBTS0JfR1NPX0lQWElQNik7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0c2tiX3NldF9pbm5lcl9pcHByb3RvKHNrYiwgSVBQUk9UT19JUFY2KTtcbi1cdGhlYWRyb29tID0gc2l6ZW9mKCppcDZoKSAmIzQzOyBMTF9SRVNFUlZFRF9TUEFDRShydC1cdTAwM2Vkc3QuZGV2KSAmIzQzO1xuLVx0XHQgICBydC1cdTAwM2Vkc3QuaGVhZGVyX2xlbjtcbiYjNDM7XHRza2Jfc2V0X2lubmVyX2lwcHJvdG8oc2tiLCB0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG8pO1xuJiM0MztcdGhlYWRyb29tID0gc2l6ZW9mKCppcDZoKSAmIzQzOyBMTF9SRVNFUlZFRF9TUEFDRShkc3QtXHUwMDNlZGV2KSAmIzQzO1xuJiM0MztcdFx0ICAgZHN0LVx1MDAzZWhlYWRlcl9sZW47XG4gXHRlcnIgPSBza2JfY293X2hlYWQoc2tiLCBoZWFkcm9vbSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0c2tiX3NjcnViX3BhY2tldChza2IsIHRydWUpO1xuLVx0bXR1ID0gZHN0X210dShcdTAwMjZydC1cdTAwM2Vkc3QpIC0gc2l6ZW9mKCppcDZoKTtcbiYjNDM7XHRtdHUgPSBkc3RfbXR1KGRzdCkgLSBzaXplb2YoKmlwNmgpO1xuIFx0bXR1ID0gbWF4KG10dSwgSVBWNl9NSU5fTVRVKTtcbiBcdHNrYl9kc3RfdXBkYXRlX3BtdHVfbm9fY29uZmlybShza2IsIG10dSk7XG4gXG4gXHRza2JfcHVzaChza2IsIHNpemVvZigqaXA2aCkpO1xuIFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4mIzQzO1x0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XG4gXG4gXHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcbiBcdGlwNl9mbG93X2hkcihpcDZoLCBkc2ZpZWxkLFxuIFx0XHQgICAgIGlwNl9tYWtlX2Zsb3dsYWJlbChuZXQsIHNrYiwgZmw2LmZsb3dsYWJlbCwgdHJ1ZSwgXHUwMDI2Zmw2KSk7XG4gXHRpcDZoLVx1MDAzZWhvcF9saW1pdCA9IGhvcF9saW1pdDtcbi1cdGlwNmgtXHUwMDNlbmV4dGhkciA9IElQUFJPVE9fSVBWNjtcbiYjNDM7XHRpcDZoLVx1MDAzZW5leHRoZHIgPSB0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG87XG4gXHRpcDZoLVx1MDAzZWRhZGRyID0gdHVwbGUtXHUwMDNldHVuLnNyY192NjtcbiBcdGlwNmgtXHUwMDNlc2FkZHIgPSB0dXBsZS1cdTAwM2V0dW4uZHN0X3Y2O1xuIFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2VwYXlsb2FkX2xlbiA9IGh0b25zKHNrYi1cdTAwM2VsZW4gLSBzaXplb2YoKmlwNmgpKTtcbkBAIC02OTQsMTQgJiM0Mzs3MDksMTggQEAgc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcDZpcDZfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF92Nl9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXG4tXHRcdFx0XHQgIHN0cnVjdCBpbjZfYWRkciAqKmlwNl9kYWRkcilcbiYjNDM7c3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxuJiM0MztcdFx0XHQgICAgICAgX19iZTMyICppcF9kYWRkciwgc3RydWN0IGluNl9hZGRyICoqaXA2X2RhZGRyKVxuIHtcbi1cdGlmICh0dXBsZS1cdTAwM2V0dW5fbnVtKVxuLVx0XHRyZXR1cm4gbmZfZmxvd190dW5uZWxfaXA2aXA2X3B1c2gobmV0LCBza2IsIHR1cGxlLCBpcDZfZGFkZHIpO1xuLVxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0c3dpdGNoICh0dXBsZS1cdTAwM2V0dW4uZW5jYXBfcHJvdG8pIHtcbiYjNDM7XHRjYXNlIEFGX0lORVQ6XG4mIzQzO1x0XHRyZXR1cm4gbmZfZmxvd190dW5uZWxfaXBfcHVzaChuZXQsIHNrYiwgdHVwbGUsIGlwX2RhZGRyKTtcbiYjNDM7XHRjYXNlIEFGX0lORVQ2OlxuJiM0MztcdFx0cmV0dXJuIG5mX2Zsb3dfdHVubmVsX2lwNl9wdXNoKG5ldCwgc2tiLCB0dXBsZSwgaXA2X2RhZGRyKTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IG5mX2Zsb3dfZW5jYXBfcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTgwMSw4NiAmIzQzOzgyMCw2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfZmxvd19xdWV1ZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBORl9TVE9MRU47XG4gfVxuIFxuLXVuc2lnbmVkIGludFxuLW5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuLXtcbi1cdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcbi1cdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2O1xuLVx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqb3RoZXJfdHVwbGU7XG4tXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xuLVx0c3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0ge1xuLVx0XHQuaW5cdD0gc3RhdGUtXHUwMDNlaW4sXG4tXHR9O1xuLVx0c3RydWN0IG5mX2Zsb3dfeG1pdCB4bWl0ID0ge307XG4tXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xuLVx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2g7XG4tXHRzdHJ1Y3QgcnRhYmxlICpydDtcbi1cdF9fYmUzMiBpcF9kYWRkcjtcbi1cdGludCByZXQ7XG4tXG4tXHR0dXBsZWhhc2ggPSBuZl9mbG93X29mZmxvYWRfbG9va3VwKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgc2tiKTtcbi1cdGlmICghdHVwbGVoYXNoKVxuLVx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuLVxuLVx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gTkZfRFJPUDtcbi1cdGVsc2UgaWYgKHJldCA9PSAwKVxuLVx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuLVxuLVx0aWYgKHVubGlrZWx5KHR1cGxlaGFzaC1cdTAwM2V0dXBsZS54bWl0X3R5cGUgPT0gRkxPV19PRkZMT0FEX1hNSVRfWEZSTSkpIHtcbi1cdFx0cnQgPSBkc3RfcnRhYmxlKHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kc3RfY2FjaGUpO1xuLVx0XHRtZW1zZXQoc2tiLVx1MDAzZWNiLCAwLCBzaXplb2Yoc3RydWN0IGluZXRfc2tiX3Bhcm0pKTtcbi1cdFx0SVBDQihza2IpLVx1MDAzZWlpZiA9IHNrYi1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleDtcbi1cdFx0SVBDQihza2IpLVx1MDAzZWZsYWdzID0gSVBTS0JfRk9SV0FSREVEO1xuLVx0XHRyZXR1cm4gbmZfZmxvd194bWl0X3hmcm0oc2tiLCBzdGF0ZSwgXHUwMDI2cnQtXHUwMDNlZHN0KTtcbi1cdH1cbi1cbi1cdGRpciA9IHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kaXI7XG4tXHRmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pO1xuLVx0b3RoZXJfdHVwbGUgPSBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZTtcbi1cdGlwX2RhZGRyID0gb3RoZXJfdHVwbGUtXHUwMDNlc3JjX3Y0LnNfYWRkcjtcbi1cbi1cdGlmIChuZl9mbG93X3R1bm5lbF92NF9wdXNoKHN0YXRlLVx1MDAzZW5ldCwgc2tiLCBvdGhlcl90dXBsZSwgXHUwMDI2aXBfZGFkZHIpIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gTkZfRFJPUDtcbi1cbi1cdHN3aXRjaCAodHVwbGVoYXNoLVx1MDAzZXR1cGxlLnhtaXRfdHlwZSkge1xuLVx0Y2FzZSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSDpcbi1cdFx0cnQgPSBkc3RfcnRhYmxlKHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kc3RfY2FjaGUpO1xuLVx0XHR4bWl0Lm91dGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHN0YXRlLVx1MDAzZW5ldCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmlmaWR4KTtcbi1cdFx0aWYgKCF4bWl0Lm91dGRldikge1xuLVx0XHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbi1cdFx0XHRyZXR1cm4gTkZfRFJPUDtcbi1cdFx0fVxuLVx0XHRuZWlnaCA9IGlwX25laWdoX2d3NChydC1cdTAwM2Vkc3QuZGV2LCBydF9uZXh0aG9wKHJ0LCBpcF9kYWRkcikpO1xuLVx0XHRpZiAoSVNfRVJSKG5laWdoKSkge1xuLVx0XHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbi1cdFx0XHRyZXR1cm4gTkZfRFJPUDtcbi1cdFx0fVxuLVx0XHR4bWl0LmRlc3QgPSBuZWlnaC1cdTAwM2VoYTtcbi1cdFx0c2tiX2RzdF9zZXRfbm9yZWYoc2tiLCBcdTAwMjZydC1cdTAwM2Vkc3QpO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUOlxuLVx0XHR4bWl0Lm91dGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHN0YXRlLVx1MDAzZW5ldCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLm91dC5pZmlkeCk7XG4tXHRcdGlmICgheG1pdC5vdXRkZXYpIHtcbi1cdFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4tXHRcdFx0cmV0dXJuIE5GX0RST1A7XG4tXHRcdH1cbi1cdFx0eG1pdC5kZXN0ID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLm91dC5oX2Rlc3Q7XG4tXHRcdHhtaXQuc291cmNlID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLm91dC5oX3NvdXJjZTtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRXQVJOX09OX09OQ0UoMSk7XG4tXHRcdHJldHVybiBORl9EUk9QO1xuLVx0fVxuLVx0eG1pdC50dXBsZSA9IG90aGVyX3R1cGxlO1xuLVx0eG1pdC5uZWVkc19nc29fc2VnbWVudCA9IHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5uZWVkc19nc29fc2VnbWVudDtcbi1cbi1cdHJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQoc3RhdGUtXHUwMDNlbmV0LCBza2IsIFx1MDAyNnhtaXQpO1xuLX1cbi1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXBfaG9vayk7XG4tXG4gc3RhdGljIHZvaWQgbmZfZmxvd19uYXRfaXB2Nl90Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHRob2ZmLFxuIFx0XHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqYWRkcixcbiBcdFx0XHRcdCBzdHJ1Y3QgaW42X2FkZHIgKm5ld19hZGRyLFxuQEAgLTEwNjUsOCAmIzQzOzEwMDQsMTYgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pO1xuIFxuIFx0bXR1ID0gZmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgJiM0MzsgY3R4LVx1MDAzZW9mZnNldDtcbi1cdGlmIChmbG93LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS50dW5fbnVtKVxuJiM0MztcdHN3aXRjaCAoZmxvdy1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuLmVuY2FwX3Byb3RvKSB7XG4mIzQzO1x0Y2FzZSBBRl9JTkVUOlxuJiM0MztcdFx0bXR1IC09IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBRl9JTkVUNjpcbiBcdFx0bXR1IC09IHNpemVvZigqaXA2aCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKHVubGlrZWx5KG5mX2Zsb3dfZXhjZWVkc19tdHUoc2tiLCBtdHUpKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTEwMCw2ICYjNDM7MTA0NywyNSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdHJldHVybiAxO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxuJiM0MztuZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChjdHgsIHNrYiwgaHRvbnMoRVRIX1BfSVApKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZXR1bi5wcm90byA9PSBJUFBST1RPX0lQVjYpIHtcbiYjNDM7XHRcdGlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fSBlbHNlIGlmIChuZl9mbG93X3R1cGxlX2lwKGN0eCwgc2tiLCBcdTAwMjZ0dXBsZSkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXHUwMDI2dHVwbGUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcbiBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdFx0XHQgICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbkBAIC0xMTEwLDEyICYjNDM7MTA3NiwxMTggQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRpZiAoIW5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKGN0eCwgc2tiLCBodG9ucyhFVEhfUF9JUFY2KSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWYgKG5mX2Zsb3dfdHVwbGVfaXB2NihjdHgsIHNrYiwgXHUwMDI2dHVwbGUpIFx1MDAzYyAwKVxuJiM0MztcdGlmIChjdHgtXHUwMDNldHVuLnByb3RvID09IElQUFJPVE9fSVBJUCkge1xuJiM0MztcdFx0aWYgKG5mX2Zsb3dfdHVwbGVfaXAoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fSBlbHNlIGlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMCkge1xuIFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcdTAwMjZ0dXBsZSk7XG4gfVxuIFxuJiM0Mzt1bnNpZ25lZCBpbnRcbiYjNDM7bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xuJiM0MztcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2O1xuJiM0MztcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlO1xuJiM0MztcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XG4mIzQzO1x0c3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0ge1xuJiM0MztcdFx0LmluXHQ9IHN0YXRlLVx1MDAzZWluLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IG5mX2Zsb3dfeG1pdCB4bWl0ID0ge307XG4mIzQzO1x0c3RydWN0IGluNl9hZGRyICppcDZfZGFkZHI7XG4mIzQzO1x0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcbiYjNDM7XHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcbiYjNDM7XHRzdHJ1Y3QgcnRhYmxlICpydDtcbiYjNDM7XHRfX2JlMzIgaXBfZGFkZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2xvb2t1cChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XG4mIzQzO1x0aWYgKCF0dXBsZWhhc2gpXG4mIzQzO1x0XHRyZXR1cm4gTkZfQUNDRVBUO1xuJiM0MztcbiYjNDM7XHRpZiAoY3R4LnR1bi5wcm90byA9PSBJUFBST1RPX0lQVjYpXG4mIzQzO1x0XHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLFxuJiM0MztcdFx0XHRcdFx0XHQgICBza2IpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gTkZfRFJPUDtcbiYjNDM7XHRlbHNlIGlmIChyZXQgPT0gMClcbiYjNDM7XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSh0dXBsZWhhc2gtXHUwMDNldHVwbGUueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX1hGUk0pKSB7XG4mIzQzO1x0XHRydCA9IGRzdF9ydGFibGUodHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XG4mIzQzO1x0XHRtZW1zZXQoc2tiLVx1MDAzZWNiLCAwLCBzaXplb2Yoc3RydWN0IGluZXRfc2tiX3Bhcm0pKTtcbiYjNDM7XHRcdElQQ0Ioc2tiKS1cdTAwM2VpaWYgPSBza2ItXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0XHRJUENCKHNrYiktXHUwMDNlZmxhZ3MgPSBJUFNLQl9GT1JXQVJERUQ7XG4mIzQzO1x0XHRyZXR1cm4gbmZfZmxvd194bWl0X3hmcm0oc2tiLCBzdGF0ZSwgXHUwMDI2cnQtXHUwMDNlZHN0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRpciA9IHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kaXI7XG4mIzQzO1x0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbiYjNDM7XHRvdGhlcl90dXBsZSA9IFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlO1xuJiM0MztcdGlwX2RhZGRyID0gb3RoZXJfdHVwbGUtXHUwMDNlc3JjX3Y0LnNfYWRkcjtcbiYjNDM7XHRpcDZfZGFkZHIgPSBcdTAwMjZvdGhlcl90dXBsZS1cdTAwM2VzcmNfdjY7XG4mIzQzO1xuJiM0MztcdGlmIChuZl9mbG93X3R1bm5lbF9wdXNoKHN0YXRlLVx1MDAzZW5ldCwgc2tiLCBvdGhlcl90dXBsZSwgXHUwMDI2aXBfZGFkZHIsXG4mIzQzO1x0XHRcdFx0XHUwMDI2aXA2X2RhZGRyKSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBORl9EUk9QO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHR1cGxlaGFzaC1cdTAwM2V0dXBsZS54bWl0X3R5cGUpIHtcbiYjNDM7XHRjYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIOiB7XG4mIzQzO1x0XHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XG4mIzQzO1xuJiM0MztcdFx0eG1pdC5vdXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShzdGF0ZS1cdTAwM2VuZXQsIHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5pZmlkeCk7XG4mIzQzO1x0XHRpZiAoIXhtaXQub3V0ZGV2KSB7XG4mIzQzO1x0XHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbiYjNDM7XHRcdFx0cmV0dXJuIE5GX0RST1A7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAob3RoZXJfdHVwbGUtXHUwMDNldHVuLmVuY2FwX3Byb3RvID09IEFGX0lORVQ2IHx8XG4mIzQzO1x0XHQgICAgY3R4LnR1bi5wcm90byA9PSBJUFBST1RPX0lQVjYpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHJ0Nl9pbmZvICpydDY7XG4mIzQzO1xuJiM0MztcdFx0XHRydDYgPSBkc3RfcnQ2X2luZm8odHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XG4mIzQzO1x0XHRcdG5laWdoID0gaXBfbmVpZ2hfZ3c2KHJ0Ni1cdTAwM2Vkc3QuZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBydDZfbmV4dGhvcChydDYsIGlwNl9kYWRkcikpO1xuJiM0MztcdFx0XHRkc3QgPSBcdTAwMjZydDYtXHUwMDNlZHN0O1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cnQgPSBkc3RfcnRhYmxlKHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kc3RfY2FjaGUpO1xuJiM0MztcdFx0XHRuZWlnaCA9IGlwX25laWdoX2d3NChydC1cdTAwM2Vkc3QuZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBydF9uZXh0aG9wKHJ0LCBpcF9kYWRkcikpO1xuJiM0MztcdFx0XHRkc3QgPSBcdTAwMjZydC1cdTAwM2Vkc3Q7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoSVNfRVJSKG5laWdoKSkge1xuJiM0MztcdFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4mIzQzO1x0XHRcdHJldHVybiBORl9EUk9QO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0eG1pdC5kZXN0ID0gbmVpZ2gtXHUwMDNlaGE7XG4mIzQzO1x0XHRza2JfZHN0X3NldF9ub3JlZihza2IsIGRzdCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0Y2FzZSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q6XG4mIzQzO1x0XHR4bWl0Lm91dGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHN0YXRlLVx1MDAzZW5ldCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLm91dC5pZmlkeCk7XG4mIzQzO1x0XHRpZiAoIXhtaXQub3V0ZGV2KSB7XG4mIzQzO1x0XHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbiYjNDM7XHRcdFx0cmV0dXJuIE5GX0RST1A7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHR4bWl0LmRlc3QgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUub3V0LmhfZGVzdDtcbiYjNDM7XHRcdHhtaXQuc291cmNlID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLm91dC5oX3NvdXJjZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRXQVJOX09OX09OQ0UoMSk7XG4mIzQzO1x0XHRyZXR1cm4gTkZfRFJPUDtcbiYjNDM7XHR9XG4mIzQzO1x0eG1pdC50dXBsZSA9IG90aGVyX3R1cGxlO1xuJiM0MztcdHhtaXQubmVlZHNfZ3NvX3NlZ21lbnQgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUubmVlZHNfZ3NvX3NlZ21lbnQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQoc3RhdGUtXHUwMDNlbmV0LCBza2IsIFx1MDAyNnhtaXQpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKTtcbiYjNDM7XG4gdW5zaWduZWQgaW50XG4gbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuQEAgLTExMzIsMTMgJiM0MzsxMjA0LDE4IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcbiBcdHN0cnVjdCBydDZfaW5mbyAqcnQ7XG4mIzQzO1x0X19iZTMyIGlwX2RhZGRyO1xuIFx0aW50IHJldDtcbiBcbiBcdHR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XG4gXHRpZiAodHVwbGVoYXNoID09IE5VTEwpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4tXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xuJiM0MztcdGlmIChjdHgudHVuLnByb3RvID09IElQUFJPVE9fSVBJUClcbiYjNDM7XHRcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHNrYik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gTkZfRFJPUDtcbiBcdGVsc2UgaWYgKHJldCA9PSAwKVxuQEAgLTExNTUsMjggJiM0MzsxMjMyLDQ0IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGRpciA9IHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kaXI7XG4gXHRmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pO1xuIFx0b3RoZXJfdHVwbGUgPSBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZTtcbiYjNDM7XHRpcF9kYWRkciA9IG90aGVyX3R1cGxlLVx1MDAzZXNyY192NC5zX2FkZHI7XG4gXHRpcDZfZGFkZHIgPSBcdTAwMjZvdGhlcl90dXBsZS1cdTAwM2VzcmNfdjY7XG4gXG4tXHRpZiAobmZfZmxvd190dW5uZWxfdjZfcHVzaChzdGF0ZS1cdTAwM2VuZXQsIHNrYiwgb3RoZXJfdHVwbGUsXG4tXHRcdFx0XHQgICBcdTAwMjZpcDZfZGFkZHIpIFx1MDAzYyAwKVxuJiM0MztcdGlmIChuZl9mbG93X3R1bm5lbF9wdXNoKHN0YXRlLVx1MDAzZW5ldCwgc2tiLCBvdGhlcl90dXBsZSwgXHUwMDI2aXBfZGFkZHIsXG4mIzQzO1x0XHRcdFx0XHUwMDI2aXA2X2RhZGRyKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIE5GX0RST1A7XG4gXG4gXHRzd2l0Y2ggKHR1cGxlaGFzaC1cdTAwM2V0dXBsZS54bWl0X3R5cGUpIHtcbi1cdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfTkVJR0g6XG4tXHRcdHJ0ID0gZHN0X3J0Nl9pbmZvKHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kc3RfY2FjaGUpO1xuJiM0MztcdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfTkVJR0g6IHtcbiYjNDM7XHRcdHN0cnVjdCBkc3RfZW50cnkgKmRzdDtcbiYjNDM7XG4gXHRcdHhtaXQub3V0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc3RhdGUtXHUwMDNlbmV0LCB0dXBsZWhhc2gtXHUwMDNldHVwbGUuaWZpZHgpO1xuIFx0XHRpZiAoIXhtaXQub3V0ZGV2KSB7XG4gXHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuIFx0XHRcdHJldHVybiBORl9EUk9QO1xuIFx0XHR9XG4tXHRcdG5laWdoID0gaXBfbmVpZ2hfZ3c2KHJ0LVx1MDAzZWRzdC5kZXYsIHJ0Nl9uZXh0aG9wKHJ0LCBpcDZfZGFkZHIpKTtcbiYjNDM7XHRcdGlmIChvdGhlcl90dXBsZS1cdTAwM2V0dW4uZW5jYXBfcHJvdG8gPT0gQUZfSU5FVCB8fFxuJiM0MztcdFx0ICAgIGN0eC50dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBydGFibGUgKnJ0NDtcbiYjNDM7XG4mIzQzO1x0XHRcdHJ0NCA9IGRzdF9ydGFibGUodHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XG4mIzQzO1x0XHRcdG5laWdoID0gaXBfbmVpZ2hfZ3c0KHJ0NC1cdTAwM2Vkc3QuZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBydF9uZXh0aG9wKHJ0NCwgaXBfZGFkZHIpKTtcbiYjNDM7XHRcdFx0ZHN0ID0gXHUwMDI2cnQ0LVx1MDAzZWRzdDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHJ0ID0gZHN0X3J0Nl9pbmZvKHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kc3RfY2FjaGUpO1xuJiM0MztcdFx0XHRuZWlnaCA9IGlwX25laWdoX2d3NihydC1cdTAwM2Vkc3QuZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBydDZfbmV4dGhvcChydCwgaXA2X2RhZGRyKSk7XG4mIzQzO1x0XHRcdGRzdCA9IFx1MDAyNnJ0LVx1MDAzZWRzdDtcbiYjNDM7XHRcdH1cbiBcdFx0aWYgKElTX0VSUihuZWlnaCkpIHtcbiBcdFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4gXHRcdFx0cmV0dXJuIE5GX0RST1A7XG4gXHRcdH1cbiBcdFx0eG1pdC5kZXN0ID0gbmVpZ2gtXHUwMDNlaGE7XG4tXHRcdHNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgXHUwMDI2cnQtXHUwMDNlZHN0KTtcbiYjNDM7XHRcdHNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgZHN0KTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0fVxuIFx0Y2FzZSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q6XG4gXHRcdHhtaXQub3V0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc3RhdGUtXHUwMDNlbmV0LCB0dXBsZWhhc2gtXHUwMDNldHVwbGUub3V0LmlmaWR4KTtcbiBcdFx0aWYgKCF4bWl0Lm91dGRldikge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXG5pbmRleCA5OGMwM2I0ODdmNTIxMS4uNWU4NGI3ZjE4YTI2N2YgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXG5AQCAtNDUsNyAmIzQzOzQ1LDggQEAgc3RhdGljIGJvb2wgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLVx0XHRcdFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCB1OCAqaGEsXG4mIzQzO1x0XHRcdFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuJiM0MztcdFx0XHRcdCAgICAgdTggKmhhLCBfX2JlMTYgZXRoZXJfdHlwZSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4ge1xuIFx0Y29uc3Qgdm9pZCAqZGFkZHIgPSBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzO1xuQEAgLTcyLDcgJiM0Mzs3Myw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4gXHRcdHJldHVybiAtMTtcbiBcbiBvdXQ6XG4tXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIHN0YWNrKTtcbiYjNDM7XHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIGV0aGVyX3R5cGUsIHN0YWNrKTtcbiB9XG4gXG4gc3RydWN0IG5mdF9mb3J3YXJkX2luZm8ge1xuQEAgLTEyOCw2ICYjNDM7MTI5LDcgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHRcdGluZm8tXHUwMDNldHVuLnNyY192NiA9IHBhdGgtXHUwMDNldHVuLnNyY192NjtcbiBcdFx0XHRcdGluZm8tXHUwMDNldHVuLmRzdF92NiA9IHBhdGgtXHUwMDNldHVuLmRzdF92NjtcbiBcdFx0XHRcdGluZm8tXHUwMDNldHVuLmwzX3Byb3RvID0gcGF0aC1cdTAwM2V0dW4ubDNfcHJvdG87XG4mIzQzO1x0XHRcdFx0aW5mby1cdTAwM2V0dW4uZW5jYXBfcHJvdG8gPSBwYXRoLVx1MDAzZXR1bi5lbmNhcF9wcm90bztcbiBcdFx0XHRcdGluZm8tXHUwMDNlbnVtX3R1bnMmIzQzOyYjNDM7O1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRpZiAoaW5mby1cdTAwM2VudW1fZW5jYXBzIFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpXG5AQCAtMjE0LDEyICYjNDM7MjE2LDEzIEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3QgPSBOVUxMO1xuIFx0c3RydWN0IGZsb3dpIGZsID0ge307XG4gXG4tXHRzd2l0Y2ggKG5mdF9wZihwa3QpKSB7XG4mIzQzO1x0c3dpdGNoICh0dW4tXHUwMDNlZW5jYXBfcHJvdG8pIHtcbiBcdGNhc2UgTkZQUk9UT19JUFY0OlxuIFx0XHRmbC51LmlwNC5kYWRkciA9IHR1bi1cdTAwM2Vkc3RfdjQuc19hZGRyO1xuIFx0XHRmbC51LmlwNC5zYWRkciA9IHR1bi1cdTAwM2VzcmNfdjQuc19hZGRyO1xuIFx0XHRmbC51LmlwNC5mbG93aTRfaWlmID0gbmZ0X2luKHBrdCktXHUwMDNlaWZpbmRleDtcbi1cdFx0ZmwudS5pcDQuZmxvd2k0X2RzY3AgPSBpcDRoX2RzY3AoaXBfaGRyKHBrdC1cdTAwM2Vza2IpKTtcbiYjNDM7XHRcdGlmIChuZnRfcGYocGt0KSA9PSBORlBST1RPX0lQVjQpXG4mIzQzO1x0XHRcdGZsLnUuaXA0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwX2hkcihwa3QtXHUwMDNlc2tiKSk7XG4gXHRcdGZsLnUuaXA0LmZsb3dpNF9tYXJrID0gcGt0LVx1MDAzZXNrYi1cdTAwM2VtYXJrO1xuIFx0XHRmbC51LmlwNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0FOWVNSQztcbiBcdFx0YnJlYWs7XG5AQCAtMjI3LDEzICYjNDM7MjMwLDE0IEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdFx0ZmwudS5pcDYuZGFkZHIgPSB0dW4tXHUwMDNlZHN0X3Y2O1xuIFx0XHRmbC51LmlwNi5zYWRkciA9IHR1bi1cdTAwM2VzcmNfdjY7XG4gXHRcdGZsLnUuaXA2LmZsb3dpNl9paWYgPSBuZnRfaW4ocGt0KS1cdTAwM2VpZmluZGV4O1xuLVx0XHRmbC51LmlwNi5mbG93bGFiZWwgPSBpcDZfZmxvd2luZm8oaXB2Nl9oZHIocGt0LVx1MDAzZXNrYikpO1xuJiM0MztcdFx0aWYgKG5mdF9wZihwa3QpID09IE5GUFJPVE9fSVBWNilcbiYjNDM7XHRcdFx0ZmwudS5pcDYuZmxvd2xhYmVsID0gaXA2X2Zsb3dpbmZvKGlwdjZfaGRyKHBrdC1cdTAwM2Vza2IpKTtcbiBcdFx0ZmwudS5pcDYuZmxvd2k2X21hcmsgPSBwa3QtXHUwMDNlc2tiLVx1MDAzZW1hcms7XG4gXHRcdGZsLnUuaXA2LmZsb3dpNl9mbGFncyA9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdG5mX3JvdXRlKG5mdF9uZXQocGt0KSwgXHUwMDI2dHVuX2RzdCwgXHUwMDI2ZmwsIGZhbHNlLCBuZnRfcGYocGt0KSk7XG4mIzQzO1x0bmZfcm91dGUobmZ0X25ldChwa3QpLCBcdTAwMjZ0dW5fZHN0LCBcdTAwMjZmbCwgZmFsc2UsIHR1bi1cdTAwM2VlbmNhcF9wcm90byk7XG4gXHRpZiAoIXR1bl9kc3QpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuQEAgLTI1NSw3ICYjNDM7MjU5LDggQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdHVuc2lnbmVkIGNoYXIgaGFbRVRIX0FMRU5dO1xuIFx0aW50IGk7XG4gXG4tXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgXHUwMDI2c3RhY2spIFx1MDAzYyAwIHx8XG4mIzQzO1x0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocm91dGUsIGRzdCwgY3QsIGRpciwgaGEsIHBrdC1cdTAwM2VldGhlcnR5cGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgXHUwMDI2c3RhY2spIFx1MDAzYyAwIHx8XG4gXHQgICAgbmZ0X2Rldl9wYXRoX2luZm8oXHUwMDI2c3RhY2ssIFx1MDAyNmluZm8sIGhhLCBcdTAwMjZmdC1cdTAwM2VkYXRhKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG5AQCAtMjc2LDYgJiM0MzsyODEsNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uc3JjX3Y2ID0gaW5mby50dW4uZHN0X3Y2O1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uZHN0X3Y2ID0gaW5mby50dW4uc3JjX3Y2O1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4ubDNfcHJvdG8gPSBpbmZvLnR1bi5sM19wcm90bztcbiYjNDM7XHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5lbmNhcF9wcm90byA9IGluZm8udHVuLmVuY2FwX3Byb3RvO1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5udW1fdHVucyA9IGluZm8ubnVtX3R1bnM7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2NvbmZpZ1xuaW5kZXggYzNjMTIxYjZmMzAwYTkuLmEyMTJiOWVkYmNkOTdlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29uZmlnXG5AQCAtMzUsNiAmIzQzOzM1LDcgQEAgQ09ORklHX0lQX1NDVFA9bVxuIENPTkZJR19JUFY2PXlcbiBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eVxuIENPTkZJR19JUFY2X1RVTk5FTD1tXG4mIzQzO0NPTkZJR19JUFY2X1NJVD1tXG4gQ09ORklHX0lQX1ZTPW1cbiBDT05GSUdfSVBfVlNfUFJPVE9fVENQPXlcbiBDT05GSUdfSVBfVlNfUlI9bVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuaW5kZXggMDhhZDA3NTAwZThhNzEuLjQ2YmQwODAxMDhiZTM2IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbkBAIC01NzksOSAmIzQzOzU3OSw4IEBAIGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19uYXQgXCYjMzQ7JG5zMVwmIzM0OyBcJiMzNDskbnMyXCYjMzQ7IDEgXCYjMzQ7XCYjMzQ7OyB0aGVuXG4gXHRpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCBsaXN0IHJ1bGVzZXRcbiBmaVxuIFxuLSMgSVBJUCB0dW5uZWwgdGVzdDpcbi0jIEFkZCBJUElQIHR1bm5lbCBpbnRlcmZhY2VzIGFuZCBjaGVjayBmbG93dGFibGUgYWNjZWxlcmF0aW9uLlxuLXRlc3RfaXBpcCgpIHtcbiYjNDM7IyBJUCB0dW5uZWwgdGVzdHM6XG4mIzQzO3Rlc3RfaXBfdG5scygpIHtcbiBpZiAhIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgbGluayBhZGQgbmFtZSB0dW4wIHR5cGUgaXBpcCBcXFxuICAgICAgbG9jYWwgMTkyLjE2OC4xMC4xIHJlbW90ZSAxOTIuMTY4LjEwLjIgXHUwMDNlL2Rldi9udWxsO3RoZW5cbiBcdGVjaG8gXCYjMzQ7U0tJUDogY291bGQgbm90IGFkZCBpcGlwIHR1bm5lbFwmIzM0O1xuQEAgLTU5NCw3ICYjNDM7NTkzLDEzIEBAIGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgc3lzY3RsIG5ldC5pcHY0LmNvbmYudHVuMC5mb3J3YXJkaW5nPTEgXHUwMDNlIC9kZXYvbnVsbFxuIFxuIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgbGluayBhZGQgbmFtZSB0dW42IHR5cGUgaXA2dG5sIGxvY2FsIGZlZTE6Mjo6MSByZW1vdGUgZmVlMToyOjoyIGVuY2FwbGltaXQgbm9uZVxuIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgbGluayBzZXQgdHVuNiB1cFxuJiM0MztpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGFkZHIgYWRkIDE5Mi4xNjguMjEwLjEvMjQgZGV2IHR1bjZcbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGFkZHIgYWRkIGZlZTE6Mzo6MS82NCBkZXYgdHVuNiBub2RhZFxuJiM0MztpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjYuZm9yd2FyZGluZz0xIFx1MDAzZSAvZGV2L251bGxcbiYjNDM7XG4mIzQzO2lwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgbGluayBhZGQgbmFtZSBzaXQxIHR5cGUgc2l0IGxvY2FsIDE5Mi4xNjguMTAuMSByZW1vdGUgMTkyLjE2OC4xMC4yIHR0bCAyNTVcbiYjNDM7aXAgLW5ldCBcJiMzNDskbnNyMVwmIzM0OyBsaW5rIHNldCBzaXQxIHVwXG4mIzQzO2lwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgYWRkciBhZGQgZmUwMTozOjoxLzY0IGRldiBzaXQxIG5vZGFkXG4gXG4gaXAgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyBsaW5rIGFkZCBuYW1lIHR1bjAgdHlwZSBpcGlwIGxvY2FsIDE5Mi4xNjguMTAuMiByZW1vdGUgMTkyLjE2OC4xMC4xXG4gaXAgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyBsaW5rIHNldCB0dW4wIHVwXG5AQCAtNjAzLDcgJiM0Mzs2MDgsMTMgQEAgaXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMlwmIzM0OyBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW4wLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4gXG4gaXAgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyBsaW5rIGFkZCBuYW1lIHR1bjYgdHlwZSBpcDZ0bmwgbG9jYWwgZmVlMToyOjoyIHJlbW90ZSBmZWUxOjI6OjEgZW5jYXBsaW1pdCBub25lIHx8IHJldD0xXG4gaXAgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyBsaW5rIHNldCB0dW42IHVwXG4mIzQzO2lwIC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgYWRkciBhZGQgMTkyLjE2OC4yMTAuMi8yNCBkZXYgdHVuNlxuIGlwIC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgYWRkciBhZGQgZmVlMTozOjoyLzY0IGRldiB0dW42IG5vZGFkXG4mIzQzO2lwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjJcJiMzNDsgc3lzY3RsIG5ldC5pcHY0LmNvbmYudHVuNi5mb3J3YXJkaW5nPTEgXHUwMDNlIC9kZXYvbnVsbFxuJiM0MztcbiYjNDM7aXAgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyBsaW5rIGFkZCBuYW1lIHNpdDEgdHlwZSBzaXQgbG9jYWwgMTkyLjE2OC4xMC4yIHJlbW90ZSAxOTIuMTY4LjEwLjEgdHRsIDI1NVxuJiM0MztpcCAtbmV0IFwmIzM0OyRuc3IyXCYjMzQ7IGxpbmsgc2V0IHNpdDEgdXBcbiYjNDM7aXAgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyBhZGRyIGFkZCBmZTAxOjM6OjIvNjQgZGV2IHNpdDEgbm9kYWRcbiBcbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjEwMC4yXG4gaXAgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyByb3V0ZSBjaGFuZ2UgZGVmYXVsdCB2aWEgMTkyLjE2OC4xMDAuMVxuQEAgLTYxOSw2ICYjNDM7NjMwLDcgQEAgaXAgLTYgLW5ldCBcJiMzNDskbnMyXCYjMzQ7IHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBkZWFkOjI6OjFcbiBcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICYjMzk7bWV0YSBvaWYgdHVuMCBhY2NlcHQmIzM5O1xuIGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiB0dW42IGFjY2VwdCYjMzk7XG4mIzQzO2lwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiBzaXQxIGFjY2VwdCYjMzk7XG4gaXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMVwmIzM0OyBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcXFxuIFx0JiMzOTttZXRhIG9pZiBcJiMzNDt2ZXRoMFwmIzM0OyB0Y3Agc3BvcnQgMTIzNDUgY3QgbWFyayBzZXQgMSBmbG93IGFkZCBAZjEgY291bnRlciBuYW1lIHJvdXRlZF9yZXBsIGFjY2VwdCYjMzk7XG4gXG5AQCAtNjM2LDYgJiM0Mzs2NDgsMjggQEAgZWxzZVxuIFx0cmV0PTFcbiBmaVxuIFxuJiM0MztpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIxMC4yXG4mIzQzO2lwIC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMjEwLjFcbiYjNDM7XG4mIzQzO2lmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19uYXQgXCYjMzQ7JG5zMVwmIzM0OyBcJiMzNDskbnMyXCYjMzQ7IDEgXCYjMzQ7SVA0SVA2IHR1bm5lbFwmIzM0OzsgdGhlblxuJiM0MztcdGVjaG8gXCYjMzQ7RkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggSVA0SVA2IHR1bm5lbFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IGxpc3QgcnVsZXNldFxuJiM0MztcdHJldD0xXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztpcCAtNiAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IHJvdXRlIGRlbGV0ZSBkZWZhdWx0XG4mIzQzO2lwIC02IC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlMDE6Mzo6MlxuJiM0MztpcCAtNiAtbmV0IFwmIzM0OyRuc3IyXCYjMzQ7IHJvdXRlIGRlbGV0ZSBkZWZhdWx0XG4mIzQzO2lwIC02IC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlMDE6Mzo6MVxuJiM0MztcbiYjNDM7aWYgdGVzdF90Y3BfZm9yd2FyZGluZyBcJiMzNDskbnMxXCYjMzQ7IFwmIzM0OyRuczJcJiMzNDsgMSA2IFwmIzM0O1tkZWFkOjI6Ojk5XVwmIzM0OyAxMjM0NTsgdGhlblxuJiM0MztcdGVjaG8gXCYjMzQ7UEFTUzogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIFNJVCB0dW5uZWxcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGVjaG8gXCYjMzQ7RkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggU0lUIHR1bm5lbFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IGxpc3QgcnVsZXNldFxuJiM0MztcdHJldD0xXG4mIzQzO2ZpXG4mIzQzO1xuICMgQ3JlYXRlIHZsYW4gdGFnZ2VkIGRldmljZXMgZm9yIElQSVAgdHJhZmZpYy5cbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSB2ZXRoMS4xMCB0eXBlIHZsYW4gaWQgMTBcbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGxpbmsgc2V0IHZldGgxLjEwIHVwXG5AQCAtNjUzLDExICYjNDM7Njg3LDE4IEBAIGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiB0dW4wLjEwIGFcbiBcbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGxpbmsgYWRkIG5hbWUgdHVuNi4xMCB0eXBlIGlwNnRubCBsb2NhbCBmZWUxOjQ6OjEgcmVtb3RlIGZlZTE6NDo6MiBlbmNhcGxpbWl0IG5vbmVcbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGxpbmsgc2V0IHR1bjYuMTAgdXBcbiYjNDM7aXAgLW5ldCBcJiMzNDskbnNyMVwmIzM0OyBhZGRyIGFkZCAxOTIuMTY4LjIyMC4xLzI0IGRldiB0dW42LjEwXG4gaXAgLW5ldCBcJiMzNDskbnNyMVwmIzM0OyBhZGRyIGFkZCBmZWUxOjU6OjEvNjQgZGV2IHR1bjYuMTAgbm9kYWRcbiYjNDM7aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMVwmIzM0OyBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW42LzEwLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4gaXAgLTYgLW5ldCBcJiMzNDskbnNyMVwmIzM0OyByb3V0ZSBkZWxldGUgZGVmYXVsdFxuIGlwIC02IC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlZTE6NTo6MlxuIGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiB0dW42LjEwIGFjY2VwdCYjMzk7XG4gXG4mIzQzO2lwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgbGluayBhZGQgbmFtZSBzaXQxLjEwIHR5cGUgc2l0IGxvY2FsIDE5Mi4xNjguMjAuMSByZW1vdGUgMTkyLjE2OC4yMC4yIHR0bCAyNTVcbiYjNDM7aXAgLW5ldCBcJiMzNDskbnNyMVwmIzM0OyBsaW5rIHNldCBzaXQxLjEwIHVwXG4mIzQzO2lwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgYWRkciBhZGQgZmUwMTo1OjoxLzY0IGRldiBzaXQxLjEwIG5vZGFkXG4mIzQzO2lwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiBzaXQxLjEwIGFjY2VwdCYjMzk7XG4mIzQzO1xuIGlwIC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgbGluayBhZGQgbGluayB2ZXRoMCBuYW1lIHZldGgwLjEwIHR5cGUgdmxhbiBpZCAxMFxuIGlwIC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgbGluayBzZXQgdmV0aDAuMTAgdXBcbiBpcCAtbmV0IFwmIzM0OyRuc3IyXCYjMzQ7IGFkZHIgYWRkIDE5Mi4xNjguMjAuMi8yNCBkZXYgdmV0aDAuMTBcbkBAIC02NzIsNyAmIzQzOzcxMywxNCBAQCBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IyXCYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjAvMTAuZm9yd2FyZGluZz0xIFx1MDAzZSAvZGV2L251bGxcbiBcbiBpcCAtbmV0IFwmIzM0OyRuc3IyXCYjMzQ7IGxpbmsgYWRkIG5hbWUgdHVuNi4xMCB0eXBlIGlwNnRubCBsb2NhbCBmZWUxOjQ6OjIgcmVtb3RlIGZlZTE6NDo6MSBlbmNhcGxpbWl0IG5vbmUgfHwgcmV0PTFcbiBpcCAtbmV0IFwmIzM0OyRuc3IyXCYjMzQ7IGxpbmsgc2V0IHR1bjYuMTAgdXBcbiYjNDM7aXAgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyBhZGRyIGFkZCAxOTIuMTY4LjIyMC4yLzI0IGRldiB0dW42LjEwXG4gaXAgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyBhZGRyIGFkZCBmZWUxOjU6OjIvNjQgZGV2IHR1bjYuMTAgbm9kYWRcbiYjNDM7aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMlwmIzM0OyBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW42LzEwLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4mIzQzO1xuJiM0MztpcCAtbmV0IFwmIzM0OyRuc3IyXCYjMzQ7IGxpbmsgYWRkIG5hbWUgc2l0MS4xMCB0eXBlIHNpdCBsb2NhbCAxOTIuMTY4LjIwLjIgcmVtb3RlIDE5Mi4xNjguMjAuMSB0dGwgMjU1XG4mIzQzO2lwIC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgbGluayBzZXQgc2l0MS4xMCB1cFxuJiM0MztpcCAtbmV0IFwmIzM0OyRuc3IyXCYjMzQ7IGFkZHIgYWRkIGZlMDE6NTo6Mi82NCBkZXYgc2l0MS4xMCBub2RhZFxuJiM0MztcbiBpcCAtNiAtbmV0IFwmIzM0OyRuc3IyXCYjMzQ7IHJvdXRlIGRlbGV0ZSBkZWZhdWx0XG4gaXAgLTYgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmVlMTo1OjoxXG4gXG5AQCAtNjkwLDYgJiM0Mzs3MzgsMjggQEAgZWxzZVxuIFx0cmV0PTFcbiBmaVxuIFxuJiM0MztpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIyMC4yXG4mIzQzO2lwIC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMjIwLjFcbiYjNDM7XG4mIzQzO2lmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19uYXQgXCYjMzQ7JG5zMVwmIzM0OyBcJiMzNDskbnMyXCYjMzQ7IDEgXCYjMzQ7SVA0SVA2IHR1bm5lbCBvdmVyIHZsYW5cJiMzNDs7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O0ZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIElQNElQNiB0dW5uZWwgb3ZlciB2bGFuXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMVwmIzM0OyBuZnQgbGlzdCBydWxlc2V0XG4mIzQzO1x0cmV0PTFcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO2lwIC02IC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgcm91dGUgZGVsZXRlIGRlZmF1bHRcbiYjNDM7aXAgLTYgLW5ldCBcJiMzNDskbnNyMVwmIzM0OyByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmUwMTo1OjoyXG4mIzQzO2lwIC02IC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgcm91dGUgZGVsZXRlIGRlZmF1bHRcbiYjNDM7aXAgLTYgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmUwMTo1OjoxXG4mIzQzO1xuJiM0MztpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nIFwmIzM0OyRuczFcJiMzNDsgXCYjMzQ7JG5zMlwmIzM0OyAxIDYgXCYjMzQ7W2RlYWQ6Mjo6OTldXCYjMzQ7IDEyMzQ1OyB0aGVuXG4mIzQzO1x0ZWNobyBcJiMzNDtQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgU0lUIHR1bm5lbCBvdmVyIHZsYW5cJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGVjaG8gXCYjMzQ7RkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggU0lUIHR1bm5lbCBvdmVyIHZsYW5cJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCBsaXN0IHJ1bGVzZXRcbiYjNDM7XHRyZXQ9MVxuJiM0MztmaVxuJiM0MztcbiAjIFJlc3RvcmUgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25cbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjEwLjJcbiBpcCAtbmV0IFwmIzM0OyRuc3IyXCYjMzQ7IHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjEwLjFcbkBAIC03ODIsNyAmIzQzOzg1Miw3IEBAIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgYWRkciBhZGQgZGVhZDoxOjoxLzY0IGRldiB2ZXRoMCBub2RhZFxuIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgbGluayBzZXQgdXAgZGV2IHZldGgwXG4gfVxuIFxuLXRlc3RfaXBpcFxuJiM0Mzt0ZXN0X2lwX3RubHNcbiBcbiB0ZXN0X2JyaWRnZVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkVUX0lQSVAmIzM0OywKICAgICYjMzQ7SVBWNl9TSVQmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcGlwNl90dW5uZWxfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7bmZfZmxvd190dW5uZWxfaXBfcHVzaCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3R1bm5lbF9pcDZfcHVzaCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3R1bm5lbF9wdXNoJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9sb29rdXAmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2smIzM0OywKICAgICYjMzQ7bmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7LAogICAgJiMzNDtuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgSVAtaW4tSVAsIFNJVCAoSVB2Ni1pbi1JUHY0KSwgYW5kIElQdjYtaW4tSVB2NiB0dW5uZWxzIGluIHRoZSBuZXRmaWx0ZXIgZmxvd3RhYmxlIG9mZmxvYWQuIEl0IG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBsb2dpYyBhbmQgdHVubmVsIGRyaXZlcnMgdG8gc3VwcG9ydCBmaWxsaW5nIHRoZSBmb3J3YXJkIHBhdGggYW5kIHB1c2hpbmcgdHVubmVsIGhlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRlNjkyODIzZDBjMGRjMmVmZDhhZjA5NGQ3MGU4OWNhMDgwMWZlNzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAxMCAwMToyODozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCmluZGV4IGU3Yzc4MjkzMDAyYWJiLi4wNmQxMjhjNjdjOGM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCkBAIC0yNzYsNyAmIzQzOzI3Niw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X21hbmdsZV9pcHY0KGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgICAgY29uc3QgdTggKmFkZHIsIF9fYmUxNiBldGhlcl90eXBlLAogCQkJCSAgICBzdHJ1Y3QgYWlyb2hhX3dkbWFfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrOwpAQCAtMjg3LDcgJiM0MzsyODgsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgJmFtcDtzdGFjayk7CiYjNDM7CWVyciA9IGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGFkZHIsIGV0aGVyX3R5cGUsICZhbXA7c3RhY2spOwogCXJjdV9yZWFkX3VubG9jaygpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0zMzEsNyAmIzQzOzMzMiw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCQkJCQlzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSAqaHdlLAogCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdHlwZSwKIAkJCQkJc3RydWN0IGFpcm9oYV9mbG93X2RhdGEgKmRhdGEsCi0JCQkJCWludCBsNHByb3RvKQomIzQzOwkJCQkJX19iZTE2IGV0aGVyX3R5cGUsIGludCBsNHByb3RvKQogewogCXUzMiBxZGF0YSA9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9TSEFQRVJfSUQsIDB4N2YpLCBwb3J0c19wYWQsIHZhbDsKIAlpbnQgd2xhbl9ldHlwZSA9IC1FSU5WQUwsIGRzYV9wb3J0ID0gYWlyb2hhX2dldF9kc2FfcG9ydCgmYW1wO25ldGRldik7CkBAIC0zNTQsNyAmIzQzOzM1NSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCQlzdHJ1Y3QgYWlyb2hhX3dkbWFfaW5mbyBpbmZvID0ge307CiAKIAkJaWYgKCFhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8obmV0ZGV2LCBkYXRhLSZndDtldGguaF9kZXN0LAotCQkJCQkgICAgICAmYW1wO2luZm8pKSB7CiYjNDM7CQkJCQkgICAgICBldGhlcl90eXBlLCAmYW1wO2luZm8pKSB7CiAJCQl2YWwgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0lCMl9OQlEsIGluZm8uaWR4KSB8CiAJCQkgICAgICAgRklFTERfUFJFUChBSVJPSEFfRk9FX0lCMl9QU0VfUE9SVCwKIAkJCQkJICBGRV9QU0VfUE9SVF9DRE00KTsKQEAgLTEwODEsNiAmIzQzOzEwODIsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwKIAlzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdDsKIAlzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSBod2U7CiAJaW50IGVyciwgaSwgb2ZmbG9hZF90eXBlOwomIzQzOwlfX2JlMTYgZXRoZXJfdHlwZSA9IDA7CiAJdTE2IGFkZHJfdHlwZSA9IDA7CiAJdTggbDRwcm90byA9IDA7CiAKQEAgLTExMDcsNiAmIzQzOzExMDksNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwKIAkJc3RydWN0IGZsb3dfbWF0Y2hfYmFzaWMgbWF0Y2g7CiAKIAkJZmxvd19ydWxlX21hdGNoX2Jhc2ljKHJ1bGUsICZhbXA7bWF0Y2gpOwomIzQzOwkJZXRoZXJfdHlwZSA9IG1hdGNoLmtleS0mZ3Q7bl9wcm90bzsKIAkJbDRwcm90byA9IG1hdGNoLmtleS0mZ3Q7aXBfcHJvdG87CiAJfSBlbHNlIHsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMTE3Nyw3ICYjNDM7MTE4MCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCAmYW1wO2h3ZSwgb2Rldiwgb2ZmbG9hZF90eXBlLAotCQkJCQkgICAmYW1wO2RhdGEsIGw0cHJvdG8pOwomIzQzOwkJCQkJICAgJmFtcDtkYXRhLCBldGhlcl90eXBlLCBsNHByb3RvKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCmluZGV4IGNjOGM0ZWY4MDM4ZjMwLi4yNjAxYzE3YjI5YzhiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMKQEAgLTg5LDcgJiM0Mzs4OSw4IEBAIG10a19mbG93X29mZmxvYWRfbWFuZ2xlX2V0aChjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdCwgdm9pZCAqZXRoKQogfQogCiBzdGF0aWMgaW50Ci1tdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbXRrX3dkbWFfaW5mbyAqaW5mbykKJiM0MzttdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLAomIzQzOwkJICAgICAgIF9fYmUxNiBldGhlcl90eXBlLCBzdHJ1Y3QgbXRrX3dkbWFfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrOwogCXN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7CkBAIC0xMDIsNyAmIzQzOzEwMyw3IEBAIG10a19mbG93X2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsIHN0cnVjdCBtdGtfd2RtYV9pCiAJCXJldHVybiAtMTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQllcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCAmYW1wO3N0YWNrKTsKJiM0MzsJZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgZXRoZXJfdHlwZSwgJmFtcDtzdGFjayk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTE5MCwxMiAmIzQzOzE5MSwxMiBAQCBtdGtfZmxvd19nZXRfZHNhX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKipkZXYpCiBzdGF0aWMgaW50CiBtdGtfZmxvd19zZXRfb3V0cHV0X2RldmljZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgbXRrX2ZvZV9lbnRyeSAqZm9lLAogCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRlc3RfbWFjLAotCQkJICAgaW50ICp3ZWRfaW5kZXgpCiYjNDM7CQkJICAgX19iZTE2IGV0aGVyX3R5cGUsIGludCAqd2VkX2luZGV4KQogewogCXN0cnVjdCBtdGtfd2RtYV9pbmZvIGluZm8gPSB7fTsKIAlpbnQgcHNlX3BvcnQsIGRzYV9wb3J0LCBxdWV1ZTsKIAotCWlmIChtdGtfZmxvd19nZXRfd2RtYV9pbmZvKGRldiwgZGVzdF9tYWMsICZhbXA7aW5mbykgPT0gMCkgewomIzQzOwlpZiAobXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhkZXYsIGRlc3RfbWFjLCBldGhlcl90eXBlLCAmYW1wO2luZm8pID09IDApIHsKIAkJbXRrX2ZvZV9lbnRyeV9zZXRfd2RtYShldGgsIGZvZSwgaW5mby53ZG1hX2lkeCwgaW5mby5xdWV1ZSwKIAkJCQkgICAgICAgaW5mby5ic3MsIGluZm8ud2NpZCwgaW5mby5hbXNkdSk7CiAJCWlmIChtdGtfaXNfbmV0c3lzX3YyX29yX2dyZWF0ZXIoZXRoKSkgewpAQCAtMjczLDYgJiM0MzsyNzQsNyBAQCBtdGtfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmYsCiAJc3RydWN0IG10a19mbG93X2RhdGEgZGF0YSA9IHt9OwogCXN0cnVjdCBtdGtfZm9lX2VudHJ5IGZvZTsKIAlzdHJ1Y3QgbXRrX2Zsb3dfZW50cnkgKmVudHJ5OwomIzQzOwlfX2JlMTYgZXRoZXJfdHlwZSA9IDA7CiAJaW50IG9mZmxvYWRfdHlwZSA9IDA7CiAJaW50IHdlZF9pbmRleCA9IC0xOwogCXUxNiBhZGRyX3R5cGUgPSAwOwpAQCAtMzE5LDYgJiM0MzszMjEsNyBAQCBtdGtfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmYsCiAJCXN0cnVjdCBmbG93X21hdGNoX2Jhc2ljIG1hdGNoOwogCiAJCWZsb3dfcnVsZV9tYXRjaF9iYXNpYyhydWxlLCAmYW1wO21hdGNoKTsKJiM0MzsJCWV0aGVyX3R5cGUgPSBtYXRjaC5rZXktJmd0O25fcHJvdG87CiAJCWw0cHJvdG8gPSBtYXRjaC5rZXktJmd0O2lwX3Byb3RvOwogCX0gZWxzZSB7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTQ4MSw3ICYjNDM7NDg0LDcgQEAgbXRrX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBtdGtfZXRoICpldGgsIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpmLAogCQltdGtfZm9lX2VudHJ5X3NldF9wcHBvZShldGgsICZhbXA7Zm9lLCBkYXRhLnBwcG9lLnNpZCk7CiAKIAllcnIgPSBtdGtfZmxvd19zZXRfb3V0cHV0X2RldmljZShldGgsICZhbXA7Zm9lLCBvZGV2LCBkYXRhLmV0aC5oX2Rlc3QsCi0JCQkJCSAmYW1wO3dlZF9pbmRleCk7CiYjNDM7CQkJCQkgZXRoZXJfdHlwZSwgJmFtcDt3ZWRfaW5kZXgpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDk5ODFkNjM3ZjhiNTQ2Li40NWQ5OWUxMWIwNmUyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC05MDIsNiAmIzQzOzkwMiw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggewogCQkJfTsKIAogCQkJdTgJbDNfcHJvdG87CiYjNDM7CQkJdTgJZW5jYXBfcHJvdG87CiAJCX0gdHVuOwogCQlzdHJ1Y3QgewogCQkJZW51bSB7CkBAIC05MzgsNiAmIzQzOzkzOSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgewogc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggewogCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdTgJCQlkYWRkcltFVEhfQUxFTl07CiYjNDM7CV9fYmUxNgkJCWV0aGVyX3R5cGU7CiAKIAlpbnQJCQludW1fdmxhbnM7CiAJc3RydWN0IHsKQEAgLTM0MjAsNyAmIzQzOzM0MjIsOCBAQCB2b2lkIGRldl9yZW1vdmVfb2ZmbG9hZChzdHJ1Y3QgcGFja2V0X29mZmxvYWQgKnBvKTsKIAogaW50IGRldl9nZXRfaWZsaW5rKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLAomIzQzO2ludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgIGNvbnN0IHU4ICpkYWRkciwgX19iZTE2IGV0aGVyX3R5cGUsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTsKIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTsKIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWVfcmN1KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAppbmRleCA3YjIzYjI0NWE1YTg2YS4uNGQ0MDY4MDFlYzkwMTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaApAQCAtMTE4LDYgJiM0MzsxMTgsNyBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB7CiAJfTsKIAogCXU4CWwzX3Byb3RvOwomIzQzOwl1OAllbmNhcF9wcm90bzsKIH07CiAKIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA0YjNkNWNmZGY2ZTAwZi4uOWY1YTJkYTllOWY3NzQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC03NTAsMTIgJiM0Mzs3NTAsMTQgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKmRldl9md2RfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaykKIAlyZXR1cm4gJmFtcDtzdGFjay0mZ3Q7cGF0aFtrXTsKIH0KIAotaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsCiYjNDM7aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCSAgY29uc3QgdTggKmRhZGRyLCBfX2JlMTYgZXRoZXJfdHlwZSwKIAkJCSAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spCiB7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmxhc3RfZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHsKLQkJLmRldgk9IGRldiwKJiM0MzsJCS5kZXYJCT0gZGV2LAomIzQzOwkJLmV0aGVyX3R5cGUJPSBldGhlcl90eXBlLAogCX07CiAJc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDsKIAlpbnQgcmV0ID0gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCBiNjQzMTk0ZjU3ZDI5Zi4uOWY3YjJiZGFiZWYwNmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcGlwLmMKQEAgLTM2OSw2ICYjNDM7MzY5LDcgQEAgc3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiAJcGF0aC0mZ3Q7dHVuLnNyY192NC5zX2FkZHIgPSB0aXBoLSZndDtzYWRkcjsKIAlwYXRoLSZndDt0dW4uZHN0X3Y0LnNfYWRkciA9IHRpcGgtJmd0O2RhZGRyOwogCXBhdGgtJmd0O3R1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDsKJiM0MzsJcGF0aC0mZ3Q7dHVuLmVuY2FwX3Byb3RvID0gQUZfSU5FVDsKIAlwYXRoLSZndDtkZXYgPSBjdHgtJmd0O2RldjsKIAogCWN0eC0mZ3Q7ZGV2ID0gcnQtJmd0O2RzdC5kZXY7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggYmY4ZTQwYWY2MGIwODMuLmExMjFmNzE1YWZkMmNkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCkBAIC0xODYzLDcgJiM0MzsxODYzLDExIEBAIHN0YXRpYyBpbnQgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAogCQlwYXRoLSZndDt0eXBlID0gREVWX1BBVEhfVFVOOwogCQlwYXRoLSZndDt0dW4uc3JjX3Y2ID0gdC0mZ3Q7cGFybXMubGFkZHI7CiAJCXBhdGgtJmd0O3R1bi5kc3RfdjYgPSB0LSZndDtwYXJtcy5yYWRkcjsKLQkJcGF0aC0mZ3Q7dHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2OwomIzQzOwkJcGF0aC0mZ3Q7dHVuLmVuY2FwX3Byb3RvID0gQUZfSU5FVDY7CiYjNDM7CQlpZiAoY3R4LSZndDtldGhlcl90eXBlID09IGNwdV90b19iZTE2KEVUSF9QX0lQKSkKJiM0MzsJCQlwYXRoLSZndDt0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQSVA7CiYjNDM7CQllbHNlCiYjNDM7CQkJcGF0aC0mZ3Q7dHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2OwogCQlwYXRoLSZndDtkZXYgPSBjdHgtJmd0O2RldjsKIAkJY3R4LSZndDtkZXYgPSBkc3QtJmd0O2RldjsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jCmluZGV4IGEzOGIyNGZiODM4NDI0Li5lYWQzMjdjMzJkZjI0NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2l0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvc2l0LmMKQEAgLTEzNjUsNiAmIzQzOzEzNjUsNTYgQEAgaXBpcDZfdHVubmVsX2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCwKIAl9CiB9CiAKJiM0MztzdGF0aWMgaW50IGlwaXA2X3R1bm5lbF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAomIzQzOwkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoY3R4LSZndDtkZXYpOwomIzQzOwljb25zdCBzdHJ1Y3QgaXBoZHIgKnRpcGggPSAmYW1wO3R1bm5lbC0mZ3Q7cGFybXMuaXBoOwomIzQzOwlzdHJ1Y3QgcnRhYmxlICpydDsKJiM0MzsKJiM0MzsJLyogTkJNQSB0dW5uZWxzIChJU0FUQVAsIDZ0bzQsIDZyZCkgcmVzb2x2ZSB0aGUgb3V0ZXIgZGVzdGluYXRpb24KJiM0MzsJICogcGVyLXBhY2tldCBmcm9tIHRoZSBpbm5lciBJUHY2IGFkZHJlc3M7IG5vdCBvZmZsb2FkYWJsZS4KJiM0MzsJICovCiYjNDM7CWlmICghdGlwaC0mZ3Q7ZGFkZHIpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qIEZPVS9HVUUgZW5jYXBzdWxhdGlvbiBpcyBoYW5kbGVkIGluIHRoZSBzbG93IHBhdGggYnkKJiM0MzsJICogaXBfdHVubmVsX2VuY2FwKCk7IHRoZSBmYXN0IHBhdGggb25seSBwdXNoZXMgYSBwbGFpbgomIzQzOwkgKiBJUHY0IGhlYWRlciBhbmQgd291bGQgc2tpcCB0aGUgVURQIGVuY2Fwc3VsYXRpb24uCiYjNDM7CSAqLwomIzQzOwlpZiAodHVubmVsLSZndDtlbmNhcC50eXBlICE9IFRVTk5FTF9FTkNBUF9OT05FKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlydCA9IGlwX3JvdXRlX291dHB1dChkZXZfbmV0KGN0eC0mZ3Q7ZGV2KSwgdGlwaC0mZ3Q7ZGFkZHIsIHRpcGgtJmd0O3NhZGRyLAomIzQzOwkJCSAgICAgaW5ldF9kc2ZpZWxkX3RvX2RzY3AodGlwaC0mZ3Q7dG9zKSwKJiM0MzsJCQkgICAgIHR1bm5lbC0mZ3Q7cGFybXMubGluaywgUlRfU0NPUEVfVU5JVkVSU0UpOwomIzQzOwlpZiAoSVNfRVJSKHJ0KSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKHJ0KTsKJiM0MzsKJiM0MzsJcGF0aC0mZ3Q7dHlwZSA9IERFVl9QQVRIX1RVTjsKJiM0MzsJcGF0aC0mZ3Q7dHVuLnNyY192NC5zX2FkZHIgPSB0aXBoLSZndDtzYWRkcjsKJiM0MzsJcGF0aC0mZ3Q7dHVuLmRzdF92NC5zX2FkZHIgPSB0aXBoLSZndDtkYWRkcjsKJiM0MzsJcGF0aC0mZ3Q7dHVuLmVuY2FwX3Byb3RvID0gQUZfSU5FVDsKJiM0MzsJcGF0aC0mZ3Q7ZGV2ID0gY3R4LSZndDtkZXY7CiYjNDM7CiYjNDM7CXN3aXRjaCAoY3R4LSZndDtldGhlcl90eXBlKSB7CiYjNDM7CWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgomIzQzOwkJcGF0aC0mZ3Q7dHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6CiYjNDM7CQlwYXRoLSZndDt0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWlwX3J0X3B1dChydCk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY3R4LSZndDtkZXYgPSBydC0mZ3Q7ZHN0LmRldjsKJiM0MzsJaXBfcnRfcHV0KHJ0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludAogaXBpcDZfdHVubmVsX3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLAogCQkJICAgIHZvaWQgX191c2VyICpkYXRhLCBpbnQgY21kKQpAQCAtMTQwMSw2ICYjNDM7MTQ1MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBpcDZfbmV0ZGV2X29wcyA9IHsKIAkubmRvX3Npb2NkZXZwcml2YXRlID0gaXBpcDZfdHVubmVsX3Npb2NkZXZwcml2YXRlLAogCS5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLAogCS5uZG9fdHVubmVsX2N0bCA9IGlwaXA2X3R1bm5lbF9jdGwsCiYjNDM7CS5uZG9fZmlsbF9mb3J3YXJkX3BhdGggPSBpcGlwNl90dW5uZWxfZmlsbF9mb3J3YXJkX3BhdGgsCiB9OwogCiBzdGF0aWMgdm9pZCBpcGlwNl9kZXZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKaW5kZXggOTljNWI5ZDY3MWEwY2EuLjE4Zjg5ZTZmYjQzNTRkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKQEAgLTc2LDkgJiM0Mzs3NiwxNCBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93X29mZmxvYWRfYWxsb2Moc3RydWN0IG5mX2Nvbm4gKmN0KQogfQogRVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FsbG9jKTsKIAotc3RhdGljIHUzMiBmbG93X29mZmxvYWRfZHN0X2Nvb2tpZShzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpmbG93X3R1cGxlKQomIzQzO3N0YXRpYyB1MzIgZmxvd19vZmZsb2FkX2RzdF9jb29raWUoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqZmxvd190dXBsZSwKJiM0MzsJCQkJICAgdTggdHVuX2VuY2FwX3Byb3RvKQogewotCWlmIChmbG93X3R1cGxlLSZndDtsM3Byb3RvID09IE5GUFJPVE9fSVBWNikKJiM0MzsJYm9vbCBkc3RfdjY7CiYjNDM7CiYjNDM7CWRzdF92NiA9IHR1bl9lbmNhcF9wcm90byA/IHR1bl9lbmNhcF9wcm90byA9PSBORlBST1RPX0lQVjYKJiM0MzsJCQkJIDogZmxvd190dXBsZS0mZ3Q7bDNwcm90byA9PSBORlBST1RPX0lQVjY7CiYjNDM7CWlmIChkc3RfdjYpCiAJCXJldHVybiBydDZfZ2V0X2Nvb2tpZShkc3RfcnQ2X2luZm8oZmxvd190dXBsZS0mZ3Q7ZHN0X2NhY2hlKSk7CiAKIAlyZXR1cm4gMDsKQEAgLTk5LDEwICYjNDM7MTA0LDEyIEBAIHN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2ZpbGxfcm91dGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKIAkJCQkgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKQogewogCXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZsb3dfdHVwbGUgPSAmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFtkaXJdLnR1cGxlOwomIzQzOwl1OCBsM3Byb3RvLCBlbmNhcF9wcm90byA9IHJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi50dW4uZW5jYXBfcHJvdG87CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gbmZ0X3JvdXRlX2RzdF9mZXRjaChyb3V0ZSwgZGlyKTsKIAlpbnQgaSwgaiA9IDA7CiAKLQlzd2l0Y2ggKGZsb3dfdHVwbGUtJmd0O2wzcHJvdG8pIHsKJiM0MzsJbDNwcm90byA9IGVuY2FwX3Byb3RvID8gZW5jYXBfcHJvdG8gOiBmbG93X3R1cGxlLSZndDtsM3Byb3RvOwomIzQzOwlzd2l0Y2ggKGwzcHJvdG8pIHsKIAljYXNlIE5GUFJPVE9fSVBWNDoKIAkJZmxvd190dXBsZS0mZ3Q7bXR1ID0gaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKGRzdCwgdHJ1ZSk7CiAJCWJyZWFrOwpAQCAtMTM4LDcgJiM0MzsxNDUsOCBAQCBzdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csCiAJY2FzZSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSDoKIAkJZmxvd190dXBsZS0mZ3Q7aWZpZHggPSByb3V0ZS0mZ3Q7dHVwbGVbZGlyXS5vdXQuaWZpbmRleDsKIAkJZmxvd190dXBsZS0mZ3Q7ZHN0X2NhY2hlID0gZHN0OwotCQlmbG93X3R1cGxlLSZndDtkc3RfY29va2llID0gZmxvd19vZmZsb2FkX2RzdF9jb29raWUoZmxvd190dXBsZSk7CiYjNDM7CQlmbG93X3R1cGxlLSZndDtkc3RfY29va2llID0gZmxvd19vZmZsb2FkX2RzdF9jb29raWUoZmxvd190dXBsZSwKJiM0MzsJCQkJCQkJCSBlbmNhcF9wcm90byk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVdBUk5fT05fT05DRSgxKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKaW5kZXggMjllOTNhYzFlMmU0MDAuLjQ0OTgxOGRjZWYzYzdlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYwpAQCAtMTkxLDI1ICYjNDM7MTkxLDI3IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdHVwbGVfZW5jYXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAkJYnJlYWs7CiAJfQogCi0Jc3dpdGNoIChpbm5lcl9wcm90bykgewotCWNhc2UgaHRvbnMoRVRIX1BfSVApOgotCQlpcGggPSAoc3RydWN0IGlwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IG9mZnNldCk7Ci0JCWlmIChjdHgtJmd0O3R1bi5wcm90byA9PSBJUFBST1RPX0lQSVApIHsKJiM0MzsJaWYgKGN0eC0mZ3Q7dHVuLnByb3RvID09IElQUFJPVE9fSVBJUCB8fCBjdHgtJmd0O3R1bi5wcm90byA9PSBJUFBST1RPX0lQVjYpIHsKJiM0MzsJCXN3aXRjaCAoaW5uZXJfcHJvdG8pIHsKJiM0MzsJCWNhc2UgaHRvbnMoRVRIX1BfSVApOgomIzQzOwkJCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsKJiM0MzsJCQkJCSAgICAgICBvZmZzZXQpOwogCQkJdHVwbGUtJmd0O3R1bi5kc3RfdjQuc19hZGRyID0gaXBoLSZndDtkYWRkcjsKIAkJCXR1cGxlLSZndDt0dW4uc3JjX3Y0LnNfYWRkciA9IGlwaC0mZ3Q7c2FkZHI7Ci0JCQl0dXBsZS0mZ3Q7dHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6Ci0JCWlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgb2Zmc2V0KTsKLQkJaWYgKGN0eC0mZ3Q7dHVuLnByb3RvID09IElQUFJPVE9fSVBWNikgewomIzQzOwkJCXR1cGxlLSZndDt0dW4ubDNfcHJvdG8gPSBjdHgtJmd0O3R1bi5wcm90bzsKJiM0MzsJCQl0dXBsZS0mZ3Q7dHVuLmVuY2FwX3Byb3RvID0gQUZfSU5FVDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6CiYjNDM7CQkJaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOwomIzQzOwkJCQkJCSAgb2Zmc2V0KTsKIAkJCXR1cGxlLSZndDt0dW4uZHN0X3Y2ID0gaXA2aC0mZ3Q7ZGFkZHI7CiAJCQl0dXBsZS0mZ3Q7dHVuLnNyY192NiA9IGlwNmgtJmd0O3NhZGRyOwotCQkJdHVwbGUtJmd0O3R1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjsKJiM0MzsJCQl0dXBsZS0mZ3Q7dHVuLmwzX3Byb3RvID0gY3R4LSZndDt0dW4ucHJvdG87CiYjNDM7CQkJdHVwbGUtJmd0O3R1bi5lbmNhcF9wcm90byA9IEFGX0lORVQ2OwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlicmVhazsKIAkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKIAl9CiB9CiAKQEAgLTMzNiw3ICYjNDM7MzM4LDcgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJaWYgKGlwaC0mZ3Q7dHRsICZsdDs9IDEpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fSVBJUCkgewomIzQzOwlpZiAoaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX0lQSVAgfHwgaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX0lQVjYpIHsKIAkJY3R4LSZndDt0dW4ucHJvdG8gPSBpcGgtJmd0O3Byb3RvY29sOwogCQljdHgtJmd0O3R1bi5oZHJfc2l6ZSA9IHNpemU7CiAJCWN0eC0mZ3Q7b2Zmc2V0ICYjNDM7PSBjdHgtJmd0O3R1bi5oZHJfc2l6ZTsKQEAgLTM2MSw3ICYjNDM7MzYzLDcgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDZfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJaWYgKGlwdjZfZXh0X2hkcihpcDZoLSZndDtuZXh0aGRyKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKGlwNmgtJmd0O25leHRoZHIgPT0gSVBQUk9UT19JUFY2KSB7CiYjNDM7CWlmIChpcDZoLSZndDtuZXh0aGRyID09IElQUFJPVE9fSVBJUCB8fCBpcDZoLSZndDtuZXh0aGRyID09IElQUFJPVE9fSVBWNikgewogCQljdHgtJmd0O3R1bi5wcm90byA9IGlwNmgtJmd0O25leHRoZHI7CiAJCWN0eC0mZ3Q7dHVuLmhkcl9zaXplID0gc2l6ZW9mKCppcDZoKTsKIAkJY3R4LSZndDtvZmZzZXQgJiM0Mzs9IGN0eC0mZ3Q7dHVuLmhkcl9zaXplOwpAQCAtMzgyLDYgJiM0MzszODQsMTAgQEAgc3RhdGljIHZvaWQgbmZfZmxvd19pcF90dW5uZWxfcG9wKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAKIAlza2JfcHVsbChza2IsIGN0eC0mZ3Q7dHVuLmhkcl9zaXplKTsKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKJiM0MzsJaWYgKGN0eC0mZ3Q7dHVuLnByb3RvID09IElQUFJPVE9fSVBJUCkKJiM0MzsJCXNrYi0mZ3Q7cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7CiYjNDM7CWVsc2UKJiM0MzsJCXNrYi0mZ3Q7cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTsKIH0KIAogc3RhdGljIGJvb2wgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKQEAgLTQ1OCwyMSAmIzQzOzQ2NCw2IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfZW5jYXBfcG9wKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJCW5mX2Zsb3dfaXBfdHVubmVsX3BvcChjdHgsIHNrYik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICoKLW5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKLQkJICAgICAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHt9OwotCi0JaWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChjdHgsIHNrYiwgaHRvbnMoRVRIX1BfSVApKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAobmZfZmxvd190dXBsZV9pcChjdHgsIHNrYiwgJmFtcDt0dXBsZSkgJmx0OyAwKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBmbG93X29mZmxvYWRfbG9va3VwKGZsb3dfdGFibGUsICZhbXA7dHVwbGUpOwotfQotCiBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJCQkJICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwKIAkJCQkgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsCkBAIC00ODcsOCAmIzQzOzQ3OCwxNiBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTsKIAogCW10dSA9IGZsb3ctJmd0O3R1cGxlaGFzaFtkaXJdLnR1cGxlLm10dSAmIzQzOyBjdHgtJmd0O29mZnNldDsKLQlpZiAoZmxvdy0mZ3Q7dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pCiYjNDM7CXN3aXRjaCAoZmxvdy0mZ3Q7dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bi5lbmNhcF9wcm90bykgewomIzQzOwljYXNlIEFGX0lORVQ6CiAJCW10dSAtPSBzaXplb2YoKmlwaCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBRl9JTkVUNjoKJiM0MzsJCW10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlicmVhazsKJiM0MzsJfQogCiAJaWYgKHVubGlrZWx5KG5mX2Zsb3dfZXhjZWVkc19tdHUoc2tiLCBtdHUpKSkKIAkJcmV0dXJuIDA7CkBAIC01ODgsMjMgJiM0Mzs1ODcsMzcgQEAgc3RhdGljIGludCBuZl9mbG93X3BwcG9lX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGlkLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwaXBfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLAotCQkJCSAgICBfX2JlMzIgKmlwX2RhZGRyKQomIzQzO3N0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsCiYjNDM7CQkJCSAgX19iZTMyICppcF9kYWRkcikKIHsKLQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IGRzdF9ydGFibGUodHVwbGUtJmd0O2RzdF9jYWNoZSk7Ci0JdTggdG9zID0gaXBoLSZndDt0b3MsIHR0bCA9IGlwaC0mZ3Q7dHRsOwotCV9fYmUxNiBmcmFnX29mZiA9IGlwaC0mZ3Q7ZnJhZ19vZmY7Ci0JdTMyIGhlYWRyb29tID0gc2l6ZW9mKCppcGgpOwomIzQzOwlfX2JlMTYgZnJhZ19vZmYgPSAwOwomIzQzOwlzdHJ1Y3QgaXBoZHIgKmlwaDsKJiM0MzsJdTggdG9zID0gMCwgdHRsOwomIzQzOwl1MzIgaGVhZHJvb207CiAJaW50IGVycjsKIAomIzQzOwlpZiAodHVwbGUtJmd0O3R1bi5sM19wcm90byA9PSBJUFBST1RPX0lQVjYpIHsKJiM0MzsJCXN0cnVjdCBpcHY2aGRyICppcDZoOwomIzQzOwomIzQzOwkJaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpOwomIzQzOwkJdG9zID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKTsKJiM0MzsJCXR0bCA9IGlwNmgtJmd0O2hvcF9saW1pdDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKJiM0MzsJCWZyYWdfb2ZmID0gaXBoLSZndDtmcmFnX29mZjsKJiM0MzsJCXRvcyA9IGlwaC0mZ3Q7dG9zOwomIzQzOwkJdHRsID0gaXBoLSZndDt0dGw7CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBpcHR1bm5lbF9oYW5kbGVfb2ZmbG9hZHMoc2tiLCBTS0JfR1NPX0lQWElQNCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXNrYl9zZXRfaW5uZXJfaXBwcm90byhza2IsIElQUFJPVE9fSVBJUCk7Ci0JaGVhZHJvb20gJiM0Mzs9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LSZndDtkc3QuZGV2KSAmIzQzOyBydC0mZ3Q7ZHN0LmhlYWRlcl9sZW47CiYjNDM7CXNrYl9zZXRfaW5uZXJfaXBwcm90byhza2IsIHR1cGxlLSZndDt0dW4ubDNfcHJvdG8pOwomIzQzOwloZWFkcm9vbSA9IHNpemVvZigqaXBoKSAmIzQzOyBMTF9SRVNFUlZFRF9TUEFDRShydC0mZ3Q7ZHN0LmRldikgJiM0MzsKJiM0MzsJCSAgIHJ0LSZndDtkc3QuaGVhZGVyX2xlbjsKIAllcnIgPSBza2JfY293X2hlYWQoc2tiLCBoZWFkcm9vbSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTYxNSw2ICYjNDM7NjI4LDcgQEAgc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcGlwX3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCS8qIFB1c2ggZG93biBhbmQgaW5zdGFsbCB0aGUgSVAgaGVhZGVyLiAqLwogCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCppcGgpKTsKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKJiM0MzsJc2tiLSZndDtwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKIAogCWlwaCA9IGlwX2hkcihza2IpOwogCWlwaC0mZ3Q7dmVyc2lvbgk9IDQ7CkBAIC02MzQsNTYgJiM0Mzs2NDgsNTcgQEAgc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcGlwX3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX3Y0X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsCi0JCQkJICBfX2JlMzIgKmlwX2RhZGRyKQotewotCWlmICh0dXBsZS0mZ3Q7dHVuX251bSkKLQkJcmV0dXJuIG5mX2Zsb3dfdHVubmVsX2lwaXBfcHVzaChuZXQsIHNrYiwgdHVwbGUsIGlwX2RhZGRyKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwNmlwNl9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSwKLQkJCQkgICAgICBzdHJ1Y3QgaW42X2FkZHIgKippcDZfZGFkZHIpCiYjNDM7c3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcDZfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLAomIzQzOwkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKippcDZfZGFkZHIpCiB7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IGRzdF9ydGFibGUodHVwbGUtJmd0O2RzdF9jYWNoZSk7Ci0JX191OCBkc2ZpZWxkID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKTsKJiM0MzsJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gdHVwbGUtJmd0O2RzdF9jYWNoZTsKIAlzdHJ1Y3QgZmxvd2k2IGZsNiA9IHsKIAkJLmRhZGRyID0gdHVwbGUtJmd0O3R1bi5zcmNfdjYsCiAJCS5zYWRkciA9IHR1cGxlLSZndDt0dW4uZHN0X3Y2LAogCQkuZmxvd2k2X3Byb3RvID0gSVBQUk9UT19JUFY2LAogCX07Ci0JdTggaG9wX2xpbWl0ID0gaXA2aC0mZ3Q7aG9wX2xpbWl0OwomIzQzOwl1OCBob3BfbGltaXQsIGRzZmllbGQ7CiYjNDM7CXN0cnVjdCBpcHY2aGRyICppcDZoOwogCWludCBlcnIsIG10dTsKIAl1MzIgaGVhZHJvb207CiAKJiM0MzsJaWYgKHR1cGxlLSZndDt0dW4ubDNfcHJvdG8gPT0gSVBQUk9UT19JUElQKSB7CiYjNDM7CQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKJiM0MzsKJiM0MzsJCWRzZmllbGQgPSBpcHY0X2dldF9kc2ZpZWxkKGlwaCk7CiYjNDM7CQlob3BfbGltaXQgPSBpcGgtJmd0O3R0bDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlwNmggPSAoc3RydWN0IGlwdjZoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKJiM0MzsJCWRzZmllbGQgPSBpcHY2X2dldF9kc2ZpZWxkKGlwNmgpOwomIzQzOwkJaG9wX2xpbWl0ID0gaXA2aC0mZ3Q7aG9wX2xpbWl0OwomIzQzOwl9CiYjNDM7CiAJZXJyID0gaXB0dW5uZWxfaGFuZGxlX29mZmxvYWRzKHNrYiwgU0tCX0dTT19JUFhJUDYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlza2Jfc2V0X2lubmVyX2lwcHJvdG8oc2tiLCBJUFBST1RPX0lQVjYpOwotCWhlYWRyb29tID0gc2l6ZW9mKCppcDZoKSAmIzQzOyBMTF9SRVNFUlZFRF9TUEFDRShydC0mZ3Q7ZHN0LmRldikgJiM0MzsKLQkJICAgcnQtJmd0O2RzdC5oZWFkZXJfbGVuOwomIzQzOwlza2Jfc2V0X2lubmVyX2lwcHJvdG8oc2tiLCB0dXBsZS0mZ3Q7dHVuLmwzX3Byb3RvKTsKJiM0MzsJaGVhZHJvb20gPSBzaXplb2YoKmlwNmgpICYjNDM7IExMX1JFU0VSVkVEX1NQQUNFKGRzdC0mZ3Q7ZGV2KSAmIzQzOwomIzQzOwkJICAgZHN0LSZndDtoZWFkZXJfbGVuOwogCWVyciA9IHNrYl9jb3dfaGVhZChza2IsIGhlYWRyb29tKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJc2tiX3NjcnViX3BhY2tldChza2IsIHRydWUpOwotCW10dSA9IGRzdF9tdHUoJmFtcDtydC0mZ3Q7ZHN0KSAtIHNpemVvZigqaXA2aCk7CiYjNDM7CW10dSA9IGRzdF9tdHUoZHN0KSAtIHNpemVvZigqaXA2aCk7CiAJbXR1ID0gbWF4KG10dSwgSVBWNl9NSU5fTVRVKTsKIAlza2JfZHN0X3VwZGF0ZV9wbXR1X25vX2NvbmZpcm0oc2tiLCBtdHUpOwogCiAJc2tiX3B1c2goc2tiLCBzaXplb2YoKmlwNmgpKTsKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKJiM0MzsJc2tiLSZndDtwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpOwogCiAJaXA2aCA9IGlwdjZfaGRyKHNrYik7CiAJaXA2X2Zsb3dfaGRyKGlwNmgsIGRzZmllbGQsCiAJCSAgICAgaXA2X21ha2VfZmxvd2xhYmVsKG5ldCwgc2tiLCBmbDYuZmxvd2xhYmVsLCB0cnVlLCAmYW1wO2ZsNikpOwogCWlwNmgtJmd0O2hvcF9saW1pdCA9IGhvcF9saW1pdDsKLQlpcDZoLSZndDtuZXh0aGRyID0gSVBQUk9UT19JUFY2OwomIzQzOwlpcDZoLSZndDtuZXh0aGRyID0gdHVwbGUtJmd0O3R1bi5sM19wcm90bzsKIAlpcDZoLSZndDtkYWRkciA9IHR1cGxlLSZndDt0dW4uc3JjX3Y2OwogCWlwNmgtJmd0O3NhZGRyID0gdHVwbGUtJmd0O3R1bi5kc3RfdjY7CiAJaXB2Nl9oZHIoc2tiKS0mZ3Q7cGF5bG9hZF9sZW4gPSBodG9ucyhza2ItJmd0O2xlbiAtIHNpemVvZigqaXA2aCkpOwpAQCAtNjk0LDE0ICYjNDM7NzA5LDE4IEBAIHN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXA2aXA2X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX3Y2X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsCi0JCQkJICBzdHJ1Y3QgaW42X2FkZHIgKippcDZfZGFkZHIpCiYjNDM7c3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsCiYjNDM7CQkJICAgICAgIF9fYmUzMiAqaXBfZGFkZHIsIHN0cnVjdCBpbjZfYWRkciAqKmlwNl9kYWRkcikKIHsKLQlpZiAodHVwbGUtJmd0O3R1bl9udW0pCi0JCXJldHVybiBuZl9mbG93X3R1bm5lbF9pcDZpcDZfcHVzaChuZXQsIHNrYiwgdHVwbGUsIGlwNl9kYWRkcik7Ci0KLQlyZXR1cm4gMDsKJiM0MzsJc3dpdGNoICh0dXBsZS0mZ3Q7dHVuLmVuY2FwX3Byb3RvKSB7CiYjNDM7CWNhc2UgQUZfSU5FVDoKJiM0MzsJCXJldHVybiBuZl9mbG93X3R1bm5lbF9pcF9wdXNoKG5ldCwgc2tiLCB0dXBsZSwgaXBfZGFkZHIpOwomIzQzOwljYXNlIEFGX0lORVQ2OgomIzQzOwkJcmV0dXJuIG5mX2Zsb3dfdHVubmVsX2lwNl9wdXNoKG5ldCwgc2tiLCB0dXBsZSwgaXA2X2RhZGRyKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBpbnQgbmZfZmxvd19lbmNhcF9wdXNoKHN0cnVjdCBza19idWZmICpza2IsCkBAIC04MDEsODYgJiM0Mzs4MjAsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG5mX2Zsb3dfcXVldWVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIE5GX1NUT0xFTjsKIH0KIAotdW5zaWduZWQgaW50Ci1uZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKQotewotCXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDsKLQlzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID0gcHJpdjsKLQlzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTsKLQllbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyOwotCXN0cnVjdCBuZl9mbG93dGFibGVfY3R4IGN0eCA9IHsKLQkJLmluCT0gc3RhdGUtJmd0O2luLAotCX07Ci0Jc3RydWN0IG5mX2Zsb3dfeG1pdCB4bWl0ID0ge307Ci0Jc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdzsKLQlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDsKLQlzdHJ1Y3QgcnRhYmxlICpydDsKLQlfX2JlMzIgaXBfZGFkZHI7Ci0JaW50IHJldDsKLQotCXR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoJmFtcDtjdHgsIGZsb3dfdGFibGUsIHNrYik7Ci0JaWYgKCF0dXBsZWhhc2gpCi0JCXJldHVybiBORl9BQ0NFUFQ7Ci0KLQlyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZCgmYW1wO2N0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpOwotCWlmIChyZXQgJmx0OyAwKQotCQlyZXR1cm4gTkZfRFJPUDsKLQllbHNlIGlmIChyZXQgPT0gMCkKLQkJcmV0dXJuIE5GX0FDQ0VQVDsKLQotCWlmICh1bmxpa2VseSh0dXBsZWhhc2gtJmd0O3R1cGxlLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9YRlJNKSkgewotCQlydCA9IGRzdF9ydGFibGUodHVwbGVoYXNoLSZndDt0dXBsZS5kc3RfY2FjaGUpOwotCQltZW1zZXQoc2tiLSZndDtjYiwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0X3NrYl9wYXJtKSk7Ci0JCUlQQ0Ioc2tiKS0mZ3Q7aWlmID0gc2tiLSZndDtkZXYtJmd0O2lmaW5kZXg7Ci0JCUlQQ0Ioc2tiKS0mZ3Q7ZmxhZ3MgPSBJUFNLQl9GT1JXQVJERUQ7Ci0JCXJldHVybiBuZl9mbG93X3htaXRfeGZybShza2IsIHN0YXRlLCAmYW1wO3J0LSZndDtkc3QpOwotCX0KLQotCWRpciA9IHR1cGxlaGFzaC0mZ3Q7dHVwbGUuZGlyOwotCWZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7Ci0Jb3RoZXJfdHVwbGUgPSAmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFshZGlyXS50dXBsZTsKLQlpcF9kYWRkciA9IG90aGVyX3R1cGxlLSZndDtzcmNfdjQuc19hZGRyOwotCi0JaWYgKG5mX2Zsb3dfdHVubmVsX3Y0X3B1c2goc3RhdGUtJmd0O25ldCwgc2tiLCBvdGhlcl90dXBsZSwgJmFtcDtpcF9kYWRkcikgJmx0OyAwKQotCQlyZXR1cm4gTkZfRFJPUDsKLQotCXN3aXRjaCAodHVwbGVoYXNoLSZndDt0dXBsZS54bWl0X3R5cGUpIHsKLQljYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIOgotCQlydCA9IGRzdF9ydGFibGUodHVwbGVoYXNoLSZndDt0dXBsZS5kc3RfY2FjaGUpOwotCQl4bWl0Lm91dGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHN0YXRlLSZndDtuZXQsIHR1cGxlaGFzaC0mZ3Q7dHVwbGUuaWZpZHgpOwotCQlpZiAoIXhtaXQub3V0ZGV2KSB7Ci0JCQlmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7Ci0JCQlyZXR1cm4gTkZfRFJPUDsKLQkJfQotCQluZWlnaCA9IGlwX25laWdoX2d3NChydC0mZ3Q7ZHN0LmRldiwgcnRfbmV4dGhvcChydCwgaXBfZGFkZHIpKTsKLQkJaWYgKElTX0VSUihuZWlnaCkpIHsKLQkJCWZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTsKLQkJCXJldHVybiBORl9EUk9QOwotCQl9Ci0JCXhtaXQuZGVzdCA9IG5laWdoLSZndDtoYTsKLQkJc2tiX2RzdF9zZXRfbm9yZWYoc2tiLCAmYW1wO3J0LSZndDtkc3QpOwotCQlicmVhazsKLQljYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX0RJUkVDVDoKLQkJeG1pdC5vdXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShzdGF0ZS0mZ3Q7bmV0LCB0dXBsZWhhc2gtJmd0O3R1cGxlLm91dC5pZmlkeCk7Ci0JCWlmICgheG1pdC5vdXRkZXYpIHsKLQkJCWZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTsKLQkJCXJldHVybiBORl9EUk9QOwotCQl9Ci0JCXhtaXQuZGVzdCA9IHR1cGxlaGFzaC0mZ3Q7dHVwbGUub3V0LmhfZGVzdDsKLQkJeG1pdC5zb3VyY2UgPSB0dXBsZWhhc2gtJmd0O3R1cGxlLm91dC5oX3NvdXJjZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJV0FSTl9PTl9PTkNFKDEpOwotCQlyZXR1cm4gTkZfRFJPUDsKLQl9Ci0JeG1pdC50dXBsZSA9IG90aGVyX3R1cGxlOwotCXhtaXQubmVlZHNfZ3NvX3NlZ21lbnQgPSB0dXBsZWhhc2gtJmd0O3R1cGxlLm5lZWRzX2dzb19zZWdtZW50OwotCi0JcmV0dXJuIG5mX2Zsb3dfcXVldWVfeG1pdChzdGF0ZS0mZ3Q7bmV0LCBza2IsICZhbXA7eG1pdCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXBfaG9vayk7Ci0KIHN0YXRpYyB2b2lkIG5mX2Zsb3dfbmF0X2lwdjZfdGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZiwKIAkJCQkgc3RydWN0IGluNl9hZGRyICphZGRyLAogCQkJCSBzdHJ1Y3QgaW42X2FkZHIgKm5ld19hZGRyLApAQCAtMTA2NSw4ICYjNDM7MTAwNCwxNiBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAlmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pOwogCiAJbXR1ID0gZmxvdy0mZ3Q7dHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICYjNDM7IGN0eC0mZ3Q7b2Zmc2V0OwotCWlmIChmbG93LSZndDt0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSkKJiM0MzsJc3dpdGNoIChmbG93LSZndDt0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuLmVuY2FwX3Byb3RvKSB7CiYjNDM7CWNhc2UgQUZfSU5FVDoKJiM0MzsJCW10dSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFGX0lORVQ2OgogCQltdHUgLT0gc2l6ZW9mKCppcDZoKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KIAogCWlmICh1bmxpa2VseShuZl9mbG93X2V4Y2VlZHNfbXR1KHNrYiwgbXR1KSkpCiAJCXJldHVybiAwOwpAQCAtMTEwMCw2ICYjNDM7MTA0NywyNSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAlyZXR1cm4gMTsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICoKJiM0MztuZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiYjNDM7CQkgICAgICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTsKJiM0MzsKJiM0MzsJaWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChjdHgsIHNrYiwgaHRvbnMoRVRIX1BfSVApKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlpZiAoY3R4LSZndDt0dW4ucHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7CiYjNDM7CQlpZiAobmZfZmxvd190dXBsZV9pcHY2KGN0eCwgc2tiLCAmYW1wO3R1cGxlKSAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CX0gZWxzZSBpZiAobmZfZmxvd190dXBsZV9pcChjdHgsIHNrYiwgJmFtcDt0dXBsZSkgJmx0OyAwKSB7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCAmYW1wO3R1cGxlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqCiBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAkJCSAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLApAQCAtMTExMCwxMiAmIzQzOzEwNzYsMTE4IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LAogCWlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woY3R4LCBza2IsIGh0b25zKEVUSF9QX0lQVjYpKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAobmZfZmxvd190dXBsZV9pcHY2KGN0eCwgc2tiLCAmYW1wO3R1cGxlKSAmbHQ7IDApCiYjNDM7CWlmIChjdHgtJmd0O3R1bi5wcm90byA9PSBJUFBST1RPX0lQSVApIHsKJiM0MzsJCWlmIChuZl9mbG93X3R1cGxlX2lwKGN0eCwgc2tiLCAmYW1wO3R1cGxlKSAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CX0gZWxzZSBpZiAobmZfZmxvd190dXBsZV9pcHY2KGN0eCwgc2tiLCAmYW1wO3R1cGxlKSAmbHQ7IDApIHsKIAkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KIAogCXJldHVybiBmbG93X29mZmxvYWRfbG9va3VwKGZsb3dfdGFibGUsICZhbXA7dHVwbGUpOwogfQogCiYjNDM7dW5zaWduZWQgaW50CiYjNDM7bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQljb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7CiYjNDM7CXN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2OwomIzQzOwlzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTsKJiM0MzsJZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjsKJiM0MzsJc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0gewomIzQzOwkJLmluCT0gc3RhdGUtJmd0O2luLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTsKJiM0MzsJc3RydWN0IGluNl9hZGRyICppcDZfZGFkZHI7CiYjNDM7CXN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7CiYjNDM7CXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwomIzQzOwlzdHJ1Y3QgcnRhYmxlICpydDsKJiM0MzsJX19iZTMyIGlwX2RhZGRyOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwl0dXBsZWhhc2ggPSBuZl9mbG93X29mZmxvYWRfbG9va3VwKCZhbXA7Y3R4LCBmbG93X3RhYmxlLCBza2IpOwomIzQzOwlpZiAoIXR1cGxlaGFzaCkKJiM0MzsJCXJldHVybiBORl9BQ0NFUFQ7CiYjNDM7CiYjNDM7CWlmIChjdHgudHVuLnByb3RvID09IElQUFJPVE9fSVBWNikKJiM0MzsJCXJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoJmFtcDtjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwKJiM0MzsJCQkJCQkgICBza2IpOwomIzQzOwllbHNlCiYjNDM7CQlyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZCgmYW1wO2N0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBORl9EUk9QOwomIzQzOwllbHNlIGlmIChyZXQgPT0gMCkKJiM0MzsJCXJldHVybiBORl9BQ0NFUFQ7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSh0dXBsZWhhc2gtJmd0O3R1cGxlLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9YRlJNKSkgewomIzQzOwkJcnQgPSBkc3RfcnRhYmxlKHR1cGxlaGFzaC0mZ3Q7dHVwbGUuZHN0X2NhY2hlKTsKJiM0MzsJCW1lbXNldChza2ItJmd0O2NiLCAwLCBzaXplb2Yoc3RydWN0IGluZXRfc2tiX3Bhcm0pKTsKJiM0MzsJCUlQQ0Ioc2tiKS0mZ3Q7aWlmID0gc2tiLSZndDtkZXYtJmd0O2lmaW5kZXg7CiYjNDM7CQlJUENCKHNrYiktJmd0O2ZsYWdzID0gSVBTS0JfRk9SV0FSREVEOwomIzQzOwkJcmV0dXJuIG5mX2Zsb3dfeG1pdF94ZnJtKHNrYiwgc3RhdGUsICZhbXA7cnQtJmd0O2RzdCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGlyID0gdHVwbGVoYXNoLSZndDt0dXBsZS5kaXI7CiYjNDM7CWZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7CiYjNDM7CW90aGVyX3R1cGxlID0gJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbIWRpcl0udHVwbGU7CiYjNDM7CWlwX2RhZGRyID0gb3RoZXJfdHVwbGUtJmd0O3NyY192NC5zX2FkZHI7CiYjNDM7CWlwNl9kYWRkciA9ICZhbXA7b3RoZXJfdHVwbGUtJmd0O3NyY192NjsKJiM0MzsKJiM0MzsJaWYgKG5mX2Zsb3dfdHVubmVsX3B1c2goc3RhdGUtJmd0O25ldCwgc2tiLCBvdGhlcl90dXBsZSwgJmFtcDtpcF9kYWRkciwKJiM0MzsJCQkJJmFtcDtpcDZfZGFkZHIpICZsdDsgMCkKJiM0MzsJCXJldHVybiBORl9EUk9QOwomIzQzOwomIzQzOwlzd2l0Y2ggKHR1cGxlaGFzaC0mZ3Q7dHVwbGUueG1pdF90eXBlKSB7CiYjNDM7CWNhc2UgRkxPV19PRkZMT0FEX1hNSVRfTkVJR0g6IHsKJiM0MzsJCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKJiM0MzsKJiM0MzsJCXhtaXQub3V0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc3RhdGUtJmd0O25ldCwgdHVwbGVoYXNoLSZndDt0dXBsZS5pZmlkeCk7CiYjNDM7CQlpZiAoIXhtaXQub3V0ZGV2KSB7CiYjNDM7CQkJZmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpOwomIzQzOwkJCXJldHVybiBORl9EUk9QOwomIzQzOwkJfQomIzQzOwkJaWYgKG90aGVyX3R1cGxlLSZndDt0dW4uZW5jYXBfcHJvdG8gPT0gQUZfSU5FVDYgfHwKJiM0MzsJCSAgICBjdHgudHVuLnByb3RvID09IElQUFJPVE9fSVBWNikgewomIzQzOwkJCXN0cnVjdCBydDZfaW5mbyAqcnQ2OwomIzQzOwomIzQzOwkJCXJ0NiA9IGRzdF9ydDZfaW5mbyh0dXBsZWhhc2gtJmd0O3R1cGxlLmRzdF9jYWNoZSk7CiYjNDM7CQkJbmVpZ2ggPSBpcF9uZWlnaF9ndzYocnQ2LSZndDtkc3QuZGV2LAomIzQzOwkJCQkJICAgICBydDZfbmV4dGhvcChydDYsIGlwNl9kYWRkcikpOwomIzQzOwkJCWRzdCA9ICZhbXA7cnQ2LSZndDtkc3Q7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJ0ID0gZHN0X3J0YWJsZSh0dXBsZWhhc2gtJmd0O3R1cGxlLmRzdF9jYWNoZSk7CiYjNDM7CQkJbmVpZ2ggPSBpcF9uZWlnaF9ndzQocnQtJmd0O2RzdC5kZXYsCiYjNDM7CQkJCQkgICAgIHJ0X25leHRob3AocnQsIGlwX2RhZGRyKSk7CiYjNDM7CQkJZHN0ID0gJmFtcDtydC0mZ3Q7ZHN0OwomIzQzOwkJfQomIzQzOwkJaWYgKElTX0VSUihuZWlnaCkpIHsKJiM0MzsJCQlmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7CiYjNDM7CQkJcmV0dXJuIE5GX0RST1A7CiYjNDM7CQl9CiYjNDM7CQl4bWl0LmRlc3QgPSBuZWlnaC0mZ3Q7aGE7CiYjNDM7CQlza2JfZHN0X3NldF9ub3JlZihza2IsIGRzdCk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwljYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX0RJUkVDVDoKJiM0MzsJCXhtaXQub3V0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc3RhdGUtJmd0O25ldCwgdHVwbGVoYXNoLSZndDt0dXBsZS5vdXQuaWZpZHgpOwomIzQzOwkJaWYgKCF4bWl0Lm91dGRldikgewomIzQzOwkJCWZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTsKJiM0MzsJCQlyZXR1cm4gTkZfRFJPUDsKJiM0MzsJCX0KJiM0MzsJCXhtaXQuZGVzdCA9IHR1cGxlaGFzaC0mZ3Q7dHVwbGUub3V0LmhfZGVzdDsKJiM0MzsJCXhtaXQuc291cmNlID0gdHVwbGVoYXNoLSZndDt0dXBsZS5vdXQuaF9zb3VyY2U7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCVdBUk5fT05fT05DRSgxKTsKJiM0MzsJCXJldHVybiBORl9EUk9QOwomIzQzOwl9CiYjNDM7CXhtaXQudHVwbGUgPSBvdGhlcl90dXBsZTsKJiM0MzsJeG1pdC5uZWVkc19nc29fc2VnbWVudCA9IHR1cGxlaGFzaC0mZ3Q7dHVwbGUubmVlZHNfZ3NvX3NlZ21lbnQ7CiYjNDM7CiYjNDM7CXJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQoc3RhdGUtJmd0O25ldCwgc2tiLCAmYW1wO3htaXQpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXBfaG9vayk7CiYjNDM7CiB1bnNpZ25lZCBpbnQKIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKQpAQCAtMTEzMiwxMyAmIzQzOzEyMDQsMTggQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7CiAJc3RydWN0IHJ0Nl9pbmZvICpydDsKJiM0MzsJX19iZTMyIGlwX2RhZGRyOwogCWludCByZXQ7CiAKIAl0dXBsZWhhc2ggPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoJmFtcDtjdHgsIGZsb3dfdGFibGUsIHNrYik7CiAJaWYgKHR1cGxlaGFzaCA9PSBOVUxMKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCi0JcmV0ID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZCgmYW1wO2N0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpOwomIzQzOwlpZiAoY3R4LnR1bi5wcm90byA9PSBJUFBST1RPX0lQSVApCiYjNDM7CQlyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZCgmYW1wO2N0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpOwomIzQzOwllbHNlCiYjNDM7CQlyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKCZhbXA7Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsCiYjNDM7CQkJCQkJICAgc2tiKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIE5GX0RST1A7CiAJZWxzZSBpZiAocmV0ID09IDApCkBAIC0xMTU1LDI4ICYjNDM7MTIzMiw0NCBAQCBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJZGlyID0gdHVwbGVoYXNoLSZndDt0dXBsZS5kaXI7CiAJZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTsKIAlvdGhlcl90dXBsZSA9ICZhbXA7Zmxvdy0mZ3Q7dHVwbGVoYXNoWyFkaXJdLnR1cGxlOwomIzQzOwlpcF9kYWRkciA9IG90aGVyX3R1cGxlLSZndDtzcmNfdjQuc19hZGRyOwogCWlwNl9kYWRkciA9ICZhbXA7b3RoZXJfdHVwbGUtJmd0O3NyY192NjsKIAotCWlmIChuZl9mbG93X3R1bm5lbF92Nl9wdXNoKHN0YXRlLSZndDtuZXQsIHNrYiwgb3RoZXJfdHVwbGUsCi0JCQkJICAgJmFtcDtpcDZfZGFkZHIpICZsdDsgMCkKJiM0MzsJaWYgKG5mX2Zsb3dfdHVubmVsX3B1c2goc3RhdGUtJmd0O25ldCwgc2tiLCBvdGhlcl90dXBsZSwgJmFtcDtpcF9kYWRkciwKJiM0MzsJCQkJJmFtcDtpcDZfZGFkZHIpICZsdDsgMCkKIAkJcmV0dXJuIE5GX0RST1A7CiAKIAlzd2l0Y2ggKHR1cGxlaGFzaC0mZ3Q7dHVwbGUueG1pdF90eXBlKSB7Ci0JY2FzZSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSDoKLQkJcnQgPSBkc3RfcnQ2X2luZm8odHVwbGVoYXNoLSZndDt0dXBsZS5kc3RfY2FjaGUpOwomIzQzOwljYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIOiB7CiYjNDM7CQlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CiYjNDM7CiAJCXhtaXQub3V0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc3RhdGUtJmd0O25ldCwgdHVwbGVoYXNoLSZndDt0dXBsZS5pZmlkeCk7CiAJCWlmICgheG1pdC5vdXRkZXYpIHsKIAkJCWZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTsKIAkJCXJldHVybiBORl9EUk9QOwogCQl9Ci0JCW5laWdoID0gaXBfbmVpZ2hfZ3c2KHJ0LSZndDtkc3QuZGV2LCBydDZfbmV4dGhvcChydCwgaXA2X2RhZGRyKSk7CiYjNDM7CQlpZiAob3RoZXJfdHVwbGUtJmd0O3R1bi5lbmNhcF9wcm90byA9PSBBRl9JTkVUIHx8CiYjNDM7CQkgICAgY3R4LnR1bi5wcm90byA9PSBJUFBST1RPX0lQSVApIHsKJiM0MzsJCQlzdHJ1Y3QgcnRhYmxlICpydDQ7CiYjNDM7CiYjNDM7CQkJcnQ0ID0gZHN0X3J0YWJsZSh0dXBsZWhhc2gtJmd0O3R1cGxlLmRzdF9jYWNoZSk7CiYjNDM7CQkJbmVpZ2ggPSBpcF9uZWlnaF9ndzQocnQ0LSZndDtkc3QuZGV2LAomIzQzOwkJCQkJICAgICBydF9uZXh0aG9wKHJ0NCwgaXBfZGFkZHIpKTsKJiM0MzsJCQlkc3QgPSAmYW1wO3J0NC0mZ3Q7ZHN0OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlydCA9IGRzdF9ydDZfaW5mbyh0dXBsZWhhc2gtJmd0O3R1cGxlLmRzdF9jYWNoZSk7CiYjNDM7CQkJbmVpZ2ggPSBpcF9uZWlnaF9ndzYocnQtJmd0O2RzdC5kZXYsCiYjNDM7CQkJCQkgICAgIHJ0Nl9uZXh0aG9wKHJ0LCBpcDZfZGFkZHIpKTsKJiM0MzsJCQlkc3QgPSAmYW1wO3J0LSZndDtkc3Q7CiYjNDM7CQl9CiAJCWlmIChJU19FUlIobmVpZ2gpKSB7CiAJCQlmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7CiAJCQlyZXR1cm4gTkZfRFJPUDsKIAkJfQogCQl4bWl0LmRlc3QgPSBuZWlnaC0mZ3Q7aGE7Ci0JCXNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgJmFtcDtydC0mZ3Q7ZHN0KTsKJiM0MzsJCXNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgZHN0KTsKIAkJYnJlYWs7CiYjNDM7CX0KIAljYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX0RJUkVDVDoKIAkJeG1pdC5vdXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShzdGF0ZS0mZ3Q7bmV0LCB0dXBsZWhhc2gtJmd0O3R1cGxlLm91dC5pZmlkeCk7CiAJCWlmICgheG1pdC5vdXRkZXYpIHsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jCmluZGV4IDk4YzAzYjQ4N2Y1MjExLi41ZTg0YjdmMThhMjY3ZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jCkBAIC00NSw3ICYjNDM7NDUsOCBAQCBzdGF0aWMgYm9vbCBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiBzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkJCSAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwgdTggKmhhLAomIzQzOwkJCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCiYjNDM7CQkJCSAgICAgdTggKmhhLCBfX2JlMTYgZXRoZXJfdHlwZSwKIAkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKQogewogCWNvbnN0IHZvaWQgKmRhZGRyID0gJmFtcDtjdC0mZ3Q7dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MzsKQEAgLTcyLDcgJiM0Mzs3Myw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsCiAJCXJldHVybiAtMTsKIAogb3V0OgotCXJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBoYSwgc3RhY2spOwomIzQzOwlyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIGV0aGVyX3R5cGUsIHN0YWNrKTsKIH0KIAogc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gewpAQCAtMTI4LDYgJiM0MzsxMjksNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLAogCQkJCWluZm8tJmd0O3R1bi5zcmNfdjYgPSBwYXRoLSZndDt0dW4uc3JjX3Y2OwogCQkJCWluZm8tJmd0O3R1bi5kc3RfdjYgPSBwYXRoLSZndDt0dW4uZHN0X3Y2OwogCQkJCWluZm8tJmd0O3R1bi5sM19wcm90byA9IHBhdGgtJmd0O3R1bi5sM19wcm90bzsKJiM0MzsJCQkJaW5mby0mZ3Q7dHVuLmVuY2FwX3Byb3RvID0gcGF0aC0mZ3Q7dHVuLmVuY2FwX3Byb3RvOwogCQkJCWluZm8tJmd0O251bV90dW5zJiM0MzsmIzQzOzsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGluZm8tJmd0O251bV9lbmNhcHMgJmd0Oz0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpCkBAIC0yMTQsMTIgJiM0MzsyMTYsMTMgQEAgc3RhdGljIGludCBuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogCXN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3QgPSBOVUxMOwogCXN0cnVjdCBmbG93aSBmbCA9IHt9OwogCi0Jc3dpdGNoIChuZnRfcGYocGt0KSkgewomIzQzOwlzd2l0Y2ggKHR1bi0mZ3Q7ZW5jYXBfcHJvdG8pIHsKIAljYXNlIE5GUFJPVE9fSVBWNDoKIAkJZmwudS5pcDQuZGFkZHIgPSB0dW4tJmd0O2RzdF92NC5zX2FkZHI7CiAJCWZsLnUuaXA0LnNhZGRyID0gdHVuLSZndDtzcmNfdjQuc19hZGRyOwogCQlmbC51LmlwNC5mbG93aTRfaWlmID0gbmZ0X2luKHBrdCktJmd0O2lmaW5kZXg7Ci0JCWZsLnUuaXA0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwX2hkcihwa3QtJmd0O3NrYikpOwomIzQzOwkJaWYgKG5mdF9wZihwa3QpID09IE5GUFJPVE9fSVBWNCkKJiM0MzsJCQlmbC51LmlwNC5mbG93aTRfZHNjcCA9IGlwNGhfZHNjcChpcF9oZHIocGt0LSZndDtza2IpKTsKIAkJZmwudS5pcDQuZmxvd2k0X21hcmsgPSBwa3QtJmd0O3NrYi0mZ3Q7bWFyazsKIAkJZmwudS5pcDQuZmxvd2k0X2ZsYWdzID0gRkxPV0lfRkxBR19BTllTUkM7CiAJCWJyZWFrOwpAQCAtMjI3LDEzICYjNDM7MjMwLDE0IEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKIAkJZmwudS5pcDYuZGFkZHIgPSB0dW4tJmd0O2RzdF92NjsKIAkJZmwudS5pcDYuc2FkZHIgPSB0dW4tJmd0O3NyY192NjsKIAkJZmwudS5pcDYuZmxvd2k2X2lpZiA9IG5mdF9pbihwa3QpLSZndDtpZmluZGV4OwotCQlmbC51LmlwNi5mbG93bGFiZWwgPSBpcDZfZmxvd2luZm8oaXB2Nl9oZHIocGt0LSZndDtza2IpKTsKJiM0MzsJCWlmIChuZnRfcGYocGt0KSA9PSBORlBST1RPX0lQVjYpCiYjNDM7CQkJZmwudS5pcDYuZmxvd2xhYmVsID0gaXA2X2Zsb3dpbmZvKGlwdjZfaGRyKHBrdC0mZ3Q7c2tiKSk7CiAJCWZsLnUuaXA2LmZsb3dpNl9tYXJrID0gcGt0LSZndDtza2ItJmd0O21hcms7CiAJCWZsLnUuaXA2LmZsb3dpNl9mbGFncyA9IEZMT1dJX0ZMQUdfQU5ZU1JDOwogCQlicmVhazsKIAl9CiAKLQluZl9yb3V0ZShuZnRfbmV0KHBrdCksICZhbXA7dHVuX2RzdCwgJmFtcDtmbCwgZmFsc2UsIG5mdF9wZihwa3QpKTsKJiM0MzsJbmZfcm91dGUobmZ0X25ldChwa3QpLCAmYW1wO3R1bl9kc3QsICZhbXA7ZmwsIGZhbHNlLCB0dW4tJmd0O2VuY2FwX3Byb3RvKTsKIAlpZiAoIXR1bl9kc3QpCiAJCXJldHVybiAtRU5PRU5UOwogCkBAIC0yNTUsNyAmIzQzOzI1OSw4IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiAJdW5zaWduZWQgY2hhciBoYVtFVEhfQUxFTl07CiAJaW50IGk7CiAKLQlpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgJmFtcDtzdGFjaykgJmx0OyAwIHx8CiYjNDM7CWlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHJvdXRlLCBkc3QsIGN0LCBkaXIsIGhhLCBwa3QtJmd0O2V0aGVydHlwZSwKJiM0MzsJCQkJICAgICAgJmFtcDtzdGFjaykgJmx0OyAwIHx8CiAJICAgIG5mdF9kZXZfcGF0aF9pbmZvKCZhbXA7c3RhY2ssICZhbXA7aW5mbywgaGEsICZhbXA7ZnQtJmd0O2RhdGEpICZsdDsgMCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKQEAgLTI3Niw2ICYjNDM7MjgxLDcgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKIAkJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLnR1bi5zcmNfdjYgPSBpbmZvLnR1bi5kc3RfdjY7CiAJCXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi50dW4uZHN0X3Y2ID0gaW5mby50dW4uc3JjX3Y2OwogCQlyb3V0ZS0mZ3Q7dHVwbGVbIWRpcl0uaW4udHVuLmwzX3Byb3RvID0gaW5mby50dW4ubDNfcHJvdG87CiYjNDM7CQlyb3V0ZS0mZ3Q7dHVwbGVbIWRpcl0uaW4udHVuLmVuY2FwX3Byb3RvID0gaW5mby50dW4uZW5jYXBfcHJvdG87CiAJCXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi5udW1fdHVucyA9IGluZm8ubnVtX3R1bnM7CiAJfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29uZmlnCmluZGV4IGMzYzEyMWI2ZjMwMGE5Li5hMjEyYjllZGJjZDk3ZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWcKQEAgLTM1LDYgJiM0MzszNSw3IEBAIENPTkZJR19JUF9TQ1RQPW0KIENPTkZJR19JUFY2PXkKIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUz15CiBDT05GSUdfSVBWNl9UVU5ORUw9bQomIzQzO0NPTkZJR19JUFY2X1NJVD1tCiBDT05GSUdfSVBfVlM9bQogQ09ORklHX0lQX1ZTX1BST1RPX1RDUD15CiBDT05GSUdfSVBfVlNfUlI9bQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoCmluZGV4IDA4YWQwNzUwMGU4YTcxLi40NmJkMDgwMTA4YmUzNiAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaApAQCAtNTc5LDkgJiM0Mzs1NzksOCBAQCBpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0ICYjMzQ7JG5zMSYjMzQ7ICYjMzQ7JG5zMiYjMzQ7IDEgJiMzNDsmIzM0OzsgdGhlbgogCWlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCBsaXN0IHJ1bGVzZXQKIGZpCiAKLSMgSVBJUCB0dW5uZWwgdGVzdDoKLSMgQWRkIElQSVAgdHVubmVsIGludGVyZmFjZXMgYW5kIGNoZWNrIGZsb3d0YWJsZSBhY2NlbGVyYXRpb24uCi10ZXN0X2lwaXAoKSB7CiYjNDM7IyBJUCB0dW5uZWwgdGVzdHM6CiYjNDM7dGVzdF9pcF90bmxzKCkgewogaWYgISBpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBsaW5rIGFkZCBuYW1lIHR1bjAgdHlwZSBpcGlwIFwKICAgICAgbG9jYWwgMTkyLjE2OC4xMC4xIHJlbW90ZSAxOTIuMTY4LjEwLjIgJmd0Oy9kZXYvbnVsbDt0aGVuCiAJZWNobyAmIzM0O1NLSVA6IGNvdWxkIG5vdCBhZGQgaXBpcCB0dW5uZWwmIzM0OwpAQCAtNTk0LDcgJiM0Mzs1OTMsMTMgQEAgaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgc3lzY3RsIG5ldC5pcHY0LmNvbmYudHVuMC5mb3J3YXJkaW5nPTEgJmd0OyAvZGV2L251bGwKIAogaXAgLW5ldCAmIzM0OyRuc3IxJiMzNDsgbGluayBhZGQgbmFtZSB0dW42IHR5cGUgaXA2dG5sIGxvY2FsIGZlZTE6Mjo6MSByZW1vdGUgZmVlMToyOjoyIGVuY2FwbGltaXQgbm9uZQogaXAgLW5ldCAmIzM0OyRuc3IxJiMzNDsgbGluayBzZXQgdHVuNiB1cAomIzQzO2lwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGFkZHIgYWRkIDE5Mi4xNjguMjEwLjEvMjQgZGV2IHR1bjYKIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGFkZHIgYWRkIGZlZTE6Mzo6MS82NCBkZXYgdHVuNiBub2RhZAomIzQzO2lwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjYuZm9yd2FyZGluZz0xICZndDsgL2Rldi9udWxsCiYjNDM7CiYjNDM7aXAgLW5ldCAmIzM0OyRuc3IxJiMzNDsgbGluayBhZGQgbmFtZSBzaXQxIHR5cGUgc2l0IGxvY2FsIDE5Mi4xNjguMTAuMSByZW1vdGUgMTkyLjE2OC4xMC4yIHR0bCAyNTUKJiM0MztpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBsaW5rIHNldCBzaXQxIHVwCiYjNDM7aXAgLW5ldCAmIzM0OyRuc3IxJiMzNDsgYWRkciBhZGQgZmUwMTozOjoxLzY0IGRldiBzaXQxIG5vZGFkCiAKIGlwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IGxpbmsgYWRkIG5hbWUgdHVuMCB0eXBlIGlwaXAgbG9jYWwgMTkyLjE2OC4xMC4yIHJlbW90ZSAxOTIuMTY4LjEwLjEKIGlwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IGxpbmsgc2V0IHR1bjAgdXAKQEAgLTYwMyw3ICYjNDM7NjA4LDEzIEBAIGlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMiYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjAuZm9yd2FyZGluZz0xICZndDsgL2Rldi9udWxsCiAKIGlwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IGxpbmsgYWRkIG5hbWUgdHVuNiB0eXBlIGlwNnRubCBsb2NhbCBmZWUxOjI6OjIgcmVtb3RlIGZlZTE6Mjo6MSBlbmNhcGxpbWl0IG5vbmUgfHwgcmV0PTEKIGlwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IGxpbmsgc2V0IHR1bjYgdXAKJiM0MztpcCAtbmV0ICYjMzQ7JG5zcjImIzM0OyBhZGRyIGFkZCAxOTIuMTY4LjIxMC4yLzI0IGRldiB0dW42CiBpcCAtbmV0ICYjMzQ7JG5zcjImIzM0OyBhZGRyIGFkZCBmZWUxOjM6OjIvNjQgZGV2IHR1bjYgbm9kYWQKJiM0MztpcCBuZXRucyBleGVjICYjMzQ7JG5zcjImIzM0OyBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW42LmZvcndhcmRpbmc9MSAmZ3Q7IC9kZXYvbnVsbAomIzQzOwomIzQzO2lwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IGxpbmsgYWRkIG5hbWUgc2l0MSB0eXBlIHNpdCBsb2NhbCAxOTIuMTY4LjEwLjIgcmVtb3RlIDE5Mi4xNjguMTAuMSB0dGwgMjU1CiYjNDM7aXAgLW5ldCAmIzM0OyRuc3IyJiMzNDsgbGluayBzZXQgc2l0MSB1cAomIzQzO2lwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IGFkZHIgYWRkIGZlMDE6Mzo6Mi82NCBkZXYgc2l0MSBub2RhZAogCiBpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyByb3V0ZSBjaGFuZ2UgZGVmYXVsdCB2aWEgMTkyLjE2OC4xMDAuMgogaXAgLW5ldCAmIzM0OyRuc3IyJiMzNDsgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMTAwLjEKQEAgLTYxOSw2ICYjNDM7NjMwLDcgQEAgaXAgLTYgLW5ldCAmIzM0OyRuczImIzM0OyByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZGVhZDoyOjoxCiAKIGlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICYjMzk7bWV0YSBvaWYgdHVuMCBhY2NlcHQmIzM5OwogaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiB0dW42IGFjY2VwdCYjMzk7CiYjNDM7aXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiBzaXQxIGFjY2VwdCYjMzk7CiBpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcCiAJJiMzOTttZXRhIG9pZiAmIzM0O3ZldGgwJiMzNDsgdGNwIHNwb3J0IDEyMzQ1IGN0IG1hcmsgc2V0IDEgZmxvdyBhZGQgQGYxIGNvdW50ZXIgbmFtZSByb3V0ZWRfcmVwbCBhY2NlcHQmIzM5OwogCkBAIC02MzYsNiAmIzQzOzY0OCwyOCBAQCBlbHNlCiAJcmV0PTEKIGZpCiAKJiM0MztpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyByb3V0ZSBjaGFuZ2UgZGVmYXVsdCB2aWEgMTkyLjE2OC4yMTAuMgomIzQzO2lwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIxMC4xCiYjNDM7CiYjNDM7aWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCAmIzM0OyRuczEmIzM0OyAmIzM0OyRuczImIzM0OyAxICYjMzQ7SVA0SVA2IHR1bm5lbCYjMzQ7OyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBJUDRJUDYgdHVubmVsJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IGxpc3QgcnVsZXNldAomIzQzOwlyZXQ9MQomIzQzO2ZpCiYjNDM7CiYjNDM7aXAgLTYgLW5ldCAmIzM0OyRuc3IxJiMzNDsgcm91dGUgZGVsZXRlIGRlZmF1bHQKJiM0MztpcCAtNiAtbmV0ICYjMzQ7JG5zcjEmIzM0OyByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmUwMTozOjoyCiYjNDM7aXAgLTYgLW5ldCAmIzM0OyRuc3IyJiMzNDsgcm91dGUgZGVsZXRlIGRlZmF1bHQKJiM0MztpcCAtNiAtbmV0ICYjMzQ7JG5zcjImIzM0OyByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmUwMTozOjoxCiYjNDM7CiYjNDM7aWYgdGVzdF90Y3BfZm9yd2FyZGluZyAmIzM0OyRuczEmIzM0OyAmIzM0OyRuczImIzM0OyAxIDYgJiMzNDtbZGVhZDoyOjo5OV0mIzM0OyAxMjM0NTsgdGhlbgomIzQzOwllY2hvICYjMzQ7UEFTUzogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIFNJVCB0dW5uZWwmIzM0OwomIzQzO2Vsc2UKJiM0MzsJZWNobyAmIzM0O0ZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIFNJVCB0dW5uZWwmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgbGlzdCBydWxlc2V0CiYjNDM7CXJldD0xCiYjNDM7ZmkKJiM0MzsKICMgQ3JlYXRlIHZsYW4gdGFnZ2VkIGRldmljZXMgZm9yIElQSVAgdHJhZmZpYy4KIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSB2ZXRoMS4xMCB0eXBlIHZsYW4gaWQgMTAKIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGxpbmsgc2V0IHZldGgxLjEwIHVwCkBAIC02NTMsMTEgJiM0Mzs2ODcsMTggQEAgaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiB0dW4wLjEwIGEKIAogaXAgLW5ldCAmIzM0OyRuc3IxJiMzNDsgbGluayBhZGQgbmFtZSB0dW42LjEwIHR5cGUgaXA2dG5sIGxvY2FsIGZlZTE6NDo6MSByZW1vdGUgZmVlMTo0OjoyIGVuY2FwbGltaXQgbm9uZQogaXAgLW5ldCAmIzM0OyRuc3IxJiMzNDsgbGluayBzZXQgdHVuNi4xMCB1cAomIzQzO2lwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGFkZHIgYWRkIDE5Mi4xNjguMjIwLjEvMjQgZGV2IHR1bjYuMTAKIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGFkZHIgYWRkIGZlZTE6NTo6MS82NCBkZXYgdHVuNi4xMCBub2RhZAomIzQzO2lwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjYvMTAuZm9yd2FyZGluZz0xICZndDsgL2Rldi9udWxsCiBpcCAtNiAtbmV0ICYjMzQ7JG5zcjEmIzM0OyByb3V0ZSBkZWxldGUgZGVmYXVsdAogaXAgLTYgLW5ldCAmIzM0OyRuc3IxJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlZTE6NTo6MgogaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiB0dW42LjEwIGFjY2VwdCYjMzk7CiAKJiM0MztpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBsaW5rIGFkZCBuYW1lIHNpdDEuMTAgdHlwZSBzaXQgbG9jYWwgMTkyLjE2OC4yMC4xIHJlbW90ZSAxOTIuMTY4LjIwLjIgdHRsIDI1NQomIzQzO2lwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGxpbmsgc2V0IHNpdDEuMTAgdXAKJiM0MztpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBhZGRyIGFkZCBmZTAxOjU6OjEvNjQgZGV2IHNpdDEuMTAgbm9kYWQKJiM0MztpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAmIzM5O21ldGEgb2lmIHNpdDEuMTAgYWNjZXB0JiMzOTsKJiM0MzsKIGlwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IGxpbmsgYWRkIGxpbmsgdmV0aDAgbmFtZSB2ZXRoMC4xMCB0eXBlIHZsYW4gaWQgMTAKIGlwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IGxpbmsgc2V0IHZldGgwLjEwIHVwCiBpcCAtbmV0ICYjMzQ7JG5zcjImIzM0OyBhZGRyIGFkZCAxOTIuMTY4LjIwLjIvMjQgZGV2IHZldGgwLjEwCkBAIC02NzIsNyAmIzQzOzcxMywxNCBAQCBpcCBuZXRucyBleGVjICYjMzQ7JG5zcjImIzM0OyBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW4wLzEwLmZvcndhcmRpbmc9MSAmZ3Q7IC9kZXYvbnVsbAogCiBpcCAtbmV0ICYjMzQ7JG5zcjImIzM0OyBsaW5rIGFkZCBuYW1lIHR1bjYuMTAgdHlwZSBpcDZ0bmwgbG9jYWwgZmVlMTo0OjoyIHJlbW90ZSBmZWUxOjQ6OjEgZW5jYXBsaW1pdCBub25lIHx8IHJldD0xCiBpcCAtbmV0ICYjMzQ7JG5zcjImIzM0OyBsaW5rIHNldCB0dW42LjEwIHVwCiYjNDM7aXAgLW5ldCAmIzM0OyRuc3IyJiMzNDsgYWRkciBhZGQgMTkyLjE2OC4yMjAuMi8yNCBkZXYgdHVuNi4xMAogaXAgLW5ldCAmIzM0OyRuc3IyJiMzNDsgYWRkciBhZGQgZmVlMTo1OjoyLzY0IGRldiB0dW42LjEwIG5vZGFkCiYjNDM7aXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IyJiMzNDsgc3lzY3RsIG5ldC5pcHY0LmNvbmYudHVuNi8xMC5mb3J3YXJkaW5nPTEgJmd0OyAvZGV2L251bGwKJiM0MzsKJiM0MztpcCAtbmV0ICYjMzQ7JG5zcjImIzM0OyBsaW5rIGFkZCBuYW1lIHNpdDEuMTAgdHlwZSBzaXQgbG9jYWwgMTkyLjE2OC4yMC4yIHJlbW90ZSAxOTIuMTY4LjIwLjEgdHRsIDI1NQomIzQzO2lwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IGxpbmsgc2V0IHNpdDEuMTAgdXAKJiM0MztpcCAtbmV0ICYjMzQ7JG5zcjImIzM0OyBhZGRyIGFkZCBmZTAxOjU6OjIvNjQgZGV2IHNpdDEuMTAgbm9kYWQKJiM0MzsKIGlwIC02IC1uZXQgJiMzNDskbnNyMiYjMzQ7IHJvdXRlIGRlbGV0ZSBkZWZhdWx0CiBpcCAtNiAtbmV0ICYjMzQ7JG5zcjImIzM0OyByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmVlMTo1OjoxCiAKQEAgLTY5MCw2ICYjNDM7NzM4LDI4IEBAIGVsc2UKIAlyZXQ9MQogZmkKIAomIzQzO2lwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIyMC4yCiYjNDM7aXAgLW5ldCAmIzM0OyRuc3IyJiMzNDsgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMjIwLjEKJiM0MzsKJiM0MztpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0ICYjMzQ7JG5zMSYjMzQ7ICYjMzQ7JG5zMiYjMzQ7IDEgJiMzNDtJUDRJUDYgdHVubmVsIG92ZXIgdmxhbiYjMzQ7OyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBJUDRJUDYgdHVubmVsIG92ZXIgdmxhbiYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCBsaXN0IHJ1bGVzZXQKJiM0MzsJcmV0PTEKJiM0MztmaQomIzQzOwomIzQzO2lwIC02IC1uZXQgJiMzNDskbnNyMSYjMzQ7IHJvdXRlIGRlbGV0ZSBkZWZhdWx0CiYjNDM7aXAgLTYgLW5ldCAmIzM0OyRuc3IxJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlMDE6NTo6MgomIzQzO2lwIC02IC1uZXQgJiMzNDskbnNyMiYjMzQ7IHJvdXRlIGRlbGV0ZSBkZWZhdWx0CiYjNDM7aXAgLTYgLW5ldCAmIzM0OyRuc3IyJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlMDE6NTo6MQomIzQzOwomIzQzO2lmIHRlc3RfdGNwX2ZvcndhcmRpbmcgJiMzNDskbnMxJiMzNDsgJiMzNDskbnMyJiMzNDsgMSA2ICYjMzQ7W2RlYWQ6Mjo6OTldJiMzNDsgMTIzNDU7IHRoZW4KJiM0MzsJZWNobyAmIzM0O1BBU1M6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiBTSVQgdHVubmVsIG92ZXIgdmxhbiYjMzQ7CiYjNDM7ZWxzZQomIzQzOwllY2hvICYjMzQ7RkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggU0lUIHR1bm5lbCBvdmVyIHZsYW4mIzM0OyAxJmd0OyZhbXA7MgomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgbGlzdCBydWxlc2V0CiYjNDM7CXJldD0xCiYjNDM7ZmkKJiM0MzsKICMgUmVzdG9yZSB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbgogaXAgLW5ldCAmIzM0OyRuc3IxJiMzNDsgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMTAuMgogaXAgLW5ldCAmIzM0OyRuc3IyJiMzNDsgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMTAuMQpAQCAtNzgyLDcgJiM0Mzs4NTIsNyBAQCBpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBhZGRyIGFkZCBkZWFkOjE6OjEvNjQgZGV2IHZldGgwIG5vZGFkCiBpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBsaW5rIHNldCB1cCBkZXYgdmV0aDAKIH0KIAotdGVzdF9pcGlwCiYjNDM7dGVzdF9pcF90bmxzCiAKIHRlc3RfYnJpZGdlCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3NjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgRmxvd3RhYmxlIE9mZmxvYWQgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcywgYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzLCBzcGFubmluZyBxdWl0ZSBhIGZldyBmaWxlcy4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgZHJpdmVycyBmb3IgYWlyb2hhIGFuZCBtZWRpYXRlayBQUEUgKHBhY2tldCBwcm9jZXNzaW5nIGVuZ2luZSkgaW1wbGVtZW50YXRpb25zLCBjb3JlIG5ldHdvcmtpbmcgY29kZSwgYW5kIG5ldGZpbHRlciBpdHNlbGYsIGluY2x1ZGluZyB0aGUgZmxvd3RhYmxlIG9mZmxvYWQuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWJvdXQgYWRkaW5nIHN1cHBvcnQgZm9yIElQLWluLUlQLCBJUHY2LWluLUlQdjQgKFNJVCksIGFuZCBJUHY0LWluLUlQdjYgdHVubmVscyB3aXRoaW4gdGhlIG5ldGZpbHRlciBmbG93dGFibGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgbWFqb3Igb25lLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBnb29kIGZ1enppbmcgY2FtcGFpZ24uCgpGaXJzdCwgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IHRoaXMgYWN0dWFsbHkgZG9lcy4gSXQgbG9va3MgbGlrZSBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBpcyBiZWluZyB1cGRhdGVkIHRvIHRha2UgYW4gYGV0aGVyX3R5cGVgIGFyZ3VtZW50LiBBbHNvLCBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAgaXMgYmVpbmcgbW9kaWZpZWQsIGFuZCBhIG5ldyBmdW5jdGlvbiwgYGlwaXA2X3R1bm5lbF9maWxsX2ZvcndhcmRfcGF0aGAgaXMgYmVpbmcgYWRkZWQuICBgbmZfZmxvd190YWJsZV9pcC5jYCBpcyBnZXR0aW5nIHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBlbmNhcHN1bGF0aW9uIHByb3RvY29scyBgSVBQUk9UT19JUElQYCBhbmQgYElQUFJPVE9fSVBWNmAuCgpOb3csIGZvciBzcGVjaWZpYyB0YXJnZXRzLCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgYWN0dWFsbHkgbW9kaWZpZWQgb3IgaW50cm9kdWNlZC4gSGVyZSYjMzk7cyB3aGF0IEkgc2VlOgoqICAgQSBidW5jaCBvZiBjaGFuZ2VzIGluIHRoZSBQUEUgZHJpdmVyczogYGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mb2AsIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYCwgYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgLCBgbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mb2AsIGBtdGtfZmxvd19zZXRfb3V0cHV0X2RldmljZWAsIGFuZCBgbXRrX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYC4gVGhvc2Ugd2lsbCBiZSBwbGF0Zm9ybS1zcGVjaWZpYywgc28gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBhY2NvdW50IGZvciB0aGVtLgoqICAgVGhlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnM6IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAsIGBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYW5kIHRoZSBuZXcgYGlwaXA2X3R1bm5lbF9maWxsX2ZvcndhcmRfcGF0aGAuCiogICBBbmQgYSB3aG9sZSBzZXQgb2YgbmV0ZmlsdGVyIGZ1bmN0aW9uczogYGZsb3dfb2ZmbG9hZF9kc3RfY29va2llYCwgYGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlYCwgYG5mX2Zsb3dfdHVwbGVfZW5jYXBgLCBgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvYCwgYG5mX2Zsb3dfaXA2X3R1bm5lbF9wcm90b2AsIGBuZl9mbG93X2lwX3R1bm5lbF9wb3BgLCBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgLCBgbmZfZmxvd190dW5uZWxfaXBfcHVzaGAsIGBuZl9mbG93X3R1bm5lbF9pcDZfcHVzaGAsIGBuZl9mbG93X3R1bm5lbF9wdXNoYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgLCBgbmZfZmxvd19vZmZsb2FkX2xvb2t1cGAsIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXBgLCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AsIGBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYG5mdF9kZXZfcGF0aF9pbmZvYCwgYG5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGVgLCBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgLiBUaGlzIGlzIGEgbG90IHRvIHRlc3QsIHNvIEkmIzM5O2xsIGhhdmUgdG8gY29uc2lkZXIgd2hpY2ggYXJlIG1vc3QgbGlrZWx5IHRvIGJlIGV4cG9zZWQuCgpOZXh0LCBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6IGBDT05GSUdfTkZfRkxPV19UQUJMRWAsIGBDT05GSUdfSVBWNl9TSVRgLCBgQ09ORklHX0lQVjZfVFVOTkVMYCwgYENPTkZJR19ORVRfSVBJUGAsIGFuZCBwb3RlbnRpYWxseSBgQ09ORklHX05FVF9JUEdSRWAuIFRpbWUgdG8gdmVyaWZ5LgoKQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBuZXQvaXB2Ni9zaXQuY2AgaXMgaW5kZWVkIHRpZWQgdG8gYENPTkZJR19JUFY2X1NJVGAsIGBuZXQvaXB2NC9pcGlwLmNgIGlzIGVuYWJsZWQgYnkgYENPTkZJR19ORVRfSVBJUGAsIGFuZCBgbmV0L2lwdjYvaXA2X3R1bm5lbC5jYCBieSBgQ09ORklHX0lQVjZfVFVOTkVMYC4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYCBzaG91bGQgYmUgZW5hYmxlZCB2aWEgYENPTkZJR19ORl9GTE9XX1RBQkxFYC4gTm93LCBJIHNob3VsZCBoYXZlIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqLS4qaXBpcC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX0lQX01ST1VURV9DT01NT04pICYjNDM7PSBpcG1yX2Jhc2Uub1xubmV0L2lwdjQvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX05FVF9JUElQKSAmIzQzOz0gaXBpcC5vXG5uZXQvaXB2NC9NYWtlZmlsZS0yNi1ncmUteSA6PSBncmVfZGVtdXgub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzQ3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGF0OgoKKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gVmFyaWFibGU6IGBDT05GSUdfTkVUX0lQSVBgKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIGBDT05GSUdfTkVUX0lQSVBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCwgYXMgYW4gZXhwZXJ0IGluIG5ldHdvcmtpbmcsIGlzIHRoYXQgdGhpcyB2YXJpYWJsZSBsaWtlbHkgY29udHJvbHMgdGhlIGF2YWlsYWJpbGl0eSBvciBmdW5jdGlvbmFsaXR5IG9mIElQSVAgKElQLWluLUlQKSB0dW5uZWxpbmcgd2l0aGluIGEgc3lzdGVtJiMzOTtzIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gSSBrbm93IElQSVAsIGFuZCBJIGtub3cgaXQmIzM5O3MgYSByZWxhdGl2ZWx5IHNpbXBsZSwgeWV0IGZvdW5kYXRpb25hbCwgbWV0aG9kIGZvciBlbmNhcHN1bGF0aW5nIElQIHBhY2tldHMgaW5zaWRlIG90aGVyIElQIHBhY2tldHMuIFNvLCBlbmFibGluZyB0aGlzIHdvdWxkIHByb3ZpZGUgYSBiYXNpYyB3YXkgdG8gZXN0YWJsaXNoIHR1bm5lbHMsIHBvdGVudGlhbGx5IGFsbG93aW5nIGZvciB0aGUgY3JlYXRpb24gb2YgdmlydHVhbCBuZXR3b3JrcywgYnlwYXNzaW5nIG5ldHdvcmsgcmVzdHJpY3Rpb25zLCBvciBleHRlbmRpbmcgYSBuZXR3b3JrIGFjcm9zcyBkaXNwYXJhdGUgc2VnbWVudHMuIEkmIzM5O20gaW1tZWRpYXRlbHkgY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBmb3Igcm91dGluZyB0YWJsZXMsIE1UVSBjb25zaWRlcmF0aW9ucyAodGhlIGVuY2Fwc3VsYXRlZCBwYWNrZXQgbmVlZHMgdG8gZml0KSwgYW5kIHBvdGVudGlhbCBvdmVyaGVhZCBmcm9tIHRoZSBhZGRlZCBoZWFkZXJzLiBJJiMzOTttIGFsc28gdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyDigJMgZG9lcyBlbmFibGluZyB0aGlzIGV4cG9zZSB2dWxuZXJhYmlsaXRpZXMgaWYgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHksIGdpdmVuIHRoYXQgdGhlIHVuZGVybHlpbmcgcGFja2V0cyBhcmUgZW5jYXBzdWxhdGVkIGFuZCBtYXkgb2JzY3VyZSBpbmZvcm1hdGlvbiBmcm9tIGJhc2ljIGZpcmV3YWxscyBvciBpbnRydXNpb24gZGV0ZWN0aW9uIHN5c3RlbXM/IEFuZCBJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IGl0cyByZWxhdGlvbnNoaXAgd2l0aCBvdGhlciB0dW5uZWxpbmcgb3IgVlBOIHRlY2hub2xvZ2llcywgc3VjaCBhcyBHUkUgb3IgVlhMQU4sIHdvbmRlcmluZyBhYm91dCBpdHMgc3RyZW5ndGhzIGFuZCB3ZWFrbmVzc2VzIGNvbXBhcmVkIHRvIHRoZXNlIGFsdGVybmF0aXZlcyBpbiB0ZXJtcyBvZiBmZWF0dXJlcywgc2NhbGFiaWxpdHksIGFuZCBwZXJmb3JtYW5jZS4gSW4gc2hvcnQsIGl0JiMzOTtzIGEgYmFzaWMgYW5kIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIGZvciBuZXR3b3JraW5nIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotLipzaXQubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlPTQwPW9iai0kKENPTkZJR19JUFY2X1ZUSSkgJiM0Mzs9IGlwNl92dGkub1xubmV0L2lwdjYvTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX0lQVjZfU0lUKSAmIzQzOz0gc2l0Lm9cbm5ldC9pcHY2L01ha2VmaWxlLTQyLW9iai0kKENPTkZJR19JUFY2X1RVTk5FTCkgJiM0Mzs9IGlwNl90dW5uZWwub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTYxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWd1cmF0aW9uczoKCioqRGVlcCBEaXZlIG9uIElQdjYgVHVubmVsaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byBgQ09ORklHX0lQVjZfU0lUYCBhbmQgYENPTkZJR19JUFY2X1RVTk5FTGAuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCwgYXJlbiYjMzk7dCB0aGV5PyBUaGV5IHJlcHJlc2VudCB0aGUgY29yZSBtZWNoYW5pc21zIGZvciBlbmNhcHN1bGF0aW5nIElQdjYgdHJhZmZpYyB3aXRoaW4gYW4gSVB2NCBuZXR3b3JrLCByaWdodD8gYENPTkZJR19JUFY2X1NJVGAgc3BlY2lmaWNhbGx5IGZsYWdzIHN1cHBvcnQgZm9yIFNpbXBsZSBJbnRlcm5ldCBUcmFuc2l0aW9uIChTSVQpIHR1bm5lbHMuIFNvLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGF0IGNsYXNzaWMgNmluNCBzZXR1cC4KCkFuZCBvZiBjb3Vyc2UsIGBDT05GSUdfSVBWNl9UVU5ORUxgIGlzIHRoZSBicm9hZGVyIG9wdGlvbi4gSXQmIzM5O3MgdGhlIGVuYWJsaW5nIGZsYWcgZm9yIHZhcmlvdXMgdHVubmVsaW5nIG1ldGhvZHMsIG5vdCBqdXN0IFNJVC4gV2UgY291bGQgYmUgZGVhbGluZyB3aXRoIGdlbmVyaWMgdHVubmVscywgb3RoZXIgZW5jYXBzdWxhdGlvbiBtZXRob2RzLCBwb3RlbnRpYWxseSBHUkUgb3IgZXZlbiBtb3JlIGFkdmFuY2VkIHR1bm5lbGluZyBwcm90b2NvbHMuIE5vdywgYW4gaW50ZXJlc3RpbmcgcXVlc3Rpb24gYXJpc2VzIOKAkyBhcmUgdGhlc2Ugc2V0dGluZ3MgbXV0dWFsbHkgZXhjbHVzaXZlLCBvciBkbyB0aGV5IGJ1aWxkIHVwb24gZWFjaCBvdGhlciBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbj8gVGhhdCB3YXJyYW50cyBtb3JlIHJlc2VhcmNoLiBUaGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgbmV0d29yayBpbnRlcm9wZXJhYmlsaXR5IGFuZCByb3V0ZSBtYW5hZ2VtZW50IGFyZSBjb25zaWRlcmFibGUuIEkgbmVlZCB0byBrZWVwIHRoZXNlIGNvbmNlcHRzIHN0cmFpZ2h0IHdoZW4gY29uc2lkZXJpbmcgY29uZmlndXJhdGlvbiBvciBpbXBsZW1lbnRhdGlvbi4gVGhlIGRldmlsIGlzIGNlcnRhaW5seSBpbiB0aGUgZGV0YWlscyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai0uKm5mX2Zsb3dfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTM5PW9iai0kKENPTkZJR19ORlRfRldEX05FVERFVilcdCYjNDM7PSBuZnRfZndkX25ldGRldi5vXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDEtIyBmbG93IHRhYmxlIGluZnJhc3RydWN0dXJlXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0MjpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRSlcdCYjNDM7PSBuZl9mbG93X3RhYmxlLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQzLW5mX2Zsb3dfdGFibGUtb2Jqc1x0XHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE1MT1lbmRpZlxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNTItXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1MzpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUKSAmIzQzOz0gbmZfZmxvd190YWJsZV9pbmV0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTU0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjY2CgkJCQkJCQlvdXRwdXQ6IDI2MwoJCQkJCQkJdGhvdWdodHM6IDUyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0ZmlsdGVyIEZsb3cgVGFibGUgVHVubmVsIE9mZmxvYWQgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgQ09ORklHX05GX0ZMT1dfVEFCTEVgIGp1bXBzIG91dC4gU2VlbXMgbGlrZSB0aGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgdHVubmVsIG9mZmxvYWQgbG9naWMsIGdpdmVuIHRoZSBmdW5jdGlvbiBuYW1lcy4KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaGFuZGxlcyB0dW5uZWwgb2ZmbG9hZC4gSSBzaG91bGQgZGlnIGludG8gdGhlIGZ1bmN0aW9uIGNhbGxzIHdpdGhpbiB0aGlzIGFyZWE6IGBpcGlwNl90dW5uZWxfZmlsbF9mb3J3YXJkX3BhdGhgLCBgbmZfZmxvd190dW5uZWxfaXBfcHVzaGAsIGBuZl9mbG93X3R1bm5lbF9pcDZfcHVzaGAsIGBuZl9mbG93X3R1bm5lbF9wdXNoYCwgYG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXBgLCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgLCBgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aGAsIGFuZCBgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZWAuIFRoZXNlIGFyZSBhbGwgcHJldHR5IHRlbGxpbmcuCgpMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX05GX0ZMT1dfVEFCTEVfSU5FVGAgbG9va3MgbGlrZSBpdCBtaWdodCBiZSByZWxhdGVkIGFzIHdlbGwsIGFuZCBldmVuIGlmIHVuY2hhbmdlZCwgYENPTkZJR19ORVRfSVBHUkVgIGFsb25nc2lkZSBgaXBpcGAgYW5kIGBzaXRgIG1pZ2h0IGJlIGdvb2QgdG8gY29uc2lkZXIuCgpBZnRlciBhIHF1aWNrIHJldmlldywgSSBzZWUgdGhhdCB0aGlzIGlzIGludHJvZHVjaW5nIHN1cHBvcnQgZm9yIElQLWluLUlQLCBJUHY2LWluLUlQdjQgKFNJVCksIGFuZCBJUHY2LWluLUlQdjYgdHVubmVscyB3aXRoaW4gdGhlIG5ldGZpbHRlciBmbG93dGFibGUgb2ZmbG9hZC4gSXQmIzM5O3MgbW9kaWZ5aW5nIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljIGFuZCB0aGUgdHVubmVsIGRyaXZlcnMgdG8gaGFuZGxlIGZpbGxpbmcgdGhlIGZvcndhcmQgcGF0aCBhbmQgcHVzaGluZyB0aGUgdHVubmVsIGhlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZGlyZWN0bHkgdG91Y2hpbmcgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYywgc28gSSBoYXZlIHRvIHRyZWF0IHRoaXMgYXMgaGlnaCBwcmlvcml0eS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc6IHRydWVgIGFuZCB3aWxsIGZvY3VzIG9uIHRob3NlIGxpc3RlZCBzeW1ib2xzLiBBbmQsIEkgd2lsbCBlbmFibGU6IGBORl9GTE9XX1RBQkxFYCwgYE5FVF9JUElQYCwgYElQVjZfU0lUYCwgYW5kIGBJUFY2X1RVTk5FTGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O0lQVjZfU0lUJiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBpcDZfdHVubmVsX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdHVubmVsX2lwX3B1c2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd190dW5uZWxfaXA2X3B1c2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd190dW5uZWxfcHVzaCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfbG9va3VwJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfaXBfaG9vayYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rJiMzNDssCiAgICAmIzM0O25mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIElQLWluLUlQLCBTSVQgKElQdjYtaW4tSVB2NCksIGFuZCBJUHY2LWluLUlQdjYgdHVubmVscyBpbiB0aGUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBvZmZsb2FkLiBJdCBtb2RpZmllcyBjb3JlIG5ldGZpbHRlciBmbG93dGFibGUgbG9naWMgYW5kIHR1bm5lbCBkcml2ZXJzIHRvIHN1cHBvcnQgZmlsbGluZyB0aGUgZm9yd2FyZCBwYXRoIGFuZCBwdXNoaW5nIHR1bm5lbCBoZWFkZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O0lQVjZfU0lUJiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBpcDZfdHVubmVsX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdHVubmVsX2lwX3B1c2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd190dW5uZWxfaXA2X3B1c2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd190dW5uZWxfcHVzaCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfbG9va3VwJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfaXBfaG9vayYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rJiMzNDssCiAgICAmIzM0O25mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIElQLWluLUlQLCBTSVQgKElQdjYtaW4tSVB2NCksIGFuZCBJUHY2LWluLUlQdjYgdHVubmVscyBpbiB0aGUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBvZmZsb2FkLiBJdCBtb2RpZmllcyBjb3JlIG5ldGZpbHRlciBmbG93dGFibGUgbG9naWMgYW5kIHR1bm5lbCBkcml2ZXJzIHRvIHN1cHBvcnQgZmlsbGluZyB0aGUgZm9yd2FyZCBwYXRoIGFuZCBwdXNoaW5nIHR1bm5lbCBoZWFkZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6Mjg6MzEuOTc2Mjc0NTczWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3MzQxNjEzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkVUX0lQSVBcIixcbiAgICBcIklQVjZfU0lUXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwaXA2X3R1bm5lbF9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwibmZfZmxvd190dW5uZWxfaXBfcHVzaFwiLFxuICAgIFwibmZfZmxvd190dW5uZWxfaXA2X3B1c2hcIixcbiAgICBcIm5mX2Zsb3dfdHVubmVsX3B1c2hcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9sb29rdXBcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwX2hvb2tcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tcIixcbiAgICBcIm5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcIm5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIElQLWluLUlQLCBTSVQgKElQdjYtaW4tSVB2NCksIGFuZCBJUHY2LWluLUlQdjYgdHVubmVscyBpbiB0aGUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBvZmZsb2FkLiBJdCBtb2RpZmllcyBjb3JlIG5ldGZpbHRlciBmbG93dGFibGUgbG9naWMgYW5kIHR1bm5lbCBkcml2ZXJzIHRvIHN1cHBvcnQgZmlsbGluZyB0aGUgZm9yd2FyZCBwYXRoIGFuZCBwdXNoaW5nIHR1bm5lbCBoZWFkZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToyODozMS45NzYyODU4MTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTg5NDU2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRlNjkyODIzZDBjMGRjMmVmZDhhZjA5NGQ3MGU4OWNhMDgwMWZlNzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDE6Mjg6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcXG5pbmRleCBlN2M3ODI5MzAwMmFiYi4uMDZkMTI4YzY3YzhjNDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcXG5AQCAtMjc2LDcgKzI3Niw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X21hbmdsZV9pcHY0KGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXFxuK3N0YXRpYyBpbnQgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBjb25zdCB1OCAqYWRkciwgX19iZTE2IGV0aGVyX3R5cGUsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYWlyb2hhX3dkbWFfaW5mbyAqaW5mbylcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrO1xcbkBAIC0yODcsNyArMjg4LDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcXHUwMDI2c3RhY2spO1xcbitcXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBldGhlcl90eXBlLCBcXHUwMDI2c3RhY2spO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMzMxLDcgKzMzMiw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSAqaHdlLFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IGFpcm9oYV9mbG93X2RhdGEgKmRhdGEsXFxuLVxcdFxcdFxcdFxcdFxcdGludCBsNHByb3RvKVxcbitcXHRcXHRcXHRcXHRcXHRfX2JlMTYgZXRoZXJfdHlwZSwgaW50IGw0cHJvdG8pXFxuIHtcXG4gXFx0dTMyIHFkYXRhID0gRklFTERfUFJFUChBSVJPSEFfRk9FX1NIQVBFUl9JRCwgMHg3ZiksIHBvcnRzX3BhZCwgdmFsO1xcbiBcXHRpbnQgd2xhbl9ldHlwZSA9IC1FSU5WQUwsIGRzYV9wb3J0ID0gYWlyb2hhX2dldF9kc2FfcG9ydChcXHUwMDI2bmV0ZGV2KTtcXG5AQCAtMzU0LDcgKzM1NSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbiBcXHRcXHRzdHJ1Y3QgYWlyb2hhX3dkbWFfaW5mbyBpbmZvID0ge307XFxuIFxcbiBcXHRcXHRpZiAoIWFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhuZXRkZXYsIGRhdGEtXFx1MDAzZWV0aC5oX2Rlc3QsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZpbmZvKSkge1xcbitcXHRcXHRcXHRcXHRcXHQgICAgICBldGhlcl90eXBlLCBcXHUwMDI2aW5mbykpIHtcXG4gXFx0XFx0XFx0dmFsIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9JQjJfTkJRLCBpbmZvLmlkeCkgfFxcbiBcXHRcXHRcXHQgICAgICAgRklFTERfUFJFUChBSVJPSEFfRk9FX0lCMl9QU0VfUE9SVCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBGRV9QU0VfUE9SVF9DRE00KTtcXG5AQCAtMTA4MSw2ICsxMDgyLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuIFxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0O1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSBod2U7XFxuIFxcdGludCBlcnIsIGksIG9mZmxvYWRfdHlwZTtcXG4rXFx0X19iZTE2IGV0aGVyX3R5cGUgPSAwO1xcbiBcXHR1MTYgYWRkcl90eXBlID0gMDtcXG4gXFx0dTggbDRwcm90byA9IDA7XFxuIFxcbkBAIC0xMTA3LDYgKzExMDksNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4gXFx0XFx0c3RydWN0IGZsb3dfbWF0Y2hfYmFzaWMgbWF0Y2g7XFxuIFxcbiBcXHRcXHRmbG93X3J1bGVfbWF0Y2hfYmFzaWMocnVsZSwgXFx1MDAyNm1hdGNoKTtcXG4rXFx0XFx0ZXRoZXJfdHlwZSA9IG1hdGNoLmtleS1cXHUwMDNlbl9wcm90bztcXG4gXFx0XFx0bDRwcm90byA9IG1hdGNoLmtleS1cXHUwMDNlaXBfcHJvdG87XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5AQCAtMTE3Nyw3ICsxMTgwLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0ZXJyID0gYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShldGgsIFxcdTAwMjZod2UsIG9kZXYsIG9mZmxvYWRfdHlwZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmRhdGEsIGw0cHJvdG8pO1xcbitcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZGF0YSwgZXRoZXJfdHlwZSwgbDRwcm90byk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXFxuaW5kZXggY2M4YzRlZjgwMzhmMzAuLjI2MDFjMTdiMjljOGI5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcXG5AQCAtODksNyArODksOCBAQCBtdGtfZmxvd19vZmZsb2FkX21hbmdsZV9ldGgoY29uc3Qgc3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3QsIHZvaWQgKmV0aClcXG4gfVxcbiBcXG4gc3RhdGljIGludFxcbi1tdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbXRrX3dkbWFfaW5mbyAqaW5mbylcXG4rbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcXG4rXFx0XFx0ICAgICAgIF9fYmUxNiBldGhlcl90eXBlLCBzdHJ1Y3QgbXRrX3dkbWFfaW5mbyAqaW5mbylcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoO1xcbkBAIC0xMDIsNyArMTAzLDcgQEAgbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2lcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcXHUwMDI2c3RhY2spO1xcbitcXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBldGhlcl90eXBlLCBcXHUwMDI2c3RhY2spO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMTkwLDEyICsxOTEsMTIgQEAgbXRrX2Zsb3dfZ2V0X2RzYV9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICoqZGV2KVxcbiBzdGF0aWMgaW50XFxuIG10a19mbG93X3NldF9vdXRwdXRfZGV2aWNlKHN0cnVjdCBtdGtfZXRoICpldGgsIHN0cnVjdCBtdGtfZm9lX2VudHJ5ICpmb2UsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkZXN0X21hYyxcXG4tXFx0XFx0XFx0ICAgaW50ICp3ZWRfaW5kZXgpXFxuK1xcdFxcdFxcdCAgIF9fYmUxNiBldGhlcl90eXBlLCBpbnQgKndlZF9pbmRleClcXG4ge1xcbiBcXHRzdHJ1Y3QgbXRrX3dkbWFfaW5mbyBpbmZvID0ge307XFxuIFxcdGludCBwc2VfcG9ydCwgZHNhX3BvcnQsIHF1ZXVlO1xcbiBcXG4tXFx0aWYgKG10a19mbG93X2dldF93ZG1hX2luZm8oZGV2LCBkZXN0X21hYywgXFx1MDAyNmluZm8pID09IDApIHtcXG4rXFx0aWYgKG10a19mbG93X2dldF93ZG1hX2luZm8oZGV2LCBkZXN0X21hYywgZXRoZXJfdHlwZSwgXFx1MDAyNmluZm8pID09IDApIHtcXG4gXFx0XFx0bXRrX2ZvZV9lbnRyeV9zZXRfd2RtYShldGgsIGZvZSwgaW5mby53ZG1hX2lkeCwgaW5mby5xdWV1ZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGluZm8uYnNzLCBpbmZvLndjaWQsIGluZm8uYW1zZHUpO1xcbiBcXHRcXHRpZiAobXRrX2lzX25ldHN5c192Ml9vcl9ncmVhdGVyKGV0aCkpIHtcXG5AQCAtMjczLDYgKzI3NCw3IEBAIG10a19mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqZixcXG4gXFx0c3RydWN0IG10a19mbG93X2RhdGEgZGF0YSA9IHt9O1xcbiBcXHRzdHJ1Y3QgbXRrX2ZvZV9lbnRyeSBmb2U7XFxuIFxcdHN0cnVjdCBtdGtfZmxvd19lbnRyeSAqZW50cnk7XFxuK1xcdF9fYmUxNiBldGhlcl90eXBlID0gMDtcXG4gXFx0aW50IG9mZmxvYWRfdHlwZSA9IDA7XFxuIFxcdGludCB3ZWRfaW5kZXggPSAtMTtcXG4gXFx0dTE2IGFkZHJfdHlwZSA9IDA7XFxuQEAgLTMxOSw2ICszMjEsNyBAQCBtdGtfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmYsXFxuIFxcdFxcdHN0cnVjdCBmbG93X21hdGNoX2Jhc2ljIG1hdGNoO1xcbiBcXG4gXFx0XFx0Zmxvd19ydWxlX21hdGNoX2Jhc2ljKHJ1bGUsIFxcdTAwMjZtYXRjaCk7XFxuK1xcdFxcdGV0aGVyX3R5cGUgPSBtYXRjaC5rZXktXFx1MDAzZW5fcHJvdG87XFxuIFxcdFxcdGw0cHJvdG8gPSBtYXRjaC5rZXktXFx1MDAzZWlwX3Byb3RvO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuQEAgLTQ4MSw3ICs0ODQsNyBAQCBtdGtfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmYsXFxuIFxcdFxcdG10a19mb2VfZW50cnlfc2V0X3BwcG9lKGV0aCwgXFx1MDAyNmZvZSwgZGF0YS5wcHBvZS5zaWQpO1xcbiBcXG4gXFx0ZXJyID0gbXRrX2Zsb3dfc2V0X291dHB1dF9kZXZpY2UoZXRoLCBcXHUwMDI2Zm9lLCBvZGV2LCBkYXRhLmV0aC5oX2Rlc3QsXFxuLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2d2VkX2luZGV4KTtcXG4rXFx0XFx0XFx0XFx0XFx0IGV0aGVyX3R5cGUsIFxcdTAwMjZ3ZWRfaW5kZXgpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5pbmRleCA5OTgxZDYzN2Y4YjU0Ni4uNDVkOTllMTFiMDZlMmUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5AQCAtOTAyLDYgKzkwMiw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgge1xcbiBcXHRcXHRcXHR9O1xcbiBcXG4gXFx0XFx0XFx0dThcXHRsM19wcm90bztcXG4rXFx0XFx0XFx0dThcXHRlbmNhcF9wcm90bztcXG4gXFx0XFx0fSB0dW47XFxuIFxcdFxcdHN0cnVjdCB7XFxuIFxcdFxcdFxcdGVudW0ge1xcbkBAIC05MzgsNiArOTM5LDcgQEAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayB7XFxuIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IHtcXG4gXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gXFx0dThcXHRcXHRcXHRkYWRkcltFVEhfQUxFTl07XFxuK1xcdF9fYmUxNlxcdFxcdFxcdGV0aGVyX3R5cGU7XFxuIFxcbiBcXHRpbnRcXHRcXHRcXHRudW1fdmxhbnM7XFxuIFxcdHN0cnVjdCB7XFxuQEAgLTM0MjAsNyArMzQyMiw4IEBAIHZvaWQgZGV2X3JlbW92ZV9vZmZsb2FkKHN0cnVjdCBwYWNrZXRfb2ZmbG9hZCAqcG8pO1xcbiBcXG4gaW50IGRldl9nZXRfaWZsaW5rKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xcbi1pbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG4raW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgIGNvbnN0IHU4ICpkYWRkciwgX19iZTE2IGV0aGVyX3R5cGUsXFxuIFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XFxuIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWVfcmN1KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFxuaW5kZXggN2IyM2IyNDVhNWE4NmEuLjRkNDA2ODAxZWM5MDE1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFxuQEAgLTExOCw2ICsxMTgsNyBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB7XFxuIFxcdH07XFxuIFxcbiBcXHR1OFxcdGwzX3Byb3RvO1xcbitcXHR1OFxcdGVuY2FwX3Byb3RvO1xcbiB9O1xcbiBcXG4gc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcXG5pbmRleCA0YjNkNWNmZGY2ZTAwZi4uOWY1YTJkYTllOWY3NzQgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcXG4rKysgYi9uZXQvY29yZS9kZXYuY1xcbkBAIC03NTAsMTIgKzc1MCwxNCBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqZGV2X2Z3ZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbiBcXHRyZXR1cm4gXFx1MDAyNnN0YWNrLVxcdTAwM2VwYXRoW2tdO1xcbiB9XFxuIFxcbi1pbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG4raW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgIGNvbnN0IHU4ICpkYWRkciwgX19iZTE2IGV0aGVyX3R5cGUsXFxuIFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmxhc3RfZGV2O1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XFxuLVxcdFxcdC5kZXZcXHQ9IGRldixcXG4rXFx0XFx0LmRldlxcdFxcdD0gZGV2LFxcbitcXHRcXHQuZXRoZXJfdHlwZVxcdD0gZXRoZXJfdHlwZSxcXG4gXFx0fTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcXG4gXFx0aW50IHJldCA9IDA7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuY1xcbmluZGV4IGI2NDMxOTRmNTdkMjlmLi45ZjdiMmJkYWJlZjA2YiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pcGlwLmNcXG4rKysgYi9uZXQvaXB2NC9pcGlwLmNcXG5AQCAtMzY5LDYgKzM2OSw3IEBAIHN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbiBcXHRwYXRoLVxcdTAwM2V0dW4uc3JjX3Y0LnNfYWRkciA9IHRpcGgtXFx1MDAzZXNhZGRyO1xcbiBcXHRwYXRoLVxcdTAwM2V0dW4uZHN0X3Y0LnNfYWRkciA9IHRpcGgtXFx1MDAzZWRhZGRyO1xcbiBcXHRwYXRoLVxcdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQSVA7XFxuK1xcdHBhdGgtXFx1MDAzZXR1bi5lbmNhcF9wcm90byA9IEFGX0lORVQ7XFxuIFxcdHBhdGgtXFx1MDAzZWRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbiBcXG4gXFx0Y3R4LVxcdTAwM2VkZXYgPSBydC1cXHUwMDNlZHN0LmRldjtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXFxuaW5kZXggYmY4ZTQwYWY2MGIwODMuLmExMjFmNzE1YWZkMmNkIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbkBAIC0xODYzLDcgKzE4NjMsMTEgQEAgc3RhdGljIGludCBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuIFxcdFxcdHBhdGgtXFx1MDAzZXR5cGUgPSBERVZfUEFUSF9UVU47XFxuIFxcdFxcdHBhdGgtXFx1MDAzZXR1bi5zcmNfdjYgPSB0LVxcdTAwM2VwYXJtcy5sYWRkcjtcXG4gXFx0XFx0cGF0aC1cXHUwMDNldHVuLmRzdF92NiA9IHQtXFx1MDAzZXBhcm1zLnJhZGRyO1xcbi1cXHRcXHRwYXRoLVxcdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7XFxuK1xcdFxcdHBhdGgtXFx1MDAzZXR1bi5lbmNhcF9wcm90byA9IEFGX0lORVQ2O1xcbitcXHRcXHRpZiAoY3R4LVxcdTAwM2VldGhlcl90eXBlID09IGNwdV90b19iZTE2KEVUSF9QX0lQKSlcXG4rXFx0XFx0XFx0cGF0aC1cXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBhdGgtXFx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjtcXG4gXFx0XFx0cGF0aC1cXHUwMDNlZGV2ID0gY3R4LVxcdTAwM2VkZXY7XFxuIFxcdFxcdGN0eC1cXHUwMDNlZGV2ID0gZHN0LVxcdTAwM2VkZXY7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuY1xcbmluZGV4IGEzOGIyNGZiODM4NDI0Li5lYWQzMjdjMzJkZjI0NSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9zaXQuY1xcbisrKyBiL25ldC9pcHY2L3NpdC5jXFxuQEAgLTEzNjUsNiArMTM2NSw1NiBAQCBpcGlwNl90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgaXBpcDZfdHVubmVsX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcXG4re1xcbitcXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihjdHgtXFx1MDAzZWRldik7XFxuK1xcdGNvbnN0IHN0cnVjdCBpcGhkciAqdGlwaCA9IFxcdTAwMjZ0dW5uZWwtXFx1MDAzZXBhcm1zLmlwaDtcXG4rXFx0c3RydWN0IHJ0YWJsZSAqcnQ7XFxuK1xcbitcXHQvKiBOQk1BIHR1bm5lbHMgKElTQVRBUCwgNnRvNCwgNnJkKSByZXNvbHZlIHRoZSBvdXRlciBkZXN0aW5hdGlvblxcbitcXHQgKiBwZXItcGFja2V0IGZyb20gdGhlIGlubmVyIElQdjYgYWRkcmVzczsgbm90IG9mZmxvYWRhYmxlLlxcbitcXHQgKi9cXG4rXFx0aWYgKCF0aXBoLVxcdTAwM2VkYWRkcilcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0LyogRk9VL0dVRSBlbmNhcHN1bGF0aW9uIGlzIGhhbmRsZWQgaW4gdGhlIHNsb3cgcGF0aCBieVxcbitcXHQgKiBpcF90dW5uZWxfZW5jYXAoKTsgdGhlIGZhc3QgcGF0aCBvbmx5IHB1c2hlcyBhIHBsYWluXFxuK1xcdCAqIElQdjQgaGVhZGVyIGFuZCB3b3VsZCBza2lwIHRoZSBVRFAgZW5jYXBzdWxhdGlvbi5cXG4rXFx0ICovXFxuK1xcdGlmICh0dW5uZWwtXFx1MDAzZWVuY2FwLnR5cGUgIT0gVFVOTkVMX0VOQ0FQX05PTkUpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJ0ID0gaXBfcm91dGVfb3V0cHV0KGRldl9uZXQoY3R4LVxcdTAwM2VkZXYpLCB0aXBoLVxcdTAwM2VkYWRkciwgdGlwaC1cXHUwMDNlc2FkZHIsXFxuK1xcdFxcdFxcdCAgICAgaW5ldF9kc2ZpZWxkX3RvX2RzY3AodGlwaC1cXHUwMDNldG9zKSxcXG4rXFx0XFx0XFx0ICAgICB0dW5uZWwtXFx1MDAzZXBhcm1zLmxpbmssIFJUX1NDT1BFX1VOSVZFUlNFKTtcXG4rXFx0aWYgKElTX0VSUihydCkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHJ0KTtcXG4rXFxuK1xcdHBhdGgtXFx1MDAzZXR5cGUgPSBERVZfUEFUSF9UVU47XFxuK1xcdHBhdGgtXFx1MDAzZXR1bi5zcmNfdjQuc19hZGRyID0gdGlwaC1cXHUwMDNlc2FkZHI7XFxuK1xcdHBhdGgtXFx1MDAzZXR1bi5kc3RfdjQuc19hZGRyID0gdGlwaC1cXHUwMDNlZGFkZHI7XFxuK1xcdHBhdGgtXFx1MDAzZXR1bi5lbmNhcF9wcm90byA9IEFGX0lORVQ7XFxuK1xcdHBhdGgtXFx1MDAzZWRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbitcXG4rXFx0c3dpdGNoIChjdHgtXFx1MDAzZWV0aGVyX3R5cGUpIHtcXG4rXFx0Y2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6XFxuK1xcdFxcdHBhdGgtXFx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6XFxuK1xcdFxcdHBhdGgtXFx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGlwX3J0X3B1dChydCk7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0Y3R4LVxcdTAwM2VkZXYgPSBydC1cXHUwMDNlZHN0LmRldjtcXG4rXFx0aXBfcnRfcHV0KHJ0KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50XFxuIGlwaXA2X3R1bm5lbF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcixcXG4gXFx0XFx0XFx0ICAgIHZvaWQgX191c2VyICpkYXRhLCBpbnQgY21kKVxcbkBAIC0xNDAxLDYgKzE0NTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwaXA2X25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fc2lvY2RldnByaXZhdGUgPSBpcGlwNl90dW5uZWxfc2lvY2RldnByaXZhdGUsXFxuIFxcdC5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxcbiBcXHQubmRvX3R1bm5lbF9jdGwgPSBpcGlwNl90dW5uZWxfY3RsLFxcbitcXHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoID0gaXBpcDZfdHVubmVsX2ZpbGxfZm9yd2FyZF9wYXRoLFxcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWQgaXBpcDZfZGV2X2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcXG5pbmRleCA5OWM1YjlkNjcxYTBjYS4uMThmODllNmZiNDM1NGQgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcXG5AQCAtNzYsOSArNzYsMTQgQEAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvd19vZmZsb2FkX2FsbG9jKHN0cnVjdCBuZl9jb25uICpjdClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYWxsb2MpO1xcbiBcXG4tc3RhdGljIHUzMiBmbG93X29mZmxvYWRfZHN0X2Nvb2tpZShzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpmbG93X3R1cGxlKVxcbitzdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9kc3RfY29va2llKHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZsb3dfdHVwbGUsXFxuK1xcdFxcdFxcdFxcdCAgIHU4IHR1bl9lbmNhcF9wcm90bylcXG4ge1xcbi1cXHRpZiAoZmxvd190dXBsZS1cXHUwMDNlbDNwcm90byA9PSBORlBST1RPX0lQVjYpXFxuK1xcdGJvb2wgZHN0X3Y2O1xcbitcXG4rXFx0ZHN0X3Y2ID0gdHVuX2VuY2FwX3Byb3RvID8gdHVuX2VuY2FwX3Byb3RvID09IE5GUFJPVE9fSVBWNlxcbitcXHRcXHRcXHRcXHQgOiBmbG93X3R1cGxlLVxcdTAwM2VsM3Byb3RvID09IE5GUFJPVE9fSVBWNjtcXG4rXFx0aWYgKGRzdF92NilcXG4gXFx0XFx0cmV0dXJuIHJ0Nl9nZXRfY29va2llKGRzdF9ydDZfaW5mbyhmbG93X3R1cGxlLVxcdTAwM2Vkc3RfY2FjaGUpKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC05OSwxMCArMTA0LDEyIEBAIHN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2ZpbGxfcm91dGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4gXFx0XFx0XFx0XFx0ICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcXG4ge1xcbiBcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpmbG93X3R1cGxlID0gXFx1MDAyNmZsb3ctXFx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlO1xcbitcXHR1OCBsM3Byb3RvLCBlbmNhcF9wcm90byA9IHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uZW5jYXBfcHJvdG87XFxuIFxcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IG5mdF9yb3V0ZV9kc3RfZmV0Y2gocm91dGUsIGRpcik7XFxuIFxcdGludCBpLCBqID0gMDtcXG4gXFxuLVxcdHN3aXRjaCAoZmxvd190dXBsZS1cXHUwMDNlbDNwcm90bykge1xcbitcXHRsM3Byb3RvID0gZW5jYXBfcHJvdG8gPyBlbmNhcF9wcm90byA6IGZsb3dfdHVwbGUtXFx1MDAzZWwzcHJvdG87XFxuK1xcdHN3aXRjaCAobDNwcm90bykge1xcbiBcXHRjYXNlIE5GUFJPVE9fSVBWNDpcXG4gXFx0XFx0Zmxvd190dXBsZS1cXHUwMDNlbXR1ID0gaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKGRzdCwgdHJ1ZSk7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0xMzgsNyArMTQ1LDggQEAgc3RhdGljIGludCBmbG93X29mZmxvYWRfZmlsbF9yb3V0ZShzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbiBcXHRjYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIOlxcbiBcXHRcXHRmbG93X3R1cGxlLVxcdTAwM2VpZmlkeCA9IHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLm91dC5pZmluZGV4O1xcbiBcXHRcXHRmbG93X3R1cGxlLVxcdTAwM2Vkc3RfY2FjaGUgPSBkc3Q7XFxuLVxcdFxcdGZsb3dfdHVwbGUtXFx1MDAzZWRzdF9jb29raWUgPSBmbG93X29mZmxvYWRfZHN0X2Nvb2tpZShmbG93X3R1cGxlKTtcXG4rXFx0XFx0Zmxvd190dXBsZS1cXHUwMDNlZHN0X2Nvb2tpZSA9IGZsb3dfb2ZmbG9hZF9kc3RfY29va2llKGZsb3dfdHVwbGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBlbmNhcF9wcm90byk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcXG5pbmRleCAyOWU5M2FjMWUyZTQwMC4uNDQ5ODE4ZGNlZjNjN2UgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xcbkBAIC0xOTEsMjUgKzE5MSwyNyBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X3R1cGxlX2VuY2FwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbi1cXHRzd2l0Y2ggKGlubmVyX3Byb3RvKSB7XFxuLVxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbi1cXHRcXHRpcGggPSAoc3RydWN0IGlwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgb2Zmc2V0KTtcXG4tXFx0XFx0aWYgKGN0eC1cXHUwMDNldHVuLnByb3RvID09IElQUFJPVE9fSVBJUCkge1xcbitcXHRpZiAoY3R4LVxcdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQIHx8IGN0eC1cXHUwMDNldHVuLnByb3RvID09IElQUFJPVE9fSVBWNikge1xcbitcXHRcXHRzd2l0Y2ggKGlubmVyX3Byb3RvKSB7XFxuK1xcdFxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbitcXHRcXHRcXHRpcGggPSAoc3RydWN0IGlwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG9mZnNldCk7XFxuIFxcdFxcdFxcdHR1cGxlLVxcdTAwM2V0dW4uZHN0X3Y0LnNfYWRkciA9IGlwaC1cXHUwMDNlZGFkZHI7XFxuIFxcdFxcdFxcdHR1cGxlLVxcdTAwM2V0dW4uc3JjX3Y0LnNfYWRkciA9IGlwaC1cXHUwMDNlc2FkZHI7XFxuLVxcdFxcdFxcdHR1cGxlLVxcdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQSVA7XFxuLVxcdFxcdH1cXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuLVxcdFxcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzZXQpO1xcbi1cXHRcXHRpZiAoY3R4LVxcdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7XFxuK1xcdFxcdFxcdHR1cGxlLVxcdTAwM2V0dW4ubDNfcHJvdG8gPSBjdHgtXFx1MDAzZXR1bi5wcm90bztcXG4rXFx0XFx0XFx0dHVwbGUtXFx1MDAzZXR1bi5lbmNhcF9wcm90byA9IEFGX0lORVQ7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbitcXHRcXHRcXHRpcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBvZmZzZXQpO1xcbiBcXHRcXHRcXHR0dXBsZS1cXHUwMDNldHVuLmRzdF92NiA9IGlwNmgtXFx1MDAzZWRhZGRyO1xcbiBcXHRcXHRcXHR0dXBsZS1cXHUwMDNldHVuLnNyY192NiA9IGlwNmgtXFx1MDAzZXNhZGRyO1xcbi1cXHRcXHRcXHR0dXBsZS1cXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2O1xcbitcXHRcXHRcXHR0dXBsZS1cXHUwMDNldHVuLmwzX3Byb3RvID0gY3R4LVxcdTAwM2V0dW4ucHJvdG87XFxuK1xcdFxcdFxcdHR1cGxlLVxcdTAwM2V0dW4uZW5jYXBfcHJvdG8gPSBBRl9JTkVUNjtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRicmVhaztcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0zMzYsNyArMzM4LDcgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdGlmIChpcGgtXFx1MDAzZXR0bCBcXHUwMDNjPSAxKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRpZiAoaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lQSVApIHtcXG4rXFx0aWYgKGlwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUElQIHx8IGlwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUFY2KSB7XFxuIFxcdFxcdGN0eC1cXHUwMDNldHVuLnByb3RvID0gaXBoLVxcdTAwM2Vwcm90b2NvbDtcXG4gXFx0XFx0Y3R4LVxcdTAwM2V0dW4uaGRyX3NpemUgPSBzaXplO1xcbiBcXHRcXHRjdHgtXFx1MDAzZW9mZnNldCArPSBjdHgtXFx1MDAzZXR1bi5oZHJfc2l6ZTtcXG5AQCAtMzYxLDcgKzM2Myw3IEBAIHN0YXRpYyBib29sIG5mX2Zsb3dfaXA2X3R1bm5lbF9wcm90byhzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbiBcXHRpZiAoaXB2Nl9leHRfaGRyKGlwNmgtXFx1MDAzZW5leHRoZHIpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRpZiAoaXA2aC1cXHUwMDNlbmV4dGhkciA9PSBJUFBST1RPX0lQVjYpIHtcXG4rXFx0aWYgKGlwNmgtXFx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JUElQIHx8IGlwNmgtXFx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JUFY2KSB7XFxuIFxcdFxcdGN0eC1cXHUwMDNldHVuLnByb3RvID0gaXA2aC1cXHUwMDNlbmV4dGhkcjtcXG4gXFx0XFx0Y3R4LVxcdTAwM2V0dW4uaGRyX3NpemUgPSBzaXplb2YoKmlwNmgpO1xcbiBcXHRcXHRjdHgtXFx1MDAzZW9mZnNldCArPSBjdHgtXFx1MDAzZXR1bi5oZHJfc2l6ZTtcXG5AQCAtMzgyLDYgKzM4NCwxMCBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X2lwX3R1bm5lbF9wb3Aoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gXFxuIFxcdHNrYl9wdWxsKHNrYiwgY3R4LVxcdTAwM2V0dW4uaGRyX3NpemUpO1xcbiBcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4rXFx0aWYgKGN0eC1cXHUwMDNldHVuLnByb3RvID09IElQUFJPVE9fSVBJUClcXG4rXFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIG5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuQEAgLTQ1OCwyMSArNDY0LDYgQEAgc3RhdGljIHZvaWQgbmZfZmxvd19lbmNhcF9wb3Aoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gXFx0XFx0bmZfZmxvd19pcF90dW5uZWxfcG9wKGN0eCwgc2tiKTtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbi1uZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi17XFxuLVxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcXG4tXFxuLVxcdGlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woY3R4LCBza2IsIGh0b25zKEVUSF9QX0lQKSkpXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbi1cXG4tXFx0aWYgKG5mX2Zsb3dfdHVwbGVfaXAoY3R4LCBza2IsIFxcdTAwMjZ0dXBsZSkgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFxuLVxcdHJldHVybiBmbG93X29mZmxvYWRfbG9va3VwKGZsb3dfdGFibGUsIFxcdTAwMjZ0dXBsZSk7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxcbkBAIC00ODcsOCArNDc4LDE2IEBAIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gXFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcXG4gXFxuIFxcdG10dSA9IGZsb3ctXFx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlLm10dSArIGN0eC1cXHUwMDNlb2Zmc2V0O1xcbi1cXHRpZiAoZmxvdy1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXFxuK1xcdHN3aXRjaCAoZmxvdy1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bi5lbmNhcF9wcm90bykge1xcbitcXHRjYXNlIEFGX0lORVQ6XFxuIFxcdFxcdG10dSAtPSBzaXplb2YoKmlwaCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEFGX0lORVQ2OlxcbitcXHRcXHRtdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAodW5saWtlbHkobmZfZmxvd19leGNlZWRzX210dShza2IsIG10dSkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtNTg4LDIzICs1ODcsMzcgQEAgc3RhdGljIGludCBuZl9mbG93X3BwcG9lX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGlkLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcGlwX3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXFxuLVxcdFxcdFxcdFxcdCAgICBfX2JlMzIgKmlwX2RhZGRyKVxcbitzdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwX3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxcbitcXHRcXHRcXHRcXHQgIF9fYmUzMiAqaXBfZGFkZHIpXFxuIHtcXG4tXFx0c3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIFxcdHN0cnVjdCBydGFibGUgKnJ0ID0gZHN0X3J0YWJsZSh0dXBsZS1cXHUwMDNlZHN0X2NhY2hlKTtcXG4tXFx0dTggdG9zID0gaXBoLVxcdTAwM2V0b3MsIHR0bCA9IGlwaC1cXHUwMDNldHRsO1xcbi1cXHRfX2JlMTYgZnJhZ19vZmYgPSBpcGgtXFx1MDAzZWZyYWdfb2ZmO1xcbi1cXHR1MzIgaGVhZHJvb20gPSBzaXplb2YoKmlwaCk7XFxuK1xcdF9fYmUxNiBmcmFnX29mZiA9IDA7XFxuK1xcdHN0cnVjdCBpcGhkciAqaXBoO1xcbitcXHR1OCB0b3MgPSAwLCB0dGw7XFxuK1xcdHUzMiBoZWFkcm9vbTtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmICh0dXBsZS1cXHUwMDNldHVuLmwzX3Byb3RvID09IElQUFJPVE9fSVBWNikge1xcbitcXHRcXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcXG4rXFxuK1xcdFxcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4rXFx0XFx0dG9zID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKTtcXG4rXFx0XFx0dHRsID0gaXA2aC1cXHUwMDNlaG9wX2xpbWl0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpcGggPSAoc3RydWN0IGlwaGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuK1xcdFxcdGZyYWdfb2ZmID0gaXBoLVxcdTAwM2VmcmFnX29mZjtcXG4rXFx0XFx0dG9zID0gaXBoLVxcdTAwM2V0b3M7XFxuK1xcdFxcdHR0bCA9IGlwaC1cXHUwMDNldHRsO1xcbitcXHR9XFxuK1xcbiBcXHRlcnIgPSBpcHR1bm5lbF9oYW5kbGVfb2ZmbG9hZHMoc2tiLCBTS0JfR1NPX0lQWElQNCk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRza2Jfc2V0X2lubmVyX2lwcHJvdG8oc2tiLCBJUFBST1RPX0lQSVApO1xcbi1cXHRoZWFkcm9vbSArPSBMTF9SRVNFUlZFRF9TUEFDRShydC1cXHUwMDNlZHN0LmRldikgKyBydC1cXHUwMDNlZHN0LmhlYWRlcl9sZW47XFxuK1xcdHNrYl9zZXRfaW5uZXJfaXBwcm90byhza2IsIHR1cGxlLVxcdTAwM2V0dW4ubDNfcHJvdG8pO1xcbitcXHRoZWFkcm9vbSA9IHNpemVvZigqaXBoKSArIExMX1JFU0VSVkVEX1NQQUNFKHJ0LVxcdTAwM2Vkc3QuZGV2KSArXFxuK1xcdFxcdCAgIHJ0LVxcdTAwM2Vkc3QuaGVhZGVyX2xlbjtcXG4gXFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgaGVhZHJvb20pO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbkBAIC02MTUsNiArNjI4LDcgQEAgc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcGlwX3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQvKiBQdXNoIGRvd24gYW5kIGluc3RhbGwgdGhlIElQIGhlYWRlci4gKi9cXG4gXFx0c2tiX3B1c2goc2tiLCBzaXplb2YoKmlwaCkpO1xcbiBcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4rXFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTtcXG4gXFxuIFxcdGlwaCA9IGlwX2hkcihza2IpO1xcbiBcXHRpcGgtXFx1MDAzZXZlcnNpb25cXHQ9IDQ7XFxuQEAgLTYzNCw1NiArNjQ4LDU3IEBAIHN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBpcF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfdjRfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLVxcdFxcdFxcdFxcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXFxuLVxcdFxcdFxcdFxcdCAgX19iZTMyICppcF9kYWRkcilcXG4te1xcbi1cXHRpZiAodHVwbGUtXFx1MDAzZXR1bl9udW0pXFxuLVxcdFxcdHJldHVybiBuZl9mbG93X3R1bm5lbF9pcGlwX3B1c2gobmV0LCBza2IsIHR1cGxlLCBpcF9kYWRkcik7XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcDZpcDZfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxcbi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW42X2FkZHIgKippcDZfZGFkZHIpXFxuK3N0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXA2X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGluNl9hZGRyICoqaXA2X2RhZGRyKVxcbiB7XFxuLVxcdHN0cnVjdCBpcHY2aGRyICppcDZoID0gKHN0cnVjdCBpcHY2aGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuLVxcdHN0cnVjdCBydGFibGUgKnJ0ID0gZHN0X3J0YWJsZSh0dXBsZS1cXHUwMDNlZHN0X2NhY2hlKTtcXG4tXFx0X191OCBkc2ZpZWxkID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKTtcXG4rXFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gdHVwbGUtXFx1MDAzZWRzdF9jYWNoZTtcXG4gXFx0c3RydWN0IGZsb3dpNiBmbDYgPSB7XFxuIFxcdFxcdC5kYWRkciA9IHR1cGxlLVxcdTAwM2V0dW4uc3JjX3Y2LFxcbiBcXHRcXHQuc2FkZHIgPSB0dXBsZS1cXHUwMDNldHVuLmRzdF92NixcXG4gXFx0XFx0LmZsb3dpNl9wcm90byA9IElQUFJPVE9fSVBWNixcXG4gXFx0fTtcXG4tXFx0dTggaG9wX2xpbWl0ID0gaXA2aC1cXHUwMDNlaG9wX2xpbWl0O1xcbitcXHR1OCBob3BfbGltaXQsIGRzZmllbGQ7XFxuK1xcdHN0cnVjdCBpcHY2aGRyICppcDZoO1xcbiBcXHRpbnQgZXJyLCBtdHU7XFxuIFxcdHUzMiBoZWFkcm9vbTtcXG4gXFxuK1xcdGlmICh0dXBsZS1cXHUwMDNldHVuLmwzX3Byb3RvID09IElQUFJPVE9fSVBJUCkge1xcbitcXHRcXHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4rXFxuK1xcdFxcdGRzZmllbGQgPSBpcHY0X2dldF9kc2ZpZWxkKGlwaCk7XFxuK1xcdFxcdGhvcF9saW1pdCA9IGlwaC1cXHUwMDNldHRsO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpcDZoID0gKHN0cnVjdCBpcHY2aGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuK1xcdFxcdGRzZmllbGQgPSBpcHY2X2dldF9kc2ZpZWxkKGlwNmgpO1xcbitcXHRcXHRob3BfbGltaXQgPSBpcDZoLVxcdTAwM2Vob3BfbGltaXQ7XFxuK1xcdH1cXG4rXFxuIFxcdGVyciA9IGlwdHVubmVsX2hhbmRsZV9vZmZsb2Fkcyhza2IsIFNLQl9HU09fSVBYSVA2KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdHNrYl9zZXRfaW5uZXJfaXBwcm90byhza2IsIElQUFJPVE9fSVBWNik7XFxuLVxcdGhlYWRyb29tID0gc2l6ZW9mKCppcDZoKSArIExMX1JFU0VSVkVEX1NQQUNFKHJ0LVxcdTAwM2Vkc3QuZGV2KSArXFxuLVxcdFxcdCAgIHJ0LVxcdTAwM2Vkc3QuaGVhZGVyX2xlbjtcXG4rXFx0c2tiX3NldF9pbm5lcl9pcHByb3RvKHNrYiwgdHVwbGUtXFx1MDAzZXR1bi5sM19wcm90byk7XFxuK1xcdGhlYWRyb29tID0gc2l6ZW9mKCppcDZoKSArIExMX1JFU0VSVkVEX1NQQUNFKGRzdC1cXHUwMDNlZGV2KSArXFxuK1xcdFxcdCAgIGRzdC1cXHUwMDNlaGVhZGVyX2xlbjtcXG4gXFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgaGVhZHJvb20pO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4gXFx0c2tiX3NjcnViX3BhY2tldChza2IsIHRydWUpO1xcbi1cXHRtdHUgPSBkc3RfbXR1KFxcdTAwMjZydC1cXHUwMDNlZHN0KSAtIHNpemVvZigqaXA2aCk7XFxuK1xcdG10dSA9IGRzdF9tdHUoZHN0KSAtIHNpemVvZigqaXA2aCk7XFxuIFxcdG10dSA9IG1heChtdHUsIElQVjZfTUlOX01UVSk7XFxuIFxcdHNrYl9kc3RfdXBkYXRlX3BtdHVfbm9fY29uZmlybShza2IsIG10dSk7XFxuIFxcbiBcXHRza2JfcHVzaChza2IsIHNpemVvZigqaXA2aCkpO1xcbiBcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4rXFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbiBcXG4gXFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XFxuIFxcdGlwNl9mbG93X2hkcihpcDZoLCBkc2ZpZWxkLFxcbiBcXHRcXHQgICAgIGlwNl9tYWtlX2Zsb3dsYWJlbChuZXQsIHNrYiwgZmw2LmZsb3dsYWJlbCwgdHJ1ZSwgXFx1MDAyNmZsNikpO1xcbiBcXHRpcDZoLVxcdTAwM2Vob3BfbGltaXQgPSBob3BfbGltaXQ7XFxuLVxcdGlwNmgtXFx1MDAzZW5leHRoZHIgPSBJUFBST1RPX0lQVjY7XFxuK1xcdGlwNmgtXFx1MDAzZW5leHRoZHIgPSB0dXBsZS1cXHUwMDNldHVuLmwzX3Byb3RvO1xcbiBcXHRpcDZoLVxcdTAwM2VkYWRkciA9IHR1cGxlLVxcdTAwM2V0dW4uc3JjX3Y2O1xcbiBcXHRpcDZoLVxcdTAwM2VzYWRkciA9IHR1cGxlLVxcdTAwM2V0dW4uZHN0X3Y2O1xcbiBcXHRpcHY2X2hkcihza2IpLVxcdTAwM2VwYXlsb2FkX2xlbiA9IGh0b25zKHNrYi1cXHUwMDNlbGVuIC0gc2l6ZW9mKCppcDZoKSk7XFxuQEAgLTY5NCwxNCArNzA5LDE4IEBAIHN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXA2aXA2X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF92Nl9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW42X2FkZHIgKippcDZfZGFkZHIpXFxuK3N0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcXG4rXFx0XFx0XFx0ICAgICAgIF9fYmUzMiAqaXBfZGFkZHIsIHN0cnVjdCBpbjZfYWRkciAqKmlwNl9kYWRkcilcXG4ge1xcbi1cXHRpZiAodHVwbGUtXFx1MDAzZXR1bl9udW0pXFxuLVxcdFxcdHJldHVybiBuZl9mbG93X3R1bm5lbF9pcDZpcDZfcHVzaChuZXQsIHNrYiwgdHVwbGUsIGlwNl9kYWRkcik7XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0c3dpdGNoICh0dXBsZS1cXHUwMDNldHVuLmVuY2FwX3Byb3RvKSB7XFxuK1xcdGNhc2UgQUZfSU5FVDpcXG4rXFx0XFx0cmV0dXJuIG5mX2Zsb3dfdHVubmVsX2lwX3B1c2gobmV0LCBza2IsIHR1cGxlLCBpcF9kYWRkcik7XFxuK1xcdGNhc2UgQUZfSU5FVDY6XFxuK1xcdFxcdHJldHVybiBuZl9mbG93X3R1bm5lbF9pcDZfcHVzaChuZXQsIHNrYiwgdHVwbGUsIGlwNl9kYWRkcik7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbmZfZmxvd19lbmNhcF9wdXNoKHN0cnVjdCBza19idWZmICpza2IsXFxuQEAgLTgwMSw4NiArODIwLDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9mbG93X3F1ZXVlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gTkZfU1RPTEVOO1xcbiB9XFxuIFxcbi11bnNpZ25lZCBpbnRcXG4tbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbi17XFxuLVxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG4tXFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XFxuLVxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlO1xcbi1cXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xcbi1cXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCBjdHggPSB7XFxuLVxcdFxcdC5pblxcdD0gc3RhdGUtXFx1MDAzZWluLFxcbi1cXHR9O1xcbi1cXHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcXG4tXFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcXG4tXFx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2g7XFxuLVxcdHN0cnVjdCBydGFibGUgKnJ0O1xcbi1cXHRfX2JlMzIgaXBfZGFkZHI7XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHR0dXBsZWhhc2ggPSBuZl9mbG93X29mZmxvYWRfbG9va3VwKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XFxuLVxcdGlmICghdHVwbGVoYXNoKVxcbi1cXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbi1cXG4tXFx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoXFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuLVxcdGVsc2UgaWYgKHJldCA9PSAwKVxcbi1cXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbi1cXG4tXFx0aWYgKHVubGlrZWx5KHR1cGxlaGFzaC1cXHUwMDNldHVwbGUueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX1hGUk0pKSB7XFxuLVxcdFxcdHJ0ID0gZHN0X3J0YWJsZSh0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XFxuLVxcdFxcdG1lbXNldChza2ItXFx1MDAzZWNiLCAwLCBzaXplb2Yoc3RydWN0IGluZXRfc2tiX3Bhcm0pKTtcXG4tXFx0XFx0SVBDQihza2IpLVxcdTAwM2VpaWYgPSBza2ItXFx1MDAzZWRldi1cXHUwMDNlaWZpbmRleDtcXG4tXFx0XFx0SVBDQihza2IpLVxcdTAwM2VmbGFncyA9IElQU0tCX0ZPUldBUkRFRDtcXG4tXFx0XFx0cmV0dXJuIG5mX2Zsb3dfeG1pdF94ZnJtKHNrYiwgc3RhdGUsIFxcdTAwMjZydC1cXHUwMDNlZHN0KTtcXG4tXFx0fVxcbi1cXG4tXFx0ZGlyID0gdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kaXI7XFxuLVxcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XFxuLVxcdG90aGVyX3R1cGxlID0gXFx1MDAyNmZsb3ctXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZTtcXG4tXFx0aXBfZGFkZHIgPSBvdGhlcl90dXBsZS1cXHUwMDNlc3JjX3Y0LnNfYWRkcjtcXG4tXFxuLVxcdGlmIChuZl9mbG93X3R1bm5lbF92NF9wdXNoKHN0YXRlLVxcdTAwM2VuZXQsIHNrYiwgb3RoZXJfdHVwbGUsIFxcdTAwMjZpcF9kYWRkcikgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gTkZfRFJPUDtcXG4tXFxuLVxcdHN3aXRjaCAodHVwbGVoYXNoLVxcdTAwM2V0dXBsZS54bWl0X3R5cGUpIHtcXG4tXFx0Y2FzZSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSDpcXG4tXFx0XFx0cnQgPSBkc3RfcnRhYmxlKHR1cGxlaGFzaC1cXHUwMDNldHVwbGUuZHN0X2NhY2hlKTtcXG4tXFx0XFx0eG1pdC5vdXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShzdGF0ZS1cXHUwMDNlbmV0LCB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmlmaWR4KTtcXG4tXFx0XFx0aWYgKCF4bWl0Lm91dGRldikge1xcbi1cXHRcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuLVxcdFxcdFxcdHJldHVybiBORl9EUk9QO1xcbi1cXHRcXHR9XFxuLVxcdFxcdG5laWdoID0gaXBfbmVpZ2hfZ3c0KHJ0LVxcdTAwM2Vkc3QuZGV2LCBydF9uZXh0aG9wKHJ0LCBpcF9kYWRkcikpO1xcbi1cXHRcXHRpZiAoSVNfRVJSKG5laWdoKSkge1xcbi1cXHRcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuLVxcdFxcdFxcdHJldHVybiBORl9EUk9QO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHhtaXQuZGVzdCA9IG5laWdoLVxcdTAwM2VoYTtcXG4tXFx0XFx0c2tiX2RzdF9zZXRfbm9yZWYoc2tiLCBcXHUwMDI2cnQtXFx1MDAzZWRzdCk7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX0RJUkVDVDpcXG4tXFx0XFx0eG1pdC5vdXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShzdGF0ZS1cXHUwMDNlbmV0LCB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLm91dC5pZmlkeCk7XFxuLVxcdFxcdGlmICgheG1pdC5vdXRkZXYpIHtcXG4tXFx0XFx0XFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xcbi1cXHRcXHRcXHRyZXR1cm4gTkZfRFJPUDtcXG4tXFx0XFx0fVxcbi1cXHRcXHR4bWl0LmRlc3QgPSB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLm91dC5oX2Rlc3Q7XFxuLVxcdFxcdHhtaXQuc291cmNlID0gdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5vdXQuaF9zb3VyY2U7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuLVxcdFxcdHJldHVybiBORl9EUk9QO1xcbi1cXHR9XFxuLVxcdHhtaXQudHVwbGUgPSBvdGhlcl90dXBsZTtcXG4tXFx0eG1pdC5uZWVkc19nc29fc2VnbWVudCA9IHR1cGxlaGFzaC1cXHUwMDNldHVwbGUubmVlZHNfZ3NvX3NlZ21lbnQ7XFxuLVxcbi1cXHRyZXR1cm4gbmZfZmxvd19xdWV1ZV94bWl0KHN0YXRlLVxcdTAwM2VuZXQsIHNrYiwgXFx1MDAyNnhtaXQpO1xcbi19XFxuLUVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKTtcXG4tXFxuIHN0YXRpYyB2b2lkIG5mX2Zsb3dfbmF0X2lwdjZfdGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZixcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBpbjZfYWRkciAqYWRkcixcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBpbjZfYWRkciAqbmV3X2FkZHIsXFxuQEAgLTEwNjUsOCArMTAwNCwxNiBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gXFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcXG4gXFxuIFxcdG10dSA9IGZsb3ctXFx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlLm10dSArIGN0eC1cXHUwMDNlb2Zmc2V0O1xcbi1cXHRpZiAoZmxvdy1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXFxuK1xcdHN3aXRjaCAoZmxvdy1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bi5lbmNhcF9wcm90bykge1xcbitcXHRjYXNlIEFGX0lORVQ6XFxuK1xcdFxcdG10dSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUZfSU5FVDY6XFxuIFxcdFxcdG10dSAtPSBzaXplb2YoKmlwNmgpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gXFxuIFxcdGlmICh1bmxpa2VseShuZl9mbG93X2V4Y2VlZHNfbXR1KHNrYiwgbXR1KSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xMTAwLDYgKzEwNDcsMjUgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqXFxuK25mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHt9O1xcbitcXG4rXFx0aWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChjdHgsIHNrYiwgaHRvbnMoRVRIX1BfSVApKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZiAoY3R4LVxcdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7XFxuK1xcdFxcdGlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsIFxcdTAwMjZ0dXBsZSkgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fSBlbHNlIGlmIChuZl9mbG93X3R1cGxlX2lwKGN0eCwgc2tiLCBcXHUwMDI2dHVwbGUpIFxcdTAwM2MgMCkge1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXFx1MDAyNnR1cGxlKTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbiBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuQEAgLTExMTAsMTIgKzEwNzYsMTE4IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbiBcXHRpZiAoIW5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKGN0eCwgc2tiLCBodG9ucyhFVEhfUF9JUFY2KSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0aWYgKG5mX2Zsb3dfdHVwbGVfaXB2NihjdHgsIHNrYiwgXFx1MDAyNnR1cGxlKSBcXHUwMDNjIDApXFxuK1xcdGlmIChjdHgtXFx1MDAzZXR1bi5wcm90byA9PSBJUFBST1RPX0lQSVApIHtcXG4rXFx0XFx0aWYgKG5mX2Zsb3dfdHVwbGVfaXAoY3R4LCBza2IsIFxcdTAwMjZ0dXBsZSkgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fSBlbHNlIGlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsIFxcdTAwMjZ0dXBsZSkgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcXHUwMDI2dHVwbGUpO1xcbiB9XFxuIFxcbit1bnNpZ25lZCBpbnRcXG4rbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG4rXFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XFxuK1xcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlO1xcbitcXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xcbitcXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCBjdHggPSB7XFxuK1xcdFxcdC5pblxcdD0gc3RhdGUtXFx1MDAzZWluLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcXG4rXFx0c3RydWN0IGluNl9hZGRyICppcDZfZGFkZHI7XFxuK1xcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxuK1xcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoO1xcbitcXHRzdHJ1Y3QgcnRhYmxlICpydDtcXG4rXFx0X19iZTMyIGlwX2RhZGRyO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2xvb2t1cChcXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xcbitcXHRpZiAoIXR1cGxlaGFzaClcXG4rXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4rXFxuK1xcdGlmIChjdHgudHVuLnByb3RvID09IElQUFJPVE9fSVBWNilcXG4rXFx0XFx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChcXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHNrYik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoXFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuK1xcdGVsc2UgaWYgKHJldCA9PSAwKVxcbitcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KHR1cGxlaGFzaC1cXHUwMDNldHVwbGUueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX1hGUk0pKSB7XFxuK1xcdFxcdHJ0ID0gZHN0X3J0YWJsZSh0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XFxuK1xcdFxcdG1lbXNldChza2ItXFx1MDAzZWNiLCAwLCBzaXplb2Yoc3RydWN0IGluZXRfc2tiX3Bhcm0pKTtcXG4rXFx0XFx0SVBDQihza2IpLVxcdTAwM2VpaWYgPSBza2ItXFx1MDAzZWRldi1cXHUwMDNlaWZpbmRleDtcXG4rXFx0XFx0SVBDQihza2IpLVxcdTAwM2VmbGFncyA9IElQU0tCX0ZPUldBUkRFRDtcXG4rXFx0XFx0cmV0dXJuIG5mX2Zsb3dfeG1pdF94ZnJtKHNrYiwgc3RhdGUsIFxcdTAwMjZydC1cXHUwMDNlZHN0KTtcXG4rXFx0fVxcbitcXG4rXFx0ZGlyID0gdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kaXI7XFxuK1xcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XFxuK1xcdG90aGVyX3R1cGxlID0gXFx1MDAyNmZsb3ctXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZTtcXG4rXFx0aXBfZGFkZHIgPSBvdGhlcl90dXBsZS1cXHUwMDNlc3JjX3Y0LnNfYWRkcjtcXG4rXFx0aXA2X2RhZGRyID0gXFx1MDAyNm90aGVyX3R1cGxlLVxcdTAwM2VzcmNfdjY7XFxuK1xcbitcXHRpZiAobmZfZmxvd190dW5uZWxfcHVzaChzdGF0ZS1cXHUwMDNlbmV0LCBza2IsIG90aGVyX3R1cGxlLCBcXHUwMDI2aXBfZGFkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZpcDZfZGFkZHIpIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuK1xcbitcXHRzd2l0Y2ggKHR1cGxlaGFzaC1cXHUwMDNldHVwbGUueG1pdF90eXBlKSB7XFxuK1xcdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfTkVJR0g6IHtcXG4rXFx0XFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0O1xcbitcXG4rXFx0XFx0eG1pdC5vdXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShzdGF0ZS1cXHUwMDNlbmV0LCB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmlmaWR4KTtcXG4rXFx0XFx0aWYgKCF4bWl0Lm91dGRldikge1xcbitcXHRcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuK1xcdFxcdFxcdHJldHVybiBORl9EUk9QO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChvdGhlcl90dXBsZS1cXHUwMDNldHVuLmVuY2FwX3Byb3RvID09IEFGX0lORVQ2IHx8XFxuK1xcdFxcdCAgICBjdHgudHVuLnByb3RvID09IElQUFJPVE9fSVBWNikge1xcbitcXHRcXHRcXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0NjtcXG4rXFxuK1xcdFxcdFxcdHJ0NiA9IGRzdF9ydDZfaW5mbyh0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XFxuK1xcdFxcdFxcdG5laWdoID0gaXBfbmVpZ2hfZ3c2KHJ0Ni1cXHUwMDNlZHN0LmRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBydDZfbmV4dGhvcChydDYsIGlwNl9kYWRkcikpO1xcbitcXHRcXHRcXHRkc3QgPSBcXHUwMDI2cnQ2LVxcdTAwM2Vkc3Q7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHJ0ID0gZHN0X3J0YWJsZSh0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XFxuK1xcdFxcdFxcdG5laWdoID0gaXBfbmVpZ2hfZ3c0KHJ0LVxcdTAwM2Vkc3QuZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHJ0X25leHRob3AocnQsIGlwX2RhZGRyKSk7XFxuK1xcdFxcdFxcdGRzdCA9IFxcdTAwMjZydC1cXHUwMDNlZHN0O1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChJU19FUlIobmVpZ2gpKSB7XFxuK1xcdFxcdFxcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcXG4rXFx0XFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuK1xcdFxcdH1cXG4rXFx0XFx0eG1pdC5kZXN0ID0gbmVpZ2gtXFx1MDAzZWhhO1xcbitcXHRcXHRza2JfZHN0X3NldF9ub3JlZihza2IsIGRzdCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUOlxcbitcXHRcXHR4bWl0Lm91dGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHN0YXRlLVxcdTAwM2VuZXQsIHR1cGxlaGFzaC1cXHUwMDNldHVwbGUub3V0LmlmaWR4KTtcXG4rXFx0XFx0aWYgKCF4bWl0Lm91dGRldikge1xcbitcXHRcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuK1xcdFxcdFxcdHJldHVybiBORl9EUk9QO1xcbitcXHRcXHR9XFxuK1xcdFxcdHhtaXQuZGVzdCA9IHR1cGxlaGFzaC1cXHUwMDNldHVwbGUub3V0LmhfZGVzdDtcXG4rXFx0XFx0eG1pdC5zb3VyY2UgPSB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLm91dC5oX3NvdXJjZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdFdBUk5fT05fT05DRSgxKTtcXG4rXFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuK1xcdH1cXG4rXFx0eG1pdC50dXBsZSA9IG90aGVyX3R1cGxlO1xcbitcXHR4bWl0Lm5lZWRzX2dzb19zZWdtZW50ID0gdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5uZWVkc19nc29fc2VnbWVudDtcXG4rXFxuK1xcdHJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQoc3RhdGUtXFx1MDAzZW5ldCwgc2tiLCBcXHUwMDI2eG1pdCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19vZmZsb2FkX2lwX2hvb2spO1xcbitcXG4gdW5zaWduZWQgaW50XFxuIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuQEAgLTExMzIsMTMgKzEyMDQsMTggQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbiBcXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcXG4gXFx0c3RydWN0IHJ0Nl9pbmZvICpydDtcXG4rXFx0X19iZTMyIGlwX2RhZGRyO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XFxuIFxcdGlmICh0dXBsZWhhc2ggPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFxuLVxcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoXFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xcbitcXHRpZiAoY3R4LnR1bi5wcm90byA9PSBJUFBST1RPX0lQSVApXFxuK1xcdFxcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgc2tiKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBORl9EUk9QO1xcbiBcXHRlbHNlIGlmIChyZXQgPT0gMClcXG5AQCAtMTE1NSwyOCArMTIzMiw0NCBAQCBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGRpciA9IHR1cGxlaGFzaC1cXHUwMDNldHVwbGUuZGlyO1xcbiBcXHRmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pO1xcbiBcXHRvdGhlcl90dXBsZSA9IFxcdTAwMjZmbG93LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGU7XFxuK1xcdGlwX2RhZGRyID0gb3RoZXJfdHVwbGUtXFx1MDAzZXNyY192NC5zX2FkZHI7XFxuIFxcdGlwNl9kYWRkciA9IFxcdTAwMjZvdGhlcl90dXBsZS1cXHUwMDNlc3JjX3Y2O1xcbiBcXG4tXFx0aWYgKG5mX2Zsb3dfdHVubmVsX3Y2X3B1c2goc3RhdGUtXFx1MDAzZW5ldCwgc2tiLCBvdGhlcl90dXBsZSxcXG4tXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmlwNl9kYWRkcikgXFx1MDAzYyAwKVxcbitcXHRpZiAobmZfZmxvd190dW5uZWxfcHVzaChzdGF0ZS1cXHUwMDNlbmV0LCBza2IsIG90aGVyX3R1cGxlLCBcXHUwMDI2aXBfZGFkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZpcDZfZGFkZHIpIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuIFxcbiBcXHRzd2l0Y2ggKHR1cGxlaGFzaC1cXHUwMDNldHVwbGUueG1pdF90eXBlKSB7XFxuLVxcdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfTkVJR0g6XFxuLVxcdFxcdHJ0ID0gZHN0X3J0Nl9pbmZvKHR1cGxlaGFzaC1cXHUwMDNldHVwbGUuZHN0X2NhY2hlKTtcXG4rXFx0Y2FzZSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSDoge1xcbitcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XFxuK1xcbiBcXHRcXHR4bWl0Lm91dGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHN0YXRlLVxcdTAwM2VuZXQsIHR1cGxlaGFzaC1cXHUwMDNldHVwbGUuaWZpZHgpO1xcbiBcXHRcXHRpZiAoIXhtaXQub3V0ZGV2KSB7XFxuIFxcdFxcdFxcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuIFxcdFxcdH1cXG4tXFx0XFx0bmVpZ2ggPSBpcF9uZWlnaF9ndzYocnQtXFx1MDAzZWRzdC5kZXYsIHJ0Nl9uZXh0aG9wKHJ0LCBpcDZfZGFkZHIpKTtcXG4rXFx0XFx0aWYgKG90aGVyX3R1cGxlLVxcdTAwM2V0dW4uZW5jYXBfcHJvdG8gPT0gQUZfSU5FVCB8fFxcbitcXHRcXHQgICAgY3R4LnR1bi5wcm90byA9PSBJUFBST1RPX0lQSVApIHtcXG4rXFx0XFx0XFx0c3RydWN0IHJ0YWJsZSAqcnQ0O1xcbitcXG4rXFx0XFx0XFx0cnQ0ID0gZHN0X3J0YWJsZSh0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XFxuK1xcdFxcdFxcdG5laWdoID0gaXBfbmVpZ2hfZ3c0KHJ0NC1cXHUwMDNlZHN0LmRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBydF9uZXh0aG9wKHJ0NCwgaXBfZGFkZHIpKTtcXG4rXFx0XFx0XFx0ZHN0ID0gXFx1MDAyNnJ0NC1cXHUwMDNlZHN0O1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRydCA9IGRzdF9ydDZfaW5mbyh0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XFxuK1xcdFxcdFxcdG5laWdoID0gaXBfbmVpZ2hfZ3c2KHJ0LVxcdTAwM2Vkc3QuZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHJ0Nl9uZXh0aG9wKHJ0LCBpcDZfZGFkZHIpKTtcXG4rXFx0XFx0XFx0ZHN0ID0gXFx1MDAyNnJ0LVxcdTAwM2Vkc3Q7XFxuK1xcdFxcdH1cXG4gXFx0XFx0aWYgKElTX0VSUihuZWlnaCkpIHtcXG4gXFx0XFx0XFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xcbiBcXHRcXHRcXHRyZXR1cm4gTkZfRFJPUDtcXG4gXFx0XFx0fVxcbiBcXHRcXHR4bWl0LmRlc3QgPSBuZWlnaC1cXHUwMDNlaGE7XFxuLVxcdFxcdHNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbitcXHRcXHRza2JfZHN0X3NldF9ub3JlZihza2IsIGRzdCk7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUOlxcbiBcXHRcXHR4bWl0Lm91dGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHN0YXRlLVxcdTAwM2VuZXQsIHR1cGxlaGFzaC1cXHUwMDNldHVwbGUub3V0LmlmaWR4KTtcXG4gXFx0XFx0aWYgKCF4bWl0Lm91dGRldikge1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xcbmluZGV4IDk4YzAzYjQ4N2Y1MjExLi41ZTg0YjdmMThhMjY3ZiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xcbkBAIC00NSw3ICs0NSw4IEBAIHN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi1cXHRcXHRcXHRcXHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIHU4ICpoYSxcXG4rXFx0XFx0XFx0XFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbitcXHRcXHRcXHRcXHQgICAgIHU4ICpoYSwgX19iZTE2IGV0aGVyX3R5cGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuIHtcXG4gXFx0Y29uc3Qgdm9pZCAqZGFkZHIgPSBcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTM7XFxuQEAgLTcyLDcgKzczLDcgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4gb3V0Olxcbi1cXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIHN0YWNrKTtcXG4rXFx0cmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGhhLCBldGhlcl90eXBlLCBzdGFjayk7XFxuIH1cXG4gXFxuIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcXG5AQCAtMTI4LDYgKzEyOSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXFxuIFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZXR1bi5zcmNfdjYgPSBwYXRoLVxcdTAwM2V0dW4uc3JjX3Y2O1xcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2V0dW4uZHN0X3Y2ID0gcGF0aC1cXHUwMDNldHVuLmRzdF92NjtcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNldHVuLmwzX3Byb3RvID0gcGF0aC1cXHUwMDNldHVuLmwzX3Byb3RvO1xcbitcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2V0dW4uZW5jYXBfcHJvdG8gPSBwYXRoLVxcdTAwM2V0dW4uZW5jYXBfcHJvdG87XFxuIFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZW51bV90dW5zKys7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VudW1fZW5jYXBzIFxcdTAwM2U9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKVxcbkBAIC0yMTQsMTIgKzIxNiwxMyBAQCBzdGF0aWMgaW50IG5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuIFxcdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3QgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgZmxvd2kgZmwgPSB7fTtcXG4gXFxuLVxcdHN3aXRjaCAobmZ0X3BmKHBrdCkpIHtcXG4rXFx0c3dpdGNoICh0dW4tXFx1MDAzZWVuY2FwX3Byb3RvKSB7XFxuIFxcdGNhc2UgTkZQUk9UT19JUFY0OlxcbiBcXHRcXHRmbC51LmlwNC5kYWRkciA9IHR1bi1cXHUwMDNlZHN0X3Y0LnNfYWRkcjtcXG4gXFx0XFx0ZmwudS5pcDQuc2FkZHIgPSB0dW4tXFx1MDAzZXNyY192NC5zX2FkZHI7XFxuIFxcdFxcdGZsLnUuaXA0LmZsb3dpNF9paWYgPSBuZnRfaW4ocGt0KS1cXHUwMDNlaWZpbmRleDtcXG4tXFx0XFx0ZmwudS5pcDQuZmxvd2k0X2RzY3AgPSBpcDRoX2RzY3AoaXBfaGRyKHBrdC1cXHUwMDNlc2tiKSk7XFxuK1xcdFxcdGlmIChuZnRfcGYocGt0KSA9PSBORlBST1RPX0lQVjQpXFxuK1xcdFxcdFxcdGZsLnUuaXA0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwX2hkcihwa3QtXFx1MDAzZXNrYikpO1xcbiBcXHRcXHRmbC51LmlwNC5mbG93aTRfbWFyayA9IHBrdC1cXHUwMDNlc2tiLVxcdTAwM2VtYXJrO1xcbiBcXHRcXHRmbC51LmlwNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0FOWVNSQztcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTIyNywxMyArMjMwLDE0IEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4gXFx0XFx0ZmwudS5pcDYuZGFkZHIgPSB0dW4tXFx1MDAzZWRzdF92NjtcXG4gXFx0XFx0ZmwudS5pcDYuc2FkZHIgPSB0dW4tXFx1MDAzZXNyY192NjtcXG4gXFx0XFx0ZmwudS5pcDYuZmxvd2k2X2lpZiA9IG5mdF9pbihwa3QpLVxcdTAwM2VpZmluZGV4O1xcbi1cXHRcXHRmbC51LmlwNi5mbG93bGFiZWwgPSBpcDZfZmxvd2luZm8oaXB2Nl9oZHIocGt0LVxcdTAwM2Vza2IpKTtcXG4rXFx0XFx0aWYgKG5mdF9wZihwa3QpID09IE5GUFJPVE9fSVBWNilcXG4rXFx0XFx0XFx0ZmwudS5pcDYuZmxvd2xhYmVsID0gaXA2X2Zsb3dpbmZvKGlwdjZfaGRyKHBrdC1cXHUwMDNlc2tiKSk7XFxuIFxcdFxcdGZsLnUuaXA2LmZsb3dpNl9tYXJrID0gcGt0LVxcdTAwM2Vza2ItXFx1MDAzZW1hcms7XFxuIFxcdFxcdGZsLnUuaXA2LmZsb3dpNl9mbGFncyA9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4tXFx0bmZfcm91dGUobmZ0X25ldChwa3QpLCBcXHUwMDI2dHVuX2RzdCwgXFx1MDAyNmZsLCBmYWxzZSwgbmZ0X3BmKHBrdCkpO1xcbitcXHRuZl9yb3V0ZShuZnRfbmV0KHBrdCksIFxcdTAwMjZ0dW5fZHN0LCBcXHUwMDI2ZmwsIGZhbHNlLCB0dW4tXFx1MDAzZWVuY2FwX3Byb3RvKTtcXG4gXFx0aWYgKCF0dW5fZHN0KVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuQEAgLTI1NSw3ICsyNTksOCBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbiBcXHR1bnNpZ25lZCBjaGFyIGhhW0VUSF9BTEVOXTtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgXFx1MDAyNnN0YWNrKSBcXHUwMDNjIDAgfHxcXG4rXFx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocm91dGUsIGRzdCwgY3QsIGRpciwgaGEsIHBrdC1cXHUwMDNlZXRoZXJ0eXBlLFxcbitcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2c3RhY2spIFxcdTAwM2MgMCB8fFxcbiBcXHQgICAgbmZ0X2Rldl9wYXRoX2luZm8oXFx1MDAyNnN0YWNrLCBcXHUwMDI2aW5mbywgaGEsIFxcdTAwMjZmdC1cXHUwMDNlZGF0YSkgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuQEAgLTI3Niw2ICsyODEsNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbiBcXHRcXHRyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLnNyY192NiA9IGluZm8udHVuLmRzdF92NjtcXG4gXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5kc3RfdjYgPSBpbmZvLnR1bi5zcmNfdjY7XFxuIFxcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi50dW4ubDNfcHJvdG8gPSBpbmZvLnR1bi5sM19wcm90bztcXG4rXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5lbmNhcF9wcm90byA9IGluZm8udHVuLmVuY2FwX3Byb3RvO1xcbiBcXHRcXHRyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0uaW4ubnVtX3R1bnMgPSBpbmZvLm51bV90dW5zO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29uZmlnXFxuaW5kZXggYzNjMTIxYjZmMzAwYTkuLmEyMTJiOWVkYmNkOTdlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29uZmlnXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWdcXG5AQCAtMzUsNiArMzUsNyBAQCBDT05GSUdfSVBfU0NUUD1tXFxuIENPTkZJR19JUFY2PXlcXG4gQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXlcXG4gQ09ORklHX0lQVjZfVFVOTkVMPW1cXG4rQ09ORklHX0lQVjZfU0lUPW1cXG4gQ09ORklHX0lQX1ZTPW1cXG4gQ09ORklHX0lQX1ZTX1BST1RPX1RDUD15XFxuIENPTkZJR19JUF9WU19SUj1tXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxcbmluZGV4IDA4YWQwNzUwMGU4YTcxLi40NmJkMDgwMTA4YmUzNiAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcXG5AQCAtNTc5LDkgKzU3OSw4IEBAIGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19uYXQgXFxcIiRuczFcXFwiIFxcXCIkbnMyXFxcIiAxIFxcXCJcXFwiOyB0aGVuXFxuIFxcdGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgbGlzdCBydWxlc2V0XFxuIGZpXFxuIFxcbi0jIElQSVAgdHVubmVsIHRlc3Q6XFxuLSMgQWRkIElQSVAgdHVubmVsIGludGVyZmFjZXMgYW5kIGNoZWNrIGZsb3d0YWJsZSBhY2NlbGVyYXRpb24uXFxuLXRlc3RfaXBpcCgpIHtcXG4rIyBJUCB0dW5uZWwgdGVzdHM6XFxuK3Rlc3RfaXBfdG5scygpIHtcXG4gaWYgISBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgbGluayBhZGQgbmFtZSB0dW4wIHR5cGUgaXBpcCBcXFxcXFxuICAgICAgbG9jYWwgMTkyLjE2OC4xMC4xIHJlbW90ZSAxOTIuMTY4LjEwLjIgXFx1MDAzZS9kZXYvbnVsbDt0aGVuXFxuIFxcdGVjaG8gXFxcIlNLSVA6IGNvdWxkIG5vdCBhZGQgaXBpcCB0dW5uZWxcXFwiXFxuQEAgLTU5NCw3ICs1OTMsMTMgQEAgaXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjAuZm9yd2FyZGluZz0xIFxcdTAwM2UgL2Rldi9udWxsXFxuIFxcbiBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgbGluayBhZGQgbmFtZSB0dW42IHR5cGUgaXA2dG5sIGxvY2FsIGZlZTE6Mjo6MSByZW1vdGUgZmVlMToyOjoyIGVuY2FwbGltaXQgbm9uZVxcbiBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgbGluayBzZXQgdHVuNiB1cFxcbitpcCAtbmV0IFxcXCIkbnNyMVxcXCIgYWRkciBhZGQgMTkyLjE2OC4yMTAuMS8yNCBkZXYgdHVuNlxcbiBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgYWRkciBhZGQgZmVlMTozOjoxLzY0IGRldiB0dW42IG5vZGFkXFxuK2lwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW42LmZvcndhcmRpbmc9MSBcXHUwMDNlIC9kZXYvbnVsbFxcbitcXG4raXAgLW5ldCBcXFwiJG5zcjFcXFwiIGxpbmsgYWRkIG5hbWUgc2l0MSB0eXBlIHNpdCBsb2NhbCAxOTIuMTY4LjEwLjEgcmVtb3RlIDE5Mi4xNjguMTAuMiB0dGwgMjU1XFxuK2lwIC1uZXQgXFxcIiRuc3IxXFxcIiBsaW5rIHNldCBzaXQxIHVwXFxuK2lwIC1uZXQgXFxcIiRuc3IxXFxcIiBhZGRyIGFkZCBmZTAxOjM6OjEvNjQgZGV2IHNpdDEgbm9kYWRcXG4gXFxuIGlwIC1uZXQgXFxcIiRuc3IyXFxcIiBsaW5rIGFkZCBuYW1lIHR1bjAgdHlwZSBpcGlwIGxvY2FsIDE5Mi4xNjguMTAuMiByZW1vdGUgMTkyLjE2OC4xMC4xXFxuIGlwIC1uZXQgXFxcIiRuc3IyXFxcIiBsaW5rIHNldCB0dW4wIHVwXFxuQEAgLTYwMyw3ICs2MDgsMTMgQEAgaXAgbmV0bnMgZXhlYyBcXFwiJG5zcjJcXFwiIHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjAuZm9yd2FyZGluZz0xIFxcdTAwM2UgL2Rldi9udWxsXFxuIFxcbiBpcCAtbmV0IFxcXCIkbnNyMlxcXCIgbGluayBhZGQgbmFtZSB0dW42IHR5cGUgaXA2dG5sIGxvY2FsIGZlZTE6Mjo6MiByZW1vdGUgZmVlMToyOjoxIGVuY2FwbGltaXQgbm9uZSB8fCByZXQ9MVxcbiBpcCAtbmV0IFxcXCIkbnNyMlxcXCIgbGluayBzZXQgdHVuNiB1cFxcbitpcCAtbmV0IFxcXCIkbnNyMlxcXCIgYWRkciBhZGQgMTkyLjE2OC4yMTAuMi8yNCBkZXYgdHVuNlxcbiBpcCAtbmV0IFxcXCIkbnNyMlxcXCIgYWRkciBhZGQgZmVlMTozOjoyLzY0IGRldiB0dW42IG5vZGFkXFxuK2lwIG5ldG5zIGV4ZWMgXFxcIiRuc3IyXFxcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW42LmZvcndhcmRpbmc9MSBcXHUwMDNlIC9kZXYvbnVsbFxcbitcXG4raXAgLW5ldCBcXFwiJG5zcjJcXFwiIGxpbmsgYWRkIG5hbWUgc2l0MSB0eXBlIHNpdCBsb2NhbCAxOTIuMTY4LjEwLjIgcmVtb3RlIDE5Mi4xNjguMTAuMSB0dGwgMjU1XFxuK2lwIC1uZXQgXFxcIiRuc3IyXFxcIiBsaW5rIHNldCBzaXQxIHVwXFxuK2lwIC1uZXQgXFxcIiRuc3IyXFxcIiBhZGRyIGFkZCBmZTAxOjM6OjIvNjQgZGV2IHNpdDEgbm9kYWRcXG4gXFxuIGlwIC1uZXQgXFxcIiRuc3IxXFxcIiByb3V0ZSBjaGFuZ2UgZGVmYXVsdCB2aWEgMTkyLjE2OC4xMDAuMlxcbiBpcCAtbmV0IFxcXCIkbnNyMlxcXCIgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMTAwLjFcXG5AQCAtNjE5LDYgKzYzMCw3IEBAIGlwIC02IC1uZXQgXFxcIiRuczJcXFwiIHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBkZWFkOjI6OjFcXG4gXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAnbWV0YSBvaWYgdHVuMCBhY2NlcHQnXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAnbWV0YSBvaWYgdHVuNiBhY2NlcHQnXFxuK2lwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAnbWV0YSBvaWYgc2l0MSBhY2NlcHQnXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcXFxcXFxuIFxcdCdtZXRhIG9pZiBcXFwidmV0aDBcXFwiIHRjcCBzcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX3JlcGwgYWNjZXB0J1xcbiBcXG5AQCAtNjM2LDYgKzY0OCwyOCBAQCBlbHNlXFxuIFxcdHJldD0xXFxuIGZpXFxuIFxcbitpcCAtbmV0IFxcXCIkbnNyMVxcXCIgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMjEwLjJcXG4raXAgLW5ldCBcXFwiJG5zcjJcXFwiIHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIxMC4xXFxuK1xcbitpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0IFxcXCIkbnMxXFxcIiBcXFwiJG5zMlxcXCIgMSBcXFwiSVA0SVA2IHR1bm5lbFxcXCI7IHRoZW5cXG4rXFx0ZWNobyBcXFwiRkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggSVA0SVA2IHR1bm5lbFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IGxpc3QgcnVsZXNldFxcbitcXHRyZXQ9MVxcbitmaVxcbitcXG4raXAgLTYgLW5ldCBcXFwiJG5zcjFcXFwiIHJvdXRlIGRlbGV0ZSBkZWZhdWx0XFxuK2lwIC02IC1uZXQgXFxcIiRuc3IxXFxcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmUwMTozOjoyXFxuK2lwIC02IC1uZXQgXFxcIiRuc3IyXFxcIiByb3V0ZSBkZWxldGUgZGVmYXVsdFxcbitpcCAtNiAtbmV0IFxcXCIkbnNyMlxcXCIgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlMDE6Mzo6MVxcbitcXG4raWYgdGVzdF90Y3BfZm9yd2FyZGluZyBcXFwiJG5zMVxcXCIgXFxcIiRuczJcXFwiIDEgNiBcXFwiW2RlYWQ6Mjo6OTldXFxcIiAxMjM0NTsgdGhlblxcbitcXHRlY2hvIFxcXCJQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgU0lUIHR1bm5lbFxcXCJcXG4rZWxzZVxcbitcXHRlY2hvIFxcXCJGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBTSVQgdHVubmVsXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgbGlzdCBydWxlc2V0XFxuK1xcdHJldD0xXFxuK2ZpXFxuK1xcbiAjIENyZWF0ZSB2bGFuIHRhZ2dlZCBkZXZpY2VzIGZvciBJUElQIHRyYWZmaWMuXFxuIGlwIC1uZXQgXFxcIiRuc3IxXFxcIiBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgdmV0aDEuMTAgdHlwZSB2bGFuIGlkIDEwXFxuIGlwIC1uZXQgXFxcIiRuc3IxXFxcIiBsaW5rIHNldCB2ZXRoMS4xMCB1cFxcbkBAIC02NTMsMTEgKzY4NywxOCBAQCBpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJ21ldGEgb2lmIHR1bjAuMTAgYVxcbiBcXG4gaXAgLW5ldCBcXFwiJG5zcjFcXFwiIGxpbmsgYWRkIG5hbWUgdHVuNi4xMCB0eXBlIGlwNnRubCBsb2NhbCBmZWUxOjQ6OjEgcmVtb3RlIGZlZTE6NDo6MiBlbmNhcGxpbWl0IG5vbmVcXG4gaXAgLW5ldCBcXFwiJG5zcjFcXFwiIGxpbmsgc2V0IHR1bjYuMTAgdXBcXG4raXAgLW5ldCBcXFwiJG5zcjFcXFwiIGFkZHIgYWRkIDE5Mi4xNjguMjIwLjEvMjQgZGV2IHR1bjYuMTBcXG4gaXAgLW5ldCBcXFwiJG5zcjFcXFwiIGFkZHIgYWRkIGZlZTE6NTo6MS82NCBkZXYgdHVuNi4xMCBub2RhZFxcbitpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgc3lzY3RsIG5ldC5pcHY0LmNvbmYudHVuNi8xMC5mb3J3YXJkaW5nPTEgXFx1MDAzZSAvZGV2L251bGxcXG4gaXAgLTYgLW5ldCBcXFwiJG5zcjFcXFwiIHJvdXRlIGRlbGV0ZSBkZWZhdWx0XFxuIGlwIC02IC1uZXQgXFxcIiRuc3IxXFxcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmVlMTo1OjoyXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAnbWV0YSBvaWYgdHVuNi4xMCBhY2NlcHQnXFxuIFxcbitpcCAtbmV0IFxcXCIkbnNyMVxcXCIgbGluayBhZGQgbmFtZSBzaXQxLjEwIHR5cGUgc2l0IGxvY2FsIDE5Mi4xNjguMjAuMSByZW1vdGUgMTkyLjE2OC4yMC4yIHR0bCAyNTVcXG4raXAgLW5ldCBcXFwiJG5zcjFcXFwiIGxpbmsgc2V0IHNpdDEuMTAgdXBcXG4raXAgLW5ldCBcXFwiJG5zcjFcXFwiIGFkZHIgYWRkIGZlMDE6NTo6MS82NCBkZXYgc2l0MS4xMCBub2RhZFxcbitpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJ21ldGEgb2lmIHNpdDEuMTAgYWNjZXB0J1xcbitcXG4gaXAgLW5ldCBcXFwiJG5zcjJcXFwiIGxpbmsgYWRkIGxpbmsgdmV0aDAgbmFtZSB2ZXRoMC4xMCB0eXBlIHZsYW4gaWQgMTBcXG4gaXAgLW5ldCBcXFwiJG5zcjJcXFwiIGxpbmsgc2V0IHZldGgwLjEwIHVwXFxuIGlwIC1uZXQgXFxcIiRuc3IyXFxcIiBhZGRyIGFkZCAxOTIuMTY4LjIwLjIvMjQgZGV2IHZldGgwLjEwXFxuQEAgLTY3Miw3ICs3MTMsMTQgQEAgaXAgbmV0bnMgZXhlYyBcXFwiJG5zcjJcXFwiIHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjAvMTAuZm9yd2FyZGluZz0xIFxcdTAwM2UgL2Rldi9udWxsXFxuIFxcbiBpcCAtbmV0IFxcXCIkbnNyMlxcXCIgbGluayBhZGQgbmFtZSB0dW42LjEwIHR5cGUgaXA2dG5sIGxvY2FsIGZlZTE6NDo6MiByZW1vdGUgZmVlMTo0OjoxIGVuY2FwbGltaXQgbm9uZSB8fCByZXQ9MVxcbiBpcCAtbmV0IFxcXCIkbnNyMlxcXCIgbGluayBzZXQgdHVuNi4xMCB1cFxcbitpcCAtbmV0IFxcXCIkbnNyMlxcXCIgYWRkciBhZGQgMTkyLjE2OC4yMjAuMi8yNCBkZXYgdHVuNi4xMFxcbiBpcCAtbmV0IFxcXCIkbnNyMlxcXCIgYWRkciBhZGQgZmVlMTo1OjoyLzY0IGRldiB0dW42LjEwIG5vZGFkXFxuK2lwIG5ldG5zIGV4ZWMgXFxcIiRuc3IyXFxcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW42LzEwLmZvcndhcmRpbmc9MSBcXHUwMDNlIC9kZXYvbnVsbFxcbitcXG4raXAgLW5ldCBcXFwiJG5zcjJcXFwiIGxpbmsgYWRkIG5hbWUgc2l0MS4xMCB0eXBlIHNpdCBsb2NhbCAxOTIuMTY4LjIwLjIgcmVtb3RlIDE5Mi4xNjguMjAuMSB0dGwgMjU1XFxuK2lwIC1uZXQgXFxcIiRuc3IyXFxcIiBsaW5rIHNldCBzaXQxLjEwIHVwXFxuK2lwIC1uZXQgXFxcIiRuc3IyXFxcIiBhZGRyIGFkZCBmZTAxOjU6OjIvNjQgZGV2IHNpdDEuMTAgbm9kYWRcXG4rXFxuIGlwIC02IC1uZXQgXFxcIiRuc3IyXFxcIiByb3V0ZSBkZWxldGUgZGVmYXVsdFxcbiBpcCAtNiAtbmV0IFxcXCIkbnNyMlxcXCIgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlZTE6NTo6MVxcbiBcXG5AQCAtNjkwLDYgKzczOCwyOCBAQCBlbHNlXFxuIFxcdHJldD0xXFxuIGZpXFxuIFxcbitpcCAtbmV0IFxcXCIkbnNyMVxcXCIgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMjIwLjJcXG4raXAgLW5ldCBcXFwiJG5zcjJcXFwiIHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIyMC4xXFxuK1xcbitpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0IFxcXCIkbnMxXFxcIiBcXFwiJG5zMlxcXCIgMSBcXFwiSVA0SVA2IHR1bm5lbCBvdmVyIHZsYW5cXFwiOyB0aGVuXFxuK1xcdGVjaG8gXFxcIkZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIElQNElQNiB0dW5uZWwgb3ZlciB2bGFuXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgbGlzdCBydWxlc2V0XFxuK1xcdHJldD0xXFxuK2ZpXFxuK1xcbitpcCAtNiAtbmV0IFxcXCIkbnNyMVxcXCIgcm91dGUgZGVsZXRlIGRlZmF1bHRcXG4raXAgLTYgLW5ldCBcXFwiJG5zcjFcXFwiIHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBmZTAxOjU6OjJcXG4raXAgLTYgLW5ldCBcXFwiJG5zcjJcXFwiIHJvdXRlIGRlbGV0ZSBkZWZhdWx0XFxuK2lwIC02IC1uZXQgXFxcIiRuc3IyXFxcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmUwMTo1OjoxXFxuK1xcbitpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nIFxcXCIkbnMxXFxcIiBcXFwiJG5zMlxcXCIgMSA2IFxcXCJbZGVhZDoyOjo5OV1cXFwiIDEyMzQ1OyB0aGVuXFxuK1xcdGVjaG8gXFxcIlBBU1M6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiBTSVQgdHVubmVsIG92ZXIgdmxhblxcXCJcXG4rZWxzZVxcbitcXHRlY2hvIFxcXCJGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBTSVQgdHVubmVsIG92ZXIgdmxhblxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IGxpc3QgcnVsZXNldFxcbitcXHRyZXQ9MVxcbitmaVxcbitcXG4gIyBSZXN0b3JlIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uXFxuIGlwIC1uZXQgXFxcIiRuc3IxXFxcIiByb3V0ZSBjaGFuZ2UgZGVmYXVsdCB2aWEgMTkyLjE2OC4xMC4yXFxuIGlwIC1uZXQgXFxcIiRuc3IyXFxcIiByb3V0ZSBjaGFuZ2UgZGVmYXVsdCB2aWEgMTkyLjE2OC4xMC4xXFxuQEAgLTc4Miw3ICs4NTIsNyBAQCBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgYWRkciBhZGQgZGVhZDoxOjoxLzY0IGRldiB2ZXRoMCBub2RhZFxcbiBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgbGluayBzZXQgdXAgZGV2IHZldGgwXFxuIH1cXG4gXFxuLXRlc3RfaXBpcFxcbit0ZXN0X2lwX3RubHNcXG4gXFxuIHRlc3RfYnJpZGdlXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToyODozMi44MDI2MDQ4MzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5OTA3ODE0NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJJUFY2X1NJVFwiLFxuICAgIFwiSVBWNl9UVU5ORUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcGlwNl90dW5uZWxfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcIm5mX2Zsb3dfdHVubmVsX2lwX3B1c2hcIixcbiAgICBcIm5mX2Zsb3dfdHVubmVsX2lwNl9wdXNoXCIsXG4gICAgXCJuZl9mbG93X3R1bm5lbF9wdXNoXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfbG9va3VwXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXBcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rXCIsXG4gICAgXCJuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBJUC1pbi1JUCwgU0lUIChJUHY2LWluLUlQdjQpLCBhbmQgSVB2Ni1pbi1JUHY2IHR1bm5lbHMgaW4gdGhlIG5ldGZpbHRlciBmbG93dGFibGUgb2ZmbG9hZC4gSXQgbW9kaWZpZXMgY29yZSBuZXRmaWx0ZXIgZmxvd3RhYmxlIGxvZ2ljIGFuZCB0dW5uZWwgZHJpdmVycyB0byBzdXBwb3J0IGZpbGxpbmcgdGhlIGZvcndhcmQgcGF0aCBhbmQgcHVzaGluZyB0dW5uZWwgaGVhZGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZTY5MjgyM2QwYzBkYzJlZmQ4YWYwOTRkNzBlODljYTA4MDFmZTczXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDE6Mjg6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggZTdjNzgyOTMwMDJhYmIuLjA2ZDEyOGM2N2M4YzQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuQEAgLTI3Niw3ICsyNzYsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19tYW5nbGVfaXB2NChjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcbitzdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0ICAgIGNvbnN0IHU4ICphZGRyLCBfX2JlMTYgZXRoZXJfdHlwZSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgYWlyb2hhX3dkbWFfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrO1xuQEAgLTI4Nyw3ICsyODgsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcdTAwMjZzdGFjayk7XG4rXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBldGhlcl90eXBlLCBcdTAwMjZzdGFjayk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG5AQCAtMzMxLDcgKzMzMiw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSAqaHdlLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdHlwZSxcbiBcdFx0XHRcdFx0c3RydWN0IGFpcm9oYV9mbG93X2RhdGEgKmRhdGEsXG4tXHRcdFx0XHRcdGludCBsNHByb3RvKVxuK1x0XHRcdFx0XHRfX2JlMTYgZXRoZXJfdHlwZSwgaW50IGw0cHJvdG8pXG4ge1xuIFx0dTMyIHFkYXRhID0gRklFTERfUFJFUChBSVJPSEFfRk9FX1NIQVBFUl9JRCwgMHg3ZiksIHBvcnRzX3BhZCwgdmFsO1xuIFx0aW50IHdsYW5fZXR5cGUgPSAtRUlOVkFMLCBkc2FfcG9ydCA9IGFpcm9oYV9nZXRfZHNhX3BvcnQoXHUwMDI2bmV0ZGV2KTtcbkBAIC0zNTQsNyArMzU1LDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdHN0cnVjdCBhaXJvaGFfd2RtYV9pbmZvIGluZm8gPSB7fTtcbiBcbiBcdFx0aWYgKCFhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8obmV0ZGV2LCBkYXRhLVx1MDAzZWV0aC5oX2Rlc3QsXG4tXHRcdFx0XHRcdCAgICAgIFx1MDAyNmluZm8pKSB7XG4rXHRcdFx0XHRcdCAgICAgIGV0aGVyX3R5cGUsIFx1MDAyNmluZm8pKSB7XG4gXHRcdFx0dmFsIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9JQjJfTkJRLCBpbmZvLmlkeCkgfFxuIFx0XHRcdCAgICAgICBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfSUIyX1BTRV9QT1JULFxuIFx0XHRcdFx0XHQgIEZFX1BTRV9QT1JUX0NETTQpO1xuQEAgLTEwODEsNiArMTA4Miw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XG4gXHRzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSBod2U7XG4gXHRpbnQgZXJyLCBpLCBvZmZsb2FkX3R5cGU7XG4rXHRfX2JlMTYgZXRoZXJfdHlwZSA9IDA7XG4gXHR1MTYgYWRkcl90eXBlID0gMDtcbiBcdHU4IGw0cHJvdG8gPSAwO1xuIFxuQEAgLTExMDcsNiArMTEwOSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRzdHJ1Y3QgZmxvd19tYXRjaF9iYXNpYyBtYXRjaDtcbiBcbiBcdFx0Zmxvd19ydWxlX21hdGNoX2Jhc2ljKHJ1bGUsIFx1MDAyNm1hdGNoKTtcbitcdFx0ZXRoZXJfdHlwZSA9IG1hdGNoLmtleS1cdTAwM2VuX3Byb3RvO1xuIFx0XHRsNHByb3RvID0gbWF0Y2gua2V5LVx1MDAzZWlwX3Byb3RvO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuQEAgLTExNzcsNyArMTE4MCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCBcdTAwMjZod2UsIG9kZXYsIG9mZmxvYWRfdHlwZSxcbi1cdFx0XHRcdFx0ICAgXHUwMDI2ZGF0YSwgbDRwcm90byk7XG4rXHRcdFx0XHRcdCAgIFx1MDAyNmRhdGEsIGV0aGVyX3R5cGUsIGw0cHJvdG8pO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXG5pbmRleCBjYzhjNGVmODAzOGYzMC4uMjYwMWMxN2IyOWM4YjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcbkBAIC04OSw3ICs4OSw4IEBAIG10a19mbG93X29mZmxvYWRfbWFuZ2xlX2V0aChjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdCwgdm9pZCAqZXRoKVxuIH1cbiBcbiBzdGF0aWMgaW50XG4tbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2luZm8gKmluZm8pXG4rbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcbitcdFx0ICAgICAgIF9fYmUxNiBldGhlcl90eXBlLCBzdHJ1Y3QgbXRrX3dkbWFfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrO1xuIFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcbkBAIC0xMDIsNyArMTAzLDcgQEAgbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2lcbiBcdFx0cmV0dXJuIC0xO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgXHUwMDI2c3RhY2spO1xuK1x0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgZXRoZXJfdHlwZSwgXHUwMDI2c3RhY2spO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTE5MCwxMiArMTkxLDEyIEBAIG10a19mbG93X2dldF9kc2FfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqKmRldilcbiBzdGF0aWMgaW50XG4gbXRrX2Zsb3dfc2V0X291dHB1dF9kZXZpY2Uoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IG10a19mb2VfZW50cnkgKmZvZSxcbiBcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGVzdF9tYWMsXG4tXHRcdFx0ICAgaW50ICp3ZWRfaW5kZXgpXG4rXHRcdFx0ICAgX19iZTE2IGV0aGVyX3R5cGUsIGludCAqd2VkX2luZGV4KVxuIHtcbiBcdHN0cnVjdCBtdGtfd2RtYV9pbmZvIGluZm8gPSB7fTtcbiBcdGludCBwc2VfcG9ydCwgZHNhX3BvcnQsIHF1ZXVlO1xuIFxuLVx0aWYgKG10a19mbG93X2dldF93ZG1hX2luZm8oZGV2LCBkZXN0X21hYywgXHUwMDI2aW5mbykgPT0gMCkge1xuK1x0aWYgKG10a19mbG93X2dldF93ZG1hX2luZm8oZGV2LCBkZXN0X21hYywgZXRoZXJfdHlwZSwgXHUwMDI2aW5mbykgPT0gMCkge1xuIFx0XHRtdGtfZm9lX2VudHJ5X3NldF93ZG1hKGV0aCwgZm9lLCBpbmZvLndkbWFfaWR4LCBpbmZvLnF1ZXVlLFxuIFx0XHRcdFx0ICAgICAgIGluZm8uYnNzLCBpbmZvLndjaWQsIGluZm8uYW1zZHUpO1xuIFx0XHRpZiAobXRrX2lzX25ldHN5c192Ml9vcl9ncmVhdGVyKGV0aCkpIHtcbkBAIC0yNzMsNiArMjc0LDcgQEAgbXRrX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBtdGtfZXRoICpldGgsIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpmLFxuIFx0c3RydWN0IG10a19mbG93X2RhdGEgZGF0YSA9IHt9O1xuIFx0c3RydWN0IG10a19mb2VfZW50cnkgZm9lO1xuIFx0c3RydWN0IG10a19mbG93X2VudHJ5ICplbnRyeTtcbitcdF9fYmUxNiBldGhlcl90eXBlID0gMDtcbiBcdGludCBvZmZsb2FkX3R5cGUgPSAwO1xuIFx0aW50IHdlZF9pbmRleCA9IC0xO1xuIFx0dTE2IGFkZHJfdHlwZSA9IDA7XG5AQCAtMzE5LDYgKzMyMSw3IEBAIG10a19mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqZixcbiBcdFx0c3RydWN0IGZsb3dfbWF0Y2hfYmFzaWMgbWF0Y2g7XG4gXG4gXHRcdGZsb3dfcnVsZV9tYXRjaF9iYXNpYyhydWxlLCBcdTAwMjZtYXRjaCk7XG4rXHRcdGV0aGVyX3R5cGUgPSBtYXRjaC5rZXktXHUwMDNlbl9wcm90bztcbiBcdFx0bDRwcm90byA9IG1hdGNoLmtleS1cdTAwM2VpcF9wcm90bztcbiBcdH0gZWxzZSB7XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbkBAIC00ODEsNyArNDg0LDcgQEAgbXRrX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBtdGtfZXRoICpldGgsIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpmLFxuIFx0XHRtdGtfZm9lX2VudHJ5X3NldF9wcHBvZShldGgsIFx1MDAyNmZvZSwgZGF0YS5wcHBvZS5zaWQpO1xuIFxuIFx0ZXJyID0gbXRrX2Zsb3dfc2V0X291dHB1dF9kZXZpY2UoZXRoLCBcdTAwMjZmb2UsIG9kZXYsIGRhdGEuZXRoLmhfZGVzdCxcbi1cdFx0XHRcdFx0IFx1MDAyNndlZF9pbmRleCk7XG4rXHRcdFx0XHRcdCBldGhlcl90eXBlLCBcdTAwMjZ3ZWRfaW5kZXgpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NDYuLjQ1ZDk5ZTExYjA2ZTJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTkwMiw2ICs5MDIsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoIHtcbiBcdFx0XHR9O1xuIFxuIFx0XHRcdHU4XHRsM19wcm90bztcbitcdFx0XHR1OFx0ZW5jYXBfcHJvdG87XG4gXHRcdH0gdHVuO1xuIFx0XHRzdHJ1Y3Qge1xuIFx0XHRcdGVudW0ge1xuQEAgLTkzOCw2ICs5MzksNyBAQCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHtcbiBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCB7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0dThcdFx0XHRkYWRkcltFVEhfQUxFTl07XG4rXHRfX2JlMTZcdFx0XHRldGhlcl90eXBlO1xuIFxuIFx0aW50XHRcdFx0bnVtX3ZsYW5zO1xuIFx0c3RydWN0IHtcbkBAIC0zNDIwLDcgKzM0MjIsOCBAQCB2b2lkIGRldl9yZW1vdmVfb2ZmbG9hZChzdHJ1Y3QgcGFja2V0X29mZmxvYWQgKnBvKTtcbiBcbiBpbnQgZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gaW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi1pbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbitpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICBjb25zdCB1OCAqZGFkZHIsIF9fYmUxNiBldGhlcl90eXBlLFxuIFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xuIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5pbmRleCA3YjIzYjI0NWE1YTg2YS4uNGQ0MDY4MDFlYzkwMTUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMTE4LDYgKzExOCw3IEBAIHN0cnVjdCBmbG93X29mZmxvYWRfdHVubmVsIHtcbiBcdH07XG4gXG4gXHR1OFx0bDNfcHJvdG87XG4rXHR1OFx0ZW5jYXBfcHJvdG87XG4gfTtcbiBcbiBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA0YjNkNWNmZGY2ZTAwZi4uOWY1YTJkYTllOWY3NzQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC03NTAsMTIgKzc1MCwxNCBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqZGV2X2Z3ZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuIFx0cmV0dXJuIFx1MDAyNnN0YWNrLVx1MDAzZXBhdGhba107XG4gfVxuIFxuLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuK2ludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHQgIGNvbnN0IHU4ICpkYWRkciwgX19iZTE2IGV0aGVyX3R5cGUsXG4gXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXY7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4tXHRcdC5kZXZcdD0gZGV2LFxuK1x0XHQuZGV2XHRcdD0gZGV2LFxuK1x0XHQuZXRoZXJfdHlwZVx0PSBldGhlcl90eXBlLFxuIFx0fTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4gXHRpbnQgcmV0ID0gMDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmNcbmluZGV4IGI2NDMxOTRmNTdkMjlmLi45ZjdiMmJkYWJlZjA2YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwaXAuY1xuKysrIGIvbmV0L2lwdjQvaXBpcC5jXG5AQCAtMzY5LDYgKzM2OSw3IEBAIHN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0cGF0aC1cdTAwM2V0dW4uc3JjX3Y0LnNfYWRkciA9IHRpcGgtXHUwMDNlc2FkZHI7XG4gXHRwYXRoLVx1MDAzZXR1bi5kc3RfdjQuc19hZGRyID0gdGlwaC1cdTAwM2VkYWRkcjtcbiBcdHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQO1xuK1x0cGF0aC1cdTAwM2V0dW4uZW5jYXBfcHJvdG8gPSBBRl9JTkVUO1xuIFx0cGF0aC1cdTAwM2VkZXYgPSBjdHgtXHUwMDNlZGV2O1xuIFxuIFx0Y3R4LVx1MDAzZWRldiA9IHJ0LVx1MDAzZWRzdC5kZXY7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5pbmRleCBiZjhlNDBhZjYwYjA4My4uYTEyMWY3MTVhZmQyY2QgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuQEAgLTE4NjMsNyArMTg2MywxMSBAQCBzdGF0aWMgaW50IGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0cGF0aC1cdTAwM2V0eXBlID0gREVWX1BBVEhfVFVOO1xuIFx0XHRwYXRoLVx1MDAzZXR1bi5zcmNfdjYgPSB0LVx1MDAzZXBhcm1zLmxhZGRyO1xuIFx0XHRwYXRoLVx1MDAzZXR1bi5kc3RfdjYgPSB0LVx1MDAzZXBhcm1zLnJhZGRyO1xuLVx0XHRwYXRoLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjtcbitcdFx0cGF0aC1cdTAwM2V0dW4uZW5jYXBfcHJvdG8gPSBBRl9JTkVUNjtcbitcdFx0aWYgKGN0eC1cdTAwM2VldGhlcl90eXBlID09IGNwdV90b19iZTE2KEVUSF9QX0lQKSlcbitcdFx0XHRwYXRoLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDtcbitcdFx0ZWxzZVxuK1x0XHRcdHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2O1xuIFx0XHRwYXRoLVx1MDAzZWRldiA9IGN0eC1cdTAwM2VkZXY7XG4gXHRcdGN0eC1cdTAwM2VkZXYgPSBkc3QtXHUwMDNlZGV2O1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NpdC5jIGIvbmV0L2lwdjYvc2l0LmNcbmluZGV4IGEzOGIyNGZiODM4NDI0Li5lYWQzMjdjMzJkZjI0NSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3NpdC5jXG4rKysgYi9uZXQvaXB2Ni9zaXQuY1xuQEAgLTEzNjUsNiArMTM2NSw1NiBAQCBpcGlwNl90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxuIFx0fVxuIH1cbiBcbitzdGF0aWMgaW50IGlwaXA2X3R1bm5lbF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4re1xuK1x0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoY3R4LVx1MDAzZWRldik7XG4rXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKnRpcGggPSBcdTAwMjZ0dW5uZWwtXHUwMDNlcGFybXMuaXBoO1xuK1x0c3RydWN0IHJ0YWJsZSAqcnQ7XG4rXG4rXHQvKiBOQk1BIHR1bm5lbHMgKElTQVRBUCwgNnRvNCwgNnJkKSByZXNvbHZlIHRoZSBvdXRlciBkZXN0aW5hdGlvblxuK1x0ICogcGVyLXBhY2tldCBmcm9tIHRoZSBpbm5lciBJUHY2IGFkZHJlc3M7IG5vdCBvZmZsb2FkYWJsZS5cbitcdCAqL1xuK1x0aWYgKCF0aXBoLVx1MDAzZWRhZGRyKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHQvKiBGT1UvR1VFIGVuY2Fwc3VsYXRpb24gaXMgaGFuZGxlZCBpbiB0aGUgc2xvdyBwYXRoIGJ5XG4rXHQgKiBpcF90dW5uZWxfZW5jYXAoKTsgdGhlIGZhc3QgcGF0aCBvbmx5IHB1c2hlcyBhIHBsYWluXG4rXHQgKiBJUHY0IGhlYWRlciBhbmQgd291bGQgc2tpcCB0aGUgVURQIGVuY2Fwc3VsYXRpb24uXG4rXHQgKi9cbitcdGlmICh0dW5uZWwtXHUwMDNlZW5jYXAudHlwZSAhPSBUVU5ORUxfRU5DQVBfTk9ORSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cnQgPSBpcF9yb3V0ZV9vdXRwdXQoZGV2X25ldChjdHgtXHUwMDNlZGV2KSwgdGlwaC1cdTAwM2VkYWRkciwgdGlwaC1cdTAwM2VzYWRkcixcbitcdFx0XHQgICAgIGluZXRfZHNmaWVsZF90b19kc2NwKHRpcGgtXHUwMDNldG9zKSxcbitcdFx0XHQgICAgIHR1bm5lbC1cdTAwM2VwYXJtcy5saW5rLCBSVF9TQ09QRV9VTklWRVJTRSk7XG4rXHRpZiAoSVNfRVJSKHJ0KSlcbitcdFx0cmV0dXJuIFBUUl9FUlIocnQpO1xuK1xuK1x0cGF0aC1cdTAwM2V0eXBlID0gREVWX1BBVEhfVFVOO1xuK1x0cGF0aC1cdTAwM2V0dW4uc3JjX3Y0LnNfYWRkciA9IHRpcGgtXHUwMDNlc2FkZHI7XG4rXHRwYXRoLVx1MDAzZXR1bi5kc3RfdjQuc19hZGRyID0gdGlwaC1cdTAwM2VkYWRkcjtcbitcdHBhdGgtXHUwMDNldHVuLmVuY2FwX3Byb3RvID0gQUZfSU5FVDtcbitcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbitcbitcdHN3aXRjaCAoY3R4LVx1MDAzZWV0aGVyX3R5cGUpIHtcbitcdGNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOlxuK1x0XHRwYXRoLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQVjYpOlxuK1x0XHRwYXRoLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRpcF9ydF9wdXQocnQpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRjdHgtXHUwMDNlZGV2ID0gcnQtXHUwMDNlZHN0LmRldjtcbitcdGlwX3J0X3B1dChydCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludFxuIGlwaXA2X3R1bm5lbF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcixcbiBcdFx0XHQgICAgdm9pZCBfX3VzZXIgKmRhdGEsIGludCBjbWQpXG5AQCAtMTQwMSw2ICsxNDUxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGlwNl9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19zaW9jZGV2cHJpdmF0ZSA9IGlwaXA2X3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSxcbiBcdC5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxuIFx0Lm5kb190dW5uZWxfY3RsID0gaXBpcDZfdHVubmVsX2N0bCxcbitcdC5uZG9fZmlsbF9mb3J3YXJkX3BhdGggPSBpcGlwNl90dW5uZWxfZmlsbF9mb3J3YXJkX3BhdGgsXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBpcGlwNl9kZXZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG5pbmRleCA5OWM1YjlkNjcxYTBjYS4uMThmODllNmZiNDM1NGQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG5AQCAtNzYsOSArNzYsMTQgQEAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvd19vZmZsb2FkX2FsbG9jKHN0cnVjdCBuZl9jb25uICpjdClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FsbG9jKTtcbiBcbi1zdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9kc3RfY29va2llKHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZsb3dfdHVwbGUpXG4rc3RhdGljIHUzMiBmbG93X29mZmxvYWRfZHN0X2Nvb2tpZShzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpmbG93X3R1cGxlLFxuK1x0XHRcdFx0ICAgdTggdHVuX2VuY2FwX3Byb3RvKVxuIHtcbi1cdGlmIChmbG93X3R1cGxlLVx1MDAzZWwzcHJvdG8gPT0gTkZQUk9UT19JUFY2KVxuK1x0Ym9vbCBkc3RfdjY7XG4rXG4rXHRkc3RfdjYgPSB0dW5fZW5jYXBfcHJvdG8gPyB0dW5fZW5jYXBfcHJvdG8gPT0gTkZQUk9UT19JUFY2XG4rXHRcdFx0XHQgOiBmbG93X3R1cGxlLVx1MDAzZWwzcHJvdG8gPT0gTkZQUk9UT19JUFY2O1xuK1x0aWYgKGRzdF92NilcbiBcdFx0cmV0dXJuIHJ0Nl9nZXRfY29va2llKGRzdF9ydDZfaW5mbyhmbG93X3R1cGxlLVx1MDAzZWRzdF9jYWNoZSkpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtOTksMTAgKzEwNCwxMiBAQCBzdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4gXHRcdFx0XHQgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxuIHtcbiBcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZsb3dfdHVwbGUgPSBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlO1xuK1x0dTggbDNwcm90bywgZW5jYXBfcHJvdG8gPSByb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uZW5jYXBfcHJvdG87XG4gXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBuZnRfcm91dGVfZHN0X2ZldGNoKHJvdXRlLCBkaXIpO1xuIFx0aW50IGksIGogPSAwO1xuIFxuLVx0c3dpdGNoIChmbG93X3R1cGxlLVx1MDAzZWwzcHJvdG8pIHtcbitcdGwzcHJvdG8gPSBlbmNhcF9wcm90byA/IGVuY2FwX3Byb3RvIDogZmxvd190dXBsZS1cdTAwM2VsM3Byb3RvO1xuK1x0c3dpdGNoIChsM3Byb3RvKSB7XG4gXHRjYXNlIE5GUFJPVE9fSVBWNDpcbiBcdFx0Zmxvd190dXBsZS1cdTAwM2VtdHUgPSBpcF9kc3RfbXR1X21heWJlX2ZvcndhcmQoZHN0LCB0cnVlKTtcbiBcdFx0YnJlYWs7XG5AQCAtMTM4LDcgKzE0NSw4IEBAIHN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2ZpbGxfcm91dGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiBcdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfTkVJR0g6XG4gXHRcdGZsb3dfdHVwbGUtXHUwMDNlaWZpZHggPSByb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLm91dC5pZmluZGV4O1xuIFx0XHRmbG93X3R1cGxlLVx1MDAzZWRzdF9jYWNoZSA9IGRzdDtcbi1cdFx0Zmxvd190dXBsZS1cdTAwM2Vkc3RfY29va2llID0gZmxvd19vZmZsb2FkX2RzdF9jb29raWUoZmxvd190dXBsZSk7XG4rXHRcdGZsb3dfdHVwbGUtXHUwMDNlZHN0X2Nvb2tpZSA9IGZsb3dfb2ZmbG9hZF9kc3RfY29va2llKGZsb3dfdHVwbGUsXG4rXHRcdFx0XHRcdFx0XHRcdCBlbmNhcF9wcm90byk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0V0FSTl9PTl9PTkNFKDEpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbmluZGV4IDI5ZTkzYWMxZTJlNDAwLi40NDk4MThkY2VmM2M3ZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuQEAgLTE5MSwyNSArMTkxLDI3IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdHVwbGVfZW5jYXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRzd2l0Y2ggKGlubmVyX3Byb3RvKSB7XG4tXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbi1cdFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIG9mZnNldCk7XG4tXHRcdGlmIChjdHgtXHUwMDNldHVuLnByb3RvID09IElQUFJPVE9fSVBJUCkge1xuK1x0aWYgKGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQIHx8IGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7XG4rXHRcdHN3aXRjaCAoaW5uZXJfcHJvdG8pIHtcbitcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4rXHRcdFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArXG4rXHRcdFx0XHRcdCAgICAgICBvZmZzZXQpO1xuIFx0XHRcdHR1cGxlLVx1MDAzZXR1bi5kc3RfdjQuc19hZGRyID0gaXBoLVx1MDAzZWRhZGRyO1xuIFx0XHRcdHR1cGxlLVx1MDAzZXR1bi5zcmNfdjQuc19hZGRyID0gaXBoLVx1MDAzZXNhZGRyO1xuLVx0XHRcdHR1cGxlLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDtcbi1cdFx0fVxuLVx0XHRicmVhaztcbi1cdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4tXHRcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzZXQpO1xuLVx0XHRpZiAoY3R4LVx1MDAzZXR1bi5wcm90byA9PSBJUFBST1RPX0lQVjYpIHtcbitcdFx0XHR0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG8gPSBjdHgtXHUwMDNldHVuLnByb3RvO1xuK1x0XHRcdHR1cGxlLVx1MDAzZXR1bi5lbmNhcF9wcm90byA9IEFGX0lORVQ7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4rXHRcdFx0aXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArXG4rXHRcdFx0XHRcdFx0ICBvZmZzZXQpO1xuIFx0XHRcdHR1cGxlLVx1MDAzZXR1bi5kc3RfdjYgPSBpcDZoLVx1MDAzZWRhZGRyO1xuIFx0XHRcdHR1cGxlLVx1MDAzZXR1bi5zcmNfdjYgPSBpcDZoLVx1MDAzZXNhZGRyO1xuLVx0XHRcdHR1cGxlLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjtcbitcdFx0XHR0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG8gPSBjdHgtXHUwMDNldHVuLnByb3RvO1xuK1x0XHRcdHR1cGxlLVx1MDAzZXR1bi5lbmNhcF9wcm90byA9IEFGX0lORVQ2O1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0YnJlYWs7XG4gXHR9XG4gfVxuIFxuQEAgLTMzNiw3ICszMzgsNyBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8oc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdGlmIChpcGgtXHUwMDNldHRsIFx1MDAzYz0gMSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lQSVApIHtcbitcdGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUElQIHx8IGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lQVjYpIHtcbiBcdFx0Y3R4LVx1MDAzZXR1bi5wcm90byA9IGlwaC1cdTAwM2Vwcm90b2NvbDtcbiBcdFx0Y3R4LVx1MDAzZXR1bi5oZHJfc2l6ZSA9IHNpemU7XG4gXHRcdGN0eC1cdTAwM2VvZmZzZXQgKz0gY3R4LVx1MDAzZXR1bi5oZHJfc2l6ZTtcbkBAIC0zNjEsNyArMzYzLDcgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDZfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRpZiAoaXB2Nl9leHRfaGRyKGlwNmgtXHUwMDNlbmV4dGhkcikpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChpcDZoLVx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JUFY2KSB7XG4rXHRpZiAoaXA2aC1cdTAwM2VuZXh0aGRyID09IElQUFJPVE9fSVBJUCB8fCBpcDZoLVx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JUFY2KSB7XG4gXHRcdGN0eC1cdTAwM2V0dW4ucHJvdG8gPSBpcDZoLVx1MDAzZW5leHRoZHI7XG4gXHRcdGN0eC1cdTAwM2V0dW4uaGRyX3NpemUgPSBzaXplb2YoKmlwNmgpO1xuIFx0XHRjdHgtXHUwMDNlb2Zmc2V0ICs9IGN0eC1cdTAwM2V0dW4uaGRyX3NpemU7XG5AQCAtMzgyLDYgKzM4NCwxMCBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X2lwX3R1bm5lbF9wb3Aoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcbiBcdHNrYl9wdWxsKHNrYiwgY3R4LVx1MDAzZXR1bi5oZHJfc2l6ZSk7XG4gXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbitcdGlmIChjdHgtXHUwMDNldHVuLnByb3RvID09IElQUFJPVE9fSVBJUClcbitcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xuK1x0ZWxzZVxuK1x0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbkBAIC00NTgsMjEgKzQ2NCw2IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfZW5jYXBfcG9wKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdG5mX2Zsb3dfaXBfdHVubmVsX3BvcChjdHgsIHNrYik7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcbi1uZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4tXHRcdCAgICAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLXtcbi1cdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcbi1cbi1cdGlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woY3R4LCBza2IsIGh0b25zKEVUSF9QX0lQKSkpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0aWYgKG5mX2Zsb3dfdHVwbGVfaXAoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcdTAwMjZ0dXBsZSk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXG5AQCAtNDg3LDggKzQ3OCwxNiBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pO1xuIFxuIFx0bXR1ID0gZmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgKyBjdHgtXHUwMDNlb2Zmc2V0O1xuLVx0aWYgKGZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXG4rXHRzd2l0Y2ggKGZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bi5lbmNhcF9wcm90bykge1xuK1x0Y2FzZSBBRl9JTkVUOlxuIFx0XHRtdHUgLT0gc2l6ZW9mKCppcGgpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUZfSU5FVDY6XG4rXHRcdG10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGJyZWFrO1xuK1x0fVxuIFxuIFx0aWYgKHVubGlrZWx5KG5mX2Zsb3dfZXhjZWVkc19tdHUoc2tiLCBtdHUpKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNTg4LDIzICs1ODcsMzcgQEAgc3RhdGljIGludCBuZl9mbG93X3BwcG9lX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGlkLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBpcF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbi1cdFx0XHRcdCAgICBfX2JlMzIgKmlwX2RhZGRyKVxuK3N0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxuK1x0XHRcdFx0ICBfX2JlMzIgKmlwX2RhZGRyKVxuIHtcbi1cdHN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0c3RydWN0IHJ0YWJsZSAqcnQgPSBkc3RfcnRhYmxlKHR1cGxlLVx1MDAzZWRzdF9jYWNoZSk7XG4tXHR1OCB0b3MgPSBpcGgtXHUwMDNldG9zLCB0dGwgPSBpcGgtXHUwMDNldHRsO1xuLVx0X19iZTE2IGZyYWdfb2ZmID0gaXBoLVx1MDAzZWZyYWdfb2ZmO1xuLVx0dTMyIGhlYWRyb29tID0gc2l6ZW9mKCppcGgpO1xuK1x0X19iZTE2IGZyYWdfb2ZmID0gMDtcbitcdHN0cnVjdCBpcGhkciAqaXBoO1xuK1x0dTggdG9zID0gMCwgdHRsO1xuK1x0dTMyIGhlYWRyb29tO1xuIFx0aW50IGVycjtcbiBcbitcdGlmICh0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7XG4rXHRcdHN0cnVjdCBpcHY2aGRyICppcDZoO1xuK1xuK1x0XHRpcDZoID0gKHN0cnVjdCBpcHY2aGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4rXHRcdHRvcyA9IGlwdjZfZ2V0X2RzZmllbGQoaXA2aCk7XG4rXHRcdHR0bCA9IGlwNmgtXHUwMDNlaG9wX2xpbWl0O1xuK1x0fSBlbHNlIHtcbitcdFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuK1x0XHRmcmFnX29mZiA9IGlwaC1cdTAwM2VmcmFnX29mZjtcbitcdFx0dG9zID0gaXBoLVx1MDAzZXRvcztcbitcdFx0dHRsID0gaXBoLVx1MDAzZXR0bDtcbitcdH1cbitcbiBcdGVyciA9IGlwdHVubmVsX2hhbmRsZV9vZmZsb2Fkcyhza2IsIFNLQl9HU09fSVBYSVA0KTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRza2Jfc2V0X2lubmVyX2lwcHJvdG8oc2tiLCBJUFBST1RPX0lQSVApO1xuLVx0aGVhZHJvb20gKz0gTExfUkVTRVJWRURfU1BBQ0UocnQtXHUwMDNlZHN0LmRldikgKyBydC1cdTAwM2Vkc3QuaGVhZGVyX2xlbjtcbitcdHNrYl9zZXRfaW5uZXJfaXBwcm90byhza2IsIHR1cGxlLVx1MDAzZXR1bi5sM19wcm90byk7XG4rXHRoZWFkcm9vbSA9IHNpemVvZigqaXBoKSArIExMX1JFU0VSVkVEX1NQQUNFKHJ0LVx1MDAzZWRzdC5kZXYpICtcbitcdFx0ICAgcnQtXHUwMDNlZHN0LmhlYWRlcl9sZW47XG4gXHRlcnIgPSBza2JfY293X2hlYWQoc2tiLCBoZWFkcm9vbSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTYxNSw2ICs2MjgsNyBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwaXBfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHQvKiBQdXNoIGRvd24gYW5kIGluc3RhbGwgdGhlIElQIGhlYWRlci4gKi9cbiBcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCppcGgpKTtcbiBcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuK1x0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xuIFxuIFx0aXBoID0gaXBfaGRyKHNrYik7XG4gXHRpcGgtXHUwMDNldmVyc2lvblx0PSA0O1xuQEAgLTYzNCw1NiArNjQ4LDU3IEBAIHN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBpcF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX3Y0X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbi1cdFx0XHRcdCAgX19iZTMyICppcF9kYWRkcilcbi17XG4tXHRpZiAodHVwbGUtXHUwMDNldHVuX251bSlcbi1cdFx0cmV0dXJuIG5mX2Zsb3dfdHVubmVsX2lwaXBfcHVzaChuZXQsIHNrYiwgdHVwbGUsIGlwX2RhZGRyKTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwNmlwNl9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxuLVx0XHRcdFx0ICAgICAgc3RydWN0IGluNl9hZGRyICoqaXA2X2RhZGRyKVxuK3N0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXA2X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgaW42X2FkZHIgKippcDZfZGFkZHIpXG4ge1xuLVx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbi1cdHN0cnVjdCBydGFibGUgKnJ0ID0gZHN0X3J0YWJsZSh0dXBsZS1cdTAwM2Vkc3RfY2FjaGUpO1xuLVx0X191OCBkc2ZpZWxkID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKTtcbitcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHR1cGxlLVx1MDAzZWRzdF9jYWNoZTtcbiBcdHN0cnVjdCBmbG93aTYgZmw2ID0ge1xuIFx0XHQuZGFkZHIgPSB0dXBsZS1cdTAwM2V0dW4uc3JjX3Y2LFxuIFx0XHQuc2FkZHIgPSB0dXBsZS1cdTAwM2V0dW4uZHN0X3Y2LFxuIFx0XHQuZmxvd2k2X3Byb3RvID0gSVBQUk9UT19JUFY2LFxuIFx0fTtcbi1cdHU4IGhvcF9saW1pdCA9IGlwNmgtXHUwMDNlaG9wX2xpbWl0O1xuK1x0dTggaG9wX2xpbWl0LCBkc2ZpZWxkO1xuK1x0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4gXHRpbnQgZXJyLCBtdHU7XG4gXHR1MzIgaGVhZHJvb207XG4gXG4rXHRpZiAodHVwbGUtXHUwMDNldHVuLmwzX3Byb3RvID09IElQUFJPVE9fSVBJUCkge1xuK1x0XHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbitcbitcdFx0ZHNmaWVsZCA9IGlwdjRfZ2V0X2RzZmllbGQoaXBoKTtcbitcdFx0aG9wX2xpbWl0ID0gaXBoLVx1MDAzZXR0bDtcbitcdH0gZWxzZSB7XG4rXHRcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbitcdFx0ZHNmaWVsZCA9IGlwdjZfZ2V0X2RzZmllbGQoaXA2aCk7XG4rXHRcdGhvcF9saW1pdCA9IGlwNmgtXHUwMDNlaG9wX2xpbWl0O1xuK1x0fVxuK1xuIFx0ZXJyID0gaXB0dW5uZWxfaGFuZGxlX29mZmxvYWRzKHNrYiwgU0tCX0dTT19JUFhJUDYpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdHNrYl9zZXRfaW5uZXJfaXBwcm90byhza2IsIElQUFJPVE9fSVBWNik7XG4tXHRoZWFkcm9vbSA9IHNpemVvZigqaXA2aCkgKyBMTF9SRVNFUlZFRF9TUEFDRShydC1cdTAwM2Vkc3QuZGV2KSArXG4tXHRcdCAgIHJ0LVx1MDAzZWRzdC5oZWFkZXJfbGVuO1xuK1x0c2tiX3NldF9pbm5lcl9pcHByb3RvKHNrYiwgdHVwbGUtXHUwMDNldHVuLmwzX3Byb3RvKTtcbitcdGhlYWRyb29tID0gc2l6ZW9mKCppcDZoKSArIExMX1JFU0VSVkVEX1NQQUNFKGRzdC1cdTAwM2VkZXYpICtcbitcdFx0ICAgZHN0LVx1MDAzZWhlYWRlcl9sZW47XG4gXHRlcnIgPSBza2JfY293X2hlYWQoc2tiLCBoZWFkcm9vbSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0c2tiX3NjcnViX3BhY2tldChza2IsIHRydWUpO1xuLVx0bXR1ID0gZHN0X210dShcdTAwMjZydC1cdTAwM2Vkc3QpIC0gc2l6ZW9mKCppcDZoKTtcbitcdG10dSA9IGRzdF9tdHUoZHN0KSAtIHNpemVvZigqaXA2aCk7XG4gXHRtdHUgPSBtYXgobXR1LCBJUFY2X01JTl9NVFUpO1xuIFx0c2tiX2RzdF91cGRhdGVfcG10dV9ub19jb25maXJtKHNrYiwgbXR1KTtcbiBcbiBcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCppcDZoKSk7XG4gXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbitcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIFxuIFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gXHRpcDZfZmxvd19oZHIoaXA2aCwgZHNmaWVsZCxcbiBcdFx0ICAgICBpcDZfbWFrZV9mbG93bGFiZWwobmV0LCBza2IsIGZsNi5mbG93bGFiZWwsIHRydWUsIFx1MDAyNmZsNikpO1xuIFx0aXA2aC1cdTAwM2Vob3BfbGltaXQgPSBob3BfbGltaXQ7XG4tXHRpcDZoLVx1MDAzZW5leHRoZHIgPSBJUFBST1RPX0lQVjY7XG4rXHRpcDZoLVx1MDAzZW5leHRoZHIgPSB0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG87XG4gXHRpcDZoLVx1MDAzZWRhZGRyID0gdHVwbGUtXHUwMDNldHVuLnNyY192NjtcbiBcdGlwNmgtXHUwMDNlc2FkZHIgPSB0dXBsZS1cdTAwM2V0dW4uZHN0X3Y2O1xuIFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2VwYXlsb2FkX2xlbiA9IGh0b25zKHNrYi1cdTAwM2VsZW4gLSBzaXplb2YoKmlwNmgpKTtcbkBAIC02OTQsMTQgKzcwOSwxOCBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwNmlwNl9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX3Y2X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbi1cdFx0XHRcdCAgc3RydWN0IGluNl9hZGRyICoqaXA2X2RhZGRyKVxuK3N0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxuK1x0XHRcdCAgICAgICBfX2JlMzIgKmlwX2RhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKippcDZfZGFkZHIpXG4ge1xuLVx0aWYgKHR1cGxlLVx1MDAzZXR1bl9udW0pXG4tXHRcdHJldHVybiBuZl9mbG93X3R1bm5lbF9pcDZpcDZfcHVzaChuZXQsIHNrYiwgdHVwbGUsIGlwNl9kYWRkcik7XG4tXG4tXHRyZXR1cm4gMDtcbitcdHN3aXRjaCAodHVwbGUtXHUwMDNldHVuLmVuY2FwX3Byb3RvKSB7XG4rXHRjYXNlIEFGX0lORVQ6XG4rXHRcdHJldHVybiBuZl9mbG93X3R1bm5lbF9pcF9wdXNoKG5ldCwgc2tiLCB0dXBsZSwgaXBfZGFkZHIpO1xuK1x0Y2FzZSBBRl9JTkVUNjpcbitcdFx0cmV0dXJuIG5mX2Zsb3dfdHVubmVsX2lwNl9wdXNoKG5ldCwgc2tiLCB0dXBsZSwgaXA2X2RhZGRyKTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IG5mX2Zsb3dfZW5jYXBfcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTgwMSw4NiArODIwLDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9mbG93X3F1ZXVlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIE5GX1NUT0xFTjtcbiB9XG4gXG4tdW5zaWduZWQgaW50XG4tbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4te1xuLVx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xuLVx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XG4tXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcbi1cdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XG4tXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCBjdHggPSB7XG4tXHRcdC5pblx0PSBzdGF0ZS1cdTAwM2Vpbixcbi1cdH07XG4tXHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcbi1cdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4tXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcbi1cdHN0cnVjdCBydGFibGUgKnJ0O1xuLVx0X19iZTMyIGlwX2RhZGRyO1xuLVx0aW50IHJldDtcbi1cbi1cdHR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xuLVx0aWYgKCF0dXBsZWhhc2gpXG4tXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4tXG4tXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiBORl9EUk9QO1xuLVx0ZWxzZSBpZiAocmV0ID09IDApXG4tXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4tXG4tXHRpZiAodW5saWtlbHkodHVwbGVoYXNoLVx1MDAzZXR1cGxlLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9YRlJNKSkge1xuLVx0XHRydCA9IGRzdF9ydGFibGUodHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XG4tXHRcdG1lbXNldChza2ItXHUwMDNlY2IsIDAsIHNpemVvZihzdHJ1Y3QgaW5ldF9za2JfcGFybSkpO1xuLVx0XHRJUENCKHNrYiktXHUwMDNlaWlmID0gc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4O1xuLVx0XHRJUENCKHNrYiktXHUwMDNlZmxhZ3MgPSBJUFNLQl9GT1JXQVJERUQ7XG4tXHRcdHJldHVybiBuZl9mbG93X3htaXRfeGZybShza2IsIHN0YXRlLCBcdTAwMjZydC1cdTAwM2Vkc3QpO1xuLVx0fVxuLVxuLVx0ZGlyID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpcjtcbi1cdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XG4tXHRvdGhlcl90dXBsZSA9IFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlO1xuLVx0aXBfZGFkZHIgPSBvdGhlcl90dXBsZS1cdTAwM2VzcmNfdjQuc19hZGRyO1xuLVxuLVx0aWYgKG5mX2Zsb3dfdHVubmVsX3Y0X3B1c2goc3RhdGUtXHUwMDNlbmV0LCBza2IsIG90aGVyX3R1cGxlLCBcdTAwMjZpcF9kYWRkcikgXHUwMDNjIDApXG4tXHRcdHJldHVybiBORl9EUk9QO1xuLVxuLVx0c3dpdGNoICh0dXBsZWhhc2gtXHUwMDNldHVwbGUueG1pdF90eXBlKSB7XG4tXHRjYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIOlxuLVx0XHRydCA9IGRzdF9ydGFibGUodHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XG4tXHRcdHhtaXQub3V0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc3RhdGUtXHUwMDNlbmV0LCB0dXBsZWhhc2gtXHUwMDNldHVwbGUuaWZpZHgpO1xuLVx0XHRpZiAoIXhtaXQub3V0ZGV2KSB7XG4tXHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuLVx0XHRcdHJldHVybiBORl9EUk9QO1xuLVx0XHR9XG4tXHRcdG5laWdoID0gaXBfbmVpZ2hfZ3c0KHJ0LVx1MDAzZWRzdC5kZXYsIHJ0X25leHRob3AocnQsIGlwX2RhZGRyKSk7XG4tXHRcdGlmIChJU19FUlIobmVpZ2gpKSB7XG4tXHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuLVx0XHRcdHJldHVybiBORl9EUk9QO1xuLVx0XHR9XG4tXHRcdHhtaXQuZGVzdCA9IG5laWdoLVx1MDAzZWhhO1xuLVx0XHRza2JfZHN0X3NldF9ub3JlZihza2IsIFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q6XG4tXHRcdHhtaXQub3V0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc3RhdGUtXHUwMDNlbmV0LCB0dXBsZWhhc2gtXHUwMDNldHVwbGUub3V0LmlmaWR4KTtcbi1cdFx0aWYgKCF4bWl0Lm91dGRldikge1xuLVx0XHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbi1cdFx0XHRyZXR1cm4gTkZfRFJPUDtcbi1cdFx0fVxuLVx0XHR4bWl0LmRlc3QgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUub3V0LmhfZGVzdDtcbi1cdFx0eG1pdC5zb3VyY2UgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUub3V0Lmhfc291cmNlO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdFdBUk5fT05fT05DRSgxKTtcbi1cdFx0cmV0dXJuIE5GX0RST1A7XG4tXHR9XG4tXHR4bWl0LnR1cGxlID0gb3RoZXJfdHVwbGU7XG4tXHR4bWl0Lm5lZWRzX2dzb19zZWdtZW50ID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLm5lZWRzX2dzb19zZWdtZW50O1xuLVxuLVx0cmV0dXJuIG5mX2Zsb3dfcXVldWVfeG1pdChzdGF0ZS1cdTAwM2VuZXQsIHNrYiwgXHUwMDI2eG1pdCk7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKTtcbi1cbiBzdGF0aWMgdm9pZCBuZl9mbG93X25hdF9pcHY2X3RjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsXG4gXHRcdFx0XHQgc3RydWN0IGluNl9hZGRyICphZGRyLFxuIFx0XHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqbmV3X2FkZHIsXG5AQCAtMTA2NSw4ICsxMDA0LDE2IEBAIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbiBcbiBcdG10dSA9IGZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICsgY3R4LVx1MDAzZW9mZnNldDtcbi1cdGlmIChmbG93LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS50dW5fbnVtKVxuK1x0c3dpdGNoIChmbG93LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS50dW4uZW5jYXBfcHJvdG8pIHtcbitcdGNhc2UgQUZfSU5FVDpcbitcdFx0bXR1IC09IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUZfSU5FVDY6XG4gXHRcdG10dSAtPSBzaXplb2YoKmlwNmgpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGJyZWFrO1xuK1x0fVxuIFxuIFx0aWYgKHVubGlrZWx5KG5mX2Zsb3dfZXhjZWVkc19tdHUoc2tiLCBtdHUpKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTEwMCw2ICsxMDQ3LDI1IEBAIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcbituZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4rXHRcdCAgICAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcbitcbitcdGlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woY3R4LCBza2IsIGh0b25zKEVUSF9QX0lQKSkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0aWYgKGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7XG4rXHRcdGlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdH0gZWxzZSBpZiAobmZfZmxvd190dXBsZV9pcChjdHgsIHNrYiwgXHUwMDI2dHVwbGUpIFx1MDAzYyAwKSB7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXHUwMDI2dHVwbGUpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqXG4gbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdFx0ICAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG5AQCAtMTExMCwxMiArMTA3NiwxMTggQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRpZiAoIW5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKGN0eCwgc2tiLCBodG9ucyhFVEhfUF9JUFY2KSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWYgKG5mX2Zsb3dfdHVwbGVfaXB2NihjdHgsIHNrYiwgXHUwMDI2dHVwbGUpIFx1MDAzYyAwKVxuK1x0aWYgKGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQKSB7XG4rXHRcdGlmIChuZl9mbG93X3R1cGxlX2lwKGN0eCwgc2tiLCBcdTAwMjZ0dXBsZSkgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHR9IGVsc2UgaWYgKG5mX2Zsb3dfdHVwbGVfaXB2NihjdHgsIHNrYiwgXHUwMDI2dHVwbGUpIFx1MDAzYyAwKSB7XG4gXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuIFxuIFx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXHUwMDI2dHVwbGUpO1xuIH1cbiBcbit1bnNpZ25lZCBpbnRcbituZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7XG4rXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID0gcHJpdjtcbitcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlO1xuK1x0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcbitcdHN0cnVjdCBuZl9mbG93dGFibGVfY3R4IGN0eCA9IHtcbitcdFx0LmluXHQ9IHN0YXRlLVx1MDAzZWluLFxuK1x0fTtcbitcdHN0cnVjdCBuZl9mbG93X3htaXQgeG1pdCA9IHt9O1xuK1x0c3RydWN0IGluNl9hZGRyICppcDZfZGFkZHI7XG4rXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xuK1x0c3RydWN0IG5laWdoYm91ciAqbmVpZ2g7XG4rXHRzdHJ1Y3QgcnRhYmxlICpydDtcbitcdF9fYmUzMiBpcF9kYWRkcjtcbitcdGludCByZXQ7XG4rXG4rXHR0dXBsZWhhc2ggPSBuZl9mbG93X29mZmxvYWRfbG9va3VwKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgc2tiKTtcbitcdGlmICghdHVwbGVoYXNoKVxuK1x0XHRyZXR1cm4gTkZfQUNDRVBUO1xuK1xuK1x0aWYgKGN0eC50dW4ucHJvdG8gPT0gSVBQUk9UT19JUFY2KVxuK1x0XHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLFxuK1x0XHRcdFx0XHRcdCAgIHNrYik7XG4rXHRlbHNlXG4rXHRcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIE5GX0RST1A7XG4rXHRlbHNlIGlmIChyZXQgPT0gMClcbitcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbitcbitcdGlmICh1bmxpa2VseSh0dXBsZWhhc2gtXHUwMDNldHVwbGUueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX1hGUk0pKSB7XG4rXHRcdHJ0ID0gZHN0X3J0YWJsZSh0dXBsZWhhc2gtXHUwMDNldHVwbGUuZHN0X2NhY2hlKTtcbitcdFx0bWVtc2V0KHNrYi1cdTAwM2VjYiwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0X3NrYl9wYXJtKSk7XG4rXHRcdElQQ0Ioc2tiKS1cdTAwM2VpaWYgPSBza2ItXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXg7XG4rXHRcdElQQ0Ioc2tiKS1cdTAwM2VmbGFncyA9IElQU0tCX0ZPUldBUkRFRDtcbitcdFx0cmV0dXJuIG5mX2Zsb3dfeG1pdF94ZnJtKHNrYiwgc3RhdGUsIFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4rXHR9XG4rXG4rXHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuK1x0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbitcdG90aGVyX3R1cGxlID0gXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGU7XG4rXHRpcF9kYWRkciA9IG90aGVyX3R1cGxlLVx1MDAzZXNyY192NC5zX2FkZHI7XG4rXHRpcDZfZGFkZHIgPSBcdTAwMjZvdGhlcl90dXBsZS1cdTAwM2VzcmNfdjY7XG4rXG4rXHRpZiAobmZfZmxvd190dW5uZWxfcHVzaChzdGF0ZS1cdTAwM2VuZXQsIHNrYiwgb3RoZXJfdHVwbGUsIFx1MDAyNmlwX2RhZGRyLFxuK1x0XHRcdFx0XHUwMDI2aXA2X2RhZGRyKSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIE5GX0RST1A7XG4rXG4rXHRzd2l0Y2ggKHR1cGxlaGFzaC1cdTAwM2V0dXBsZS54bWl0X3R5cGUpIHtcbitcdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfTkVJR0g6IHtcbitcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0O1xuK1xuK1x0XHR4bWl0Lm91dGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHN0YXRlLVx1MDAzZW5ldCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmlmaWR4KTtcbitcdFx0aWYgKCF4bWl0Lm91dGRldikge1xuK1x0XHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbitcdFx0XHRyZXR1cm4gTkZfRFJPUDtcbitcdFx0fVxuK1x0XHRpZiAob3RoZXJfdHVwbGUtXHUwMDNldHVuLmVuY2FwX3Byb3RvID09IEFGX0lORVQ2IHx8XG4rXHRcdCAgICBjdHgudHVuLnByb3RvID09IElQUFJPVE9fSVBWNikge1xuK1x0XHRcdHN0cnVjdCBydDZfaW5mbyAqcnQ2O1xuK1xuK1x0XHRcdHJ0NiA9IGRzdF9ydDZfaW5mbyh0dXBsZWhhc2gtXHUwMDNldHVwbGUuZHN0X2NhY2hlKTtcbitcdFx0XHRuZWlnaCA9IGlwX25laWdoX2d3NihydDYtXHUwMDNlZHN0LmRldixcbitcdFx0XHRcdFx0ICAgICBydDZfbmV4dGhvcChydDYsIGlwNl9kYWRkcikpO1xuK1x0XHRcdGRzdCA9IFx1MDAyNnJ0Ni1cdTAwM2Vkc3Q7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cnQgPSBkc3RfcnRhYmxlKHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kc3RfY2FjaGUpO1xuK1x0XHRcdG5laWdoID0gaXBfbmVpZ2hfZ3c0KHJ0LVx1MDAzZWRzdC5kZXYsXG4rXHRcdFx0XHRcdCAgICAgcnRfbmV4dGhvcChydCwgaXBfZGFkZHIpKTtcbitcdFx0XHRkc3QgPSBcdTAwMjZydC1cdTAwM2Vkc3Q7XG4rXHRcdH1cbitcdFx0aWYgKElTX0VSUihuZWlnaCkpIHtcbitcdFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4rXHRcdFx0cmV0dXJuIE5GX0RST1A7XG4rXHRcdH1cbitcdFx0eG1pdC5kZXN0ID0gbmVpZ2gtXHUwMDNlaGE7XG4rXHRcdHNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgZHN0KTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRjYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX0RJUkVDVDpcbitcdFx0eG1pdC5vdXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShzdGF0ZS1cdTAwM2VuZXQsIHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5vdXQuaWZpZHgpO1xuK1x0XHRpZiAoIXhtaXQub3V0ZGV2KSB7XG4rXHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuK1x0XHRcdHJldHVybiBORl9EUk9QO1xuK1x0XHR9XG4rXHRcdHhtaXQuZGVzdCA9IHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5vdXQuaF9kZXN0O1xuK1x0XHR4bWl0LnNvdXJjZSA9IHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5vdXQuaF9zb3VyY2U7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0V0FSTl9PTl9PTkNFKDEpO1xuK1x0XHRyZXR1cm4gTkZfRFJPUDtcbitcdH1cbitcdHhtaXQudHVwbGUgPSBvdGhlcl90dXBsZTtcbitcdHhtaXQubmVlZHNfZ3NvX3NlZ21lbnQgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUubmVlZHNfZ3NvX3NlZ21lbnQ7XG4rXG4rXHRyZXR1cm4gbmZfZmxvd19xdWV1ZV94bWl0KHN0YXRlLVx1MDAzZW5ldCwgc2tiLCBcdTAwMjZ4bWl0KTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19vZmZsb2FkX2lwX2hvb2spO1xuK1xuIHVuc2lnbmVkIGludFxuIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbkBAIC0xMTMyLDEzICsxMjA0LDE4IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcbiBcdHN0cnVjdCBydDZfaW5mbyAqcnQ7XG4rXHRfX2JlMzIgaXBfZGFkZHI7XG4gXHRpbnQgcmV0O1xuIFxuIFx0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgc2tiKTtcbiBcdGlmICh0dXBsZWhhc2ggPT0gTlVMTClcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbi1cdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XG4rXHRpZiAoY3R4LnR1bi5wcm90byA9PSBJUFBST1RPX0lQSVApXG4rXHRcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xuK1x0ZWxzZVxuK1x0XHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLFxuK1x0XHRcdFx0XHRcdCAgIHNrYik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gTkZfRFJPUDtcbiBcdGVsc2UgaWYgKHJldCA9PSAwKVxuQEAgLTExNTUsMjggKzEyMzIsNDQgQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ZGlyID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpcjtcbiBcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XG4gXHRvdGhlcl90dXBsZSA9IFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlO1xuK1x0aXBfZGFkZHIgPSBvdGhlcl90dXBsZS1cdTAwM2VzcmNfdjQuc19hZGRyO1xuIFx0aXA2X2RhZGRyID0gXHUwMDI2b3RoZXJfdHVwbGUtXHUwMDNlc3JjX3Y2O1xuIFxuLVx0aWYgKG5mX2Zsb3dfdHVubmVsX3Y2X3B1c2goc3RhdGUtXHUwMDNlbmV0LCBza2IsIG90aGVyX3R1cGxlLFxuLVx0XHRcdFx0ICAgXHUwMDI2aXA2X2RhZGRyKSBcdTAwM2MgMClcbitcdGlmIChuZl9mbG93X3R1bm5lbF9wdXNoKHN0YXRlLVx1MDAzZW5ldCwgc2tiLCBvdGhlcl90dXBsZSwgXHUwMDI2aXBfZGFkZHIsXG4rXHRcdFx0XHRcdTAwMjZpcDZfZGFkZHIpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gTkZfRFJPUDtcbiBcbiBcdHN3aXRjaCAodHVwbGVoYXNoLVx1MDAzZXR1cGxlLnhtaXRfdHlwZSkge1xuLVx0Y2FzZSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSDpcbi1cdFx0cnQgPSBkc3RfcnQ2X2luZm8odHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XG4rXHRjYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIOiB7XG4rXHRcdHN0cnVjdCBkc3RfZW50cnkgKmRzdDtcbitcbiBcdFx0eG1pdC5vdXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShzdGF0ZS1cdTAwM2VuZXQsIHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5pZmlkeCk7XG4gXHRcdGlmICgheG1pdC5vdXRkZXYpIHtcbiBcdFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4gXHRcdFx0cmV0dXJuIE5GX0RST1A7XG4gXHRcdH1cbi1cdFx0bmVpZ2ggPSBpcF9uZWlnaF9ndzYocnQtXHUwMDNlZHN0LmRldiwgcnQ2X25leHRob3AocnQsIGlwNl9kYWRkcikpO1xuK1x0XHRpZiAob3RoZXJfdHVwbGUtXHUwMDNldHVuLmVuY2FwX3Byb3RvID09IEFGX0lORVQgfHxcbitcdFx0ICAgIGN0eC50dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQKSB7XG4rXHRcdFx0c3RydWN0IHJ0YWJsZSAqcnQ0O1xuK1xuK1x0XHRcdHJ0NCA9IGRzdF9ydGFibGUodHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XG4rXHRcdFx0bmVpZ2ggPSBpcF9uZWlnaF9ndzQocnQ0LVx1MDAzZWRzdC5kZXYsXG4rXHRcdFx0XHRcdCAgICAgcnRfbmV4dGhvcChydDQsIGlwX2RhZGRyKSk7XG4rXHRcdFx0ZHN0ID0gXHUwMDI2cnQ0LVx1MDAzZWRzdDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRydCA9IGRzdF9ydDZfaW5mbyh0dXBsZWhhc2gtXHUwMDNldHVwbGUuZHN0X2NhY2hlKTtcbitcdFx0XHRuZWlnaCA9IGlwX25laWdoX2d3NihydC1cdTAwM2Vkc3QuZGV2LFxuK1x0XHRcdFx0XHQgICAgIHJ0Nl9uZXh0aG9wKHJ0LCBpcDZfZGFkZHIpKTtcbitcdFx0XHRkc3QgPSBcdTAwMjZydC1cdTAwM2Vkc3Q7XG4rXHRcdH1cbiBcdFx0aWYgKElTX0VSUihuZWlnaCkpIHtcbiBcdFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4gXHRcdFx0cmV0dXJuIE5GX0RST1A7XG4gXHRcdH1cbiBcdFx0eG1pdC5kZXN0ID0gbmVpZ2gtXHUwMDNlaGE7XG4tXHRcdHNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgXHUwMDI2cnQtXHUwMDNlZHN0KTtcbitcdFx0c2tiX2RzdF9zZXRfbm9yZWYoc2tiLCBkc3QpO1xuIFx0XHRicmVhaztcbitcdH1cbiBcdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUOlxuIFx0XHR4bWl0Lm91dGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHN0YXRlLVx1MDAzZW5ldCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLm91dC5pZmlkeCk7XG4gXHRcdGlmICgheG1pdC5vdXRkZXYpIHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xuaW5kZXggOThjMDNiNDg3ZjUyMTEuLjVlODRiN2YxOGEyNjdmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xuQEAgLTQ1LDcgKzQ1LDggQEAgc3RhdGljIGJvb2wgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLVx0XHRcdFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCB1OCAqaGEsXG4rXHRcdFx0XHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4rXHRcdFx0XHQgICAgIHU4ICpoYSwgX19iZTE2IGV0aGVyX3R5cGUsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuIHtcbiBcdGNvbnN0IHZvaWQgKmRhZGRyID0gXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MztcbkBAIC03Miw3ICs3Myw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4gXHRcdHJldHVybiAtMTtcbiBcbiBvdXQ6XG4tXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIHN0YWNrKTtcbitcdHJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBoYSwgZXRoZXJfdHlwZSwgc3RhY2spO1xuIH1cbiBcbiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XG5AQCAtMTI4LDYgKzEyOSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5zcmNfdjYgPSBwYXRoLVx1MDAzZXR1bi5zcmNfdjY7XG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5kc3RfdjYgPSBwYXRoLVx1MDAzZXR1bi5kc3RfdjY7XG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5sM19wcm90byA9IHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvO1xuK1x0XHRcdFx0aW5mby1cdTAwM2V0dW4uZW5jYXBfcHJvdG8gPSBwYXRoLVx1MDAzZXR1bi5lbmNhcF9wcm90bztcbiBcdFx0XHRcdGluZm8tXHUwMDNlbnVtX3R1bnMrKztcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0aWYgKGluZm8tXHUwMDNlbnVtX2VuY2FwcyBcdTAwM2U9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKVxuQEAgLTIxNCwxMiArMjE2LDEzIEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3QgPSBOVUxMO1xuIFx0c3RydWN0IGZsb3dpIGZsID0ge307XG4gXG4tXHRzd2l0Y2ggKG5mdF9wZihwa3QpKSB7XG4rXHRzd2l0Y2ggKHR1bi1cdTAwM2VlbmNhcF9wcm90bykge1xuIFx0Y2FzZSBORlBST1RPX0lQVjQ6XG4gXHRcdGZsLnUuaXA0LmRhZGRyID0gdHVuLVx1MDAzZWRzdF92NC5zX2FkZHI7XG4gXHRcdGZsLnUuaXA0LnNhZGRyID0gdHVuLVx1MDAzZXNyY192NC5zX2FkZHI7XG4gXHRcdGZsLnUuaXA0LmZsb3dpNF9paWYgPSBuZnRfaW4ocGt0KS1cdTAwM2VpZmluZGV4O1xuLVx0XHRmbC51LmlwNC5mbG93aTRfZHNjcCA9IGlwNGhfZHNjcChpcF9oZHIocGt0LVx1MDAzZXNrYikpO1xuK1x0XHRpZiAobmZ0X3BmKHBrdCkgPT0gTkZQUk9UT19JUFY0KVxuK1x0XHRcdGZsLnUuaXA0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwX2hkcihwa3QtXHUwMDNlc2tiKSk7XG4gXHRcdGZsLnUuaXA0LmZsb3dpNF9tYXJrID0gcGt0LVx1MDAzZXNrYi1cdTAwM2VtYXJrO1xuIFx0XHRmbC51LmlwNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0FOWVNSQztcbiBcdFx0YnJlYWs7XG5AQCAtMjI3LDEzICsyMzAsMTQgQEAgc3RhdGljIGludCBuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0XHRmbC51LmlwNi5kYWRkciA9IHR1bi1cdTAwM2Vkc3RfdjY7XG4gXHRcdGZsLnUuaXA2LnNhZGRyID0gdHVuLVx1MDAzZXNyY192NjtcbiBcdFx0ZmwudS5pcDYuZmxvd2k2X2lpZiA9IG5mdF9pbihwa3QpLVx1MDAzZWlmaW5kZXg7XG4tXHRcdGZsLnUuaXA2LmZsb3dsYWJlbCA9IGlwNl9mbG93aW5mbyhpcHY2X2hkcihwa3QtXHUwMDNlc2tiKSk7XG4rXHRcdGlmIChuZnRfcGYocGt0KSA9PSBORlBST1RPX0lQVjYpXG4rXHRcdFx0ZmwudS5pcDYuZmxvd2xhYmVsID0gaXA2X2Zsb3dpbmZvKGlwdjZfaGRyKHBrdC1cdTAwM2Vza2IpKTtcbiBcdFx0ZmwudS5pcDYuZmxvd2k2X21hcmsgPSBwa3QtXHUwMDNlc2tiLVx1MDAzZW1hcms7XG4gXHRcdGZsLnUuaXA2LmZsb3dpNl9mbGFncyA9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdG5mX3JvdXRlKG5mdF9uZXQocGt0KSwgXHUwMDI2dHVuX2RzdCwgXHUwMDI2ZmwsIGZhbHNlLCBuZnRfcGYocGt0KSk7XG4rXHRuZl9yb3V0ZShuZnRfbmV0KHBrdCksIFx1MDAyNnR1bl9kc3QsIFx1MDAyNmZsLCBmYWxzZSwgdHVuLVx1MDAzZWVuY2FwX3Byb3RvKTtcbiBcdGlmICghdHVuX2RzdClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG5AQCAtMjU1LDcgKzI1OSw4IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHR1bnNpZ25lZCBjaGFyIGhhW0VUSF9BTEVOXTtcbiBcdGludCBpO1xuIFxuLVx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocm91dGUsIGRzdCwgY3QsIGRpciwgaGEsIFx1MDAyNnN0YWNrKSBcdTAwM2MgMCB8fFxuK1x0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocm91dGUsIGRzdCwgY3QsIGRpciwgaGEsIHBrdC1cdTAwM2VldGhlcnR5cGUsXG4rXHRcdFx0XHQgICAgICBcdTAwMjZzdGFjaykgXHUwMDNjIDAgfHxcbiBcdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgaGEsIFx1MDAyNmZ0LVx1MDAzZWRhdGEpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbkBAIC0yNzYsNiArMjgxLDcgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLnNyY192NiA9IGluZm8udHVuLmRzdF92NjtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmRzdF92NiA9IGluZm8udHVuLnNyY192NjtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmwzX3Byb3RvID0gaW5mby50dW4ubDNfcHJvdG87XG4rXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5lbmNhcF9wcm90byA9IGluZm8udHVuLmVuY2FwX3Byb3RvO1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5udW1fdHVucyA9IGluZm8ubnVtX3R1bnM7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2NvbmZpZ1xuaW5kZXggYzNjMTIxYjZmMzAwYTkuLmEyMTJiOWVkYmNkOTdlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWdcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29uZmlnXG5AQCAtMzUsNiArMzUsNyBAQCBDT05GSUdfSVBfU0NUUD1tXG4gQ09ORklHX0lQVjY9eVxuIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUz15XG4gQ09ORklHX0lQVjZfVFVOTkVMPW1cbitDT05GSUdfSVBWNl9TSVQ9bVxuIENPTkZJR19JUF9WUz1tXG4gQ09ORklHX0lQX1ZTX1BST1RPX1RDUD15XG4gQ09ORklHX0lQX1ZTX1JSPW1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbmluZGV4IDA4YWQwNzUwMGU4YTcxLi40NmJkMDgwMTA4YmUzNiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoXG5AQCAtNTc5LDkgKzU3OSw4IEBAIGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19uYXQgXCIkbnMxXCIgXCIkbnMyXCIgMSBcIlwiOyB0aGVuXG4gXHRpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgbGlzdCBydWxlc2V0XG4gZmlcbiBcbi0jIElQSVAgdHVubmVsIHRlc3Q6XG4tIyBBZGQgSVBJUCB0dW5uZWwgaW50ZXJmYWNlcyBhbmQgY2hlY2sgZmxvd3RhYmxlIGFjY2VsZXJhdGlvbi5cbi10ZXN0X2lwaXAoKSB7XG4rIyBJUCB0dW5uZWwgdGVzdHM6XG4rdGVzdF9pcF90bmxzKCkge1xuIGlmICEgaXAgLW5ldCBcIiRuc3IxXCIgbGluayBhZGQgbmFtZSB0dW4wIHR5cGUgaXBpcCBcXFxuICAgICAgbG9jYWwgMTkyLjE2OC4xMC4xIHJlbW90ZSAxOTIuMTY4LjEwLjIgXHUwMDNlL2Rldi9udWxsO3RoZW5cbiBcdGVjaG8gXCJTS0lQOiBjb3VsZCBub3QgYWRkIGlwaXAgdHVubmVsXCJcbkBAIC01OTQsNyArNTkzLDEzIEBAIGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjAuZm9yd2FyZGluZz0xIFx1MDAzZSAvZGV2L251bGxcbiBcbiBpcCAtbmV0IFwiJG5zcjFcIiBsaW5rIGFkZCBuYW1lIHR1bjYgdHlwZSBpcDZ0bmwgbG9jYWwgZmVlMToyOjoxIHJlbW90ZSBmZWUxOjI6OjIgZW5jYXBsaW1pdCBub25lXG4gaXAgLW5ldCBcIiRuc3IxXCIgbGluayBzZXQgdHVuNiB1cFxuK2lwIC1uZXQgXCIkbnNyMVwiIGFkZHIgYWRkIDE5Mi4xNjguMjEwLjEvMjQgZGV2IHR1bjZcbiBpcCAtbmV0IFwiJG5zcjFcIiBhZGRyIGFkZCBmZWUxOjM6OjEvNjQgZGV2IHR1bjYgbm9kYWRcbitpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW42LmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4rXG4raXAgLW5ldCBcIiRuc3IxXCIgbGluayBhZGQgbmFtZSBzaXQxIHR5cGUgc2l0IGxvY2FsIDE5Mi4xNjguMTAuMSByZW1vdGUgMTkyLjE2OC4xMC4yIHR0bCAyNTVcbitpcCAtbmV0IFwiJG5zcjFcIiBsaW5rIHNldCBzaXQxIHVwXG4raXAgLW5ldCBcIiRuc3IxXCIgYWRkciBhZGQgZmUwMTozOjoxLzY0IGRldiBzaXQxIG5vZGFkXG4gXG4gaXAgLW5ldCBcIiRuc3IyXCIgbGluayBhZGQgbmFtZSB0dW4wIHR5cGUgaXBpcCBsb2NhbCAxOTIuMTY4LjEwLjIgcmVtb3RlIDE5Mi4xNjguMTAuMVxuIGlwIC1uZXQgXCIkbnNyMlwiIGxpbmsgc2V0IHR1bjAgdXBcbkBAIC02MDMsNyArNjA4LDEzIEBAIGlwIG5ldG5zIGV4ZWMgXCIkbnNyMlwiIHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjAuZm9yd2FyZGluZz0xIFx1MDAzZSAvZGV2L251bGxcbiBcbiBpcCAtbmV0IFwiJG5zcjJcIiBsaW5rIGFkZCBuYW1lIHR1bjYgdHlwZSBpcDZ0bmwgbG9jYWwgZmVlMToyOjoyIHJlbW90ZSBmZWUxOjI6OjEgZW5jYXBsaW1pdCBub25lIHx8IHJldD0xXG4gaXAgLW5ldCBcIiRuc3IyXCIgbGluayBzZXQgdHVuNiB1cFxuK2lwIC1uZXQgXCIkbnNyMlwiIGFkZHIgYWRkIDE5Mi4xNjguMjEwLjIvMjQgZGV2IHR1bjZcbiBpcCAtbmV0IFwiJG5zcjJcIiBhZGRyIGFkZCBmZWUxOjM6OjIvNjQgZGV2IHR1bjYgbm9kYWRcbitpcCBuZXRucyBleGVjIFwiJG5zcjJcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW42LmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4rXG4raXAgLW5ldCBcIiRuc3IyXCIgbGluayBhZGQgbmFtZSBzaXQxIHR5cGUgc2l0IGxvY2FsIDE5Mi4xNjguMTAuMiByZW1vdGUgMTkyLjE2OC4xMC4xIHR0bCAyNTVcbitpcCAtbmV0IFwiJG5zcjJcIiBsaW5rIHNldCBzaXQxIHVwXG4raXAgLW5ldCBcIiRuc3IyXCIgYWRkciBhZGQgZmUwMTozOjoyLzY0IGRldiBzaXQxIG5vZGFkXG4gXG4gaXAgLW5ldCBcIiRuc3IxXCIgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMTAwLjJcbiBpcCAtbmV0IFwiJG5zcjJcIiByb3V0ZSBjaGFuZ2UgZGVmYXVsdCB2aWEgMTkyLjE2OC4xMDAuMVxuQEAgLTYxOSw2ICs2MzAsNyBAQCBpcCAtNiAtbmV0IFwiJG5zMlwiIHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBkZWFkOjI6OjFcbiBcbiBpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAnbWV0YSBvaWYgdHVuMCBhY2NlcHQnXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJ21ldGEgb2lmIHR1bjYgYWNjZXB0J1xuK2lwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICdtZXRhIG9pZiBzaXQxIGFjY2VwdCdcbiBpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcXFxuIFx0J21ldGEgb2lmIFwidmV0aDBcIiB0Y3Agc3BvcnQgMTIzNDUgY3QgbWFyayBzZXQgMSBmbG93IGFkZCBAZjEgY291bnRlciBuYW1lIHJvdXRlZF9yZXBsIGFjY2VwdCdcbiBcbkBAIC02MzYsNiArNjQ4LDI4IEBAIGVsc2VcbiBcdHJldD0xXG4gZmlcbiBcbitpcCAtbmV0IFwiJG5zcjFcIiByb3V0ZSBjaGFuZ2UgZGVmYXVsdCB2aWEgMTkyLjE2OC4yMTAuMlxuK2lwIC1uZXQgXCIkbnNyMlwiIHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIxMC4xXG4rXG4raWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCBcIiRuczFcIiBcIiRuczJcIiAxIFwiSVA0SVA2IHR1bm5lbFwiOyB0aGVuXG4rXHRlY2hvIFwiRkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggSVA0SVA2IHR1bm5lbFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgbGlzdCBydWxlc2V0XG4rXHRyZXQ9MVxuK2ZpXG4rXG4raXAgLTYgLW5ldCBcIiRuc3IxXCIgcm91dGUgZGVsZXRlIGRlZmF1bHRcbitpcCAtNiAtbmV0IFwiJG5zcjFcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmUwMTozOjoyXG4raXAgLTYgLW5ldCBcIiRuc3IyXCIgcm91dGUgZGVsZXRlIGRlZmF1bHRcbitpcCAtNiAtbmV0IFwiJG5zcjJcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmUwMTozOjoxXG4rXG4raWYgdGVzdF90Y3BfZm9yd2FyZGluZyBcIiRuczFcIiBcIiRuczJcIiAxIDYgXCJbZGVhZDoyOjo5OV1cIiAxMjM0NTsgdGhlblxuK1x0ZWNobyBcIlBBU1M6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiBTSVQgdHVubmVsXCJcbitlbHNlXG4rXHRlY2hvIFwiRkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggU0lUIHR1bm5lbFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgbGlzdCBydWxlc2V0XG4rXHRyZXQ9MVxuK2ZpXG4rXG4gIyBDcmVhdGUgdmxhbiB0YWdnZWQgZGV2aWNlcyBmb3IgSVBJUCB0cmFmZmljLlxuIGlwIC1uZXQgXCIkbnNyMVwiIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSB2ZXRoMS4xMCB0eXBlIHZsYW4gaWQgMTBcbiBpcCAtbmV0IFwiJG5zcjFcIiBsaW5rIHNldCB2ZXRoMS4xMCB1cFxuQEAgLTY1MywxMSArNjg3LDE4IEBAIGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICdtZXRhIG9pZiB0dW4wLjEwIGFcbiBcbiBpcCAtbmV0IFwiJG5zcjFcIiBsaW5rIGFkZCBuYW1lIHR1bjYuMTAgdHlwZSBpcDZ0bmwgbG9jYWwgZmVlMTo0OjoxIHJlbW90ZSBmZWUxOjQ6OjIgZW5jYXBsaW1pdCBub25lXG4gaXAgLW5ldCBcIiRuc3IxXCIgbGluayBzZXQgdHVuNi4xMCB1cFxuK2lwIC1uZXQgXCIkbnNyMVwiIGFkZHIgYWRkIDE5Mi4xNjguMjIwLjEvMjQgZGV2IHR1bjYuMTBcbiBpcCAtbmV0IFwiJG5zcjFcIiBhZGRyIGFkZCBmZWUxOjU6OjEvNjQgZGV2IHR1bjYuMTAgbm9kYWRcbitpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW42LzEwLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4gaXAgLTYgLW5ldCBcIiRuc3IxXCIgcm91dGUgZGVsZXRlIGRlZmF1bHRcbiBpcCAtNiAtbmV0IFwiJG5zcjFcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmVlMTo1OjoyXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJ21ldGEgb2lmIHR1bjYuMTAgYWNjZXB0J1xuIFxuK2lwIC1uZXQgXCIkbnNyMVwiIGxpbmsgYWRkIG5hbWUgc2l0MS4xMCB0eXBlIHNpdCBsb2NhbCAxOTIuMTY4LjIwLjEgcmVtb3RlIDE5Mi4xNjguMjAuMiB0dGwgMjU1XG4raXAgLW5ldCBcIiRuc3IxXCIgbGluayBzZXQgc2l0MS4xMCB1cFxuK2lwIC1uZXQgXCIkbnNyMVwiIGFkZHIgYWRkIGZlMDE6NTo6MS82NCBkZXYgc2l0MS4xMCBub2RhZFxuK2lwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICdtZXRhIG9pZiBzaXQxLjEwIGFjY2VwdCdcbitcbiBpcCAtbmV0IFwiJG5zcjJcIiBsaW5rIGFkZCBsaW5rIHZldGgwIG5hbWUgdmV0aDAuMTAgdHlwZSB2bGFuIGlkIDEwXG4gaXAgLW5ldCBcIiRuc3IyXCIgbGluayBzZXQgdmV0aDAuMTAgdXBcbiBpcCAtbmV0IFwiJG5zcjJcIiBhZGRyIGFkZCAxOTIuMTY4LjIwLjIvMjQgZGV2IHZldGgwLjEwXG5AQCAtNjcyLDcgKzcxMywxNCBAQCBpcCBuZXRucyBleGVjIFwiJG5zcjJcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW4wLzEwLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4gXG4gaXAgLW5ldCBcIiRuc3IyXCIgbGluayBhZGQgbmFtZSB0dW42LjEwIHR5cGUgaXA2dG5sIGxvY2FsIGZlZTE6NDo6MiByZW1vdGUgZmVlMTo0OjoxIGVuY2FwbGltaXQgbm9uZSB8fCByZXQ9MVxuIGlwIC1uZXQgXCIkbnNyMlwiIGxpbmsgc2V0IHR1bjYuMTAgdXBcbitpcCAtbmV0IFwiJG5zcjJcIiBhZGRyIGFkZCAxOTIuMTY4LjIyMC4yLzI0IGRldiB0dW42LjEwXG4gaXAgLW5ldCBcIiRuc3IyXCIgYWRkciBhZGQgZmVlMTo1OjoyLzY0IGRldiB0dW42LjEwIG5vZGFkXG4raXAgbmV0bnMgZXhlYyBcIiRuc3IyXCIgc3lzY3RsIG5ldC5pcHY0LmNvbmYudHVuNi8xMC5mb3J3YXJkaW5nPTEgXHUwMDNlIC9kZXYvbnVsbFxuK1xuK2lwIC1uZXQgXCIkbnNyMlwiIGxpbmsgYWRkIG5hbWUgc2l0MS4xMCB0eXBlIHNpdCBsb2NhbCAxOTIuMTY4LjIwLjIgcmVtb3RlIDE5Mi4xNjguMjAuMSB0dGwgMjU1XG4raXAgLW5ldCBcIiRuc3IyXCIgbGluayBzZXQgc2l0MS4xMCB1cFxuK2lwIC1uZXQgXCIkbnNyMlwiIGFkZHIgYWRkIGZlMDE6NTo6Mi82NCBkZXYgc2l0MS4xMCBub2RhZFxuK1xuIGlwIC02IC1uZXQgXCIkbnNyMlwiIHJvdXRlIGRlbGV0ZSBkZWZhdWx0XG4gaXAgLTYgLW5ldCBcIiRuc3IyXCIgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlZTE6NTo6MVxuIFxuQEAgLTY5MCw2ICs3MzgsMjggQEAgZWxzZVxuIFx0cmV0PTFcbiBmaVxuIFxuK2lwIC1uZXQgXCIkbnNyMVwiIHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIyMC4yXG4raXAgLW5ldCBcIiRuc3IyXCIgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMjIwLjFcbitcbitpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0IFwiJG5zMVwiIFwiJG5zMlwiIDEgXCJJUDRJUDYgdHVubmVsIG92ZXIgdmxhblwiOyB0aGVuXG4rXHRlY2hvIFwiRkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggSVA0SVA2IHR1bm5lbCBvdmVyIHZsYW5cIiAxXHUwMDNlXHUwMDI2MlxuK1x0aXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IGxpc3QgcnVsZXNldFxuK1x0cmV0PTFcbitmaVxuK1xuK2lwIC02IC1uZXQgXCIkbnNyMVwiIHJvdXRlIGRlbGV0ZSBkZWZhdWx0XG4raXAgLTYgLW5ldCBcIiRuc3IxXCIgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlMDE6NTo6MlxuK2lwIC02IC1uZXQgXCIkbnNyMlwiIHJvdXRlIGRlbGV0ZSBkZWZhdWx0XG4raXAgLTYgLW5ldCBcIiRuc3IyXCIgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlMDE6NTo6MVxuK1xuK2lmIHRlc3RfdGNwX2ZvcndhcmRpbmcgXCIkbnMxXCIgXCIkbnMyXCIgMSA2IFwiW2RlYWQ6Mjo6OTldXCIgMTIzNDU7IHRoZW5cbitcdGVjaG8gXCJQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgU0lUIHR1bm5lbCBvdmVyIHZsYW5cIlxuK2Vsc2VcbitcdGVjaG8gXCJGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBTSVQgdHVubmVsIG92ZXIgdmxhblwiIDFcdTAwM2VcdTAwMjYyXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgbGlzdCBydWxlc2V0XG4rXHRyZXQ9MVxuK2ZpXG4rXG4gIyBSZXN0b3JlIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uXG4gaXAgLW5ldCBcIiRuc3IxXCIgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMTAuMlxuIGlwIC1uZXQgXCIkbnNyMlwiIHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjEwLjFcbkBAIC03ODIsNyArODUyLDcgQEAgaXAgLW5ldCBcIiRuc3IxXCIgYWRkciBhZGQgZGVhZDoxOjoxLzY0IGRldiB2ZXRoMCBub2RhZFxuIGlwIC1uZXQgXCIkbnNyMVwiIGxpbmsgc2V0IHVwIGRldiB2ZXRoMFxuIH1cbiBcbi10ZXN0X2lwaXBcbit0ZXN0X2lwX3RubHNcbiBcbiB0ZXN0X2JyaWRnZVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6Mjg6MzIuODAyNjA4OTg5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1MjY4MjIyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgRmxvd3RhYmxlIE9mZmxvYWQgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCdzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzLCBzcGFubmluZyBxdWl0ZSBhIGZldyBmaWxlcy4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgZHJpdmVycyBmb3IgYWlyb2hhIGFuZCBtZWRpYXRlayBQUEUgKHBhY2tldCBwcm9jZXNzaW5nIGVuZ2luZSkgaW1wbGVtZW50YXRpb25zLCBjb3JlIG5ldHdvcmtpbmcgY29kZSwgYW5kIG5ldGZpbHRlciBpdHNlbGYsIGluY2x1ZGluZyB0aGUgZmxvd3RhYmxlIG9mZmxvYWQuIFNwZWNpZmljYWxseSwgaXQncyBhYm91dCBhZGRpbmcgc3VwcG9ydCBmb3IgSVAtaW4tSVAsIElQdjYtaW4tSVB2NCAoU0lUKSwgYW5kIElQdjQtaW4tSVB2NiB0dW5uZWxzIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZsb3d0YWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBtYWpvciBvbmUuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGdvb2QgZnV6emluZyBjYW1wYWlnbi5cblxuRmlyc3QsIGxldCdzIG5haWwgZG93biB3aGF0IHRoaXMgYWN0dWFsbHkgZG9lcy4gSXQgbG9va3MgbGlrZSBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBpcyBiZWluZyB1cGRhdGVkIHRvIHRha2UgYW4gYGV0aGVyX3R5cGVgIGFyZ3VtZW50LiBBbHNvLCBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAgaXMgYmVpbmcgbW9kaWZpZWQsIGFuZCBhIG5ldyBmdW5jdGlvbiwgYGlwaXA2X3R1bm5lbF9maWxsX2ZvcndhcmRfcGF0aGAgaXMgYmVpbmcgYWRkZWQuICBgbmZfZmxvd190YWJsZV9pcC5jYCBpcyBnZXR0aW5nIHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBlbmNhcHN1bGF0aW9uIHByb3RvY29scyBgSVBQUk9UT19JUElQYCBhbmQgYElQUFJPVE9fSVBWNmAuXG5cbk5vdywgZm9yIHNwZWNpZmljIHRhcmdldHMsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZnVuY3Rpb25zIHRoYXQgd2VyZSBhY3R1YWxseSBtb2RpZmllZCBvciBpbnRyb2R1Y2VkLiBIZXJlJ3Mgd2hhdCBJIHNlZTpcbiogICBBIGJ1bmNoIG9mIGNoYW5nZXMgaW4gdGhlIFBQRSBkcml2ZXJzOiBgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvYCwgYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLCBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAsIGBtdGtfZmxvd19nZXRfd2RtYV9pbmZvYCwgYG10a19mbG93X3NldF9vdXRwdXRfZGV2aWNlYCwgYW5kIGBtdGtfZmxvd19vZmZsb2FkX3JlcGxhY2VgLiBUaG9zZSB3aWxsIGJlIHBsYXRmb3JtLXNwZWNpZmljLCBzbyBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gYWNjb3VudCBmb3IgdGhlbS5cbiogICBUaGUgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uczogYGRldl9maWxsX2ZvcndhcmRfcGF0aGAsIGBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgLCBhbmQgdGhlIG5ldyBgaXBpcDZfdHVubmVsX2ZpbGxfZm9yd2FyZF9wYXRoYC5cbiogICBBbmQgYSB3aG9sZSBzZXQgb2YgbmV0ZmlsdGVyIGZ1bmN0aW9uczogYGZsb3dfb2ZmbG9hZF9kc3RfY29va2llYCwgYGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlYCwgYG5mX2Zsb3dfdHVwbGVfZW5jYXBgLCBgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvYCwgYG5mX2Zsb3dfaXA2X3R1bm5lbF9wcm90b2AsIGBuZl9mbG93X2lwX3R1bm5lbF9wb3BgLCBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgLCBgbmZfZmxvd190dW5uZWxfaXBfcHVzaGAsIGBuZl9mbG93X3R1bm5lbF9pcDZfcHVzaGAsIGBuZl9mbG93X3R1bm5lbF9wdXNoYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgLCBgbmZfZmxvd19vZmZsb2FkX2xvb2t1cGAsIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXBgLCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AsIGBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYG5mdF9kZXZfcGF0aF9pbmZvYCwgYG5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGVgLCBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgLiBUaGlzIGlzIGEgbG90IHRvIHRlc3QsIHNvIEknbGwgaGF2ZSB0byBjb25zaWRlciB3aGljaCBhcmUgbW9zdCBsaWtlbHkgdG8gYmUgZXhwb3NlZC5cblxuTmV4dCwgSSBuZWVkIHRvIGJlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkOiBgQ09ORklHX05GX0ZMT1dfVEFCTEVgLCBgQ09ORklHX0lQVjZfU0lUYCwgYENPTkZJR19JUFY2X1RVTk5FTGAsIGBDT05GSUdfTkVUX0lQSVBgLCBhbmQgcG90ZW50aWFsbHkgYENPTkZJR19ORVRfSVBHUkVgLiBUaW1lIHRvIHZlcmlmeS5cblxuQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBuZXQvaXB2Ni9zaXQuY2AgaXMgaW5kZWVkIHRpZWQgdG8gYENPTkZJR19JUFY2X1NJVGAsIGBuZXQvaXB2NC9pcGlwLmNgIGlzIGVuYWJsZWQgYnkgYENPTkZJR19ORVRfSVBJUGAsIGFuZCBgbmV0L2lwdjYvaXA2X3R1bm5lbC5jYCBieSBgQ09ORklHX0lQVjZfVFVOTkVMYC4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYCBzaG91bGQgYmUgZW5hYmxlZCB2aWEgYENPTkZJR19ORl9GTE9XX1RBQkxFYC4gTm93LCBJIHNob3VsZCBoYXZlIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzYyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTk1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6Mjk6MTMuMzI5NDM0NTY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzAwMTU4NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLS4qaXBpcC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19JUF9NUk9VVEVfQ09NTU9OKSArPSBpcG1yX2Jhc2Uub1xcbm5ldC9pcHY0L01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19ORVRfSVBJUCkgKz0gaXBpcC5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMjYtZ3JlLXkgOj0gZ3JlX2RlbXV4Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6Mjk6MTUuMzU5NDYyODU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2MDExOTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhhdDpcblxuKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gVmFyaWFibGU6IGBDT05GSUdfTkVUX0lQSVBgKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biBgQ09ORklHX05FVF9JUElQYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQsIGFzIGFuIGV4cGVydCBpbiBuZXR3b3JraW5nLCBpcyB0aGF0IHRoaXMgdmFyaWFibGUgbGlrZWx5IGNvbnRyb2xzIHRoZSBhdmFpbGFiaWxpdHkgb3IgZnVuY3Rpb25hbGl0eSBvZiBJUElQIChJUC1pbi1JUCkgdHVubmVsaW5nIHdpdGhpbiBhIHN5c3RlbSdzIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gSSBrbm93IElQSVAsIGFuZCBJIGtub3cgaXQncyBhIHJlbGF0aXZlbHkgc2ltcGxlLCB5ZXQgZm91bmRhdGlvbmFsLCBtZXRob2QgZm9yIGVuY2Fwc3VsYXRpbmcgSVAgcGFja2V0cyBpbnNpZGUgb3RoZXIgSVAgcGFja2V0cy4gU28sIGVuYWJsaW5nIHRoaXMgd291bGQgcHJvdmlkZSBhIGJhc2ljIHdheSB0byBlc3RhYmxpc2ggdHVubmVscywgcG90ZW50aWFsbHkgYWxsb3dpbmcgZm9yIHRoZSBjcmVhdGlvbiBvZiB2aXJ0dWFsIG5ldHdvcmtzLCBieXBhc3NpbmcgbmV0d29yayByZXN0cmljdGlvbnMsIG9yIGV4dGVuZGluZyBhIG5ldHdvcmsgYWNyb3NzIGRpc3BhcmF0ZSBzZWdtZW50cy4gSSdtIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHJvdXRpbmcgdGFibGVzLCBNVFUgY29uc2lkZXJhdGlvbnMgKHRoZSBlbmNhcHN1bGF0ZWQgcGFja2V0IG5lZWRzIHRvIGZpdCksIGFuZCBwb3RlbnRpYWwgb3ZlcmhlYWQgZnJvbSB0aGUgYWRkZWQgaGVhZGVycy4gSSdtIGFsc28gdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyDigJMgZG9lcyBlbmFibGluZyB0aGlzIGV4cG9zZSB2dWxuZXJhYmlsaXRpZXMgaWYgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHksIGdpdmVuIHRoYXQgdGhlIHVuZGVybHlpbmcgcGFja2V0cyBhcmUgZW5jYXBzdWxhdGVkIGFuZCBtYXkgb2JzY3VyZSBpbmZvcm1hdGlvbiBmcm9tIGJhc2ljIGZpcmV3YWxscyBvciBpbnRydXNpb24gZGV0ZWN0aW9uIHN5c3RlbXM/IEFuZCBJJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIG90aGVyIHR1bm5lbGluZyBvciBWUE4gdGVjaG5vbG9naWVzLCBzdWNoIGFzIEdSRSBvciBWWExBTiwgd29uZGVyaW5nIGFib3V0IGl0cyBzdHJlbmd0aHMgYW5kIHdlYWtuZXNzZXMgY29tcGFyZWQgdG8gdGhlc2UgYWx0ZXJuYXRpdmVzIGluIHRlcm1zIG9mIGZlYXR1cmVzLCBzY2FsYWJpbGl0eSwgYW5kIHBlcmZvcm1hbmNlLiBJbiBzaG9ydCwgaXQncyBhIGJhc2ljIGFuZCBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBmb3IgbmV0d29ya2luZyBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzQ3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6Mjk6MTkuMjE5NTg3MDk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzA3MzI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotLipzaXQub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT00MD1vYmotJChDT05GSUdfSVBWNl9WVEkpICs9IGlwNl92dGkub1xcbm5ldC9pcHY2L01ha2VmaWxlOjQxOm9iai0kKENPTkZJR19JUFY2X1NJVCkgKz0gc2l0Lm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS00Mi1vYmotJChDT05GSUdfSVBWNl9UVU5ORUwpICs9IGlwNl90dW5uZWwub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToyOToxOS43NjI2NzEzMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTA1MDUyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zOlxuXG4qKkRlZXAgRGl2ZSBvbiBJUHY2IFR1bm5lbGluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIGBDT05GSUdfSVBWNl9TSVRgIGFuZCBgQ09ORklHX0lQVjZfVFVOTkVMYC4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsLCBhcmVuJ3QgdGhleT8gVGhleSByZXByZXNlbnQgdGhlIGNvcmUgbWVjaGFuaXNtcyBmb3IgZW5jYXBzdWxhdGluZyBJUHY2IHRyYWZmaWMgd2l0aGluIGFuIElQdjQgbmV0d29yaywgcmlnaHQ/IGBDT05GSUdfSVBWNl9TSVRgIHNwZWNpZmljYWxseSBmbGFncyBzdXBwb3J0IGZvciBTaW1wbGUgSW50ZXJuZXQgVHJhbnNpdGlvbiAoU0lUKSB0dW5uZWxzLiBTbywgd2UncmUgdGFsa2luZyBhYm91dCB0aGF0IGNsYXNzaWMgNmluNCBzZXR1cC5cblxuQW5kIG9mIGNvdXJzZSwgYENPTkZJR19JUFY2X1RVTk5FTGAgaXMgdGhlIGJyb2FkZXIgb3B0aW9uLiBJdCdzIHRoZSBlbmFibGluZyBmbGFnIGZvciB2YXJpb3VzIHR1bm5lbGluZyBtZXRob2RzLCBub3QganVzdCBTSVQuIFdlIGNvdWxkIGJlIGRlYWxpbmcgd2l0aCBnZW5lcmljIHR1bm5lbHMsIG90aGVyIGVuY2Fwc3VsYXRpb24gbWV0aG9kcywgcG90ZW50aWFsbHkgR1JFIG9yIGV2ZW4gbW9yZSBhZHZhbmNlZCB0dW5uZWxpbmcgcHJvdG9jb2xzLiBOb3csIGFuIGludGVyZXN0aW5nIHF1ZXN0aW9uIGFyaXNlcyDigJMgYXJlIHRoZXNlIHNldHRpbmdzIG11dHVhbGx5IGV4Y2x1c2l2ZSwgb3IgZG8gdGhleSBidWlsZCB1cG9uIGVhY2ggb3RoZXIgaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24/IFRoYXQgd2FycmFudHMgbW9yZSByZXNlYXJjaC4gVGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgaW50ZXJvcGVyYWJpbGl0eSBhbmQgcm91dGUgbWFuYWdlbWVudCBhcmUgY29uc2lkZXJhYmxlLiBJIG5lZWQgdG8ga2VlcCB0aGVzZSBjb25jZXB0cyBzdHJhaWdodCB3aGVuIGNvbnNpZGVyaW5nIGNvbmZpZ3VyYXRpb24gb3IgaW1wbGVtZW50YXRpb24uIFRoZSBkZXZpbCBpcyBjZXJ0YWlubHkgaW4gdGhlIGRldGFpbHMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxNjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToyOToyMy40NTMxNzkwMTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwNjA3OTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai0uKm5mX2Zsb3dfdGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEzOT1vYmotJChDT05GSUdfTkZUX0ZXRF9ORVRERVYpXFx0Kz0gbmZ0X2Z3ZF9uZXRkZXYub1xcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDEtIyBmbG93IHRhYmxlIGluZnJhc3RydWN0dXJlXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDI6b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXFx0Kz0gbmZfZmxvd190YWJsZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDMtbmZfZmxvd190YWJsZS1vYmpzXFx0XFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXFxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTUxPWVuZGlmXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNTItXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNTM6b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEVfSU5FVCkgKz0gbmZfZmxvd190YWJsZV9pbmV0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6Mjk6MjMuNjUzNzkyMjk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc5NjYzNDY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0ZmlsdGVyIEZsb3cgVGFibGUgVHVubmVsIE9mZmxvYWQgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19ORl9GTE9XX1RBQkxFYCBqdW1wcyBvdXQuIFNlZW1zIGxpa2UgdGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgbWF0dGVyLiBNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIHR1bm5lbCBvZmZsb2FkIGxvZ2ljLCBnaXZlbiB0aGUgZnVuY3Rpb24gbmFtZXMuXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaGFuZGxlcyB0dW5uZWwgb2ZmbG9hZC4gSSBzaG91bGQgZGlnIGludG8gdGhlIGZ1bmN0aW9uIGNhbGxzIHdpdGhpbiB0aGlzIGFyZWE6IGBpcGlwNl90dW5uZWxfZmlsbF9mb3J3YXJkX3BhdGhgLCBgbmZfZmxvd190dW5uZWxfaXBfcHVzaGAsIGBuZl9mbG93X3R1bm5lbF9pcDZfcHVzaGAsIGBuZl9mbG93X3R1bm5lbF9wdXNoYCwgYG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXBgLCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgLCBgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aGAsIGFuZCBgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZWAuIFRoZXNlIGFyZSBhbGwgcHJldHR5IHRlbGxpbmcuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIGBDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUYCBsb29rcyBsaWtlIGl0IG1pZ2h0IGJlIHJlbGF0ZWQgYXMgd2VsbCwgYW5kIGV2ZW4gaWYgdW5jaGFuZ2VkLCBgQ09ORklHX05FVF9JUEdSRWAgYWxvbmdzaWRlIGBpcGlwYCBhbmQgYHNpdGAgbWlnaHQgYmUgZ29vZCB0byBjb25zaWRlci5cblxuQWZ0ZXIgYSBxdWljayByZXZpZXcsIEkgc2VlIHRoYXQgdGhpcyBpcyBpbnRyb2R1Y2luZyBzdXBwb3J0IGZvciBJUC1pbi1JUCwgSVB2Ni1pbi1JUHY0IChTSVQpLCBhbmQgSVB2Ni1pbi1JUHY2IHR1bm5lbHMgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZmxvd3RhYmxlIG9mZmxvYWQuIEl0J3MgbW9kaWZ5aW5nIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljIGFuZCB0aGUgdHVubmVsIGRyaXZlcnMgdG8gaGFuZGxlIGZpbGxpbmcgdGhlIGZvcndhcmQgcGF0aCBhbmQgcHVzaGluZyB0aGUgdHVubmVsIGhlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZGlyZWN0bHkgdG91Y2hpbmcgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYywgc28gSSBoYXZlIHRvIHRyZWF0IHRoaXMgYXMgaGlnaCBwcmlvcml0eS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cblRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nOiB0cnVlYCBhbmQgd2lsbCBmb2N1cyBvbiB0aG9zZSBsaXN0ZWQgc3ltYm9scy4gQW5kLCBJIHdpbGwgZW5hYmxlOiBgTkZfRkxPV19UQUJMRWAsIGBORVRfSVBJUGAsIGBJUFY2X1NJVGAsIGFuZCBgSVBWNl9UVU5ORUxgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY2NiwiT3V0cHV0VG9rZW5zIjoyNjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6Mjk6MzIuNDUwNDMyMzY2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5OTc5NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiSVBWNl9TSVRcIixcbiAgICBcIklQVjZfVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBpcDZfdHVubmVsX2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJuZl9mbG93X3R1bm5lbF9pcF9wdXNoXCIsXG4gICAgXCJuZl9mbG93X3R1bm5lbF9pcDZfcHVzaFwiLFxuICAgIFwibmZfZmxvd190dW5uZWxfcHVzaFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2xvb2t1cFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXBfaG9va1wiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va1wiLFxuICAgIFwibmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwibmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgSVAtaW4tSVAsIFNJVCAoSVB2Ni1pbi1JUHY0KSwgYW5kIElQdjYtaW4tSVB2NiB0dW5uZWxzIGluIHRoZSBuZXRmaWx0ZXIgZmxvd3RhYmxlIG9mZmxvYWQuIEl0IG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBsb2dpYyBhbmQgdHVubmVsIGRyaXZlcnMgdG8gc3VwcG9ydCBmaWxsaW5nIHRoZSBmb3J3YXJkIHBhdGggYW5kIHB1c2hpbmcgdHVubmVsIGhlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkVUX0lQSVBcIixcbiAgICBcIklQVjZfU0lUXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwaXA2X3R1bm5lbF9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwibmZfZmxvd190dW5uZWxfaXBfcHVzaFwiLFxuICAgIFwibmZfZmxvd190dW5uZWxfaXA2X3B1c2hcIixcbiAgICBcIm5mX2Zsb3dfdHVubmVsX3B1c2hcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9sb29rdXBcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwX2hvb2tcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tcIixcbiAgICBcIm5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcIm5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIElQLWluLUlQLCBTSVQgKElQdjYtaW4tSVB2NCksIGFuZCBJUHY2LWluLUlQdjYgdHVubmVscyBpbiB0aGUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBvZmZsb2FkLiBJdCBtb2RpZmllcyBjb3JlIG5ldGZpbHRlciBmbG93dGFibGUgbG9naWMgYW5kIHR1bm5lbCBkcml2ZXJzIHRvIHN1cHBvcnQgZmlsbGluZyB0aGUgZm9yd2FyZCBwYXRoIGFuZCBwdXNoaW5nIHR1bm5lbCBoZWFkZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hmr2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 01:13:58 +0000 UTC FinishedAt: 2026-07-10 01:29:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NET_IPIP", "IPV6_SIT", "IPV6_TUNNEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NET_IPIP", "IPV6_SIT", "IPV6_TUNNEL" ], "series_id": "6642fb72-c08f-4d5b-9289-8aa8bf20bb05" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ipip6_tunnel_fill_forward_path", "nf_flow_tunnel_ip_push", "nf_flow_tunnel_ip6_push", "nf_flow_tunnel_push", "nf_flow_offload_lookup", "nf_flow_offload_ipv6_lookup", "nf_flow_offload_ip_hook", "nf_flow_offload_ipv6_hook", "nft_dev_fill_forward_path", "nft_flow_tunnel_update_route" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-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+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkVUX0lQSVAmIzM0OywKICAgICYjMzQ7SVBWNl9TSVQmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcGlwNl90dW5uZWxfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7bmZfZmxvd190dW5uZWxfaXBfcHVzaCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3R1bm5lbF9pcDZfcHVzaCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3R1bm5lbF9wdXNoJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9sb29rdXAmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2smIzM0OywKICAgICYjMzQ7bmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7LAogICAgJiMzNDtuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgSVAtaW4tSVAsIFNJVCAoSVB2Ni1pbi1JUHY0KSwgYW5kIElQdjYtaW4tSVB2NiB0dW5uZWxzIGluIHRoZSBuZXRmaWx0ZXIgZmxvd3RhYmxlIG9mZmxvYWQuIEl0IG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBsb2dpYyBhbmQgdHVubmVsIGRyaXZlcnMgdG8gc3VwcG9ydCBmaWxsaW5nIHRoZSBmb3J3YXJkIHBhdGggYW5kIHB1c2hpbmcgdHVubmVsIGhlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDE6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZTY5MjgyM2QwYzBkYzJlZmQ4YWYwOTRkNzBlODljYTA4MDFmZTczXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDE6Mjg6MzAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbmluZGV4IGU3Yzc4MjkzMDAyYWJiLi4wNmQxMjhjNjdjOGM0NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbkBAIC0yNzYsNyAmIzQzOzI3Niw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X21hbmdsZV9pcHY0KGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLFxuJiM0MztzdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCB1OCAqYWRkciwgX19iZTE2IGV0aGVyX3R5cGUsXG4gXHRcdFx0XHQgICAgc3RydWN0IGFpcm9oYV93ZG1hX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayBzdGFjaztcbkBAIC0yODcsNyAmIzQzOzI4OCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLFxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGVyciA9IGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGFkZHIsIFx1MDAyNnN0YWNrKTtcbiYjNDM7XHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBldGhlcl90eXBlLCBcdTAwMjZzdGFjayk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG5AQCAtMzMxLDcgJiM0MzszMzIsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiBcdFx0XHRcdFx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgKmh3ZSxcbiBcdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHR5cGUsXG4gXHRcdFx0XHRcdHN0cnVjdCBhaXJvaGFfZmxvd19kYXRhICpkYXRhLFxuLVx0XHRcdFx0XHRpbnQgbDRwcm90bylcbiYjNDM7XHRcdFx0XHRcdF9fYmUxNiBldGhlcl90eXBlLCBpbnQgbDRwcm90bylcbiB7XG4gXHR1MzIgcWRhdGEgPSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfU0hBUEVSX0lELCAweDdmKSwgcG9ydHNfcGFkLCB2YWw7XG4gXHRpbnQgd2xhbl9ldHlwZSA9IC1FSU5WQUwsIGRzYV9wb3J0ID0gYWlyb2hhX2dldF9kc2FfcG9ydChcdTAwMjZuZXRkZXYpO1xuQEAgLTM1NCw3ICYjNDM7MzU1LDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdHN0cnVjdCBhaXJvaGFfd2RtYV9pbmZvIGluZm8gPSB7fTtcbiBcbiBcdFx0aWYgKCFhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8obmV0ZGV2LCBkYXRhLVx1MDAzZWV0aC5oX2Rlc3QsXG4tXHRcdFx0XHRcdCAgICAgIFx1MDAyNmluZm8pKSB7XG4mIzQzO1x0XHRcdFx0XHQgICAgICBldGhlcl90eXBlLCBcdTAwMjZpbmZvKSkge1xuIFx0XHRcdHZhbCB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfSUIyX05CUSwgaW5mby5pZHgpIHxcbiBcdFx0XHQgICAgICAgRklFTERfUFJFUChBSVJPSEFfRk9FX0lCMl9QU0VfUE9SVCxcbiBcdFx0XHRcdFx0ICBGRV9QU0VfUE9SVF9DRE00KTtcbkBAIC0xMDgxLDYgJiM0MzsxMDgyLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdDtcbiBcdHN0cnVjdCBhaXJvaGFfZm9lX2VudHJ5IGh3ZTtcbiBcdGludCBlcnIsIGksIG9mZmxvYWRfdHlwZTtcbiYjNDM7XHRfX2JlMTYgZXRoZXJfdHlwZSA9IDA7XG4gXHR1MTYgYWRkcl90eXBlID0gMDtcbiBcdHU4IGw0cHJvdG8gPSAwO1xuIFxuQEAgLTExMDcsNiAmIzQzOzExMDksNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiBcdFx0c3RydWN0IGZsb3dfbWF0Y2hfYmFzaWMgbWF0Y2g7XG4gXG4gXHRcdGZsb3dfcnVsZV9tYXRjaF9iYXNpYyhydWxlLCBcdTAwMjZtYXRjaCk7XG4mIzQzO1x0XHRldGhlcl90eXBlID0gbWF0Y2gua2V5LVx1MDAzZW5fcHJvdG87XG4gXHRcdGw0cHJvdG8gPSBtYXRjaC5rZXktXHUwMDNlaXBfcHJvdG87XG4gXHR9IGVsc2Uge1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5AQCAtMTE3Nyw3ICYjNDM7MTE4MCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCBcdTAwMjZod2UsIG9kZXYsIG9mZmxvYWRfdHlwZSxcbi1cdFx0XHRcdFx0ICAgXHUwMDI2ZGF0YSwgbDRwcm90byk7XG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjZkYXRhLCBldGhlcl90eXBlLCBsNHByb3RvKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuaW5kZXggY2M4YzRlZjgwMzhmMzAuLjI2MDFjMTdiMjljOGI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXG5AQCAtODksNyAmIzQzOzg5LDggQEAgbXRrX2Zsb3dfb2ZmbG9hZF9tYW5nbGVfZXRoKGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0LCB2b2lkICpldGgpXG4gfVxuIFxuIHN0YXRpYyBpbnRcbi1tdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbXRrX3dkbWFfaW5mbyAqaW5mbylcbiYjNDM7bXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcbiYjNDM7XHRcdCAgICAgICBfX2JlMTYgZXRoZXJfdHlwZSwgc3RydWN0IG10a193ZG1hX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayBzdGFjaztcbiBcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG5AQCAtMTAyLDcgJiM0MzsxMDMsNyBAQCBtdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbXRrX3dkbWFfaVxuIFx0XHRyZXR1cm4gLTE7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcdTAwMjZzdGFjayk7XG4mIzQzO1x0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgZXRoZXJfdHlwZSwgXHUwMDI2c3RhY2spO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTE5MCwxMiAmIzQzOzE5MSwxMiBAQCBtdGtfZmxvd19nZXRfZHNhX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKipkZXYpXG4gc3RhdGljIGludFxuIG10a19mbG93X3NldF9vdXRwdXRfZGV2aWNlKHN0cnVjdCBtdGtfZXRoICpldGgsIHN0cnVjdCBtdGtfZm9lX2VudHJ5ICpmb2UsXG4gXHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRlc3RfbWFjLFxuLVx0XHRcdCAgIGludCAqd2VkX2luZGV4KVxuJiM0MztcdFx0XHQgICBfX2JlMTYgZXRoZXJfdHlwZSwgaW50ICp3ZWRfaW5kZXgpXG4ge1xuIFx0c3RydWN0IG10a193ZG1hX2luZm8gaW5mbyA9IHt9O1xuIFx0aW50IHBzZV9wb3J0LCBkc2FfcG9ydCwgcXVldWU7XG4gXG4tXHRpZiAobXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhkZXYsIGRlc3RfbWFjLCBcdTAwMjZpbmZvKSA9PSAwKSB7XG4mIzQzO1x0aWYgKG10a19mbG93X2dldF93ZG1hX2luZm8oZGV2LCBkZXN0X21hYywgZXRoZXJfdHlwZSwgXHUwMDI2aW5mbykgPT0gMCkge1xuIFx0XHRtdGtfZm9lX2VudHJ5X3NldF93ZG1hKGV0aCwgZm9lLCBpbmZvLndkbWFfaWR4LCBpbmZvLnF1ZXVlLFxuIFx0XHRcdFx0ICAgICAgIGluZm8uYnNzLCBpbmZvLndjaWQsIGluZm8uYW1zZHUpO1xuIFx0XHRpZiAobXRrX2lzX25ldHN5c192Ml9vcl9ncmVhdGVyKGV0aCkpIHtcbkBAIC0yNzMsNiAmIzQzOzI3NCw3IEBAIG10a19mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqZixcbiBcdHN0cnVjdCBtdGtfZmxvd19kYXRhIGRhdGEgPSB7fTtcbiBcdHN0cnVjdCBtdGtfZm9lX2VudHJ5IGZvZTtcbiBcdHN0cnVjdCBtdGtfZmxvd19lbnRyeSAqZW50cnk7XG4mIzQzO1x0X19iZTE2IGV0aGVyX3R5cGUgPSAwO1xuIFx0aW50IG9mZmxvYWRfdHlwZSA9IDA7XG4gXHRpbnQgd2VkX2luZGV4ID0gLTE7XG4gXHR1MTYgYWRkcl90eXBlID0gMDtcbkBAIC0zMTksNiAmIzQzOzMyMSw3IEBAIG10a19mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqZixcbiBcdFx0c3RydWN0IGZsb3dfbWF0Y2hfYmFzaWMgbWF0Y2g7XG4gXG4gXHRcdGZsb3dfcnVsZV9tYXRjaF9iYXNpYyhydWxlLCBcdTAwMjZtYXRjaCk7XG4mIzQzO1x0XHRldGhlcl90eXBlID0gbWF0Y2gua2V5LVx1MDAzZW5fcHJvdG87XG4gXHRcdGw0cHJvdG8gPSBtYXRjaC5rZXktXHUwMDNlaXBfcHJvdG87XG4gXHR9IGVsc2Uge1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5AQCAtNDgxLDcgJiM0Mzs0ODQsNyBAQCBtdGtfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmYsXG4gXHRcdG10a19mb2VfZW50cnlfc2V0X3BwcG9lKGV0aCwgXHUwMDI2Zm9lLCBkYXRhLnBwcG9lLnNpZCk7XG4gXG4gXHRlcnIgPSBtdGtfZmxvd19zZXRfb3V0cHV0X2RldmljZShldGgsIFx1MDAyNmZvZSwgb2RldiwgZGF0YS5ldGguaF9kZXN0LFxuLVx0XHRcdFx0XHQgXHUwMDI2d2VkX2luZGV4KTtcbiYjNDM7XHRcdFx0XHRcdCBldGhlcl90eXBlLCBcdTAwMjZ3ZWRfaW5kZXgpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NDYuLjQ1ZDk5ZTExYjA2ZTJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTkwMiw2ICYjNDM7OTAyLDcgQEAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCB7XG4gXHRcdFx0fTtcbiBcbiBcdFx0XHR1OFx0bDNfcHJvdG87XG4mIzQzO1x0XHRcdHU4XHRlbmNhcF9wcm90bztcbiBcdFx0fSB0dW47XG4gXHRcdHN0cnVjdCB7XG4gXHRcdFx0ZW51bSB7XG5AQCAtOTM4LDYgJiM0Mzs5MzksNyBAQCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHtcbiBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCB7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0dThcdFx0XHRkYWRkcltFVEhfQUxFTl07XG4mIzQzO1x0X19iZTE2XHRcdFx0ZXRoZXJfdHlwZTtcbiBcbiBcdGludFx0XHRcdG51bV92bGFucztcbiBcdHN0cnVjdCB7XG5AQCAtMzQyMCw3ICYjNDM7MzQyMiw4IEBAIHZvaWQgZGV2X3JlbW92ZV9vZmZsb2FkKHN0cnVjdCBwYWNrZXRfb2ZmbG9hZCAqcG8pO1xuIFxuIGludCBkZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuJiM0MztpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgY29uc3QgdTggKmRhZGRyLCBfX2JlMTYgZXRoZXJfdHlwZSxcbiBcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XG4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZV9yY3Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuaW5kZXggN2IyM2IyNDVhNWE4NmEuLjRkNDA2ODAxZWM5MDE1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuQEAgLTExOCw2ICYjNDM7MTE4LDcgQEAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWwge1xuIFx0fTtcbiBcbiBcdHU4XHRsM19wcm90bztcbiYjNDM7XHR1OFx0ZW5jYXBfcHJvdG87XG4gfTtcbiBcbiBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA0YjNkNWNmZGY2ZTAwZi4uOWY1YTJkYTllOWY3NzQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC03NTAsMTIgJiM0Mzs3NTAsMTQgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKmRldl9md2RfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiBcdHJldHVybiBcdTAwMjZzdGFjay1cdTAwM2VwYXRoW2tdO1xuIH1cbiBcbi1pbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbiYjNDM7aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHQgIGNvbnN0IHU4ICpkYWRkciwgX19iZTE2IGV0aGVyX3R5cGUsXG4gXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXY7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4tXHRcdC5kZXZcdD0gZGV2LFxuJiM0MztcdFx0LmRldlx0XHQ9IGRldixcbiYjNDM7XHRcdC5ldGhlcl90eXBlXHQ9IGV0aGVyX3R5cGUsXG4gXHR9O1xuIFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcbiBcdGludCByZXQgPSAwO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuY1xuaW5kZXggYjY0MzE5NGY1N2QyOWYuLjlmN2IyYmRhYmVmMDZiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBpcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcGlwLmNcbkBAIC0zNjksNiAmIzQzOzM2OSw3IEBAIHN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0cGF0aC1cdTAwM2V0dW4uc3JjX3Y0LnNfYWRkciA9IHRpcGgtXHUwMDNlc2FkZHI7XG4gXHRwYXRoLVx1MDAzZXR1bi5kc3RfdjQuc19hZGRyID0gdGlwaC1cdTAwM2VkYWRkcjtcbiBcdHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQO1xuJiM0MztcdHBhdGgtXHUwMDNldHVuLmVuY2FwX3Byb3RvID0gQUZfSU5FVDtcbiBcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcbiBcdGN0eC1cdTAwM2VkZXYgPSBydC1cdTAwM2Vkc3QuZGV2O1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuaW5kZXggYmY4ZTQwYWY2MGIwODMuLmExMjFmNzE1YWZkMmNkIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbkBAIC0xODYzLDcgJiM0MzsxODYzLDExIEBAIHN0YXRpYyBpbnQgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9UVU47XG4gXHRcdHBhdGgtXHUwMDNldHVuLnNyY192NiA9IHQtXHUwMDNlcGFybXMubGFkZHI7XG4gXHRcdHBhdGgtXHUwMDNldHVuLmRzdF92NiA9IHQtXHUwMDNlcGFybXMucmFkZHI7XG4tXHRcdHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2O1xuJiM0MztcdFx0cGF0aC1cdTAwM2V0dW4uZW5jYXBfcHJvdG8gPSBBRl9JTkVUNjtcbiYjNDM7XHRcdGlmIChjdHgtXHUwMDNlZXRoZXJfdHlwZSA9PSBjcHVfdG9fYmUxNihFVEhfUF9JUCkpXG4mIzQzO1x0XHRcdHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRwYXRoLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjtcbiBcdFx0cGF0aC1cdTAwM2VkZXYgPSBjdHgtXHUwMDNlZGV2O1xuIFx0XHRjdHgtXHUwMDNlZGV2ID0gZHN0LVx1MDAzZWRldjtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jXG5pbmRleCBhMzhiMjRmYjgzODQyNC4uZWFkMzI3YzMyZGYyNDUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9zaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvc2l0LmNcbkBAIC0xMzY1LDYgJiM0MzsxMzY1LDU2IEBAIGlwaXA2X3R1bm5lbF9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAsXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGlwaXA2X3R1bm5lbF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoY3R4LVx1MDAzZWRldik7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlwaGRyICp0aXBoID0gXHUwMDI2dHVubmVsLVx1MDAzZXBhcm1zLmlwaDtcbiYjNDM7XHRzdHJ1Y3QgcnRhYmxlICpydDtcbiYjNDM7XG4mIzQzO1x0LyogTkJNQSB0dW5uZWxzIChJU0FUQVAsIDZ0bzQsIDZyZCkgcmVzb2x2ZSB0aGUgb3V0ZXIgZGVzdGluYXRpb25cbiYjNDM7XHQgKiBwZXItcGFja2V0IGZyb20gdGhlIGlubmVyIElQdjYgYWRkcmVzczsgbm90IG9mZmxvYWRhYmxlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghdGlwaC1cdTAwM2VkYWRkcilcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0LyogRk9VL0dVRSBlbmNhcHN1bGF0aW9uIGlzIGhhbmRsZWQgaW4gdGhlIHNsb3cgcGF0aCBieVxuJiM0MztcdCAqIGlwX3R1bm5lbF9lbmNhcCgpOyB0aGUgZmFzdCBwYXRoIG9ubHkgcHVzaGVzIGEgcGxhaW5cbiYjNDM7XHQgKiBJUHY0IGhlYWRlciBhbmQgd291bGQgc2tpcCB0aGUgVURQIGVuY2Fwc3VsYXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHR1bm5lbC1cdTAwM2VlbmNhcC50eXBlICE9IFRVTk5FTF9FTkNBUF9OT05FKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRydCA9IGlwX3JvdXRlX291dHB1dChkZXZfbmV0KGN0eC1cdTAwM2VkZXYpLCB0aXBoLVx1MDAzZWRhZGRyLCB0aXBoLVx1MDAzZXNhZGRyLFxuJiM0MztcdFx0XHQgICAgIGluZXRfZHNmaWVsZF90b19kc2NwKHRpcGgtXHUwMDNldG9zKSxcbiYjNDM7XHRcdFx0ICAgICB0dW5uZWwtXHUwMDNlcGFybXMubGluaywgUlRfU0NPUEVfVU5JVkVSU0UpO1xuJiM0MztcdGlmIChJU19FUlIocnQpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocnQpO1xuJiM0MztcbiYjNDM7XHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9UVU47XG4mIzQzO1x0cGF0aC1cdTAwM2V0dW4uc3JjX3Y0LnNfYWRkciA9IHRpcGgtXHUwMDNlc2FkZHI7XG4mIzQzO1x0cGF0aC1cdTAwM2V0dW4uZHN0X3Y0LnNfYWRkciA9IHRpcGgtXHUwMDNlZGFkZHI7XG4mIzQzO1x0cGF0aC1cdTAwM2V0dW4uZW5jYXBfcHJvdG8gPSBBRl9JTkVUO1xuJiM0MztcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChjdHgtXHUwMDNlZXRoZXJfdHlwZSkge1xuJiM0MztcdGNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOlxuJiM0MztcdFx0cGF0aC1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQSVA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQVjYpOlxuJiM0MztcdFx0cGF0aC1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0aXBfcnRfcHV0KHJ0KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VkZXYgPSBydC1cdTAwM2Vkc3QuZGV2O1xuJiM0MztcdGlwX3J0X3B1dChydCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnRcbiBpcGlwNl90dW5uZWxfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsXG4gXHRcdFx0ICAgIHZvaWQgX191c2VyICpkYXRhLCBpbnQgY21kKVxuQEAgLTE0MDEsNiAmIzQzOzE0NTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwaXA2X25ldGRldl9vcHMgPSB7XG4gXHQubmRvX3Npb2NkZXZwcml2YXRlID0gaXBpcDZfdHVubmVsX3Npb2NkZXZwcml2YXRlLFxuIFx0Lm5kb19nZXRfaWZsaW5rID0gaXBfdHVubmVsX2dldF9pZmxpbmssXG4gXHQubmRvX3R1bm5lbF9jdGwgPSBpcGlwNl90dW5uZWxfY3RsLFxuJiM0MztcdC5uZG9fZmlsbF9mb3J3YXJkX3BhdGggPSBpcGlwNl90dW5uZWxfZmlsbF9mb3J3YXJkX3BhdGgsXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBpcGlwNl9kZXZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG5pbmRleCA5OWM1YjlkNjcxYTBjYS4uMThmODllNmZiNDM1NGQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG5AQCAtNzYsOSAmIzQzOzc2LDE0IEBAIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dfb2ZmbG9hZF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqY3QpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hbGxvYyk7XG4gXG4tc3RhdGljIHUzMiBmbG93X29mZmxvYWRfZHN0X2Nvb2tpZShzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpmbG93X3R1cGxlKVxuJiM0MztzdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9kc3RfY29va2llKHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZsb3dfdHVwbGUsXG4mIzQzO1x0XHRcdFx0ICAgdTggdHVuX2VuY2FwX3Byb3RvKVxuIHtcbi1cdGlmIChmbG93X3R1cGxlLVx1MDAzZWwzcHJvdG8gPT0gTkZQUk9UT19JUFY2KVxuJiM0MztcdGJvb2wgZHN0X3Y2O1xuJiM0MztcbiYjNDM7XHRkc3RfdjYgPSB0dW5fZW5jYXBfcHJvdG8gPyB0dW5fZW5jYXBfcHJvdG8gPT0gTkZQUk9UT19JUFY2XG4mIzQzO1x0XHRcdFx0IDogZmxvd190dXBsZS1cdTAwM2VsM3Byb3RvID09IE5GUFJPVE9fSVBWNjtcbiYjNDM7XHRpZiAoZHN0X3Y2KVxuIFx0XHRyZXR1cm4gcnQ2X2dldF9jb29raWUoZHN0X3J0Nl9pbmZvKGZsb3dfdHVwbGUtXHUwMDNlZHN0X2NhY2hlKSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC05OSwxMCAmIzQzOzEwNCwxMiBAQCBzdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4gXHRcdFx0XHQgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxuIHtcbiBcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZsb3dfdHVwbGUgPSBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlO1xuJiM0MztcdHU4IGwzcHJvdG8sIGVuY2FwX3Byb3RvID0gcm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmVuY2FwX3Byb3RvO1xuIFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gbmZ0X3JvdXRlX2RzdF9mZXRjaChyb3V0ZSwgZGlyKTtcbiBcdGludCBpLCBqID0gMDtcbiBcbi1cdHN3aXRjaCAoZmxvd190dXBsZS1cdTAwM2VsM3Byb3RvKSB7XG4mIzQzO1x0bDNwcm90byA9IGVuY2FwX3Byb3RvID8gZW5jYXBfcHJvdG8gOiBmbG93X3R1cGxlLVx1MDAzZWwzcHJvdG87XG4mIzQzO1x0c3dpdGNoIChsM3Byb3RvKSB7XG4gXHRjYXNlIE5GUFJPVE9fSVBWNDpcbiBcdFx0Zmxvd190dXBsZS1cdTAwM2VtdHUgPSBpcF9kc3RfbXR1X21heWJlX2ZvcndhcmQoZHN0LCB0cnVlKTtcbiBcdFx0YnJlYWs7XG5AQCAtMTM4LDcgJiM0MzsxNDUsOCBAQCBzdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4gXHRjYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIOlxuIFx0XHRmbG93X3R1cGxlLVx1MDAzZWlmaWR4ID0gcm91dGUtXHUwMDNldHVwbGVbZGlyXS5vdXQuaWZpbmRleDtcbiBcdFx0Zmxvd190dXBsZS1cdTAwM2Vkc3RfY2FjaGUgPSBkc3Q7XG4tXHRcdGZsb3dfdHVwbGUtXHUwMDNlZHN0X2Nvb2tpZSA9IGZsb3dfb2ZmbG9hZF9kc3RfY29va2llKGZsb3dfdHVwbGUpO1xuJiM0MztcdFx0Zmxvd190dXBsZS1cdTAwM2Vkc3RfY29va2llID0gZmxvd19vZmZsb2FkX2RzdF9jb29raWUoZmxvd190dXBsZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCBlbmNhcF9wcm90byk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0V0FSTl9PTl9PTkNFKDEpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbmluZGV4IDI5ZTkzYWMxZTJlNDAwLi40NDk4MThkY2VmM2M3ZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuQEAgLTE5MSwyNSAmIzQzOzE5MSwyNyBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X3R1cGxlX2VuY2FwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0c3dpdGNoIChpbm5lcl9wcm90bykge1xuLVx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4tXHRcdGlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgb2Zmc2V0KTtcbi1cdFx0aWYgKGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQKSB7XG4mIzQzO1x0aWYgKGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQIHx8IGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7XG4mIzQzO1x0XHRzd2l0Y2ggKGlubmVyX3Byb3RvKSB7XG4mIzQzO1x0XHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbiYjNDM7XHRcdFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzO1xuJiM0MztcdFx0XHRcdFx0ICAgICAgIG9mZnNldCk7XG4gXHRcdFx0dHVwbGUtXHUwMDNldHVuLmRzdF92NC5zX2FkZHIgPSBpcGgtXHUwMDNlZGFkZHI7XG4gXHRcdFx0dHVwbGUtXHUwMDNldHVuLnNyY192NC5zX2FkZHIgPSBpcGgtXHUwMDNlc2FkZHI7XG4tXHRcdFx0dHVwbGUtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQO1xuLVx0XHR9XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbi1cdFx0aXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBvZmZzZXQpO1xuLVx0XHRpZiAoY3R4LVx1MDAzZXR1bi5wcm90byA9PSBJUFBST1RPX0lQVjYpIHtcbiYjNDM7XHRcdFx0dHVwbGUtXHUwMDNldHVuLmwzX3Byb3RvID0gY3R4LVx1MDAzZXR1bi5wcm90bztcbiYjNDM7XHRcdFx0dHVwbGUtXHUwMDNldHVuLmVuY2FwX3Byb3RvID0gQUZfSU5FVDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuJiM0MztcdFx0XHRpcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7XG4mIzQzO1x0XHRcdFx0XHRcdCAgb2Zmc2V0KTtcbiBcdFx0XHR0dXBsZS1cdTAwM2V0dW4uZHN0X3Y2ID0gaXA2aC1cdTAwM2VkYWRkcjtcbiBcdFx0XHR0dXBsZS1cdTAwM2V0dW4uc3JjX3Y2ID0gaXA2aC1cdTAwM2VzYWRkcjtcbi1cdFx0XHR0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7XG4mIzQzO1x0XHRcdHR1cGxlLVx1MDAzZXR1bi5sM19wcm90byA9IGN0eC1cdTAwM2V0dW4ucHJvdG87XG4mIzQzO1x0XHRcdHR1cGxlLVx1MDAzZXR1bi5lbmNhcF9wcm90byA9IEFGX0lORVQ2O1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0YnJlYWs7XG4gXHR9XG4gfVxuIFxuQEAgLTMzNiw3ICYjNDM7MzM4LDcgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRpZiAoaXBoLVx1MDAzZXR0bCBcdTAwM2M9IDEpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUElQKSB7XG4mIzQzO1x0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lQSVAgfHwgaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSVBWNikge1xuIFx0XHRjdHgtXHUwMDNldHVuLnByb3RvID0gaXBoLVx1MDAzZXByb3RvY29sO1xuIFx0XHRjdHgtXHUwMDNldHVuLmhkcl9zaXplID0gc2l6ZTtcbiBcdFx0Y3R4LVx1MDAzZW9mZnNldCAmIzQzOz0gY3R4LVx1MDAzZXR1bi5oZHJfc2l6ZTtcbkBAIC0zNjEsNyAmIzQzOzM2Myw3IEBAIHN0YXRpYyBib29sIG5mX2Zsb3dfaXA2X3R1bm5lbF9wcm90byhzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0aWYgKGlwdjZfZXh0X2hkcihpcDZoLVx1MDAzZW5leHRoZHIpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAoaXA2aC1cdTAwM2VuZXh0aGRyID09IElQUFJPVE9fSVBWNikge1xuJiM0MztcdGlmIChpcDZoLVx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JUElQIHx8IGlwNmgtXHUwMDNlbmV4dGhkciA9PSBJUFBST1RPX0lQVjYpIHtcbiBcdFx0Y3R4LVx1MDAzZXR1bi5wcm90byA9IGlwNmgtXHUwMDNlbmV4dGhkcjtcbiBcdFx0Y3R4LVx1MDAzZXR1bi5oZHJfc2l6ZSA9IHNpemVvZigqaXA2aCk7XG4gXHRcdGN0eC1cdTAwM2VvZmZzZXQgJiM0Mzs9IGN0eC1cdTAwM2V0dW4uaGRyX3NpemU7XG5AQCAtMzgyLDYgJiM0MzszODQsMTAgQEAgc3RhdGljIHZvaWQgbmZfZmxvd19pcF90dW5uZWxfcG9wKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXG4gXHRza2JfcHVsbChza2IsIGN0eC1cdTAwM2V0dW4uaGRyX3NpemUpO1xuIFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4mIzQzO1x0aWYgKGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQKVxuJiM0MztcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuQEAgLTQ1OCwyMSAmIzQzOzQ2NCw2IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfZW5jYXBfcG9wKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdG5mX2Zsb3dfaXBfdHVubmVsX3BvcChjdHgsIHNrYik7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcbi1uZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4tXHRcdCAgICAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLXtcbi1cdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcbi1cbi1cdGlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woY3R4LCBza2IsIGh0b25zKEVUSF9QX0lQKSkpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0aWYgKG5mX2Zsb3dfdHVwbGVfaXAoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcdTAwMjZ0dXBsZSk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXG5AQCAtNDg3LDggJiM0Mzs0NzgsMTYgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbiBcbiBcdG10dSA9IGZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICYjNDM7IGN0eC1cdTAwM2VvZmZzZXQ7XG4tXHRpZiAoZmxvdy1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcbiYjNDM7XHRzd2l0Y2ggKGZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bi5lbmNhcF9wcm90bykge1xuJiM0MztcdGNhc2UgQUZfSU5FVDpcbiBcdFx0bXR1IC09IHNpemVvZigqaXBoKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUZfSU5FVDY6XG4mIzQzO1x0XHRtdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4gXG4gXHRpZiAodW5saWtlbHkobmZfZmxvd19leGNlZWRzX210dShza2IsIG10dSkpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC01ODgsMjMgJiM0Mzs1ODcsMzcgQEAgc3RhdGljIGludCBuZl9mbG93X3BwcG9lX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGlkLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBpcF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbi1cdFx0XHRcdCAgICBfX2JlMzIgKmlwX2RhZGRyKVxuJiM0MztzdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwX3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXG4mIzQzO1x0XHRcdFx0ICBfX2JlMzIgKmlwX2RhZGRyKVxuIHtcbi1cdHN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0c3RydWN0IHJ0YWJsZSAqcnQgPSBkc3RfcnRhYmxlKHR1cGxlLVx1MDAzZWRzdF9jYWNoZSk7XG4tXHR1OCB0b3MgPSBpcGgtXHUwMDNldG9zLCB0dGwgPSBpcGgtXHUwMDNldHRsO1xuLVx0X19iZTE2IGZyYWdfb2ZmID0gaXBoLVx1MDAzZWZyYWdfb2ZmO1xuLVx0dTMyIGhlYWRyb29tID0gc2l6ZW9mKCppcGgpO1xuJiM0MztcdF9fYmUxNiBmcmFnX29mZiA9IDA7XG4mIzQzO1x0c3RydWN0IGlwaGRyICppcGg7XG4mIzQzO1x0dTggdG9zID0gMCwgdHRsO1xuJiM0MztcdHUzMiBoZWFkcm9vbTtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKHR1cGxlLVx1MDAzZXR1bi5sM19wcm90byA9PSBJUFBST1RPX0lQVjYpIHtcbiYjNDM7XHRcdHN0cnVjdCBpcHY2aGRyICppcDZoO1xuJiM0MztcbiYjNDM7XHRcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbiYjNDM7XHRcdHRvcyA9IGlwdjZfZ2V0X2RzZmllbGQoaXA2aCk7XG4mIzQzO1x0XHR0dGwgPSBpcDZoLVx1MDAzZWhvcF9saW1pdDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuJiM0MztcdFx0ZnJhZ19vZmYgPSBpcGgtXHUwMDNlZnJhZ19vZmY7XG4mIzQzO1x0XHR0b3MgPSBpcGgtXHUwMDNldG9zO1xuJiM0MztcdFx0dHRsID0gaXBoLVx1MDAzZXR0bDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZXJyID0gaXB0dW5uZWxfaGFuZGxlX29mZmxvYWRzKHNrYiwgU0tCX0dTT19JUFhJUDQpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdHNrYl9zZXRfaW5uZXJfaXBwcm90byhza2IsIElQUFJPVE9fSVBJUCk7XG4tXHRoZWFkcm9vbSAmIzQzOz0gTExfUkVTRVJWRURfU1BBQ0UocnQtXHUwMDNlZHN0LmRldikgJiM0MzsgcnQtXHUwMDNlZHN0LmhlYWRlcl9sZW47XG4mIzQzO1x0c2tiX3NldF9pbm5lcl9pcHByb3RvKHNrYiwgdHVwbGUtXHUwMDNldHVuLmwzX3Byb3RvKTtcbiYjNDM7XHRoZWFkcm9vbSA9IHNpemVvZigqaXBoKSAmIzQzOyBMTF9SRVNFUlZFRF9TUEFDRShydC1cdTAwM2Vkc3QuZGV2KSAmIzQzO1xuJiM0MztcdFx0ICAgcnQtXHUwMDNlZHN0LmhlYWRlcl9sZW47XG4gXHRlcnIgPSBza2JfY293X2hlYWQoc2tiLCBoZWFkcm9vbSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTYxNSw2ICYjNDM7NjI4LDcgQEAgc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcGlwX3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0LyogUHVzaCBkb3duIGFuZCBpbnN0YWxsIHRoZSBJUCBoZWFkZXIuICovXG4gXHRza2JfcHVzaChza2IsIHNpemVvZigqaXBoKSk7XG4gXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiYjNDM7XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XG4gXG4gXHRpcGggPSBpcF9oZHIoc2tiKTtcbiBcdGlwaC1cdTAwM2V2ZXJzaW9uXHQ9IDQ7XG5AQCAtNjM0LDU2ICYjNDM7NjQ4LDU3IEBAIHN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBpcF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX3Y0X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbi1cdFx0XHRcdCAgX19iZTMyICppcF9kYWRkcilcbi17XG4tXHRpZiAodHVwbGUtXHUwMDNldHVuX251bSlcbi1cdFx0cmV0dXJuIG5mX2Zsb3dfdHVubmVsX2lwaXBfcHVzaChuZXQsIHNrYiwgdHVwbGUsIGlwX2RhZGRyKTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwNmlwNl9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxuLVx0XHRcdFx0ICAgICAgc3RydWN0IGluNl9hZGRyICoqaXA2X2RhZGRyKVxuJiM0MztzdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwNl9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgaW42X2FkZHIgKippcDZfZGFkZHIpXG4ge1xuLVx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbi1cdHN0cnVjdCBydGFibGUgKnJ0ID0gZHN0X3J0YWJsZSh0dXBsZS1cdTAwM2Vkc3RfY2FjaGUpO1xuLVx0X191OCBkc2ZpZWxkID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKTtcbiYjNDM7XHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSB0dXBsZS1cdTAwM2Vkc3RfY2FjaGU7XG4gXHRzdHJ1Y3QgZmxvd2k2IGZsNiA9IHtcbiBcdFx0LmRhZGRyID0gdHVwbGUtXHUwMDNldHVuLnNyY192NixcbiBcdFx0LnNhZGRyID0gdHVwbGUtXHUwMDNldHVuLmRzdF92NixcbiBcdFx0LmZsb3dpNl9wcm90byA9IElQUFJPVE9fSVBWNixcbiBcdH07XG4tXHR1OCBob3BfbGltaXQgPSBpcDZoLVx1MDAzZWhvcF9saW1pdDtcbiYjNDM7XHR1OCBob3BfbGltaXQsIGRzZmllbGQ7XG4mIzQzO1x0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4gXHRpbnQgZXJyLCBtdHU7XG4gXHR1MzIgaGVhZHJvb207XG4gXG4mIzQzO1x0aWYgKHR1cGxlLVx1MDAzZXR1bi5sM19wcm90byA9PSBJUFBST1RPX0lQSVApIHtcbiYjNDM7XHRcdHN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuJiM0MztcbiYjNDM7XHRcdGRzZmllbGQgPSBpcHY0X2dldF9kc2ZpZWxkKGlwaCk7XG4mIzQzO1x0XHRob3BfbGltaXQgPSBpcGgtXHUwMDNldHRsO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpcDZoID0gKHN0cnVjdCBpcHY2aGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4mIzQzO1x0XHRkc2ZpZWxkID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKTtcbiYjNDM7XHRcdGhvcF9saW1pdCA9IGlwNmgtXHUwMDNlaG9wX2xpbWl0O1xuJiM0MztcdH1cbiYjNDM7XG4gXHRlcnIgPSBpcHR1bm5lbF9oYW5kbGVfb2ZmbG9hZHMoc2tiLCBTS0JfR1NPX0lQWElQNik7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0c2tiX3NldF9pbm5lcl9pcHByb3RvKHNrYiwgSVBQUk9UT19JUFY2KTtcbi1cdGhlYWRyb29tID0gc2l6ZW9mKCppcDZoKSAmIzQzOyBMTF9SRVNFUlZFRF9TUEFDRShydC1cdTAwM2Vkc3QuZGV2KSAmIzQzO1xuLVx0XHQgICBydC1cdTAwM2Vkc3QuaGVhZGVyX2xlbjtcbiYjNDM7XHRza2Jfc2V0X2lubmVyX2lwcHJvdG8oc2tiLCB0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG8pO1xuJiM0MztcdGhlYWRyb29tID0gc2l6ZW9mKCppcDZoKSAmIzQzOyBMTF9SRVNFUlZFRF9TUEFDRShkc3QtXHUwMDNlZGV2KSAmIzQzO1xuJiM0MztcdFx0ICAgZHN0LVx1MDAzZWhlYWRlcl9sZW47XG4gXHRlcnIgPSBza2JfY293X2hlYWQoc2tiLCBoZWFkcm9vbSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0c2tiX3NjcnViX3BhY2tldChza2IsIHRydWUpO1xuLVx0bXR1ID0gZHN0X210dShcdTAwMjZydC1cdTAwM2Vkc3QpIC0gc2l6ZW9mKCppcDZoKTtcbiYjNDM7XHRtdHUgPSBkc3RfbXR1KGRzdCkgLSBzaXplb2YoKmlwNmgpO1xuIFx0bXR1ID0gbWF4KG10dSwgSVBWNl9NSU5fTVRVKTtcbiBcdHNrYl9kc3RfdXBkYXRlX3BtdHVfbm9fY29uZmlybShza2IsIG10dSk7XG4gXG4gXHRza2JfcHVzaChza2IsIHNpemVvZigqaXA2aCkpO1xuIFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4mIzQzO1x0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XG4gXG4gXHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcbiBcdGlwNl9mbG93X2hkcihpcDZoLCBkc2ZpZWxkLFxuIFx0XHQgICAgIGlwNl9tYWtlX2Zsb3dsYWJlbChuZXQsIHNrYiwgZmw2LmZsb3dsYWJlbCwgdHJ1ZSwgXHUwMDI2Zmw2KSk7XG4gXHRpcDZoLVx1MDAzZWhvcF9saW1pdCA9IGhvcF9saW1pdDtcbi1cdGlwNmgtXHUwMDNlbmV4dGhkciA9IElQUFJPVE9fSVBWNjtcbiYjNDM7XHRpcDZoLVx1MDAzZW5leHRoZHIgPSB0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG87XG4gXHRpcDZoLVx1MDAzZWRhZGRyID0gdHVwbGUtXHUwMDNldHVuLnNyY192NjtcbiBcdGlwNmgtXHUwMDNlc2FkZHIgPSB0dXBsZS1cdTAwM2V0dW4uZHN0X3Y2O1xuIFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2VwYXlsb2FkX2xlbiA9IGh0b25zKHNrYi1cdTAwM2VsZW4gLSBzaXplb2YoKmlwNmgpKTtcbkBAIC02OTQsMTQgJiM0Mzs3MDksMTggQEAgc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcDZpcDZfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF92Nl9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXG4tXHRcdFx0XHQgIHN0cnVjdCBpbjZfYWRkciAqKmlwNl9kYWRkcilcbiYjNDM7c3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxuJiM0MztcdFx0XHQgICAgICAgX19iZTMyICppcF9kYWRkciwgc3RydWN0IGluNl9hZGRyICoqaXA2X2RhZGRyKVxuIHtcbi1cdGlmICh0dXBsZS1cdTAwM2V0dW5fbnVtKVxuLVx0XHRyZXR1cm4gbmZfZmxvd190dW5uZWxfaXA2aXA2X3B1c2gobmV0LCBza2IsIHR1cGxlLCBpcDZfZGFkZHIpO1xuLVxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0c3dpdGNoICh0dXBsZS1cdTAwM2V0dW4uZW5jYXBfcHJvdG8pIHtcbiYjNDM7XHRjYXNlIEFGX0lORVQ6XG4mIzQzO1x0XHRyZXR1cm4gbmZfZmxvd190dW5uZWxfaXBfcHVzaChuZXQsIHNrYiwgdHVwbGUsIGlwX2RhZGRyKTtcbiYjNDM7XHRjYXNlIEFGX0lORVQ2OlxuJiM0MztcdFx0cmV0dXJuIG5mX2Zsb3dfdHVubmVsX2lwNl9wdXNoKG5ldCwgc2tiLCB0dXBsZSwgaXA2X2RhZGRyKTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IG5mX2Zsb3dfZW5jYXBfcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTgwMSw4NiAmIzQzOzgyMCw2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfZmxvd19xdWV1ZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBORl9TVE9MRU47XG4gfVxuIFxuLXVuc2lnbmVkIGludFxuLW5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuLXtcbi1cdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcbi1cdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2O1xuLVx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqb3RoZXJfdHVwbGU7XG4tXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xuLVx0c3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0ge1xuLVx0XHQuaW5cdD0gc3RhdGUtXHUwMDNlaW4sXG4tXHR9O1xuLVx0c3RydWN0IG5mX2Zsb3dfeG1pdCB4bWl0ID0ge307XG4tXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xuLVx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2g7XG4tXHRzdHJ1Y3QgcnRhYmxlICpydDtcbi1cdF9fYmUzMiBpcF9kYWRkcjtcbi1cdGludCByZXQ7XG4tXG4tXHR0dXBsZWhhc2ggPSBuZl9mbG93X29mZmxvYWRfbG9va3VwKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgc2tiKTtcbi1cdGlmICghdHVwbGVoYXNoKVxuLVx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuLVxuLVx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gTkZfRFJPUDtcbi1cdGVsc2UgaWYgKHJldCA9PSAwKVxuLVx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuLVxuLVx0aWYgKHVubGlrZWx5KHR1cGxlaGFzaC1cdTAwM2V0dXBsZS54bWl0X3R5cGUgPT0gRkxPV19PRkZMT0FEX1hNSVRfWEZSTSkpIHtcbi1cdFx0cnQgPSBkc3RfcnRhYmxlKHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kc3RfY2FjaGUpO1xuLVx0XHRtZW1zZXQoc2tiLVx1MDAzZWNiLCAwLCBzaXplb2Yoc3RydWN0IGluZXRfc2tiX3Bhcm0pKTtcbi1cdFx0SVBDQihza2IpLVx1MDAzZWlpZiA9IHNrYi1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleDtcbi1cdFx0SVBDQihza2IpLVx1MDAzZWZsYWdzID0gSVBTS0JfRk9SV0FSREVEO1xuLVx0XHRyZXR1cm4gbmZfZmxvd194bWl0X3hmcm0oc2tiLCBzdGF0ZSwgXHUwMDI2cnQtXHUwMDNlZHN0KTtcbi1cdH1cbi1cbi1cdGRpciA9IHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kaXI7XG4tXHRmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pO1xuLVx0b3RoZXJfdHVwbGUgPSBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZTtcbi1cdGlwX2RhZGRyID0gb3RoZXJfdHVwbGUtXHUwMDNlc3JjX3Y0LnNfYWRkcjtcbi1cbi1cdGlmIChuZl9mbG93X3R1bm5lbF92NF9wdXNoKHN0YXRlLVx1MDAzZW5ldCwgc2tiLCBvdGhlcl90dXBsZSwgXHUwMDI2aXBfZGFkZHIpIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gTkZfRFJPUDtcbi1cbi1cdHN3aXRjaCAodHVwbGVoYXNoLVx1MDAzZXR1cGxlLnhtaXRfdHlwZSkge1xuLVx0Y2FzZSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSDpcbi1cdFx0cnQgPSBkc3RfcnRhYmxlKHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kc3RfY2FjaGUpO1xuLVx0XHR4bWl0Lm91dGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHN0YXRlLVx1MDAzZW5ldCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmlmaWR4KTtcbi1cdFx0aWYgKCF4bWl0Lm91dGRldikge1xuLVx0XHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbi1cdFx0XHRyZXR1cm4gTkZfRFJPUDtcbi1cdFx0fVxuLVx0XHRuZWlnaCA9IGlwX25laWdoX2d3NChydC1cdTAwM2Vkc3QuZGV2LCBydF9uZXh0aG9wKHJ0LCBpcF9kYWRkcikpO1xuLVx0XHRpZiAoSVNfRVJSKG5laWdoKSkge1xuLVx0XHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbi1cdFx0XHRyZXR1cm4gTkZfRFJPUDtcbi1cdFx0fVxuLVx0XHR4bWl0LmRlc3QgPSBuZWlnaC1cdTAwM2VoYTtcbi1cdFx0c2tiX2RzdF9zZXRfbm9yZWYoc2tiLCBcdTAwMjZydC1cdTAwM2Vkc3QpO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUOlxuLVx0XHR4bWl0Lm91dGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHN0YXRlLVx1MDAzZW5ldCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLm91dC5pZmlkeCk7XG4tXHRcdGlmICgheG1pdC5vdXRkZXYpIHtcbi1cdFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4tXHRcdFx0cmV0dXJuIE5GX0RST1A7XG4tXHRcdH1cbi1cdFx0eG1pdC5kZXN0ID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLm91dC5oX2Rlc3Q7XG4tXHRcdHhtaXQuc291cmNlID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLm91dC5oX3NvdXJjZTtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRXQVJOX09OX09OQ0UoMSk7XG4tXHRcdHJldHVybiBORl9EUk9QO1xuLVx0fVxuLVx0eG1pdC50dXBsZSA9IG90aGVyX3R1cGxlO1xuLVx0eG1pdC5uZWVkc19nc29fc2VnbWVudCA9IHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5uZWVkc19nc29fc2VnbWVudDtcbi1cbi1cdHJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQoc3RhdGUtXHUwMDNlbmV0LCBza2IsIFx1MDAyNnhtaXQpO1xuLX1cbi1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXBfaG9vayk7XG4tXG4gc3RhdGljIHZvaWQgbmZfZmxvd19uYXRfaXB2Nl90Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHRob2ZmLFxuIFx0XHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqYWRkcixcbiBcdFx0XHRcdCBzdHJ1Y3QgaW42X2FkZHIgKm5ld19hZGRyLFxuQEAgLTEwNjUsOCAmIzQzOzEwMDQsMTYgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pO1xuIFxuIFx0bXR1ID0gZmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgJiM0MzsgY3R4LVx1MDAzZW9mZnNldDtcbi1cdGlmIChmbG93LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS50dW5fbnVtKVxuJiM0MztcdHN3aXRjaCAoZmxvdy1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuLmVuY2FwX3Byb3RvKSB7XG4mIzQzO1x0Y2FzZSBBRl9JTkVUOlxuJiM0MztcdFx0bXR1IC09IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBRl9JTkVUNjpcbiBcdFx0bXR1IC09IHNpemVvZigqaXA2aCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKHVubGlrZWx5KG5mX2Zsb3dfZXhjZWVkc19tdHUoc2tiLCBtdHUpKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTEwMCw2ICYjNDM7MTA0NywyNSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdHJldHVybiAxO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxuJiM0MztuZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChjdHgsIHNrYiwgaHRvbnMoRVRIX1BfSVApKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZXR1bi5wcm90byA9PSBJUFBST1RPX0lQVjYpIHtcbiYjNDM7XHRcdGlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fSBlbHNlIGlmIChuZl9mbG93X3R1cGxlX2lwKGN0eCwgc2tiLCBcdTAwMjZ0dXBsZSkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXHUwMDI2dHVwbGUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcbiBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdFx0XHQgICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbkBAIC0xMTEwLDEyICYjNDM7MTA3NiwxMTggQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRpZiAoIW5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKGN0eCwgc2tiLCBodG9ucyhFVEhfUF9JUFY2KSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWYgKG5mX2Zsb3dfdHVwbGVfaXB2NihjdHgsIHNrYiwgXHUwMDI2dHVwbGUpIFx1MDAzYyAwKVxuJiM0MztcdGlmIChjdHgtXHUwMDNldHVuLnByb3RvID09IElQUFJPVE9fSVBJUCkge1xuJiM0MztcdFx0aWYgKG5mX2Zsb3dfdHVwbGVfaXAoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fSBlbHNlIGlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMCkge1xuIFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcdTAwMjZ0dXBsZSk7XG4gfVxuIFxuJiM0Mzt1bnNpZ25lZCBpbnRcbiYjNDM7bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xuJiM0MztcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2O1xuJiM0MztcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlO1xuJiM0MztcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XG4mIzQzO1x0c3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0ge1xuJiM0MztcdFx0LmluXHQ9IHN0YXRlLVx1MDAzZWluLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IG5mX2Zsb3dfeG1pdCB4bWl0ID0ge307XG4mIzQzO1x0c3RydWN0IGluNl9hZGRyICppcDZfZGFkZHI7XG4mIzQzO1x0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcbiYjNDM7XHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcbiYjNDM7XHRzdHJ1Y3QgcnRhYmxlICpydDtcbiYjNDM7XHRfX2JlMzIgaXBfZGFkZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2xvb2t1cChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XG4mIzQzO1x0aWYgKCF0dXBsZWhhc2gpXG4mIzQzO1x0XHRyZXR1cm4gTkZfQUNDRVBUO1xuJiM0MztcbiYjNDM7XHRpZiAoY3R4LnR1bi5wcm90byA9PSBJUFBST1RPX0lQVjYpXG4mIzQzO1x0XHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLFxuJiM0MztcdFx0XHRcdFx0XHQgICBza2IpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gTkZfRFJPUDtcbiYjNDM7XHRlbHNlIGlmIChyZXQgPT0gMClcbiYjNDM7XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSh0dXBsZWhhc2gtXHUwMDNldHVwbGUueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX1hGUk0pKSB7XG4mIzQzO1x0XHRydCA9IGRzdF9ydGFibGUodHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XG4mIzQzO1x0XHRtZW1zZXQoc2tiLVx1MDAzZWNiLCAwLCBzaXplb2Yoc3RydWN0IGluZXRfc2tiX3Bhcm0pKTtcbiYjNDM7XHRcdElQQ0Ioc2tiKS1cdTAwM2VpaWYgPSBza2ItXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0XHRJUENCKHNrYiktXHUwMDNlZmxhZ3MgPSBJUFNLQl9GT1JXQVJERUQ7XG4mIzQzO1x0XHRyZXR1cm4gbmZfZmxvd194bWl0X3hmcm0oc2tiLCBzdGF0ZSwgXHUwMDI2cnQtXHUwMDNlZHN0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRpciA9IHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kaXI7XG4mIzQzO1x0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbiYjNDM7XHRvdGhlcl90dXBsZSA9IFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlO1xuJiM0MztcdGlwX2RhZGRyID0gb3RoZXJfdHVwbGUtXHUwMDNlc3JjX3Y0LnNfYWRkcjtcbiYjNDM7XHRpcDZfZGFkZHIgPSBcdTAwMjZvdGhlcl90dXBsZS1cdTAwM2VzcmNfdjY7XG4mIzQzO1xuJiM0MztcdGlmIChuZl9mbG93X3R1bm5lbF9wdXNoKHN0YXRlLVx1MDAzZW5ldCwgc2tiLCBvdGhlcl90dXBsZSwgXHUwMDI2aXBfZGFkZHIsXG4mIzQzO1x0XHRcdFx0XHUwMDI2aXA2X2RhZGRyKSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBORl9EUk9QO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHR1cGxlaGFzaC1cdTAwM2V0dXBsZS54bWl0X3R5cGUpIHtcbiYjNDM7XHRjYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIOiB7XG4mIzQzO1x0XHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XG4mIzQzO1xuJiM0MztcdFx0eG1pdC5vdXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShzdGF0ZS1cdTAwM2VuZXQsIHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5pZmlkeCk7XG4mIzQzO1x0XHRpZiAoIXhtaXQub3V0ZGV2KSB7XG4mIzQzO1x0XHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbiYjNDM7XHRcdFx0cmV0dXJuIE5GX0RST1A7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAob3RoZXJfdHVwbGUtXHUwMDNldHVuLmVuY2FwX3Byb3RvID09IEFGX0lORVQ2IHx8XG4mIzQzO1x0XHQgICAgY3R4LnR1bi5wcm90byA9PSBJUFBST1RPX0lQVjYpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHJ0Nl9pbmZvICpydDY7XG4mIzQzO1xuJiM0MztcdFx0XHRydDYgPSBkc3RfcnQ2X2luZm8odHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XG4mIzQzO1x0XHRcdG5laWdoID0gaXBfbmVpZ2hfZ3c2KHJ0Ni1cdTAwM2Vkc3QuZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBydDZfbmV4dGhvcChydDYsIGlwNl9kYWRkcikpO1xuJiM0MztcdFx0XHRkc3QgPSBcdTAwMjZydDYtXHUwMDNlZHN0O1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cnQgPSBkc3RfcnRhYmxlKHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kc3RfY2FjaGUpO1xuJiM0MztcdFx0XHRuZWlnaCA9IGlwX25laWdoX2d3NChydC1cdTAwM2Vkc3QuZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBydF9uZXh0aG9wKHJ0LCBpcF9kYWRkcikpO1xuJiM0MztcdFx0XHRkc3QgPSBcdTAwMjZydC1cdTAwM2Vkc3Q7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoSVNfRVJSKG5laWdoKSkge1xuJiM0MztcdFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4mIzQzO1x0XHRcdHJldHVybiBORl9EUk9QO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0eG1pdC5kZXN0ID0gbmVpZ2gtXHUwMDNlaGE7XG4mIzQzO1x0XHRza2JfZHN0X3NldF9ub3JlZihza2IsIGRzdCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0Y2FzZSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q6XG4mIzQzO1x0XHR4bWl0Lm91dGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHN0YXRlLVx1MDAzZW5ldCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLm91dC5pZmlkeCk7XG4mIzQzO1x0XHRpZiAoIXhtaXQub3V0ZGV2KSB7XG4mIzQzO1x0XHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbiYjNDM7XHRcdFx0cmV0dXJuIE5GX0RST1A7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHR4bWl0LmRlc3QgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUub3V0LmhfZGVzdDtcbiYjNDM7XHRcdHhtaXQuc291cmNlID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLm91dC5oX3NvdXJjZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRXQVJOX09OX09OQ0UoMSk7XG4mIzQzO1x0XHRyZXR1cm4gTkZfRFJPUDtcbiYjNDM7XHR9XG4mIzQzO1x0eG1pdC50dXBsZSA9IG90aGVyX3R1cGxlO1xuJiM0MztcdHhtaXQubmVlZHNfZ3NvX3NlZ21lbnQgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUubmVlZHNfZ3NvX3NlZ21lbnQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQoc3RhdGUtXHUwMDNlbmV0LCBza2IsIFx1MDAyNnhtaXQpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKTtcbiYjNDM7XG4gdW5zaWduZWQgaW50XG4gbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuQEAgLTExMzIsMTMgJiM0MzsxMjA0LDE4IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcbiBcdHN0cnVjdCBydDZfaW5mbyAqcnQ7XG4mIzQzO1x0X19iZTMyIGlwX2RhZGRyO1xuIFx0aW50IHJldDtcbiBcbiBcdHR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XG4gXHRpZiAodHVwbGVoYXNoID09IE5VTEwpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4tXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xuJiM0MztcdGlmIChjdHgudHVuLnByb3RvID09IElQUFJPVE9fSVBJUClcbiYjNDM7XHRcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHNrYik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gTkZfRFJPUDtcbiBcdGVsc2UgaWYgKHJldCA9PSAwKVxuQEAgLTExNTUsMjggJiM0MzsxMjMyLDQ0IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGRpciA9IHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kaXI7XG4gXHRmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pO1xuIFx0b3RoZXJfdHVwbGUgPSBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZTtcbiYjNDM7XHRpcF9kYWRkciA9IG90aGVyX3R1cGxlLVx1MDAzZXNyY192NC5zX2FkZHI7XG4gXHRpcDZfZGFkZHIgPSBcdTAwMjZvdGhlcl90dXBsZS1cdTAwM2VzcmNfdjY7XG4gXG4tXHRpZiAobmZfZmxvd190dW5uZWxfdjZfcHVzaChzdGF0ZS1cdTAwM2VuZXQsIHNrYiwgb3RoZXJfdHVwbGUsXG4tXHRcdFx0XHQgICBcdTAwMjZpcDZfZGFkZHIpIFx1MDAzYyAwKVxuJiM0MztcdGlmIChuZl9mbG93X3R1bm5lbF9wdXNoKHN0YXRlLVx1MDAzZW5ldCwgc2tiLCBvdGhlcl90dXBsZSwgXHUwMDI2aXBfZGFkZHIsXG4mIzQzO1x0XHRcdFx0XHUwMDI2aXA2X2RhZGRyKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIE5GX0RST1A7XG4gXG4gXHRzd2l0Y2ggKHR1cGxlaGFzaC1cdTAwM2V0dXBsZS54bWl0X3R5cGUpIHtcbi1cdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfTkVJR0g6XG4tXHRcdHJ0ID0gZHN0X3J0Nl9pbmZvKHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kc3RfY2FjaGUpO1xuJiM0MztcdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfTkVJR0g6IHtcbiYjNDM7XHRcdHN0cnVjdCBkc3RfZW50cnkgKmRzdDtcbiYjNDM7XG4gXHRcdHhtaXQub3V0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc3RhdGUtXHUwMDNlbmV0LCB0dXBsZWhhc2gtXHUwMDNldHVwbGUuaWZpZHgpO1xuIFx0XHRpZiAoIXhtaXQub3V0ZGV2KSB7XG4gXHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuIFx0XHRcdHJldHVybiBORl9EUk9QO1xuIFx0XHR9XG4tXHRcdG5laWdoID0gaXBfbmVpZ2hfZ3c2KHJ0LVx1MDAzZWRzdC5kZXYsIHJ0Nl9uZXh0aG9wKHJ0LCBpcDZfZGFkZHIpKTtcbiYjNDM7XHRcdGlmIChvdGhlcl90dXBsZS1cdTAwM2V0dW4uZW5jYXBfcHJvdG8gPT0gQUZfSU5FVCB8fFxuJiM0MztcdFx0ICAgIGN0eC50dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBydGFibGUgKnJ0NDtcbiYjNDM7XG4mIzQzO1x0XHRcdHJ0NCA9IGRzdF9ydGFibGUodHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XG4mIzQzO1x0XHRcdG5laWdoID0gaXBfbmVpZ2hfZ3c0KHJ0NC1cdTAwM2Vkc3QuZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBydF9uZXh0aG9wKHJ0NCwgaXBfZGFkZHIpKTtcbiYjNDM7XHRcdFx0ZHN0ID0gXHUwMDI2cnQ0LVx1MDAzZWRzdDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHJ0ID0gZHN0X3J0Nl9pbmZvKHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kc3RfY2FjaGUpO1xuJiM0MztcdFx0XHRuZWlnaCA9IGlwX25laWdoX2d3NihydC1cdTAwM2Vkc3QuZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBydDZfbmV4dGhvcChydCwgaXA2X2RhZGRyKSk7XG4mIzQzO1x0XHRcdGRzdCA9IFx1MDAyNnJ0LVx1MDAzZWRzdDtcbiYjNDM7XHRcdH1cbiBcdFx0aWYgKElTX0VSUihuZWlnaCkpIHtcbiBcdFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4gXHRcdFx0cmV0dXJuIE5GX0RST1A7XG4gXHRcdH1cbiBcdFx0eG1pdC5kZXN0ID0gbmVpZ2gtXHUwMDNlaGE7XG4tXHRcdHNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgXHUwMDI2cnQtXHUwMDNlZHN0KTtcbiYjNDM7XHRcdHNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgZHN0KTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0fVxuIFx0Y2FzZSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q6XG4gXHRcdHhtaXQub3V0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc3RhdGUtXHUwMDNlbmV0LCB0dXBsZWhhc2gtXHUwMDNldHVwbGUub3V0LmlmaWR4KTtcbiBcdFx0aWYgKCF4bWl0Lm91dGRldikge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXG5pbmRleCA5OGMwM2I0ODdmNTIxMS4uNWU4NGI3ZjE4YTI2N2YgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXG5AQCAtNDUsNyAmIzQzOzQ1LDggQEAgc3RhdGljIGJvb2wgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLVx0XHRcdFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCB1OCAqaGEsXG4mIzQzO1x0XHRcdFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuJiM0MztcdFx0XHRcdCAgICAgdTggKmhhLCBfX2JlMTYgZXRoZXJfdHlwZSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4ge1xuIFx0Y29uc3Qgdm9pZCAqZGFkZHIgPSBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzO1xuQEAgLTcyLDcgJiM0Mzs3Myw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4gXHRcdHJldHVybiAtMTtcbiBcbiBvdXQ6XG4tXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIHN0YWNrKTtcbiYjNDM7XHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIGV0aGVyX3R5cGUsIHN0YWNrKTtcbiB9XG4gXG4gc3RydWN0IG5mdF9mb3J3YXJkX2luZm8ge1xuQEAgLTEyOCw2ICYjNDM7MTI5LDcgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHRcdGluZm8tXHUwMDNldHVuLnNyY192NiA9IHBhdGgtXHUwMDNldHVuLnNyY192NjtcbiBcdFx0XHRcdGluZm8tXHUwMDNldHVuLmRzdF92NiA9IHBhdGgtXHUwMDNldHVuLmRzdF92NjtcbiBcdFx0XHRcdGluZm8tXHUwMDNldHVuLmwzX3Byb3RvID0gcGF0aC1cdTAwM2V0dW4ubDNfcHJvdG87XG4mIzQzO1x0XHRcdFx0aW5mby1cdTAwM2V0dW4uZW5jYXBfcHJvdG8gPSBwYXRoLVx1MDAzZXR1bi5lbmNhcF9wcm90bztcbiBcdFx0XHRcdGluZm8tXHUwMDNlbnVtX3R1bnMmIzQzOyYjNDM7O1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRpZiAoaW5mby1cdTAwM2VudW1fZW5jYXBzIFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpXG5AQCAtMjE0LDEyICYjNDM7MjE2LDEzIEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3QgPSBOVUxMO1xuIFx0c3RydWN0IGZsb3dpIGZsID0ge307XG4gXG4tXHRzd2l0Y2ggKG5mdF9wZihwa3QpKSB7XG4mIzQzO1x0c3dpdGNoICh0dW4tXHUwMDNlZW5jYXBfcHJvdG8pIHtcbiBcdGNhc2UgTkZQUk9UT19JUFY0OlxuIFx0XHRmbC51LmlwNC5kYWRkciA9IHR1bi1cdTAwM2Vkc3RfdjQuc19hZGRyO1xuIFx0XHRmbC51LmlwNC5zYWRkciA9IHR1bi1cdTAwM2VzcmNfdjQuc19hZGRyO1xuIFx0XHRmbC51LmlwNC5mbG93aTRfaWlmID0gbmZ0X2luKHBrdCktXHUwMDNlaWZpbmRleDtcbi1cdFx0ZmwudS5pcDQuZmxvd2k0X2RzY3AgPSBpcDRoX2RzY3AoaXBfaGRyKHBrdC1cdTAwM2Vza2IpKTtcbiYjNDM7XHRcdGlmIChuZnRfcGYocGt0KSA9PSBORlBST1RPX0lQVjQpXG4mIzQzO1x0XHRcdGZsLnUuaXA0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwX2hkcihwa3QtXHUwMDNlc2tiKSk7XG4gXHRcdGZsLnUuaXA0LmZsb3dpNF9tYXJrID0gcGt0LVx1MDAzZXNrYi1cdTAwM2VtYXJrO1xuIFx0XHRmbC51LmlwNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0FOWVNSQztcbiBcdFx0YnJlYWs7XG5AQCAtMjI3LDEzICYjNDM7MjMwLDE0IEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdFx0ZmwudS5pcDYuZGFkZHIgPSB0dW4tXHUwMDNlZHN0X3Y2O1xuIFx0XHRmbC51LmlwNi5zYWRkciA9IHR1bi1cdTAwM2VzcmNfdjY7XG4gXHRcdGZsLnUuaXA2LmZsb3dpNl9paWYgPSBuZnRfaW4ocGt0KS1cdTAwM2VpZmluZGV4O1xuLVx0XHRmbC51LmlwNi5mbG93bGFiZWwgPSBpcDZfZmxvd2luZm8oaXB2Nl9oZHIocGt0LVx1MDAzZXNrYikpO1xuJiM0MztcdFx0aWYgKG5mdF9wZihwa3QpID09IE5GUFJPVE9fSVBWNilcbiYjNDM7XHRcdFx0ZmwudS5pcDYuZmxvd2xhYmVsID0gaXA2X2Zsb3dpbmZvKGlwdjZfaGRyKHBrdC1cdTAwM2Vza2IpKTtcbiBcdFx0ZmwudS5pcDYuZmxvd2k2X21hcmsgPSBwa3QtXHUwMDNlc2tiLVx1MDAzZW1hcms7XG4gXHRcdGZsLnUuaXA2LmZsb3dpNl9mbGFncyA9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdG5mX3JvdXRlKG5mdF9uZXQocGt0KSwgXHUwMDI2dHVuX2RzdCwgXHUwMDI2ZmwsIGZhbHNlLCBuZnRfcGYocGt0KSk7XG4mIzQzO1x0bmZfcm91dGUobmZ0X25ldChwa3QpLCBcdTAwMjZ0dW5fZHN0LCBcdTAwMjZmbCwgZmFsc2UsIHR1bi1cdTAwM2VlbmNhcF9wcm90byk7XG4gXHRpZiAoIXR1bl9kc3QpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuQEAgLTI1NSw3ICYjNDM7MjU5LDggQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdHVuc2lnbmVkIGNoYXIgaGFbRVRIX0FMRU5dO1xuIFx0aW50IGk7XG4gXG4tXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgXHUwMDI2c3RhY2spIFx1MDAzYyAwIHx8XG4mIzQzO1x0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocm91dGUsIGRzdCwgY3QsIGRpciwgaGEsIHBrdC1cdTAwM2VldGhlcnR5cGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgXHUwMDI2c3RhY2spIFx1MDAzYyAwIHx8XG4gXHQgICAgbmZ0X2Rldl9wYXRoX2luZm8oXHUwMDI2c3RhY2ssIFx1MDAyNmluZm8sIGhhLCBcdTAwMjZmdC1cdTAwM2VkYXRhKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG5AQCAtMjc2LDYgJiM0MzsyODEsNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uc3JjX3Y2ID0gaW5mby50dW4uZHN0X3Y2O1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uZHN0X3Y2ID0gaW5mby50dW4uc3JjX3Y2O1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4ubDNfcHJvdG8gPSBpbmZvLnR1bi5sM19wcm90bztcbiYjNDM7XHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5lbmNhcF9wcm90byA9IGluZm8udHVuLmVuY2FwX3Byb3RvO1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5udW1fdHVucyA9IGluZm8ubnVtX3R1bnM7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2NvbmZpZ1xuaW5kZXggYzNjMTIxYjZmMzAwYTkuLmEyMTJiOWVkYmNkOTdlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29uZmlnXG5AQCAtMzUsNiAmIzQzOzM1LDcgQEAgQ09ORklHX0lQX1NDVFA9bVxuIENPTkZJR19JUFY2PXlcbiBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eVxuIENPTkZJR19JUFY2X1RVTk5FTD1tXG4mIzQzO0NPTkZJR19JUFY2X1NJVD1tXG4gQ09ORklHX0lQX1ZTPW1cbiBDT05GSUdfSVBfVlNfUFJPVE9fVENQPXlcbiBDT05GSUdfSVBfVlNfUlI9bVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuaW5kZXggMDhhZDA3NTAwZThhNzEuLjQ2YmQwODAxMDhiZTM2IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbkBAIC01NzksOSAmIzQzOzU3OSw4IEBAIGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19uYXQgXCYjMzQ7JG5zMVwmIzM0OyBcJiMzNDskbnMyXCYjMzQ7IDEgXCYjMzQ7XCYjMzQ7OyB0aGVuXG4gXHRpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCBsaXN0IHJ1bGVzZXRcbiBmaVxuIFxuLSMgSVBJUCB0dW5uZWwgdGVzdDpcbi0jIEFkZCBJUElQIHR1bm5lbCBpbnRlcmZhY2VzIGFuZCBjaGVjayBmbG93dGFibGUgYWNjZWxlcmF0aW9uLlxuLXRlc3RfaXBpcCgpIHtcbiYjNDM7IyBJUCB0dW5uZWwgdGVzdHM6XG4mIzQzO3Rlc3RfaXBfdG5scygpIHtcbiBpZiAhIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgbGluayBhZGQgbmFtZSB0dW4wIHR5cGUgaXBpcCBcXFxuICAgICAgbG9jYWwgMTkyLjE2OC4xMC4xIHJlbW90ZSAxOTIuMTY4LjEwLjIgXHUwMDNlL2Rldi9udWxsO3RoZW5cbiBcdGVjaG8gXCYjMzQ7U0tJUDogY291bGQgbm90IGFkZCBpcGlwIHR1bm5lbFwmIzM0O1xuQEAgLTU5NCw3ICYjNDM7NTkzLDEzIEBAIGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgc3lzY3RsIG5ldC5pcHY0LmNvbmYudHVuMC5mb3J3YXJkaW5nPTEgXHUwMDNlIC9kZXYvbnVsbFxuIFxuIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgbGluayBhZGQgbmFtZSB0dW42IHR5cGUgaXA2dG5sIGxvY2FsIGZlZTE6Mjo6MSByZW1vdGUgZmVlMToyOjoyIGVuY2FwbGltaXQgbm9uZVxuIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgbGluayBzZXQgdHVuNiB1cFxuJiM0MztpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGFkZHIgYWRkIDE5Mi4xNjguMjEwLjEvMjQgZGV2IHR1bjZcbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGFkZHIgYWRkIGZlZTE6Mzo6MS82NCBkZXYgdHVuNiBub2RhZFxuJiM0MztpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjYuZm9yd2FyZGluZz0xIFx1MDAzZSAvZGV2L251bGxcbiYjNDM7XG4mIzQzO2lwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgbGluayBhZGQgbmFtZSBzaXQxIHR5cGUgc2l0IGxvY2FsIDE5Mi4xNjguMTAuMSByZW1vdGUgMTkyLjE2OC4xMC4yIHR0bCAyNTVcbiYjNDM7aXAgLW5ldCBcJiMzNDskbnNyMVwmIzM0OyBsaW5rIHNldCBzaXQxIHVwXG4mIzQzO2lwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgYWRkciBhZGQgZmUwMTozOjoxLzY0IGRldiBzaXQxIG5vZGFkXG4gXG4gaXAgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyBsaW5rIGFkZCBuYW1lIHR1bjAgdHlwZSBpcGlwIGxvY2FsIDE5Mi4xNjguMTAuMiByZW1vdGUgMTkyLjE2OC4xMC4xXG4gaXAgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyBsaW5rIHNldCB0dW4wIHVwXG5AQCAtNjAzLDcgJiM0Mzs2MDgsMTMgQEAgaXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMlwmIzM0OyBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW4wLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4gXG4gaXAgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyBsaW5rIGFkZCBuYW1lIHR1bjYgdHlwZSBpcDZ0bmwgbG9jYWwgZmVlMToyOjoyIHJlbW90ZSBmZWUxOjI6OjEgZW5jYXBsaW1pdCBub25lIHx8IHJldD0xXG4gaXAgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyBsaW5rIHNldCB0dW42IHVwXG4mIzQzO2lwIC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgYWRkciBhZGQgMTkyLjE2OC4yMTAuMi8yNCBkZXYgdHVuNlxuIGlwIC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgYWRkciBhZGQgZmVlMTozOjoyLzY0IGRldiB0dW42IG5vZGFkXG4mIzQzO2lwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjJcJiMzNDsgc3lzY3RsIG5ldC5pcHY0LmNvbmYudHVuNi5mb3J3YXJkaW5nPTEgXHUwMDNlIC9kZXYvbnVsbFxuJiM0MztcbiYjNDM7aXAgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyBsaW5rIGFkZCBuYW1lIHNpdDEgdHlwZSBzaXQgbG9jYWwgMTkyLjE2OC4xMC4yIHJlbW90ZSAxOTIuMTY4LjEwLjEgdHRsIDI1NVxuJiM0MztpcCAtbmV0IFwmIzM0OyRuc3IyXCYjMzQ7IGxpbmsgc2V0IHNpdDEgdXBcbiYjNDM7aXAgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyBhZGRyIGFkZCBmZTAxOjM6OjIvNjQgZGV2IHNpdDEgbm9kYWRcbiBcbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjEwMC4yXG4gaXAgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyByb3V0ZSBjaGFuZ2UgZGVmYXVsdCB2aWEgMTkyLjE2OC4xMDAuMVxuQEAgLTYxOSw2ICYjNDM7NjMwLDcgQEAgaXAgLTYgLW5ldCBcJiMzNDskbnMyXCYjMzQ7IHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBkZWFkOjI6OjFcbiBcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICYjMzk7bWV0YSBvaWYgdHVuMCBhY2NlcHQmIzM5O1xuIGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiB0dW42IGFjY2VwdCYjMzk7XG4mIzQzO2lwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiBzaXQxIGFjY2VwdCYjMzk7XG4gaXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMVwmIzM0OyBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcXFxuIFx0JiMzOTttZXRhIG9pZiBcJiMzNDt2ZXRoMFwmIzM0OyB0Y3Agc3BvcnQgMTIzNDUgY3QgbWFyayBzZXQgMSBmbG93IGFkZCBAZjEgY291bnRlciBuYW1lIHJvdXRlZF9yZXBsIGFjY2VwdCYjMzk7XG4gXG5AQCAtNjM2LDYgJiM0Mzs2NDgsMjggQEAgZWxzZVxuIFx0cmV0PTFcbiBmaVxuIFxuJiM0MztpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIxMC4yXG4mIzQzO2lwIC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMjEwLjFcbiYjNDM7XG4mIzQzO2lmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19uYXQgXCYjMzQ7JG5zMVwmIzM0OyBcJiMzNDskbnMyXCYjMzQ7IDEgXCYjMzQ7SVA0SVA2IHR1bm5lbFwmIzM0OzsgdGhlblxuJiM0MztcdGVjaG8gXCYjMzQ7RkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggSVA0SVA2IHR1bm5lbFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IGxpc3QgcnVsZXNldFxuJiM0MztcdHJldD0xXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztpcCAtNiAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IHJvdXRlIGRlbGV0ZSBkZWZhdWx0XG4mIzQzO2lwIC02IC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlMDE6Mzo6MlxuJiM0MztpcCAtNiAtbmV0IFwmIzM0OyRuc3IyXCYjMzQ7IHJvdXRlIGRlbGV0ZSBkZWZhdWx0XG4mIzQzO2lwIC02IC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlMDE6Mzo6MVxuJiM0MztcbiYjNDM7aWYgdGVzdF90Y3BfZm9yd2FyZGluZyBcJiMzNDskbnMxXCYjMzQ7IFwmIzM0OyRuczJcJiMzNDsgMSA2IFwmIzM0O1tkZWFkOjI6Ojk5XVwmIzM0OyAxMjM0NTsgdGhlblxuJiM0MztcdGVjaG8gXCYjMzQ7UEFTUzogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIFNJVCB0dW5uZWxcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGVjaG8gXCYjMzQ7RkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggU0lUIHR1bm5lbFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IGxpc3QgcnVsZXNldFxuJiM0MztcdHJldD0xXG4mIzQzO2ZpXG4mIzQzO1xuICMgQ3JlYXRlIHZsYW4gdGFnZ2VkIGRldmljZXMgZm9yIElQSVAgdHJhZmZpYy5cbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSB2ZXRoMS4xMCB0eXBlIHZsYW4gaWQgMTBcbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGxpbmsgc2V0IHZldGgxLjEwIHVwXG5AQCAtNjUzLDExICYjNDM7Njg3LDE4IEBAIGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiB0dW4wLjEwIGFcbiBcbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGxpbmsgYWRkIG5hbWUgdHVuNi4xMCB0eXBlIGlwNnRubCBsb2NhbCBmZWUxOjQ6OjEgcmVtb3RlIGZlZTE6NDo6MiBlbmNhcGxpbWl0IG5vbmVcbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGxpbmsgc2V0IHR1bjYuMTAgdXBcbiYjNDM7aXAgLW5ldCBcJiMzNDskbnNyMVwmIzM0OyBhZGRyIGFkZCAxOTIuMTY4LjIyMC4xLzI0IGRldiB0dW42LjEwXG4gaXAgLW5ldCBcJiMzNDskbnNyMVwmIzM0OyBhZGRyIGFkZCBmZWUxOjU6OjEvNjQgZGV2IHR1bjYuMTAgbm9kYWRcbiYjNDM7aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMVwmIzM0OyBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW42LzEwLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4gaXAgLTYgLW5ldCBcJiMzNDskbnNyMVwmIzM0OyByb3V0ZSBkZWxldGUgZGVmYXVsdFxuIGlwIC02IC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlZTE6NTo6MlxuIGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiB0dW42LjEwIGFjY2VwdCYjMzk7XG4gXG4mIzQzO2lwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgbGluayBhZGQgbmFtZSBzaXQxLjEwIHR5cGUgc2l0IGxvY2FsIDE5Mi4xNjguMjAuMSByZW1vdGUgMTkyLjE2OC4yMC4yIHR0bCAyNTVcbiYjNDM7aXAgLW5ldCBcJiMzNDskbnNyMVwmIzM0OyBsaW5rIHNldCBzaXQxLjEwIHVwXG4mIzQzO2lwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgYWRkciBhZGQgZmUwMTo1OjoxLzY0IGRldiBzaXQxLjEwIG5vZGFkXG4mIzQzO2lwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiBzaXQxLjEwIGFjY2VwdCYjMzk7XG4mIzQzO1xuIGlwIC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgbGluayBhZGQgbGluayB2ZXRoMCBuYW1lIHZldGgwLjEwIHR5cGUgdmxhbiBpZCAxMFxuIGlwIC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgbGluayBzZXQgdmV0aDAuMTAgdXBcbiBpcCAtbmV0IFwmIzM0OyRuc3IyXCYjMzQ7IGFkZHIgYWRkIDE5Mi4xNjguMjAuMi8yNCBkZXYgdmV0aDAuMTBcbkBAIC02NzIsNyAmIzQzOzcxMywxNCBAQCBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IyXCYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjAvMTAuZm9yd2FyZGluZz0xIFx1MDAzZSAvZGV2L251bGxcbiBcbiBpcCAtbmV0IFwmIzM0OyRuc3IyXCYjMzQ7IGxpbmsgYWRkIG5hbWUgdHVuNi4xMCB0eXBlIGlwNnRubCBsb2NhbCBmZWUxOjQ6OjIgcmVtb3RlIGZlZTE6NDo6MSBlbmNhcGxpbWl0IG5vbmUgfHwgcmV0PTFcbiBpcCAtbmV0IFwmIzM0OyRuc3IyXCYjMzQ7IGxpbmsgc2V0IHR1bjYuMTAgdXBcbiYjNDM7aXAgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyBhZGRyIGFkZCAxOTIuMTY4LjIyMC4yLzI0IGRldiB0dW42LjEwXG4gaXAgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyBhZGRyIGFkZCBmZWUxOjU6OjIvNjQgZGV2IHR1bjYuMTAgbm9kYWRcbiYjNDM7aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMlwmIzM0OyBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW42LzEwLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4mIzQzO1xuJiM0MztpcCAtbmV0IFwmIzM0OyRuc3IyXCYjMzQ7IGxpbmsgYWRkIG5hbWUgc2l0MS4xMCB0eXBlIHNpdCBsb2NhbCAxOTIuMTY4LjIwLjIgcmVtb3RlIDE5Mi4xNjguMjAuMSB0dGwgMjU1XG4mIzQzO2lwIC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgbGluayBzZXQgc2l0MS4xMCB1cFxuJiM0MztpcCAtbmV0IFwmIzM0OyRuc3IyXCYjMzQ7IGFkZHIgYWRkIGZlMDE6NTo6Mi82NCBkZXYgc2l0MS4xMCBub2RhZFxuJiM0MztcbiBpcCAtNiAtbmV0IFwmIzM0OyRuc3IyXCYjMzQ7IHJvdXRlIGRlbGV0ZSBkZWZhdWx0XG4gaXAgLTYgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmVlMTo1OjoxXG4gXG5AQCAtNjkwLDYgJiM0Mzs3MzgsMjggQEAgZWxzZVxuIFx0cmV0PTFcbiBmaVxuIFxuJiM0MztpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIyMC4yXG4mIzQzO2lwIC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMjIwLjFcbiYjNDM7XG4mIzQzO2lmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19uYXQgXCYjMzQ7JG5zMVwmIzM0OyBcJiMzNDskbnMyXCYjMzQ7IDEgXCYjMzQ7SVA0SVA2IHR1bm5lbCBvdmVyIHZsYW5cJiMzNDs7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O0ZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIElQNElQNiB0dW5uZWwgb3ZlciB2bGFuXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMVwmIzM0OyBuZnQgbGlzdCBydWxlc2V0XG4mIzQzO1x0cmV0PTFcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO2lwIC02IC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgcm91dGUgZGVsZXRlIGRlZmF1bHRcbiYjNDM7aXAgLTYgLW5ldCBcJiMzNDskbnNyMVwmIzM0OyByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmUwMTo1OjoyXG4mIzQzO2lwIC02IC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgcm91dGUgZGVsZXRlIGRlZmF1bHRcbiYjNDM7aXAgLTYgLW5ldCBcJiMzNDskbnNyMlwmIzM0OyByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmUwMTo1OjoxXG4mIzQzO1xuJiM0MztpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nIFwmIzM0OyRuczFcJiMzNDsgXCYjMzQ7JG5zMlwmIzM0OyAxIDYgXCYjMzQ7W2RlYWQ6Mjo6OTldXCYjMzQ7IDEyMzQ1OyB0aGVuXG4mIzQzO1x0ZWNobyBcJiMzNDtQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgU0lUIHR1bm5lbCBvdmVyIHZsYW5cJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGVjaG8gXCYjMzQ7RkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggU0lUIHR1bm5lbCBvdmVyIHZsYW5cJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCBsaXN0IHJ1bGVzZXRcbiYjNDM7XHRyZXQ9MVxuJiM0MztmaVxuJiM0MztcbiAjIFJlc3RvcmUgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25cbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjEwLjJcbiBpcCAtbmV0IFwmIzM0OyRuc3IyXCYjMzQ7IHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjEwLjFcbkBAIC03ODIsNyAmIzQzOzg1Miw3IEBAIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgYWRkciBhZGQgZGVhZDoxOjoxLzY0IGRldiB2ZXRoMCBub2RhZFxuIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgbGluayBzZXQgdXAgZGV2IHZldGgwXG4gfVxuIFxuLXRlc3RfaXBpcFxuJiM0Mzt0ZXN0X2lwX3RubHNcbiBcbiB0ZXN0X2JyaWRnZVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkVUX0lQSVAmIzM0OywKICAgICYjMzQ7SVBWNl9TSVQmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcGlwNl90dW5uZWxfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7bmZfZmxvd190dW5uZWxfaXBfcHVzaCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3R1bm5lbF9pcDZfcHVzaCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3R1bm5lbF9wdXNoJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9sb29rdXAmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2smIzM0OywKICAgICYjMzQ7bmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7LAogICAgJiMzNDtuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgSVAtaW4tSVAsIFNJVCAoSVB2Ni1pbi1JUHY0KSwgYW5kIElQdjYtaW4tSVB2NiB0dW5uZWxzIGluIHRoZSBuZXRmaWx0ZXIgZmxvd3RhYmxlIG9mZmxvYWQuIEl0IG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBsb2dpYyBhbmQgdHVubmVsIGRyaXZlcnMgdG8gc3VwcG9ydCBmaWxsaW5nIHRoZSBmb3J3YXJkIHBhdGggYW5kIHB1c2hpbmcgdHVubmVsIGhlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRlNjkyODIzZDBjMGRjMmVmZDhhZjA5NGQ3MGU4OWNhMDgwMWZlNzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAxMCAwMToyODozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCmluZGV4IGU3Yzc4MjkzMDAyYWJiLi4wNmQxMjhjNjdjOGM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCkBAIC0yNzYsNyAmIzQzOzI3Niw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X21hbmdsZV9pcHY0KGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgICAgY29uc3QgdTggKmFkZHIsIF9fYmUxNiBldGhlcl90eXBlLAogCQkJCSAgICBzdHJ1Y3QgYWlyb2hhX3dkbWFfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrOwpAQCAtMjg3LDcgJiM0MzsyODgsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgJmFtcDtzdGFjayk7CiYjNDM7CWVyciA9IGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGFkZHIsIGV0aGVyX3R5cGUsICZhbXA7c3RhY2spOwogCXJjdV9yZWFkX3VubG9jaygpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0zMzEsNyAmIzQzOzMzMiw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCQkJCQlzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSAqaHdlLAogCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdHlwZSwKIAkJCQkJc3RydWN0IGFpcm9oYV9mbG93X2RhdGEgKmRhdGEsCi0JCQkJCWludCBsNHByb3RvKQomIzQzOwkJCQkJX19iZTE2IGV0aGVyX3R5cGUsIGludCBsNHByb3RvKQogewogCXUzMiBxZGF0YSA9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9TSEFQRVJfSUQsIDB4N2YpLCBwb3J0c19wYWQsIHZhbDsKIAlpbnQgd2xhbl9ldHlwZSA9IC1FSU5WQUwsIGRzYV9wb3J0ID0gYWlyb2hhX2dldF9kc2FfcG9ydCgmYW1wO25ldGRldik7CkBAIC0zNTQsNyAmIzQzOzM1NSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCQlzdHJ1Y3QgYWlyb2hhX3dkbWFfaW5mbyBpbmZvID0ge307CiAKIAkJaWYgKCFhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8obmV0ZGV2LCBkYXRhLSZndDtldGguaF9kZXN0LAotCQkJCQkgICAgICAmYW1wO2luZm8pKSB7CiYjNDM7CQkJCQkgICAgICBldGhlcl90eXBlLCAmYW1wO2luZm8pKSB7CiAJCQl2YWwgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0lCMl9OQlEsIGluZm8uaWR4KSB8CiAJCQkgICAgICAgRklFTERfUFJFUChBSVJPSEFfRk9FX0lCMl9QU0VfUE9SVCwKIAkJCQkJICBGRV9QU0VfUE9SVF9DRE00KTsKQEAgLTEwODEsNiAmIzQzOzEwODIsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwKIAlzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdDsKIAlzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSBod2U7CiAJaW50IGVyciwgaSwgb2ZmbG9hZF90eXBlOwomIzQzOwlfX2JlMTYgZXRoZXJfdHlwZSA9IDA7CiAJdTE2IGFkZHJfdHlwZSA9IDA7CiAJdTggbDRwcm90byA9IDA7CiAKQEAgLTExMDcsNiAmIzQzOzExMDksNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwKIAkJc3RydWN0IGZsb3dfbWF0Y2hfYmFzaWMgbWF0Y2g7CiAKIAkJZmxvd19ydWxlX21hdGNoX2Jhc2ljKHJ1bGUsICZhbXA7bWF0Y2gpOwomIzQzOwkJZXRoZXJfdHlwZSA9IG1hdGNoLmtleS0mZ3Q7bl9wcm90bzsKIAkJbDRwcm90byA9IG1hdGNoLmtleS0mZ3Q7aXBfcHJvdG87CiAJfSBlbHNlIHsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMTE3Nyw3ICYjNDM7MTE4MCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCAmYW1wO2h3ZSwgb2Rldiwgb2ZmbG9hZF90eXBlLAotCQkJCQkgICAmYW1wO2RhdGEsIGw0cHJvdG8pOwomIzQzOwkJCQkJICAgJmFtcDtkYXRhLCBldGhlcl90eXBlLCBsNHByb3RvKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCmluZGV4IGNjOGM0ZWY4MDM4ZjMwLi4yNjAxYzE3YjI5YzhiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMKQEAgLTg5LDcgJiM0Mzs4OSw4IEBAIG10a19mbG93X29mZmxvYWRfbWFuZ2xlX2V0aChjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdCwgdm9pZCAqZXRoKQogfQogCiBzdGF0aWMgaW50Ci1tdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbXRrX3dkbWFfaW5mbyAqaW5mbykKJiM0MzttdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLAomIzQzOwkJICAgICAgIF9fYmUxNiBldGhlcl90eXBlLCBzdHJ1Y3QgbXRrX3dkbWFfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrOwogCXN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7CkBAIC0xMDIsNyAmIzQzOzEwMyw3IEBAIG10a19mbG93X2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsIHN0cnVjdCBtdGtfd2RtYV9pCiAJCXJldHVybiAtMTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQllcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCAmYW1wO3N0YWNrKTsKJiM0MzsJZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgZXRoZXJfdHlwZSwgJmFtcDtzdGFjayk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTE5MCwxMiAmIzQzOzE5MSwxMiBAQCBtdGtfZmxvd19nZXRfZHNhX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKipkZXYpCiBzdGF0aWMgaW50CiBtdGtfZmxvd19zZXRfb3V0cHV0X2RldmljZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgbXRrX2ZvZV9lbnRyeSAqZm9lLAogCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRlc3RfbWFjLAotCQkJICAgaW50ICp3ZWRfaW5kZXgpCiYjNDM7CQkJICAgX19iZTE2IGV0aGVyX3R5cGUsIGludCAqd2VkX2luZGV4KQogewogCXN0cnVjdCBtdGtfd2RtYV9pbmZvIGluZm8gPSB7fTsKIAlpbnQgcHNlX3BvcnQsIGRzYV9wb3J0LCBxdWV1ZTsKIAotCWlmIChtdGtfZmxvd19nZXRfd2RtYV9pbmZvKGRldiwgZGVzdF9tYWMsICZhbXA7aW5mbykgPT0gMCkgewomIzQzOwlpZiAobXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhkZXYsIGRlc3RfbWFjLCBldGhlcl90eXBlLCAmYW1wO2luZm8pID09IDApIHsKIAkJbXRrX2ZvZV9lbnRyeV9zZXRfd2RtYShldGgsIGZvZSwgaW5mby53ZG1hX2lkeCwgaW5mby5xdWV1ZSwKIAkJCQkgICAgICAgaW5mby5ic3MsIGluZm8ud2NpZCwgaW5mby5hbXNkdSk7CiAJCWlmIChtdGtfaXNfbmV0c3lzX3YyX29yX2dyZWF0ZXIoZXRoKSkgewpAQCAtMjczLDYgJiM0MzsyNzQsNyBAQCBtdGtfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmYsCiAJc3RydWN0IG10a19mbG93X2RhdGEgZGF0YSA9IHt9OwogCXN0cnVjdCBtdGtfZm9lX2VudHJ5IGZvZTsKIAlzdHJ1Y3QgbXRrX2Zsb3dfZW50cnkgKmVudHJ5OwomIzQzOwlfX2JlMTYgZXRoZXJfdHlwZSA9IDA7CiAJaW50IG9mZmxvYWRfdHlwZSA9IDA7CiAJaW50IHdlZF9pbmRleCA9IC0xOwogCXUxNiBhZGRyX3R5cGUgPSAwOwpAQCAtMzE5LDYgJiM0MzszMjEsNyBAQCBtdGtfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmYsCiAJCXN0cnVjdCBmbG93X21hdGNoX2Jhc2ljIG1hdGNoOwogCiAJCWZsb3dfcnVsZV9tYXRjaF9iYXNpYyhydWxlLCAmYW1wO21hdGNoKTsKJiM0MzsJCWV0aGVyX3R5cGUgPSBtYXRjaC5rZXktJmd0O25fcHJvdG87CiAJCWw0cHJvdG8gPSBtYXRjaC5rZXktJmd0O2lwX3Byb3RvOwogCX0gZWxzZSB7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTQ4MSw3ICYjNDM7NDg0LDcgQEAgbXRrX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBtdGtfZXRoICpldGgsIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpmLAogCQltdGtfZm9lX2VudHJ5X3NldF9wcHBvZShldGgsICZhbXA7Zm9lLCBkYXRhLnBwcG9lLnNpZCk7CiAKIAllcnIgPSBtdGtfZmxvd19zZXRfb3V0cHV0X2RldmljZShldGgsICZhbXA7Zm9lLCBvZGV2LCBkYXRhLmV0aC5oX2Rlc3QsCi0JCQkJCSAmYW1wO3dlZF9pbmRleCk7CiYjNDM7CQkJCQkgZXRoZXJfdHlwZSwgJmFtcDt3ZWRfaW5kZXgpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDk5ODFkNjM3ZjhiNTQ2Li40NWQ5OWUxMWIwNmUyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC05MDIsNiAmIzQzOzkwMiw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggewogCQkJfTsKIAogCQkJdTgJbDNfcHJvdG87CiYjNDM7CQkJdTgJZW5jYXBfcHJvdG87CiAJCX0gdHVuOwogCQlzdHJ1Y3QgewogCQkJZW51bSB7CkBAIC05MzgsNiAmIzQzOzkzOSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgewogc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggewogCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdTgJCQlkYWRkcltFVEhfQUxFTl07CiYjNDM7CV9fYmUxNgkJCWV0aGVyX3R5cGU7CiAKIAlpbnQJCQludW1fdmxhbnM7CiAJc3RydWN0IHsKQEAgLTM0MjAsNyAmIzQzOzM0MjIsOCBAQCB2b2lkIGRldl9yZW1vdmVfb2ZmbG9hZChzdHJ1Y3QgcGFja2V0X29mZmxvYWQgKnBvKTsKIAogaW50IGRldl9nZXRfaWZsaW5rKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLAomIzQzO2ludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgIGNvbnN0IHU4ICpkYWRkciwgX19iZTE2IGV0aGVyX3R5cGUsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTsKIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTsKIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWVfcmN1KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAppbmRleCA3YjIzYjI0NWE1YTg2YS4uNGQ0MDY4MDFlYzkwMTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaApAQCAtMTE4LDYgJiM0MzsxMTgsNyBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB7CiAJfTsKIAogCXU4CWwzX3Byb3RvOwomIzQzOwl1OAllbmNhcF9wcm90bzsKIH07CiAKIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA0YjNkNWNmZGY2ZTAwZi4uOWY1YTJkYTllOWY3NzQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC03NTAsMTIgJiM0Mzs3NTAsMTQgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKmRldl9md2RfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaykKIAlyZXR1cm4gJmFtcDtzdGFjay0mZ3Q7cGF0aFtrXTsKIH0KIAotaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsCiYjNDM7aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCSAgY29uc3QgdTggKmRhZGRyLCBfX2JlMTYgZXRoZXJfdHlwZSwKIAkJCSAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spCiB7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmxhc3RfZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHsKLQkJLmRldgk9IGRldiwKJiM0MzsJCS5kZXYJCT0gZGV2LAomIzQzOwkJLmV0aGVyX3R5cGUJPSBldGhlcl90eXBlLAogCX07CiAJc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDsKIAlpbnQgcmV0ID0gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCBiNjQzMTk0ZjU3ZDI5Zi4uOWY3YjJiZGFiZWYwNmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcGlwLmMKQEAgLTM2OSw2ICYjNDM7MzY5LDcgQEAgc3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiAJcGF0aC0mZ3Q7dHVuLnNyY192NC5zX2FkZHIgPSB0aXBoLSZndDtzYWRkcjsKIAlwYXRoLSZndDt0dW4uZHN0X3Y0LnNfYWRkciA9IHRpcGgtJmd0O2RhZGRyOwogCXBhdGgtJmd0O3R1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDsKJiM0MzsJcGF0aC0mZ3Q7dHVuLmVuY2FwX3Byb3RvID0gQUZfSU5FVDsKIAlwYXRoLSZndDtkZXYgPSBjdHgtJmd0O2RldjsKIAogCWN0eC0mZ3Q7ZGV2ID0gcnQtJmd0O2RzdC5kZXY7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggYmY4ZTQwYWY2MGIwODMuLmExMjFmNzE1YWZkMmNkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCkBAIC0xODYzLDcgJiM0MzsxODYzLDExIEBAIHN0YXRpYyBpbnQgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAogCQlwYXRoLSZndDt0eXBlID0gREVWX1BBVEhfVFVOOwogCQlwYXRoLSZndDt0dW4uc3JjX3Y2ID0gdC0mZ3Q7cGFybXMubGFkZHI7CiAJCXBhdGgtJmd0O3R1bi5kc3RfdjYgPSB0LSZndDtwYXJtcy5yYWRkcjsKLQkJcGF0aC0mZ3Q7dHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2OwomIzQzOwkJcGF0aC0mZ3Q7dHVuLmVuY2FwX3Byb3RvID0gQUZfSU5FVDY7CiYjNDM7CQlpZiAoY3R4LSZndDtldGhlcl90eXBlID09IGNwdV90b19iZTE2KEVUSF9QX0lQKSkKJiM0MzsJCQlwYXRoLSZndDt0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQSVA7CiYjNDM7CQllbHNlCiYjNDM7CQkJcGF0aC0mZ3Q7dHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2OwogCQlwYXRoLSZndDtkZXYgPSBjdHgtJmd0O2RldjsKIAkJY3R4LSZndDtkZXYgPSBkc3QtJmd0O2RldjsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jCmluZGV4IGEzOGIyNGZiODM4NDI0Li5lYWQzMjdjMzJkZjI0NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2l0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvc2l0LmMKQEAgLTEzNjUsNiAmIzQzOzEzNjUsNTYgQEAgaXBpcDZfdHVubmVsX2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCwKIAl9CiB9CiAKJiM0MztzdGF0aWMgaW50IGlwaXA2X3R1bm5lbF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAomIzQzOwkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoY3R4LSZndDtkZXYpOwomIzQzOwljb25zdCBzdHJ1Y3QgaXBoZHIgKnRpcGggPSAmYW1wO3R1bm5lbC0mZ3Q7cGFybXMuaXBoOwomIzQzOwlzdHJ1Y3QgcnRhYmxlICpydDsKJiM0MzsKJiM0MzsJLyogTkJNQSB0dW5uZWxzIChJU0FUQVAsIDZ0bzQsIDZyZCkgcmVzb2x2ZSB0aGUgb3V0ZXIgZGVzdGluYXRpb24KJiM0MzsJICogcGVyLXBhY2tldCBmcm9tIHRoZSBpbm5lciBJUHY2IGFkZHJlc3M7IG5vdCBvZmZsb2FkYWJsZS4KJiM0MzsJICovCiYjNDM7CWlmICghdGlwaC0mZ3Q7ZGFkZHIpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qIEZPVS9HVUUgZW5jYXBzdWxhdGlvbiBpcyBoYW5kbGVkIGluIHRoZSBzbG93IHBhdGggYnkKJiM0MzsJICogaXBfdHVubmVsX2VuY2FwKCk7IHRoZSBmYXN0IHBhdGggb25seSBwdXNoZXMgYSBwbGFpbgomIzQzOwkgKiBJUHY0IGhlYWRlciBhbmQgd291bGQgc2tpcCB0aGUgVURQIGVuY2Fwc3VsYXRpb24uCiYjNDM7CSAqLwomIzQzOwlpZiAodHVubmVsLSZndDtlbmNhcC50eXBlICE9IFRVTk5FTF9FTkNBUF9OT05FKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlydCA9IGlwX3JvdXRlX291dHB1dChkZXZfbmV0KGN0eC0mZ3Q7ZGV2KSwgdGlwaC0mZ3Q7ZGFkZHIsIHRpcGgtJmd0O3NhZGRyLAomIzQzOwkJCSAgICAgaW5ldF9kc2ZpZWxkX3RvX2RzY3AodGlwaC0mZ3Q7dG9zKSwKJiM0MzsJCQkgICAgIHR1bm5lbC0mZ3Q7cGFybXMubGluaywgUlRfU0NPUEVfVU5JVkVSU0UpOwomIzQzOwlpZiAoSVNfRVJSKHJ0KSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKHJ0KTsKJiM0MzsKJiM0MzsJcGF0aC0mZ3Q7dHlwZSA9IERFVl9QQVRIX1RVTjsKJiM0MzsJcGF0aC0mZ3Q7dHVuLnNyY192NC5zX2FkZHIgPSB0aXBoLSZndDtzYWRkcjsKJiM0MzsJcGF0aC0mZ3Q7dHVuLmRzdF92NC5zX2FkZHIgPSB0aXBoLSZndDtkYWRkcjsKJiM0MzsJcGF0aC0mZ3Q7dHVuLmVuY2FwX3Byb3RvID0gQUZfSU5FVDsKJiM0MzsJcGF0aC0mZ3Q7ZGV2ID0gY3R4LSZndDtkZXY7CiYjNDM7CiYjNDM7CXN3aXRjaCAoY3R4LSZndDtldGhlcl90eXBlKSB7CiYjNDM7CWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgomIzQzOwkJcGF0aC0mZ3Q7dHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6CiYjNDM7CQlwYXRoLSZndDt0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWlwX3J0X3B1dChydCk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY3R4LSZndDtkZXYgPSBydC0mZ3Q7ZHN0LmRldjsKJiM0MzsJaXBfcnRfcHV0KHJ0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludAogaXBpcDZfdHVubmVsX3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLAogCQkJICAgIHZvaWQgX191c2VyICpkYXRhLCBpbnQgY21kKQpAQCAtMTQwMSw2ICYjNDM7MTQ1MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBpcDZfbmV0ZGV2X29wcyA9IHsKIAkubmRvX3Npb2NkZXZwcml2YXRlID0gaXBpcDZfdHVubmVsX3Npb2NkZXZwcml2YXRlLAogCS5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLAogCS5uZG9fdHVubmVsX2N0bCA9IGlwaXA2X3R1bm5lbF9jdGwsCiYjNDM7CS5uZG9fZmlsbF9mb3J3YXJkX3BhdGggPSBpcGlwNl90dW5uZWxfZmlsbF9mb3J3YXJkX3BhdGgsCiB9OwogCiBzdGF0aWMgdm9pZCBpcGlwNl9kZXZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKaW5kZXggOTljNWI5ZDY3MWEwY2EuLjE4Zjg5ZTZmYjQzNTRkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKQEAgLTc2LDkgJiM0Mzs3NiwxNCBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93X29mZmxvYWRfYWxsb2Moc3RydWN0IG5mX2Nvbm4gKmN0KQogfQogRVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FsbG9jKTsKIAotc3RhdGljIHUzMiBmbG93X29mZmxvYWRfZHN0X2Nvb2tpZShzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpmbG93X3R1cGxlKQomIzQzO3N0YXRpYyB1MzIgZmxvd19vZmZsb2FkX2RzdF9jb29raWUoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqZmxvd190dXBsZSwKJiM0MzsJCQkJICAgdTggdHVuX2VuY2FwX3Byb3RvKQogewotCWlmIChmbG93X3R1cGxlLSZndDtsM3Byb3RvID09IE5GUFJPVE9fSVBWNikKJiM0MzsJYm9vbCBkc3RfdjY7CiYjNDM7CiYjNDM7CWRzdF92NiA9IHR1bl9lbmNhcF9wcm90byA/IHR1bl9lbmNhcF9wcm90byA9PSBORlBST1RPX0lQVjYKJiM0MzsJCQkJIDogZmxvd190dXBsZS0mZ3Q7bDNwcm90byA9PSBORlBST1RPX0lQVjY7CiYjNDM7CWlmIChkc3RfdjYpCiAJCXJldHVybiBydDZfZ2V0X2Nvb2tpZShkc3RfcnQ2X2luZm8oZmxvd190dXBsZS0mZ3Q7ZHN0X2NhY2hlKSk7CiAKIAlyZXR1cm4gMDsKQEAgLTk5LDEwICYjNDM7MTA0LDEyIEBAIHN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2ZpbGxfcm91dGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKIAkJCQkgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKQogewogCXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZsb3dfdHVwbGUgPSAmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFtkaXJdLnR1cGxlOwomIzQzOwl1OCBsM3Byb3RvLCBlbmNhcF9wcm90byA9IHJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi50dW4uZW5jYXBfcHJvdG87CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gbmZ0X3JvdXRlX2RzdF9mZXRjaChyb3V0ZSwgZGlyKTsKIAlpbnQgaSwgaiA9IDA7CiAKLQlzd2l0Y2ggKGZsb3dfdHVwbGUtJmd0O2wzcHJvdG8pIHsKJiM0MzsJbDNwcm90byA9IGVuY2FwX3Byb3RvID8gZW5jYXBfcHJvdG8gOiBmbG93X3R1cGxlLSZndDtsM3Byb3RvOwomIzQzOwlzd2l0Y2ggKGwzcHJvdG8pIHsKIAljYXNlIE5GUFJPVE9fSVBWNDoKIAkJZmxvd190dXBsZS0mZ3Q7bXR1ID0gaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKGRzdCwgdHJ1ZSk7CiAJCWJyZWFrOwpAQCAtMTM4LDcgJiM0MzsxNDUsOCBAQCBzdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csCiAJY2FzZSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSDoKIAkJZmxvd190dXBsZS0mZ3Q7aWZpZHggPSByb3V0ZS0mZ3Q7dHVwbGVbZGlyXS5vdXQuaWZpbmRleDsKIAkJZmxvd190dXBsZS0mZ3Q7ZHN0X2NhY2hlID0gZHN0OwotCQlmbG93X3R1cGxlLSZndDtkc3RfY29va2llID0gZmxvd19vZmZsb2FkX2RzdF9jb29raWUoZmxvd190dXBsZSk7CiYjNDM7CQlmbG93X3R1cGxlLSZndDtkc3RfY29va2llID0gZmxvd19vZmZsb2FkX2RzdF9jb29raWUoZmxvd190dXBsZSwKJiM0MzsJCQkJCQkJCSBlbmNhcF9wcm90byk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVdBUk5fT05fT05DRSgxKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKaW5kZXggMjllOTNhYzFlMmU0MDAuLjQ0OTgxOGRjZWYzYzdlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYwpAQCAtMTkxLDI1ICYjNDM7MTkxLDI3IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdHVwbGVfZW5jYXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAkJYnJlYWs7CiAJfQogCi0Jc3dpdGNoIChpbm5lcl9wcm90bykgewotCWNhc2UgaHRvbnMoRVRIX1BfSVApOgotCQlpcGggPSAoc3RydWN0IGlwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IG9mZnNldCk7Ci0JCWlmIChjdHgtJmd0O3R1bi5wcm90byA9PSBJUFBST1RPX0lQSVApIHsKJiM0MzsJaWYgKGN0eC0mZ3Q7dHVuLnByb3RvID09IElQUFJPVE9fSVBJUCB8fCBjdHgtJmd0O3R1bi5wcm90byA9PSBJUFBST1RPX0lQVjYpIHsKJiM0MzsJCXN3aXRjaCAoaW5uZXJfcHJvdG8pIHsKJiM0MzsJCWNhc2UgaHRvbnMoRVRIX1BfSVApOgomIzQzOwkJCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsKJiM0MzsJCQkJCSAgICAgICBvZmZzZXQpOwogCQkJdHVwbGUtJmd0O3R1bi5kc3RfdjQuc19hZGRyID0gaXBoLSZndDtkYWRkcjsKIAkJCXR1cGxlLSZndDt0dW4uc3JjX3Y0LnNfYWRkciA9IGlwaC0mZ3Q7c2FkZHI7Ci0JCQl0dXBsZS0mZ3Q7dHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6Ci0JCWlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgb2Zmc2V0KTsKLQkJaWYgKGN0eC0mZ3Q7dHVuLnByb3RvID09IElQUFJPVE9fSVBWNikgewomIzQzOwkJCXR1cGxlLSZndDt0dW4ubDNfcHJvdG8gPSBjdHgtJmd0O3R1bi5wcm90bzsKJiM0MzsJCQl0dXBsZS0mZ3Q7dHVuLmVuY2FwX3Byb3RvID0gQUZfSU5FVDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6CiYjNDM7CQkJaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOwomIzQzOwkJCQkJCSAgb2Zmc2V0KTsKIAkJCXR1cGxlLSZndDt0dW4uZHN0X3Y2ID0gaXA2aC0mZ3Q7ZGFkZHI7CiAJCQl0dXBsZS0mZ3Q7dHVuLnNyY192NiA9IGlwNmgtJmd0O3NhZGRyOwotCQkJdHVwbGUtJmd0O3R1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjsKJiM0MzsJCQl0dXBsZS0mZ3Q7dHVuLmwzX3Byb3RvID0gY3R4LSZndDt0dW4ucHJvdG87CiYjNDM7CQkJdHVwbGUtJmd0O3R1bi5lbmNhcF9wcm90byA9IEFGX0lORVQ2OwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlicmVhazsKIAkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKIAl9CiB9CiAKQEAgLTMzNiw3ICYjNDM7MzM4LDcgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJaWYgKGlwaC0mZ3Q7dHRsICZsdDs9IDEpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fSVBJUCkgewomIzQzOwlpZiAoaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX0lQSVAgfHwgaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX0lQVjYpIHsKIAkJY3R4LSZndDt0dW4ucHJvdG8gPSBpcGgtJmd0O3Byb3RvY29sOwogCQljdHgtJmd0O3R1bi5oZHJfc2l6ZSA9IHNpemU7CiAJCWN0eC0mZ3Q7b2Zmc2V0ICYjNDM7PSBjdHgtJmd0O3R1bi5oZHJfc2l6ZTsKQEAgLTM2MSw3ICYjNDM7MzYzLDcgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDZfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJaWYgKGlwdjZfZXh0X2hkcihpcDZoLSZndDtuZXh0aGRyKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKGlwNmgtJmd0O25leHRoZHIgPT0gSVBQUk9UT19JUFY2KSB7CiYjNDM7CWlmIChpcDZoLSZndDtuZXh0aGRyID09IElQUFJPVE9fSVBJUCB8fCBpcDZoLSZndDtuZXh0aGRyID09IElQUFJPVE9fSVBWNikgewogCQljdHgtJmd0O3R1bi5wcm90byA9IGlwNmgtJmd0O25leHRoZHI7CiAJCWN0eC0mZ3Q7dHVuLmhkcl9zaXplID0gc2l6ZW9mKCppcDZoKTsKIAkJY3R4LSZndDtvZmZzZXQgJiM0Mzs9IGN0eC0mZ3Q7dHVuLmhkcl9zaXplOwpAQCAtMzgyLDYgJiM0MzszODQsMTAgQEAgc3RhdGljIHZvaWQgbmZfZmxvd19pcF90dW5uZWxfcG9wKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAKIAlza2JfcHVsbChza2IsIGN0eC0mZ3Q7dHVuLmhkcl9zaXplKTsKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKJiM0MzsJaWYgKGN0eC0mZ3Q7dHVuLnByb3RvID09IElQUFJPVE9fSVBJUCkKJiM0MzsJCXNrYi0mZ3Q7cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7CiYjNDM7CWVsc2UKJiM0MzsJCXNrYi0mZ3Q7cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTsKIH0KIAogc3RhdGljIGJvb2wgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKQEAgLTQ1OCwyMSAmIzQzOzQ2NCw2IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfZW5jYXBfcG9wKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJCW5mX2Zsb3dfaXBfdHVubmVsX3BvcChjdHgsIHNrYik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICoKLW5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKLQkJICAgICAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHt9OwotCi0JaWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChjdHgsIHNrYiwgaHRvbnMoRVRIX1BfSVApKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAobmZfZmxvd190dXBsZV9pcChjdHgsIHNrYiwgJmFtcDt0dXBsZSkgJmx0OyAwKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBmbG93X29mZmxvYWRfbG9va3VwKGZsb3dfdGFibGUsICZhbXA7dHVwbGUpOwotfQotCiBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJCQkJICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwKIAkJCQkgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsCkBAIC00ODcsOCAmIzQzOzQ3OCwxNiBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTsKIAogCW10dSA9IGZsb3ctJmd0O3R1cGxlaGFzaFtkaXJdLnR1cGxlLm10dSAmIzQzOyBjdHgtJmd0O29mZnNldDsKLQlpZiAoZmxvdy0mZ3Q7dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pCiYjNDM7CXN3aXRjaCAoZmxvdy0mZ3Q7dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bi5lbmNhcF9wcm90bykgewomIzQzOwljYXNlIEFGX0lORVQ6CiAJCW10dSAtPSBzaXplb2YoKmlwaCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBRl9JTkVUNjoKJiM0MzsJCW10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlicmVhazsKJiM0MzsJfQogCiAJaWYgKHVubGlrZWx5KG5mX2Zsb3dfZXhjZWVkc19tdHUoc2tiLCBtdHUpKSkKIAkJcmV0dXJuIDA7CkBAIC01ODgsMjMgJiM0Mzs1ODcsMzcgQEAgc3RhdGljIGludCBuZl9mbG93X3BwcG9lX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGlkLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwaXBfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLAotCQkJCSAgICBfX2JlMzIgKmlwX2RhZGRyKQomIzQzO3N0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsCiYjNDM7CQkJCSAgX19iZTMyICppcF9kYWRkcikKIHsKLQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IGRzdF9ydGFibGUodHVwbGUtJmd0O2RzdF9jYWNoZSk7Ci0JdTggdG9zID0gaXBoLSZndDt0b3MsIHR0bCA9IGlwaC0mZ3Q7dHRsOwotCV9fYmUxNiBmcmFnX29mZiA9IGlwaC0mZ3Q7ZnJhZ19vZmY7Ci0JdTMyIGhlYWRyb29tID0gc2l6ZW9mKCppcGgpOwomIzQzOwlfX2JlMTYgZnJhZ19vZmYgPSAwOwomIzQzOwlzdHJ1Y3QgaXBoZHIgKmlwaDsKJiM0MzsJdTggdG9zID0gMCwgdHRsOwomIzQzOwl1MzIgaGVhZHJvb207CiAJaW50IGVycjsKIAomIzQzOwlpZiAodHVwbGUtJmd0O3R1bi5sM19wcm90byA9PSBJUFBST1RPX0lQVjYpIHsKJiM0MzsJCXN0cnVjdCBpcHY2aGRyICppcDZoOwomIzQzOwomIzQzOwkJaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpOwomIzQzOwkJdG9zID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKTsKJiM0MzsJCXR0bCA9IGlwNmgtJmd0O2hvcF9saW1pdDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKJiM0MzsJCWZyYWdfb2ZmID0gaXBoLSZndDtmcmFnX29mZjsKJiM0MzsJCXRvcyA9IGlwaC0mZ3Q7dG9zOwomIzQzOwkJdHRsID0gaXBoLSZndDt0dGw7CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBpcHR1bm5lbF9oYW5kbGVfb2ZmbG9hZHMoc2tiLCBTS0JfR1NPX0lQWElQNCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXNrYl9zZXRfaW5uZXJfaXBwcm90byhza2IsIElQUFJPVE9fSVBJUCk7Ci0JaGVhZHJvb20gJiM0Mzs9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LSZndDtkc3QuZGV2KSAmIzQzOyBydC0mZ3Q7ZHN0LmhlYWRlcl9sZW47CiYjNDM7CXNrYl9zZXRfaW5uZXJfaXBwcm90byhza2IsIHR1cGxlLSZndDt0dW4ubDNfcHJvdG8pOwomIzQzOwloZWFkcm9vbSA9IHNpemVvZigqaXBoKSAmIzQzOyBMTF9SRVNFUlZFRF9TUEFDRShydC0mZ3Q7ZHN0LmRldikgJiM0MzsKJiM0MzsJCSAgIHJ0LSZndDtkc3QuaGVhZGVyX2xlbjsKIAllcnIgPSBza2JfY293X2hlYWQoc2tiLCBoZWFkcm9vbSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTYxNSw2ICYjNDM7NjI4LDcgQEAgc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcGlwX3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCS8qIFB1c2ggZG93biBhbmQgaW5zdGFsbCB0aGUgSVAgaGVhZGVyLiAqLwogCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCppcGgpKTsKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKJiM0MzsJc2tiLSZndDtwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKIAogCWlwaCA9IGlwX2hkcihza2IpOwogCWlwaC0mZ3Q7dmVyc2lvbgk9IDQ7CkBAIC02MzQsNTYgJiM0Mzs2NDgsNTcgQEAgc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcGlwX3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX3Y0X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsCi0JCQkJICBfX2JlMzIgKmlwX2RhZGRyKQotewotCWlmICh0dXBsZS0mZ3Q7dHVuX251bSkKLQkJcmV0dXJuIG5mX2Zsb3dfdHVubmVsX2lwaXBfcHVzaChuZXQsIHNrYiwgdHVwbGUsIGlwX2RhZGRyKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwNmlwNl9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSwKLQkJCQkgICAgICBzdHJ1Y3QgaW42X2FkZHIgKippcDZfZGFkZHIpCiYjNDM7c3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcDZfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLAomIzQzOwkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKippcDZfZGFkZHIpCiB7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IGRzdF9ydGFibGUodHVwbGUtJmd0O2RzdF9jYWNoZSk7Ci0JX191OCBkc2ZpZWxkID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKTsKJiM0MzsJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gdHVwbGUtJmd0O2RzdF9jYWNoZTsKIAlzdHJ1Y3QgZmxvd2k2IGZsNiA9IHsKIAkJLmRhZGRyID0gdHVwbGUtJmd0O3R1bi5zcmNfdjYsCiAJCS5zYWRkciA9IHR1cGxlLSZndDt0dW4uZHN0X3Y2LAogCQkuZmxvd2k2X3Byb3RvID0gSVBQUk9UT19JUFY2LAogCX07Ci0JdTggaG9wX2xpbWl0ID0gaXA2aC0mZ3Q7aG9wX2xpbWl0OwomIzQzOwl1OCBob3BfbGltaXQsIGRzZmllbGQ7CiYjNDM7CXN0cnVjdCBpcHY2aGRyICppcDZoOwogCWludCBlcnIsIG10dTsKIAl1MzIgaGVhZHJvb207CiAKJiM0MzsJaWYgKHR1cGxlLSZndDt0dW4ubDNfcHJvdG8gPT0gSVBQUk9UT19JUElQKSB7CiYjNDM7CQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKJiM0MzsKJiM0MzsJCWRzZmllbGQgPSBpcHY0X2dldF9kc2ZpZWxkKGlwaCk7CiYjNDM7CQlob3BfbGltaXQgPSBpcGgtJmd0O3R0bDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlwNmggPSAoc3RydWN0IGlwdjZoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKJiM0MzsJCWRzZmllbGQgPSBpcHY2X2dldF9kc2ZpZWxkKGlwNmgpOwomIzQzOwkJaG9wX2xpbWl0ID0gaXA2aC0mZ3Q7aG9wX2xpbWl0OwomIzQzOwl9CiYjNDM7CiAJZXJyID0gaXB0dW5uZWxfaGFuZGxlX29mZmxvYWRzKHNrYiwgU0tCX0dTT19JUFhJUDYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlza2Jfc2V0X2lubmVyX2lwcHJvdG8oc2tiLCBJUFBST1RPX0lQVjYpOwotCWhlYWRyb29tID0gc2l6ZW9mKCppcDZoKSAmIzQzOyBMTF9SRVNFUlZFRF9TUEFDRShydC0mZ3Q7ZHN0LmRldikgJiM0MzsKLQkJICAgcnQtJmd0O2RzdC5oZWFkZXJfbGVuOwomIzQzOwlza2Jfc2V0X2lubmVyX2lwcHJvdG8oc2tiLCB0dXBsZS0mZ3Q7dHVuLmwzX3Byb3RvKTsKJiM0MzsJaGVhZHJvb20gPSBzaXplb2YoKmlwNmgpICYjNDM7IExMX1JFU0VSVkVEX1NQQUNFKGRzdC0mZ3Q7ZGV2KSAmIzQzOwomIzQzOwkJICAgZHN0LSZndDtoZWFkZXJfbGVuOwogCWVyciA9IHNrYl9jb3dfaGVhZChza2IsIGhlYWRyb29tKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJc2tiX3NjcnViX3BhY2tldChza2IsIHRydWUpOwotCW10dSA9IGRzdF9tdHUoJmFtcDtydC0mZ3Q7ZHN0KSAtIHNpemVvZigqaXA2aCk7CiYjNDM7CW10dSA9IGRzdF9tdHUoZHN0KSAtIHNpemVvZigqaXA2aCk7CiAJbXR1ID0gbWF4KG10dSwgSVBWNl9NSU5fTVRVKTsKIAlza2JfZHN0X3VwZGF0ZV9wbXR1X25vX2NvbmZpcm0oc2tiLCBtdHUpOwogCiAJc2tiX3B1c2goc2tiLCBzaXplb2YoKmlwNmgpKTsKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKJiM0MzsJc2tiLSZndDtwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpOwogCiAJaXA2aCA9IGlwdjZfaGRyKHNrYik7CiAJaXA2X2Zsb3dfaGRyKGlwNmgsIGRzZmllbGQsCiAJCSAgICAgaXA2X21ha2VfZmxvd2xhYmVsKG5ldCwgc2tiLCBmbDYuZmxvd2xhYmVsLCB0cnVlLCAmYW1wO2ZsNikpOwogCWlwNmgtJmd0O2hvcF9saW1pdCA9IGhvcF9saW1pdDsKLQlpcDZoLSZndDtuZXh0aGRyID0gSVBQUk9UT19JUFY2OwomIzQzOwlpcDZoLSZndDtuZXh0aGRyID0gdHVwbGUtJmd0O3R1bi5sM19wcm90bzsKIAlpcDZoLSZndDtkYWRkciA9IHR1cGxlLSZndDt0dW4uc3JjX3Y2OwogCWlwNmgtJmd0O3NhZGRyID0gdHVwbGUtJmd0O3R1bi5kc3RfdjY7CiAJaXB2Nl9oZHIoc2tiKS0mZ3Q7cGF5bG9hZF9sZW4gPSBodG9ucyhza2ItJmd0O2xlbiAtIHNpemVvZigqaXA2aCkpOwpAQCAtNjk0LDE0ICYjNDM7NzA5LDE4IEBAIHN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXA2aXA2X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX3Y2X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsCi0JCQkJICBzdHJ1Y3QgaW42X2FkZHIgKippcDZfZGFkZHIpCiYjNDM7c3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsCiYjNDM7CQkJICAgICAgIF9fYmUzMiAqaXBfZGFkZHIsIHN0cnVjdCBpbjZfYWRkciAqKmlwNl9kYWRkcikKIHsKLQlpZiAodHVwbGUtJmd0O3R1bl9udW0pCi0JCXJldHVybiBuZl9mbG93X3R1bm5lbF9pcDZpcDZfcHVzaChuZXQsIHNrYiwgdHVwbGUsIGlwNl9kYWRkcik7Ci0KLQlyZXR1cm4gMDsKJiM0MzsJc3dpdGNoICh0dXBsZS0mZ3Q7dHVuLmVuY2FwX3Byb3RvKSB7CiYjNDM7CWNhc2UgQUZfSU5FVDoKJiM0MzsJCXJldHVybiBuZl9mbG93X3R1bm5lbF9pcF9wdXNoKG5ldCwgc2tiLCB0dXBsZSwgaXBfZGFkZHIpOwomIzQzOwljYXNlIEFGX0lORVQ2OgomIzQzOwkJcmV0dXJuIG5mX2Zsb3dfdHVubmVsX2lwNl9wdXNoKG5ldCwgc2tiLCB0dXBsZSwgaXA2X2RhZGRyKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBpbnQgbmZfZmxvd19lbmNhcF9wdXNoKHN0cnVjdCBza19idWZmICpza2IsCkBAIC04MDEsODYgJiM0Mzs4MjAsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG5mX2Zsb3dfcXVldWVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIE5GX1NUT0xFTjsKIH0KIAotdW5zaWduZWQgaW50Ci1uZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKQotewotCXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDsKLQlzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID0gcHJpdjsKLQlzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTsKLQllbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyOwotCXN0cnVjdCBuZl9mbG93dGFibGVfY3R4IGN0eCA9IHsKLQkJLmluCT0gc3RhdGUtJmd0O2luLAotCX07Ci0Jc3RydWN0IG5mX2Zsb3dfeG1pdCB4bWl0ID0ge307Ci0Jc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdzsKLQlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDsKLQlzdHJ1Y3QgcnRhYmxlICpydDsKLQlfX2JlMzIgaXBfZGFkZHI7Ci0JaW50IHJldDsKLQotCXR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoJmFtcDtjdHgsIGZsb3dfdGFibGUsIHNrYik7Ci0JaWYgKCF0dXBsZWhhc2gpCi0JCXJldHVybiBORl9BQ0NFUFQ7Ci0KLQlyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZCgmYW1wO2N0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpOwotCWlmIChyZXQgJmx0OyAwKQotCQlyZXR1cm4gTkZfRFJPUDsKLQllbHNlIGlmIChyZXQgPT0gMCkKLQkJcmV0dXJuIE5GX0FDQ0VQVDsKLQotCWlmICh1bmxpa2VseSh0dXBsZWhhc2gtJmd0O3R1cGxlLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9YRlJNKSkgewotCQlydCA9IGRzdF9ydGFibGUodHVwbGVoYXNoLSZndDt0dXBsZS5kc3RfY2FjaGUpOwotCQltZW1zZXQoc2tiLSZndDtjYiwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0X3NrYl9wYXJtKSk7Ci0JCUlQQ0Ioc2tiKS0mZ3Q7aWlmID0gc2tiLSZndDtkZXYtJmd0O2lmaW5kZXg7Ci0JCUlQQ0Ioc2tiKS0mZ3Q7ZmxhZ3MgPSBJUFNLQl9GT1JXQVJERUQ7Ci0JCXJldHVybiBuZl9mbG93X3htaXRfeGZybShza2IsIHN0YXRlLCAmYW1wO3J0LSZndDtkc3QpOwotCX0KLQotCWRpciA9IHR1cGxlaGFzaC0mZ3Q7dHVwbGUuZGlyOwotCWZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7Ci0Jb3RoZXJfdHVwbGUgPSAmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFshZGlyXS50dXBsZTsKLQlpcF9kYWRkciA9IG90aGVyX3R1cGxlLSZndDtzcmNfdjQuc19hZGRyOwotCi0JaWYgKG5mX2Zsb3dfdHVubmVsX3Y0X3B1c2goc3RhdGUtJmd0O25ldCwgc2tiLCBvdGhlcl90dXBsZSwgJmFtcDtpcF9kYWRkcikgJmx0OyAwKQotCQlyZXR1cm4gTkZfRFJPUDsKLQotCXN3aXRjaCAodHVwbGVoYXNoLSZndDt0dXBsZS54bWl0X3R5cGUpIHsKLQljYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIOgotCQlydCA9IGRzdF9ydGFibGUodHVwbGVoYXNoLSZndDt0dXBsZS5kc3RfY2FjaGUpOwotCQl4bWl0Lm91dGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHN0YXRlLSZndDtuZXQsIHR1cGxlaGFzaC0mZ3Q7dHVwbGUuaWZpZHgpOwotCQlpZiAoIXhtaXQub3V0ZGV2KSB7Ci0JCQlmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7Ci0JCQlyZXR1cm4gTkZfRFJPUDsKLQkJfQotCQluZWlnaCA9IGlwX25laWdoX2d3NChydC0mZ3Q7ZHN0LmRldiwgcnRfbmV4dGhvcChydCwgaXBfZGFkZHIpKTsKLQkJaWYgKElTX0VSUihuZWlnaCkpIHsKLQkJCWZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTsKLQkJCXJldHVybiBORl9EUk9QOwotCQl9Ci0JCXhtaXQuZGVzdCA9IG5laWdoLSZndDtoYTsKLQkJc2tiX2RzdF9zZXRfbm9yZWYoc2tiLCAmYW1wO3J0LSZndDtkc3QpOwotCQlicmVhazsKLQljYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX0RJUkVDVDoKLQkJeG1pdC5vdXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShzdGF0ZS0mZ3Q7bmV0LCB0dXBsZWhhc2gtJmd0O3R1cGxlLm91dC5pZmlkeCk7Ci0JCWlmICgheG1pdC5vdXRkZXYpIHsKLQkJCWZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTsKLQkJCXJldHVybiBORl9EUk9QOwotCQl9Ci0JCXhtaXQuZGVzdCA9IHR1cGxlaGFzaC0mZ3Q7dHVwbGUub3V0LmhfZGVzdDsKLQkJeG1pdC5zb3VyY2UgPSB0dXBsZWhhc2gtJmd0O3R1cGxlLm91dC5oX3NvdXJjZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJV0FSTl9PTl9PTkNFKDEpOwotCQlyZXR1cm4gTkZfRFJPUDsKLQl9Ci0JeG1pdC50dXBsZSA9IG90aGVyX3R1cGxlOwotCXhtaXQubmVlZHNfZ3NvX3NlZ21lbnQgPSB0dXBsZWhhc2gtJmd0O3R1cGxlLm5lZWRzX2dzb19zZWdtZW50OwotCi0JcmV0dXJuIG5mX2Zsb3dfcXVldWVfeG1pdChzdGF0ZS0mZ3Q7bmV0LCBza2IsICZhbXA7eG1pdCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXBfaG9vayk7Ci0KIHN0YXRpYyB2b2lkIG5mX2Zsb3dfbmF0X2lwdjZfdGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZiwKIAkJCQkgc3RydWN0IGluNl9hZGRyICphZGRyLAogCQkJCSBzdHJ1Y3QgaW42X2FkZHIgKm5ld19hZGRyLApAQCAtMTA2NSw4ICYjNDM7MTAwNCwxNiBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAlmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pOwogCiAJbXR1ID0gZmxvdy0mZ3Q7dHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICYjNDM7IGN0eC0mZ3Q7b2Zmc2V0OwotCWlmIChmbG93LSZndDt0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSkKJiM0MzsJc3dpdGNoIChmbG93LSZndDt0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuLmVuY2FwX3Byb3RvKSB7CiYjNDM7CWNhc2UgQUZfSU5FVDoKJiM0MzsJCW10dSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFGX0lORVQ2OgogCQltdHUgLT0gc2l6ZW9mKCppcDZoKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KIAogCWlmICh1bmxpa2VseShuZl9mbG93X2V4Y2VlZHNfbXR1KHNrYiwgbXR1KSkpCiAJCXJldHVybiAwOwpAQCAtMTEwMCw2ICYjNDM7MTA0NywyNSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAlyZXR1cm4gMTsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICoKJiM0MztuZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiYjNDM7CQkgICAgICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTsKJiM0MzsKJiM0MzsJaWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChjdHgsIHNrYiwgaHRvbnMoRVRIX1BfSVApKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlpZiAoY3R4LSZndDt0dW4ucHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7CiYjNDM7CQlpZiAobmZfZmxvd190dXBsZV9pcHY2KGN0eCwgc2tiLCAmYW1wO3R1cGxlKSAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CX0gZWxzZSBpZiAobmZfZmxvd190dXBsZV9pcChjdHgsIHNrYiwgJmFtcDt0dXBsZSkgJmx0OyAwKSB7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCAmYW1wO3R1cGxlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqCiBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAkJCSAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLApAQCAtMTExMCwxMiAmIzQzOzEwNzYsMTE4IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LAogCWlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woY3R4LCBza2IsIGh0b25zKEVUSF9QX0lQVjYpKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAobmZfZmxvd190dXBsZV9pcHY2KGN0eCwgc2tiLCAmYW1wO3R1cGxlKSAmbHQ7IDApCiYjNDM7CWlmIChjdHgtJmd0O3R1bi5wcm90byA9PSBJUFBST1RPX0lQSVApIHsKJiM0MzsJCWlmIChuZl9mbG93X3R1cGxlX2lwKGN0eCwgc2tiLCAmYW1wO3R1cGxlKSAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CX0gZWxzZSBpZiAobmZfZmxvd190dXBsZV9pcHY2KGN0eCwgc2tiLCAmYW1wO3R1cGxlKSAmbHQ7IDApIHsKIAkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KIAogCXJldHVybiBmbG93X29mZmxvYWRfbG9va3VwKGZsb3dfdGFibGUsICZhbXA7dHVwbGUpOwogfQogCiYjNDM7dW5zaWduZWQgaW50CiYjNDM7bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQljb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7CiYjNDM7CXN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2OwomIzQzOwlzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTsKJiM0MzsJZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjsKJiM0MzsJc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0gewomIzQzOwkJLmluCT0gc3RhdGUtJmd0O2luLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTsKJiM0MzsJc3RydWN0IGluNl9hZGRyICppcDZfZGFkZHI7CiYjNDM7CXN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7CiYjNDM7CXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwomIzQzOwlzdHJ1Y3QgcnRhYmxlICpydDsKJiM0MzsJX19iZTMyIGlwX2RhZGRyOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwl0dXBsZWhhc2ggPSBuZl9mbG93X29mZmxvYWRfbG9va3VwKCZhbXA7Y3R4LCBmbG93X3RhYmxlLCBza2IpOwomIzQzOwlpZiAoIXR1cGxlaGFzaCkKJiM0MzsJCXJldHVybiBORl9BQ0NFUFQ7CiYjNDM7CiYjNDM7CWlmIChjdHgudHVuLnByb3RvID09IElQUFJPVE9fSVBWNikKJiM0MzsJCXJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoJmFtcDtjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwKJiM0MzsJCQkJCQkgICBza2IpOwomIzQzOwllbHNlCiYjNDM7CQlyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZCgmYW1wO2N0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBORl9EUk9QOwomIzQzOwllbHNlIGlmIChyZXQgPT0gMCkKJiM0MzsJCXJldHVybiBORl9BQ0NFUFQ7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSh0dXBsZWhhc2gtJmd0O3R1cGxlLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9YRlJNKSkgewomIzQzOwkJcnQgPSBkc3RfcnRhYmxlKHR1cGxlaGFzaC0mZ3Q7dHVwbGUuZHN0X2NhY2hlKTsKJiM0MzsJCW1lbXNldChza2ItJmd0O2NiLCAwLCBzaXplb2Yoc3RydWN0IGluZXRfc2tiX3Bhcm0pKTsKJiM0MzsJCUlQQ0Ioc2tiKS0mZ3Q7aWlmID0gc2tiLSZndDtkZXYtJmd0O2lmaW5kZXg7CiYjNDM7CQlJUENCKHNrYiktJmd0O2ZsYWdzID0gSVBTS0JfRk9SV0FSREVEOwomIzQzOwkJcmV0dXJuIG5mX2Zsb3dfeG1pdF94ZnJtKHNrYiwgc3RhdGUsICZhbXA7cnQtJmd0O2RzdCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGlyID0gdHVwbGVoYXNoLSZndDt0dXBsZS5kaXI7CiYjNDM7CWZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7CiYjNDM7CW90aGVyX3R1cGxlID0gJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbIWRpcl0udHVwbGU7CiYjNDM7CWlwX2RhZGRyID0gb3RoZXJfdHVwbGUtJmd0O3NyY192NC5zX2FkZHI7CiYjNDM7CWlwNl9kYWRkciA9ICZhbXA7b3RoZXJfdHVwbGUtJmd0O3NyY192NjsKJiM0MzsKJiM0MzsJaWYgKG5mX2Zsb3dfdHVubmVsX3B1c2goc3RhdGUtJmd0O25ldCwgc2tiLCBvdGhlcl90dXBsZSwgJmFtcDtpcF9kYWRkciwKJiM0MzsJCQkJJmFtcDtpcDZfZGFkZHIpICZsdDsgMCkKJiM0MzsJCXJldHVybiBORl9EUk9QOwomIzQzOwomIzQzOwlzd2l0Y2ggKHR1cGxlaGFzaC0mZ3Q7dHVwbGUueG1pdF90eXBlKSB7CiYjNDM7CWNhc2UgRkxPV19PRkZMT0FEX1hNSVRfTkVJR0g6IHsKJiM0MzsJCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKJiM0MzsKJiM0MzsJCXhtaXQub3V0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc3RhdGUtJmd0O25ldCwgdHVwbGVoYXNoLSZndDt0dXBsZS5pZmlkeCk7CiYjNDM7CQlpZiAoIXhtaXQub3V0ZGV2KSB7CiYjNDM7CQkJZmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpOwomIzQzOwkJCXJldHVybiBORl9EUk9QOwomIzQzOwkJfQomIzQzOwkJaWYgKG90aGVyX3R1cGxlLSZndDt0dW4uZW5jYXBfcHJvdG8gPT0gQUZfSU5FVDYgfHwKJiM0MzsJCSAgICBjdHgudHVuLnByb3RvID09IElQUFJPVE9fSVBWNikgewomIzQzOwkJCXN0cnVjdCBydDZfaW5mbyAqcnQ2OwomIzQzOwomIzQzOwkJCXJ0NiA9IGRzdF9ydDZfaW5mbyh0dXBsZWhhc2gtJmd0O3R1cGxlLmRzdF9jYWNoZSk7CiYjNDM7CQkJbmVpZ2ggPSBpcF9uZWlnaF9ndzYocnQ2LSZndDtkc3QuZGV2LAomIzQzOwkJCQkJICAgICBydDZfbmV4dGhvcChydDYsIGlwNl9kYWRkcikpOwomIzQzOwkJCWRzdCA9ICZhbXA7cnQ2LSZndDtkc3Q7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJ0ID0gZHN0X3J0YWJsZSh0dXBsZWhhc2gtJmd0O3R1cGxlLmRzdF9jYWNoZSk7CiYjNDM7CQkJbmVpZ2ggPSBpcF9uZWlnaF9ndzQocnQtJmd0O2RzdC5kZXYsCiYjNDM7CQkJCQkgICAgIHJ0X25leHRob3AocnQsIGlwX2RhZGRyKSk7CiYjNDM7CQkJZHN0ID0gJmFtcDtydC0mZ3Q7ZHN0OwomIzQzOwkJfQomIzQzOwkJaWYgKElTX0VSUihuZWlnaCkpIHsKJiM0MzsJCQlmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7CiYjNDM7CQkJcmV0dXJuIE5GX0RST1A7CiYjNDM7CQl9CiYjNDM7CQl4bWl0LmRlc3QgPSBuZWlnaC0mZ3Q7aGE7CiYjNDM7CQlza2JfZHN0X3NldF9ub3JlZihza2IsIGRzdCk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwljYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX0RJUkVDVDoKJiM0MzsJCXhtaXQub3V0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc3RhdGUtJmd0O25ldCwgdHVwbGVoYXNoLSZndDt0dXBsZS5vdXQuaWZpZHgpOwomIzQzOwkJaWYgKCF4bWl0Lm91dGRldikgewomIzQzOwkJCWZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTsKJiM0MzsJCQlyZXR1cm4gTkZfRFJPUDsKJiM0MzsJCX0KJiM0MzsJCXhtaXQuZGVzdCA9IHR1cGxlaGFzaC0mZ3Q7dHVwbGUub3V0LmhfZGVzdDsKJiM0MzsJCXhtaXQuc291cmNlID0gdHVwbGVoYXNoLSZndDt0dXBsZS5vdXQuaF9zb3VyY2U7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCVdBUk5fT05fT05DRSgxKTsKJiM0MzsJCXJldHVybiBORl9EUk9QOwomIzQzOwl9CiYjNDM7CXhtaXQudHVwbGUgPSBvdGhlcl90dXBsZTsKJiM0MzsJeG1pdC5uZWVkc19nc29fc2VnbWVudCA9IHR1cGxlaGFzaC0mZ3Q7dHVwbGUubmVlZHNfZ3NvX3NlZ21lbnQ7CiYjNDM7CiYjNDM7CXJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQoc3RhdGUtJmd0O25ldCwgc2tiLCAmYW1wO3htaXQpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXBfaG9vayk7CiYjNDM7CiB1bnNpZ25lZCBpbnQKIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKQpAQCAtMTEzMiwxMyAmIzQzOzEyMDQsMTggQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7CiAJc3RydWN0IHJ0Nl9pbmZvICpydDsKJiM0MzsJX19iZTMyIGlwX2RhZGRyOwogCWludCByZXQ7CiAKIAl0dXBsZWhhc2ggPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoJmFtcDtjdHgsIGZsb3dfdGFibGUsIHNrYik7CiAJaWYgKHR1cGxlaGFzaCA9PSBOVUxMKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCi0JcmV0ID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZCgmYW1wO2N0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpOwomIzQzOwlpZiAoY3R4LnR1bi5wcm90byA9PSBJUFBST1RPX0lQSVApCiYjNDM7CQlyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZCgmYW1wO2N0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpOwomIzQzOwllbHNlCiYjNDM7CQlyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKCZhbXA7Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsCiYjNDM7CQkJCQkJICAgc2tiKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIE5GX0RST1A7CiAJZWxzZSBpZiAocmV0ID09IDApCkBAIC0xMTU1LDI4ICYjNDM7MTIzMiw0NCBAQCBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJZGlyID0gdHVwbGVoYXNoLSZndDt0dXBsZS5kaXI7CiAJZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTsKIAlvdGhlcl90dXBsZSA9ICZhbXA7Zmxvdy0mZ3Q7dHVwbGVoYXNoWyFkaXJdLnR1cGxlOwomIzQzOwlpcF9kYWRkciA9IG90aGVyX3R1cGxlLSZndDtzcmNfdjQuc19hZGRyOwogCWlwNl9kYWRkciA9ICZhbXA7b3RoZXJfdHVwbGUtJmd0O3NyY192NjsKIAotCWlmIChuZl9mbG93X3R1bm5lbF92Nl9wdXNoKHN0YXRlLSZndDtuZXQsIHNrYiwgb3RoZXJfdHVwbGUsCi0JCQkJICAgJmFtcDtpcDZfZGFkZHIpICZsdDsgMCkKJiM0MzsJaWYgKG5mX2Zsb3dfdHVubmVsX3B1c2goc3RhdGUtJmd0O25ldCwgc2tiLCBvdGhlcl90dXBsZSwgJmFtcDtpcF9kYWRkciwKJiM0MzsJCQkJJmFtcDtpcDZfZGFkZHIpICZsdDsgMCkKIAkJcmV0dXJuIE5GX0RST1A7CiAKIAlzd2l0Y2ggKHR1cGxlaGFzaC0mZ3Q7dHVwbGUueG1pdF90eXBlKSB7Ci0JY2FzZSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSDoKLQkJcnQgPSBkc3RfcnQ2X2luZm8odHVwbGVoYXNoLSZndDt0dXBsZS5kc3RfY2FjaGUpOwomIzQzOwljYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIOiB7CiYjNDM7CQlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CiYjNDM7CiAJCXhtaXQub3V0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc3RhdGUtJmd0O25ldCwgdHVwbGVoYXNoLSZndDt0dXBsZS5pZmlkeCk7CiAJCWlmICgheG1pdC5vdXRkZXYpIHsKIAkJCWZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTsKIAkJCXJldHVybiBORl9EUk9QOwogCQl9Ci0JCW5laWdoID0gaXBfbmVpZ2hfZ3c2KHJ0LSZndDtkc3QuZGV2LCBydDZfbmV4dGhvcChydCwgaXA2X2RhZGRyKSk7CiYjNDM7CQlpZiAob3RoZXJfdHVwbGUtJmd0O3R1bi5lbmNhcF9wcm90byA9PSBBRl9JTkVUIHx8CiYjNDM7CQkgICAgY3R4LnR1bi5wcm90byA9PSBJUFBST1RPX0lQSVApIHsKJiM0MzsJCQlzdHJ1Y3QgcnRhYmxlICpydDQ7CiYjNDM7CiYjNDM7CQkJcnQ0ID0gZHN0X3J0YWJsZSh0dXBsZWhhc2gtJmd0O3R1cGxlLmRzdF9jYWNoZSk7CiYjNDM7CQkJbmVpZ2ggPSBpcF9uZWlnaF9ndzQocnQ0LSZndDtkc3QuZGV2LAomIzQzOwkJCQkJICAgICBydF9uZXh0aG9wKHJ0NCwgaXBfZGFkZHIpKTsKJiM0MzsJCQlkc3QgPSAmYW1wO3J0NC0mZ3Q7ZHN0OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlydCA9IGRzdF9ydDZfaW5mbyh0dXBsZWhhc2gtJmd0O3R1cGxlLmRzdF9jYWNoZSk7CiYjNDM7CQkJbmVpZ2ggPSBpcF9uZWlnaF9ndzYocnQtJmd0O2RzdC5kZXYsCiYjNDM7CQkJCQkgICAgIHJ0Nl9uZXh0aG9wKHJ0LCBpcDZfZGFkZHIpKTsKJiM0MzsJCQlkc3QgPSAmYW1wO3J0LSZndDtkc3Q7CiYjNDM7CQl9CiAJCWlmIChJU19FUlIobmVpZ2gpKSB7CiAJCQlmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7CiAJCQlyZXR1cm4gTkZfRFJPUDsKIAkJfQogCQl4bWl0LmRlc3QgPSBuZWlnaC0mZ3Q7aGE7Ci0JCXNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgJmFtcDtydC0mZ3Q7ZHN0KTsKJiM0MzsJCXNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgZHN0KTsKIAkJYnJlYWs7CiYjNDM7CX0KIAljYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX0RJUkVDVDoKIAkJeG1pdC5vdXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShzdGF0ZS0mZ3Q7bmV0LCB0dXBsZWhhc2gtJmd0O3R1cGxlLm91dC5pZmlkeCk7CiAJCWlmICgheG1pdC5vdXRkZXYpIHsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jCmluZGV4IDk4YzAzYjQ4N2Y1MjExLi41ZTg0YjdmMThhMjY3ZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jCkBAIC00NSw3ICYjNDM7NDUsOCBAQCBzdGF0aWMgYm9vbCBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiBzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkJCSAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwgdTggKmhhLAomIzQzOwkJCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCiYjNDM7CQkJCSAgICAgdTggKmhhLCBfX2JlMTYgZXRoZXJfdHlwZSwKIAkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKQogewogCWNvbnN0IHZvaWQgKmRhZGRyID0gJmFtcDtjdC0mZ3Q7dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MzsKQEAgLTcyLDcgJiM0Mzs3Myw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsCiAJCXJldHVybiAtMTsKIAogb3V0OgotCXJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBoYSwgc3RhY2spOwomIzQzOwlyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIGV0aGVyX3R5cGUsIHN0YWNrKTsKIH0KIAogc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gewpAQCAtMTI4LDYgJiM0MzsxMjksNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLAogCQkJCWluZm8tJmd0O3R1bi5zcmNfdjYgPSBwYXRoLSZndDt0dW4uc3JjX3Y2OwogCQkJCWluZm8tJmd0O3R1bi5kc3RfdjYgPSBwYXRoLSZndDt0dW4uZHN0X3Y2OwogCQkJCWluZm8tJmd0O3R1bi5sM19wcm90byA9IHBhdGgtJmd0O3R1bi5sM19wcm90bzsKJiM0MzsJCQkJaW5mby0mZ3Q7dHVuLmVuY2FwX3Byb3RvID0gcGF0aC0mZ3Q7dHVuLmVuY2FwX3Byb3RvOwogCQkJCWluZm8tJmd0O251bV90dW5zJiM0MzsmIzQzOzsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGluZm8tJmd0O251bV9lbmNhcHMgJmd0Oz0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpCkBAIC0yMTQsMTIgJiM0MzsyMTYsMTMgQEAgc3RhdGljIGludCBuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogCXN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3QgPSBOVUxMOwogCXN0cnVjdCBmbG93aSBmbCA9IHt9OwogCi0Jc3dpdGNoIChuZnRfcGYocGt0KSkgewomIzQzOwlzd2l0Y2ggKHR1bi0mZ3Q7ZW5jYXBfcHJvdG8pIHsKIAljYXNlIE5GUFJPVE9fSVBWNDoKIAkJZmwudS5pcDQuZGFkZHIgPSB0dW4tJmd0O2RzdF92NC5zX2FkZHI7CiAJCWZsLnUuaXA0LnNhZGRyID0gdHVuLSZndDtzcmNfdjQuc19hZGRyOwogCQlmbC51LmlwNC5mbG93aTRfaWlmID0gbmZ0X2luKHBrdCktJmd0O2lmaW5kZXg7Ci0JCWZsLnUuaXA0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwX2hkcihwa3QtJmd0O3NrYikpOwomIzQzOwkJaWYgKG5mdF9wZihwa3QpID09IE5GUFJPVE9fSVBWNCkKJiM0MzsJCQlmbC51LmlwNC5mbG93aTRfZHNjcCA9IGlwNGhfZHNjcChpcF9oZHIocGt0LSZndDtza2IpKTsKIAkJZmwudS5pcDQuZmxvd2k0X21hcmsgPSBwa3QtJmd0O3NrYi0mZ3Q7bWFyazsKIAkJZmwudS5pcDQuZmxvd2k0X2ZsYWdzID0gRkxPV0lfRkxBR19BTllTUkM7CiAJCWJyZWFrOwpAQCAtMjI3LDEzICYjNDM7MjMwLDE0IEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKIAkJZmwudS5pcDYuZGFkZHIgPSB0dW4tJmd0O2RzdF92NjsKIAkJZmwudS5pcDYuc2FkZHIgPSB0dW4tJmd0O3NyY192NjsKIAkJZmwudS5pcDYuZmxvd2k2X2lpZiA9IG5mdF9pbihwa3QpLSZndDtpZmluZGV4OwotCQlmbC51LmlwNi5mbG93bGFiZWwgPSBpcDZfZmxvd2luZm8oaXB2Nl9oZHIocGt0LSZndDtza2IpKTsKJiM0MzsJCWlmIChuZnRfcGYocGt0KSA9PSBORlBST1RPX0lQVjYpCiYjNDM7CQkJZmwudS5pcDYuZmxvd2xhYmVsID0gaXA2X2Zsb3dpbmZvKGlwdjZfaGRyKHBrdC0mZ3Q7c2tiKSk7CiAJCWZsLnUuaXA2LmZsb3dpNl9tYXJrID0gcGt0LSZndDtza2ItJmd0O21hcms7CiAJCWZsLnUuaXA2LmZsb3dpNl9mbGFncyA9IEZMT1dJX0ZMQUdfQU5ZU1JDOwogCQlicmVhazsKIAl9CiAKLQluZl9yb3V0ZShuZnRfbmV0KHBrdCksICZhbXA7dHVuX2RzdCwgJmFtcDtmbCwgZmFsc2UsIG5mdF9wZihwa3QpKTsKJiM0MzsJbmZfcm91dGUobmZ0X25ldChwa3QpLCAmYW1wO3R1bl9kc3QsICZhbXA7ZmwsIGZhbHNlLCB0dW4tJmd0O2VuY2FwX3Byb3RvKTsKIAlpZiAoIXR1bl9kc3QpCiAJCXJldHVybiAtRU5PRU5UOwogCkBAIC0yNTUsNyAmIzQzOzI1OSw4IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiAJdW5zaWduZWQgY2hhciBoYVtFVEhfQUxFTl07CiAJaW50IGk7CiAKLQlpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgJmFtcDtzdGFjaykgJmx0OyAwIHx8CiYjNDM7CWlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHJvdXRlLCBkc3QsIGN0LCBkaXIsIGhhLCBwa3QtJmd0O2V0aGVydHlwZSwKJiM0MzsJCQkJICAgICAgJmFtcDtzdGFjaykgJmx0OyAwIHx8CiAJICAgIG5mdF9kZXZfcGF0aF9pbmZvKCZhbXA7c3RhY2ssICZhbXA7aW5mbywgaGEsICZhbXA7ZnQtJmd0O2RhdGEpICZsdDsgMCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKQEAgLTI3Niw2ICYjNDM7MjgxLDcgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKIAkJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLnR1bi5zcmNfdjYgPSBpbmZvLnR1bi5kc3RfdjY7CiAJCXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi50dW4uZHN0X3Y2ID0gaW5mby50dW4uc3JjX3Y2OwogCQlyb3V0ZS0mZ3Q7dHVwbGVbIWRpcl0uaW4udHVuLmwzX3Byb3RvID0gaW5mby50dW4ubDNfcHJvdG87CiYjNDM7CQlyb3V0ZS0mZ3Q7dHVwbGVbIWRpcl0uaW4udHVuLmVuY2FwX3Byb3RvID0gaW5mby50dW4uZW5jYXBfcHJvdG87CiAJCXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi5udW1fdHVucyA9IGluZm8ubnVtX3R1bnM7CiAJfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29uZmlnCmluZGV4IGMzYzEyMWI2ZjMwMGE5Li5hMjEyYjllZGJjZDk3ZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWcKQEAgLTM1LDYgJiM0MzszNSw3IEBAIENPTkZJR19JUF9TQ1RQPW0KIENPTkZJR19JUFY2PXkKIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUz15CiBDT05GSUdfSVBWNl9UVU5ORUw9bQomIzQzO0NPTkZJR19JUFY2X1NJVD1tCiBDT05GSUdfSVBfVlM9bQogQ09ORklHX0lQX1ZTX1BST1RPX1RDUD15CiBDT05GSUdfSVBfVlNfUlI9bQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoCmluZGV4IDA4YWQwNzUwMGU4YTcxLi40NmJkMDgwMTA4YmUzNiAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaApAQCAtNTc5LDkgJiM0Mzs1NzksOCBAQCBpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0ICYjMzQ7JG5zMSYjMzQ7ICYjMzQ7JG5zMiYjMzQ7IDEgJiMzNDsmIzM0OzsgdGhlbgogCWlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCBsaXN0IHJ1bGVzZXQKIGZpCiAKLSMgSVBJUCB0dW5uZWwgdGVzdDoKLSMgQWRkIElQSVAgdHVubmVsIGludGVyZmFjZXMgYW5kIGNoZWNrIGZsb3d0YWJsZSBhY2NlbGVyYXRpb24uCi10ZXN0X2lwaXAoKSB7CiYjNDM7IyBJUCB0dW5uZWwgdGVzdHM6CiYjNDM7dGVzdF9pcF90bmxzKCkgewogaWYgISBpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBsaW5rIGFkZCBuYW1lIHR1bjAgdHlwZSBpcGlwIFwKICAgICAgbG9jYWwgMTkyLjE2OC4xMC4xIHJlbW90ZSAxOTIuMTY4LjEwLjIgJmd0Oy9kZXYvbnVsbDt0aGVuCiAJZWNobyAmIzM0O1NLSVA6IGNvdWxkIG5vdCBhZGQgaXBpcCB0dW5uZWwmIzM0OwpAQCAtNTk0LDcgJiM0Mzs1OTMsMTMgQEAgaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgc3lzY3RsIG5ldC5pcHY0LmNvbmYudHVuMC5mb3J3YXJkaW5nPTEgJmd0OyAvZGV2L251bGwKIAogaXAgLW5ldCAmIzM0OyRuc3IxJiMzNDsgbGluayBhZGQgbmFtZSB0dW42IHR5cGUgaXA2dG5sIGxvY2FsIGZlZTE6Mjo6MSByZW1vdGUgZmVlMToyOjoyIGVuY2FwbGltaXQgbm9uZQogaXAgLW5ldCAmIzM0OyRuc3IxJiMzNDsgbGluayBzZXQgdHVuNiB1cAomIzQzO2lwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGFkZHIgYWRkIDE5Mi4xNjguMjEwLjEvMjQgZGV2IHR1bjYKIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGFkZHIgYWRkIGZlZTE6Mzo6MS82NCBkZXYgdHVuNiBub2RhZAomIzQzO2lwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjYuZm9yd2FyZGluZz0xICZndDsgL2Rldi9udWxsCiYjNDM7CiYjNDM7aXAgLW5ldCAmIzM0OyRuc3IxJiMzNDsgbGluayBhZGQgbmFtZSBzaXQxIHR5cGUgc2l0IGxvY2FsIDE5Mi4xNjguMTAuMSByZW1vdGUgMTkyLjE2OC4xMC4yIHR0bCAyNTUKJiM0MztpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBsaW5rIHNldCBzaXQxIHVwCiYjNDM7aXAgLW5ldCAmIzM0OyRuc3IxJiMzNDsgYWRkciBhZGQgZmUwMTozOjoxLzY0IGRldiBzaXQxIG5vZGFkCiAKIGlwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IGxpbmsgYWRkIG5hbWUgdHVuMCB0eXBlIGlwaXAgbG9jYWwgMTkyLjE2OC4xMC4yIHJlbW90ZSAxOTIuMTY4LjEwLjEKIGlwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IGxpbmsgc2V0IHR1bjAgdXAKQEAgLTYwMyw3ICYjNDM7NjA4LDEzIEBAIGlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMiYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjAuZm9yd2FyZGluZz0xICZndDsgL2Rldi9udWxsCiAKIGlwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IGxpbmsgYWRkIG5hbWUgdHVuNiB0eXBlIGlwNnRubCBsb2NhbCBmZWUxOjI6OjIgcmVtb3RlIGZlZTE6Mjo6MSBlbmNhcGxpbWl0IG5vbmUgfHwgcmV0PTEKIGlwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IGxpbmsgc2V0IHR1bjYgdXAKJiM0MztpcCAtbmV0ICYjMzQ7JG5zcjImIzM0OyBhZGRyIGFkZCAxOTIuMTY4LjIxMC4yLzI0IGRldiB0dW42CiBpcCAtbmV0ICYjMzQ7JG5zcjImIzM0OyBhZGRyIGFkZCBmZWUxOjM6OjIvNjQgZGV2IHR1bjYgbm9kYWQKJiM0MztpcCBuZXRucyBleGVjICYjMzQ7JG5zcjImIzM0OyBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW42LmZvcndhcmRpbmc9MSAmZ3Q7IC9kZXYvbnVsbAomIzQzOwomIzQzO2lwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IGxpbmsgYWRkIG5hbWUgc2l0MSB0eXBlIHNpdCBsb2NhbCAxOTIuMTY4LjEwLjIgcmVtb3RlIDE5Mi4xNjguMTAuMSB0dGwgMjU1CiYjNDM7aXAgLW5ldCAmIzM0OyRuc3IyJiMzNDsgbGluayBzZXQgc2l0MSB1cAomIzQzO2lwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IGFkZHIgYWRkIGZlMDE6Mzo6Mi82NCBkZXYgc2l0MSBub2RhZAogCiBpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyByb3V0ZSBjaGFuZ2UgZGVmYXVsdCB2aWEgMTkyLjE2OC4xMDAuMgogaXAgLW5ldCAmIzM0OyRuc3IyJiMzNDsgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMTAwLjEKQEAgLTYxOSw2ICYjNDM7NjMwLDcgQEAgaXAgLTYgLW5ldCAmIzM0OyRuczImIzM0OyByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZGVhZDoyOjoxCiAKIGlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICYjMzk7bWV0YSBvaWYgdHVuMCBhY2NlcHQmIzM5OwogaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiB0dW42IGFjY2VwdCYjMzk7CiYjNDM7aXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiBzaXQxIGFjY2VwdCYjMzk7CiBpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcCiAJJiMzOTttZXRhIG9pZiAmIzM0O3ZldGgwJiMzNDsgdGNwIHNwb3J0IDEyMzQ1IGN0IG1hcmsgc2V0IDEgZmxvdyBhZGQgQGYxIGNvdW50ZXIgbmFtZSByb3V0ZWRfcmVwbCBhY2NlcHQmIzM5OwogCkBAIC02MzYsNiAmIzQzOzY0OCwyOCBAQCBlbHNlCiAJcmV0PTEKIGZpCiAKJiM0MztpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyByb3V0ZSBjaGFuZ2UgZGVmYXVsdCB2aWEgMTkyLjE2OC4yMTAuMgomIzQzO2lwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIxMC4xCiYjNDM7CiYjNDM7aWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCAmIzM0OyRuczEmIzM0OyAmIzM0OyRuczImIzM0OyAxICYjMzQ7SVA0SVA2IHR1bm5lbCYjMzQ7OyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBJUDRJUDYgdHVubmVsJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IGxpc3QgcnVsZXNldAomIzQzOwlyZXQ9MQomIzQzO2ZpCiYjNDM7CiYjNDM7aXAgLTYgLW5ldCAmIzM0OyRuc3IxJiMzNDsgcm91dGUgZGVsZXRlIGRlZmF1bHQKJiM0MztpcCAtNiAtbmV0ICYjMzQ7JG5zcjEmIzM0OyByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmUwMTozOjoyCiYjNDM7aXAgLTYgLW5ldCAmIzM0OyRuc3IyJiMzNDsgcm91dGUgZGVsZXRlIGRlZmF1bHQKJiM0MztpcCAtNiAtbmV0ICYjMzQ7JG5zcjImIzM0OyByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmUwMTozOjoxCiYjNDM7CiYjNDM7aWYgdGVzdF90Y3BfZm9yd2FyZGluZyAmIzM0OyRuczEmIzM0OyAmIzM0OyRuczImIzM0OyAxIDYgJiMzNDtbZGVhZDoyOjo5OV0mIzM0OyAxMjM0NTsgdGhlbgomIzQzOwllY2hvICYjMzQ7UEFTUzogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIFNJVCB0dW5uZWwmIzM0OwomIzQzO2Vsc2UKJiM0MzsJZWNobyAmIzM0O0ZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIFNJVCB0dW5uZWwmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgbGlzdCBydWxlc2V0CiYjNDM7CXJldD0xCiYjNDM7ZmkKJiM0MzsKICMgQ3JlYXRlIHZsYW4gdGFnZ2VkIGRldmljZXMgZm9yIElQSVAgdHJhZmZpYy4KIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSB2ZXRoMS4xMCB0eXBlIHZsYW4gaWQgMTAKIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGxpbmsgc2V0IHZldGgxLjEwIHVwCkBAIC02NTMsMTEgJiM0Mzs2ODcsMTggQEAgaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiB0dW4wLjEwIGEKIAogaXAgLW5ldCAmIzM0OyRuc3IxJiMzNDsgbGluayBhZGQgbmFtZSB0dW42LjEwIHR5cGUgaXA2dG5sIGxvY2FsIGZlZTE6NDo6MSByZW1vdGUgZmVlMTo0OjoyIGVuY2FwbGltaXQgbm9uZQogaXAgLW5ldCAmIzM0OyRuc3IxJiMzNDsgbGluayBzZXQgdHVuNi4xMCB1cAomIzQzO2lwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGFkZHIgYWRkIDE5Mi4xNjguMjIwLjEvMjQgZGV2IHR1bjYuMTAKIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGFkZHIgYWRkIGZlZTE6NTo6MS82NCBkZXYgdHVuNi4xMCBub2RhZAomIzQzO2lwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjYvMTAuZm9yd2FyZGluZz0xICZndDsgL2Rldi9udWxsCiBpcCAtNiAtbmV0ICYjMzQ7JG5zcjEmIzM0OyByb3V0ZSBkZWxldGUgZGVmYXVsdAogaXAgLTYgLW5ldCAmIzM0OyRuc3IxJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlZTE6NTo6MgogaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiB0dW42LjEwIGFjY2VwdCYjMzk7CiAKJiM0MztpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBsaW5rIGFkZCBuYW1lIHNpdDEuMTAgdHlwZSBzaXQgbG9jYWwgMTkyLjE2OC4yMC4xIHJlbW90ZSAxOTIuMTY4LjIwLjIgdHRsIDI1NQomIzQzO2lwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGxpbmsgc2V0IHNpdDEuMTAgdXAKJiM0MztpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBhZGRyIGFkZCBmZTAxOjU6OjEvNjQgZGV2IHNpdDEuMTAgbm9kYWQKJiM0MztpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAmIzM5O21ldGEgb2lmIHNpdDEuMTAgYWNjZXB0JiMzOTsKJiM0MzsKIGlwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IGxpbmsgYWRkIGxpbmsgdmV0aDAgbmFtZSB2ZXRoMC4xMCB0eXBlIHZsYW4gaWQgMTAKIGlwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IGxpbmsgc2V0IHZldGgwLjEwIHVwCiBpcCAtbmV0ICYjMzQ7JG5zcjImIzM0OyBhZGRyIGFkZCAxOTIuMTY4LjIwLjIvMjQgZGV2IHZldGgwLjEwCkBAIC02NzIsNyAmIzQzOzcxMywxNCBAQCBpcCBuZXRucyBleGVjICYjMzQ7JG5zcjImIzM0OyBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW4wLzEwLmZvcndhcmRpbmc9MSAmZ3Q7IC9kZXYvbnVsbAogCiBpcCAtbmV0ICYjMzQ7JG5zcjImIzM0OyBsaW5rIGFkZCBuYW1lIHR1bjYuMTAgdHlwZSBpcDZ0bmwgbG9jYWwgZmVlMTo0OjoyIHJlbW90ZSBmZWUxOjQ6OjEgZW5jYXBsaW1pdCBub25lIHx8IHJldD0xCiBpcCAtbmV0ICYjMzQ7JG5zcjImIzM0OyBsaW5rIHNldCB0dW42LjEwIHVwCiYjNDM7aXAgLW5ldCAmIzM0OyRuc3IyJiMzNDsgYWRkciBhZGQgMTkyLjE2OC4yMjAuMi8yNCBkZXYgdHVuNi4xMAogaXAgLW5ldCAmIzM0OyRuc3IyJiMzNDsgYWRkciBhZGQgZmVlMTo1OjoyLzY0IGRldiB0dW42LjEwIG5vZGFkCiYjNDM7aXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IyJiMzNDsgc3lzY3RsIG5ldC5pcHY0LmNvbmYudHVuNi8xMC5mb3J3YXJkaW5nPTEgJmd0OyAvZGV2L251bGwKJiM0MzsKJiM0MztpcCAtbmV0ICYjMzQ7JG5zcjImIzM0OyBsaW5rIGFkZCBuYW1lIHNpdDEuMTAgdHlwZSBzaXQgbG9jYWwgMTkyLjE2OC4yMC4yIHJlbW90ZSAxOTIuMTY4LjIwLjEgdHRsIDI1NQomIzQzO2lwIC1uZXQgJiMzNDskbnNyMiYjMzQ7IGxpbmsgc2V0IHNpdDEuMTAgdXAKJiM0MztpcCAtbmV0ICYjMzQ7JG5zcjImIzM0OyBhZGRyIGFkZCBmZTAxOjU6OjIvNjQgZGV2IHNpdDEuMTAgbm9kYWQKJiM0MzsKIGlwIC02IC1uZXQgJiMzNDskbnNyMiYjMzQ7IHJvdXRlIGRlbGV0ZSBkZWZhdWx0CiBpcCAtNiAtbmV0ICYjMzQ7JG5zcjImIzM0OyByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmVlMTo1OjoxCiAKQEAgLTY5MCw2ICYjNDM7NzM4LDI4IEBAIGVsc2UKIAlyZXQ9MQogZmkKIAomIzQzO2lwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIyMC4yCiYjNDM7aXAgLW5ldCAmIzM0OyRuc3IyJiMzNDsgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMjIwLjEKJiM0MzsKJiM0MztpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0ICYjMzQ7JG5zMSYjMzQ7ICYjMzQ7JG5zMiYjMzQ7IDEgJiMzNDtJUDRJUDYgdHVubmVsIG92ZXIgdmxhbiYjMzQ7OyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBJUDRJUDYgdHVubmVsIG92ZXIgdmxhbiYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCBsaXN0IHJ1bGVzZXQKJiM0MzsJcmV0PTEKJiM0MztmaQomIzQzOwomIzQzO2lwIC02IC1uZXQgJiMzNDskbnNyMSYjMzQ7IHJvdXRlIGRlbGV0ZSBkZWZhdWx0CiYjNDM7aXAgLTYgLW5ldCAmIzM0OyRuc3IxJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlMDE6NTo6MgomIzQzO2lwIC02IC1uZXQgJiMzNDskbnNyMiYjMzQ7IHJvdXRlIGRlbGV0ZSBkZWZhdWx0CiYjNDM7aXAgLTYgLW5ldCAmIzM0OyRuc3IyJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlMDE6NTo6MQomIzQzOwomIzQzO2lmIHRlc3RfdGNwX2ZvcndhcmRpbmcgJiMzNDskbnMxJiMzNDsgJiMzNDskbnMyJiMzNDsgMSA2ICYjMzQ7W2RlYWQ6Mjo6OTldJiMzNDsgMTIzNDU7IHRoZW4KJiM0MzsJZWNobyAmIzM0O1BBU1M6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiBTSVQgdHVubmVsIG92ZXIgdmxhbiYjMzQ7CiYjNDM7ZWxzZQomIzQzOwllY2hvICYjMzQ7RkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggU0lUIHR1bm5lbCBvdmVyIHZsYW4mIzM0OyAxJmd0OyZhbXA7MgomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgbGlzdCBydWxlc2V0CiYjNDM7CXJldD0xCiYjNDM7ZmkKJiM0MzsKICMgUmVzdG9yZSB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbgogaXAgLW5ldCAmIzM0OyRuc3IxJiMzNDsgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMTAuMgogaXAgLW5ldCAmIzM0OyRuc3IyJiMzNDsgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMTAuMQpAQCAtNzgyLDcgJiM0Mzs4NTIsNyBAQCBpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBhZGRyIGFkZCBkZWFkOjE6OjEvNjQgZGV2IHZldGgwIG5vZGFkCiBpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBsaW5rIHNldCB1cCBkZXYgdmV0aDAKIH0KIAotdGVzdF9pcGlwCiYjNDM7dGVzdF9pcF90bmxzCiAKIHRlc3RfYnJpZGdlCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3NjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgRmxvd3RhYmxlIE9mZmxvYWQgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcywgYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzLCBzcGFubmluZyBxdWl0ZSBhIGZldyBmaWxlcy4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgZHJpdmVycyBmb3IgYWlyb2hhIGFuZCBtZWRpYXRlayBQUEUgKHBhY2tldCBwcm9jZXNzaW5nIGVuZ2luZSkgaW1wbGVtZW50YXRpb25zLCBjb3JlIG5ldHdvcmtpbmcgY29kZSwgYW5kIG5ldGZpbHRlciBpdHNlbGYsIGluY2x1ZGluZyB0aGUgZmxvd3RhYmxlIG9mZmxvYWQuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWJvdXQgYWRkaW5nIHN1cHBvcnQgZm9yIElQLWluLUlQLCBJUHY2LWluLUlQdjQgKFNJVCksIGFuZCBJUHY0LWluLUlQdjYgdHVubmVscyB3aXRoaW4gdGhlIG5ldGZpbHRlciBmbG93dGFibGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgbWFqb3Igb25lLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBnb29kIGZ1enppbmcgY2FtcGFpZ24uCgpGaXJzdCwgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IHRoaXMgYWN0dWFsbHkgZG9lcy4gSXQgbG9va3MgbGlrZSBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBpcyBiZWluZyB1cGRhdGVkIHRvIHRha2UgYW4gYGV0aGVyX3R5cGVgIGFyZ3VtZW50LiBBbHNvLCBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAgaXMgYmVpbmcgbW9kaWZpZWQsIGFuZCBhIG5ldyBmdW5jdGlvbiwgYGlwaXA2X3R1bm5lbF9maWxsX2ZvcndhcmRfcGF0aGAgaXMgYmVpbmcgYWRkZWQuICBgbmZfZmxvd190YWJsZV9pcC5jYCBpcyBnZXR0aW5nIHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBlbmNhcHN1bGF0aW9uIHByb3RvY29scyBgSVBQUk9UT19JUElQYCBhbmQgYElQUFJPVE9fSVBWNmAuCgpOb3csIGZvciBzcGVjaWZpYyB0YXJnZXRzLCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgYWN0dWFsbHkgbW9kaWZpZWQgb3IgaW50cm9kdWNlZC4gSGVyZSYjMzk7cyB3aGF0IEkgc2VlOgoqICAgQSBidW5jaCBvZiBjaGFuZ2VzIGluIHRoZSBQUEUgZHJpdmVyczogYGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mb2AsIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYCwgYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgLCBgbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mb2AsIGBtdGtfZmxvd19zZXRfb3V0cHV0X2RldmljZWAsIGFuZCBgbXRrX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYC4gVGhvc2Ugd2lsbCBiZSBwbGF0Zm9ybS1zcGVjaWZpYywgc28gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBhY2NvdW50IGZvciB0aGVtLgoqICAgVGhlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnM6IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAsIGBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYW5kIHRoZSBuZXcgYGlwaXA2X3R1bm5lbF9maWxsX2ZvcndhcmRfcGF0aGAuCiogICBBbmQgYSB3aG9sZSBzZXQgb2YgbmV0ZmlsdGVyIGZ1bmN0aW9uczogYGZsb3dfb2ZmbG9hZF9kc3RfY29va2llYCwgYGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlYCwgYG5mX2Zsb3dfdHVwbGVfZW5jYXBgLCBgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvYCwgYG5mX2Zsb3dfaXA2X3R1bm5lbF9wcm90b2AsIGBuZl9mbG93X2lwX3R1bm5lbF9wb3BgLCBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgLCBgbmZfZmxvd190dW5uZWxfaXBfcHVzaGAsIGBuZl9mbG93X3R1bm5lbF9pcDZfcHVzaGAsIGBuZl9mbG93X3R1bm5lbF9wdXNoYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgLCBgbmZfZmxvd19vZmZsb2FkX2xvb2t1cGAsIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXBgLCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AsIGBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYG5mdF9kZXZfcGF0aF9pbmZvYCwgYG5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGVgLCBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgLiBUaGlzIGlzIGEgbG90IHRvIHRlc3QsIHNvIEkmIzM5O2xsIGhhdmUgdG8gY29uc2lkZXIgd2hpY2ggYXJlIG1vc3QgbGlrZWx5IHRvIGJlIGV4cG9zZWQuCgpOZXh0LCBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6IGBDT05GSUdfTkZfRkxPV19UQUJMRWAsIGBDT05GSUdfSVBWNl9TSVRgLCBgQ09ORklHX0lQVjZfVFVOTkVMYCwgYENPTkZJR19ORVRfSVBJUGAsIGFuZCBwb3RlbnRpYWxseSBgQ09ORklHX05FVF9JUEdSRWAuIFRpbWUgdG8gdmVyaWZ5LgoKQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBuZXQvaXB2Ni9zaXQuY2AgaXMgaW5kZWVkIHRpZWQgdG8gYENPTkZJR19JUFY2X1NJVGAsIGBuZXQvaXB2NC9pcGlwLmNgIGlzIGVuYWJsZWQgYnkgYENPTkZJR19ORVRfSVBJUGAsIGFuZCBgbmV0L2lwdjYvaXA2X3R1bm5lbC5jYCBieSBgQ09ORklHX0lQVjZfVFVOTkVMYC4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYCBzaG91bGQgYmUgZW5hYmxlZCB2aWEgYENPTkZJR19ORl9GTE9XX1RBQkxFYC4gTm93LCBJIHNob3VsZCBoYXZlIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqLS4qaXBpcC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX0lQX01ST1VURV9DT01NT04pICYjNDM7PSBpcG1yX2Jhc2Uub1xubmV0L2lwdjQvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX05FVF9JUElQKSAmIzQzOz0gaXBpcC5vXG5uZXQvaXB2NC9NYWtlZmlsZS0yNi1ncmUteSA6PSBncmVfZGVtdXgub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzQ3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGF0OgoKKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gVmFyaWFibGU6IGBDT05GSUdfTkVUX0lQSVBgKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIGBDT05GSUdfTkVUX0lQSVBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCwgYXMgYW4gZXhwZXJ0IGluIG5ldHdvcmtpbmcsIGlzIHRoYXQgdGhpcyB2YXJpYWJsZSBsaWtlbHkgY29udHJvbHMgdGhlIGF2YWlsYWJpbGl0eSBvciBmdW5jdGlvbmFsaXR5IG9mIElQSVAgKElQLWluLUlQKSB0dW5uZWxpbmcgd2l0aGluIGEgc3lzdGVtJiMzOTtzIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gSSBrbm93IElQSVAsIGFuZCBJIGtub3cgaXQmIzM5O3MgYSByZWxhdGl2ZWx5IHNpbXBsZSwgeWV0IGZvdW5kYXRpb25hbCwgbWV0aG9kIGZvciBlbmNhcHN1bGF0aW5nIElQIHBhY2tldHMgaW5zaWRlIG90aGVyIElQIHBhY2tldHMuIFNvLCBlbmFibGluZyB0aGlzIHdvdWxkIHByb3ZpZGUgYSBiYXNpYyB3YXkgdG8gZXN0YWJsaXNoIHR1bm5lbHMsIHBvdGVudGlhbGx5IGFsbG93aW5nIGZvciB0aGUgY3JlYXRpb24gb2YgdmlydHVhbCBuZXR3b3JrcywgYnlwYXNzaW5nIG5ldHdvcmsgcmVzdHJpY3Rpb25zLCBvciBleHRlbmRpbmcgYSBuZXR3b3JrIGFjcm9zcyBkaXNwYXJhdGUgc2VnbWVudHMuIEkmIzM5O20gaW1tZWRpYXRlbHkgY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBmb3Igcm91dGluZyB0YWJsZXMsIE1UVSBjb25zaWRlcmF0aW9ucyAodGhlIGVuY2Fwc3VsYXRlZCBwYWNrZXQgbmVlZHMgdG8gZml0KSwgYW5kIHBvdGVudGlhbCBvdmVyaGVhZCBmcm9tIHRoZSBhZGRlZCBoZWFkZXJzLiBJJiMzOTttIGFsc28gdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyDigJMgZG9lcyBlbmFibGluZyB0aGlzIGV4cG9zZSB2dWxuZXJhYmlsaXRpZXMgaWYgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHksIGdpdmVuIHRoYXQgdGhlIHVuZGVybHlpbmcgcGFja2V0cyBhcmUgZW5jYXBzdWxhdGVkIGFuZCBtYXkgb2JzY3VyZSBpbmZvcm1hdGlvbiBmcm9tIGJhc2ljIGZpcmV3YWxscyBvciBpbnRydXNpb24gZGV0ZWN0aW9uIHN5c3RlbXM/IEFuZCBJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IGl0cyByZWxhdGlvbnNoaXAgd2l0aCBvdGhlciB0dW5uZWxpbmcgb3IgVlBOIHRlY2hub2xvZ2llcywgc3VjaCBhcyBHUkUgb3IgVlhMQU4sIHdvbmRlcmluZyBhYm91dCBpdHMgc3RyZW5ndGhzIGFuZCB3ZWFrbmVzc2VzIGNvbXBhcmVkIHRvIHRoZXNlIGFsdGVybmF0aXZlcyBpbiB0ZXJtcyBvZiBmZWF0dXJlcywgc2NhbGFiaWxpdHksIGFuZCBwZXJmb3JtYW5jZS4gSW4gc2hvcnQsIGl0JiMzOTtzIGEgYmFzaWMgYW5kIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIGZvciBuZXR3b3JraW5nIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotLipzaXQubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlPTQwPW9iai0kKENPTkZJR19JUFY2X1ZUSSkgJiM0Mzs9IGlwNl92dGkub1xubmV0L2lwdjYvTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX0lQVjZfU0lUKSAmIzQzOz0gc2l0Lm9cbm5ldC9pcHY2L01ha2VmaWxlLTQyLW9iai0kKENPTkZJR19JUFY2X1RVTk5FTCkgJiM0Mzs9IGlwNl90dW5uZWwub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTYxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWd1cmF0aW9uczoKCioqRGVlcCBEaXZlIG9uIElQdjYgVHVubmVsaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byBgQ09ORklHX0lQVjZfU0lUYCBhbmQgYENPTkZJR19JUFY2X1RVTk5FTGAuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCwgYXJlbiYjMzk7dCB0aGV5PyBUaGV5IHJlcHJlc2VudCB0aGUgY29yZSBtZWNoYW5pc21zIGZvciBlbmNhcHN1bGF0aW5nIElQdjYgdHJhZmZpYyB3aXRoaW4gYW4gSVB2NCBuZXR3b3JrLCByaWdodD8gYENPTkZJR19JUFY2X1NJVGAgc3BlY2lmaWNhbGx5IGZsYWdzIHN1cHBvcnQgZm9yIFNpbXBsZSBJbnRlcm5ldCBUcmFuc2l0aW9uIChTSVQpIHR1bm5lbHMuIFNvLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGF0IGNsYXNzaWMgNmluNCBzZXR1cC4KCkFuZCBvZiBjb3Vyc2UsIGBDT05GSUdfSVBWNl9UVU5ORUxgIGlzIHRoZSBicm9hZGVyIG9wdGlvbi4gSXQmIzM5O3MgdGhlIGVuYWJsaW5nIGZsYWcgZm9yIHZhcmlvdXMgdHVubmVsaW5nIG1ldGhvZHMsIG5vdCBqdXN0IFNJVC4gV2UgY291bGQgYmUgZGVhbGluZyB3aXRoIGdlbmVyaWMgdHVubmVscywgb3RoZXIgZW5jYXBzdWxhdGlvbiBtZXRob2RzLCBwb3RlbnRpYWxseSBHUkUgb3IgZXZlbiBtb3JlIGFkdmFuY2VkIHR1bm5lbGluZyBwcm90b2NvbHMuIE5vdywgYW4gaW50ZXJlc3RpbmcgcXVlc3Rpb24gYXJpc2VzIOKAkyBhcmUgdGhlc2Ugc2V0dGluZ3MgbXV0dWFsbHkgZXhjbHVzaXZlLCBvciBkbyB0aGV5IGJ1aWxkIHVwb24gZWFjaCBvdGhlciBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbj8gVGhhdCB3YXJyYW50cyBtb3JlIHJlc2VhcmNoLiBUaGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgbmV0d29yayBpbnRlcm9wZXJhYmlsaXR5IGFuZCByb3V0ZSBtYW5hZ2VtZW50IGFyZSBjb25zaWRlcmFibGUuIEkgbmVlZCB0byBrZWVwIHRoZXNlIGNvbmNlcHRzIHN0cmFpZ2h0IHdoZW4gY29uc2lkZXJpbmcgY29uZmlndXJhdGlvbiBvciBpbXBsZW1lbnRhdGlvbi4gVGhlIGRldmlsIGlzIGNlcnRhaW5seSBpbiB0aGUgZGV0YWlscyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai0uKm5mX2Zsb3dfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTM5PW9iai0kKENPTkZJR19ORlRfRldEX05FVERFVilcdCYjNDM7PSBuZnRfZndkX25ldGRldi5vXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDEtIyBmbG93IHRhYmxlIGluZnJhc3RydWN0dXJlXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0MjpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRSlcdCYjNDM7PSBuZl9mbG93X3RhYmxlLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQzLW5mX2Zsb3dfdGFibGUtb2Jqc1x0XHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE1MT1lbmRpZlxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNTItXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1MzpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUKSAmIzQzOz0gbmZfZmxvd190YWJsZV9pbmV0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTU0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjY2CgkJCQkJCQlvdXRwdXQ6IDI2MwoJCQkJCQkJdGhvdWdodHM6IDUyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0ZmlsdGVyIEZsb3cgVGFibGUgVHVubmVsIE9mZmxvYWQgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgQ09ORklHX05GX0ZMT1dfVEFCTEVgIGp1bXBzIG91dC4gU2VlbXMgbGlrZSB0aGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgdHVubmVsIG9mZmxvYWQgbG9naWMsIGdpdmVuIHRoZSBmdW5jdGlvbiBuYW1lcy4KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaGFuZGxlcyB0dW5uZWwgb2ZmbG9hZC4gSSBzaG91bGQgZGlnIGludG8gdGhlIGZ1bmN0aW9uIGNhbGxzIHdpdGhpbiB0aGlzIGFyZWE6IGBpcGlwNl90dW5uZWxfZmlsbF9mb3J3YXJkX3BhdGhgLCBgbmZfZmxvd190dW5uZWxfaXBfcHVzaGAsIGBuZl9mbG93X3R1bm5lbF9pcDZfcHVzaGAsIGBuZl9mbG93X3R1bm5lbF9wdXNoYCwgYG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXBgLCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgLCBgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aGAsIGFuZCBgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZWAuIFRoZXNlIGFyZSBhbGwgcHJldHR5IHRlbGxpbmcuCgpMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX05GX0ZMT1dfVEFCTEVfSU5FVGAgbG9va3MgbGlrZSBpdCBtaWdodCBiZSByZWxhdGVkIGFzIHdlbGwsIGFuZCBldmVuIGlmIHVuY2hhbmdlZCwgYENPTkZJR19ORVRfSVBHUkVgIGFsb25nc2lkZSBgaXBpcGAgYW5kIGBzaXRgIG1pZ2h0IGJlIGdvb2QgdG8gY29uc2lkZXIuCgpBZnRlciBhIHF1aWNrIHJldmlldywgSSBzZWUgdGhhdCB0aGlzIGlzIGludHJvZHVjaW5nIHN1cHBvcnQgZm9yIElQLWluLUlQLCBJUHY2LWluLUlQdjQgKFNJVCksIGFuZCBJUHY2LWluLUlQdjYgdHVubmVscyB3aXRoaW4gdGhlIG5ldGZpbHRlciBmbG93dGFibGUgb2ZmbG9hZC4gSXQmIzM5O3MgbW9kaWZ5aW5nIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljIGFuZCB0aGUgdHVubmVsIGRyaXZlcnMgdG8gaGFuZGxlIGZpbGxpbmcgdGhlIGZvcndhcmQgcGF0aCBhbmQgcHVzaGluZyB0aGUgdHVubmVsIGhlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZGlyZWN0bHkgdG91Y2hpbmcgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYywgc28gSSBoYXZlIHRvIHRyZWF0IHRoaXMgYXMgaGlnaCBwcmlvcml0eS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc6IHRydWVgIGFuZCB3aWxsIGZvY3VzIG9uIHRob3NlIGxpc3RlZCBzeW1ib2xzLiBBbmQsIEkgd2lsbCBlbmFibGU6IGBORl9GTE9XX1RBQkxFYCwgYE5FVF9JUElQYCwgYElQVjZfU0lUYCwgYW5kIGBJUFY2X1RVTk5FTGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O0lQVjZfU0lUJiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBpcDZfdHVubmVsX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdHVubmVsX2lwX3B1c2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd190dW5uZWxfaXA2X3B1c2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd190dW5uZWxfcHVzaCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfbG9va3VwJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfaXBfaG9vayYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rJiMzNDssCiAgICAmIzM0O25mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIElQLWluLUlQLCBTSVQgKElQdjYtaW4tSVB2NCksIGFuZCBJUHY2LWluLUlQdjYgdHVubmVscyBpbiB0aGUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBvZmZsb2FkLiBJdCBtb2RpZmllcyBjb3JlIG5ldGZpbHRlciBmbG93dGFibGUgbG9naWMgYW5kIHR1bm5lbCBkcml2ZXJzIHRvIHN1cHBvcnQgZmlsbGluZyB0aGUgZm9yd2FyZCBwYXRoIGFuZCBwdXNoaW5nIHR1bm5lbCBoZWFkZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O0lQVjZfU0lUJiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBpcDZfdHVubmVsX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdHVubmVsX2lwX3B1c2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd190dW5uZWxfaXA2X3B1c2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd190dW5uZWxfcHVzaCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfbG9va3VwJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfaXBfaG9vayYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rJiMzNDssCiAgICAmIzM0O25mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIElQLWluLUlQLCBTSVQgKElQdjYtaW4tSVB2NCksIGFuZCBJUHY2LWluLUlQdjYgdHVubmVscyBpbiB0aGUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBvZmZsb2FkLiBJdCBtb2RpZmllcyBjb3JlIG5ldGZpbHRlciBmbG93dGFibGUgbG9naWMgYW5kIHR1bm5lbCBkcml2ZXJzIHRvIHN1cHBvcnQgZmlsbGluZyB0aGUgZm9yd2FyZCBwYXRoIGFuZCBwdXNoaW5nIHR1bm5lbCBoZWFkZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6Mjg6MzEuOTc2Mjc0NTczWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3MzQxNjEzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkVUX0lQSVBcIixcbiAgICBcIklQVjZfU0lUXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwaXA2X3R1bm5lbF9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwibmZfZmxvd190dW5uZWxfaXBfcHVzaFwiLFxuICAgIFwibmZfZmxvd190dW5uZWxfaXA2X3B1c2hcIixcbiAgICBcIm5mX2Zsb3dfdHVubmVsX3B1c2hcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9sb29rdXBcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwX2hvb2tcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tcIixcbiAgICBcIm5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcIm5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIElQLWluLUlQLCBTSVQgKElQdjYtaW4tSVB2NCksIGFuZCBJUHY2LWluLUlQdjYgdHVubmVscyBpbiB0aGUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBvZmZsb2FkLiBJdCBtb2RpZmllcyBjb3JlIG5ldGZpbHRlciBmbG93dGFibGUgbG9naWMgYW5kIHR1bm5lbCBkcml2ZXJzIHRvIHN1cHBvcnQgZmlsbGluZyB0aGUgZm9yd2FyZCBwYXRoIGFuZCBwdXNoaW5nIHR1bm5lbCBoZWFkZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToyODozMS45NzYyODU4MTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTg5NDU2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRlNjkyODIzZDBjMGRjMmVmZDhhZjA5NGQ3MGU4OWNhMDgwMWZlNzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDE6Mjg6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcXG5pbmRleCBlN2M3ODI5MzAwMmFiYi4uMDZkMTI4YzY3YzhjNDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcXG5AQCAtMjc2LDcgKzI3Niw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X21hbmdsZV9pcHY0KGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXFxuK3N0YXRpYyBpbnQgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBjb25zdCB1OCAqYWRkciwgX19iZTE2IGV0aGVyX3R5cGUsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYWlyb2hhX3dkbWFfaW5mbyAqaW5mbylcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrO1xcbkBAIC0yODcsNyArMjg4LDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcXHUwMDI2c3RhY2spO1xcbitcXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBldGhlcl90eXBlLCBcXHUwMDI2c3RhY2spO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMzMxLDcgKzMzMiw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSAqaHdlLFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IGFpcm9oYV9mbG93X2RhdGEgKmRhdGEsXFxuLVxcdFxcdFxcdFxcdFxcdGludCBsNHByb3RvKVxcbitcXHRcXHRcXHRcXHRcXHRfX2JlMTYgZXRoZXJfdHlwZSwgaW50IGw0cHJvdG8pXFxuIHtcXG4gXFx0dTMyIHFkYXRhID0gRklFTERfUFJFUChBSVJPSEFfRk9FX1NIQVBFUl9JRCwgMHg3ZiksIHBvcnRzX3BhZCwgdmFsO1xcbiBcXHRpbnQgd2xhbl9ldHlwZSA9IC1FSU5WQUwsIGRzYV9wb3J0ID0gYWlyb2hhX2dldF9kc2FfcG9ydChcXHUwMDI2bmV0ZGV2KTtcXG5AQCAtMzU0LDcgKzM1NSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbiBcXHRcXHRzdHJ1Y3QgYWlyb2hhX3dkbWFfaW5mbyBpbmZvID0ge307XFxuIFxcbiBcXHRcXHRpZiAoIWFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhuZXRkZXYsIGRhdGEtXFx1MDAzZWV0aC5oX2Rlc3QsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZpbmZvKSkge1xcbitcXHRcXHRcXHRcXHRcXHQgICAgICBldGhlcl90eXBlLCBcXHUwMDI2aW5mbykpIHtcXG4gXFx0XFx0XFx0dmFsIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9JQjJfTkJRLCBpbmZvLmlkeCkgfFxcbiBcXHRcXHRcXHQgICAgICAgRklFTERfUFJFUChBSVJPSEFfRk9FX0lCMl9QU0VfUE9SVCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBGRV9QU0VfUE9SVF9DRE00KTtcXG5AQCAtMTA4MSw2ICsxMDgyLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuIFxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0O1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSBod2U7XFxuIFxcdGludCBlcnIsIGksIG9mZmxvYWRfdHlwZTtcXG4rXFx0X19iZTE2IGV0aGVyX3R5cGUgPSAwO1xcbiBcXHR1MTYgYWRkcl90eXBlID0gMDtcXG4gXFx0dTggbDRwcm90byA9IDA7XFxuIFxcbkBAIC0xMTA3LDYgKzExMDksNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4gXFx0XFx0c3RydWN0IGZsb3dfbWF0Y2hfYmFzaWMgbWF0Y2g7XFxuIFxcbiBcXHRcXHRmbG93X3J1bGVfbWF0Y2hfYmFzaWMocnVsZSwgXFx1MDAyNm1hdGNoKTtcXG4rXFx0XFx0ZXRoZXJfdHlwZSA9IG1hdGNoLmtleS1cXHUwMDNlbl9wcm90bztcXG4gXFx0XFx0bDRwcm90byA9IG1hdGNoLmtleS1cXHUwMDNlaXBfcHJvdG87XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5AQCAtMTE3Nyw3ICsxMTgwLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0ZXJyID0gYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShldGgsIFxcdTAwMjZod2UsIG9kZXYsIG9mZmxvYWRfdHlwZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmRhdGEsIGw0cHJvdG8pO1xcbitcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZGF0YSwgZXRoZXJfdHlwZSwgbDRwcm90byk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXFxuaW5kZXggY2M4YzRlZjgwMzhmMzAuLjI2MDFjMTdiMjljOGI5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcXG5AQCAtODksNyArODksOCBAQCBtdGtfZmxvd19vZmZsb2FkX21hbmdsZV9ldGgoY29uc3Qgc3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3QsIHZvaWQgKmV0aClcXG4gfVxcbiBcXG4gc3RhdGljIGludFxcbi1tdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbXRrX3dkbWFfaW5mbyAqaW5mbylcXG4rbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcXG4rXFx0XFx0ICAgICAgIF9fYmUxNiBldGhlcl90eXBlLCBzdHJ1Y3QgbXRrX3dkbWFfaW5mbyAqaW5mbylcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoO1xcbkBAIC0xMDIsNyArMTAzLDcgQEAgbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2lcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcXHUwMDI2c3RhY2spO1xcbitcXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBldGhlcl90eXBlLCBcXHUwMDI2c3RhY2spO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMTkwLDEyICsxOTEsMTIgQEAgbXRrX2Zsb3dfZ2V0X2RzYV9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICoqZGV2KVxcbiBzdGF0aWMgaW50XFxuIG10a19mbG93X3NldF9vdXRwdXRfZGV2aWNlKHN0cnVjdCBtdGtfZXRoICpldGgsIHN0cnVjdCBtdGtfZm9lX2VudHJ5ICpmb2UsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkZXN0X21hYyxcXG4tXFx0XFx0XFx0ICAgaW50ICp3ZWRfaW5kZXgpXFxuK1xcdFxcdFxcdCAgIF9fYmUxNiBldGhlcl90eXBlLCBpbnQgKndlZF9pbmRleClcXG4ge1xcbiBcXHRzdHJ1Y3QgbXRrX3dkbWFfaW5mbyBpbmZvID0ge307XFxuIFxcdGludCBwc2VfcG9ydCwgZHNhX3BvcnQsIHF1ZXVlO1xcbiBcXG4tXFx0aWYgKG10a19mbG93X2dldF93ZG1hX2luZm8oZGV2LCBkZXN0X21hYywgXFx1MDAyNmluZm8pID09IDApIHtcXG4rXFx0aWYgKG10a19mbG93X2dldF93ZG1hX2luZm8oZGV2LCBkZXN0X21hYywgZXRoZXJfdHlwZSwgXFx1MDAyNmluZm8pID09IDApIHtcXG4gXFx0XFx0bXRrX2ZvZV9lbnRyeV9zZXRfd2RtYShldGgsIGZvZSwgaW5mby53ZG1hX2lkeCwgaW5mby5xdWV1ZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGluZm8uYnNzLCBpbmZvLndjaWQsIGluZm8uYW1zZHUpO1xcbiBcXHRcXHRpZiAobXRrX2lzX25ldHN5c192Ml9vcl9ncmVhdGVyKGV0aCkpIHtcXG5AQCAtMjczLDYgKzI3NCw3IEBAIG10a19mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqZixcXG4gXFx0c3RydWN0IG10a19mbG93X2RhdGEgZGF0YSA9IHt9O1xcbiBcXHRzdHJ1Y3QgbXRrX2ZvZV9lbnRyeSBmb2U7XFxuIFxcdHN0cnVjdCBtdGtfZmxvd19lbnRyeSAqZW50cnk7XFxuK1xcdF9fYmUxNiBldGhlcl90eXBlID0gMDtcXG4gXFx0aW50IG9mZmxvYWRfdHlwZSA9IDA7XFxuIFxcdGludCB3ZWRfaW5kZXggPSAtMTtcXG4gXFx0dTE2IGFkZHJfdHlwZSA9IDA7XFxuQEAgLTMxOSw2ICszMjEsNyBAQCBtdGtfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmYsXFxuIFxcdFxcdHN0cnVjdCBmbG93X21hdGNoX2Jhc2ljIG1hdGNoO1xcbiBcXG4gXFx0XFx0Zmxvd19ydWxlX21hdGNoX2Jhc2ljKHJ1bGUsIFxcdTAwMjZtYXRjaCk7XFxuK1xcdFxcdGV0aGVyX3R5cGUgPSBtYXRjaC5rZXktXFx1MDAzZW5fcHJvdG87XFxuIFxcdFxcdGw0cHJvdG8gPSBtYXRjaC5rZXktXFx1MDAzZWlwX3Byb3RvO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuQEAgLTQ4MSw3ICs0ODQsNyBAQCBtdGtfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmYsXFxuIFxcdFxcdG10a19mb2VfZW50cnlfc2V0X3BwcG9lKGV0aCwgXFx1MDAyNmZvZSwgZGF0YS5wcHBvZS5zaWQpO1xcbiBcXG4gXFx0ZXJyID0gbXRrX2Zsb3dfc2V0X291dHB1dF9kZXZpY2UoZXRoLCBcXHUwMDI2Zm9lLCBvZGV2LCBkYXRhLmV0aC5oX2Rlc3QsXFxuLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2d2VkX2luZGV4KTtcXG4rXFx0XFx0XFx0XFx0XFx0IGV0aGVyX3R5cGUsIFxcdTAwMjZ3ZWRfaW5kZXgpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5pbmRleCA5OTgxZDYzN2Y4YjU0Ni4uNDVkOTllMTFiMDZlMmUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5AQCAtOTAyLDYgKzkwMiw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgge1xcbiBcXHRcXHRcXHR9O1xcbiBcXG4gXFx0XFx0XFx0dThcXHRsM19wcm90bztcXG4rXFx0XFx0XFx0dThcXHRlbmNhcF9wcm90bztcXG4gXFx0XFx0fSB0dW47XFxuIFxcdFxcdHN0cnVjdCB7XFxuIFxcdFxcdFxcdGVudW0ge1xcbkBAIC05MzgsNiArOTM5LDcgQEAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayB7XFxuIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IHtcXG4gXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gXFx0dThcXHRcXHRcXHRkYWRkcltFVEhfQUxFTl07XFxuK1xcdF9fYmUxNlxcdFxcdFxcdGV0aGVyX3R5cGU7XFxuIFxcbiBcXHRpbnRcXHRcXHRcXHRudW1fdmxhbnM7XFxuIFxcdHN0cnVjdCB7XFxuQEAgLTM0MjAsNyArMzQyMiw4IEBAIHZvaWQgZGV2X3JlbW92ZV9vZmZsb2FkKHN0cnVjdCBwYWNrZXRfb2ZmbG9hZCAqcG8pO1xcbiBcXG4gaW50IGRldl9nZXRfaWZsaW5rKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xcbi1pbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG4raW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgIGNvbnN0IHU4ICpkYWRkciwgX19iZTE2IGV0aGVyX3R5cGUsXFxuIFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XFxuIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWVfcmN1KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFxuaW5kZXggN2IyM2IyNDVhNWE4NmEuLjRkNDA2ODAxZWM5MDE1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFxuQEAgLTExOCw2ICsxMTgsNyBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB7XFxuIFxcdH07XFxuIFxcbiBcXHR1OFxcdGwzX3Byb3RvO1xcbitcXHR1OFxcdGVuY2FwX3Byb3RvO1xcbiB9O1xcbiBcXG4gc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcXG5pbmRleCA0YjNkNWNmZGY2ZTAwZi4uOWY1YTJkYTllOWY3NzQgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcXG4rKysgYi9uZXQvY29yZS9kZXYuY1xcbkBAIC03NTAsMTIgKzc1MCwxNCBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqZGV2X2Z3ZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbiBcXHRyZXR1cm4gXFx1MDAyNnN0YWNrLVxcdTAwM2VwYXRoW2tdO1xcbiB9XFxuIFxcbi1pbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG4raW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgIGNvbnN0IHU4ICpkYWRkciwgX19iZTE2IGV0aGVyX3R5cGUsXFxuIFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmxhc3RfZGV2O1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XFxuLVxcdFxcdC5kZXZcXHQ9IGRldixcXG4rXFx0XFx0LmRldlxcdFxcdD0gZGV2LFxcbitcXHRcXHQuZXRoZXJfdHlwZVxcdD0gZXRoZXJfdHlwZSxcXG4gXFx0fTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcXG4gXFx0aW50IHJldCA9IDA7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuY1xcbmluZGV4IGI2NDMxOTRmNTdkMjlmLi45ZjdiMmJkYWJlZjA2YiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pcGlwLmNcXG4rKysgYi9uZXQvaXB2NC9pcGlwLmNcXG5AQCAtMzY5LDYgKzM2OSw3IEBAIHN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbiBcXHRwYXRoLVxcdTAwM2V0dW4uc3JjX3Y0LnNfYWRkciA9IHRpcGgtXFx1MDAzZXNhZGRyO1xcbiBcXHRwYXRoLVxcdTAwM2V0dW4uZHN0X3Y0LnNfYWRkciA9IHRpcGgtXFx1MDAzZWRhZGRyO1xcbiBcXHRwYXRoLVxcdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQSVA7XFxuK1xcdHBhdGgtXFx1MDAzZXR1bi5lbmNhcF9wcm90byA9IEFGX0lORVQ7XFxuIFxcdHBhdGgtXFx1MDAzZWRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbiBcXG4gXFx0Y3R4LVxcdTAwM2VkZXYgPSBydC1cXHUwMDNlZHN0LmRldjtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXFxuaW5kZXggYmY4ZTQwYWY2MGIwODMuLmExMjFmNzE1YWZkMmNkIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbkBAIC0xODYzLDcgKzE4NjMsMTEgQEAgc3RhdGljIGludCBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuIFxcdFxcdHBhdGgtXFx1MDAzZXR5cGUgPSBERVZfUEFUSF9UVU47XFxuIFxcdFxcdHBhdGgtXFx1MDAzZXR1bi5zcmNfdjYgPSB0LVxcdTAwM2VwYXJtcy5sYWRkcjtcXG4gXFx0XFx0cGF0aC1cXHUwMDNldHVuLmRzdF92NiA9IHQtXFx1MDAzZXBhcm1zLnJhZGRyO1xcbi1cXHRcXHRwYXRoLVxcdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7XFxuK1xcdFxcdHBhdGgtXFx1MDAzZXR1bi5lbmNhcF9wcm90byA9IEFGX0lORVQ2O1xcbitcXHRcXHRpZiAoY3R4LVxcdTAwM2VldGhlcl90eXBlID09IGNwdV90b19iZTE2KEVUSF9QX0lQKSlcXG4rXFx0XFx0XFx0cGF0aC1cXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBhdGgtXFx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjtcXG4gXFx0XFx0cGF0aC1cXHUwMDNlZGV2ID0gY3R4LVxcdTAwM2VkZXY7XFxuIFxcdFxcdGN0eC1cXHUwMDNlZGV2ID0gZHN0LVxcdTAwM2VkZXY7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuY1xcbmluZGV4IGEzOGIyNGZiODM4NDI0Li5lYWQzMjdjMzJkZjI0NSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9zaXQuY1xcbisrKyBiL25ldC9pcHY2L3NpdC5jXFxuQEAgLTEzNjUsNiArMTM2NSw1NiBAQCBpcGlwNl90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgaXBpcDZfdHVubmVsX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcXG4re1xcbitcXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihjdHgtXFx1MDAzZWRldik7XFxuK1xcdGNvbnN0IHN0cnVjdCBpcGhkciAqdGlwaCA9IFxcdTAwMjZ0dW5uZWwtXFx1MDAzZXBhcm1zLmlwaDtcXG4rXFx0c3RydWN0IHJ0YWJsZSAqcnQ7XFxuK1xcbitcXHQvKiBOQk1BIHR1bm5lbHMgKElTQVRBUCwgNnRvNCwgNnJkKSByZXNvbHZlIHRoZSBvdXRlciBkZXN0aW5hdGlvblxcbitcXHQgKiBwZXItcGFja2V0IGZyb20gdGhlIGlubmVyIElQdjYgYWRkcmVzczsgbm90IG9mZmxvYWRhYmxlLlxcbitcXHQgKi9cXG4rXFx0aWYgKCF0aXBoLVxcdTAwM2VkYWRkcilcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0LyogRk9VL0dVRSBlbmNhcHN1bGF0aW9uIGlzIGhhbmRsZWQgaW4gdGhlIHNsb3cgcGF0aCBieVxcbitcXHQgKiBpcF90dW5uZWxfZW5jYXAoKTsgdGhlIGZhc3QgcGF0aCBvbmx5IHB1c2hlcyBhIHBsYWluXFxuK1xcdCAqIElQdjQgaGVhZGVyIGFuZCB3b3VsZCBza2lwIHRoZSBVRFAgZW5jYXBzdWxhdGlvbi5cXG4rXFx0ICovXFxuK1xcdGlmICh0dW5uZWwtXFx1MDAzZWVuY2FwLnR5cGUgIT0gVFVOTkVMX0VOQ0FQX05PTkUpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJ0ID0gaXBfcm91dGVfb3V0cHV0KGRldl9uZXQoY3R4LVxcdTAwM2VkZXYpLCB0aXBoLVxcdTAwM2VkYWRkciwgdGlwaC1cXHUwMDNlc2FkZHIsXFxuK1xcdFxcdFxcdCAgICAgaW5ldF9kc2ZpZWxkX3RvX2RzY3AodGlwaC1cXHUwMDNldG9zKSxcXG4rXFx0XFx0XFx0ICAgICB0dW5uZWwtXFx1MDAzZXBhcm1zLmxpbmssIFJUX1NDT1BFX1VOSVZFUlNFKTtcXG4rXFx0aWYgKElTX0VSUihydCkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHJ0KTtcXG4rXFxuK1xcdHBhdGgtXFx1MDAzZXR5cGUgPSBERVZfUEFUSF9UVU47XFxuK1xcdHBhdGgtXFx1MDAzZXR1bi5zcmNfdjQuc19hZGRyID0gdGlwaC1cXHUwMDNlc2FkZHI7XFxuK1xcdHBhdGgtXFx1MDAzZXR1bi5kc3RfdjQuc19hZGRyID0gdGlwaC1cXHUwMDNlZGFkZHI7XFxuK1xcdHBhdGgtXFx1MDAzZXR1bi5lbmNhcF9wcm90byA9IEFGX0lORVQ7XFxuK1xcdHBhdGgtXFx1MDAzZWRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbitcXG4rXFx0c3dpdGNoIChjdHgtXFx1MDAzZWV0aGVyX3R5cGUpIHtcXG4rXFx0Y2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6XFxuK1xcdFxcdHBhdGgtXFx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6XFxuK1xcdFxcdHBhdGgtXFx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGlwX3J0X3B1dChydCk7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0Y3R4LVxcdTAwM2VkZXYgPSBydC1cXHUwMDNlZHN0LmRldjtcXG4rXFx0aXBfcnRfcHV0KHJ0KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50XFxuIGlwaXA2X3R1bm5lbF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcixcXG4gXFx0XFx0XFx0ICAgIHZvaWQgX191c2VyICpkYXRhLCBpbnQgY21kKVxcbkBAIC0xNDAxLDYgKzE0NTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwaXA2X25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fc2lvY2RldnByaXZhdGUgPSBpcGlwNl90dW5uZWxfc2lvY2RldnByaXZhdGUsXFxuIFxcdC5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxcbiBcXHQubmRvX3R1bm5lbF9jdGwgPSBpcGlwNl90dW5uZWxfY3RsLFxcbitcXHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoID0gaXBpcDZfdHVubmVsX2ZpbGxfZm9yd2FyZF9wYXRoLFxcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWQgaXBpcDZfZGV2X2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcXG5pbmRleCA5OWM1YjlkNjcxYTBjYS4uMThmODllNmZiNDM1NGQgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcXG5AQCAtNzYsOSArNzYsMTQgQEAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvd19vZmZsb2FkX2FsbG9jKHN0cnVjdCBuZl9jb25uICpjdClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYWxsb2MpO1xcbiBcXG4tc3RhdGljIHUzMiBmbG93X29mZmxvYWRfZHN0X2Nvb2tpZShzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpmbG93X3R1cGxlKVxcbitzdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9kc3RfY29va2llKHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZsb3dfdHVwbGUsXFxuK1xcdFxcdFxcdFxcdCAgIHU4IHR1bl9lbmNhcF9wcm90bylcXG4ge1xcbi1cXHRpZiAoZmxvd190dXBsZS1cXHUwMDNlbDNwcm90byA9PSBORlBST1RPX0lQVjYpXFxuK1xcdGJvb2wgZHN0X3Y2O1xcbitcXG4rXFx0ZHN0X3Y2ID0gdHVuX2VuY2FwX3Byb3RvID8gdHVuX2VuY2FwX3Byb3RvID09IE5GUFJPVE9fSVBWNlxcbitcXHRcXHRcXHRcXHQgOiBmbG93X3R1cGxlLVxcdTAwM2VsM3Byb3RvID09IE5GUFJPVE9fSVBWNjtcXG4rXFx0aWYgKGRzdF92NilcXG4gXFx0XFx0cmV0dXJuIHJ0Nl9nZXRfY29va2llKGRzdF9ydDZfaW5mbyhmbG93X3R1cGxlLVxcdTAwM2Vkc3RfY2FjaGUpKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC05OSwxMCArMTA0LDEyIEBAIHN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2ZpbGxfcm91dGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4gXFx0XFx0XFx0XFx0ICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcXG4ge1xcbiBcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpmbG93X3R1cGxlID0gXFx1MDAyNmZsb3ctXFx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlO1xcbitcXHR1OCBsM3Byb3RvLCBlbmNhcF9wcm90byA9IHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uZW5jYXBfcHJvdG87XFxuIFxcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IG5mdF9yb3V0ZV9kc3RfZmV0Y2gocm91dGUsIGRpcik7XFxuIFxcdGludCBpLCBqID0gMDtcXG4gXFxuLVxcdHN3aXRjaCAoZmxvd190dXBsZS1cXHUwMDNlbDNwcm90bykge1xcbitcXHRsM3Byb3RvID0gZW5jYXBfcHJvdG8gPyBlbmNhcF9wcm90byA6IGZsb3dfdHVwbGUtXFx1MDAzZWwzcHJvdG87XFxuK1xcdHN3aXRjaCAobDNwcm90bykge1xcbiBcXHRjYXNlIE5GUFJPVE9fSVBWNDpcXG4gXFx0XFx0Zmxvd190dXBsZS1cXHUwMDNlbXR1ID0gaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKGRzdCwgdHJ1ZSk7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0xMzgsNyArMTQ1LDggQEAgc3RhdGljIGludCBmbG93X29mZmxvYWRfZmlsbF9yb3V0ZShzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbiBcXHRjYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIOlxcbiBcXHRcXHRmbG93X3R1cGxlLVxcdTAwM2VpZmlkeCA9IHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLm91dC5pZmluZGV4O1xcbiBcXHRcXHRmbG93X3R1cGxlLVxcdTAwM2Vkc3RfY2FjaGUgPSBkc3Q7XFxuLVxcdFxcdGZsb3dfdHVwbGUtXFx1MDAzZWRzdF9jb29raWUgPSBmbG93X29mZmxvYWRfZHN0X2Nvb2tpZShmbG93X3R1cGxlKTtcXG4rXFx0XFx0Zmxvd190dXBsZS1cXHUwMDNlZHN0X2Nvb2tpZSA9IGZsb3dfb2ZmbG9hZF9kc3RfY29va2llKGZsb3dfdHVwbGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBlbmNhcF9wcm90byk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcXG5pbmRleCAyOWU5M2FjMWUyZTQwMC4uNDQ5ODE4ZGNlZjNjN2UgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xcbkBAIC0xOTEsMjUgKzE5MSwyNyBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X3R1cGxlX2VuY2FwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbi1cXHRzd2l0Y2ggKGlubmVyX3Byb3RvKSB7XFxuLVxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbi1cXHRcXHRpcGggPSAoc3RydWN0IGlwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgb2Zmc2V0KTtcXG4tXFx0XFx0aWYgKGN0eC1cXHUwMDNldHVuLnByb3RvID09IElQUFJPVE9fSVBJUCkge1xcbitcXHRpZiAoY3R4LVxcdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQIHx8IGN0eC1cXHUwMDNldHVuLnByb3RvID09IElQUFJPVE9fSVBWNikge1xcbitcXHRcXHRzd2l0Y2ggKGlubmVyX3Byb3RvKSB7XFxuK1xcdFxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbitcXHRcXHRcXHRpcGggPSAoc3RydWN0IGlwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG9mZnNldCk7XFxuIFxcdFxcdFxcdHR1cGxlLVxcdTAwM2V0dW4uZHN0X3Y0LnNfYWRkciA9IGlwaC1cXHUwMDNlZGFkZHI7XFxuIFxcdFxcdFxcdHR1cGxlLVxcdTAwM2V0dW4uc3JjX3Y0LnNfYWRkciA9IGlwaC1cXHUwMDNlc2FkZHI7XFxuLVxcdFxcdFxcdHR1cGxlLVxcdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQSVA7XFxuLVxcdFxcdH1cXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuLVxcdFxcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzZXQpO1xcbi1cXHRcXHRpZiAoY3R4LVxcdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7XFxuK1xcdFxcdFxcdHR1cGxlLVxcdTAwM2V0dW4ubDNfcHJvdG8gPSBjdHgtXFx1MDAzZXR1bi5wcm90bztcXG4rXFx0XFx0XFx0dHVwbGUtXFx1MDAzZXR1bi5lbmNhcF9wcm90byA9IEFGX0lORVQ7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbitcXHRcXHRcXHRpcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBvZmZzZXQpO1xcbiBcXHRcXHRcXHR0dXBsZS1cXHUwMDNldHVuLmRzdF92NiA9IGlwNmgtXFx1MDAzZWRhZGRyO1xcbiBcXHRcXHRcXHR0dXBsZS1cXHUwMDNldHVuLnNyY192NiA9IGlwNmgtXFx1MDAzZXNhZGRyO1xcbi1cXHRcXHRcXHR0dXBsZS1cXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2O1xcbitcXHRcXHRcXHR0dXBsZS1cXHUwMDNldHVuLmwzX3Byb3RvID0gY3R4LVxcdTAwM2V0dW4ucHJvdG87XFxuK1xcdFxcdFxcdHR1cGxlLVxcdTAwM2V0dW4uZW5jYXBfcHJvdG8gPSBBRl9JTkVUNjtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRicmVhaztcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0zMzYsNyArMzM4LDcgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdGlmIChpcGgtXFx1MDAzZXR0bCBcXHUwMDNjPSAxKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRpZiAoaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lQSVApIHtcXG4rXFx0aWYgKGlwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUElQIHx8IGlwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUFY2KSB7XFxuIFxcdFxcdGN0eC1cXHUwMDNldHVuLnByb3RvID0gaXBoLVxcdTAwM2Vwcm90b2NvbDtcXG4gXFx0XFx0Y3R4LVxcdTAwM2V0dW4uaGRyX3NpemUgPSBzaXplO1xcbiBcXHRcXHRjdHgtXFx1MDAzZW9mZnNldCArPSBjdHgtXFx1MDAzZXR1bi5oZHJfc2l6ZTtcXG5AQCAtMzYxLDcgKzM2Myw3IEBAIHN0YXRpYyBib29sIG5mX2Zsb3dfaXA2X3R1bm5lbF9wcm90byhzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbiBcXHRpZiAoaXB2Nl9leHRfaGRyKGlwNmgtXFx1MDAzZW5leHRoZHIpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRpZiAoaXA2aC1cXHUwMDNlbmV4dGhkciA9PSBJUFBST1RPX0lQVjYpIHtcXG4rXFx0aWYgKGlwNmgtXFx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JUElQIHx8IGlwNmgtXFx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JUFY2KSB7XFxuIFxcdFxcdGN0eC1cXHUwMDNldHVuLnByb3RvID0gaXA2aC1cXHUwMDNlbmV4dGhkcjtcXG4gXFx0XFx0Y3R4LVxcdTAwM2V0dW4uaGRyX3NpemUgPSBzaXplb2YoKmlwNmgpO1xcbiBcXHRcXHRjdHgtXFx1MDAzZW9mZnNldCArPSBjdHgtXFx1MDAzZXR1bi5oZHJfc2l6ZTtcXG5AQCAtMzgyLDYgKzM4NCwxMCBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X2lwX3R1bm5lbF9wb3Aoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gXFxuIFxcdHNrYl9wdWxsKHNrYiwgY3R4LVxcdTAwM2V0dW4uaGRyX3NpemUpO1xcbiBcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4rXFx0aWYgKGN0eC1cXHUwMDNldHVuLnByb3RvID09IElQUFJPVE9fSVBJUClcXG4rXFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIG5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuQEAgLTQ1OCwyMSArNDY0LDYgQEAgc3RhdGljIHZvaWQgbmZfZmxvd19lbmNhcF9wb3Aoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gXFx0XFx0bmZfZmxvd19pcF90dW5uZWxfcG9wKGN0eCwgc2tiKTtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbi1uZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi17XFxuLVxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcXG4tXFxuLVxcdGlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woY3R4LCBza2IsIGh0b25zKEVUSF9QX0lQKSkpXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbi1cXG4tXFx0aWYgKG5mX2Zsb3dfdHVwbGVfaXAoY3R4LCBza2IsIFxcdTAwMjZ0dXBsZSkgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFxuLVxcdHJldHVybiBmbG93X29mZmxvYWRfbG9va3VwKGZsb3dfdGFibGUsIFxcdTAwMjZ0dXBsZSk7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxcbkBAIC00ODcsOCArNDc4LDE2IEBAIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gXFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcXG4gXFxuIFxcdG10dSA9IGZsb3ctXFx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlLm10dSArIGN0eC1cXHUwMDNlb2Zmc2V0O1xcbi1cXHRpZiAoZmxvdy1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXFxuK1xcdHN3aXRjaCAoZmxvdy1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bi5lbmNhcF9wcm90bykge1xcbitcXHRjYXNlIEFGX0lORVQ6XFxuIFxcdFxcdG10dSAtPSBzaXplb2YoKmlwaCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEFGX0lORVQ2OlxcbitcXHRcXHRtdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAodW5saWtlbHkobmZfZmxvd19leGNlZWRzX210dShza2IsIG10dSkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtNTg4LDIzICs1ODcsMzcgQEAgc3RhdGljIGludCBuZl9mbG93X3BwcG9lX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGlkLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcGlwX3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXFxuLVxcdFxcdFxcdFxcdCAgICBfX2JlMzIgKmlwX2RhZGRyKVxcbitzdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwX3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxcbitcXHRcXHRcXHRcXHQgIF9fYmUzMiAqaXBfZGFkZHIpXFxuIHtcXG4tXFx0c3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIFxcdHN0cnVjdCBydGFibGUgKnJ0ID0gZHN0X3J0YWJsZSh0dXBsZS1cXHUwMDNlZHN0X2NhY2hlKTtcXG4tXFx0dTggdG9zID0gaXBoLVxcdTAwM2V0b3MsIHR0bCA9IGlwaC1cXHUwMDNldHRsO1xcbi1cXHRfX2JlMTYgZnJhZ19vZmYgPSBpcGgtXFx1MDAzZWZyYWdfb2ZmO1xcbi1cXHR1MzIgaGVhZHJvb20gPSBzaXplb2YoKmlwaCk7XFxuK1xcdF9fYmUxNiBmcmFnX29mZiA9IDA7XFxuK1xcdHN0cnVjdCBpcGhkciAqaXBoO1xcbitcXHR1OCB0b3MgPSAwLCB0dGw7XFxuK1xcdHUzMiBoZWFkcm9vbTtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmICh0dXBsZS1cXHUwMDNldHVuLmwzX3Byb3RvID09IElQUFJPVE9fSVBWNikge1xcbitcXHRcXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcXG4rXFxuK1xcdFxcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4rXFx0XFx0dG9zID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKTtcXG4rXFx0XFx0dHRsID0gaXA2aC1cXHUwMDNlaG9wX2xpbWl0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpcGggPSAoc3RydWN0IGlwaGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuK1xcdFxcdGZyYWdfb2ZmID0gaXBoLVxcdTAwM2VmcmFnX29mZjtcXG4rXFx0XFx0dG9zID0gaXBoLVxcdTAwM2V0b3M7XFxuK1xcdFxcdHR0bCA9IGlwaC1cXHUwMDNldHRsO1xcbitcXHR9XFxuK1xcbiBcXHRlcnIgPSBpcHR1bm5lbF9oYW5kbGVfb2ZmbG9hZHMoc2tiLCBTS0JfR1NPX0lQWElQNCk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRza2Jfc2V0X2lubmVyX2lwcHJvdG8oc2tiLCBJUFBST1RPX0lQSVApO1xcbi1cXHRoZWFkcm9vbSArPSBMTF9SRVNFUlZFRF9TUEFDRShydC1cXHUwMDNlZHN0LmRldikgKyBydC1cXHUwMDNlZHN0LmhlYWRlcl9sZW47XFxuK1xcdHNrYl9zZXRfaW5uZXJfaXBwcm90byhza2IsIHR1cGxlLVxcdTAwM2V0dW4ubDNfcHJvdG8pO1xcbitcXHRoZWFkcm9vbSA9IHNpemVvZigqaXBoKSArIExMX1JFU0VSVkVEX1NQQUNFKHJ0LVxcdTAwM2Vkc3QuZGV2KSArXFxuK1xcdFxcdCAgIHJ0LVxcdTAwM2Vkc3QuaGVhZGVyX2xlbjtcXG4gXFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgaGVhZHJvb20pO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbkBAIC02MTUsNiArNjI4LDcgQEAgc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcGlwX3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQvKiBQdXNoIGRvd24gYW5kIGluc3RhbGwgdGhlIElQIGhlYWRlci4gKi9cXG4gXFx0c2tiX3B1c2goc2tiLCBzaXplb2YoKmlwaCkpO1xcbiBcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4rXFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTtcXG4gXFxuIFxcdGlwaCA9IGlwX2hkcihza2IpO1xcbiBcXHRpcGgtXFx1MDAzZXZlcnNpb25cXHQ9IDQ7XFxuQEAgLTYzNCw1NiArNjQ4LDU3IEBAIHN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBpcF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfdjRfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLVxcdFxcdFxcdFxcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXFxuLVxcdFxcdFxcdFxcdCAgX19iZTMyICppcF9kYWRkcilcXG4te1xcbi1cXHRpZiAodHVwbGUtXFx1MDAzZXR1bl9udW0pXFxuLVxcdFxcdHJldHVybiBuZl9mbG93X3R1bm5lbF9pcGlwX3B1c2gobmV0LCBza2IsIHR1cGxlLCBpcF9kYWRkcik7XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcDZpcDZfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxcbi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW42X2FkZHIgKippcDZfZGFkZHIpXFxuK3N0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXA2X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGluNl9hZGRyICoqaXA2X2RhZGRyKVxcbiB7XFxuLVxcdHN0cnVjdCBpcHY2aGRyICppcDZoID0gKHN0cnVjdCBpcHY2aGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuLVxcdHN0cnVjdCBydGFibGUgKnJ0ID0gZHN0X3J0YWJsZSh0dXBsZS1cXHUwMDNlZHN0X2NhY2hlKTtcXG4tXFx0X191OCBkc2ZpZWxkID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKTtcXG4rXFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gdHVwbGUtXFx1MDAzZWRzdF9jYWNoZTtcXG4gXFx0c3RydWN0IGZsb3dpNiBmbDYgPSB7XFxuIFxcdFxcdC5kYWRkciA9IHR1cGxlLVxcdTAwM2V0dW4uc3JjX3Y2LFxcbiBcXHRcXHQuc2FkZHIgPSB0dXBsZS1cXHUwMDNldHVuLmRzdF92NixcXG4gXFx0XFx0LmZsb3dpNl9wcm90byA9IElQUFJPVE9fSVBWNixcXG4gXFx0fTtcXG4tXFx0dTggaG9wX2xpbWl0ID0gaXA2aC1cXHUwMDNlaG9wX2xpbWl0O1xcbitcXHR1OCBob3BfbGltaXQsIGRzZmllbGQ7XFxuK1xcdHN0cnVjdCBpcHY2aGRyICppcDZoO1xcbiBcXHRpbnQgZXJyLCBtdHU7XFxuIFxcdHUzMiBoZWFkcm9vbTtcXG4gXFxuK1xcdGlmICh0dXBsZS1cXHUwMDNldHVuLmwzX3Byb3RvID09IElQUFJPVE9fSVBJUCkge1xcbitcXHRcXHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4rXFxuK1xcdFxcdGRzZmllbGQgPSBpcHY0X2dldF9kc2ZpZWxkKGlwaCk7XFxuK1xcdFxcdGhvcF9saW1pdCA9IGlwaC1cXHUwMDNldHRsO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpcDZoID0gKHN0cnVjdCBpcHY2aGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuK1xcdFxcdGRzZmllbGQgPSBpcHY2X2dldF9kc2ZpZWxkKGlwNmgpO1xcbitcXHRcXHRob3BfbGltaXQgPSBpcDZoLVxcdTAwM2Vob3BfbGltaXQ7XFxuK1xcdH1cXG4rXFxuIFxcdGVyciA9IGlwdHVubmVsX2hhbmRsZV9vZmZsb2Fkcyhza2IsIFNLQl9HU09fSVBYSVA2KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdHNrYl9zZXRfaW5uZXJfaXBwcm90byhza2IsIElQUFJPVE9fSVBWNik7XFxuLVxcdGhlYWRyb29tID0gc2l6ZW9mKCppcDZoKSArIExMX1JFU0VSVkVEX1NQQUNFKHJ0LVxcdTAwM2Vkc3QuZGV2KSArXFxuLVxcdFxcdCAgIHJ0LVxcdTAwM2Vkc3QuaGVhZGVyX2xlbjtcXG4rXFx0c2tiX3NldF9pbm5lcl9pcHByb3RvKHNrYiwgdHVwbGUtXFx1MDAzZXR1bi5sM19wcm90byk7XFxuK1xcdGhlYWRyb29tID0gc2l6ZW9mKCppcDZoKSArIExMX1JFU0VSVkVEX1NQQUNFKGRzdC1cXHUwMDNlZGV2KSArXFxuK1xcdFxcdCAgIGRzdC1cXHUwMDNlaGVhZGVyX2xlbjtcXG4gXFx0ZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgaGVhZHJvb20pO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4gXFx0c2tiX3NjcnViX3BhY2tldChza2IsIHRydWUpO1xcbi1cXHRtdHUgPSBkc3RfbXR1KFxcdTAwMjZydC1cXHUwMDNlZHN0KSAtIHNpemVvZigqaXA2aCk7XFxuK1xcdG10dSA9IGRzdF9tdHUoZHN0KSAtIHNpemVvZigqaXA2aCk7XFxuIFxcdG10dSA9IG1heChtdHUsIElQVjZfTUlOX01UVSk7XFxuIFxcdHNrYl9kc3RfdXBkYXRlX3BtdHVfbm9fY29uZmlybShza2IsIG10dSk7XFxuIFxcbiBcXHRza2JfcHVzaChza2IsIHNpemVvZigqaXA2aCkpO1xcbiBcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4rXFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbiBcXG4gXFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XFxuIFxcdGlwNl9mbG93X2hkcihpcDZoLCBkc2ZpZWxkLFxcbiBcXHRcXHQgICAgIGlwNl9tYWtlX2Zsb3dsYWJlbChuZXQsIHNrYiwgZmw2LmZsb3dsYWJlbCwgdHJ1ZSwgXFx1MDAyNmZsNikpO1xcbiBcXHRpcDZoLVxcdTAwM2Vob3BfbGltaXQgPSBob3BfbGltaXQ7XFxuLVxcdGlwNmgtXFx1MDAzZW5leHRoZHIgPSBJUFBST1RPX0lQVjY7XFxuK1xcdGlwNmgtXFx1MDAzZW5leHRoZHIgPSB0dXBsZS1cXHUwMDNldHVuLmwzX3Byb3RvO1xcbiBcXHRpcDZoLVxcdTAwM2VkYWRkciA9IHR1cGxlLVxcdTAwM2V0dW4uc3JjX3Y2O1xcbiBcXHRpcDZoLVxcdTAwM2VzYWRkciA9IHR1cGxlLVxcdTAwM2V0dW4uZHN0X3Y2O1xcbiBcXHRpcHY2X2hkcihza2IpLVxcdTAwM2VwYXlsb2FkX2xlbiA9IGh0b25zKHNrYi1cXHUwMDNlbGVuIC0gc2l6ZW9mKCppcDZoKSk7XFxuQEAgLTY5NCwxNCArNzA5LDE4IEBAIHN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXA2aXA2X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF92Nl9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW42X2FkZHIgKippcDZfZGFkZHIpXFxuK3N0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcXG4rXFx0XFx0XFx0ICAgICAgIF9fYmUzMiAqaXBfZGFkZHIsIHN0cnVjdCBpbjZfYWRkciAqKmlwNl9kYWRkcilcXG4ge1xcbi1cXHRpZiAodHVwbGUtXFx1MDAzZXR1bl9udW0pXFxuLVxcdFxcdHJldHVybiBuZl9mbG93X3R1bm5lbF9pcDZpcDZfcHVzaChuZXQsIHNrYiwgdHVwbGUsIGlwNl9kYWRkcik7XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0c3dpdGNoICh0dXBsZS1cXHUwMDNldHVuLmVuY2FwX3Byb3RvKSB7XFxuK1xcdGNhc2UgQUZfSU5FVDpcXG4rXFx0XFx0cmV0dXJuIG5mX2Zsb3dfdHVubmVsX2lwX3B1c2gobmV0LCBza2IsIHR1cGxlLCBpcF9kYWRkcik7XFxuK1xcdGNhc2UgQUZfSU5FVDY6XFxuK1xcdFxcdHJldHVybiBuZl9mbG93X3R1bm5lbF9pcDZfcHVzaChuZXQsIHNrYiwgdHVwbGUsIGlwNl9kYWRkcik7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbmZfZmxvd19lbmNhcF9wdXNoKHN0cnVjdCBza19idWZmICpza2IsXFxuQEAgLTgwMSw4NiArODIwLDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9mbG93X3F1ZXVlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gTkZfU1RPTEVOO1xcbiB9XFxuIFxcbi11bnNpZ25lZCBpbnRcXG4tbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbi17XFxuLVxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG4tXFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XFxuLVxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlO1xcbi1cXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xcbi1cXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCBjdHggPSB7XFxuLVxcdFxcdC5pblxcdD0gc3RhdGUtXFx1MDAzZWluLFxcbi1cXHR9O1xcbi1cXHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcXG4tXFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcXG4tXFx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2g7XFxuLVxcdHN0cnVjdCBydGFibGUgKnJ0O1xcbi1cXHRfX2JlMzIgaXBfZGFkZHI7XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHR0dXBsZWhhc2ggPSBuZl9mbG93X29mZmxvYWRfbG9va3VwKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XFxuLVxcdGlmICghdHVwbGVoYXNoKVxcbi1cXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbi1cXG4tXFx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoXFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuLVxcdGVsc2UgaWYgKHJldCA9PSAwKVxcbi1cXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbi1cXG4tXFx0aWYgKHVubGlrZWx5KHR1cGxlaGFzaC1cXHUwMDNldHVwbGUueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX1hGUk0pKSB7XFxuLVxcdFxcdHJ0ID0gZHN0X3J0YWJsZSh0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XFxuLVxcdFxcdG1lbXNldChza2ItXFx1MDAzZWNiLCAwLCBzaXplb2Yoc3RydWN0IGluZXRfc2tiX3Bhcm0pKTtcXG4tXFx0XFx0SVBDQihza2IpLVxcdTAwM2VpaWYgPSBza2ItXFx1MDAzZWRldi1cXHUwMDNlaWZpbmRleDtcXG4tXFx0XFx0SVBDQihza2IpLVxcdTAwM2VmbGFncyA9IElQU0tCX0ZPUldBUkRFRDtcXG4tXFx0XFx0cmV0dXJuIG5mX2Zsb3dfeG1pdF94ZnJtKHNrYiwgc3RhdGUsIFxcdTAwMjZydC1cXHUwMDNlZHN0KTtcXG4tXFx0fVxcbi1cXG4tXFx0ZGlyID0gdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kaXI7XFxuLVxcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XFxuLVxcdG90aGVyX3R1cGxlID0gXFx1MDAyNmZsb3ctXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZTtcXG4tXFx0aXBfZGFkZHIgPSBvdGhlcl90dXBsZS1cXHUwMDNlc3JjX3Y0LnNfYWRkcjtcXG4tXFxuLVxcdGlmIChuZl9mbG93X3R1bm5lbF92NF9wdXNoKHN0YXRlLVxcdTAwM2VuZXQsIHNrYiwgb3RoZXJfdHVwbGUsIFxcdTAwMjZpcF9kYWRkcikgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gTkZfRFJPUDtcXG4tXFxuLVxcdHN3aXRjaCAodHVwbGVoYXNoLVxcdTAwM2V0dXBsZS54bWl0X3R5cGUpIHtcXG4tXFx0Y2FzZSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSDpcXG4tXFx0XFx0cnQgPSBkc3RfcnRhYmxlKHR1cGxlaGFzaC1cXHUwMDNldHVwbGUuZHN0X2NhY2hlKTtcXG4tXFx0XFx0eG1pdC5vdXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShzdGF0ZS1cXHUwMDNlbmV0LCB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmlmaWR4KTtcXG4tXFx0XFx0aWYgKCF4bWl0Lm91dGRldikge1xcbi1cXHRcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuLVxcdFxcdFxcdHJldHVybiBORl9EUk9QO1xcbi1cXHRcXHR9XFxuLVxcdFxcdG5laWdoID0gaXBfbmVpZ2hfZ3c0KHJ0LVxcdTAwM2Vkc3QuZGV2LCBydF9uZXh0aG9wKHJ0LCBpcF9kYWRkcikpO1xcbi1cXHRcXHRpZiAoSVNfRVJSKG5laWdoKSkge1xcbi1cXHRcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuLVxcdFxcdFxcdHJldHVybiBORl9EUk9QO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHhtaXQuZGVzdCA9IG5laWdoLVxcdTAwM2VoYTtcXG4tXFx0XFx0c2tiX2RzdF9zZXRfbm9yZWYoc2tiLCBcXHUwMDI2cnQtXFx1MDAzZWRzdCk7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX0RJUkVDVDpcXG4tXFx0XFx0eG1pdC5vdXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShzdGF0ZS1cXHUwMDNlbmV0LCB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLm91dC5pZmlkeCk7XFxuLVxcdFxcdGlmICgheG1pdC5vdXRkZXYpIHtcXG4tXFx0XFx0XFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xcbi1cXHRcXHRcXHRyZXR1cm4gTkZfRFJPUDtcXG4tXFx0XFx0fVxcbi1cXHRcXHR4bWl0LmRlc3QgPSB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLm91dC5oX2Rlc3Q7XFxuLVxcdFxcdHhtaXQuc291cmNlID0gdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5vdXQuaF9zb3VyY2U7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuLVxcdFxcdHJldHVybiBORl9EUk9QO1xcbi1cXHR9XFxuLVxcdHhtaXQudHVwbGUgPSBvdGhlcl90dXBsZTtcXG4tXFx0eG1pdC5uZWVkc19nc29fc2VnbWVudCA9IHR1cGxlaGFzaC1cXHUwMDNldHVwbGUubmVlZHNfZ3NvX3NlZ21lbnQ7XFxuLVxcbi1cXHRyZXR1cm4gbmZfZmxvd19xdWV1ZV94bWl0KHN0YXRlLVxcdTAwM2VuZXQsIHNrYiwgXFx1MDAyNnhtaXQpO1xcbi19XFxuLUVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKTtcXG4tXFxuIHN0YXRpYyB2b2lkIG5mX2Zsb3dfbmF0X2lwdjZfdGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZixcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBpbjZfYWRkciAqYWRkcixcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBpbjZfYWRkciAqbmV3X2FkZHIsXFxuQEAgLTEwNjUsOCArMTAwNCwxNiBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gXFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcXG4gXFxuIFxcdG10dSA9IGZsb3ctXFx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlLm10dSArIGN0eC1cXHUwMDNlb2Zmc2V0O1xcbi1cXHRpZiAoZmxvdy1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXFxuK1xcdHN3aXRjaCAoZmxvdy1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bi5lbmNhcF9wcm90bykge1xcbitcXHRjYXNlIEFGX0lORVQ6XFxuK1xcdFxcdG10dSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUZfSU5FVDY6XFxuIFxcdFxcdG10dSAtPSBzaXplb2YoKmlwNmgpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gXFxuIFxcdGlmICh1bmxpa2VseShuZl9mbG93X2V4Y2VlZHNfbXR1KHNrYiwgbXR1KSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xMTAwLDYgKzEwNDcsMjUgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqXFxuK25mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHt9O1xcbitcXG4rXFx0aWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChjdHgsIHNrYiwgaHRvbnMoRVRIX1BfSVApKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZiAoY3R4LVxcdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7XFxuK1xcdFxcdGlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsIFxcdTAwMjZ0dXBsZSkgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fSBlbHNlIGlmIChuZl9mbG93X3R1cGxlX2lwKGN0eCwgc2tiLCBcXHUwMDI2dHVwbGUpIFxcdTAwM2MgMCkge1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXFx1MDAyNnR1cGxlKTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbiBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuQEAgLTExMTAsMTIgKzEwNzYsMTE4IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbiBcXHRpZiAoIW5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKGN0eCwgc2tiLCBodG9ucyhFVEhfUF9JUFY2KSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0aWYgKG5mX2Zsb3dfdHVwbGVfaXB2NihjdHgsIHNrYiwgXFx1MDAyNnR1cGxlKSBcXHUwMDNjIDApXFxuK1xcdGlmIChjdHgtXFx1MDAzZXR1bi5wcm90byA9PSBJUFBST1RPX0lQSVApIHtcXG4rXFx0XFx0aWYgKG5mX2Zsb3dfdHVwbGVfaXAoY3R4LCBza2IsIFxcdTAwMjZ0dXBsZSkgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fSBlbHNlIGlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsIFxcdTAwMjZ0dXBsZSkgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcXHUwMDI2dHVwbGUpO1xcbiB9XFxuIFxcbit1bnNpZ25lZCBpbnRcXG4rbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG4rXFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XFxuK1xcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlO1xcbitcXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xcbitcXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCBjdHggPSB7XFxuK1xcdFxcdC5pblxcdD0gc3RhdGUtXFx1MDAzZWluLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcXG4rXFx0c3RydWN0IGluNl9hZGRyICppcDZfZGFkZHI7XFxuK1xcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxuK1xcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoO1xcbitcXHRzdHJ1Y3QgcnRhYmxlICpydDtcXG4rXFx0X19iZTMyIGlwX2RhZGRyO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2xvb2t1cChcXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xcbitcXHRpZiAoIXR1cGxlaGFzaClcXG4rXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4rXFxuK1xcdGlmIChjdHgudHVuLnByb3RvID09IElQUFJPVE9fSVBWNilcXG4rXFx0XFx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChcXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHNrYik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoXFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuK1xcdGVsc2UgaWYgKHJldCA9PSAwKVxcbitcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KHR1cGxlaGFzaC1cXHUwMDNldHVwbGUueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX1hGUk0pKSB7XFxuK1xcdFxcdHJ0ID0gZHN0X3J0YWJsZSh0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XFxuK1xcdFxcdG1lbXNldChza2ItXFx1MDAzZWNiLCAwLCBzaXplb2Yoc3RydWN0IGluZXRfc2tiX3Bhcm0pKTtcXG4rXFx0XFx0SVBDQihza2IpLVxcdTAwM2VpaWYgPSBza2ItXFx1MDAzZWRldi1cXHUwMDNlaWZpbmRleDtcXG4rXFx0XFx0SVBDQihza2IpLVxcdTAwM2VmbGFncyA9IElQU0tCX0ZPUldBUkRFRDtcXG4rXFx0XFx0cmV0dXJuIG5mX2Zsb3dfeG1pdF94ZnJtKHNrYiwgc3RhdGUsIFxcdTAwMjZydC1cXHUwMDNlZHN0KTtcXG4rXFx0fVxcbitcXG4rXFx0ZGlyID0gdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kaXI7XFxuK1xcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XFxuK1xcdG90aGVyX3R1cGxlID0gXFx1MDAyNmZsb3ctXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZTtcXG4rXFx0aXBfZGFkZHIgPSBvdGhlcl90dXBsZS1cXHUwMDNlc3JjX3Y0LnNfYWRkcjtcXG4rXFx0aXA2X2RhZGRyID0gXFx1MDAyNm90aGVyX3R1cGxlLVxcdTAwM2VzcmNfdjY7XFxuK1xcbitcXHRpZiAobmZfZmxvd190dW5uZWxfcHVzaChzdGF0ZS1cXHUwMDNlbmV0LCBza2IsIG90aGVyX3R1cGxlLCBcXHUwMDI2aXBfZGFkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZpcDZfZGFkZHIpIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuK1xcbitcXHRzd2l0Y2ggKHR1cGxlaGFzaC1cXHUwMDNldHVwbGUueG1pdF90eXBlKSB7XFxuK1xcdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfTkVJR0g6IHtcXG4rXFx0XFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0O1xcbitcXG4rXFx0XFx0eG1pdC5vdXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShzdGF0ZS1cXHUwMDNlbmV0LCB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmlmaWR4KTtcXG4rXFx0XFx0aWYgKCF4bWl0Lm91dGRldikge1xcbitcXHRcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuK1xcdFxcdFxcdHJldHVybiBORl9EUk9QO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChvdGhlcl90dXBsZS1cXHUwMDNldHVuLmVuY2FwX3Byb3RvID09IEFGX0lORVQ2IHx8XFxuK1xcdFxcdCAgICBjdHgudHVuLnByb3RvID09IElQUFJPVE9fSVBWNikge1xcbitcXHRcXHRcXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0NjtcXG4rXFxuK1xcdFxcdFxcdHJ0NiA9IGRzdF9ydDZfaW5mbyh0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XFxuK1xcdFxcdFxcdG5laWdoID0gaXBfbmVpZ2hfZ3c2KHJ0Ni1cXHUwMDNlZHN0LmRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBydDZfbmV4dGhvcChydDYsIGlwNl9kYWRkcikpO1xcbitcXHRcXHRcXHRkc3QgPSBcXHUwMDI2cnQ2LVxcdTAwM2Vkc3Q7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHJ0ID0gZHN0X3J0YWJsZSh0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XFxuK1xcdFxcdFxcdG5laWdoID0gaXBfbmVpZ2hfZ3c0KHJ0LVxcdTAwM2Vkc3QuZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHJ0X25leHRob3AocnQsIGlwX2RhZGRyKSk7XFxuK1xcdFxcdFxcdGRzdCA9IFxcdTAwMjZydC1cXHUwMDNlZHN0O1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChJU19FUlIobmVpZ2gpKSB7XFxuK1xcdFxcdFxcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcXG4rXFx0XFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuK1xcdFxcdH1cXG4rXFx0XFx0eG1pdC5kZXN0ID0gbmVpZ2gtXFx1MDAzZWhhO1xcbitcXHRcXHRza2JfZHN0X3NldF9ub3JlZihza2IsIGRzdCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUOlxcbitcXHRcXHR4bWl0Lm91dGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHN0YXRlLVxcdTAwM2VuZXQsIHR1cGxlaGFzaC1cXHUwMDNldHVwbGUub3V0LmlmaWR4KTtcXG4rXFx0XFx0aWYgKCF4bWl0Lm91dGRldikge1xcbitcXHRcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuK1xcdFxcdFxcdHJldHVybiBORl9EUk9QO1xcbitcXHRcXHR9XFxuK1xcdFxcdHhtaXQuZGVzdCA9IHR1cGxlaGFzaC1cXHUwMDNldHVwbGUub3V0LmhfZGVzdDtcXG4rXFx0XFx0eG1pdC5zb3VyY2UgPSB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLm91dC5oX3NvdXJjZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdFdBUk5fT05fT05DRSgxKTtcXG4rXFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuK1xcdH1cXG4rXFx0eG1pdC50dXBsZSA9IG90aGVyX3R1cGxlO1xcbitcXHR4bWl0Lm5lZWRzX2dzb19zZWdtZW50ID0gdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5uZWVkc19nc29fc2VnbWVudDtcXG4rXFxuK1xcdHJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQoc3RhdGUtXFx1MDAzZW5ldCwgc2tiLCBcXHUwMDI2eG1pdCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19vZmZsb2FkX2lwX2hvb2spO1xcbitcXG4gdW5zaWduZWQgaW50XFxuIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuQEAgLTExMzIsMTMgKzEyMDQsMTggQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbiBcXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcXG4gXFx0c3RydWN0IHJ0Nl9pbmZvICpydDtcXG4rXFx0X19iZTMyIGlwX2RhZGRyO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XFxuIFxcdGlmICh0dXBsZWhhc2ggPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFxuLVxcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoXFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xcbitcXHRpZiAoY3R4LnR1bi5wcm90byA9PSBJUFBST1RPX0lQSVApXFxuK1xcdFxcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgc2tiKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBORl9EUk9QO1xcbiBcXHRlbHNlIGlmIChyZXQgPT0gMClcXG5AQCAtMTE1NSwyOCArMTIzMiw0NCBAQCBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGRpciA9IHR1cGxlaGFzaC1cXHUwMDNldHVwbGUuZGlyO1xcbiBcXHRmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pO1xcbiBcXHRvdGhlcl90dXBsZSA9IFxcdTAwMjZmbG93LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGU7XFxuK1xcdGlwX2RhZGRyID0gb3RoZXJfdHVwbGUtXFx1MDAzZXNyY192NC5zX2FkZHI7XFxuIFxcdGlwNl9kYWRkciA9IFxcdTAwMjZvdGhlcl90dXBsZS1cXHUwMDNlc3JjX3Y2O1xcbiBcXG4tXFx0aWYgKG5mX2Zsb3dfdHVubmVsX3Y2X3B1c2goc3RhdGUtXFx1MDAzZW5ldCwgc2tiLCBvdGhlcl90dXBsZSxcXG4tXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmlwNl9kYWRkcikgXFx1MDAzYyAwKVxcbitcXHRpZiAobmZfZmxvd190dW5uZWxfcHVzaChzdGF0ZS1cXHUwMDNlbmV0LCBza2IsIG90aGVyX3R1cGxlLCBcXHUwMDI2aXBfZGFkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZpcDZfZGFkZHIpIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuIFxcbiBcXHRzd2l0Y2ggKHR1cGxlaGFzaC1cXHUwMDNldHVwbGUueG1pdF90eXBlKSB7XFxuLVxcdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfTkVJR0g6XFxuLVxcdFxcdHJ0ID0gZHN0X3J0Nl9pbmZvKHR1cGxlaGFzaC1cXHUwMDNldHVwbGUuZHN0X2NhY2hlKTtcXG4rXFx0Y2FzZSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSDoge1xcbitcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XFxuK1xcbiBcXHRcXHR4bWl0Lm91dGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHN0YXRlLVxcdTAwM2VuZXQsIHR1cGxlaGFzaC1cXHUwMDNldHVwbGUuaWZpZHgpO1xcbiBcXHRcXHRpZiAoIXhtaXQub3V0ZGV2KSB7XFxuIFxcdFxcdFxcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuIFxcdFxcdH1cXG4tXFx0XFx0bmVpZ2ggPSBpcF9uZWlnaF9ndzYocnQtXFx1MDAzZWRzdC5kZXYsIHJ0Nl9uZXh0aG9wKHJ0LCBpcDZfZGFkZHIpKTtcXG4rXFx0XFx0aWYgKG90aGVyX3R1cGxlLVxcdTAwM2V0dW4uZW5jYXBfcHJvdG8gPT0gQUZfSU5FVCB8fFxcbitcXHRcXHQgICAgY3R4LnR1bi5wcm90byA9PSBJUFBST1RPX0lQSVApIHtcXG4rXFx0XFx0XFx0c3RydWN0IHJ0YWJsZSAqcnQ0O1xcbitcXG4rXFx0XFx0XFx0cnQ0ID0gZHN0X3J0YWJsZSh0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XFxuK1xcdFxcdFxcdG5laWdoID0gaXBfbmVpZ2hfZ3c0KHJ0NC1cXHUwMDNlZHN0LmRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBydF9uZXh0aG9wKHJ0NCwgaXBfZGFkZHIpKTtcXG4rXFx0XFx0XFx0ZHN0ID0gXFx1MDAyNnJ0NC1cXHUwMDNlZHN0O1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRydCA9IGRzdF9ydDZfaW5mbyh0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XFxuK1xcdFxcdFxcdG5laWdoID0gaXBfbmVpZ2hfZ3c2KHJ0LVxcdTAwM2Vkc3QuZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHJ0Nl9uZXh0aG9wKHJ0LCBpcDZfZGFkZHIpKTtcXG4rXFx0XFx0XFx0ZHN0ID0gXFx1MDAyNnJ0LVxcdTAwM2Vkc3Q7XFxuK1xcdFxcdH1cXG4gXFx0XFx0aWYgKElTX0VSUihuZWlnaCkpIHtcXG4gXFx0XFx0XFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xcbiBcXHRcXHRcXHRyZXR1cm4gTkZfRFJPUDtcXG4gXFx0XFx0fVxcbiBcXHRcXHR4bWl0LmRlc3QgPSBuZWlnaC1cXHUwMDNlaGE7XFxuLVxcdFxcdHNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbitcXHRcXHRza2JfZHN0X3NldF9ub3JlZihza2IsIGRzdCk7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUOlxcbiBcXHRcXHR4bWl0Lm91dGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHN0YXRlLVxcdTAwM2VuZXQsIHR1cGxlaGFzaC1cXHUwMDNldHVwbGUub3V0LmlmaWR4KTtcXG4gXFx0XFx0aWYgKCF4bWl0Lm91dGRldikge1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xcbmluZGV4IDk4YzAzYjQ4N2Y1MjExLi41ZTg0YjdmMThhMjY3ZiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xcbkBAIC00NSw3ICs0NSw4IEBAIHN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi1cXHRcXHRcXHRcXHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIHU4ICpoYSxcXG4rXFx0XFx0XFx0XFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbitcXHRcXHRcXHRcXHQgICAgIHU4ICpoYSwgX19iZTE2IGV0aGVyX3R5cGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuIHtcXG4gXFx0Y29uc3Qgdm9pZCAqZGFkZHIgPSBcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTM7XFxuQEAgLTcyLDcgKzczLDcgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4gb3V0Olxcbi1cXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIHN0YWNrKTtcXG4rXFx0cmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGhhLCBldGhlcl90eXBlLCBzdGFjayk7XFxuIH1cXG4gXFxuIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcXG5AQCAtMTI4LDYgKzEyOSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXFxuIFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZXR1bi5zcmNfdjYgPSBwYXRoLVxcdTAwM2V0dW4uc3JjX3Y2O1xcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2V0dW4uZHN0X3Y2ID0gcGF0aC1cXHUwMDNldHVuLmRzdF92NjtcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNldHVuLmwzX3Byb3RvID0gcGF0aC1cXHUwMDNldHVuLmwzX3Byb3RvO1xcbitcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2V0dW4uZW5jYXBfcHJvdG8gPSBwYXRoLVxcdTAwM2V0dW4uZW5jYXBfcHJvdG87XFxuIFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZW51bV90dW5zKys7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VudW1fZW5jYXBzIFxcdTAwM2U9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKVxcbkBAIC0yMTQsMTIgKzIxNiwxMyBAQCBzdGF0aWMgaW50IG5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuIFxcdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3QgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgZmxvd2kgZmwgPSB7fTtcXG4gXFxuLVxcdHN3aXRjaCAobmZ0X3BmKHBrdCkpIHtcXG4rXFx0c3dpdGNoICh0dW4tXFx1MDAzZWVuY2FwX3Byb3RvKSB7XFxuIFxcdGNhc2UgTkZQUk9UT19JUFY0OlxcbiBcXHRcXHRmbC51LmlwNC5kYWRkciA9IHR1bi1cXHUwMDNlZHN0X3Y0LnNfYWRkcjtcXG4gXFx0XFx0ZmwudS5pcDQuc2FkZHIgPSB0dW4tXFx1MDAzZXNyY192NC5zX2FkZHI7XFxuIFxcdFxcdGZsLnUuaXA0LmZsb3dpNF9paWYgPSBuZnRfaW4ocGt0KS1cXHUwMDNlaWZpbmRleDtcXG4tXFx0XFx0ZmwudS5pcDQuZmxvd2k0X2RzY3AgPSBpcDRoX2RzY3AoaXBfaGRyKHBrdC1cXHUwMDNlc2tiKSk7XFxuK1xcdFxcdGlmIChuZnRfcGYocGt0KSA9PSBORlBST1RPX0lQVjQpXFxuK1xcdFxcdFxcdGZsLnUuaXA0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwX2hkcihwa3QtXFx1MDAzZXNrYikpO1xcbiBcXHRcXHRmbC51LmlwNC5mbG93aTRfbWFyayA9IHBrdC1cXHUwMDNlc2tiLVxcdTAwM2VtYXJrO1xcbiBcXHRcXHRmbC51LmlwNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0FOWVNSQztcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTIyNywxMyArMjMwLDE0IEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4gXFx0XFx0ZmwudS5pcDYuZGFkZHIgPSB0dW4tXFx1MDAzZWRzdF92NjtcXG4gXFx0XFx0ZmwudS5pcDYuc2FkZHIgPSB0dW4tXFx1MDAzZXNyY192NjtcXG4gXFx0XFx0ZmwudS5pcDYuZmxvd2k2X2lpZiA9IG5mdF9pbihwa3QpLVxcdTAwM2VpZmluZGV4O1xcbi1cXHRcXHRmbC51LmlwNi5mbG93bGFiZWwgPSBpcDZfZmxvd2luZm8oaXB2Nl9oZHIocGt0LVxcdTAwM2Vza2IpKTtcXG4rXFx0XFx0aWYgKG5mdF9wZihwa3QpID09IE5GUFJPVE9fSVBWNilcXG4rXFx0XFx0XFx0ZmwudS5pcDYuZmxvd2xhYmVsID0gaXA2X2Zsb3dpbmZvKGlwdjZfaGRyKHBrdC1cXHUwMDNlc2tiKSk7XFxuIFxcdFxcdGZsLnUuaXA2LmZsb3dpNl9tYXJrID0gcGt0LVxcdTAwM2Vza2ItXFx1MDAzZW1hcms7XFxuIFxcdFxcdGZsLnUuaXA2LmZsb3dpNl9mbGFncyA9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4tXFx0bmZfcm91dGUobmZ0X25ldChwa3QpLCBcXHUwMDI2dHVuX2RzdCwgXFx1MDAyNmZsLCBmYWxzZSwgbmZ0X3BmKHBrdCkpO1xcbitcXHRuZl9yb3V0ZShuZnRfbmV0KHBrdCksIFxcdTAwMjZ0dW5fZHN0LCBcXHUwMDI2ZmwsIGZhbHNlLCB0dW4tXFx1MDAzZWVuY2FwX3Byb3RvKTtcXG4gXFx0aWYgKCF0dW5fZHN0KVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuQEAgLTI1NSw3ICsyNTksOCBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbiBcXHR1bnNpZ25lZCBjaGFyIGhhW0VUSF9BTEVOXTtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgXFx1MDAyNnN0YWNrKSBcXHUwMDNjIDAgfHxcXG4rXFx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocm91dGUsIGRzdCwgY3QsIGRpciwgaGEsIHBrdC1cXHUwMDNlZXRoZXJ0eXBlLFxcbitcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2c3RhY2spIFxcdTAwM2MgMCB8fFxcbiBcXHQgICAgbmZ0X2Rldl9wYXRoX2luZm8oXFx1MDAyNnN0YWNrLCBcXHUwMDI2aW5mbywgaGEsIFxcdTAwMjZmdC1cXHUwMDNlZGF0YSkgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuQEAgLTI3Niw2ICsyODEsNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbiBcXHRcXHRyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLnNyY192NiA9IGluZm8udHVuLmRzdF92NjtcXG4gXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5kc3RfdjYgPSBpbmZvLnR1bi5zcmNfdjY7XFxuIFxcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi50dW4ubDNfcHJvdG8gPSBpbmZvLnR1bi5sM19wcm90bztcXG4rXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5lbmNhcF9wcm90byA9IGluZm8udHVuLmVuY2FwX3Byb3RvO1xcbiBcXHRcXHRyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0uaW4ubnVtX3R1bnMgPSBpbmZvLm51bV90dW5zO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29uZmlnXFxuaW5kZXggYzNjMTIxYjZmMzAwYTkuLmEyMTJiOWVkYmNkOTdlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29uZmlnXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWdcXG5AQCAtMzUsNiArMzUsNyBAQCBDT05GSUdfSVBfU0NUUD1tXFxuIENPTkZJR19JUFY2PXlcXG4gQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXlcXG4gQ09ORklHX0lQVjZfVFVOTkVMPW1cXG4rQ09ORklHX0lQVjZfU0lUPW1cXG4gQ09ORklHX0lQX1ZTPW1cXG4gQ09ORklHX0lQX1ZTX1BST1RPX1RDUD15XFxuIENPTkZJR19JUF9WU19SUj1tXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxcbmluZGV4IDA4YWQwNzUwMGU4YTcxLi40NmJkMDgwMTA4YmUzNiAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcXG5AQCAtNTc5LDkgKzU3OSw4IEBAIGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19uYXQgXFxcIiRuczFcXFwiIFxcXCIkbnMyXFxcIiAxIFxcXCJcXFwiOyB0aGVuXFxuIFxcdGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgbGlzdCBydWxlc2V0XFxuIGZpXFxuIFxcbi0jIElQSVAgdHVubmVsIHRlc3Q6XFxuLSMgQWRkIElQSVAgdHVubmVsIGludGVyZmFjZXMgYW5kIGNoZWNrIGZsb3d0YWJsZSBhY2NlbGVyYXRpb24uXFxuLXRlc3RfaXBpcCgpIHtcXG4rIyBJUCB0dW5uZWwgdGVzdHM6XFxuK3Rlc3RfaXBfdG5scygpIHtcXG4gaWYgISBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgbGluayBhZGQgbmFtZSB0dW4wIHR5cGUgaXBpcCBcXFxcXFxuICAgICAgbG9jYWwgMTkyLjE2OC4xMC4xIHJlbW90ZSAxOTIuMTY4LjEwLjIgXFx1MDAzZS9kZXYvbnVsbDt0aGVuXFxuIFxcdGVjaG8gXFxcIlNLSVA6IGNvdWxkIG5vdCBhZGQgaXBpcCB0dW5uZWxcXFwiXFxuQEAgLTU5NCw3ICs1OTMsMTMgQEAgaXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjAuZm9yd2FyZGluZz0xIFxcdTAwM2UgL2Rldi9udWxsXFxuIFxcbiBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgbGluayBhZGQgbmFtZSB0dW42IHR5cGUgaXA2dG5sIGxvY2FsIGZlZTE6Mjo6MSByZW1vdGUgZmVlMToyOjoyIGVuY2FwbGltaXQgbm9uZVxcbiBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgbGluayBzZXQgdHVuNiB1cFxcbitpcCAtbmV0IFxcXCIkbnNyMVxcXCIgYWRkciBhZGQgMTkyLjE2OC4yMTAuMS8yNCBkZXYgdHVuNlxcbiBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgYWRkciBhZGQgZmVlMTozOjoxLzY0IGRldiB0dW42IG5vZGFkXFxuK2lwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW42LmZvcndhcmRpbmc9MSBcXHUwMDNlIC9kZXYvbnVsbFxcbitcXG4raXAgLW5ldCBcXFwiJG5zcjFcXFwiIGxpbmsgYWRkIG5hbWUgc2l0MSB0eXBlIHNpdCBsb2NhbCAxOTIuMTY4LjEwLjEgcmVtb3RlIDE5Mi4xNjguMTAuMiB0dGwgMjU1XFxuK2lwIC1uZXQgXFxcIiRuc3IxXFxcIiBsaW5rIHNldCBzaXQxIHVwXFxuK2lwIC1uZXQgXFxcIiRuc3IxXFxcIiBhZGRyIGFkZCBmZTAxOjM6OjEvNjQgZGV2IHNpdDEgbm9kYWRcXG4gXFxuIGlwIC1uZXQgXFxcIiRuc3IyXFxcIiBsaW5rIGFkZCBuYW1lIHR1bjAgdHlwZSBpcGlwIGxvY2FsIDE5Mi4xNjguMTAuMiByZW1vdGUgMTkyLjE2OC4xMC4xXFxuIGlwIC1uZXQgXFxcIiRuc3IyXFxcIiBsaW5rIHNldCB0dW4wIHVwXFxuQEAgLTYwMyw3ICs2MDgsMTMgQEAgaXAgbmV0bnMgZXhlYyBcXFwiJG5zcjJcXFwiIHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjAuZm9yd2FyZGluZz0xIFxcdTAwM2UgL2Rldi9udWxsXFxuIFxcbiBpcCAtbmV0IFxcXCIkbnNyMlxcXCIgbGluayBhZGQgbmFtZSB0dW42IHR5cGUgaXA2dG5sIGxvY2FsIGZlZTE6Mjo6MiByZW1vdGUgZmVlMToyOjoxIGVuY2FwbGltaXQgbm9uZSB8fCByZXQ9MVxcbiBpcCAtbmV0IFxcXCIkbnNyMlxcXCIgbGluayBzZXQgdHVuNiB1cFxcbitpcCAtbmV0IFxcXCIkbnNyMlxcXCIgYWRkciBhZGQgMTkyLjE2OC4yMTAuMi8yNCBkZXYgdHVuNlxcbiBpcCAtbmV0IFxcXCIkbnNyMlxcXCIgYWRkciBhZGQgZmVlMTozOjoyLzY0IGRldiB0dW42IG5vZGFkXFxuK2lwIG5ldG5zIGV4ZWMgXFxcIiRuc3IyXFxcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW42LmZvcndhcmRpbmc9MSBcXHUwMDNlIC9kZXYvbnVsbFxcbitcXG4raXAgLW5ldCBcXFwiJG5zcjJcXFwiIGxpbmsgYWRkIG5hbWUgc2l0MSB0eXBlIHNpdCBsb2NhbCAxOTIuMTY4LjEwLjIgcmVtb3RlIDE5Mi4xNjguMTAuMSB0dGwgMjU1XFxuK2lwIC1uZXQgXFxcIiRuc3IyXFxcIiBsaW5rIHNldCBzaXQxIHVwXFxuK2lwIC1uZXQgXFxcIiRuc3IyXFxcIiBhZGRyIGFkZCBmZTAxOjM6OjIvNjQgZGV2IHNpdDEgbm9kYWRcXG4gXFxuIGlwIC1uZXQgXFxcIiRuc3IxXFxcIiByb3V0ZSBjaGFuZ2UgZGVmYXVsdCB2aWEgMTkyLjE2OC4xMDAuMlxcbiBpcCAtbmV0IFxcXCIkbnNyMlxcXCIgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMTAwLjFcXG5AQCAtNjE5LDYgKzYzMCw3IEBAIGlwIC02IC1uZXQgXFxcIiRuczJcXFwiIHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBkZWFkOjI6OjFcXG4gXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAnbWV0YSBvaWYgdHVuMCBhY2NlcHQnXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAnbWV0YSBvaWYgdHVuNiBhY2NlcHQnXFxuK2lwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAnbWV0YSBvaWYgc2l0MSBhY2NlcHQnXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcXFxcXFxuIFxcdCdtZXRhIG9pZiBcXFwidmV0aDBcXFwiIHRjcCBzcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX3JlcGwgYWNjZXB0J1xcbiBcXG5AQCAtNjM2LDYgKzY0OCwyOCBAQCBlbHNlXFxuIFxcdHJldD0xXFxuIGZpXFxuIFxcbitpcCAtbmV0IFxcXCIkbnNyMVxcXCIgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMjEwLjJcXG4raXAgLW5ldCBcXFwiJG5zcjJcXFwiIHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIxMC4xXFxuK1xcbitpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0IFxcXCIkbnMxXFxcIiBcXFwiJG5zMlxcXCIgMSBcXFwiSVA0SVA2IHR1bm5lbFxcXCI7IHRoZW5cXG4rXFx0ZWNobyBcXFwiRkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggSVA0SVA2IHR1bm5lbFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IGxpc3QgcnVsZXNldFxcbitcXHRyZXQ9MVxcbitmaVxcbitcXG4raXAgLTYgLW5ldCBcXFwiJG5zcjFcXFwiIHJvdXRlIGRlbGV0ZSBkZWZhdWx0XFxuK2lwIC02IC1uZXQgXFxcIiRuc3IxXFxcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmUwMTozOjoyXFxuK2lwIC02IC1uZXQgXFxcIiRuc3IyXFxcIiByb3V0ZSBkZWxldGUgZGVmYXVsdFxcbitpcCAtNiAtbmV0IFxcXCIkbnNyMlxcXCIgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlMDE6Mzo6MVxcbitcXG4raWYgdGVzdF90Y3BfZm9yd2FyZGluZyBcXFwiJG5zMVxcXCIgXFxcIiRuczJcXFwiIDEgNiBcXFwiW2RlYWQ6Mjo6OTldXFxcIiAxMjM0NTsgdGhlblxcbitcXHRlY2hvIFxcXCJQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgU0lUIHR1bm5lbFxcXCJcXG4rZWxzZVxcbitcXHRlY2hvIFxcXCJGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBTSVQgdHVubmVsXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgbGlzdCBydWxlc2V0XFxuK1xcdHJldD0xXFxuK2ZpXFxuK1xcbiAjIENyZWF0ZSB2bGFuIHRhZ2dlZCBkZXZpY2VzIGZvciBJUElQIHRyYWZmaWMuXFxuIGlwIC1uZXQgXFxcIiRuc3IxXFxcIiBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgdmV0aDEuMTAgdHlwZSB2bGFuIGlkIDEwXFxuIGlwIC1uZXQgXFxcIiRuc3IxXFxcIiBsaW5rIHNldCB2ZXRoMS4xMCB1cFxcbkBAIC02NTMsMTEgKzY4NywxOCBAQCBpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJ21ldGEgb2lmIHR1bjAuMTAgYVxcbiBcXG4gaXAgLW5ldCBcXFwiJG5zcjFcXFwiIGxpbmsgYWRkIG5hbWUgdHVuNi4xMCB0eXBlIGlwNnRubCBsb2NhbCBmZWUxOjQ6OjEgcmVtb3RlIGZlZTE6NDo6MiBlbmNhcGxpbWl0IG5vbmVcXG4gaXAgLW5ldCBcXFwiJG5zcjFcXFwiIGxpbmsgc2V0IHR1bjYuMTAgdXBcXG4raXAgLW5ldCBcXFwiJG5zcjFcXFwiIGFkZHIgYWRkIDE5Mi4xNjguMjIwLjEvMjQgZGV2IHR1bjYuMTBcXG4gaXAgLW5ldCBcXFwiJG5zcjFcXFwiIGFkZHIgYWRkIGZlZTE6NTo6MS82NCBkZXYgdHVuNi4xMCBub2RhZFxcbitpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgc3lzY3RsIG5ldC5pcHY0LmNvbmYudHVuNi8xMC5mb3J3YXJkaW5nPTEgXFx1MDAzZSAvZGV2L251bGxcXG4gaXAgLTYgLW5ldCBcXFwiJG5zcjFcXFwiIHJvdXRlIGRlbGV0ZSBkZWZhdWx0XFxuIGlwIC02IC1uZXQgXFxcIiRuc3IxXFxcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmVlMTo1OjoyXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAnbWV0YSBvaWYgdHVuNi4xMCBhY2NlcHQnXFxuIFxcbitpcCAtbmV0IFxcXCIkbnNyMVxcXCIgbGluayBhZGQgbmFtZSBzaXQxLjEwIHR5cGUgc2l0IGxvY2FsIDE5Mi4xNjguMjAuMSByZW1vdGUgMTkyLjE2OC4yMC4yIHR0bCAyNTVcXG4raXAgLW5ldCBcXFwiJG5zcjFcXFwiIGxpbmsgc2V0IHNpdDEuMTAgdXBcXG4raXAgLW5ldCBcXFwiJG5zcjFcXFwiIGFkZHIgYWRkIGZlMDE6NTo6MS82NCBkZXYgc2l0MS4xMCBub2RhZFxcbitpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJ21ldGEgb2lmIHNpdDEuMTAgYWNjZXB0J1xcbitcXG4gaXAgLW5ldCBcXFwiJG5zcjJcXFwiIGxpbmsgYWRkIGxpbmsgdmV0aDAgbmFtZSB2ZXRoMC4xMCB0eXBlIHZsYW4gaWQgMTBcXG4gaXAgLW5ldCBcXFwiJG5zcjJcXFwiIGxpbmsgc2V0IHZldGgwLjEwIHVwXFxuIGlwIC1uZXQgXFxcIiRuc3IyXFxcIiBhZGRyIGFkZCAxOTIuMTY4LjIwLjIvMjQgZGV2IHZldGgwLjEwXFxuQEAgLTY3Miw3ICs3MTMsMTQgQEAgaXAgbmV0bnMgZXhlYyBcXFwiJG5zcjJcXFwiIHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjAvMTAuZm9yd2FyZGluZz0xIFxcdTAwM2UgL2Rldi9udWxsXFxuIFxcbiBpcCAtbmV0IFxcXCIkbnNyMlxcXCIgbGluayBhZGQgbmFtZSB0dW42LjEwIHR5cGUgaXA2dG5sIGxvY2FsIGZlZTE6NDo6MiByZW1vdGUgZmVlMTo0OjoxIGVuY2FwbGltaXQgbm9uZSB8fCByZXQ9MVxcbiBpcCAtbmV0IFxcXCIkbnNyMlxcXCIgbGluayBzZXQgdHVuNi4xMCB1cFxcbitpcCAtbmV0IFxcXCIkbnNyMlxcXCIgYWRkciBhZGQgMTkyLjE2OC4yMjAuMi8yNCBkZXYgdHVuNi4xMFxcbiBpcCAtbmV0IFxcXCIkbnNyMlxcXCIgYWRkciBhZGQgZmVlMTo1OjoyLzY0IGRldiB0dW42LjEwIG5vZGFkXFxuK2lwIG5ldG5zIGV4ZWMgXFxcIiRuc3IyXFxcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW42LzEwLmZvcndhcmRpbmc9MSBcXHUwMDNlIC9kZXYvbnVsbFxcbitcXG4raXAgLW5ldCBcXFwiJG5zcjJcXFwiIGxpbmsgYWRkIG5hbWUgc2l0MS4xMCB0eXBlIHNpdCBsb2NhbCAxOTIuMTY4LjIwLjIgcmVtb3RlIDE5Mi4xNjguMjAuMSB0dGwgMjU1XFxuK2lwIC1uZXQgXFxcIiRuc3IyXFxcIiBsaW5rIHNldCBzaXQxLjEwIHVwXFxuK2lwIC1uZXQgXFxcIiRuc3IyXFxcIiBhZGRyIGFkZCBmZTAxOjU6OjIvNjQgZGV2IHNpdDEuMTAgbm9kYWRcXG4rXFxuIGlwIC02IC1uZXQgXFxcIiRuc3IyXFxcIiByb3V0ZSBkZWxldGUgZGVmYXVsdFxcbiBpcCAtNiAtbmV0IFxcXCIkbnNyMlxcXCIgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlZTE6NTo6MVxcbiBcXG5AQCAtNjkwLDYgKzczOCwyOCBAQCBlbHNlXFxuIFxcdHJldD0xXFxuIGZpXFxuIFxcbitpcCAtbmV0IFxcXCIkbnNyMVxcXCIgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMjIwLjJcXG4raXAgLW5ldCBcXFwiJG5zcjJcXFwiIHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIyMC4xXFxuK1xcbitpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0IFxcXCIkbnMxXFxcIiBcXFwiJG5zMlxcXCIgMSBcXFwiSVA0SVA2IHR1bm5lbCBvdmVyIHZsYW5cXFwiOyB0aGVuXFxuK1xcdGVjaG8gXFxcIkZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIElQNElQNiB0dW5uZWwgb3ZlciB2bGFuXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgbGlzdCBydWxlc2V0XFxuK1xcdHJldD0xXFxuK2ZpXFxuK1xcbitpcCAtNiAtbmV0IFxcXCIkbnNyMVxcXCIgcm91dGUgZGVsZXRlIGRlZmF1bHRcXG4raXAgLTYgLW5ldCBcXFwiJG5zcjFcXFwiIHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBmZTAxOjU6OjJcXG4raXAgLTYgLW5ldCBcXFwiJG5zcjJcXFwiIHJvdXRlIGRlbGV0ZSBkZWZhdWx0XFxuK2lwIC02IC1uZXQgXFxcIiRuc3IyXFxcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmUwMTo1OjoxXFxuK1xcbitpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nIFxcXCIkbnMxXFxcIiBcXFwiJG5zMlxcXCIgMSA2IFxcXCJbZGVhZDoyOjo5OV1cXFwiIDEyMzQ1OyB0aGVuXFxuK1xcdGVjaG8gXFxcIlBBU1M6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiBTSVQgdHVubmVsIG92ZXIgdmxhblxcXCJcXG4rZWxzZVxcbitcXHRlY2hvIFxcXCJGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBTSVQgdHVubmVsIG92ZXIgdmxhblxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IGxpc3QgcnVsZXNldFxcbitcXHRyZXQ9MVxcbitmaVxcbitcXG4gIyBSZXN0b3JlIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uXFxuIGlwIC1uZXQgXFxcIiRuc3IxXFxcIiByb3V0ZSBjaGFuZ2UgZGVmYXVsdCB2aWEgMTkyLjE2OC4xMC4yXFxuIGlwIC1uZXQgXFxcIiRuc3IyXFxcIiByb3V0ZSBjaGFuZ2UgZGVmYXVsdCB2aWEgMTkyLjE2OC4xMC4xXFxuQEAgLTc4Miw3ICs4NTIsNyBAQCBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgYWRkciBhZGQgZGVhZDoxOjoxLzY0IGRldiB2ZXRoMCBub2RhZFxcbiBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgbGluayBzZXQgdXAgZGV2IHZldGgwXFxuIH1cXG4gXFxuLXRlc3RfaXBpcFxcbit0ZXN0X2lwX3RubHNcXG4gXFxuIHRlc3RfYnJpZGdlXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToyODozMi44MDI2MDQ4MzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5OTA3ODE0NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJJUFY2X1NJVFwiLFxuICAgIFwiSVBWNl9UVU5ORUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcGlwNl90dW5uZWxfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcIm5mX2Zsb3dfdHVubmVsX2lwX3B1c2hcIixcbiAgICBcIm5mX2Zsb3dfdHVubmVsX2lwNl9wdXNoXCIsXG4gICAgXCJuZl9mbG93X3R1bm5lbF9wdXNoXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfbG9va3VwXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXBcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rXCIsXG4gICAgXCJuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBJUC1pbi1JUCwgU0lUIChJUHY2LWluLUlQdjQpLCBhbmQgSVB2Ni1pbi1JUHY2IHR1bm5lbHMgaW4gdGhlIG5ldGZpbHRlciBmbG93dGFibGUgb2ZmbG9hZC4gSXQgbW9kaWZpZXMgY29yZSBuZXRmaWx0ZXIgZmxvd3RhYmxlIGxvZ2ljIGFuZCB0dW5uZWwgZHJpdmVycyB0byBzdXBwb3J0IGZpbGxpbmcgdGhlIGZvcndhcmQgcGF0aCBhbmQgcHVzaGluZyB0dW5uZWwgaGVhZGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZTY5MjgyM2QwYzBkYzJlZmQ4YWYwOTRkNzBlODljYTA4MDFmZTczXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDE6Mjg6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggZTdjNzgyOTMwMDJhYmIuLjA2ZDEyOGM2N2M4YzQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuQEAgLTI3Niw3ICsyNzYsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19tYW5nbGVfaXB2NChjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcbitzdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0ICAgIGNvbnN0IHU4ICphZGRyLCBfX2JlMTYgZXRoZXJfdHlwZSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgYWlyb2hhX3dkbWFfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrO1xuQEAgLTI4Nyw3ICsyODgsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcdTAwMjZzdGFjayk7XG4rXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBldGhlcl90eXBlLCBcdTAwMjZzdGFjayk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG5AQCAtMzMxLDcgKzMzMiw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSAqaHdlLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdHlwZSxcbiBcdFx0XHRcdFx0c3RydWN0IGFpcm9oYV9mbG93X2RhdGEgKmRhdGEsXG4tXHRcdFx0XHRcdGludCBsNHByb3RvKVxuK1x0XHRcdFx0XHRfX2JlMTYgZXRoZXJfdHlwZSwgaW50IGw0cHJvdG8pXG4ge1xuIFx0dTMyIHFkYXRhID0gRklFTERfUFJFUChBSVJPSEFfRk9FX1NIQVBFUl9JRCwgMHg3ZiksIHBvcnRzX3BhZCwgdmFsO1xuIFx0aW50IHdsYW5fZXR5cGUgPSAtRUlOVkFMLCBkc2FfcG9ydCA9IGFpcm9oYV9nZXRfZHNhX3BvcnQoXHUwMDI2bmV0ZGV2KTtcbkBAIC0zNTQsNyArMzU1LDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdHN0cnVjdCBhaXJvaGFfd2RtYV9pbmZvIGluZm8gPSB7fTtcbiBcbiBcdFx0aWYgKCFhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8obmV0ZGV2LCBkYXRhLVx1MDAzZWV0aC5oX2Rlc3QsXG4tXHRcdFx0XHRcdCAgICAgIFx1MDAyNmluZm8pKSB7XG4rXHRcdFx0XHRcdCAgICAgIGV0aGVyX3R5cGUsIFx1MDAyNmluZm8pKSB7XG4gXHRcdFx0dmFsIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9JQjJfTkJRLCBpbmZvLmlkeCkgfFxuIFx0XHRcdCAgICAgICBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfSUIyX1BTRV9QT1JULFxuIFx0XHRcdFx0XHQgIEZFX1BTRV9QT1JUX0NETTQpO1xuQEAgLTEwODEsNiArMTA4Miw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XG4gXHRzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSBod2U7XG4gXHRpbnQgZXJyLCBpLCBvZmZsb2FkX3R5cGU7XG4rXHRfX2JlMTYgZXRoZXJfdHlwZSA9IDA7XG4gXHR1MTYgYWRkcl90eXBlID0gMDtcbiBcdHU4IGw0cHJvdG8gPSAwO1xuIFxuQEAgLTExMDcsNiArMTEwOSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRzdHJ1Y3QgZmxvd19tYXRjaF9iYXNpYyBtYXRjaDtcbiBcbiBcdFx0Zmxvd19ydWxlX21hdGNoX2Jhc2ljKHJ1bGUsIFx1MDAyNm1hdGNoKTtcbitcdFx0ZXRoZXJfdHlwZSA9IG1hdGNoLmtleS1cdTAwM2VuX3Byb3RvO1xuIFx0XHRsNHByb3RvID0gbWF0Y2gua2V5LVx1MDAzZWlwX3Byb3RvO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuQEAgLTExNzcsNyArMTE4MCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCBcdTAwMjZod2UsIG9kZXYsIG9mZmxvYWRfdHlwZSxcbi1cdFx0XHRcdFx0ICAgXHUwMDI2ZGF0YSwgbDRwcm90byk7XG4rXHRcdFx0XHRcdCAgIFx1MDAyNmRhdGEsIGV0aGVyX3R5cGUsIGw0cHJvdG8pO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXG5pbmRleCBjYzhjNGVmODAzOGYzMC4uMjYwMWMxN2IyOWM4YjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcbkBAIC04OSw3ICs4OSw4IEBAIG10a19mbG93X29mZmxvYWRfbWFuZ2xlX2V0aChjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdCwgdm9pZCAqZXRoKVxuIH1cbiBcbiBzdGF0aWMgaW50XG4tbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2luZm8gKmluZm8pXG4rbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcbitcdFx0ICAgICAgIF9fYmUxNiBldGhlcl90eXBlLCBzdHJ1Y3QgbXRrX3dkbWFfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrO1xuIFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcbkBAIC0xMDIsNyArMTAzLDcgQEAgbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2lcbiBcdFx0cmV0dXJuIC0xO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgXHUwMDI2c3RhY2spO1xuK1x0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgZXRoZXJfdHlwZSwgXHUwMDI2c3RhY2spO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTE5MCwxMiArMTkxLDEyIEBAIG10a19mbG93X2dldF9kc2FfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqKmRldilcbiBzdGF0aWMgaW50XG4gbXRrX2Zsb3dfc2V0X291dHB1dF9kZXZpY2Uoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IG10a19mb2VfZW50cnkgKmZvZSxcbiBcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGVzdF9tYWMsXG4tXHRcdFx0ICAgaW50ICp3ZWRfaW5kZXgpXG4rXHRcdFx0ICAgX19iZTE2IGV0aGVyX3R5cGUsIGludCAqd2VkX2luZGV4KVxuIHtcbiBcdHN0cnVjdCBtdGtfd2RtYV9pbmZvIGluZm8gPSB7fTtcbiBcdGludCBwc2VfcG9ydCwgZHNhX3BvcnQsIHF1ZXVlO1xuIFxuLVx0aWYgKG10a19mbG93X2dldF93ZG1hX2luZm8oZGV2LCBkZXN0X21hYywgXHUwMDI2aW5mbykgPT0gMCkge1xuK1x0aWYgKG10a19mbG93X2dldF93ZG1hX2luZm8oZGV2LCBkZXN0X21hYywgZXRoZXJfdHlwZSwgXHUwMDI2aW5mbykgPT0gMCkge1xuIFx0XHRtdGtfZm9lX2VudHJ5X3NldF93ZG1hKGV0aCwgZm9lLCBpbmZvLndkbWFfaWR4LCBpbmZvLnF1ZXVlLFxuIFx0XHRcdFx0ICAgICAgIGluZm8uYnNzLCBpbmZvLndjaWQsIGluZm8uYW1zZHUpO1xuIFx0XHRpZiAobXRrX2lzX25ldHN5c192Ml9vcl9ncmVhdGVyKGV0aCkpIHtcbkBAIC0yNzMsNiArMjc0LDcgQEAgbXRrX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBtdGtfZXRoICpldGgsIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpmLFxuIFx0c3RydWN0IG10a19mbG93X2RhdGEgZGF0YSA9IHt9O1xuIFx0c3RydWN0IG10a19mb2VfZW50cnkgZm9lO1xuIFx0c3RydWN0IG10a19mbG93X2VudHJ5ICplbnRyeTtcbitcdF9fYmUxNiBldGhlcl90eXBlID0gMDtcbiBcdGludCBvZmZsb2FkX3R5cGUgPSAwO1xuIFx0aW50IHdlZF9pbmRleCA9IC0xO1xuIFx0dTE2IGFkZHJfdHlwZSA9IDA7XG5AQCAtMzE5LDYgKzMyMSw3IEBAIG10a19mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqZixcbiBcdFx0c3RydWN0IGZsb3dfbWF0Y2hfYmFzaWMgbWF0Y2g7XG4gXG4gXHRcdGZsb3dfcnVsZV9tYXRjaF9iYXNpYyhydWxlLCBcdTAwMjZtYXRjaCk7XG4rXHRcdGV0aGVyX3R5cGUgPSBtYXRjaC5rZXktXHUwMDNlbl9wcm90bztcbiBcdFx0bDRwcm90byA9IG1hdGNoLmtleS1cdTAwM2VpcF9wcm90bztcbiBcdH0gZWxzZSB7XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbkBAIC00ODEsNyArNDg0LDcgQEAgbXRrX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBtdGtfZXRoICpldGgsIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpmLFxuIFx0XHRtdGtfZm9lX2VudHJ5X3NldF9wcHBvZShldGgsIFx1MDAyNmZvZSwgZGF0YS5wcHBvZS5zaWQpO1xuIFxuIFx0ZXJyID0gbXRrX2Zsb3dfc2V0X291dHB1dF9kZXZpY2UoZXRoLCBcdTAwMjZmb2UsIG9kZXYsIGRhdGEuZXRoLmhfZGVzdCxcbi1cdFx0XHRcdFx0IFx1MDAyNndlZF9pbmRleCk7XG4rXHRcdFx0XHRcdCBldGhlcl90eXBlLCBcdTAwMjZ3ZWRfaW5kZXgpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NDYuLjQ1ZDk5ZTExYjA2ZTJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTkwMiw2ICs5MDIsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoIHtcbiBcdFx0XHR9O1xuIFxuIFx0XHRcdHU4XHRsM19wcm90bztcbitcdFx0XHR1OFx0ZW5jYXBfcHJvdG87XG4gXHRcdH0gdHVuO1xuIFx0XHRzdHJ1Y3Qge1xuIFx0XHRcdGVudW0ge1xuQEAgLTkzOCw2ICs5MzksNyBAQCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHtcbiBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCB7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0dThcdFx0XHRkYWRkcltFVEhfQUxFTl07XG4rXHRfX2JlMTZcdFx0XHRldGhlcl90eXBlO1xuIFxuIFx0aW50XHRcdFx0bnVtX3ZsYW5zO1xuIFx0c3RydWN0IHtcbkBAIC0zNDIwLDcgKzM0MjIsOCBAQCB2b2lkIGRldl9yZW1vdmVfb2ZmbG9hZChzdHJ1Y3QgcGFja2V0X29mZmxvYWQgKnBvKTtcbiBcbiBpbnQgZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gaW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi1pbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbitpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICBjb25zdCB1OCAqZGFkZHIsIF9fYmUxNiBldGhlcl90eXBlLFxuIFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xuIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5pbmRleCA3YjIzYjI0NWE1YTg2YS4uNGQ0MDY4MDFlYzkwMTUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMTE4LDYgKzExOCw3IEBAIHN0cnVjdCBmbG93X29mZmxvYWRfdHVubmVsIHtcbiBcdH07XG4gXG4gXHR1OFx0bDNfcHJvdG87XG4rXHR1OFx0ZW5jYXBfcHJvdG87XG4gfTtcbiBcbiBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA0YjNkNWNmZGY2ZTAwZi4uOWY1YTJkYTllOWY3NzQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC03NTAsMTIgKzc1MCwxNCBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqZGV2X2Z3ZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuIFx0cmV0dXJuIFx1MDAyNnN0YWNrLVx1MDAzZXBhdGhba107XG4gfVxuIFxuLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuK2ludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHQgIGNvbnN0IHU4ICpkYWRkciwgX19iZTE2IGV0aGVyX3R5cGUsXG4gXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXY7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4tXHRcdC5kZXZcdD0gZGV2LFxuK1x0XHQuZGV2XHRcdD0gZGV2LFxuK1x0XHQuZXRoZXJfdHlwZVx0PSBldGhlcl90eXBlLFxuIFx0fTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4gXHRpbnQgcmV0ID0gMDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmNcbmluZGV4IGI2NDMxOTRmNTdkMjlmLi45ZjdiMmJkYWJlZjA2YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwaXAuY1xuKysrIGIvbmV0L2lwdjQvaXBpcC5jXG5AQCAtMzY5LDYgKzM2OSw3IEBAIHN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0cGF0aC1cdTAwM2V0dW4uc3JjX3Y0LnNfYWRkciA9IHRpcGgtXHUwMDNlc2FkZHI7XG4gXHRwYXRoLVx1MDAzZXR1bi5kc3RfdjQuc19hZGRyID0gdGlwaC1cdTAwM2VkYWRkcjtcbiBcdHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQO1xuK1x0cGF0aC1cdTAwM2V0dW4uZW5jYXBfcHJvdG8gPSBBRl9JTkVUO1xuIFx0cGF0aC1cdTAwM2VkZXYgPSBjdHgtXHUwMDNlZGV2O1xuIFxuIFx0Y3R4LVx1MDAzZWRldiA9IHJ0LVx1MDAzZWRzdC5kZXY7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5pbmRleCBiZjhlNDBhZjYwYjA4My4uYTEyMWY3MTVhZmQyY2QgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuQEAgLTE4NjMsNyArMTg2MywxMSBAQCBzdGF0aWMgaW50IGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0cGF0aC1cdTAwM2V0eXBlID0gREVWX1BBVEhfVFVOO1xuIFx0XHRwYXRoLVx1MDAzZXR1bi5zcmNfdjYgPSB0LVx1MDAzZXBhcm1zLmxhZGRyO1xuIFx0XHRwYXRoLVx1MDAzZXR1bi5kc3RfdjYgPSB0LVx1MDAzZXBhcm1zLnJhZGRyO1xuLVx0XHRwYXRoLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjtcbitcdFx0cGF0aC1cdTAwM2V0dW4uZW5jYXBfcHJvdG8gPSBBRl9JTkVUNjtcbitcdFx0aWYgKGN0eC1cdTAwM2VldGhlcl90eXBlID09IGNwdV90b19iZTE2KEVUSF9QX0lQKSlcbitcdFx0XHRwYXRoLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDtcbitcdFx0ZWxzZVxuK1x0XHRcdHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2O1xuIFx0XHRwYXRoLVx1MDAzZWRldiA9IGN0eC1cdTAwM2VkZXY7XG4gXHRcdGN0eC1cdTAwM2VkZXYgPSBkc3QtXHUwMDNlZGV2O1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NpdC5jIGIvbmV0L2lwdjYvc2l0LmNcbmluZGV4IGEzOGIyNGZiODM4NDI0Li5lYWQzMjdjMzJkZjI0NSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3NpdC5jXG4rKysgYi9uZXQvaXB2Ni9zaXQuY1xuQEAgLTEzNjUsNiArMTM2NSw1NiBAQCBpcGlwNl90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxuIFx0fVxuIH1cbiBcbitzdGF0aWMgaW50IGlwaXA2X3R1bm5lbF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4re1xuK1x0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoY3R4LVx1MDAzZWRldik7XG4rXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKnRpcGggPSBcdTAwMjZ0dW5uZWwtXHUwMDNlcGFybXMuaXBoO1xuK1x0c3RydWN0IHJ0YWJsZSAqcnQ7XG4rXG4rXHQvKiBOQk1BIHR1bm5lbHMgKElTQVRBUCwgNnRvNCwgNnJkKSByZXNvbHZlIHRoZSBvdXRlciBkZXN0aW5hdGlvblxuK1x0ICogcGVyLXBhY2tldCBmcm9tIHRoZSBpbm5lciBJUHY2IGFkZHJlc3M7IG5vdCBvZmZsb2FkYWJsZS5cbitcdCAqL1xuK1x0aWYgKCF0aXBoLVx1MDAzZWRhZGRyKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHQvKiBGT1UvR1VFIGVuY2Fwc3VsYXRpb24gaXMgaGFuZGxlZCBpbiB0aGUgc2xvdyBwYXRoIGJ5XG4rXHQgKiBpcF90dW5uZWxfZW5jYXAoKTsgdGhlIGZhc3QgcGF0aCBvbmx5IHB1c2hlcyBhIHBsYWluXG4rXHQgKiBJUHY0IGhlYWRlciBhbmQgd291bGQgc2tpcCB0aGUgVURQIGVuY2Fwc3VsYXRpb24uXG4rXHQgKi9cbitcdGlmICh0dW5uZWwtXHUwMDNlZW5jYXAudHlwZSAhPSBUVU5ORUxfRU5DQVBfTk9ORSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cnQgPSBpcF9yb3V0ZV9vdXRwdXQoZGV2X25ldChjdHgtXHUwMDNlZGV2KSwgdGlwaC1cdTAwM2VkYWRkciwgdGlwaC1cdTAwM2VzYWRkcixcbitcdFx0XHQgICAgIGluZXRfZHNmaWVsZF90b19kc2NwKHRpcGgtXHUwMDNldG9zKSxcbitcdFx0XHQgICAgIHR1bm5lbC1cdTAwM2VwYXJtcy5saW5rLCBSVF9TQ09QRV9VTklWRVJTRSk7XG4rXHRpZiAoSVNfRVJSKHJ0KSlcbitcdFx0cmV0dXJuIFBUUl9FUlIocnQpO1xuK1xuK1x0cGF0aC1cdTAwM2V0eXBlID0gREVWX1BBVEhfVFVOO1xuK1x0cGF0aC1cdTAwM2V0dW4uc3JjX3Y0LnNfYWRkciA9IHRpcGgtXHUwMDNlc2FkZHI7XG4rXHRwYXRoLVx1MDAzZXR1bi5kc3RfdjQuc19hZGRyID0gdGlwaC1cdTAwM2VkYWRkcjtcbitcdHBhdGgtXHUwMDNldHVuLmVuY2FwX3Byb3RvID0gQUZfSU5FVDtcbitcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbitcbitcdHN3aXRjaCAoY3R4LVx1MDAzZWV0aGVyX3R5cGUpIHtcbitcdGNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOlxuK1x0XHRwYXRoLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQVjYpOlxuK1x0XHRwYXRoLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRpcF9ydF9wdXQocnQpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRjdHgtXHUwMDNlZGV2ID0gcnQtXHUwMDNlZHN0LmRldjtcbitcdGlwX3J0X3B1dChydCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludFxuIGlwaXA2X3R1bm5lbF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcixcbiBcdFx0XHQgICAgdm9pZCBfX3VzZXIgKmRhdGEsIGludCBjbWQpXG5AQCAtMTQwMSw2ICsxNDUxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGlwNl9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19zaW9jZGV2cHJpdmF0ZSA9IGlwaXA2X3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSxcbiBcdC5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxuIFx0Lm5kb190dW5uZWxfY3RsID0gaXBpcDZfdHVubmVsX2N0bCxcbitcdC5uZG9fZmlsbF9mb3J3YXJkX3BhdGggPSBpcGlwNl90dW5uZWxfZmlsbF9mb3J3YXJkX3BhdGgsXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBpcGlwNl9kZXZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG5pbmRleCA5OWM1YjlkNjcxYTBjYS4uMThmODllNmZiNDM1NGQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG5AQCAtNzYsOSArNzYsMTQgQEAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvd19vZmZsb2FkX2FsbG9jKHN0cnVjdCBuZl9jb25uICpjdClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FsbG9jKTtcbiBcbi1zdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9kc3RfY29va2llKHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZsb3dfdHVwbGUpXG4rc3RhdGljIHUzMiBmbG93X29mZmxvYWRfZHN0X2Nvb2tpZShzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpmbG93X3R1cGxlLFxuK1x0XHRcdFx0ICAgdTggdHVuX2VuY2FwX3Byb3RvKVxuIHtcbi1cdGlmIChmbG93X3R1cGxlLVx1MDAzZWwzcHJvdG8gPT0gTkZQUk9UT19JUFY2KVxuK1x0Ym9vbCBkc3RfdjY7XG4rXG4rXHRkc3RfdjYgPSB0dW5fZW5jYXBfcHJvdG8gPyB0dW5fZW5jYXBfcHJvdG8gPT0gTkZQUk9UT19JUFY2XG4rXHRcdFx0XHQgOiBmbG93X3R1cGxlLVx1MDAzZWwzcHJvdG8gPT0gTkZQUk9UT19JUFY2O1xuK1x0aWYgKGRzdF92NilcbiBcdFx0cmV0dXJuIHJ0Nl9nZXRfY29va2llKGRzdF9ydDZfaW5mbyhmbG93X3R1cGxlLVx1MDAzZWRzdF9jYWNoZSkpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtOTksMTAgKzEwNCwxMiBAQCBzdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4gXHRcdFx0XHQgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxuIHtcbiBcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZsb3dfdHVwbGUgPSBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlO1xuK1x0dTggbDNwcm90bywgZW5jYXBfcHJvdG8gPSByb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uZW5jYXBfcHJvdG87XG4gXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBuZnRfcm91dGVfZHN0X2ZldGNoKHJvdXRlLCBkaXIpO1xuIFx0aW50IGksIGogPSAwO1xuIFxuLVx0c3dpdGNoIChmbG93X3R1cGxlLVx1MDAzZWwzcHJvdG8pIHtcbitcdGwzcHJvdG8gPSBlbmNhcF9wcm90byA/IGVuY2FwX3Byb3RvIDogZmxvd190dXBsZS1cdTAwM2VsM3Byb3RvO1xuK1x0c3dpdGNoIChsM3Byb3RvKSB7XG4gXHRjYXNlIE5GUFJPVE9fSVBWNDpcbiBcdFx0Zmxvd190dXBsZS1cdTAwM2VtdHUgPSBpcF9kc3RfbXR1X21heWJlX2ZvcndhcmQoZHN0LCB0cnVlKTtcbiBcdFx0YnJlYWs7XG5AQCAtMTM4LDcgKzE0NSw4IEBAIHN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2ZpbGxfcm91dGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiBcdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfTkVJR0g6XG4gXHRcdGZsb3dfdHVwbGUtXHUwMDNlaWZpZHggPSByb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLm91dC5pZmluZGV4O1xuIFx0XHRmbG93X3R1cGxlLVx1MDAzZWRzdF9jYWNoZSA9IGRzdDtcbi1cdFx0Zmxvd190dXBsZS1cdTAwM2Vkc3RfY29va2llID0gZmxvd19vZmZsb2FkX2RzdF9jb29raWUoZmxvd190dXBsZSk7XG4rXHRcdGZsb3dfdHVwbGUtXHUwMDNlZHN0X2Nvb2tpZSA9IGZsb3dfb2ZmbG9hZF9kc3RfY29va2llKGZsb3dfdHVwbGUsXG4rXHRcdFx0XHRcdFx0XHRcdCBlbmNhcF9wcm90byk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0V0FSTl9PTl9PTkNFKDEpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbmluZGV4IDI5ZTkzYWMxZTJlNDAwLi40NDk4MThkY2VmM2M3ZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuQEAgLTE5MSwyNSArMTkxLDI3IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdHVwbGVfZW5jYXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRzd2l0Y2ggKGlubmVyX3Byb3RvKSB7XG4tXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbi1cdFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIG9mZnNldCk7XG4tXHRcdGlmIChjdHgtXHUwMDNldHVuLnByb3RvID09IElQUFJPVE9fSVBJUCkge1xuK1x0aWYgKGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQIHx8IGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7XG4rXHRcdHN3aXRjaCAoaW5uZXJfcHJvdG8pIHtcbitcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4rXHRcdFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArXG4rXHRcdFx0XHRcdCAgICAgICBvZmZzZXQpO1xuIFx0XHRcdHR1cGxlLVx1MDAzZXR1bi5kc3RfdjQuc19hZGRyID0gaXBoLVx1MDAzZWRhZGRyO1xuIFx0XHRcdHR1cGxlLVx1MDAzZXR1bi5zcmNfdjQuc19hZGRyID0gaXBoLVx1MDAzZXNhZGRyO1xuLVx0XHRcdHR1cGxlLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDtcbi1cdFx0fVxuLVx0XHRicmVhaztcbi1cdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4tXHRcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzZXQpO1xuLVx0XHRpZiAoY3R4LVx1MDAzZXR1bi5wcm90byA9PSBJUFBST1RPX0lQVjYpIHtcbitcdFx0XHR0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG8gPSBjdHgtXHUwMDNldHVuLnByb3RvO1xuK1x0XHRcdHR1cGxlLVx1MDAzZXR1bi5lbmNhcF9wcm90byA9IEFGX0lORVQ7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4rXHRcdFx0aXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArXG4rXHRcdFx0XHRcdFx0ICBvZmZzZXQpO1xuIFx0XHRcdHR1cGxlLVx1MDAzZXR1bi5kc3RfdjYgPSBpcDZoLVx1MDAzZWRhZGRyO1xuIFx0XHRcdHR1cGxlLVx1MDAzZXR1bi5zcmNfdjYgPSBpcDZoLVx1MDAzZXNhZGRyO1xuLVx0XHRcdHR1cGxlLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjtcbitcdFx0XHR0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG8gPSBjdHgtXHUwMDNldHVuLnByb3RvO1xuK1x0XHRcdHR1cGxlLVx1MDAzZXR1bi5lbmNhcF9wcm90byA9IEFGX0lORVQ2O1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0YnJlYWs7XG4gXHR9XG4gfVxuIFxuQEAgLTMzNiw3ICszMzgsNyBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8oc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdGlmIChpcGgtXHUwMDNldHRsIFx1MDAzYz0gMSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lQSVApIHtcbitcdGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUElQIHx8IGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lQVjYpIHtcbiBcdFx0Y3R4LVx1MDAzZXR1bi5wcm90byA9IGlwaC1cdTAwM2Vwcm90b2NvbDtcbiBcdFx0Y3R4LVx1MDAzZXR1bi5oZHJfc2l6ZSA9IHNpemU7XG4gXHRcdGN0eC1cdTAwM2VvZmZzZXQgKz0gY3R4LVx1MDAzZXR1bi5oZHJfc2l6ZTtcbkBAIC0zNjEsNyArMzYzLDcgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDZfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRpZiAoaXB2Nl9leHRfaGRyKGlwNmgtXHUwMDNlbmV4dGhkcikpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChpcDZoLVx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JUFY2KSB7XG4rXHRpZiAoaXA2aC1cdTAwM2VuZXh0aGRyID09IElQUFJPVE9fSVBJUCB8fCBpcDZoLVx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JUFY2KSB7XG4gXHRcdGN0eC1cdTAwM2V0dW4ucHJvdG8gPSBpcDZoLVx1MDAzZW5leHRoZHI7XG4gXHRcdGN0eC1cdTAwM2V0dW4uaGRyX3NpemUgPSBzaXplb2YoKmlwNmgpO1xuIFx0XHRjdHgtXHUwMDNlb2Zmc2V0ICs9IGN0eC1cdTAwM2V0dW4uaGRyX3NpemU7XG5AQCAtMzgyLDYgKzM4NCwxMCBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X2lwX3R1bm5lbF9wb3Aoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcbiBcdHNrYl9wdWxsKHNrYiwgY3R4LVx1MDAzZXR1bi5oZHJfc2l6ZSk7XG4gXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbitcdGlmIChjdHgtXHUwMDNldHVuLnByb3RvID09IElQUFJPVE9fSVBJUClcbitcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xuK1x0ZWxzZVxuK1x0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbkBAIC00NTgsMjEgKzQ2NCw2IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfZW5jYXBfcG9wKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdG5mX2Zsb3dfaXBfdHVubmVsX3BvcChjdHgsIHNrYik7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcbi1uZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4tXHRcdCAgICAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLXtcbi1cdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcbi1cbi1cdGlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woY3R4LCBza2IsIGh0b25zKEVUSF9QX0lQKSkpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0aWYgKG5mX2Zsb3dfdHVwbGVfaXAoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcdTAwMjZ0dXBsZSk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXG5AQCAtNDg3LDggKzQ3OCwxNiBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pO1xuIFxuIFx0bXR1ID0gZmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgKyBjdHgtXHUwMDNlb2Zmc2V0O1xuLVx0aWYgKGZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXG4rXHRzd2l0Y2ggKGZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bi5lbmNhcF9wcm90bykge1xuK1x0Y2FzZSBBRl9JTkVUOlxuIFx0XHRtdHUgLT0gc2l6ZW9mKCppcGgpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUZfSU5FVDY6XG4rXHRcdG10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGJyZWFrO1xuK1x0fVxuIFxuIFx0aWYgKHVubGlrZWx5KG5mX2Zsb3dfZXhjZWVkc19tdHUoc2tiLCBtdHUpKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNTg4LDIzICs1ODcsMzcgQEAgc3RhdGljIGludCBuZl9mbG93X3BwcG9lX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGlkLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBpcF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbi1cdFx0XHRcdCAgICBfX2JlMzIgKmlwX2RhZGRyKVxuK3N0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxuK1x0XHRcdFx0ICBfX2JlMzIgKmlwX2RhZGRyKVxuIHtcbi1cdHN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0c3RydWN0IHJ0YWJsZSAqcnQgPSBkc3RfcnRhYmxlKHR1cGxlLVx1MDAzZWRzdF9jYWNoZSk7XG4tXHR1OCB0b3MgPSBpcGgtXHUwMDNldG9zLCB0dGwgPSBpcGgtXHUwMDNldHRsO1xuLVx0X19iZTE2IGZyYWdfb2ZmID0gaXBoLVx1MDAzZWZyYWdfb2ZmO1xuLVx0dTMyIGhlYWRyb29tID0gc2l6ZW9mKCppcGgpO1xuK1x0X19iZTE2IGZyYWdfb2ZmID0gMDtcbitcdHN0cnVjdCBpcGhkciAqaXBoO1xuK1x0dTggdG9zID0gMCwgdHRsO1xuK1x0dTMyIGhlYWRyb29tO1xuIFx0aW50IGVycjtcbiBcbitcdGlmICh0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7XG4rXHRcdHN0cnVjdCBpcHY2aGRyICppcDZoO1xuK1xuK1x0XHRpcDZoID0gKHN0cnVjdCBpcHY2aGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4rXHRcdHRvcyA9IGlwdjZfZ2V0X2RzZmllbGQoaXA2aCk7XG4rXHRcdHR0bCA9IGlwNmgtXHUwMDNlaG9wX2xpbWl0O1xuK1x0fSBlbHNlIHtcbitcdFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuK1x0XHRmcmFnX29mZiA9IGlwaC1cdTAwM2VmcmFnX29mZjtcbitcdFx0dG9zID0gaXBoLVx1MDAzZXRvcztcbitcdFx0dHRsID0gaXBoLVx1MDAzZXR0bDtcbitcdH1cbitcbiBcdGVyciA9IGlwdHVubmVsX2hhbmRsZV9vZmZsb2Fkcyhza2IsIFNLQl9HU09fSVBYSVA0KTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRza2Jfc2V0X2lubmVyX2lwcHJvdG8oc2tiLCBJUFBST1RPX0lQSVApO1xuLVx0aGVhZHJvb20gKz0gTExfUkVTRVJWRURfU1BBQ0UocnQtXHUwMDNlZHN0LmRldikgKyBydC1cdTAwM2Vkc3QuaGVhZGVyX2xlbjtcbitcdHNrYl9zZXRfaW5uZXJfaXBwcm90byhza2IsIHR1cGxlLVx1MDAzZXR1bi5sM19wcm90byk7XG4rXHRoZWFkcm9vbSA9IHNpemVvZigqaXBoKSArIExMX1JFU0VSVkVEX1NQQUNFKHJ0LVx1MDAzZWRzdC5kZXYpICtcbitcdFx0ICAgcnQtXHUwMDNlZHN0LmhlYWRlcl9sZW47XG4gXHRlcnIgPSBza2JfY293X2hlYWQoc2tiLCBoZWFkcm9vbSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTYxNSw2ICs2MjgsNyBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwaXBfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHQvKiBQdXNoIGRvd24gYW5kIGluc3RhbGwgdGhlIElQIGhlYWRlci4gKi9cbiBcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCppcGgpKTtcbiBcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuK1x0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xuIFxuIFx0aXBoID0gaXBfaGRyKHNrYik7XG4gXHRpcGgtXHUwMDNldmVyc2lvblx0PSA0O1xuQEAgLTYzNCw1NiArNjQ4LDU3IEBAIHN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBpcF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX3Y0X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbi1cdFx0XHRcdCAgX19iZTMyICppcF9kYWRkcilcbi17XG4tXHRpZiAodHVwbGUtXHUwMDNldHVuX251bSlcbi1cdFx0cmV0dXJuIG5mX2Zsb3dfdHVubmVsX2lwaXBfcHVzaChuZXQsIHNrYiwgdHVwbGUsIGlwX2RhZGRyKTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwNmlwNl9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxuLVx0XHRcdFx0ICAgICAgc3RydWN0IGluNl9hZGRyICoqaXA2X2RhZGRyKVxuK3N0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXA2X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgaW42X2FkZHIgKippcDZfZGFkZHIpXG4ge1xuLVx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbi1cdHN0cnVjdCBydGFibGUgKnJ0ID0gZHN0X3J0YWJsZSh0dXBsZS1cdTAwM2Vkc3RfY2FjaGUpO1xuLVx0X191OCBkc2ZpZWxkID0gaXB2Nl9nZXRfZHNmaWVsZChpcDZoKTtcbitcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHR1cGxlLVx1MDAzZWRzdF9jYWNoZTtcbiBcdHN0cnVjdCBmbG93aTYgZmw2ID0ge1xuIFx0XHQuZGFkZHIgPSB0dXBsZS1cdTAwM2V0dW4uc3JjX3Y2LFxuIFx0XHQuc2FkZHIgPSB0dXBsZS1cdTAwM2V0dW4uZHN0X3Y2LFxuIFx0XHQuZmxvd2k2X3Byb3RvID0gSVBQUk9UT19JUFY2LFxuIFx0fTtcbi1cdHU4IGhvcF9saW1pdCA9IGlwNmgtXHUwMDNlaG9wX2xpbWl0O1xuK1x0dTggaG9wX2xpbWl0LCBkc2ZpZWxkO1xuK1x0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4gXHRpbnQgZXJyLCBtdHU7XG4gXHR1MzIgaGVhZHJvb207XG4gXG4rXHRpZiAodHVwbGUtXHUwMDNldHVuLmwzX3Byb3RvID09IElQUFJPVE9fSVBJUCkge1xuK1x0XHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbitcbitcdFx0ZHNmaWVsZCA9IGlwdjRfZ2V0X2RzZmllbGQoaXBoKTtcbitcdFx0aG9wX2xpbWl0ID0gaXBoLVx1MDAzZXR0bDtcbitcdH0gZWxzZSB7XG4rXHRcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbitcdFx0ZHNmaWVsZCA9IGlwdjZfZ2V0X2RzZmllbGQoaXA2aCk7XG4rXHRcdGhvcF9saW1pdCA9IGlwNmgtXHUwMDNlaG9wX2xpbWl0O1xuK1x0fVxuK1xuIFx0ZXJyID0gaXB0dW5uZWxfaGFuZGxlX29mZmxvYWRzKHNrYiwgU0tCX0dTT19JUFhJUDYpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdHNrYl9zZXRfaW5uZXJfaXBwcm90byhza2IsIElQUFJPVE9fSVBWNik7XG4tXHRoZWFkcm9vbSA9IHNpemVvZigqaXA2aCkgKyBMTF9SRVNFUlZFRF9TUEFDRShydC1cdTAwM2Vkc3QuZGV2KSArXG4tXHRcdCAgIHJ0LVx1MDAzZWRzdC5oZWFkZXJfbGVuO1xuK1x0c2tiX3NldF9pbm5lcl9pcHByb3RvKHNrYiwgdHVwbGUtXHUwMDNldHVuLmwzX3Byb3RvKTtcbitcdGhlYWRyb29tID0gc2l6ZW9mKCppcDZoKSArIExMX1JFU0VSVkVEX1NQQUNFKGRzdC1cdTAwM2VkZXYpICtcbitcdFx0ICAgZHN0LVx1MDAzZWhlYWRlcl9sZW47XG4gXHRlcnIgPSBza2JfY293X2hlYWQoc2tiLCBoZWFkcm9vbSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0c2tiX3NjcnViX3BhY2tldChza2IsIHRydWUpO1xuLVx0bXR1ID0gZHN0X210dShcdTAwMjZydC1cdTAwM2Vkc3QpIC0gc2l6ZW9mKCppcDZoKTtcbitcdG10dSA9IGRzdF9tdHUoZHN0KSAtIHNpemVvZigqaXA2aCk7XG4gXHRtdHUgPSBtYXgobXR1LCBJUFY2X01JTl9NVFUpO1xuIFx0c2tiX2RzdF91cGRhdGVfcG10dV9ub19jb25maXJtKHNrYiwgbXR1KTtcbiBcbiBcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCppcDZoKSk7XG4gXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbitcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIFxuIFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gXHRpcDZfZmxvd19oZHIoaXA2aCwgZHNmaWVsZCxcbiBcdFx0ICAgICBpcDZfbWFrZV9mbG93bGFiZWwobmV0LCBza2IsIGZsNi5mbG93bGFiZWwsIHRydWUsIFx1MDAyNmZsNikpO1xuIFx0aXA2aC1cdTAwM2Vob3BfbGltaXQgPSBob3BfbGltaXQ7XG4tXHRpcDZoLVx1MDAzZW5leHRoZHIgPSBJUFBST1RPX0lQVjY7XG4rXHRpcDZoLVx1MDAzZW5leHRoZHIgPSB0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG87XG4gXHRpcDZoLVx1MDAzZWRhZGRyID0gdHVwbGUtXHUwMDNldHVuLnNyY192NjtcbiBcdGlwNmgtXHUwMDNlc2FkZHIgPSB0dXBsZS1cdTAwM2V0dW4uZHN0X3Y2O1xuIFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2VwYXlsb2FkX2xlbiA9IGh0b25zKHNrYi1cdTAwM2VsZW4gLSBzaXplb2YoKmlwNmgpKTtcbkBAIC02OTQsMTQgKzcwOSwxOCBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwNmlwNl9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX3Y2X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbi1cdFx0XHRcdCAgc3RydWN0IGluNl9hZGRyICoqaXA2X2RhZGRyKVxuK3N0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxuK1x0XHRcdCAgICAgICBfX2JlMzIgKmlwX2RhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKippcDZfZGFkZHIpXG4ge1xuLVx0aWYgKHR1cGxlLVx1MDAzZXR1bl9udW0pXG4tXHRcdHJldHVybiBuZl9mbG93X3R1bm5lbF9pcDZpcDZfcHVzaChuZXQsIHNrYiwgdHVwbGUsIGlwNl9kYWRkcik7XG4tXG4tXHRyZXR1cm4gMDtcbitcdHN3aXRjaCAodHVwbGUtXHUwMDNldHVuLmVuY2FwX3Byb3RvKSB7XG4rXHRjYXNlIEFGX0lORVQ6XG4rXHRcdHJldHVybiBuZl9mbG93X3R1bm5lbF9pcF9wdXNoKG5ldCwgc2tiLCB0dXBsZSwgaXBfZGFkZHIpO1xuK1x0Y2FzZSBBRl9JTkVUNjpcbitcdFx0cmV0dXJuIG5mX2Zsb3dfdHVubmVsX2lwNl9wdXNoKG5ldCwgc2tiLCB0dXBsZSwgaXA2X2RhZGRyKTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IG5mX2Zsb3dfZW5jYXBfcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTgwMSw4NiArODIwLDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9mbG93X3F1ZXVlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIE5GX1NUT0xFTjtcbiB9XG4gXG4tdW5zaWduZWQgaW50XG4tbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4te1xuLVx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xuLVx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XG4tXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcbi1cdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XG4tXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCBjdHggPSB7XG4tXHRcdC5pblx0PSBzdGF0ZS1cdTAwM2Vpbixcbi1cdH07XG4tXHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcbi1cdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4tXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcbi1cdHN0cnVjdCBydGFibGUgKnJ0O1xuLVx0X19iZTMyIGlwX2RhZGRyO1xuLVx0aW50IHJldDtcbi1cbi1cdHR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xuLVx0aWYgKCF0dXBsZWhhc2gpXG4tXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4tXG4tXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiBORl9EUk9QO1xuLVx0ZWxzZSBpZiAocmV0ID09IDApXG4tXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4tXG4tXHRpZiAodW5saWtlbHkodHVwbGVoYXNoLVx1MDAzZXR1cGxlLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9YRlJNKSkge1xuLVx0XHRydCA9IGRzdF9ydGFibGUodHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XG4tXHRcdG1lbXNldChza2ItXHUwMDNlY2IsIDAsIHNpemVvZihzdHJ1Y3QgaW5ldF9za2JfcGFybSkpO1xuLVx0XHRJUENCKHNrYiktXHUwMDNlaWlmID0gc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4O1xuLVx0XHRJUENCKHNrYiktXHUwMDNlZmxhZ3MgPSBJUFNLQl9GT1JXQVJERUQ7XG4tXHRcdHJldHVybiBuZl9mbG93X3htaXRfeGZybShza2IsIHN0YXRlLCBcdTAwMjZydC1cdTAwM2Vkc3QpO1xuLVx0fVxuLVxuLVx0ZGlyID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpcjtcbi1cdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XG4tXHRvdGhlcl90dXBsZSA9IFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlO1xuLVx0aXBfZGFkZHIgPSBvdGhlcl90dXBsZS1cdTAwM2VzcmNfdjQuc19hZGRyO1xuLVxuLVx0aWYgKG5mX2Zsb3dfdHVubmVsX3Y0X3B1c2goc3RhdGUtXHUwMDNlbmV0LCBza2IsIG90aGVyX3R1cGxlLCBcdTAwMjZpcF9kYWRkcikgXHUwMDNjIDApXG4tXHRcdHJldHVybiBORl9EUk9QO1xuLVxuLVx0c3dpdGNoICh0dXBsZWhhc2gtXHUwMDNldHVwbGUueG1pdF90eXBlKSB7XG4tXHRjYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIOlxuLVx0XHRydCA9IGRzdF9ydGFibGUodHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XG4tXHRcdHhtaXQub3V0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc3RhdGUtXHUwMDNlbmV0LCB0dXBsZWhhc2gtXHUwMDNldHVwbGUuaWZpZHgpO1xuLVx0XHRpZiAoIXhtaXQub3V0ZGV2KSB7XG4tXHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuLVx0XHRcdHJldHVybiBORl9EUk9QO1xuLVx0XHR9XG4tXHRcdG5laWdoID0gaXBfbmVpZ2hfZ3c0KHJ0LVx1MDAzZWRzdC5kZXYsIHJ0X25leHRob3AocnQsIGlwX2RhZGRyKSk7XG4tXHRcdGlmIChJU19FUlIobmVpZ2gpKSB7XG4tXHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuLVx0XHRcdHJldHVybiBORl9EUk9QO1xuLVx0XHR9XG4tXHRcdHhtaXQuZGVzdCA9IG5laWdoLVx1MDAzZWhhO1xuLVx0XHRza2JfZHN0X3NldF9ub3JlZihza2IsIFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q6XG4tXHRcdHhtaXQub3V0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc3RhdGUtXHUwMDNlbmV0LCB0dXBsZWhhc2gtXHUwMDNldHVwbGUub3V0LmlmaWR4KTtcbi1cdFx0aWYgKCF4bWl0Lm91dGRldikge1xuLVx0XHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbi1cdFx0XHRyZXR1cm4gTkZfRFJPUDtcbi1cdFx0fVxuLVx0XHR4bWl0LmRlc3QgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUub3V0LmhfZGVzdDtcbi1cdFx0eG1pdC5zb3VyY2UgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUub3V0Lmhfc291cmNlO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdFdBUk5fT05fT05DRSgxKTtcbi1cdFx0cmV0dXJuIE5GX0RST1A7XG4tXHR9XG4tXHR4bWl0LnR1cGxlID0gb3RoZXJfdHVwbGU7XG4tXHR4bWl0Lm5lZWRzX2dzb19zZWdtZW50ID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLm5lZWRzX2dzb19zZWdtZW50O1xuLVxuLVx0cmV0dXJuIG5mX2Zsb3dfcXVldWVfeG1pdChzdGF0ZS1cdTAwM2VuZXQsIHNrYiwgXHUwMDI2eG1pdCk7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKTtcbi1cbiBzdGF0aWMgdm9pZCBuZl9mbG93X25hdF9pcHY2X3RjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsXG4gXHRcdFx0XHQgc3RydWN0IGluNl9hZGRyICphZGRyLFxuIFx0XHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqbmV3X2FkZHIsXG5AQCAtMTA2NSw4ICsxMDA0LDE2IEBAIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbiBcbiBcdG10dSA9IGZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICsgY3R4LVx1MDAzZW9mZnNldDtcbi1cdGlmIChmbG93LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS50dW5fbnVtKVxuK1x0c3dpdGNoIChmbG93LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS50dW4uZW5jYXBfcHJvdG8pIHtcbitcdGNhc2UgQUZfSU5FVDpcbitcdFx0bXR1IC09IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUZfSU5FVDY6XG4gXHRcdG10dSAtPSBzaXplb2YoKmlwNmgpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGJyZWFrO1xuK1x0fVxuIFxuIFx0aWYgKHVubGlrZWx5KG5mX2Zsb3dfZXhjZWVkc19tdHUoc2tiLCBtdHUpKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTEwMCw2ICsxMDQ3LDI1IEBAIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcbituZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4rXHRcdCAgICAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcbitcbitcdGlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woY3R4LCBza2IsIGh0b25zKEVUSF9QX0lQKSkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0aWYgKGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7XG4rXHRcdGlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdH0gZWxzZSBpZiAobmZfZmxvd190dXBsZV9pcChjdHgsIHNrYiwgXHUwMDI2dHVwbGUpIFx1MDAzYyAwKSB7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXHUwMDI2dHVwbGUpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqXG4gbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdFx0ICAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG5AQCAtMTExMCwxMiArMTA3NiwxMTggQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRpZiAoIW5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKGN0eCwgc2tiLCBodG9ucyhFVEhfUF9JUFY2KSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWYgKG5mX2Zsb3dfdHVwbGVfaXB2NihjdHgsIHNrYiwgXHUwMDI2dHVwbGUpIFx1MDAzYyAwKVxuK1x0aWYgKGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQKSB7XG4rXHRcdGlmIChuZl9mbG93X3R1cGxlX2lwKGN0eCwgc2tiLCBcdTAwMjZ0dXBsZSkgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHR9IGVsc2UgaWYgKG5mX2Zsb3dfdHVwbGVfaXB2NihjdHgsIHNrYiwgXHUwMDI2dHVwbGUpIFx1MDAzYyAwKSB7XG4gXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuIFxuIFx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXHUwMDI2dHVwbGUpO1xuIH1cbiBcbit1bnNpZ25lZCBpbnRcbituZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7XG4rXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID0gcHJpdjtcbitcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlO1xuK1x0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcbitcdHN0cnVjdCBuZl9mbG93dGFibGVfY3R4IGN0eCA9IHtcbitcdFx0LmluXHQ9IHN0YXRlLVx1MDAzZWluLFxuK1x0fTtcbitcdHN0cnVjdCBuZl9mbG93X3htaXQgeG1pdCA9IHt9O1xuK1x0c3RydWN0IGluNl9hZGRyICppcDZfZGFkZHI7XG4rXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xuK1x0c3RydWN0IG5laWdoYm91ciAqbmVpZ2g7XG4rXHRzdHJ1Y3QgcnRhYmxlICpydDtcbitcdF9fYmUzMiBpcF9kYWRkcjtcbitcdGludCByZXQ7XG4rXG4rXHR0dXBsZWhhc2ggPSBuZl9mbG93X29mZmxvYWRfbG9va3VwKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgc2tiKTtcbitcdGlmICghdHVwbGVoYXNoKVxuK1x0XHRyZXR1cm4gTkZfQUNDRVBUO1xuK1xuK1x0aWYgKGN0eC50dW4ucHJvdG8gPT0gSVBQUk9UT19JUFY2KVxuK1x0XHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLFxuK1x0XHRcdFx0XHRcdCAgIHNrYik7XG4rXHRlbHNlXG4rXHRcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIE5GX0RST1A7XG4rXHRlbHNlIGlmIChyZXQgPT0gMClcbitcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbitcbitcdGlmICh1bmxpa2VseSh0dXBsZWhhc2gtXHUwMDNldHVwbGUueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX1hGUk0pKSB7XG4rXHRcdHJ0ID0gZHN0X3J0YWJsZSh0dXBsZWhhc2gtXHUwMDNldHVwbGUuZHN0X2NhY2hlKTtcbitcdFx0bWVtc2V0KHNrYi1cdTAwM2VjYiwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0X3NrYl9wYXJtKSk7XG4rXHRcdElQQ0Ioc2tiKS1cdTAwM2VpaWYgPSBza2ItXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXg7XG4rXHRcdElQQ0Ioc2tiKS1cdTAwM2VmbGFncyA9IElQU0tCX0ZPUldBUkRFRDtcbitcdFx0cmV0dXJuIG5mX2Zsb3dfeG1pdF94ZnJtKHNrYiwgc3RhdGUsIFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4rXHR9XG4rXG4rXHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuK1x0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbitcdG90aGVyX3R1cGxlID0gXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGU7XG4rXHRpcF9kYWRkciA9IG90aGVyX3R1cGxlLVx1MDAzZXNyY192NC5zX2FkZHI7XG4rXHRpcDZfZGFkZHIgPSBcdTAwMjZvdGhlcl90dXBsZS1cdTAwM2VzcmNfdjY7XG4rXG4rXHRpZiAobmZfZmxvd190dW5uZWxfcHVzaChzdGF0ZS1cdTAwM2VuZXQsIHNrYiwgb3RoZXJfdHVwbGUsIFx1MDAyNmlwX2RhZGRyLFxuK1x0XHRcdFx0XHUwMDI2aXA2X2RhZGRyKSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIE5GX0RST1A7XG4rXG4rXHRzd2l0Y2ggKHR1cGxlaGFzaC1cdTAwM2V0dXBsZS54bWl0X3R5cGUpIHtcbitcdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfTkVJR0g6IHtcbitcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0O1xuK1xuK1x0XHR4bWl0Lm91dGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHN0YXRlLVx1MDAzZW5ldCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmlmaWR4KTtcbitcdFx0aWYgKCF4bWl0Lm91dGRldikge1xuK1x0XHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbitcdFx0XHRyZXR1cm4gTkZfRFJPUDtcbitcdFx0fVxuK1x0XHRpZiAob3RoZXJfdHVwbGUtXHUwMDNldHVuLmVuY2FwX3Byb3RvID09IEFGX0lORVQ2IHx8XG4rXHRcdCAgICBjdHgudHVuLnByb3RvID09IElQUFJPVE9fSVBWNikge1xuK1x0XHRcdHN0cnVjdCBydDZfaW5mbyAqcnQ2O1xuK1xuK1x0XHRcdHJ0NiA9IGRzdF9ydDZfaW5mbyh0dXBsZWhhc2gtXHUwMDNldHVwbGUuZHN0X2NhY2hlKTtcbitcdFx0XHRuZWlnaCA9IGlwX25laWdoX2d3NihydDYtXHUwMDNlZHN0LmRldixcbitcdFx0XHRcdFx0ICAgICBydDZfbmV4dGhvcChydDYsIGlwNl9kYWRkcikpO1xuK1x0XHRcdGRzdCA9IFx1MDAyNnJ0Ni1cdTAwM2Vkc3Q7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cnQgPSBkc3RfcnRhYmxlKHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kc3RfY2FjaGUpO1xuK1x0XHRcdG5laWdoID0gaXBfbmVpZ2hfZ3c0KHJ0LVx1MDAzZWRzdC5kZXYsXG4rXHRcdFx0XHRcdCAgICAgcnRfbmV4dGhvcChydCwgaXBfZGFkZHIpKTtcbitcdFx0XHRkc3QgPSBcdTAwMjZydC1cdTAwM2Vkc3Q7XG4rXHRcdH1cbitcdFx0aWYgKElTX0VSUihuZWlnaCkpIHtcbitcdFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4rXHRcdFx0cmV0dXJuIE5GX0RST1A7XG4rXHRcdH1cbitcdFx0eG1pdC5kZXN0ID0gbmVpZ2gtXHUwMDNlaGE7XG4rXHRcdHNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgZHN0KTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRjYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX0RJUkVDVDpcbitcdFx0eG1pdC5vdXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShzdGF0ZS1cdTAwM2VuZXQsIHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5vdXQuaWZpZHgpO1xuK1x0XHRpZiAoIXhtaXQub3V0ZGV2KSB7XG4rXHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuK1x0XHRcdHJldHVybiBORl9EUk9QO1xuK1x0XHR9XG4rXHRcdHhtaXQuZGVzdCA9IHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5vdXQuaF9kZXN0O1xuK1x0XHR4bWl0LnNvdXJjZSA9IHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5vdXQuaF9zb3VyY2U7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0V0FSTl9PTl9PTkNFKDEpO1xuK1x0XHRyZXR1cm4gTkZfRFJPUDtcbitcdH1cbitcdHhtaXQudHVwbGUgPSBvdGhlcl90dXBsZTtcbitcdHhtaXQubmVlZHNfZ3NvX3NlZ21lbnQgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUubmVlZHNfZ3NvX3NlZ21lbnQ7XG4rXG4rXHRyZXR1cm4gbmZfZmxvd19xdWV1ZV94bWl0KHN0YXRlLVx1MDAzZW5ldCwgc2tiLCBcdTAwMjZ4bWl0KTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19vZmZsb2FkX2lwX2hvb2spO1xuK1xuIHVuc2lnbmVkIGludFxuIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbkBAIC0xMTMyLDEzICsxMjA0LDE4IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcbiBcdHN0cnVjdCBydDZfaW5mbyAqcnQ7XG4rXHRfX2JlMzIgaXBfZGFkZHI7XG4gXHRpbnQgcmV0O1xuIFxuIFx0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgc2tiKTtcbiBcdGlmICh0dXBsZWhhc2ggPT0gTlVMTClcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbi1cdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XG4rXHRpZiAoY3R4LnR1bi5wcm90byA9PSBJUFBST1RPX0lQSVApXG4rXHRcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xuK1x0ZWxzZVxuK1x0XHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLFxuK1x0XHRcdFx0XHRcdCAgIHNrYik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gTkZfRFJPUDtcbiBcdGVsc2UgaWYgKHJldCA9PSAwKVxuQEAgLTExNTUsMjggKzEyMzIsNDQgQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ZGlyID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpcjtcbiBcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XG4gXHRvdGhlcl90dXBsZSA9IFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlO1xuK1x0aXBfZGFkZHIgPSBvdGhlcl90dXBsZS1cdTAwM2VzcmNfdjQuc19hZGRyO1xuIFx0aXA2X2RhZGRyID0gXHUwMDI2b3RoZXJfdHVwbGUtXHUwMDNlc3JjX3Y2O1xuIFxuLVx0aWYgKG5mX2Zsb3dfdHVubmVsX3Y2X3B1c2goc3RhdGUtXHUwMDNlbmV0LCBza2IsIG90aGVyX3R1cGxlLFxuLVx0XHRcdFx0ICAgXHUwMDI2aXA2X2RhZGRyKSBcdTAwM2MgMClcbitcdGlmIChuZl9mbG93X3R1bm5lbF9wdXNoKHN0YXRlLVx1MDAzZW5ldCwgc2tiLCBvdGhlcl90dXBsZSwgXHUwMDI2aXBfZGFkZHIsXG4rXHRcdFx0XHRcdTAwMjZpcDZfZGFkZHIpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gTkZfRFJPUDtcbiBcbiBcdHN3aXRjaCAodHVwbGVoYXNoLVx1MDAzZXR1cGxlLnhtaXRfdHlwZSkge1xuLVx0Y2FzZSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSDpcbi1cdFx0cnQgPSBkc3RfcnQ2X2luZm8odHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XG4rXHRjYXNlIEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIOiB7XG4rXHRcdHN0cnVjdCBkc3RfZW50cnkgKmRzdDtcbitcbiBcdFx0eG1pdC5vdXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShzdGF0ZS1cdTAwM2VuZXQsIHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5pZmlkeCk7XG4gXHRcdGlmICgheG1pdC5vdXRkZXYpIHtcbiBcdFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4gXHRcdFx0cmV0dXJuIE5GX0RST1A7XG4gXHRcdH1cbi1cdFx0bmVpZ2ggPSBpcF9uZWlnaF9ndzYocnQtXHUwMDNlZHN0LmRldiwgcnQ2X25leHRob3AocnQsIGlwNl9kYWRkcikpO1xuK1x0XHRpZiAob3RoZXJfdHVwbGUtXHUwMDNldHVuLmVuY2FwX3Byb3RvID09IEFGX0lORVQgfHxcbitcdFx0ICAgIGN0eC50dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQKSB7XG4rXHRcdFx0c3RydWN0IHJ0YWJsZSAqcnQ0O1xuK1xuK1x0XHRcdHJ0NCA9IGRzdF9ydGFibGUodHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XG4rXHRcdFx0bmVpZ2ggPSBpcF9uZWlnaF9ndzQocnQ0LVx1MDAzZWRzdC5kZXYsXG4rXHRcdFx0XHRcdCAgICAgcnRfbmV4dGhvcChydDQsIGlwX2RhZGRyKSk7XG4rXHRcdFx0ZHN0ID0gXHUwMDI2cnQ0LVx1MDAzZWRzdDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRydCA9IGRzdF9ydDZfaW5mbyh0dXBsZWhhc2gtXHUwMDNldHVwbGUuZHN0X2NhY2hlKTtcbitcdFx0XHRuZWlnaCA9IGlwX25laWdoX2d3NihydC1cdTAwM2Vkc3QuZGV2LFxuK1x0XHRcdFx0XHQgICAgIHJ0Nl9uZXh0aG9wKHJ0LCBpcDZfZGFkZHIpKTtcbitcdFx0XHRkc3QgPSBcdTAwMjZydC1cdTAwM2Vkc3Q7XG4rXHRcdH1cbiBcdFx0aWYgKElTX0VSUihuZWlnaCkpIHtcbiBcdFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4gXHRcdFx0cmV0dXJuIE5GX0RST1A7XG4gXHRcdH1cbiBcdFx0eG1pdC5kZXN0ID0gbmVpZ2gtXHUwMDNlaGE7XG4tXHRcdHNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgXHUwMDI2cnQtXHUwMDNlZHN0KTtcbitcdFx0c2tiX2RzdF9zZXRfbm9yZWYoc2tiLCBkc3QpO1xuIFx0XHRicmVhaztcbitcdH1cbiBcdGNhc2UgRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUOlxuIFx0XHR4bWl0Lm91dGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KHN0YXRlLVx1MDAzZW5ldCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLm91dC5pZmlkeCk7XG4gXHRcdGlmICgheG1pdC5vdXRkZXYpIHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xuaW5kZXggOThjMDNiNDg3ZjUyMTEuLjVlODRiN2YxOGEyNjdmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xuQEAgLTQ1LDcgKzQ1LDggQEAgc3RhdGljIGJvb2wgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLVx0XHRcdFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCB1OCAqaGEsXG4rXHRcdFx0XHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4rXHRcdFx0XHQgICAgIHU4ICpoYSwgX19iZTE2IGV0aGVyX3R5cGUsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuIHtcbiBcdGNvbnN0IHZvaWQgKmRhZGRyID0gXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MztcbkBAIC03Miw3ICs3Myw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4gXHRcdHJldHVybiAtMTtcbiBcbiBvdXQ6XG4tXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIHN0YWNrKTtcbitcdHJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBoYSwgZXRoZXJfdHlwZSwgc3RhY2spO1xuIH1cbiBcbiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XG5AQCAtMTI4LDYgKzEyOSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5zcmNfdjYgPSBwYXRoLVx1MDAzZXR1bi5zcmNfdjY7XG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5kc3RfdjYgPSBwYXRoLVx1MDAzZXR1bi5kc3RfdjY7XG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5sM19wcm90byA9IHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvO1xuK1x0XHRcdFx0aW5mby1cdTAwM2V0dW4uZW5jYXBfcHJvdG8gPSBwYXRoLVx1MDAzZXR1bi5lbmNhcF9wcm90bztcbiBcdFx0XHRcdGluZm8tXHUwMDNlbnVtX3R1bnMrKztcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0aWYgKGluZm8tXHUwMDNlbnVtX2VuY2FwcyBcdTAwM2U9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKVxuQEAgLTIxNCwxMiArMjE2LDEzIEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3QgPSBOVUxMO1xuIFx0c3RydWN0IGZsb3dpIGZsID0ge307XG4gXG4tXHRzd2l0Y2ggKG5mdF9wZihwa3QpKSB7XG4rXHRzd2l0Y2ggKHR1bi1cdTAwM2VlbmNhcF9wcm90bykge1xuIFx0Y2FzZSBORlBST1RPX0lQVjQ6XG4gXHRcdGZsLnUuaXA0LmRhZGRyID0gdHVuLVx1MDAzZWRzdF92NC5zX2FkZHI7XG4gXHRcdGZsLnUuaXA0LnNhZGRyID0gdHVuLVx1MDAzZXNyY192NC5zX2FkZHI7XG4gXHRcdGZsLnUuaXA0LmZsb3dpNF9paWYgPSBuZnRfaW4ocGt0KS1cdTAwM2VpZmluZGV4O1xuLVx0XHRmbC51LmlwNC5mbG93aTRfZHNjcCA9IGlwNGhfZHNjcChpcF9oZHIocGt0LVx1MDAzZXNrYikpO1xuK1x0XHRpZiAobmZ0X3BmKHBrdCkgPT0gTkZQUk9UT19JUFY0KVxuK1x0XHRcdGZsLnUuaXA0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwX2hkcihwa3QtXHUwMDNlc2tiKSk7XG4gXHRcdGZsLnUuaXA0LmZsb3dpNF9tYXJrID0gcGt0LVx1MDAzZXNrYi1cdTAwM2VtYXJrO1xuIFx0XHRmbC51LmlwNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0FOWVNSQztcbiBcdFx0YnJlYWs7XG5AQCAtMjI3LDEzICsyMzAsMTQgQEAgc3RhdGljIGludCBuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0XHRmbC51LmlwNi5kYWRkciA9IHR1bi1cdTAwM2Vkc3RfdjY7XG4gXHRcdGZsLnUuaXA2LnNhZGRyID0gdHVuLVx1MDAzZXNyY192NjtcbiBcdFx0ZmwudS5pcDYuZmxvd2k2X2lpZiA9IG5mdF9pbihwa3QpLVx1MDAzZWlmaW5kZXg7XG4tXHRcdGZsLnUuaXA2LmZsb3dsYWJlbCA9IGlwNl9mbG93aW5mbyhpcHY2X2hkcihwa3QtXHUwMDNlc2tiKSk7XG4rXHRcdGlmIChuZnRfcGYocGt0KSA9PSBORlBST1RPX0lQVjYpXG4rXHRcdFx0ZmwudS5pcDYuZmxvd2xhYmVsID0gaXA2X2Zsb3dpbmZvKGlwdjZfaGRyKHBrdC1cdTAwM2Vza2IpKTtcbiBcdFx0ZmwudS5pcDYuZmxvd2k2X21hcmsgPSBwa3QtXHUwMDNlc2tiLVx1MDAzZW1hcms7XG4gXHRcdGZsLnUuaXA2LmZsb3dpNl9mbGFncyA9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdG5mX3JvdXRlKG5mdF9uZXQocGt0KSwgXHUwMDI2dHVuX2RzdCwgXHUwMDI2ZmwsIGZhbHNlLCBuZnRfcGYocGt0KSk7XG4rXHRuZl9yb3V0ZShuZnRfbmV0KHBrdCksIFx1MDAyNnR1bl9kc3QsIFx1MDAyNmZsLCBmYWxzZSwgdHVuLVx1MDAzZWVuY2FwX3Byb3RvKTtcbiBcdGlmICghdHVuX2RzdClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG5AQCAtMjU1LDcgKzI1OSw4IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHR1bnNpZ25lZCBjaGFyIGhhW0VUSF9BTEVOXTtcbiBcdGludCBpO1xuIFxuLVx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocm91dGUsIGRzdCwgY3QsIGRpciwgaGEsIFx1MDAyNnN0YWNrKSBcdTAwM2MgMCB8fFxuK1x0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocm91dGUsIGRzdCwgY3QsIGRpciwgaGEsIHBrdC1cdTAwM2VldGhlcnR5cGUsXG4rXHRcdFx0XHQgICAgICBcdTAwMjZzdGFjaykgXHUwMDNjIDAgfHxcbiBcdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgaGEsIFx1MDAyNmZ0LVx1MDAzZWRhdGEpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbkBAIC0yNzYsNiArMjgxLDcgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLnNyY192NiA9IGluZm8udHVuLmRzdF92NjtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmRzdF92NiA9IGluZm8udHVuLnNyY192NjtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmwzX3Byb3RvID0gaW5mby50dW4ubDNfcHJvdG87XG4rXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5lbmNhcF9wcm90byA9IGluZm8udHVuLmVuY2FwX3Byb3RvO1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5udW1fdHVucyA9IGluZm8ubnVtX3R1bnM7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2NvbmZpZ1xuaW5kZXggYzNjMTIxYjZmMzAwYTkuLmEyMTJiOWVkYmNkOTdlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWdcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29uZmlnXG5AQCAtMzUsNiArMzUsNyBAQCBDT05GSUdfSVBfU0NUUD1tXG4gQ09ORklHX0lQVjY9eVxuIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUz15XG4gQ09ORklHX0lQVjZfVFVOTkVMPW1cbitDT05GSUdfSVBWNl9TSVQ9bVxuIENPTkZJR19JUF9WUz1tXG4gQ09ORklHX0lQX1ZTX1BST1RPX1RDUD15XG4gQ09ORklHX0lQX1ZTX1JSPW1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbmluZGV4IDA4YWQwNzUwMGU4YTcxLi40NmJkMDgwMTA4YmUzNiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoXG5AQCAtNTc5LDkgKzU3OSw4IEBAIGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19uYXQgXCIkbnMxXCIgXCIkbnMyXCIgMSBcIlwiOyB0aGVuXG4gXHRpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgbGlzdCBydWxlc2V0XG4gZmlcbiBcbi0jIElQSVAgdHVubmVsIHRlc3Q6XG4tIyBBZGQgSVBJUCB0dW5uZWwgaW50ZXJmYWNlcyBhbmQgY2hlY2sgZmxvd3RhYmxlIGFjY2VsZXJhdGlvbi5cbi10ZXN0X2lwaXAoKSB7XG4rIyBJUCB0dW5uZWwgdGVzdHM6XG4rdGVzdF9pcF90bmxzKCkge1xuIGlmICEgaXAgLW5ldCBcIiRuc3IxXCIgbGluayBhZGQgbmFtZSB0dW4wIHR5cGUgaXBpcCBcXFxuICAgICAgbG9jYWwgMTkyLjE2OC4xMC4xIHJlbW90ZSAxOTIuMTY4LjEwLjIgXHUwMDNlL2Rldi9udWxsO3RoZW5cbiBcdGVjaG8gXCJTS0lQOiBjb3VsZCBub3QgYWRkIGlwaXAgdHVubmVsXCJcbkBAIC01OTQsNyArNTkzLDEzIEBAIGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjAuZm9yd2FyZGluZz0xIFx1MDAzZSAvZGV2L251bGxcbiBcbiBpcCAtbmV0IFwiJG5zcjFcIiBsaW5rIGFkZCBuYW1lIHR1bjYgdHlwZSBpcDZ0bmwgbG9jYWwgZmVlMToyOjoxIHJlbW90ZSBmZWUxOjI6OjIgZW5jYXBsaW1pdCBub25lXG4gaXAgLW5ldCBcIiRuc3IxXCIgbGluayBzZXQgdHVuNiB1cFxuK2lwIC1uZXQgXCIkbnNyMVwiIGFkZHIgYWRkIDE5Mi4xNjguMjEwLjEvMjQgZGV2IHR1bjZcbiBpcCAtbmV0IFwiJG5zcjFcIiBhZGRyIGFkZCBmZWUxOjM6OjEvNjQgZGV2IHR1bjYgbm9kYWRcbitpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW42LmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4rXG4raXAgLW5ldCBcIiRuc3IxXCIgbGluayBhZGQgbmFtZSBzaXQxIHR5cGUgc2l0IGxvY2FsIDE5Mi4xNjguMTAuMSByZW1vdGUgMTkyLjE2OC4xMC4yIHR0bCAyNTVcbitpcCAtbmV0IFwiJG5zcjFcIiBsaW5rIHNldCBzaXQxIHVwXG4raXAgLW5ldCBcIiRuc3IxXCIgYWRkciBhZGQgZmUwMTozOjoxLzY0IGRldiBzaXQxIG5vZGFkXG4gXG4gaXAgLW5ldCBcIiRuc3IyXCIgbGluayBhZGQgbmFtZSB0dW4wIHR5cGUgaXBpcCBsb2NhbCAxOTIuMTY4LjEwLjIgcmVtb3RlIDE5Mi4xNjguMTAuMVxuIGlwIC1uZXQgXCIkbnNyMlwiIGxpbmsgc2V0IHR1bjAgdXBcbkBAIC02MDMsNyArNjA4LDEzIEBAIGlwIG5ldG5zIGV4ZWMgXCIkbnNyMlwiIHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjAuZm9yd2FyZGluZz0xIFx1MDAzZSAvZGV2L251bGxcbiBcbiBpcCAtbmV0IFwiJG5zcjJcIiBsaW5rIGFkZCBuYW1lIHR1bjYgdHlwZSBpcDZ0bmwgbG9jYWwgZmVlMToyOjoyIHJlbW90ZSBmZWUxOjI6OjEgZW5jYXBsaW1pdCBub25lIHx8IHJldD0xXG4gaXAgLW5ldCBcIiRuc3IyXCIgbGluayBzZXQgdHVuNiB1cFxuK2lwIC1uZXQgXCIkbnNyMlwiIGFkZHIgYWRkIDE5Mi4xNjguMjEwLjIvMjQgZGV2IHR1bjZcbiBpcCAtbmV0IFwiJG5zcjJcIiBhZGRyIGFkZCBmZWUxOjM6OjIvNjQgZGV2IHR1bjYgbm9kYWRcbitpcCBuZXRucyBleGVjIFwiJG5zcjJcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW42LmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4rXG4raXAgLW5ldCBcIiRuc3IyXCIgbGluayBhZGQgbmFtZSBzaXQxIHR5cGUgc2l0IGxvY2FsIDE5Mi4xNjguMTAuMiByZW1vdGUgMTkyLjE2OC4xMC4xIHR0bCAyNTVcbitpcCAtbmV0IFwiJG5zcjJcIiBsaW5rIHNldCBzaXQxIHVwXG4raXAgLW5ldCBcIiRuc3IyXCIgYWRkciBhZGQgZmUwMTozOjoyLzY0IGRldiBzaXQxIG5vZGFkXG4gXG4gaXAgLW5ldCBcIiRuc3IxXCIgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMTAwLjJcbiBpcCAtbmV0IFwiJG5zcjJcIiByb3V0ZSBjaGFuZ2UgZGVmYXVsdCB2aWEgMTkyLjE2OC4xMDAuMVxuQEAgLTYxOSw2ICs2MzAsNyBAQCBpcCAtNiAtbmV0IFwiJG5zMlwiIHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBkZWFkOjI6OjFcbiBcbiBpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAnbWV0YSBvaWYgdHVuMCBhY2NlcHQnXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJ21ldGEgb2lmIHR1bjYgYWNjZXB0J1xuK2lwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICdtZXRhIG9pZiBzaXQxIGFjY2VwdCdcbiBpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcXFxuIFx0J21ldGEgb2lmIFwidmV0aDBcIiB0Y3Agc3BvcnQgMTIzNDUgY3QgbWFyayBzZXQgMSBmbG93IGFkZCBAZjEgY291bnRlciBuYW1lIHJvdXRlZF9yZXBsIGFjY2VwdCdcbiBcbkBAIC02MzYsNiArNjQ4LDI4IEBAIGVsc2VcbiBcdHJldD0xXG4gZmlcbiBcbitpcCAtbmV0IFwiJG5zcjFcIiByb3V0ZSBjaGFuZ2UgZGVmYXVsdCB2aWEgMTkyLjE2OC4yMTAuMlxuK2lwIC1uZXQgXCIkbnNyMlwiIHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIxMC4xXG4rXG4raWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCBcIiRuczFcIiBcIiRuczJcIiAxIFwiSVA0SVA2IHR1bm5lbFwiOyB0aGVuXG4rXHRlY2hvIFwiRkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggSVA0SVA2IHR1bm5lbFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgbGlzdCBydWxlc2V0XG4rXHRyZXQ9MVxuK2ZpXG4rXG4raXAgLTYgLW5ldCBcIiRuc3IxXCIgcm91dGUgZGVsZXRlIGRlZmF1bHRcbitpcCAtNiAtbmV0IFwiJG5zcjFcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmUwMTozOjoyXG4raXAgLTYgLW5ldCBcIiRuc3IyXCIgcm91dGUgZGVsZXRlIGRlZmF1bHRcbitpcCAtNiAtbmV0IFwiJG5zcjJcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmUwMTozOjoxXG4rXG4raWYgdGVzdF90Y3BfZm9yd2FyZGluZyBcIiRuczFcIiBcIiRuczJcIiAxIDYgXCJbZGVhZDoyOjo5OV1cIiAxMjM0NTsgdGhlblxuK1x0ZWNobyBcIlBBU1M6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiBTSVQgdHVubmVsXCJcbitlbHNlXG4rXHRlY2hvIFwiRkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggU0lUIHR1bm5lbFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgbGlzdCBydWxlc2V0XG4rXHRyZXQ9MVxuK2ZpXG4rXG4gIyBDcmVhdGUgdmxhbiB0YWdnZWQgZGV2aWNlcyBmb3IgSVBJUCB0cmFmZmljLlxuIGlwIC1uZXQgXCIkbnNyMVwiIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSB2ZXRoMS4xMCB0eXBlIHZsYW4gaWQgMTBcbiBpcCAtbmV0IFwiJG5zcjFcIiBsaW5rIHNldCB2ZXRoMS4xMCB1cFxuQEAgLTY1MywxMSArNjg3LDE4IEBAIGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICdtZXRhIG9pZiB0dW4wLjEwIGFcbiBcbiBpcCAtbmV0IFwiJG5zcjFcIiBsaW5rIGFkZCBuYW1lIHR1bjYuMTAgdHlwZSBpcDZ0bmwgbG9jYWwgZmVlMTo0OjoxIHJlbW90ZSBmZWUxOjQ6OjIgZW5jYXBsaW1pdCBub25lXG4gaXAgLW5ldCBcIiRuc3IxXCIgbGluayBzZXQgdHVuNi4xMCB1cFxuK2lwIC1uZXQgXCIkbnNyMVwiIGFkZHIgYWRkIDE5Mi4xNjguMjIwLjEvMjQgZGV2IHR1bjYuMTBcbiBpcCAtbmV0IFwiJG5zcjFcIiBhZGRyIGFkZCBmZWUxOjU6OjEvNjQgZGV2IHR1bjYuMTAgbm9kYWRcbitpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW42LzEwLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4gaXAgLTYgLW5ldCBcIiRuc3IxXCIgcm91dGUgZGVsZXRlIGRlZmF1bHRcbiBpcCAtNiAtbmV0IFwiJG5zcjFcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmVlMTo1OjoyXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJ21ldGEgb2lmIHR1bjYuMTAgYWNjZXB0J1xuIFxuK2lwIC1uZXQgXCIkbnNyMVwiIGxpbmsgYWRkIG5hbWUgc2l0MS4xMCB0eXBlIHNpdCBsb2NhbCAxOTIuMTY4LjIwLjEgcmVtb3RlIDE5Mi4xNjguMjAuMiB0dGwgMjU1XG4raXAgLW5ldCBcIiRuc3IxXCIgbGluayBzZXQgc2l0MS4xMCB1cFxuK2lwIC1uZXQgXCIkbnNyMVwiIGFkZHIgYWRkIGZlMDE6NTo6MS82NCBkZXYgc2l0MS4xMCBub2RhZFxuK2lwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICdtZXRhIG9pZiBzaXQxLjEwIGFjY2VwdCdcbitcbiBpcCAtbmV0IFwiJG5zcjJcIiBsaW5rIGFkZCBsaW5rIHZldGgwIG5hbWUgdmV0aDAuMTAgdHlwZSB2bGFuIGlkIDEwXG4gaXAgLW5ldCBcIiRuc3IyXCIgbGluayBzZXQgdmV0aDAuMTAgdXBcbiBpcCAtbmV0IFwiJG5zcjJcIiBhZGRyIGFkZCAxOTIuMTY4LjIwLjIvMjQgZGV2IHZldGgwLjEwXG5AQCAtNjcyLDcgKzcxMywxNCBAQCBpcCBuZXRucyBleGVjIFwiJG5zcjJcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW4wLzEwLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4gXG4gaXAgLW5ldCBcIiRuc3IyXCIgbGluayBhZGQgbmFtZSB0dW42LjEwIHR5cGUgaXA2dG5sIGxvY2FsIGZlZTE6NDo6MiByZW1vdGUgZmVlMTo0OjoxIGVuY2FwbGltaXQgbm9uZSB8fCByZXQ9MVxuIGlwIC1uZXQgXCIkbnNyMlwiIGxpbmsgc2V0IHR1bjYuMTAgdXBcbitpcCAtbmV0IFwiJG5zcjJcIiBhZGRyIGFkZCAxOTIuMTY4LjIyMC4yLzI0IGRldiB0dW42LjEwXG4gaXAgLW5ldCBcIiRuc3IyXCIgYWRkciBhZGQgZmVlMTo1OjoyLzY0IGRldiB0dW42LjEwIG5vZGFkXG4raXAgbmV0bnMgZXhlYyBcIiRuc3IyXCIgc3lzY3RsIG5ldC5pcHY0LmNvbmYudHVuNi8xMC5mb3J3YXJkaW5nPTEgXHUwMDNlIC9kZXYvbnVsbFxuK1xuK2lwIC1uZXQgXCIkbnNyMlwiIGxpbmsgYWRkIG5hbWUgc2l0MS4xMCB0eXBlIHNpdCBsb2NhbCAxOTIuMTY4LjIwLjIgcmVtb3RlIDE5Mi4xNjguMjAuMSB0dGwgMjU1XG4raXAgLW5ldCBcIiRuc3IyXCIgbGluayBzZXQgc2l0MS4xMCB1cFxuK2lwIC1uZXQgXCIkbnNyMlwiIGFkZHIgYWRkIGZlMDE6NTo6Mi82NCBkZXYgc2l0MS4xMCBub2RhZFxuK1xuIGlwIC02IC1uZXQgXCIkbnNyMlwiIHJvdXRlIGRlbGV0ZSBkZWZhdWx0XG4gaXAgLTYgLW5ldCBcIiRuc3IyXCIgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlZTE6NTo6MVxuIFxuQEAgLTY5MCw2ICs3MzgsMjggQEAgZWxzZVxuIFx0cmV0PTFcbiBmaVxuIFxuK2lwIC1uZXQgXCIkbnNyMVwiIHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIyMC4yXG4raXAgLW5ldCBcIiRuc3IyXCIgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMjIwLjFcbitcbitpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0IFwiJG5zMVwiIFwiJG5zMlwiIDEgXCJJUDRJUDYgdHVubmVsIG92ZXIgdmxhblwiOyB0aGVuXG4rXHRlY2hvIFwiRkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggSVA0SVA2IHR1bm5lbCBvdmVyIHZsYW5cIiAxXHUwMDNlXHUwMDI2MlxuK1x0aXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IGxpc3QgcnVsZXNldFxuK1x0cmV0PTFcbitmaVxuK1xuK2lwIC02IC1uZXQgXCIkbnNyMVwiIHJvdXRlIGRlbGV0ZSBkZWZhdWx0XG4raXAgLTYgLW5ldCBcIiRuc3IxXCIgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlMDE6NTo6MlxuK2lwIC02IC1uZXQgXCIkbnNyMlwiIHJvdXRlIGRlbGV0ZSBkZWZhdWx0XG4raXAgLTYgLW5ldCBcIiRuc3IyXCIgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlMDE6NTo6MVxuK1xuK2lmIHRlc3RfdGNwX2ZvcndhcmRpbmcgXCIkbnMxXCIgXCIkbnMyXCIgMSA2IFwiW2RlYWQ6Mjo6OTldXCIgMTIzNDU7IHRoZW5cbitcdGVjaG8gXCJQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgU0lUIHR1bm5lbCBvdmVyIHZsYW5cIlxuK2Vsc2VcbitcdGVjaG8gXCJGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBTSVQgdHVubmVsIG92ZXIgdmxhblwiIDFcdTAwM2VcdTAwMjYyXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgbGlzdCBydWxlc2V0XG4rXHRyZXQ9MVxuK2ZpXG4rXG4gIyBSZXN0b3JlIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uXG4gaXAgLW5ldCBcIiRuc3IxXCIgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMTAuMlxuIGlwIC1uZXQgXCIkbnNyMlwiIHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjEwLjFcbkBAIC03ODIsNyArODUyLDcgQEAgaXAgLW5ldCBcIiRuc3IxXCIgYWRkciBhZGQgZGVhZDoxOjoxLzY0IGRldiB2ZXRoMCBub2RhZFxuIGlwIC1uZXQgXCIkbnNyMVwiIGxpbmsgc2V0IHVwIGRldiB2ZXRoMFxuIH1cbiBcbi10ZXN0X2lwaXBcbit0ZXN0X2lwX3RubHNcbiBcbiB0ZXN0X2JyaWRnZVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6Mjg6MzIuODAyNjA4OTg5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1MjY4MjIyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgRmxvd3RhYmxlIE9mZmxvYWQgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCdzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzLCBzcGFubmluZyBxdWl0ZSBhIGZldyBmaWxlcy4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgZHJpdmVycyBmb3IgYWlyb2hhIGFuZCBtZWRpYXRlayBQUEUgKHBhY2tldCBwcm9jZXNzaW5nIGVuZ2luZSkgaW1wbGVtZW50YXRpb25zLCBjb3JlIG5ldHdvcmtpbmcgY29kZSwgYW5kIG5ldGZpbHRlciBpdHNlbGYsIGluY2x1ZGluZyB0aGUgZmxvd3RhYmxlIG9mZmxvYWQuIFNwZWNpZmljYWxseSwgaXQncyBhYm91dCBhZGRpbmcgc3VwcG9ydCBmb3IgSVAtaW4tSVAsIElQdjYtaW4tSVB2NCAoU0lUKSwgYW5kIElQdjQtaW4tSVB2NiB0dW5uZWxzIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZsb3d0YWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBtYWpvciBvbmUuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGdvb2QgZnV6emluZyBjYW1wYWlnbi5cblxuRmlyc3QsIGxldCdzIG5haWwgZG93biB3aGF0IHRoaXMgYWN0dWFsbHkgZG9lcy4gSXQgbG9va3MgbGlrZSBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBpcyBiZWluZyB1cGRhdGVkIHRvIHRha2UgYW4gYGV0aGVyX3R5cGVgIGFyZ3VtZW50LiBBbHNvLCBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAgaXMgYmVpbmcgbW9kaWZpZWQsIGFuZCBhIG5ldyBmdW5jdGlvbiwgYGlwaXA2X3R1bm5lbF9maWxsX2ZvcndhcmRfcGF0aGAgaXMgYmVpbmcgYWRkZWQuICBgbmZfZmxvd190YWJsZV9pcC5jYCBpcyBnZXR0aW5nIHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBlbmNhcHN1bGF0aW9uIHByb3RvY29scyBgSVBQUk9UT19JUElQYCBhbmQgYElQUFJPVE9fSVBWNmAuXG5cbk5vdywgZm9yIHNwZWNpZmljIHRhcmdldHMsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZnVuY3Rpb25zIHRoYXQgd2VyZSBhY3R1YWxseSBtb2RpZmllZCBvciBpbnRyb2R1Y2VkLiBIZXJlJ3Mgd2hhdCBJIHNlZTpcbiogICBBIGJ1bmNoIG9mIGNoYW5nZXMgaW4gdGhlIFBQRSBkcml2ZXJzOiBgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvYCwgYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLCBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAsIGBtdGtfZmxvd19nZXRfd2RtYV9pbmZvYCwgYG10a19mbG93X3NldF9vdXRwdXRfZGV2aWNlYCwgYW5kIGBtdGtfZmxvd19vZmZsb2FkX3JlcGxhY2VgLiBUaG9zZSB3aWxsIGJlIHBsYXRmb3JtLXNwZWNpZmljLCBzbyBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gYWNjb3VudCBmb3IgdGhlbS5cbiogICBUaGUgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uczogYGRldl9maWxsX2ZvcndhcmRfcGF0aGAsIGBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgLCBhbmQgdGhlIG5ldyBgaXBpcDZfdHVubmVsX2ZpbGxfZm9yd2FyZF9wYXRoYC5cbiogICBBbmQgYSB3aG9sZSBzZXQgb2YgbmV0ZmlsdGVyIGZ1bmN0aW9uczogYGZsb3dfb2ZmbG9hZF9kc3RfY29va2llYCwgYGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlYCwgYG5mX2Zsb3dfdHVwbGVfZW5jYXBgLCBgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvYCwgYG5mX2Zsb3dfaXA2X3R1bm5lbF9wcm90b2AsIGBuZl9mbG93X2lwX3R1bm5lbF9wb3BgLCBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgLCBgbmZfZmxvd190dW5uZWxfaXBfcHVzaGAsIGBuZl9mbG93X3R1bm5lbF9pcDZfcHVzaGAsIGBuZl9mbG93X3R1bm5lbF9wdXNoYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgLCBgbmZfZmxvd19vZmZsb2FkX2xvb2t1cGAsIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXBgLCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AsIGBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYG5mdF9kZXZfcGF0aF9pbmZvYCwgYG5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGVgLCBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgLiBUaGlzIGlzIGEgbG90IHRvIHRlc3QsIHNvIEknbGwgaGF2ZSB0byBjb25zaWRlciB3aGljaCBhcmUgbW9zdCBsaWtlbHkgdG8gYmUgZXhwb3NlZC5cblxuTmV4dCwgSSBuZWVkIHRvIGJlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkOiBgQ09ORklHX05GX0ZMT1dfVEFCTEVgLCBgQ09ORklHX0lQVjZfU0lUYCwgYENPTkZJR19JUFY2X1RVTk5FTGAsIGBDT05GSUdfTkVUX0lQSVBgLCBhbmQgcG90ZW50aWFsbHkgYENPTkZJR19ORVRfSVBHUkVgLiBUaW1lIHRvIHZlcmlmeS5cblxuQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBuZXQvaXB2Ni9zaXQuY2AgaXMgaW5kZWVkIHRpZWQgdG8gYENPTkZJR19JUFY2X1NJVGAsIGBuZXQvaXB2NC9pcGlwLmNgIGlzIGVuYWJsZWQgYnkgYENPTkZJR19ORVRfSVBJUGAsIGFuZCBgbmV0L2lwdjYvaXA2X3R1bm5lbC5jYCBieSBgQ09ORklHX0lQVjZfVFVOTkVMYC4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYCBzaG91bGQgYmUgZW5hYmxlZCB2aWEgYENPTkZJR19ORl9GTE9XX1RBQkxFYC4gTm93LCBJIHNob3VsZCBoYXZlIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzYyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTk1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6Mjk6MTMuMzI5NDM0NTY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzAwMTU4NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLS4qaXBpcC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19JUF9NUk9VVEVfQ09NTU9OKSArPSBpcG1yX2Jhc2Uub1xcbm5ldC9pcHY0L01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19ORVRfSVBJUCkgKz0gaXBpcC5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMjYtZ3JlLXkgOj0gZ3JlX2RlbXV4Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6Mjk6MTUuMzU5NDYyODU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2MDExOTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhhdDpcblxuKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gVmFyaWFibGU6IGBDT05GSUdfTkVUX0lQSVBgKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biBgQ09ORklHX05FVF9JUElQYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQsIGFzIGFuIGV4cGVydCBpbiBuZXR3b3JraW5nLCBpcyB0aGF0IHRoaXMgdmFyaWFibGUgbGlrZWx5IGNvbnRyb2xzIHRoZSBhdmFpbGFiaWxpdHkgb3IgZnVuY3Rpb25hbGl0eSBvZiBJUElQIChJUC1pbi1JUCkgdHVubmVsaW5nIHdpdGhpbiBhIHN5c3RlbSdzIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gSSBrbm93IElQSVAsIGFuZCBJIGtub3cgaXQncyBhIHJlbGF0aXZlbHkgc2ltcGxlLCB5ZXQgZm91bmRhdGlvbmFsLCBtZXRob2QgZm9yIGVuY2Fwc3VsYXRpbmcgSVAgcGFja2V0cyBpbnNpZGUgb3RoZXIgSVAgcGFja2V0cy4gU28sIGVuYWJsaW5nIHRoaXMgd291bGQgcHJvdmlkZSBhIGJhc2ljIHdheSB0byBlc3RhYmxpc2ggdHVubmVscywgcG90ZW50aWFsbHkgYWxsb3dpbmcgZm9yIHRoZSBjcmVhdGlvbiBvZiB2aXJ0dWFsIG5ldHdvcmtzLCBieXBhc3NpbmcgbmV0d29yayByZXN0cmljdGlvbnMsIG9yIGV4dGVuZGluZyBhIG5ldHdvcmsgYWNyb3NzIGRpc3BhcmF0ZSBzZWdtZW50cy4gSSdtIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHJvdXRpbmcgdGFibGVzLCBNVFUgY29uc2lkZXJhdGlvbnMgKHRoZSBlbmNhcHN1bGF0ZWQgcGFja2V0IG5lZWRzIHRvIGZpdCksIGFuZCBwb3RlbnRpYWwgb3ZlcmhlYWQgZnJvbSB0aGUgYWRkZWQgaGVhZGVycy4gSSdtIGFsc28gdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyDigJMgZG9lcyBlbmFibGluZyB0aGlzIGV4cG9zZSB2dWxuZXJhYmlsaXRpZXMgaWYgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHksIGdpdmVuIHRoYXQgdGhlIHVuZGVybHlpbmcgcGFja2V0cyBhcmUgZW5jYXBzdWxhdGVkIGFuZCBtYXkgb2JzY3VyZSBpbmZvcm1hdGlvbiBmcm9tIGJhc2ljIGZpcmV3YWxscyBvciBpbnRydXNpb24gZGV0ZWN0aW9uIHN5c3RlbXM/IEFuZCBJJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIG90aGVyIHR1bm5lbGluZyBvciBWUE4gdGVjaG5vbG9naWVzLCBzdWNoIGFzIEdSRSBvciBWWExBTiwgd29uZGVyaW5nIGFib3V0IGl0cyBzdHJlbmd0aHMgYW5kIHdlYWtuZXNzZXMgY29tcGFyZWQgdG8gdGhlc2UgYWx0ZXJuYXRpdmVzIGluIHRlcm1zIG9mIGZlYXR1cmVzLCBzY2FsYWJpbGl0eSwgYW5kIHBlcmZvcm1hbmNlLiBJbiBzaG9ydCwgaXQncyBhIGJhc2ljIGFuZCBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBmb3IgbmV0d29ya2luZyBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzQ3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6Mjk6MTkuMjE5NTg3MDk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzA3MzI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotLipzaXQub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT00MD1vYmotJChDT05GSUdfSVBWNl9WVEkpICs9IGlwNl92dGkub1xcbm5ldC9pcHY2L01ha2VmaWxlOjQxOm9iai0kKENPTkZJR19JUFY2X1NJVCkgKz0gc2l0Lm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS00Mi1vYmotJChDT05GSUdfSVBWNl9UVU5ORUwpICs9IGlwNl90dW5uZWwub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToyOToxOS43NjI2NzEzMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTA1MDUyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zOlxuXG4qKkRlZXAgRGl2ZSBvbiBJUHY2IFR1bm5lbGluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIGBDT05GSUdfSVBWNl9TSVRgIGFuZCBgQ09ORklHX0lQVjZfVFVOTkVMYC4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsLCBhcmVuJ3QgdGhleT8gVGhleSByZXByZXNlbnQgdGhlIGNvcmUgbWVjaGFuaXNtcyBmb3IgZW5jYXBzdWxhdGluZyBJUHY2IHRyYWZmaWMgd2l0aGluIGFuIElQdjQgbmV0d29yaywgcmlnaHQ/IGBDT05GSUdfSVBWNl9TSVRgIHNwZWNpZmljYWxseSBmbGFncyBzdXBwb3J0IGZvciBTaW1wbGUgSW50ZXJuZXQgVHJhbnNpdGlvbiAoU0lUKSB0dW5uZWxzLiBTbywgd2UncmUgdGFsa2luZyBhYm91dCB0aGF0IGNsYXNzaWMgNmluNCBzZXR1cC5cblxuQW5kIG9mIGNvdXJzZSwgYENPTkZJR19JUFY2X1RVTk5FTGAgaXMgdGhlIGJyb2FkZXIgb3B0aW9uLiBJdCdzIHRoZSBlbmFibGluZyBmbGFnIGZvciB2YXJpb3VzIHR1bm5lbGluZyBtZXRob2RzLCBub3QganVzdCBTSVQuIFdlIGNvdWxkIGJlIGRlYWxpbmcgd2l0aCBnZW5lcmljIHR1bm5lbHMsIG90aGVyIGVuY2Fwc3VsYXRpb24gbWV0aG9kcywgcG90ZW50aWFsbHkgR1JFIG9yIGV2ZW4gbW9yZSBhZHZhbmNlZCB0dW5uZWxpbmcgcHJvdG9jb2xzLiBOb3csIGFuIGludGVyZXN0aW5nIHF1ZXN0aW9uIGFyaXNlcyDigJMgYXJlIHRoZXNlIHNldHRpbmdzIG11dHVhbGx5IGV4Y2x1c2l2ZSwgb3IgZG8gdGhleSBidWlsZCB1cG9uIGVhY2ggb3RoZXIgaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24/IFRoYXQgd2FycmFudHMgbW9yZSByZXNlYXJjaC4gVGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgaW50ZXJvcGVyYWJpbGl0eSBhbmQgcm91dGUgbWFuYWdlbWVudCBhcmUgY29uc2lkZXJhYmxlLiBJIG5lZWQgdG8ga2VlcCB0aGVzZSBjb25jZXB0cyBzdHJhaWdodCB3aGVuIGNvbnNpZGVyaW5nIGNvbmZpZ3VyYXRpb24gb3IgaW1wbGVtZW50YXRpb24uIFRoZSBkZXZpbCBpcyBjZXJ0YWlubHkgaW4gdGhlIGRldGFpbHMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxNjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToyOToyMy40NTMxNzkwMTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwNjA3OTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai0uKm5mX2Zsb3dfdGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEzOT1vYmotJChDT05GSUdfTkZUX0ZXRF9ORVRERVYpXFx0Kz0gbmZ0X2Z3ZF9uZXRkZXYub1xcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDEtIyBmbG93IHRhYmxlIGluZnJhc3RydWN0dXJlXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDI6b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXFx0Kz0gbmZfZmxvd190YWJsZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDMtbmZfZmxvd190YWJsZS1vYmpzXFx0XFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXFxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTUxPWVuZGlmXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNTItXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNTM6b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEVfSU5FVCkgKz0gbmZfZmxvd190YWJsZV9pbmV0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6Mjk6MjMuNjUzNzkyMjk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc5NjYzNDY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0ZmlsdGVyIEZsb3cgVGFibGUgVHVubmVsIE9mZmxvYWQgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19ORl9GTE9XX1RBQkxFYCBqdW1wcyBvdXQuIFNlZW1zIGxpa2UgdGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgbWF0dGVyLiBNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIHR1bm5lbCBvZmZsb2FkIGxvZ2ljLCBnaXZlbiB0aGUgZnVuY3Rpb24gbmFtZXMuXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaGFuZGxlcyB0dW5uZWwgb2ZmbG9hZC4gSSBzaG91bGQgZGlnIGludG8gdGhlIGZ1bmN0aW9uIGNhbGxzIHdpdGhpbiB0aGlzIGFyZWE6IGBpcGlwNl90dW5uZWxfZmlsbF9mb3J3YXJkX3BhdGhgLCBgbmZfZmxvd190dW5uZWxfaXBfcHVzaGAsIGBuZl9mbG93X3R1bm5lbF9pcDZfcHVzaGAsIGBuZl9mbG93X3R1bm5lbF9wdXNoYCwgYG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXBgLCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgLCBgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aGAsIGFuZCBgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZWAuIFRoZXNlIGFyZSBhbGwgcHJldHR5IHRlbGxpbmcuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIGBDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUYCBsb29rcyBsaWtlIGl0IG1pZ2h0IGJlIHJlbGF0ZWQgYXMgd2VsbCwgYW5kIGV2ZW4gaWYgdW5jaGFuZ2VkLCBgQ09ORklHX05FVF9JUEdSRWAgYWxvbmdzaWRlIGBpcGlwYCBhbmQgYHNpdGAgbWlnaHQgYmUgZ29vZCB0byBjb25zaWRlci5cblxuQWZ0ZXIgYSBxdWljayByZXZpZXcsIEkgc2VlIHRoYXQgdGhpcyBpcyBpbnRyb2R1Y2luZyBzdXBwb3J0IGZvciBJUC1pbi1JUCwgSVB2Ni1pbi1JUHY0IChTSVQpLCBhbmQgSVB2Ni1pbi1JUHY2IHR1bm5lbHMgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZmxvd3RhYmxlIG9mZmxvYWQuIEl0J3MgbW9kaWZ5aW5nIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljIGFuZCB0aGUgdHVubmVsIGRyaXZlcnMgdG8gaGFuZGxlIGZpbGxpbmcgdGhlIGZvcndhcmQgcGF0aCBhbmQgcHVzaGluZyB0aGUgdHVubmVsIGhlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZGlyZWN0bHkgdG91Y2hpbmcgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYywgc28gSSBoYXZlIHRvIHRyZWF0IHRoaXMgYXMgaGlnaCBwcmlvcml0eS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cblRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nOiB0cnVlYCBhbmQgd2lsbCBmb2N1cyBvbiB0aG9zZSBsaXN0ZWQgc3ltYm9scy4gQW5kLCBJIHdpbGwgZW5hYmxlOiBgTkZfRkxPV19UQUJMRWAsIGBORVRfSVBJUGAsIGBJUFY2X1NJVGAsIGFuZCBgSVBWNl9UVU5ORUxgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY2NiwiT3V0cHV0VG9rZW5zIjoyNjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6Mjk6MzIuNDUwNDMyMzY2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5OTc5NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiSVBWNl9TSVRcIixcbiAgICBcIklQVjZfVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBpcDZfdHVubmVsX2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJuZl9mbG93X3R1bm5lbF9pcF9wdXNoXCIsXG4gICAgXCJuZl9mbG93X3R1bm5lbF9pcDZfcHVzaFwiLFxuICAgIFwibmZfZmxvd190dW5uZWxfcHVzaFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2xvb2t1cFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXBfaG9va1wiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va1wiLFxuICAgIFwibmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwibmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgSVAtaW4tSVAsIFNJVCAoSVB2Ni1pbi1JUHY0KSwgYW5kIElQdjYtaW4tSVB2NiB0dW5uZWxzIGluIHRoZSBuZXRmaWx0ZXIgZmxvd3RhYmxlIG9mZmxvYWQuIEl0IG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBsb2dpYyBhbmQgdHVubmVsIGRyaXZlcnMgdG8gc3VwcG9ydCBmaWxsaW5nIHRoZSBmb3J3YXJkIHBhdGggYW5kIHB1c2hpbmcgdHVubmVsIGhlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkVUX0lQSVBcIixcbiAgICBcIklQVjZfU0lUXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwaXA2X3R1bm5lbF9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwibmZfZmxvd190dW5uZWxfaXBfcHVzaFwiLFxuICAgIFwibmZfZmxvd190dW5uZWxfaXA2X3B1c2hcIixcbiAgICBcIm5mX2Zsb3dfdHVubmVsX3B1c2hcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9sb29rdXBcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwX2hvb2tcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tcIixcbiAgICBcIm5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcIm5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIElQLWluLUlQLCBTSVQgKElQdjYtaW4tSVB2NCksIGFuZCBJUHY2LWluLUlQdjYgdHVubmVscyBpbiB0aGUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBvZmZsb2FkLiBJdCBtb2RpZmllcyBjb3JlIG5ldGZpbHRlciBmbG93dGFibGUgbG9naWMgYW5kIHR1bm5lbCBkcml2ZXJzIHRvIHN1cHBvcnQgZmlsbGluZyB0aGUgZm9yd2FyZCBwYXRoIGFuZCBwdXNoaW5nIHR1bm5lbCBoZWFkZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hmr2[1] Phase: Succeeded StartedAt: 2026-07-10 01:29:43 +0000 UTC FinishedAt: 2026-07-10 01:29:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-10 01:29:43 +0000 UTC FinishedAt: 2026-07-10 01:29:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2] Phase: Succeeded StartedAt: 2026-07-10 01:29:43 +0000 UTC FinishedAt: 2026-07-10 05:57:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-10 01:29:43 +0000 UTC FinishedAt: 2026-07-10 05:57:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-10 01:29:43 +0000 UTC FinishedAt: 2026-07-10 01:30:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-10 01:29:43 +0000 UTC FinishedAt: 2026-07-10 01:30:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4hmr2/series-workflow4hmr2-convert-artifact-3234346076/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-10 01:30:28 +0000 UTC FinishedAt: 2026-07-10 02:06:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-10 01:30:28 +0000 UTC FinishedAt: 2026-07-10 02:06:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8a561511-81b3-4753-a15b-b1c1befebc81,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-workflow4hmr2/series-workflow4hmr2-convert-artifact-3234346076/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": "fade0fa5-820b-4fbb-ad82-872a02bd4de0", "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-workflow4hmr2/series-workflow4hmr2-build-action-261777290/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-10 01:30:28 +0000 UTC FinishedAt: 2026-07-10 02:06:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8a561511-81b3-4753-a15b-b1c1befebc81,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-workflow4hmr2/series-workflow4hmr2-convert-artifact-3234346076/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": "fade0fa5-820b-4fbb-ad82-872a02bd4de0", "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-workflow4hmr2/series-workflow4hmr2-build-action-261777290/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-10 02:06:52 +0000 UTC FinishedAt: 2026-07-10 02:06:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-10 02:06:52 +0000 UTC FinishedAt: 2026-07-10 02:06:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-10 02:06:52 +0000 UTC FinishedAt: 2026-07-10 02:07:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-10 02:06:52 +0000 UTC FinishedAt: 2026-07-10 02:07:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4hmr2/series-workflow4hmr2-convert-artifact-3661434779/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-10 02:07:02 +0000 UTC FinishedAt: 2026-07-10 02:09:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-10 02:07:02 +0000 UTC FinishedAt: 2026-07-10 02:09:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fade0fa5-820b-4fbb-ad82-872a02bd4de0,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-workflow4hmr2/series-workflow4hmr2-build-action-261777290/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-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-10 02:09:18 +0000 UTC FinishedAt: 2026-07-10 02:09:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-10 02:09:18 +0000 UTC FinishedAt: 2026-07-10 02:09:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-10 02:09:18 +0000 UTC FinishedAt: 2026-07-10 02:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-10 02:09:18 +0000 UTC FinishedAt: 2026-07-10 02:52:22 +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:*8a561511-81b3-4753-a15b-b1c1befebc81,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-workflow4hmr2/series-workflow4hmr2-convert-artifact-3661434779/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": "e7430f41-086a-4be0-bed8-e3c2b9d3bc86", "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-workflow4hmr2/series-workflow4hmr2-build-action-1015839551/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-10 02:09:18 +0000 UTC FinishedAt: 2026-07-10 02:52:12 +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:*8a561511-81b3-4753-a15b-b1c1befebc81,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-workflow4hmr2/series-workflow4hmr2-convert-artifact-3661434779/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": "e7430f41-086a-4be0-bed8-e3c2b9d3bc86", "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-workflow4hmr2/series-workflow4hmr2-build-action-1015839551/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-10 02:52:22 +0000 UTC FinishedAt: 2026-07-10 02:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-10 02:52:22 +0000 UTC FinishedAt: 2026-07-10 02:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-10 02:52:22 +0000 UTC FinishedAt: 2026-07-10 02:55:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-10 02:52:22 +0000 UTC FinishedAt: 2026-07-10 02:54:53 +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:*e7430f41-086a-4be0-bed8-e3c2b9d3bc86,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-workflow4hmr2/series-workflow4hmr2-build-action-1015839551/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-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-10 02:55:03 +0000 UTC FinishedAt: 2026-07-10 05:57:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-10 02:55:03 +0000 UTC FinishedAt: 2026-07-10 05:57:47 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"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:*fade0fa5-820b-4fbb-ad82-872a02bd4de0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e7430f41-086a-4be0-bed8-e3c2b9d3bc86,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-workflow4hmr2/series-workflow4hmr2-build-action-261777290/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-workflow4hmr2/series-workflow4hmr2-build-action-1015839551/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-10 02:55:03 +0000 UTC FinishedAt: 2026-07-10 02:55:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-10 02:55:03 +0000 UTC FinishedAt: 2026-07-10 02:55: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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"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-workflow4hmr2/series-workflow4hmr2-convert-artifact-3687947412/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-10 02:55:03 +0000 UTC FinishedAt: 2026-07-10 02:55:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-10 02:55:03 +0000 UTC FinishedAt: 2026-07-10 02:55:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-10 02:55:03 +0000 UTC FinishedAt: 2026-07-10 02:55:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-10 02:55:14 +0000 UTC FinishedAt: 2026-07-10 05:57:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hmr2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipip6_tunnel_fill_forward_path","nf_flow_tunnel_ip_push","nf_flow_tunnel_ip6_push","nf_flow_tunnel_push","nf_flow_offload_lookup","nf_flow_offload_ipv6_lookup","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_dev_fill_forward_path","nft_flow_tunnel_update_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NET_IPIP","IPV6_SIT","IPV6_TUNNEL"],"series_id":"6642fb72-c08f-4d5b-9289-8aa8bf20bb05","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-10 02:55:14 +0000 UTC FinishedAt: 2026-07-10 05:57:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fade0fa5-820b-4fbb-ad82-872a02bd4de0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e7430f41-086a-4be0-bed8-e3c2b9d3bc86,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-workflow4hmr2/series-workflow4hmr2-build-action-261777290/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-workflow4hmr2/series-workflow4hmr2-build-action-1015839551/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-workflow4hmr2/series-workflow4hmr2-convert-artifact-3687947412/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,}